@cluesmith/codev 3.2.3 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard-dist/assets/index-BZRTEMtH.css +32 -0
- package/dashboard-dist/assets/{index-BZ1x7x1X.js → index-JCbkpAcV.js} +33 -33
- package/dashboard-dist/assets/index-JCbkpAcV.js.map +1 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +173 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/attach.js +2 -2
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +16 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/inbox.d.ts +42 -0
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -0
- package/dist/agent-farm/commands/inbox.js +129 -0
- package/dist/agent-farm/commands/inbox.js.map +1 -0
- package/dist/agent-farm/commands/interrupt.d.ts +20 -0
- package/dist/agent-farm/commands/interrupt.d.ts.map +1 -0
- package/dist/agent-farm/commands/interrupt.js +65 -0
- package/dist/agent-farm/commands/interrupt.js.map +1 -0
- package/dist/agent-farm/commands/reset/constants.d.ts +52 -0
- package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/constants.js +52 -0
- package/dist/agent-farm/commands/reset/constants.js.map +1 -0
- package/dist/agent-farm/commands/reset/context.d.ts +230 -0
- package/dist/agent-farm/commands/reset/context.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/context.js +428 -0
- package/dist/agent-farm/commands/reset/context.js.map +1 -0
- package/dist/agent-farm/commands/reset/index.d.ts +192 -0
- package/dist/agent-farm/commands/reset/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/index.js +488 -0
- package/dist/agent-farm/commands/reset/index.js.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts +97 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.js +149 -0
- package/dist/agent-farm/commands/reset/receipt.js.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts +117 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.js +313 -0
- package/dist/agent-farm/commands/reset/reorient.js.map +1 -0
- package/dist/agent-farm/commands/reset.d.ts +19 -0
- package/dist/agent-farm/commands/reset.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset.js +292 -0
- package/dist/agent-farm/commands/reset.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts +2 -2
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +52 -11
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/setup.d.ts +4 -1
- package/dist/agent-farm/commands/setup.d.ts.map +1 -1
- package/dist/agent-farm/commands/setup.js +8 -4
- package/dist/agent-farm/commands/setup.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +116 -6
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +345 -74
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +13 -1
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +105 -9
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/tower-sweep-husks.d.ts +6 -0
- package/dist/agent-farm/commands/tower-sweep-husks.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower-sweep-husks.js +77 -0
- package/dist/agent-farm/commands/tower-sweep-husks.js.map +1 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +34 -0
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/commands/whoami.d.ts +65 -0
- package/dist/agent-farm/commands/whoami.d.ts.map +1 -0
- package/dist/agent-farm/commands/whoami.js +196 -0
- package/dist/agent-farm/commands/whoami.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +80 -1
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/mailbox.d.ts +222 -0
- package/dist/agent-farm/db/mailbox.d.ts.map +1 -0
- package/dist/agent-farm/db/mailbox.js +304 -0
- package/dist/agent-farm/db/mailbox.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +35 -0
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +45 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/builder-lookup.d.ts +1 -1
- package/dist/agent-farm/lib/builder-lookup.js +2 -2
- package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
- package/dist/agent-farm/lib/reconnect-backoff.d.ts +54 -0
- package/dist/agent-farm/lib/reconnect-backoff.d.ts.map +1 -0
- package/dist/agent-farm/lib/reconnect-backoff.js +47 -0
- package/dist/agent-farm/lib/reconnect-backoff.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +16 -6
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +37 -6
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +69 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +218 -27
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/architect-session-holder.d.ts +133 -0
- package/dist/agent-farm/servers/architect-session-holder.d.ts.map +1 -0
- package/dist/agent-farm/servers/architect-session-holder.js +268 -0
- package/dist/agent-farm/servers/architect-session-holder.js.map +1 -0
- package/dist/agent-farm/servers/cron-delivery.d.ts +72 -0
- package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/cron-delivery.js +80 -0
- package/dist/agent-farm/servers/cron-delivery.js.map +1 -0
- package/dist/agent-farm/servers/delayed-send.d.ts +85 -0
- package/dist/agent-farm/servers/delayed-send.d.ts.map +1 -0
- package/dist/agent-farm/servers/delayed-send.js +165 -0
- package/dist/agent-farm/servers/delayed-send.js.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts +67 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.js +113 -0
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +370 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.js +617 -0
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +125 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.js +425 -0
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -0
- package/dist/agent-farm/servers/message-write.d.ts +53 -1
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +63 -0
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +23 -4
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/process-census.d.ts +41 -0
- package/dist/agent-farm/servers/process-census.d.ts.map +1 -0
- package/dist/agent-farm/servers/process-census.js +62 -0
- package/dist/agent-farm/servers/process-census.js.map +1 -0
- package/dist/agent-farm/servers/render-gate.d.ts +141 -0
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -0
- package/dist/agent-farm/servers/render-gate.js +251 -0
- package/dist/agent-farm/servers/render-gate.js.map +1 -0
- package/dist/agent-farm/servers/session-log-sweep.d.ts +93 -0
- package/dist/agent-farm/servers/session-log-sweep.d.ts.map +1 -0
- package/dist/agent-farm/servers/session-log-sweep.js +165 -0
- package/dist/agent-farm/servers/session-log-sweep.js.map +1 -0
- package/dist/agent-farm/servers/session-submit.d.ts +90 -0
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -0
- package/dist/agent-farm/servers/session-submit.js +127 -0
- package/dist/agent-farm/servers/session-submit.js.map +1 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.d.ts +87 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.d.ts.map +1 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.js +129 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.js.map +1 -0
- package/dist/agent-farm/servers/tower-cron.d.ts +10 -7
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +58 -53
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts +14 -2
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +128 -19
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-messages.d.ts +38 -1
- package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-messages.js +106 -1
- package/dist/agent-farm/servers/tower-messages.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +16 -4
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +807 -99
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +241 -15
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +17 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +139 -124
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +63 -4
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-types.d.ts +2 -1
- package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +99 -1
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +242 -6
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +6 -21
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/servers/write-queue.d.ts +35 -0
- package/dist/agent-farm/servers/write-queue.d.ts.map +1 -0
- package/dist/agent-farm/servers/write-queue.js +56 -0
- package/dist/agent-farm/servers/write-queue.js.map +1 -0
- package/dist/agent-farm/state.d.ts +6 -1
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +5 -2
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +39 -0
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.d.ts +2 -2
- package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.js +3 -3
- package/dist/agent-farm/utils/agent-names.js.map +1 -1
- package/dist/agent-farm/utils/architect-name.d.ts +2 -2
- package/dist/agent-farm/utils/architect-name.d.ts.map +1 -1
- package/dist/agent-farm/utils/architect-name.js +3 -3
- package/dist/agent-farm/utils/architect-name.js.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +13 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +33 -1
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/harness.d.ts +103 -7
- package/dist/agent-farm/utils/harness.d.ts.map +1 -1
- package/dist/agent-farm/utils/harness.js +126 -19
- package/dist/agent-farm/utils/harness.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -32
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -2
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +7 -6
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/agy-auth-cache.d.ts +97 -0
- package/dist/commands/consult/agy-auth-cache.d.ts.map +1 -0
- package/dist/commands/consult/agy-auth-cache.js +320 -0
- package/dist/commands/consult/agy-auth-cache.js.map +1 -0
- package/dist/commands/consult/cli-options.d.ts +34 -0
- package/dist/commands/consult/cli-options.d.ts.map +1 -0
- package/dist/commands/consult/cli-options.js +67 -0
- package/dist/commands/consult/cli-options.js.map +1 -0
- package/dist/commands/consult/index.d.ts +56 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +330 -27
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/consult/metrics.d.ts +42 -0
- package/dist/commands/consult/metrics.d.ts.map +1 -1
- package/dist/commands/consult/metrics.js +129 -9
- package/dist/commands/consult/metrics.js.map +1 -1
- package/dist/commands/doctor.d.ts +28 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +258 -22
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/checks.d.ts +23 -0
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +60 -0
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/config.d.ts +20 -0
- package/dist/commands/porch/config.d.ts.map +1 -1
- package/dist/commands/porch/config.js +20 -0
- package/dist/commands/porch/config.js.map +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +32 -36
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +2 -41
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/update.d.ts +4 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +9 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/config.d.ts +70 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +67 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/consult-lanes.d.ts +149 -0
- package/dist/lib/consult-lanes.d.ts.map +1 -0
- package/dist/lib/consult-lanes.js +360 -0
- package/dist/lib/consult-lanes.js.map +1 -0
- package/dist/lib/default-branch.d.ts +1 -1
- package/dist/lib/default-branch.js +1 -1
- package/dist/lib/github.js +1 -1
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/gitignore.d.ts +25 -2
- package/dist/lib/gitignore.d.ts.map +1 -1
- package/dist/lib/gitignore.js +70 -0
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/migration-backup-audit.d.ts +64 -0
- package/dist/lib/migration-backup-audit.d.ts.map +1 -0
- package/dist/lib/migration-backup-audit.js +145 -0
- package/dist/lib/migration-backup-audit.js.map +1 -0
- package/dist/lib/prompt-behavior-metrics.d.ts +67 -0
- package/dist/lib/prompt-behavior-metrics.d.ts.map +1 -0
- package/dist/lib/prompt-behavior-metrics.js +290 -0
- package/dist/lib/prompt-behavior-metrics.js.map +1 -0
- package/dist/lib/protocol-drift-audit.d.ts +118 -0
- package/dist/lib/protocol-drift-audit.d.ts.map +1 -0
- package/dist/lib/protocol-drift-audit.js +217 -0
- package/dist/lib/protocol-drift-audit.js.map +1 -0
- package/dist/lib/scaffold.d.ts +10 -3
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +29 -26
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/lib/skeleton.d.ts +22 -1
- package/dist/lib/skeleton.d.ts.map +1 -1
- package/dist/lib/skeleton.js +120 -0
- package/dist/lib/skeleton.js.map +1 -1
- package/dist/lib/test-env.d.ts +74 -0
- package/dist/lib/test-env.d.ts.map +1 -0
- package/dist/lib/test-env.js +92 -0
- package/dist/lib/test-env.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +9 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +32 -6
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +156 -4
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +307 -42
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/ring-buffer.d.ts +39 -6
- package/dist/terminal/ring-buffer.d.ts.map +1 -1
- package/dist/terminal/ring-buffer.js +74 -6
- package/dist/terminal/ring-buffer.js.map +1 -1
- package/dist/terminal/session-manager.d.ts +129 -0
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +337 -44
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +91 -0
- package/dist/terminal/session-screen.d.ts.map +1 -0
- package/dist/terminal/session-screen.js +135 -0
- package/dist/terminal/session-screen.js.map +1 -0
- package/dist/terminal/shellper-client.d.ts +19 -4
- package/dist/terminal/shellper-client.d.ts.map +1 -1
- package/dist/terminal/shellper-client.js +70 -8
- package/dist/terminal/shellper-client.js.map +1 -1
- package/dist/terminal/shellper-main.js +2 -1
- package/dist/terminal/shellper-main.js.map +1 -1
- package/dist/terminal/shellper-process.d.ts +1 -1
- package/dist/terminal/shellper-process.d.ts.map +1 -1
- package/dist/terminal/shellper-process.js +33 -9
- package/dist/terminal/shellper-process.js.map +1 -1
- package/dist/terminal/shellper-protocol.d.ts +40 -2
- package/dist/terminal/shellper-protocol.d.ts.map +1 -1
- package/dist/terminal/shellper-protocol.js +72 -5
- package/dist/terminal/shellper-protocol.js.map +1 -1
- package/dist/terminal/shellper-replay-buffer.d.ts +69 -7
- package/dist/terminal/shellper-replay-buffer.d.ts.map +1 -1
- package/dist/terminal/shellper-replay-buffer.js +167 -31
- package/dist/terminal/shellper-replay-buffer.js.map +1 -1
- package/package.json +11 -9
- package/skeleton/.claude/skills/afx/SKILL.md +27 -1
- package/skeleton/.claude/skills/arch-init/SKILL.md +135 -0
- package/skeleton/.claude/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.claude/skills/codev/SKILL.md +33 -2
- package/skeleton/.claude/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/afx/SKILL.md +170 -0
- package/skeleton/.codex/skills/arch-init/SKILL.md +135 -0
- package/skeleton/.codex/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.codex/skills/codev/SKILL.md +90 -0
- package/skeleton/.codex/skills/consult/SKILL.md +96 -0
- package/skeleton/.codex/skills/generate-image/SKILL.md +45 -0
- package/skeleton/.codex/skills/porch/SKILL.md +60 -0
- package/skeleton/.codex/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/update-arch-docs/SKILL.md +132 -0
- package/skeleton/protocols/air/builder-prompt.md +28 -47
- package/skeleton/protocols/air/consult-types/impl-review.md +17 -34
- package/skeleton/protocols/air/consult-types/pr-review.md +14 -37
- package/skeleton/protocols/air/prompts/implement.md +20 -73
- package/skeleton/protocols/air/prompts/pr.md +22 -54
- package/skeleton/protocols/air/protocol.md +40 -71
- package/skeleton/protocols/aspir/builder-prompt.md +29 -66
- package/skeleton/protocols/aspir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/aspir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/aspir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/aspir/prompts/implement.md +27 -196
- package/skeleton/protocols/aspir/prompts/plan.md +21 -85
- package/skeleton/protocols/aspir/prompts/review.md +29 -228
- package/skeleton/protocols/aspir/prompts/specify.md +25 -111
- package/skeleton/protocols/aspir/protocol.json +10 -0
- package/skeleton/protocols/aspir/protocol.md +36 -82
- package/skeleton/protocols/bugfix/builder-prompt.md +23 -45
- package/skeleton/protocols/bugfix/consult-types/impl-review.md +21 -45
- package/skeleton/protocols/bugfix/consult-types/pr-review.md +18 -52
- package/skeleton/protocols/bugfix/prompts/fix.md +16 -61
- package/skeleton/protocols/bugfix/prompts/investigate.md +18 -62
- package/skeleton/protocols/bugfix/prompts/pr.md +22 -57
- package/skeleton/protocols/bugfix/protocol.md +44 -50
- package/skeleton/protocols/experiment/builder-prompt.md +25 -58
- package/skeleton/protocols/experiment/protocol.md +22 -188
- package/skeleton/protocols/experiment/templates/notes.md +11 -71
- package/skeleton/protocols/maintain/builder-prompt.md +24 -45
- package/skeleton/protocols/maintain/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/maintain/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/maintain/prompts/maintain.md +1 -1
- package/skeleton/protocols/maintain/protocol.md +32 -266
- package/skeleton/protocols/maintain/templates/maintenance-run.md +11 -0
- package/skeleton/protocols/pir/builder-prompt.md +30 -64
- package/skeleton/protocols/pir/consult-types/impl-review.md +17 -50
- package/skeleton/protocols/pir/consult-types/pr-review.md +11 -40
- package/skeleton/protocols/pir/prompts/implement.md +1 -2
- package/skeleton/protocols/pir/prompts/plan.md +0 -3
- package/skeleton/protocols/pir/prompts/review.md +1 -1
- package/skeleton/protocols/pir/protocol.md +54 -177
- package/skeleton/protocols/research/builder-prompt.md +27 -58
- package/skeleton/protocols/research/protocol.md +28 -153
- package/skeleton/protocols/spike/builder-prompt.md +30 -48
- package/skeleton/protocols/spike/protocol.md +24 -107
- package/skeleton/protocols/spike/templates/findings.md +9 -39
- package/skeleton/protocols/spir/builder-prompt.md +33 -62
- package/skeleton/protocols/spir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/spir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/spir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/spir/prompts/implement.md +26 -195
- package/skeleton/protocols/spir/prompts/plan.md +20 -84
- package/skeleton/protocols/spir/prompts/review.md +28 -227
- package/skeleton/protocols/spir/prompts/specify.md +24 -110
- package/skeleton/protocols/spir/protocol.json +10 -0
- package/skeleton/protocols/spir/protocol.md +84 -633
- package/skeleton/protocols/spir/templates/plan.md +28 -147
- package/skeleton/protocols/spir/templates/review.md +21 -80
- package/skeleton/protocols/spir/templates/spec.md +24 -118
- package/skeleton/resources/commands/agent-farm.md +348 -0
- package/skeleton/resources/commands/codev.md +5 -0
- package/skeleton/resources/commands/consult.md +262 -8
- package/skeleton/resources/commands/overview.md +1 -0
- package/skeleton/roles/architect.md +67 -306
- package/skeleton/roles/builder.md +77 -191
- package/skeleton/templates/AGENTS.md +2 -0
- package/skeleton/templates/CLAUDE.md +2 -0
- package/templates/tower.html +39 -2
- package/dashboard-dist/assets/index-BZ1x7x1X.js.map +0 -1
- package/dashboard-dist/assets/index-DB1KBSNE.css +0 -32
- package/dist/agent-farm/servers/send-buffer.d.ts +0 -59
- package/dist/agent-farm/servers/send-buffer.d.ts.map +0 -1
- package/dist/agent-farm/servers/send-buffer.js +0 -103
- package/dist/agent-farm/servers/send-buffer.js.map +0 -1
- package/skeleton/porch/prompts/defend.md +0 -108
- package/skeleton/porch/prompts/diagnose.md +0 -70
- package/skeleton/porch/prompts/evaluate.md +0 -132
- package/skeleton/porch/prompts/fix.md +0 -59
- package/skeleton/porch/prompts/implement.md +0 -88
- package/skeleton/porch/prompts/plan.md +0 -74
- package/skeleton/porch/prompts/pr.md +0 -84
- package/skeleton/porch/prompts/review.md +0 -249
- package/skeleton/porch/prompts/specify.md +0 -53
- package/skeleton/porch/prompts/test.md +0 -63
- package/skeleton/protocols/aspir/templates/plan.md +0 -184
- package/skeleton/protocols/aspir/templates/review.md +0 -120
- package/skeleton/protocols/aspir/templates/spec.md +0 -154
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `afx reset` — the command surface over the reset state machine (Spec 1273).
|
|
3
|
+
*
|
|
4
|
+
* This file is deliberately thin. It does three things and nothing else:
|
|
5
|
+
* resolves the target, binds REAL implementations to the orchestrator's ports,
|
|
6
|
+
* and prints the report. Every decision, every ordering rule and every refusal
|
|
7
|
+
* lives in `reset/index.ts`, where it is testable without Tower, a PTY, or a
|
|
8
|
+
* live builder.
|
|
9
|
+
*
|
|
10
|
+
* That split is the point. The dangerous part of reset is the ordering, and
|
|
11
|
+
* ordering is only provable if the thing that decides it has no I/O in it.
|
|
12
|
+
*
|
|
13
|
+
* Addressing, workspace detection and sender identity are reused verbatim from
|
|
14
|
+
* `afx send` — there is exactly one address resolver (the same rule `afx
|
|
15
|
+
* interrupt` follows).
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync, readdirSync, writeFileSync, statSync } from 'node:fs';
|
|
18
|
+
import { TowerClient } from '../lib/tower-client.js';
|
|
19
|
+
import { logger, fatal } from '../utils/logger.js';
|
|
20
|
+
import { findBuilderById } from '../lib/builder-lookup.js';
|
|
21
|
+
import { getConfig } from '../utils/index.js';
|
|
22
|
+
import { loadConfig } from '../../lib/config.js';
|
|
23
|
+
import { loadForgeConfig } from '../../lib/forge.js';
|
|
24
|
+
import { fetchIssue as fetchForgeIssue } from '../../lib/github.js';
|
|
25
|
+
import { buildPromptFromTemplate, buildResumeNotice } from './spawn-roles.js';
|
|
26
|
+
import { detectWorkspaceRoot, detectCurrentBuilderId } from './send.js';
|
|
27
|
+
import { resolveBuilderContext } from './reset/context.js';
|
|
28
|
+
import { formatResetReport, runReset, ResetPreflightError, } from './reset/index.js';
|
|
29
|
+
/** Same cap `afx send --file` enforces. One rule for architect-supplied files. */
|
|
30
|
+
const MAX_FILE_SIZE = 48 * 1024;
|
|
31
|
+
export async function reset(options) {
|
|
32
|
+
const target = options.builder;
|
|
33
|
+
if (!target) {
|
|
34
|
+
fatal('Must specify a builder. Usage: afx reset <builder>');
|
|
35
|
+
}
|
|
36
|
+
logger.header('Builder Context Reset');
|
|
37
|
+
const workspace = detectWorkspaceRoot() ?? undefined;
|
|
38
|
+
let from;
|
|
39
|
+
try {
|
|
40
|
+
from = detectCurrentBuilderId() ?? 'architect';
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
fatal(err instanceof Error ? err.message : String(err));
|
|
44
|
+
}
|
|
45
|
+
// `findBuilderById`, NOT `getBuilder`: the latter matches the id EXACTLY, so
|
|
46
|
+
// `afx reset 1273` would fail against a builder registered as `aspir-1273`
|
|
47
|
+
// while `afx send 1273` reached it fine. Reset must resolve targets the same
|
|
48
|
+
// way every other builder-addressed command does — a reset that cannot be
|
|
49
|
+
// addressed the way the architect already types addresses is a reset that
|
|
50
|
+
// gets typed wrong under pressure. `findBuilderById` also reports AMBIGUOUS
|
|
51
|
+
// with the candidate list rather than silently picking one.
|
|
52
|
+
const builder = findBuilderById(target);
|
|
53
|
+
if (!builder) {
|
|
54
|
+
fatal(`No builder '${target}' in this workspace (or the id is ambiguous — see above). ` +
|
|
55
|
+
`Check 'afx status'. Reset needs the registry row for the worktree and branch.`);
|
|
56
|
+
}
|
|
57
|
+
if (!builder.worktree || !builder.branch) {
|
|
58
|
+
fatal(`Builder '${target}' has an incomplete registry row (worktree='${builder.worktree}', ` +
|
|
59
|
+
`branch='${builder.branch}'). Refusing to reset against unresolved state.`);
|
|
60
|
+
}
|
|
61
|
+
const client = new TowerClient();
|
|
62
|
+
if (!(await client.isRunning())) {
|
|
63
|
+
fatal('Tower is not running. Start it with: afx tower start');
|
|
64
|
+
}
|
|
65
|
+
const addendum = buildAddendum(options);
|
|
66
|
+
const config = getConfig();
|
|
67
|
+
const userConfig = loadConfig(config.workspaceRoot);
|
|
68
|
+
const context = resolveBuilderContext({
|
|
69
|
+
fs: {
|
|
70
|
+
exists: (p) => existsSync(p),
|
|
71
|
+
read: (p) => safeRead(p),
|
|
72
|
+
listDirs: (p) => {
|
|
73
|
+
try {
|
|
74
|
+
return readdirSync(p, { withFileTypes: true })
|
|
75
|
+
.filter(e => e.isDirectory())
|
|
76
|
+
.map(e => e.name);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
builderId: builder.id,
|
|
84
|
+
worktree: builder.worktree,
|
|
85
|
+
branch: builder.branch,
|
|
86
|
+
issueNumber: builder.issueNumber === undefined ? undefined : String(builder.issueNumber),
|
|
87
|
+
taskText: builder.taskText,
|
|
88
|
+
modeOverride: options.mode,
|
|
89
|
+
customHarnesses: userConfig?.harness,
|
|
90
|
+
});
|
|
91
|
+
const terminal = buildTerminalPort(client, builder.terminalId, target, from, workspace);
|
|
92
|
+
try {
|
|
93
|
+
const result = await runReset({
|
|
94
|
+
context,
|
|
95
|
+
fs: buildFsPort(),
|
|
96
|
+
clock: realClock,
|
|
97
|
+
terminal,
|
|
98
|
+
buildSpawnPrompt: (protocol, templateContext) => buildPromptFromTemplate(config, protocol, templateContext),
|
|
99
|
+
buildResumeNotice,
|
|
100
|
+
issue: await fetchIssuePayload(context.issueNumber, config.workspaceRoot),
|
|
101
|
+
addendum,
|
|
102
|
+
dryRun: options.dryRun,
|
|
103
|
+
interruptFirst: options.interruptFirst,
|
|
104
|
+
receiptTimeoutMs: options.timeout ? options.timeout * 1000 : undefined,
|
|
105
|
+
minBytes: options.minBytes,
|
|
106
|
+
quietWindowMs: options.quietWindow,
|
|
107
|
+
});
|
|
108
|
+
if (result.outcome === 'dry-run') {
|
|
109
|
+
logger.info('DRY RUN — nothing was written to the builder.\n');
|
|
110
|
+
logger.info('--- save request (what the builder is asked to write) ---');
|
|
111
|
+
console.log(result.saveRequest);
|
|
112
|
+
logger.info('--- inline re-orientation ---');
|
|
113
|
+
console.log(result.payload?.inline ?? '');
|
|
114
|
+
logger.info(`--- long form would be written to ${result.reorientPath} ---`);
|
|
115
|
+
console.log(result.payload?.longForm ?? '');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
console.log(formatResetReport(result));
|
|
119
|
+
if (result.outcome === 'aborted') {
|
|
120
|
+
// Non-zero: an aborted reset is a failure the caller must see, even though
|
|
121
|
+
// it is the SAFE outcome. Silence here would let a script treat "refused
|
|
122
|
+
// to clear" as "cleared".
|
|
123
|
+
process.exitCode = 1;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
logger.success(`Builder ${target} reset and re-oriented.`);
|
|
127
|
+
logger.info(`State file: ${result.statePath} (${result.stateBytes} bytes)`);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (err instanceof ResetPreflightError) {
|
|
131
|
+
fatal(err.message);
|
|
132
|
+
}
|
|
133
|
+
fatal(err instanceof Error ? err.message : String(err));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// ============================================================================
|
|
137
|
+
// Port bindings
|
|
138
|
+
// ============================================================================
|
|
139
|
+
const realClock = {
|
|
140
|
+
now: () => Date.now(),
|
|
141
|
+
sleep: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
|
|
142
|
+
};
|
|
143
|
+
function buildFsPort() {
|
|
144
|
+
return {
|
|
145
|
+
read: (p) => safeRead(p),
|
|
146
|
+
sizeOf: (p) => {
|
|
147
|
+
try {
|
|
148
|
+
return statSync(p).size;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
write: (p, content) => writeFileSync(p, content, 'utf-8'),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function safeRead(p) {
|
|
158
|
+
try {
|
|
159
|
+
return readFileSync(p, 'utf-8');
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function buildTerminalPort(client, terminalId, target, from, workspace) {
|
|
166
|
+
return {
|
|
167
|
+
async observe() {
|
|
168
|
+
if (!terminalId)
|
|
169
|
+
return { exists: false };
|
|
170
|
+
const t = await client.getTerminal(terminalId);
|
|
171
|
+
if (!t || t.status !== 'running')
|
|
172
|
+
return { exists: false };
|
|
173
|
+
// Both optional fields are forwarded AS-IS, including undefined. The
|
|
174
|
+
// orchestrator distinguishes "reported false" from "not reported", and
|
|
175
|
+
// collapsing either to a concrete value here would defeat that check at
|
|
176
|
+
// the boundary — `lastDataAt: 0` reads as decades of silence, and
|
|
177
|
+
// `writable: true` would assert a fact this Tower never supplied.
|
|
178
|
+
return { exists: true, lastDataAt: t.lastDataAt, writable: t.writable };
|
|
179
|
+
},
|
|
180
|
+
async sendMessage(message) {
|
|
181
|
+
const result = await client.sendMessage(target, message, {
|
|
182
|
+
from,
|
|
183
|
+
workspace,
|
|
184
|
+
fromWorkspace: workspace,
|
|
185
|
+
});
|
|
186
|
+
if (!result.ok)
|
|
187
|
+
throw new Error(result.error || 'Message delivery failed');
|
|
188
|
+
},
|
|
189
|
+
/**
|
|
190
|
+
* `raw: true`, NOT `escape: true`.
|
|
191
|
+
*
|
|
192
|
+
* Tower's escape route writes a hardcoded ESC and discards the message
|
|
193
|
+
* body, so binding this to `escape` would silently turn `/clear` into an
|
|
194
|
+
* interrupt: the run would report success while the builder kept its
|
|
195
|
+
* entire context. `raw` types the text as literal input, which is what the
|
|
196
|
+
* verified manual recipe used.
|
|
197
|
+
*/
|
|
198
|
+
async sendRaw(text) {
|
|
199
|
+
const result = await client.sendMessage(target, text, {
|
|
200
|
+
from,
|
|
201
|
+
workspace,
|
|
202
|
+
fromWorkspace: workspace,
|
|
203
|
+
raw: true,
|
|
204
|
+
});
|
|
205
|
+
if (!result.ok)
|
|
206
|
+
throw new Error(result.error || 'Raw write failed');
|
|
207
|
+
},
|
|
208
|
+
async sendEscape() {
|
|
209
|
+
const result = await client.sendMessage(target, '\x1b', {
|
|
210
|
+
from,
|
|
211
|
+
workspace,
|
|
212
|
+
fromWorkspace: workspace,
|
|
213
|
+
escape: true,
|
|
214
|
+
});
|
|
215
|
+
if (!result.ok)
|
|
216
|
+
throw new Error(result.error || 'Interrupt (ESC) failed');
|
|
217
|
+
},
|
|
218
|
+
/**
|
|
219
|
+
* Bound for real, not left undefined.
|
|
220
|
+
*
|
|
221
|
+
* When this was absent the orchestrator's `confirmClear` returned false on
|
|
222
|
+
* every production run, so the report always said "clear-unconfirmed" — a
|
|
223
|
+
* step that looked attempted and could never succeed outside tests.
|
|
224
|
+
*
|
|
225
|
+
* Returns `total` alongside the lines so confirmation can look only at
|
|
226
|
+
* output produced AFTER the clear. Reset writes into this same terminal, so
|
|
227
|
+
* without that window any pattern eventually matches reset's own text.
|
|
228
|
+
*/
|
|
229
|
+
async readOutput() {
|
|
230
|
+
if (!terminalId)
|
|
231
|
+
return null;
|
|
232
|
+
const output = await client.getTerminalOutput(terminalId, 200);
|
|
233
|
+
return output ? { lines: output.lines, total: output.total } : null;
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// ============================================================================
|
|
238
|
+
// Inputs
|
|
239
|
+
// ============================================================================
|
|
240
|
+
/**
|
|
241
|
+
* Assemble the architect addendum from `--note` and `--file`.
|
|
242
|
+
*
|
|
243
|
+
* `--file` reads from the CALLER's filesystem, exactly as `afx send --file`
|
|
244
|
+
* does, and reuses its 48KB cap. The worktree-containment rule applies to the
|
|
245
|
+
* state-file path override, not to this — the architect is reading their own
|
|
246
|
+
* notes, not instructing the builder where to write.
|
|
247
|
+
*/
|
|
248
|
+
function buildAddendum(options) {
|
|
249
|
+
const parts = [];
|
|
250
|
+
if (options.note)
|
|
251
|
+
parts.push(options.note);
|
|
252
|
+
if (options.file) {
|
|
253
|
+
if (!existsSync(options.file)) {
|
|
254
|
+
fatal(`File not found: ${options.file}`);
|
|
255
|
+
}
|
|
256
|
+
const buf = readFileSync(options.file);
|
|
257
|
+
if (buf.length > MAX_FILE_SIZE) {
|
|
258
|
+
fatal(`File too large: ${buf.length} bytes (max ${MAX_FILE_SIZE} bytes / 48KB)`);
|
|
259
|
+
}
|
|
260
|
+
parts.push(buf.toString('utf-8'));
|
|
261
|
+
}
|
|
262
|
+
return parts.length > 0 ? parts.join('\n\n') : undefined;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Fetch issue metadata for the long form, best-effort.
|
|
266
|
+
*
|
|
267
|
+
* A forge outage must not block a reset: phase 5 renders an explicit "could not
|
|
268
|
+
* be fetched" gap with a `gh issue view` recovery line, which is strictly better
|
|
269
|
+
* than aborting a reset the architect needs, and strictly better than silently
|
|
270
|
+
* omitting requirements.
|
|
271
|
+
*/
|
|
272
|
+
async function fetchIssuePayload(issueNumber, workspaceRoot) {
|
|
273
|
+
if (!issueNumber)
|
|
274
|
+
return undefined;
|
|
275
|
+
try {
|
|
276
|
+
const issue = await fetchForgeIssue(issueNumber, {
|
|
277
|
+
cwd: workspaceRoot,
|
|
278
|
+
forgeConfig: loadForgeConfig(workspaceRoot),
|
|
279
|
+
});
|
|
280
|
+
if (!issue)
|
|
281
|
+
return undefined;
|
|
282
|
+
return {
|
|
283
|
+
number: issueNumber,
|
|
284
|
+
title: issue.title,
|
|
285
|
+
body: issue.body || '(No description provided)',
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import type { SendOptions } from '../types.js';
|
|
|
17
17
|
export declare function detectWorkspaceRoot(): string | null;
|
|
18
18
|
/**
|
|
19
19
|
* Thrown when CWD is confirmed to be inside `.builders/<id>/` but the canonical
|
|
20
|
-
* builder identity cannot be verified against
|
|
20
|
+
* builder identity cannot be verified against `global.db`.
|
|
21
21
|
*
|
|
22
22
|
* We refuse to fall back to the bare worktree directory name (e.g. `bugfix-774`)
|
|
23
23
|
* here: that non-canonical id does not match any `builders.id` (`builder-bugfix-774`),
|
|
@@ -32,7 +32,7 @@ export declare class BuilderIdResolutionError extends Error {
|
|
|
32
32
|
constructor(message: string);
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Build an actionable message for a `
|
|
35
|
+
* Build an actionable message for a `global.db` open failure, naming the likely
|
|
36
36
|
* cause. A better-sqlite3 ABI mismatch (a `node` on PATH built for a different
|
|
37
37
|
* NODE_MODULE_VERSION than codev's native module) is the real-world trigger
|
|
38
38
|
* from issue #1094 and gets a specific reinstall hint.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAkBnD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAWxG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAyDtD;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAkBnD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAWxG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAyDtD;AAiGD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H9D"}
|
|
@@ -47,7 +47,7 @@ export function detectWorkspaceRoot() {
|
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Thrown when CWD is confirmed to be inside `.builders/<id>/` but the canonical
|
|
50
|
-
* builder identity cannot be verified against
|
|
50
|
+
* builder identity cannot be verified against `global.db`.
|
|
51
51
|
*
|
|
52
52
|
* We refuse to fall back to the bare worktree directory name (e.g. `bugfix-774`)
|
|
53
53
|
* here: that non-canonical id does not match any `builders.id` (`builder-bugfix-774`),
|
|
@@ -65,7 +65,7 @@ export class BuilderIdResolutionError extends Error {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
* Build an actionable message for a `
|
|
68
|
+
* Build an actionable message for a `global.db` open failure, naming the likely
|
|
69
69
|
* cause. A better-sqlite3 ABI mismatch (a `node` on PATH built for a different
|
|
70
70
|
* NODE_MODULE_VERSION than codev's native module) is the real-world trigger
|
|
71
71
|
* from issue #1094 and gets a specific reinstall hint.
|
|
@@ -77,7 +77,7 @@ export function describeStateDbOpenFailure(dbPath, worktreeDirName, err) {
|
|
|
77
77
|
? "This is a better-sqlite3 native-module ABI mismatch: the 'node' on your PATH differs from the one codev was built for. Reinstall codev under your current node (e.g. `npm install -g @cluesmith/codev`)."
|
|
78
78
|
: 'Check the file for corruption, a permissions problem, or a stale lock.';
|
|
79
79
|
return (`Cannot resolve builder identity for worktree '${worktreeDirName}': ` +
|
|
80
|
-
`failed to open
|
|
80
|
+
`failed to open global.db at ${dbPath} (${detail}). ${hint} ` +
|
|
81
81
|
`Refusing to send with an unverified identity — it would silently misroute to 'main' (issue #1094).`);
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
@@ -177,16 +177,16 @@ async function readStdin() {
|
|
|
177
177
|
}
|
|
178
178
|
return Buffer.concat(chunks).toString('utf-8').trim();
|
|
179
179
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Send a message to all builders via Tower API.
|
|
182
|
-
*/
|
|
183
180
|
async function sendToAll(client, message, workspace, from, options) {
|
|
184
181
|
// Bugfix #826: loadState is workspace-scoped (for the architect read).
|
|
185
182
|
// Builders are global per state.db; use the detected workspace root as
|
|
186
183
|
// scope. `process.cwd()` is a safe fallback when detection fails — the
|
|
187
184
|
// architect read returns [] and `--all` only uses `state.builders`.
|
|
188
185
|
const state = loadState(detectWorkspaceRoot() ?? process.cwd());
|
|
189
|
-
|
|
186
|
+
// Spec 1307 `--delay` + Spec 1313 mailbox: scheduled (delayed) and held
|
|
187
|
+
// (persisted, awaiting a clean prompt) are tracked separately from delivered.
|
|
188
|
+
// Reporting either as "Delivered" would claim a delivery that hasn't happened.
|
|
189
|
+
const results = { delivered: [], held: [], scheduled: [], failed: [] };
|
|
190
190
|
if (state.builders.length === 0) {
|
|
191
191
|
logger.warn('No active builders found.');
|
|
192
192
|
return results;
|
|
@@ -200,11 +200,25 @@ async function sendToAll(client, message, workspace, from, options) {
|
|
|
200
200
|
raw: options.raw,
|
|
201
201
|
noEnter: options.noEnter,
|
|
202
202
|
interrupt: options.interrupt,
|
|
203
|
+
// Spec 1307: each target's delivery is scheduled independently.
|
|
204
|
+
deliverAfter: options.delay,
|
|
203
205
|
});
|
|
204
206
|
if (!result.ok) {
|
|
205
207
|
throw new Error(result.error || 'Unknown error');
|
|
206
208
|
}
|
|
207
|
-
|
|
209
|
+
// Distinct outcomes, kept distinct (Spec 1307 `--delay` + Spec 1313 mailbox):
|
|
210
|
+
// a scheduled (delayed) or held (persisted, awaiting a clean prompt) message
|
|
211
|
+
// has NOT been delivered now — classifying either as "delivered" would claim a
|
|
212
|
+
// delivery that has not happened.
|
|
213
|
+
if (result.scheduled) {
|
|
214
|
+
results.scheduled.push(builder.id);
|
|
215
|
+
}
|
|
216
|
+
else if (result.held) {
|
|
217
|
+
results.held.push({ id: builder.id, reason: result.reason, mailboxId: result.mailboxId });
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
results.delivered.push(builder.id);
|
|
221
|
+
}
|
|
208
222
|
}
|
|
209
223
|
catch (error) {
|
|
210
224
|
logger.error(`Failed to send to ${builder.id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -270,8 +284,17 @@ export async function send(options) {
|
|
|
270
284
|
if (options.all) {
|
|
271
285
|
// Broadcast to all builders
|
|
272
286
|
const results = await sendToAll(client, message, workspace, from, options);
|
|
273
|
-
if (results.
|
|
274
|
-
logger.success(`
|
|
287
|
+
if (results.delivered.length > 0) {
|
|
288
|
+
logger.success(`Delivered to ${results.delivered.length} builder(s): ${results.delivered.join(', ')}`);
|
|
289
|
+
}
|
|
290
|
+
if (results.held.length > 0) {
|
|
291
|
+
const detail = results.held.map((h) => `${h.id} (${h.reason ?? 'pending'})`).join(', ');
|
|
292
|
+
logger.info(`Held for ${results.held.length} builder(s): ${detail}. ` +
|
|
293
|
+
`Each delivers automatically when its prompt is clear.`);
|
|
294
|
+
}
|
|
295
|
+
if (results.scheduled.length > 0) {
|
|
296
|
+
logger.success(`Scheduled for ${results.scheduled.length} builder(s) (+${options.delay}s): ${results.scheduled.join(', ')}`);
|
|
297
|
+
logger.info('Each is persisted and durable across a Tower restart; delivers onto a clear prompt when due. Inspect/cancel: afx inbox.');
|
|
275
298
|
}
|
|
276
299
|
if (results.failed.length > 0) {
|
|
277
300
|
logger.error(`Failed for ${results.failed.length} builder(s): ${results.failed.join(', ')}`);
|
|
@@ -287,11 +310,29 @@ export async function send(options) {
|
|
|
287
310
|
raw: options.raw,
|
|
288
311
|
noEnter: options.noEnter,
|
|
289
312
|
interrupt: options.interrupt,
|
|
313
|
+
deliverAfter: options.delay,
|
|
290
314
|
});
|
|
291
315
|
if (!result.ok) {
|
|
292
316
|
throw new Error(result.error || 'Unknown error');
|
|
293
317
|
}
|
|
294
|
-
|
|
318
|
+
// Report the real first outcome (Spec 1307 `--delay` + Spec 1313 mailbox). A
|
|
319
|
+
// scheduled message is deferred to a future time; a held message is persisted
|
|
320
|
+
// in the mailbox and delivers automatically once the target's prompt is clear
|
|
321
|
+
// (empty and render-verified) — neither is a failure, and neither has been
|
|
322
|
+
// delivered yet.
|
|
323
|
+
if (result.scheduled) {
|
|
324
|
+
logger.success(`Message scheduled for ${result.resolvedTo ?? target} (+${options.delay}s)` +
|
|
325
|
+
`${result.mailboxId ? ` — mailbox id ${result.mailboxId}` : ''}`);
|
|
326
|
+
logger.info('Persisted and durable across a Tower restart; delivers onto a clear prompt when due. Inspect/cancel: afx inbox.');
|
|
327
|
+
}
|
|
328
|
+
else if (result.held) {
|
|
329
|
+
logger.info(`Message held for ${result.resolvedTo ?? target} (${result.reason ?? 'pending'})` +
|
|
330
|
+
`${result.mailboxId ? ` — mailbox id ${result.mailboxId}` : ''}. ` +
|
|
331
|
+
`It delivers automatically when the prompt is clear.`);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
logger.success(`Message delivered to ${result.resolvedTo ?? target}`);
|
|
335
|
+
}
|
|
295
336
|
}
|
|
296
337
|
catch (error) {
|
|
297
338
|
fatal(error instanceof Error ? error.message : String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sBAAsB;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,yEAAyE;IACzE,6EAA6E;IAC7E,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,8EAA8E;IAC9E,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAChG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,eAAuB,EAAE,GAAY;IAC9F,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,sEAAsE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,WAAW;QACtB,CAAC,CAAC,0MAA0M;QAC5M,CAAC,CAAC,wEAAwE,CAAC;IAC7E,OAAO,CACL,iDAAiD,eAAe,KAAK;QACrE,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* 1. `symlinkConfigFiles` — root `.env`, `.codev/config.json`, and any
|
|
7
7
|
* `worktree.symlinks` glob matches. Idempotent: skips targets that
|
|
8
8
|
* already exist; adds missing.
|
|
9
|
-
* 2. `
|
|
9
|
+
* 2. `syncLocalConfigSnapshot` — refresh the main workspace's personal
|
|
10
|
+
* `.codev/config.local.json` into the builder as a non-symlink copy.
|
|
11
|
+
* 3. `runPostSpawnHooks` — each `worktree.postSpawn` command runs in
|
|
10
12
|
* its own bash subshell with cwd = worktree root. Output streams live.
|
|
11
13
|
*
|
|
12
14
|
* Use cases:
|
|
@@ -14,6 +16,7 @@
|
|
|
14
16
|
* - new entry added to `worktree.symlinks` or `worktree.postSpawn` after
|
|
15
17
|
* the builder was spawned
|
|
16
18
|
* - main added a new file matching an existing symlinks glob
|
|
19
|
+
* - main changed `.codev/config.local.json`; refresh the builder snapshot
|
|
17
20
|
* - a symlink was accidentally deleted inside the worktree
|
|
18
21
|
* - the original spawn aborted mid-setup; recovery
|
|
19
22
|
* - running setup for the first time on a builder that predates the config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAWH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChE"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* 1. `symlinkConfigFiles` — root `.env`, `.codev/config.json`, and any
|
|
7
7
|
* `worktree.symlinks` glob matches. Idempotent: skips targets that
|
|
8
8
|
* already exist; adds missing.
|
|
9
|
-
* 2. `
|
|
9
|
+
* 2. `syncLocalConfigSnapshot` — refresh the main workspace's personal
|
|
10
|
+
* `.codev/config.local.json` into the builder as a non-symlink copy.
|
|
11
|
+
* 3. `runPostSpawnHooks` — each `worktree.postSpawn` command runs in
|
|
10
12
|
* its own bash subshell with cwd = worktree root. Output streams live.
|
|
11
13
|
*
|
|
12
14
|
* Use cases:
|
|
@@ -14,6 +16,7 @@
|
|
|
14
16
|
* - new entry added to `worktree.symlinks` or `worktree.postSpawn` after
|
|
15
17
|
* the builder was spawned
|
|
16
18
|
* - main added a new file matching an existing symlinks glob
|
|
19
|
+
* - main changed `.codev/config.local.json`; refresh the builder snapshot
|
|
17
20
|
* - a symlink was accidentally deleted inside the worktree
|
|
18
21
|
* - the original spawn aborted mid-setup; recovery
|
|
19
22
|
* - running setup for the first time on a builder that predates the config
|
|
@@ -23,7 +26,7 @@
|
|
|
23
26
|
import { logger } from '../utils/logger.js';
|
|
24
27
|
import { getConfig, getWorktreeConfig } from '../utils/index.js';
|
|
25
28
|
import { findBuilderById } from '../lib/builder-lookup.js';
|
|
26
|
-
import { runPostSpawnHooks, symlinkConfigFiles } from './spawn-worktree.js';
|
|
29
|
+
import { runPostSpawnHooks, symlinkConfigFiles, syncLocalConfigSnapshot, } from './spawn-worktree.js';
|
|
27
30
|
export async function setup(options) {
|
|
28
31
|
if (!options.builderId) {
|
|
29
32
|
throw new Error('Usage: afx setup <builder-id>');
|
|
@@ -39,12 +42,13 @@ export async function setup(options) {
|
|
|
39
42
|
const { symlinks, postSpawn } = getWorktreeConfig(config.workspaceRoot);
|
|
40
43
|
logger.info(`Applying symlinks for ${builder.id}...`);
|
|
41
44
|
symlinkConfigFiles(config, builder.worktree);
|
|
45
|
+
const localConfigSynced = syncLocalConfigSnapshot(config, builder.worktree);
|
|
42
46
|
if (postSpawn.length === 0) {
|
|
43
|
-
if (symlinks.length === 0) {
|
|
47
|
+
if (symlinks.length === 0 && !localConfigSynced) {
|
|
44
48
|
logger.info('No worktree.symlinks or worktree.postSpawn configured. Nothing further to do.');
|
|
45
49
|
}
|
|
46
50
|
else {
|
|
47
|
-
logger.success(`Setup complete for ${builder.id} (
|
|
51
|
+
logger.success(`Setup complete for ${builder.id} (no postSpawn configured)`);
|
|
48
52
|
}
|
|
49
53
|
return;
|
|
50
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,SAAS,wBAAwB,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,CAAC,EAAE,uDAAuD,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAExE,MAAM,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IACtD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,MAAM,0BAA0B,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC;IACxF,MAAM,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC"}
|