@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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent bounded headless screen (Spec 1313 render-gate round 2).
|
|
3
|
+
*
|
|
4
|
+
* The render gate answers "is this session's composer a clean, empty prompt?" by
|
|
5
|
+
* inspecting a rendered terminal screen. It originally rebuilt that screen on every
|
|
6
|
+
* check by replaying the WHOLE output ring (`ringBuffer.getAll().join('\n')`) through
|
|
7
|
+
* a throwaway `@xterm/headless` Terminal. That worked only while the ring held the
|
|
8
|
+
* whole cumulative stream — but #1205 capped the ring's incomplete-line `partial` at
|
|
9
|
+
* 2 MiB (`trimPartial` halves it to ~1 MiB), and a claude/codex alt-screen frame is
|
|
10
|
+
* exactly one giant newline-free partial. So once a busy long-lived agent's frame
|
|
11
|
+
* crossed the cap, the gate received a TORN front (missing the alt-screen-enter and the
|
|
12
|
+
* composer marker/rule) and classified `no-region-end`/`no-composer-marker` → held the
|
|
13
|
+
* mail PERMANENTLY. That is the over-ceiling delivery outage, resurrected one layer down.
|
|
14
|
+
*
|
|
15
|
+
* The fix is to stop reconstructing the screen from the (now-capped) ring and instead
|
|
16
|
+
* mirror the session's output into ONE long-lived headless Terminal, fed the same bytes
|
|
17
|
+
* the PTY emits, incrementally, from session birth. A terminal emulator is already a
|
|
18
|
+
* BOUNDED screen model (rows × cols + a little scrollback), so:
|
|
19
|
+
* - the ring's partial cap is irrelevant — the screen never needs the whole stream,
|
|
20
|
+
* only the live byte sequence, which it folds into a fixed-size grid;
|
|
21
|
+
* - the LIVE-path tear is gone — a session mirrored from its first byte always shows the
|
|
22
|
+
* real current screen (the adopt/reconnect *seed* is a separate bounded case — see below);
|
|
23
|
+
* - the #1047 unbounded-`partial` OOM risk the old whole-ring render carried is closed
|
|
24
|
+
* (no multi-hundred-MB string is ever allocated to classify);
|
|
25
|
+
* - each classify is O(viewport), not O(ring size) — no per-check whole-render cost,
|
|
26
|
+
* so the cost-aware backstop backoff the whole-render era needed is retired.
|
|
27
|
+
*
|
|
28
|
+
* This wrapper is deliberately gate-agnostic: it only feeds/resizes/reads a screen. The
|
|
29
|
+
* classifier (marker + region + cell scan) lives in `render-gate.ts` and reads the live
|
|
30
|
+
* buffer this hands back via {@link read}. `PtySession` owns one of these and feeds it at
|
|
31
|
+
* its single output chokepoint (`onPtyData`), so on the LIVE path the mirror captures every byte
|
|
32
|
+
* from its first frame. On adopt/reconnect after a Tower restart it is instead seeded from the
|
|
33
|
+
* bounded replay tail (`capRingSeed`, 1 MiB, in `tower-terminals.ts`), so a long-lived alt-screen
|
|
34
|
+
* frame whose coherent start predates that tail can be **born torn** — that classifies not-clean, so
|
|
35
|
+
* the gate HOLDS (fail-safe: mail is delayed, never fused onto a non-empty screen) and self-heals on
|
|
36
|
+
* the agent's next full repaint or a viewer's post-connect resize nudge. This is pre-existing (before
|
|
37
|
+
* round 2 the whole-ring gate classified that same 1 MiB seed) and tracked as a fast-follow, #1361.
|
|
38
|
+
*/
|
|
39
|
+
import type { Terminal as HeadlessTerminal } from '@xterm/headless';
|
|
40
|
+
/** The live-buffer read handle the gate classifies (see {@link SessionScreen.read}). */
|
|
41
|
+
export interface ScreenView {
|
|
42
|
+
term: HeadlessTerminal;
|
|
43
|
+
cols: number;
|
|
44
|
+
rows: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class SessionScreen {
|
|
47
|
+
private readonly term;
|
|
48
|
+
private readonly serializer;
|
|
49
|
+
private _cols;
|
|
50
|
+
private _rows;
|
|
51
|
+
private pending;
|
|
52
|
+
private disposed;
|
|
53
|
+
constructor(cols: number, rows: number);
|
|
54
|
+
/**
|
|
55
|
+
* Fold one chunk of PTY output into the screen. Called at the session's single output
|
|
56
|
+
* chokepoint for EVERY byte (live output and the reconnect-replay seed alike), so the
|
|
57
|
+
* mirror stays a faithful copy of what the real terminal shows. Cheap: a terminal
|
|
58
|
+
* emulator parse of the delta, not a whole-history re-render. A no-op after
|
|
59
|
+
* {@link dispose} — a late PTY frame arriving during teardown must not touch a freed term.
|
|
60
|
+
*/
|
|
61
|
+
feed(data: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Resize the mirror to match the live session (Spec 1313: the gate renders at the
|
|
64
|
+
* session's geometry so wrapping reconstructs identically). Kept in lockstep with
|
|
65
|
+
* `PtySession.resize`. A no-op after {@link dispose}.
|
|
66
|
+
*/
|
|
67
|
+
resize(cols: number, rows: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Flush the parser and hand back the live buffer for the gate to read SYNCHRONOUSLY.
|
|
70
|
+
*
|
|
71
|
+
* `await this.pending` drains every byte fed up to this call into the grid, so the returned
|
|
72
|
+
* buffer reflects AT LEAST the output counted by `ringBuffer.bytesWritten` at the moment the
|
|
73
|
+
* caller sampled its change-token (xterm parses writes FIFO but may run ahead into later queued
|
|
74
|
+
* writes, so the buffer can reflect *more* — never less). That lower bound is the property the
|
|
75
|
+
* delivery path's token-before/after TOCTOU relies on: the caller MUST read the returned buffer
|
|
76
|
+
* with no intervening `await` (the classifier is synchronous), so no `feed` can interleave the
|
|
77
|
+
* read; any output that landed during THIS flush already advanced `bytesWritten`, so the caller's
|
|
78
|
+
* post-classify token re-check trips (→ hold) and nothing is delivered onto it.
|
|
79
|
+
*
|
|
80
|
+
* After {@link dispose} the term is freed and its parse callback may never fire, so this returns
|
|
81
|
+
* the current view WITHOUT awaiting `pending` — a disposed screen has no coherent frame, the
|
|
82
|
+
* classifier finds no marker → fail-safe hold, and `PtySession.cleanup` nulls `gateScreen` so the
|
|
83
|
+
* wiring already holds before a read() can reach a disposed mirror in practice.
|
|
84
|
+
*/
|
|
85
|
+
read(): Promise<ScreenView>;
|
|
86
|
+
/**
|
|
87
|
+
* Serialize the current screen state (both buffers, colors/attrs, cursor, alt-screen
|
|
88
|
+
* mode, plus up to {@link SCREEN_SCROLLBACK} lines of history) back into a terminal
|
|
89
|
+
* byte stream a client can replay — the O(screen) viewer-attach payload (PIR #1354).
|
|
90
|
+
*
|
|
91
|
+
* SYNCHRONOUS by design: it reads whatever is parsed into the grid right now.
|
|
92
|
+
* Callers wanting a coherent frame must flush first ({@link read}) and must call this
|
|
93
|
+
* with no intervening `await` afterward — the same no-interleave discipline the render
|
|
94
|
+
* gate's classifier relies on. `PtySession.replaySnapshot` owns that protocol.
|
|
95
|
+
*
|
|
96
|
+
* Throws whatever the addon throws; the caller maps failures to the raw-replay
|
|
97
|
+
* fallback. After {@link dispose} the term is freed — return '' rather than touching it
|
|
98
|
+
* (callers treat an empty snapshot for a non-empty session as a fallback signal).
|
|
99
|
+
*/
|
|
100
|
+
serialize(): string;
|
|
101
|
+
/**
|
|
102
|
+
* Which buffer the emulated app is currently in. 'alternate' identifies the
|
|
103
|
+
* full-screen-TUI case whose delta resume is unservable from the line-based ring
|
|
104
|
+
* (`RingBuffer.getSince` returns [] for a caught-up client), so the attach path
|
|
105
|
+
* routes it to {@link serialize} instead. Read without flushing: worst case the
|
|
106
|
+
* routing decision lags the last few unparsed bytes, and both routes remain correct
|
|
107
|
+
* (the raw path keeps its client-nudge recovery).
|
|
108
|
+
*/
|
|
109
|
+
get bufferType(): 'normal' | 'alternate';
|
|
110
|
+
/** Current mirror geometry (matches the live session). */
|
|
111
|
+
get cols(): number;
|
|
112
|
+
get rows(): number;
|
|
113
|
+
/** Release the headless Terminal. Idempotent; feeds/resizes/reads after it are no-ops. */
|
|
114
|
+
dispose(): void;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=session-screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-screen.d.ts","sourceRoot":"","sources":["../../src/terminal/session-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAQH,OAAO,KAAK,EAAE,QAAQ,IAAI,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AAsBpF,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IAItB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAWtC;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxC;;;;;;;;;;;;;;;;OAgBG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAMjC;;;;;;;;;;;;;OAaG;IACH,SAAS,IAAI,MAAM;IAKnB;;;;;;;OAOG;IACH,IAAI,UAAU,IAAI,QAAQ,GAAG,WAAW,CAEvC;IAED,0DAA0D;IAC1D,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0FAA0F;IAC1F,OAAO,IAAI,IAAI;CAUhB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent bounded headless screen (Spec 1313 render-gate round 2).
|
|
3
|
+
*
|
|
4
|
+
* The render gate answers "is this session's composer a clean, empty prompt?" by
|
|
5
|
+
* inspecting a rendered terminal screen. It originally rebuilt that screen on every
|
|
6
|
+
* check by replaying the WHOLE output ring (`ringBuffer.getAll().join('\n')`) through
|
|
7
|
+
* a throwaway `@xterm/headless` Terminal. That worked only while the ring held the
|
|
8
|
+
* whole cumulative stream — but #1205 capped the ring's incomplete-line `partial` at
|
|
9
|
+
* 2 MiB (`trimPartial` halves it to ~1 MiB), and a claude/codex alt-screen frame is
|
|
10
|
+
* exactly one giant newline-free partial. So once a busy long-lived agent's frame
|
|
11
|
+
* crossed the cap, the gate received a TORN front (missing the alt-screen-enter and the
|
|
12
|
+
* composer marker/rule) and classified `no-region-end`/`no-composer-marker` → held the
|
|
13
|
+
* mail PERMANENTLY. That is the over-ceiling delivery outage, resurrected one layer down.
|
|
14
|
+
*
|
|
15
|
+
* The fix is to stop reconstructing the screen from the (now-capped) ring and instead
|
|
16
|
+
* mirror the session's output into ONE long-lived headless Terminal, fed the same bytes
|
|
17
|
+
* the PTY emits, incrementally, from session birth. A terminal emulator is already a
|
|
18
|
+
* BOUNDED screen model (rows × cols + a little scrollback), so:
|
|
19
|
+
* - the ring's partial cap is irrelevant — the screen never needs the whole stream,
|
|
20
|
+
* only the live byte sequence, which it folds into a fixed-size grid;
|
|
21
|
+
* - the LIVE-path tear is gone — a session mirrored from its first byte always shows the
|
|
22
|
+
* real current screen (the adopt/reconnect *seed* is a separate bounded case — see below);
|
|
23
|
+
* - the #1047 unbounded-`partial` OOM risk the old whole-ring render carried is closed
|
|
24
|
+
* (no multi-hundred-MB string is ever allocated to classify);
|
|
25
|
+
* - each classify is O(viewport), not O(ring size) — no per-check whole-render cost,
|
|
26
|
+
* so the cost-aware backstop backoff the whole-render era needed is retired.
|
|
27
|
+
*
|
|
28
|
+
* This wrapper is deliberately gate-agnostic: it only feeds/resizes/reads a screen. The
|
|
29
|
+
* classifier (marker + region + cell scan) lives in `render-gate.ts` and reads the live
|
|
30
|
+
* buffer this hands back via {@link read}. `PtySession` owns one of these and feeds it at
|
|
31
|
+
* its single output chokepoint (`onPtyData`), so on the LIVE path the mirror captures every byte
|
|
32
|
+
* from its first frame. On adopt/reconnect after a Tower restart it is instead seeded from the
|
|
33
|
+
* bounded replay tail (`capRingSeed`, 1 MiB, in `tower-terminals.ts`), so a long-lived alt-screen
|
|
34
|
+
* frame whose coherent start predates that tail can be **born torn** — that classifies not-clean, so
|
|
35
|
+
* the gate HOLDS (fail-safe: mail is delayed, never fused onto a non-empty screen) and self-heals on
|
|
36
|
+
* the agent's next full repaint or a viewer's post-connect resize nudge. This is pre-existing (before
|
|
37
|
+
* round 2 the whole-ring gate classified that same 1 MiB seed) and tracked as a fast-follow, #1361.
|
|
38
|
+
*/
|
|
39
|
+
// `@xterm/headless` resolves to its CommonJS entry (no `exports` map / `type: module`),
|
|
40
|
+
// and its named exports are not statically analyzable, so a native-node ESM
|
|
41
|
+
// `import { Terminal }` throws "Named export 'Terminal' not found" under the compiled
|
|
42
|
+
// dist (see the identical note in render-gate.ts). Default-import the module object.
|
|
43
|
+
// `@xterm/addon-serialize` ships the same way (same repo and release train).
|
|
44
|
+
import xtermHeadless from '@xterm/headless';
|
|
45
|
+
import xtermSerialize from '@xterm/addon-serialize';
|
|
46
|
+
const { Terminal } = xtermHeadless;
|
|
47
|
+
const { SerializeAddon } = xtermSerialize;
|
|
48
|
+
/**
|
|
49
|
+
* Scrollback retained by the mirror, now serving two consumers (PIR #1354):
|
|
50
|
+
*
|
|
51
|
+
* - The render gate reads ONLY the current viewport (`viewportY … viewportY + rows`),
|
|
52
|
+
* never scrollback, and its verdict is identical for any scrollback ≥ rows (asserted
|
|
53
|
+
* by the production-path tests) — so for the gate this value is a free variable.
|
|
54
|
+
* - {@link SessionScreen.serialize} is the viewer-attach replay payload, and its
|
|
55
|
+
* scrollback IS the history a reconnecting viewer gets back. 1000 matches the ring
|
|
56
|
+
* buffer's default line capacity (`ringBufferLines`), so snapshot replay does not
|
|
57
|
+
* regress history depth versus the raw-ring replay it replaces.
|
|
58
|
+
*
|
|
59
|
+
* Memory: measured ~509 KB per fully-scrolled 200x50 terminal at 1000 lines (~215 KB
|
|
60
|
+
* at the previous 200) — the bounded per-session budget the plan commits to.
|
|
61
|
+
*/
|
|
62
|
+
const SCREEN_SCROLLBACK = 1000;
|
|
63
|
+
export class SessionScreen {
|
|
64
|
+
term;
|
|
65
|
+
serializer;
|
|
66
|
+
_cols;
|
|
67
|
+
_rows;
|
|
68
|
+
// Promise of the most recently issued write's parse completion. `@xterm/headless`
|
|
69
|
+
// parses asynchronously and processes writes FIFO, so awaiting the LATEST write's
|
|
70
|
+
// callback guarantees every earlier write is parsed too — the flush {@link read} needs.
|
|
71
|
+
pending = Promise.resolve();
|
|
72
|
+
disposed = false;
|
|
73
|
+
constructor(cols, rows) {
|
|
74
|
+
this._cols = cols;
|
|
75
|
+
this._rows = rows;
|
|
76
|
+
this.term = new Terminal({ cols, rows, allowProposedApi: true, scrollback: SCREEN_SCROLLBACK });
|
|
77
|
+
this.serializer = new SerializeAddon();
|
|
78
|
+
// The addon's typings bind to the full `@xterm/xterm` Terminal; its runtime touches
|
|
79
|
+
// only the buffer/parser surface the headless build shares (proven by the round-trip
|
|
80
|
+
// suite), so the declared-type gap is bridged explicitly here.
|
|
81
|
+
this.term.loadAddon(this.serializer);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fold one chunk of PTY output into the screen. Called at the session's single output
|
|
85
|
+
* chokepoint for EVERY byte (live output and the reconnect-replay seed alike), so the
|
|
86
|
+
* mirror stays a faithful copy of what the real terminal shows. Cheap: a terminal
|
|
87
|
+
* emulator parse of the delta, not a whole-history re-render. A no-op after
|
|
88
|
+
* {@link dispose} — a late PTY frame arriving during teardown must not touch a freed term.
|
|
89
|
+
*/
|
|
90
|
+
feed(data) {
|
|
91
|
+
if (this.disposed)
|
|
92
|
+
return;
|
|
93
|
+
this.pending = new Promise((resolve) => this.term.write(data, () => resolve()));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resize the mirror to match the live session (Spec 1313: the gate renders at the
|
|
97
|
+
* session's geometry so wrapping reconstructs identically). Kept in lockstep with
|
|
98
|
+
* `PtySession.resize`. A no-op after {@link dispose}.
|
|
99
|
+
*/
|
|
100
|
+
resize(cols, rows) {
|
|
101
|
+
if (this.disposed)
|
|
102
|
+
return;
|
|
103
|
+
this._cols = cols;
|
|
104
|
+
this._rows = rows;
|
|
105
|
+
this.term.resize(cols, rows);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Flush the parser and hand back the live buffer for the gate to read SYNCHRONOUSLY.
|
|
109
|
+
*
|
|
110
|
+
* `await this.pending` drains every byte fed up to this call into the grid, so the returned
|
|
111
|
+
* buffer reflects AT LEAST the output counted by `ringBuffer.bytesWritten` at the moment the
|
|
112
|
+
* caller sampled its change-token (xterm parses writes FIFO but may run ahead into later queued
|
|
113
|
+
* writes, so the buffer can reflect *more* — never less). That lower bound is the property the
|
|
114
|
+
* delivery path's token-before/after TOCTOU relies on: the caller MUST read the returned buffer
|
|
115
|
+
* with no intervening `await` (the classifier is synchronous), so no `feed` can interleave the
|
|
116
|
+
* read; any output that landed during THIS flush already advanced `bytesWritten`, so the caller's
|
|
117
|
+
* post-classify token re-check trips (→ hold) and nothing is delivered onto it.
|
|
118
|
+
*
|
|
119
|
+
* After {@link dispose} the term is freed and its parse callback may never fire, so this returns
|
|
120
|
+
* the current view WITHOUT awaiting `pending` — a disposed screen has no coherent frame, the
|
|
121
|
+
* classifier finds no marker → fail-safe hold, and `PtySession.cleanup` nulls `gateScreen` so the
|
|
122
|
+
* wiring already holds before a read() can reach a disposed mirror in practice.
|
|
123
|
+
*/
|
|
124
|
+
async read() {
|
|
125
|
+
if (this.disposed)
|
|
126
|
+
return { term: this.term, cols: this._cols, rows: this._rows };
|
|
127
|
+
await this.pending;
|
|
128
|
+
return { term: this.term, cols: this._cols, rows: this._rows };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Serialize the current screen state (both buffers, colors/attrs, cursor, alt-screen
|
|
132
|
+
* mode, plus up to {@link SCREEN_SCROLLBACK} lines of history) back into a terminal
|
|
133
|
+
* byte stream a client can replay — the O(screen) viewer-attach payload (PIR #1354).
|
|
134
|
+
*
|
|
135
|
+
* SYNCHRONOUS by design: it reads whatever is parsed into the grid right now.
|
|
136
|
+
* Callers wanting a coherent frame must flush first ({@link read}) and must call this
|
|
137
|
+
* with no intervening `await` afterward — the same no-interleave discipline the render
|
|
138
|
+
* gate's classifier relies on. `PtySession.replaySnapshot` owns that protocol.
|
|
139
|
+
*
|
|
140
|
+
* Throws whatever the addon throws; the caller maps failures to the raw-replay
|
|
141
|
+
* fallback. After {@link dispose} the term is freed — return '' rather than touching it
|
|
142
|
+
* (callers treat an empty snapshot for a non-empty session as a fallback signal).
|
|
143
|
+
*/
|
|
144
|
+
serialize() {
|
|
145
|
+
if (this.disposed)
|
|
146
|
+
return '';
|
|
147
|
+
return this.serializer.serialize({ scrollback: SCREEN_SCROLLBACK });
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Which buffer the emulated app is currently in. 'alternate' identifies the
|
|
151
|
+
* full-screen-TUI case whose delta resume is unservable from the line-based ring
|
|
152
|
+
* (`RingBuffer.getSince` returns [] for a caught-up client), so the attach path
|
|
153
|
+
* routes it to {@link serialize} instead. Read without flushing: worst case the
|
|
154
|
+
* routing decision lags the last few unparsed bytes, and both routes remain correct
|
|
155
|
+
* (the raw path keeps its client-nudge recovery).
|
|
156
|
+
*/
|
|
157
|
+
get bufferType() {
|
|
158
|
+
return this.term.buffer.active.type;
|
|
159
|
+
}
|
|
160
|
+
/** Current mirror geometry (matches the live session). */
|
|
161
|
+
get cols() {
|
|
162
|
+
return this._cols;
|
|
163
|
+
}
|
|
164
|
+
get rows() {
|
|
165
|
+
return this._rows;
|
|
166
|
+
}
|
|
167
|
+
/** Release the headless Terminal. Idempotent; feeds/resizes/reads after it are no-ops. */
|
|
168
|
+
dispose() {
|
|
169
|
+
if (this.disposed)
|
|
170
|
+
return;
|
|
171
|
+
this.disposed = true;
|
|
172
|
+
this.term.dispose();
|
|
173
|
+
// Settle `pending` so a read() that samples it after dispose resolves immediately rather than
|
|
174
|
+
// awaiting a parse callback the freed term may never fire — otherwise an in-flight classify (and,
|
|
175
|
+
// via the drainer's `ticking` flag, the backstop) could wedge (Claude round-2 CMAP). Belt-and-
|
|
176
|
+
// suspenders with read()'s disposed early-return; not reachable on the pinned @xterm/headless.
|
|
177
|
+
this.pending = Promise.resolve();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=session-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-screen.js","sourceRoot":"","sources":["../../src/terminal/session-screen.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import fs from 'node:fs';
|
|
|
19
19
|
import path from 'node:path';
|
|
20
20
|
import { createRequire } from 'node:module';
|
|
21
21
|
import { ShellperProcess } from './shellper-process.js';
|
|
22
|
+
import { REPLAY_BUFFER_MAX_BYTES } from './shellper-replay-buffer.js';
|
|
22
23
|
// createRequire enables importing native/CJS modules (like node-pty) from ESM.
|
|
23
24
|
// The package uses "type": "module", so bare `require()` is not available.
|
|
24
25
|
const require = createRequire(import.meta.url);
|
|
@@ -130,7 +131,7 @@ async function main() {
|
|
|
130
131
|
catch {
|
|
131
132
|
// File doesn't exist — fine
|
|
132
133
|
}
|
|
133
|
-
const shellper = new ShellperProcess(createRealPty, config.socketPath, config.replayBufferLines ?? 10_000, logStderr);
|
|
134
|
+
const shellper = new ShellperProcess(createRealPty, config.socketPath, config.replayBufferLines ?? 10_000, logStderr, config.replayBufferBytes ?? REPLAY_BUFFER_MAX_BYTES);
|
|
134
135
|
logStderr(`Shellper started: pid=${process.pid}, command=${config.command}, socket=${config.socketPath}`);
|
|
135
136
|
// Start the shellper (spawns PTY and listens on socket)
|
|
136
137
|
await shellper.start(config.command, config.args, config.cwd, config.env, config.cols, config.rows);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-main.js","sourceRoot":"","sources":["../../src/terminal/shellper-main.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAsC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"shellper-main.js","sourceRoot":"","sources":["../../src/terminal/shellper-main.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ export declare class ShellperProcess extends EventEmitter {
|
|
|
50
50
|
private lastDataAt;
|
|
51
51
|
private exited;
|
|
52
52
|
private exitInfo;
|
|
53
|
-
constructor(ptyFactory: () => IShellperPty, socketPath: string, replayBufferLines?: number, log?: (msg: string) => void);
|
|
53
|
+
constructor(ptyFactory: () => IShellperPty, socketPath: string, replayBufferLines?: number, log?: (msg: string) => void, replayBufferBytes?: number);
|
|
54
54
|
/**
|
|
55
55
|
* Start the shellper: spawn the PTY and begin listening on the Unix socket.
|
|
56
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-process.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0B3C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAClE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAClF,GAAG,EAAE,MAAM,CAAC;CACb;AAYD,qBAAa,eAAgB,SAAQ,YAAY;IAyB7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IA3BtB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,SAAS,CAAsB;IAMvC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IAMvB,OAAO,CAAC,QAAQ,CAAwD;gBAGrD,UAAU,EAAE,MAAM,YAAY,EAC9B,UAAU,EAAE,MAAM,EACnC,iBAAiB,GAAE,MAAe,EACjB,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe;
|
|
1
|
+
{"version":3,"file":"shellper-process.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import fs from 'node:fs';
|
|
|
17
17
|
import net from 'node:net';
|
|
18
18
|
import { EventEmitter } from 'node:events';
|
|
19
19
|
import { FrameType, PROTOCOL_VERSION, ALLOWED_SIGNALS, REPLAY_PAYLOAD_MAX, createFrameParser, encodeData, encodeWelcome, encodeExit, encodeReplay, encodePong, parseJsonPayload, isKnownFrameType, } from './shellper-protocol.js';
|
|
20
|
-
import { ShellperReplayBuffer } from './shellper-replay-buffer.js';
|
|
20
|
+
import { ShellperReplayBuffer, REPLAY_BUFFER_MAX_BYTES } from './shellper-replay-buffer.js';
|
|
21
21
|
import { DEFAULT_COLS, DEFAULT_ROWS } from './index.js';
|
|
22
22
|
// --- ShellperProcess ---
|
|
23
23
|
export class ShellperProcess extends EventEmitter {
|
|
@@ -46,12 +46,12 @@ export class ShellperProcess extends EventEmitter {
|
|
|
46
46
|
// EXIT broadcast reaches nobody, and the client hangs forever waiting for an
|
|
47
47
|
// EXIT frame that already went out (Bugfix #905).
|
|
48
48
|
exitInfo = null;
|
|
49
|
-
constructor(ptyFactory, socketPath, replayBufferLines = 10_000, log = () => { }) {
|
|
49
|
+
constructor(ptyFactory, socketPath, replayBufferLines = 10_000, log = () => { }, replayBufferBytes = REPLAY_BUFFER_MAX_BYTES) {
|
|
50
50
|
super();
|
|
51
51
|
this.ptyFactory = ptyFactory;
|
|
52
52
|
this.socketPath = socketPath;
|
|
53
53
|
this.log = log;
|
|
54
|
-
this.replayBuffer = new ShellperReplayBuffer(replayBufferLines);
|
|
54
|
+
this.replayBuffer = new ShellperReplayBuffer(replayBufferLines, replayBufferBytes);
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Start the shellper: spawn the PTY and begin listening on the Unix socket.
|
|
@@ -295,11 +295,20 @@ export class ShellperProcess extends EventEmitter {
|
|
|
295
295
|
// that fit; a tail-trimmed replay can render imperfectly for alt-screen
|
|
296
296
|
// TUIs (#1047), but the client's post-connect resize nudge repaints,
|
|
297
297
|
// and a truncated replay beats a dead connection.
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
298
|
+
//
|
|
299
|
+
// #1205: the cap is passed *into* the buffer rather than applied to its
|
|
300
|
+
// result. This path runs on every connect, so capping afterwards meant
|
|
301
|
+
// allocating a copy of the entire session history first — the multi-GB
|
|
302
|
+
// open-time spike.
|
|
303
|
+
//
|
|
304
|
+
// There is deliberately no post-hoc `length > REPLAY_PAYLOAD_MAX` guard
|
|
305
|
+
// here. Passing the cap in makes one unreachable: getReplayData never
|
|
306
|
+
// returns more than its argument. An earlier revision kept such a guard as
|
|
307
|
+
// "defense in depth" and claimed a test covered it; neither was true, and
|
|
308
|
+
// an unreachable branch that looks load-bearing is worse than none. The
|
|
309
|
+
// invariant is enforced by getReplayData's contract and pinned by the
|
|
310
|
+
// oversized-retention test, which fails if this argument is ever dropped.
|
|
311
|
+
const replayData = this.replayBuffer.getReplayData(REPLAY_PAYLOAD_MAX);
|
|
303
312
|
// #1198: send REPLAY even when empty, so a client awaiting the frame
|
|
304
313
|
// resolves immediately instead of burning its timeout. Creation-time
|
|
305
314
|
// attach awaits the frame to avoid racing early child output into a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-process.js","sourceRoot":"","sources":["../../src/terminal/shellper-process.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shellper-process.js","sourceRoot":"","sources":["../../src/terminal/shellper-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,32 +2,94 @@
|
|
|
2
2
|
* Standalone replay buffer for the shellper process.
|
|
3
3
|
*
|
|
4
4
|
* Unlike RingBuffer (which stores lines), this stores raw byte chunks
|
|
5
|
-
* to preserve exact terminal output including escape sequences. It
|
|
6
|
-
* the
|
|
5
|
+
* to preserve exact terminal output including escape sequences. It evicts
|
|
6
|
+
* the oldest chunks when either the line or the byte ceiling is exceeded;
|
|
7
|
+
* both ceilings are needed, because a full-screen TUI emits almost no
|
|
8
|
+
* newlines and so is bounded only by the byte one (#1205).
|
|
7
9
|
*
|
|
8
10
|
* This module has NO dependencies beyond Node.js built-ins so the shellper
|
|
9
11
|
* process doesn't need to pull in the full package dependency tree.
|
|
12
|
+
* (shellper-protocol.ts is a sibling module under the same constraint.)
|
|
10
13
|
*/
|
|
14
|
+
/**
|
|
15
|
+
* Byte ceiling on what this buffer retains (#1205). Until it existed the buffer
|
|
16
|
+
* was bounded only by line count, and a full-screen TUI (which redraws in place
|
|
17
|
+
* and emits almost no newlines) grew it without limit for the life of the
|
|
18
|
+
* session — multi-GB in the field.
|
|
19
|
+
*
|
|
20
|
+
* Derived from REPLAY_PAYLOAD_MAX rather than written as its own literal, and
|
|
21
|
+
* that derivation is the point: every send is capped at REPLAY_PAYLOAD_MAX and
|
|
22
|
+
* ShellperProcess.getReplayData() has no production callers, so it is provably
|
|
23
|
+
* the most that can ever leave the process. Bytes retained above it are
|
|
24
|
+
* unreadable by any consumer and are pure resident cost. Tying the two together
|
|
25
|
+
* keeps that true if the send cap ever moves — retaining more than can be sent
|
|
26
|
+
* would be waste, retaining less would make the send cap unreachable.
|
|
27
|
+
*
|
|
28
|
+
* This is a retention policy, not a wire constraint, which is why it lives here
|
|
29
|
+
* next to the buffer rather than in shellper-protocol.ts.
|
|
30
|
+
*/
|
|
31
|
+
export declare const REPLAY_BUFFER_MAX_BYTES: number;
|
|
11
32
|
export declare class ShellperReplayBuffer {
|
|
12
33
|
private chunks;
|
|
13
34
|
private totalBytes;
|
|
14
35
|
private readonly maxLines;
|
|
36
|
+
private readonly maxBytes;
|
|
15
37
|
private lineCount;
|
|
16
38
|
/**
|
|
17
39
|
* @param maxLines Maximum number of lines to retain. Lines are delimited
|
|
18
40
|
* by newline characters in the raw data stream.
|
|
41
|
+
* @param maxBytes Maximum bytes to retain. Required because `maxLines` alone
|
|
42
|
+
* does not bound anything for a full-screen TUI: such an app redraws in
|
|
43
|
+
* place via cursor addressing and emits almost no newlines, so the line
|
|
44
|
+
* ceiling never fires and the buffer grows for the life of the session
|
|
45
|
+
* (#1205). Defaults to REPLAY_BUFFER_MAX_BYTES.
|
|
19
46
|
*/
|
|
20
|
-
constructor(maxLines?: number);
|
|
47
|
+
constructor(maxLines?: number, maxBytes?: number);
|
|
21
48
|
/**
|
|
22
49
|
* Append raw PTY output data to the buffer.
|
|
23
|
-
* Evicts oldest chunks if the line
|
|
50
|
+
* Evicts oldest chunks if either the line or the byte ceiling is exceeded.
|
|
24
51
|
*/
|
|
25
52
|
append(data: Buffer | string): void;
|
|
26
53
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
54
|
+
* Drop the oldest data until both ceilings are satisfied.
|
|
55
|
+
*
|
|
56
|
+
* Trimming from the front can cut mid-escape-sequence or discard an
|
|
57
|
+
* alt-screen-enter, which is why it was rejected in #1047. It is accepted
|
|
58
|
+
* here because every layer above already does exactly this (the send cap,
|
|
59
|
+
* the ring seed, the frame-skip path) and relies on the client's
|
|
60
|
+
* post-connect repaint nudge; an unbounded buffer, by contrast, killed
|
|
61
|
+
* sessions. Byte-driven cuts are ESC-aligned to narrow the window in which
|
|
62
|
+
* a client renders a truncated sequence as literal text.
|
|
63
|
+
*/
|
|
64
|
+
private evict;
|
|
65
|
+
/**
|
|
66
|
+
* Replace the only chunk with a trimmed version of itself.
|
|
67
|
+
*
|
|
68
|
+
* Copies rather than retaining the `subarray` view: a view keeps the entire
|
|
69
|
+
* original allocation alive, so trimming an oversized chunk down to the
|
|
70
|
+
* ceiling would free none of the memory this class exists to bound. The copy
|
|
71
|
+
* is at most `maxBytes` and only happens on the rare path where a single
|
|
72
|
+
* append exceeded a ceiling by itself.
|
|
73
|
+
*/
|
|
74
|
+
private replaceSoleChunk;
|
|
75
|
+
/**
|
|
76
|
+
* Get buffered data as a single Buffer, for the REPLAY frame on reconnection.
|
|
77
|
+
*
|
|
78
|
+
* @param maxBytes When given, return at most this many bytes (the most recent
|
|
79
|
+
* ones). The tail is collected by walking `chunks` backwards and slicing
|
|
80
|
+
* only the boundary chunk, so the allocation is O(maxBytes) rather than
|
|
81
|
+
* O(history).
|
|
82
|
+
*
|
|
83
|
+
* That distinction is the whole point (#1205). This runs on *every* client
|
|
84
|
+
* connect, and the caller's cap used to be applied to the result — meaning a
|
|
85
|
+
* multi-GB buffer allocated a multi-GB copy on top of itself at exactly the
|
|
86
|
+
* moment a user opened the terminal, then threw almost all of it away. Peak
|
|
87
|
+
* footprint doubled, and sessions were killed for it. Capping here bounds the
|
|
88
|
+
* spike regardless of how large the buffer has already grown, which also
|
|
89
|
+
* makes this correct for a buffer that accumulated before any byte ceiling
|
|
90
|
+
* existed.
|
|
29
91
|
*/
|
|
30
|
-
getReplayData(): Buffer;
|
|
92
|
+
getReplayData(maxBytes?: number): Buffer;
|
|
31
93
|
/** Current number of bytes stored. */
|
|
32
94
|
get size(): number;
|
|
33
95
|
/** Approximate number of lines stored. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-replay-buffer.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-replay-buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shellper-replay-buffer.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-replay-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,QAAqB,CAAC;AAqC1D,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,SAAS,CAAK;IAEtB;;;;;;;;OAQG;gBACS,QAAQ,GAAE,MAAe,EAAE,QAAQ,GAAE,MAAgC;IAKjF;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,KAAK;IAoCb;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAyCxC,sCAAsC;IACtC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0CAA0C;IAC1C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,+BAA+B;IAC/B,KAAK,IAAI,IAAI;CAKd"}
|