// Probe: what the broker and harness do today with the shipped coder role. import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; const tree = process.argv[2]; const { Store } = await import(join(tree, 'packages/bus/src/store.mjs')); const { Broker } = await import(join(tree, 'packages/bus/src/broker.mjs')); const { busBusiness } = await import(join(tree, 'packages/bus/src/business.mjs')); const { validateBusinessDocument, resolveInstance } = await import(join(tree, 'packages/business/src/index.mjs')); const { businessDoc, REPO_ROLES, systemFor } = await import(join(tree, 'packages/business/tests/helpers.mjs')); const { typedTools } = await import(join(tree, 'packages/harness/src/tools.mjs')); const root = mkdtempSync(join(tmpdir(), 'r73-probe-')); try { const business = validateBusinessDocument(businessDoc(root, 'demo'), join(root, 'businesses', 'demo.json'), { rolesDir: REPO_ROLES }); const resolved = Object.fromEntries(Object.keys(business.roles).map((i) => [i, resolveInstance({ system: systemFor(root), business, instance: i })])); const store = new Store(root); const b = new Broker({ store, businesses: { demo: busBusiness(business, resolved) } }); const c = b.bindLaunch({ business: 'demo', role: 'coder', run: 'coder-run', harness: 'pi', address: 'coder-run' }); b.request(c, { verb: 'role.claim', args: {} }); const options = [{ key: 'yes', text: 'Allow' }, { key: 'no', text: 'Decline' }]; for (const action of ['task.reassign', 'task.scope.change']) { const d = b.request(c, { verb: 'decision.raise', args: { action, question: 'Allow?', options, recommendation: 'no', blocking: false } }); console.log(action, 'class', d.class, 'route_to', d.route_to); } console.log('coder tools with tracker:', typedTools({ resolved: resolved.coder, tracker: true }).map((t) => t.name).join(',')); store.close(); } finally { rmSync(root, { recursive: true, force: true }); }