@cluesmith/codev 3.2.4 → 3.3.1
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-D3XaKpZW.js} +46 -44
- package/dashboard-dist/assets/index-D3XaKpZW.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 +154 -0
- package/dist/agent-farm/cli.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 +34 -0
- package/dist/agent-farm/commands/reset.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset.js +309 -0
- package/dist/agent-farm/commands/reset.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +49 -8
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +105 -6
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +289 -66
- 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 +80 -8
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +13 -0
- package/dist/agent-farm/commands/tower.js.map +1 -1
- 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 +64 -0
- package/dist/agent-farm/lib/reconnect-backoff.d.ts.map +1 -0
- package/dist/agent-farm/lib/reconnect-backoff.js +57 -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 +225 -30
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/canvas-relay.d.ts +60 -0
- package/dist/agent-farm/servers/canvas-relay.d.ts.map +1 -0
- package/dist/agent-farm/servers/canvas-relay.js +376 -0
- package/dist/agent-farm/servers/canvas-relay.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 +19 -0
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +100 -4
- package/dist/agent-farm/servers/overview.js.map +1 -1
- 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-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/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 +78 -16
- 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 +826 -145
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +188 -34
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +23 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +134 -127
- 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 +64 -1
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +168 -1
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts +6 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +95 -57
- 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/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/agent-farm/utils/message-format.d.ts +8 -0
- package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.js +20 -0
- package/dist/agent-farm/utils/message-format.js.map +1 -1
- package/dist/agent-farm/utils/server-utils.d.ts +80 -4
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +286 -5
- package/dist/agent-farm/utils/server-utils.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/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 +272 -28
- 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.map +1 -1
- package/dist/commands/doctor.js +71 -19
- package/dist/commands/doctor.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.js +21 -28
- 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/lib/config.d.ts +69 -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/forge-contracts.d.ts +9 -0
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/github.d.ts +15 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +18 -1
- package/dist/lib/github.js.map +1 -1
- 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/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/attach-replay.d.ts +39 -0
- package/dist/terminal/attach-replay.d.ts.map +1 -0
- package/dist/terminal/attach-replay.js +76 -0
- package/dist/terminal/attach-replay.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +2 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +51 -23
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +201 -1
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +327 -46
- 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 +53 -0
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +94 -9
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +116 -0
- package/dist/terminal/session-screen.d.ts.map +1 -0
- package/dist/terminal/session-screen.js +180 -0
- package/dist/terminal/session-screen.js.map +1 -0
- 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 +17 -8
- package/dist/terminal/shellper-process.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 +13 -8
- package/scripts/forge/gitea/pr-view.sh +4 -1
- package/scripts/forge/github/pr-view.sh +1 -1
- package/scripts/forge/gitlab/pr-view.sh +4 -1
- package/skeleton/.claude/skills/afx/SKILL.md +68 -1
- package/skeleton/.claude/skills/arch-init/SKILL.md +22 -9
- package/skeleton/.claude/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.claude/skills/codev/SKILL.md +31 -0
- package/skeleton/.claude/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/afx/SKILL.md +68 -1
- package/skeleton/.codex/skills/arch-init/SKILL.md +22 -9
- package/skeleton/.codex/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.codex/skills/codev/SKILL.md +31 -0
- package/skeleton/.codex/skills/runnable-worktrees/SKILL.md +119 -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 +31 -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 +2 -3
- package/skeleton/protocols/pir/prompts/plan.md +1 -4
- package/skeleton/protocols/pir/prompts/review.md +2 -2
- 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 +262 -0
- package/skeleton/resources/commands/consult.md +236 -8
- package/skeleton/resources/commands/overview.md +1 -0
- package/skeleton/roles/architect.md +67 -317
- package/skeleton/roles/builder.md +76 -191
- package/skeleton/templates/AGENTS.md +2 -0
- package/skeleton/templates/CLAUDE.md +2 -0
- package/templates/3d-viewer.html +32 -4
- package/templates/open.html +58 -12
- package/templates/tower.html +65 -9
- package/templates/vendor/three-3MFLoader.js +1478 -0
- package/templates/vendor/three-STLLoader.js +410 -0
- package/templates/vendor/three-TrackballControls.js +828 -0
- package/templates/vendor/three-fflate.module.js +2474 -0
- package/templates/vendor/three.module.js +53044 -0
- 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 -116
- 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,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `afx refresh` — the command surface over the refresh 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 a refresh 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
|
+
/**
|
|
32
|
+
* The one-line notice `afx reset` prints before doing the work (#1489).
|
|
33
|
+
*
|
|
34
|
+
* Exported so the deprecation is pinned by a test rather than by whoever
|
|
35
|
+
* happens to read the CLI wiring: an alias that stops announcing itself is an
|
|
36
|
+
* alias nobody migrates off, and this one is scheduled for removal.
|
|
37
|
+
*/
|
|
38
|
+
export const RESET_ALIAS_NOTICE = 'afx reset has been renamed to afx refresh; this alias will be removed in a future release';
|
|
39
|
+
/**
|
|
40
|
+
* Announce the deprecated spelling on **stderr**.
|
|
41
|
+
*
|
|
42
|
+
* stdout carries the run report, which is read by humans and occasionally piped;
|
|
43
|
+
* a deprecation line does not belong in it.
|
|
44
|
+
*/
|
|
45
|
+
export function warnResetAlias() {
|
|
46
|
+
process.stderr.write(`${RESET_ALIAS_NOTICE}\n`);
|
|
47
|
+
}
|
|
48
|
+
export async function refresh(options) {
|
|
49
|
+
const target = options.builder;
|
|
50
|
+
if (!target) {
|
|
51
|
+
fatal('Must specify a builder. Usage: afx refresh <builder>');
|
|
52
|
+
}
|
|
53
|
+
logger.header('Builder Context Refresh');
|
|
54
|
+
const workspace = detectWorkspaceRoot() ?? undefined;
|
|
55
|
+
let from;
|
|
56
|
+
try {
|
|
57
|
+
from = detectCurrentBuilderId() ?? 'architect';
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
fatal(err instanceof Error ? err.message : String(err));
|
|
61
|
+
}
|
|
62
|
+
// `findBuilderById`, NOT `getBuilder`: the latter matches the id EXACTLY, so
|
|
63
|
+
// `afx refresh 1273` would fail against a builder registered as `aspir-1273`
|
|
64
|
+
// while `afx send 1273` reached it fine. Refresh must resolve targets the same
|
|
65
|
+
// way every other builder-addressed command does — a refresh that cannot be
|
|
66
|
+
// addressed the way the architect already types addresses is one that
|
|
67
|
+
// gets typed wrong under pressure. `findBuilderById` also reports AMBIGUOUS
|
|
68
|
+
// with the candidate list rather than silently picking one.
|
|
69
|
+
const builder = findBuilderById(target);
|
|
70
|
+
if (!builder) {
|
|
71
|
+
fatal(`No builder '${target}' in this workspace (or the id is ambiguous — see above). ` +
|
|
72
|
+
`Check 'afx status'. Refresh needs the registry row for the worktree and branch.`);
|
|
73
|
+
}
|
|
74
|
+
if (!builder.worktree || !builder.branch) {
|
|
75
|
+
fatal(`Builder '${target}' has an incomplete registry row (worktree='${builder.worktree}', ` +
|
|
76
|
+
`branch='${builder.branch}'). Refusing to refresh against unresolved state.`);
|
|
77
|
+
}
|
|
78
|
+
const client = new TowerClient();
|
|
79
|
+
if (!(await client.isRunning())) {
|
|
80
|
+
fatal('Tower is not running. Start it with: afx tower start');
|
|
81
|
+
}
|
|
82
|
+
const addendum = buildAddendum(options);
|
|
83
|
+
const config = getConfig();
|
|
84
|
+
const userConfig = loadConfig(config.workspaceRoot);
|
|
85
|
+
const context = resolveBuilderContext({
|
|
86
|
+
fs: {
|
|
87
|
+
exists: (p) => existsSync(p),
|
|
88
|
+
read: (p) => safeRead(p),
|
|
89
|
+
listDirs: (p) => {
|
|
90
|
+
try {
|
|
91
|
+
return readdirSync(p, { withFileTypes: true })
|
|
92
|
+
.filter(e => e.isDirectory())
|
|
93
|
+
.map(e => e.name);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
builderId: builder.id,
|
|
101
|
+
worktree: builder.worktree,
|
|
102
|
+
branch: builder.branch,
|
|
103
|
+
issueNumber: builder.issueNumber === undefined ? undefined : String(builder.issueNumber),
|
|
104
|
+
taskText: builder.taskText,
|
|
105
|
+
modeOverride: options.mode,
|
|
106
|
+
customHarnesses: userConfig?.harness,
|
|
107
|
+
});
|
|
108
|
+
const terminal = buildTerminalPort(client, builder.terminalId, target, from, workspace);
|
|
109
|
+
try {
|
|
110
|
+
const result = await runReset({
|
|
111
|
+
context,
|
|
112
|
+
fs: buildFsPort(),
|
|
113
|
+
clock: realClock,
|
|
114
|
+
terminal,
|
|
115
|
+
buildSpawnPrompt: (protocol, templateContext) => buildPromptFromTemplate(config, protocol, templateContext),
|
|
116
|
+
buildResumeNotice,
|
|
117
|
+
issue: await fetchIssuePayload(context.issueNumber, config.workspaceRoot),
|
|
118
|
+
addendum,
|
|
119
|
+
dryRun: options.dryRun,
|
|
120
|
+
interruptFirst: options.interruptFirst,
|
|
121
|
+
receiptTimeoutMs: options.timeout ? options.timeout * 1000 : undefined,
|
|
122
|
+
minBytes: options.minBytes,
|
|
123
|
+
quietWindowMs: options.quietWindow,
|
|
124
|
+
});
|
|
125
|
+
if (result.outcome === 'dry-run') {
|
|
126
|
+
logger.info('DRY RUN — nothing was written to the builder.\n');
|
|
127
|
+
logger.info('--- save request (what the builder is asked to write) ---');
|
|
128
|
+
console.log(result.saveRequest);
|
|
129
|
+
logger.info('--- inline re-orientation ---');
|
|
130
|
+
console.log(result.payload?.inline ?? '');
|
|
131
|
+
logger.info(`--- long form would be written to ${result.reorientPath} ---`);
|
|
132
|
+
console.log(result.payload?.longForm ?? '');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log(formatResetReport(result));
|
|
136
|
+
if (result.outcome === 'aborted') {
|
|
137
|
+
// Non-zero: an aborted refresh is a failure the caller must see, even though
|
|
138
|
+
// it is the SAFE outcome. Silence here would let a script treat "refused
|
|
139
|
+
// to clear" as "cleared".
|
|
140
|
+
process.exitCode = 1;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
logger.success(`Builder ${target} refreshed and re-oriented.`);
|
|
144
|
+
logger.info(`State file: ${result.statePath} (${result.stateBytes} bytes)`);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
if (err instanceof ResetPreflightError) {
|
|
148
|
+
fatal(err.message);
|
|
149
|
+
}
|
|
150
|
+
fatal(err instanceof Error ? err.message : String(err));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ============================================================================
|
|
154
|
+
// Port bindings
|
|
155
|
+
// ============================================================================
|
|
156
|
+
const realClock = {
|
|
157
|
+
now: () => Date.now(),
|
|
158
|
+
sleep: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
|
|
159
|
+
};
|
|
160
|
+
function buildFsPort() {
|
|
161
|
+
return {
|
|
162
|
+
read: (p) => safeRead(p),
|
|
163
|
+
sizeOf: (p) => {
|
|
164
|
+
try {
|
|
165
|
+
return statSync(p).size;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
write: (p, content) => writeFileSync(p, content, 'utf-8'),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function safeRead(p) {
|
|
175
|
+
try {
|
|
176
|
+
return readFileSync(p, 'utf-8');
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function buildTerminalPort(client, terminalId, target, from, workspace) {
|
|
183
|
+
return {
|
|
184
|
+
async observe() {
|
|
185
|
+
if (!terminalId)
|
|
186
|
+
return { exists: false };
|
|
187
|
+
const t = await client.getTerminal(terminalId);
|
|
188
|
+
if (!t || t.status !== 'running')
|
|
189
|
+
return { exists: false };
|
|
190
|
+
// Both optional fields are forwarded AS-IS, including undefined. The
|
|
191
|
+
// orchestrator distinguishes "reported false" from "not reported", and
|
|
192
|
+
// collapsing either to a concrete value here would defeat that check at
|
|
193
|
+
// the boundary — `lastDataAt: 0` reads as decades of silence, and
|
|
194
|
+
// `writable: true` would assert a fact this Tower never supplied.
|
|
195
|
+
return { exists: true, lastDataAt: t.lastDataAt, writable: t.writable };
|
|
196
|
+
},
|
|
197
|
+
async sendMessage(message) {
|
|
198
|
+
const result = await client.sendMessage(target, message, {
|
|
199
|
+
from,
|
|
200
|
+
workspace,
|
|
201
|
+
fromWorkspace: workspace,
|
|
202
|
+
});
|
|
203
|
+
if (!result.ok)
|
|
204
|
+
throw new Error(result.error || 'Message delivery failed');
|
|
205
|
+
},
|
|
206
|
+
/**
|
|
207
|
+
* `raw: true`, NOT `escape: true`.
|
|
208
|
+
*
|
|
209
|
+
* Tower's escape route writes a hardcoded ESC and discards the message
|
|
210
|
+
* body, so binding this to `escape` would silently turn `/clear` into an
|
|
211
|
+
* interrupt: the run would report success while the builder kept its
|
|
212
|
+
* entire context. `raw` types the text as literal input, which is what the
|
|
213
|
+
* verified manual recipe used.
|
|
214
|
+
*/
|
|
215
|
+
async sendRaw(text) {
|
|
216
|
+
const result = await client.sendMessage(target, text, {
|
|
217
|
+
from,
|
|
218
|
+
workspace,
|
|
219
|
+
fromWorkspace: workspace,
|
|
220
|
+
raw: true,
|
|
221
|
+
});
|
|
222
|
+
if (!result.ok)
|
|
223
|
+
throw new Error(result.error || 'Raw write failed');
|
|
224
|
+
},
|
|
225
|
+
async sendEscape() {
|
|
226
|
+
const result = await client.sendMessage(target, '\x1b', {
|
|
227
|
+
from,
|
|
228
|
+
workspace,
|
|
229
|
+
fromWorkspace: workspace,
|
|
230
|
+
escape: true,
|
|
231
|
+
});
|
|
232
|
+
if (!result.ok)
|
|
233
|
+
throw new Error(result.error || 'Interrupt (ESC) failed');
|
|
234
|
+
},
|
|
235
|
+
/**
|
|
236
|
+
* Bound for real, not left undefined.
|
|
237
|
+
*
|
|
238
|
+
* When this was absent the orchestrator's `confirmClear` returned false on
|
|
239
|
+
* every production run, so the report always said "clear-unconfirmed" — a
|
|
240
|
+
* step that looked attempted and could never succeed outside tests.
|
|
241
|
+
*
|
|
242
|
+
* Returns `total` alongside the lines so confirmation can look only at
|
|
243
|
+
* output produced AFTER the clear. Reset writes into this same terminal, so
|
|
244
|
+
* without that window any pattern eventually matches reset's own text.
|
|
245
|
+
*/
|
|
246
|
+
async readOutput() {
|
|
247
|
+
if (!terminalId)
|
|
248
|
+
return null;
|
|
249
|
+
const output = await client.getTerminalOutput(terminalId, 200);
|
|
250
|
+
return output ? { lines: output.lines, total: output.total } : null;
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// ============================================================================
|
|
255
|
+
// Inputs
|
|
256
|
+
// ============================================================================
|
|
257
|
+
/**
|
|
258
|
+
* Assemble the architect addendum from `--note` and `--file`.
|
|
259
|
+
*
|
|
260
|
+
* `--file` reads from the CALLER's filesystem, exactly as `afx send --file`
|
|
261
|
+
* does, and reuses its 48KB cap. The worktree-containment rule applies to the
|
|
262
|
+
* state-file path override, not to this — the architect is reading their own
|
|
263
|
+
* notes, not instructing the builder where to write.
|
|
264
|
+
*/
|
|
265
|
+
function buildAddendum(options) {
|
|
266
|
+
const parts = [];
|
|
267
|
+
if (options.note)
|
|
268
|
+
parts.push(options.note);
|
|
269
|
+
if (options.file) {
|
|
270
|
+
if (!existsSync(options.file)) {
|
|
271
|
+
fatal(`File not found: ${options.file}`);
|
|
272
|
+
}
|
|
273
|
+
const buf = readFileSync(options.file);
|
|
274
|
+
if (buf.length > MAX_FILE_SIZE) {
|
|
275
|
+
fatal(`File too large: ${buf.length} bytes (max ${MAX_FILE_SIZE} bytes / 48KB)`);
|
|
276
|
+
}
|
|
277
|
+
parts.push(buf.toString('utf-8'));
|
|
278
|
+
}
|
|
279
|
+
return parts.length > 0 ? parts.join('\n\n') : undefined;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Fetch issue metadata for the long form, best-effort.
|
|
283
|
+
*
|
|
284
|
+
* A forge outage must not block a refresh: phase 5 renders an explicit "could not
|
|
285
|
+
* be fetched" gap with a `gh issue view` recovery line, which is strictly better
|
|
286
|
+
* than aborting a refresh the architect needs, and strictly better than silently
|
|
287
|
+
* omitting requirements.
|
|
288
|
+
*/
|
|
289
|
+
async function fetchIssuePayload(issueNumber, workspaceRoot) {
|
|
290
|
+
if (!issueNumber)
|
|
291
|
+
return undefined;
|
|
292
|
+
try {
|
|
293
|
+
const issue = await fetchForgeIssue(issueNumber, {
|
|
294
|
+
cwd: workspaceRoot,
|
|
295
|
+
forgeConfig: loadForgeConfig(workspaceRoot),
|
|
296
|
+
});
|
|
297
|
+
if (!issue)
|
|
298
|
+
return undefined;
|
|
299
|
+
return {
|
|
300
|
+
number: issueNumber,
|
|
301
|
+
title: issue.title,
|
|
302
|
+
body: issue.body || '(No description provided)',
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# 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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"}
|
|
@@ -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"}
|
|
@@ -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":"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
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* and terminal session creation via the Tower REST API.
|
|
8
8
|
*/
|
|
9
9
|
import type { Config, ProtocolDefinition } from '../types.js';
|
|
10
|
+
import { type HarnessProvider } from '../utils/harness.js';
|
|
10
11
|
import { type ForgeIssue } from '../../lib/github.js';
|
|
11
12
|
import { type ForgeConfig } from '../../lib/forge.js';
|
|
12
13
|
/**
|
|
@@ -151,16 +152,114 @@ export declare function createPtySession(config: Config, command: string, args:
|
|
|
151
152
|
}): Promise<{
|
|
152
153
|
terminalId: string;
|
|
153
154
|
}>;
|
|
155
|
+
/**
|
|
156
|
+
* Build the `while true; do … done` launch loop for a builder script.
|
|
157
|
+
*
|
|
158
|
+
* `initial` is what the loop runs on entry, and what a crash restart reruns —
|
|
159
|
+
* on the resume path that is `<cmd> --resume <id>`, because recovering the
|
|
160
|
+
* conversation is exactly right after an unnatural death.
|
|
161
|
+
*
|
|
162
|
+
* `fresh` is what the Enter-gated relaunch runs after a *clean* exit. Issue
|
|
163
|
+
* #1267: a clean exit means the user deliberately ended that conversation, so
|
|
164
|
+
* relaunching it is the one thing the relaunch must not do — the same rule
|
|
165
|
+
* #1264 established for architect terminals. `fresh` is the plain
|
|
166
|
+
* role-injected, prompt-carrying invocation a non-resume spawn would have used,
|
|
167
|
+
* so "fresh" needs no definition of its own.
|
|
168
|
+
*
|
|
169
|
+
* The switch is one-way and sticky: once a clean exit has moved the loop to
|
|
170
|
+
* `fresh`, a later crash restarts the *fresh* invocation, never the superseded
|
|
171
|
+
* session the user walked away from.
|
|
172
|
+
*
|
|
173
|
+
* The two commands differ only on the resume path. Every other variant passes
|
|
174
|
+
* the same string twice and gets the historical single-command loop back,
|
|
175
|
+
* byte for byte.
|
|
176
|
+
*
|
|
177
|
+
* Issue #1233: this loop now serves only harnesses WITHOUT script-form session
|
|
178
|
+
* support (codex/gemini/opencode/custom) — their generated script is unchanged,
|
|
179
|
+
* byte for byte. Claude builders get `buildSessionLaunchLoop` instead, which
|
|
180
|
+
* resumes the conversation on crash restarts rather than replaying the prompt.
|
|
181
|
+
*/
|
|
182
|
+
export declare function buildLaunchLoop(initial: string, fresh: string): string;
|
|
183
|
+
/**
|
|
184
|
+
* The prompt a crash-resume invocation carries (Issue #1233). Without it,
|
|
185
|
+
* `--resume` restores the conversation but leaves the agent idle at the input
|
|
186
|
+
* prompt — for an unattended builder that converts amnesia into a stall. The
|
|
187
|
+
* nudge is a new user message in the restored conversation, so the builder
|
|
188
|
+
* re-orients itself and continues autonomously. Deliberately free of
|
|
189
|
+
* single quotes: it is embedded single-quoted in the generated script.
|
|
190
|
+
*/
|
|
191
|
+
export declare const CRASH_RESUME_NUDGE: string;
|
|
192
|
+
/** The shell expression the session-aware loop's commands use to reference the current session id. */
|
|
193
|
+
export declare const SESSION_ID_EXPR = "\"$codev_session_id\"";
|
|
194
|
+
/**
|
|
195
|
+
* Script-form session support for a harness, or undefined when the harness
|
|
196
|
+
* cannot pin/resume a conversation from a generated bash script. Both fragment
|
|
197
|
+
* forms are required — the session-aware loop needs to pin AND resume.
|
|
198
|
+
*/
|
|
199
|
+
export declare function scriptSessionForms(harness: HarnessProvider): {
|
|
200
|
+
newSessionScriptFragment(idExpr: string): string;
|
|
201
|
+
resumeScriptFragment(idExpr: string): string;
|
|
202
|
+
} | undefined;
|
|
203
|
+
/**
|
|
204
|
+
* Build the session-aware launch loop (Issue #1233) — the builder-side
|
|
205
|
+
* expression of the architect resume pattern (#832/#1264): the wrapper pins a
|
|
206
|
+
* conversation id at entry and *resumes* it after an unnatural exit, instead of
|
|
207
|
+
* replaying the spawn prompt into a fresh session (the amnesia path this issue
|
|
208
|
+
* removes). A jetsam SIGKILL now costs 2 seconds, not the builder's memory.
|
|
209
|
+
*
|
|
210
|
+
* State machine, expressed in generated bash because builder liveness is
|
|
211
|
+
* deliberately decoupled from Tower (persistent PTYs survive Tower restarts,
|
|
212
|
+
* so no Node process is guaranteed to be around when the crash fires):
|
|
213
|
+
*
|
|
214
|
+
* - Entry: `initial` if given (the recover path's discovered-id resume), else
|
|
215
|
+
* the pinned fresh invocation (`--session-id` + role + prompt).
|
|
216
|
+
* - Unnatural exit → resume `$codev_session_id` with a short nudge prompt, so
|
|
217
|
+
* the restored builder re-orients and continues rather than idling.
|
|
218
|
+
* - Clean exit → Enter-gated relaunch stays FRESH per #1267/#1264 ("a clean
|
|
219
|
+
* exit ends that conversation"), but pinned to a newly minted id so the new
|
|
220
|
+
* conversation is crash-protected too. Sticky and one-way, like #1267.
|
|
221
|
+
* - Unresumable-session degrade (#1145/#1149 lesson): `--resume` against a
|
|
222
|
+
* gone/corrupt/held session dies fast; three consecutive fast failures
|
|
223
|
+
* (< CODEV_LAUNCH_FAST_FAIL_SECS, default 15) fall back to a prompt-replay
|
|
224
|
+
* fresh launch under a new id — today's behavior, crash-protected forward.
|
|
225
|
+
* A slow failure resets the counter.
|
|
226
|
+
* - Id minting at runtime uses uuidgen (lowercased) or /proc fallback; when
|
|
227
|
+
* neither exists the relaunch degrades to the UNPINNED fresh invocation —
|
|
228
|
+
* exactly the historical command — and crash restarts stay unpinned rather
|
|
229
|
+
* than resuming a stale id.
|
|
230
|
+
*
|
|
231
|
+
* `.builder-session-id` always holds the current id (removed while unpinned).
|
|
232
|
+
* The bash script is the sole writer: after a re-mint it is the only party
|
|
233
|
+
* that knows the current id, so Node- or DB-side copies would go stale
|
|
234
|
+
* (consumption by recover/--resume is Issue #1112's scope).
|
|
235
|
+
*/
|
|
236
|
+
export declare function buildSessionLaunchLoop(opts: {
|
|
237
|
+
/** Initial value of $codev_session_id: spawn-minted, or the discovered id on the recover path. */
|
|
238
|
+
sessionId: string;
|
|
239
|
+
/** Entry command override (recover path). Defaults to the pinned fresh invocation. */
|
|
240
|
+
initial?: string;
|
|
241
|
+
/** Fresh conversation pinned to $codev_session_id: role + pin + prompt. */
|
|
242
|
+
pinnedFresh: string;
|
|
243
|
+
/** The historical unpinned fresh invocation — degrade target when no uuid can be minted. */
|
|
244
|
+
unpinnedFresh: string;
|
|
245
|
+
/** Resume $codev_session_id with the crash-resume nudge. */
|
|
246
|
+
resume: string;
|
|
247
|
+
}): string;
|
|
154
248
|
/**
|
|
155
249
|
* Start a terminal session for a builder.
|
|
156
250
|
*
|
|
157
|
-
* When `resume` is provided, the launch script
|
|
251
|
+
* When `resume` is provided, the launch script *enters* on the harness's resume
|
|
158
252
|
* form (e.g. `claude --resume <uuid>`) via the pre-escaped `scriptFragment`
|
|
159
|
-
*
|
|
160
|
-
* the system prompt
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
253
|
+
* rather than a prompt+role invocation: the saved conversation already contains
|
|
254
|
+
* the system prompt and role context. Only the Claude harness produces a resume
|
|
255
|
+
* object (Issue #929); codex/gemini pass `undefined` here and enter fresh.
|
|
256
|
+
*
|
|
257
|
+
* Issue #1267: the script still *carries* the fresh invocation, because a clean
|
|
258
|
+
* exit relaunches with it (see `buildLaunchLoop`). That is why role injection
|
|
259
|
+
* and the harness worktree files are prepared on the resume path too — the
|
|
260
|
+
* relaunch is a genuine fresh launch and needs everything one needs.
|
|
261
|
+
* `.builder-prompt.txt` is the deliberate exception: it is read, never
|
|
262
|
+
* rewritten, on resume (see below).
|
|
164
263
|
*/
|
|
165
264
|
export declare function startBuilderSession(config: Config, builderId: string, worktreePath: string, baseCmd: string, prompt: string, roleContent: string | null, roleSource: string | null, resume?: {
|
|
166
265
|
sessionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-worktree.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn-worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn-worktree.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/spawn-worktree.ts"],"names":[],"mappings":"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"}
|