@cluesmith/codev 3.2.3 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard-dist/assets/index-BZRTEMtH.css +32 -0
- package/dashboard-dist/assets/{index-BZ1x7x1X.js → index-JCbkpAcV.js} +33 -33
- package/dashboard-dist/assets/index-JCbkpAcV.js.map +1 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +173 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/attach.js +2 -2
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +16 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/inbox.d.ts +42 -0
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -0
- package/dist/agent-farm/commands/inbox.js +129 -0
- package/dist/agent-farm/commands/inbox.js.map +1 -0
- package/dist/agent-farm/commands/interrupt.d.ts +20 -0
- package/dist/agent-farm/commands/interrupt.d.ts.map +1 -0
- package/dist/agent-farm/commands/interrupt.js +65 -0
- package/dist/agent-farm/commands/interrupt.js.map +1 -0
- package/dist/agent-farm/commands/reset/constants.d.ts +52 -0
- package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/constants.js +52 -0
- package/dist/agent-farm/commands/reset/constants.js.map +1 -0
- package/dist/agent-farm/commands/reset/context.d.ts +230 -0
- package/dist/agent-farm/commands/reset/context.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/context.js +428 -0
- package/dist/agent-farm/commands/reset/context.js.map +1 -0
- package/dist/agent-farm/commands/reset/index.d.ts +192 -0
- package/dist/agent-farm/commands/reset/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/index.js +488 -0
- package/dist/agent-farm/commands/reset/index.js.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts +97 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.js +149 -0
- package/dist/agent-farm/commands/reset/receipt.js.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts +117 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.js +313 -0
- package/dist/agent-farm/commands/reset/reorient.js.map +1 -0
- package/dist/agent-farm/commands/reset.d.ts +19 -0
- package/dist/agent-farm/commands/reset.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset.js +292 -0
- package/dist/agent-farm/commands/reset.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts +2 -2
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +52 -11
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/setup.d.ts +4 -1
- package/dist/agent-farm/commands/setup.d.ts.map +1 -1
- package/dist/agent-farm/commands/setup.js +8 -4
- package/dist/agent-farm/commands/setup.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +116 -6
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +345 -74
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +13 -1
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +105 -9
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/tower-sweep-husks.d.ts +6 -0
- package/dist/agent-farm/commands/tower-sweep-husks.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower-sweep-husks.js +77 -0
- package/dist/agent-farm/commands/tower-sweep-husks.js.map +1 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +34 -0
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/commands/whoami.d.ts +65 -0
- package/dist/agent-farm/commands/whoami.d.ts.map +1 -0
- package/dist/agent-farm/commands/whoami.js +196 -0
- package/dist/agent-farm/commands/whoami.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +80 -1
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/mailbox.d.ts +222 -0
- package/dist/agent-farm/db/mailbox.d.ts.map +1 -0
- package/dist/agent-farm/db/mailbox.js +304 -0
- package/dist/agent-farm/db/mailbox.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +35 -0
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +45 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/builder-lookup.d.ts +1 -1
- package/dist/agent-farm/lib/builder-lookup.js +2 -2
- package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
- package/dist/agent-farm/lib/reconnect-backoff.d.ts +54 -0
- package/dist/agent-farm/lib/reconnect-backoff.d.ts.map +1 -0
- package/dist/agent-farm/lib/reconnect-backoff.js +47 -0
- package/dist/agent-farm/lib/reconnect-backoff.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +16 -6
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +37 -6
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +69 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +218 -27
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/architect-session-holder.d.ts +133 -0
- package/dist/agent-farm/servers/architect-session-holder.d.ts.map +1 -0
- package/dist/agent-farm/servers/architect-session-holder.js +268 -0
- package/dist/agent-farm/servers/architect-session-holder.js.map +1 -0
- package/dist/agent-farm/servers/cron-delivery.d.ts +72 -0
- package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/cron-delivery.js +80 -0
- package/dist/agent-farm/servers/cron-delivery.js.map +1 -0
- package/dist/agent-farm/servers/delayed-send.d.ts +85 -0
- package/dist/agent-farm/servers/delayed-send.d.ts.map +1 -0
- package/dist/agent-farm/servers/delayed-send.js +165 -0
- package/dist/agent-farm/servers/delayed-send.js.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts +67 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.js +113 -0
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +370 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.js +617 -0
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +125 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.js +425 -0
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -0
- package/dist/agent-farm/servers/message-write.d.ts +53 -1
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +63 -0
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +23 -4
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/process-census.d.ts +41 -0
- package/dist/agent-farm/servers/process-census.d.ts.map +1 -0
- package/dist/agent-farm/servers/process-census.js +62 -0
- package/dist/agent-farm/servers/process-census.js.map +1 -0
- package/dist/agent-farm/servers/render-gate.d.ts +141 -0
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -0
- package/dist/agent-farm/servers/render-gate.js +251 -0
- package/dist/agent-farm/servers/render-gate.js.map +1 -0
- package/dist/agent-farm/servers/session-log-sweep.d.ts +93 -0
- package/dist/agent-farm/servers/session-log-sweep.d.ts.map +1 -0
- package/dist/agent-farm/servers/session-log-sweep.js +165 -0
- package/dist/agent-farm/servers/session-log-sweep.js.map +1 -0
- package/dist/agent-farm/servers/session-submit.d.ts +90 -0
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -0
- package/dist/agent-farm/servers/session-submit.js +127 -0
- package/dist/agent-farm/servers/session-submit.js.map +1 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.d.ts +87 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.d.ts.map +1 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.js +129 -0
- package/dist/agent-farm/servers/shellper-husk-sweep.js.map +1 -0
- package/dist/agent-farm/servers/tower-cron.d.ts +10 -7
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +58 -53
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts +14 -2
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +128 -19
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-messages.d.ts +38 -1
- package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-messages.js +106 -1
- package/dist/agent-farm/servers/tower-messages.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +16 -4
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +807 -99
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +241 -15
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +17 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +139 -124
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +63 -4
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-types.d.ts +2 -1
- package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +99 -1
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +242 -6
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +6 -21
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/servers/write-queue.d.ts +35 -0
- package/dist/agent-farm/servers/write-queue.d.ts.map +1 -0
- package/dist/agent-farm/servers/write-queue.js +56 -0
- package/dist/agent-farm/servers/write-queue.js.map +1 -0
- package/dist/agent-farm/state.d.ts +6 -1
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +5 -2
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +39 -0
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.d.ts +2 -2
- package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.js +3 -3
- package/dist/agent-farm/utils/agent-names.js.map +1 -1
- package/dist/agent-farm/utils/architect-name.d.ts +2 -2
- package/dist/agent-farm/utils/architect-name.d.ts.map +1 -1
- package/dist/agent-farm/utils/architect-name.js +3 -3
- package/dist/agent-farm/utils/architect-name.js.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +13 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +33 -1
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/harness.d.ts +103 -7
- package/dist/agent-farm/utils/harness.d.ts.map +1 -1
- package/dist/agent-farm/utils/harness.js +126 -19
- package/dist/agent-farm/utils/harness.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -32
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -2
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +7 -6
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/agy-auth-cache.d.ts +97 -0
- package/dist/commands/consult/agy-auth-cache.d.ts.map +1 -0
- package/dist/commands/consult/agy-auth-cache.js +320 -0
- package/dist/commands/consult/agy-auth-cache.js.map +1 -0
- package/dist/commands/consult/cli-options.d.ts +34 -0
- package/dist/commands/consult/cli-options.d.ts.map +1 -0
- package/dist/commands/consult/cli-options.js +67 -0
- package/dist/commands/consult/cli-options.js.map +1 -0
- package/dist/commands/consult/index.d.ts +56 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +330 -27
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/consult/metrics.d.ts +42 -0
- package/dist/commands/consult/metrics.d.ts.map +1 -1
- package/dist/commands/consult/metrics.js +129 -9
- package/dist/commands/consult/metrics.js.map +1 -1
- package/dist/commands/doctor.d.ts +28 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +258 -22
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/checks.d.ts +23 -0
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +60 -0
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/config.d.ts +20 -0
- package/dist/commands/porch/config.d.ts.map +1 -1
- package/dist/commands/porch/config.js +20 -0
- package/dist/commands/porch/config.js.map +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +32 -36
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +2 -41
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/update.d.ts +4 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +9 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/config.d.ts +70 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +67 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/consult-lanes.d.ts +149 -0
- package/dist/lib/consult-lanes.d.ts.map +1 -0
- package/dist/lib/consult-lanes.js +360 -0
- package/dist/lib/consult-lanes.js.map +1 -0
- package/dist/lib/default-branch.d.ts +1 -1
- package/dist/lib/default-branch.js +1 -1
- package/dist/lib/github.js +1 -1
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/gitignore.d.ts +25 -2
- package/dist/lib/gitignore.d.ts.map +1 -1
- package/dist/lib/gitignore.js +70 -0
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/migration-backup-audit.d.ts +64 -0
- package/dist/lib/migration-backup-audit.d.ts.map +1 -0
- package/dist/lib/migration-backup-audit.js +145 -0
- package/dist/lib/migration-backup-audit.js.map +1 -0
- package/dist/lib/prompt-behavior-metrics.d.ts +67 -0
- package/dist/lib/prompt-behavior-metrics.d.ts.map +1 -0
- package/dist/lib/prompt-behavior-metrics.js +290 -0
- package/dist/lib/prompt-behavior-metrics.js.map +1 -0
- package/dist/lib/protocol-drift-audit.d.ts +118 -0
- package/dist/lib/protocol-drift-audit.d.ts.map +1 -0
- package/dist/lib/protocol-drift-audit.js +217 -0
- package/dist/lib/protocol-drift-audit.js.map +1 -0
- package/dist/lib/scaffold.d.ts +10 -3
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +29 -26
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/lib/skeleton.d.ts +22 -1
- package/dist/lib/skeleton.d.ts.map +1 -1
- package/dist/lib/skeleton.js +120 -0
- package/dist/lib/skeleton.js.map +1 -1
- package/dist/lib/test-env.d.ts +74 -0
- package/dist/lib/test-env.d.ts.map +1 -0
- package/dist/lib/test-env.js +92 -0
- package/dist/lib/test-env.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +9 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +32 -6
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +156 -4
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +307 -42
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/ring-buffer.d.ts +39 -6
- package/dist/terminal/ring-buffer.d.ts.map +1 -1
- package/dist/terminal/ring-buffer.js +74 -6
- package/dist/terminal/ring-buffer.js.map +1 -1
- package/dist/terminal/session-manager.d.ts +129 -0
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +337 -44
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +91 -0
- package/dist/terminal/session-screen.d.ts.map +1 -0
- package/dist/terminal/session-screen.js +135 -0
- package/dist/terminal/session-screen.js.map +1 -0
- package/dist/terminal/shellper-client.d.ts +19 -4
- package/dist/terminal/shellper-client.d.ts.map +1 -1
- package/dist/terminal/shellper-client.js +70 -8
- package/dist/terminal/shellper-client.js.map +1 -1
- package/dist/terminal/shellper-main.js +2 -1
- package/dist/terminal/shellper-main.js.map +1 -1
- package/dist/terminal/shellper-process.d.ts +1 -1
- package/dist/terminal/shellper-process.d.ts.map +1 -1
- package/dist/terminal/shellper-process.js +33 -9
- package/dist/terminal/shellper-process.js.map +1 -1
- package/dist/terminal/shellper-protocol.d.ts +40 -2
- package/dist/terminal/shellper-protocol.d.ts.map +1 -1
- package/dist/terminal/shellper-protocol.js +72 -5
- package/dist/terminal/shellper-protocol.js.map +1 -1
- package/dist/terminal/shellper-replay-buffer.d.ts +69 -7
- package/dist/terminal/shellper-replay-buffer.d.ts.map +1 -1
- package/dist/terminal/shellper-replay-buffer.js +167 -31
- package/dist/terminal/shellper-replay-buffer.js.map +1 -1
- package/package.json +11 -9
- package/skeleton/.claude/skills/afx/SKILL.md +27 -1
- package/skeleton/.claude/skills/arch-init/SKILL.md +135 -0
- package/skeleton/.claude/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.claude/skills/codev/SKILL.md +33 -2
- package/skeleton/.claude/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/afx/SKILL.md +170 -0
- package/skeleton/.codex/skills/arch-init/SKILL.md +135 -0
- package/skeleton/.codex/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.codex/skills/codev/SKILL.md +90 -0
- package/skeleton/.codex/skills/consult/SKILL.md +96 -0
- package/skeleton/.codex/skills/generate-image/SKILL.md +45 -0
- package/skeleton/.codex/skills/porch/SKILL.md +60 -0
- package/skeleton/.codex/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/update-arch-docs/SKILL.md +132 -0
- package/skeleton/protocols/air/builder-prompt.md +28 -47
- package/skeleton/protocols/air/consult-types/impl-review.md +17 -34
- package/skeleton/protocols/air/consult-types/pr-review.md +14 -37
- package/skeleton/protocols/air/prompts/implement.md +20 -73
- package/skeleton/protocols/air/prompts/pr.md +22 -54
- package/skeleton/protocols/air/protocol.md +40 -71
- package/skeleton/protocols/aspir/builder-prompt.md +29 -66
- package/skeleton/protocols/aspir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/aspir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/aspir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/aspir/prompts/implement.md +27 -196
- package/skeleton/protocols/aspir/prompts/plan.md +21 -85
- package/skeleton/protocols/aspir/prompts/review.md +29 -228
- package/skeleton/protocols/aspir/prompts/specify.md +25 -111
- package/skeleton/protocols/aspir/protocol.json +10 -0
- package/skeleton/protocols/aspir/protocol.md +36 -82
- package/skeleton/protocols/bugfix/builder-prompt.md +23 -45
- package/skeleton/protocols/bugfix/consult-types/impl-review.md +21 -45
- package/skeleton/protocols/bugfix/consult-types/pr-review.md +18 -52
- package/skeleton/protocols/bugfix/prompts/fix.md +16 -61
- package/skeleton/protocols/bugfix/prompts/investigate.md +18 -62
- package/skeleton/protocols/bugfix/prompts/pr.md +22 -57
- package/skeleton/protocols/bugfix/protocol.md +44 -50
- package/skeleton/protocols/experiment/builder-prompt.md +25 -58
- package/skeleton/protocols/experiment/protocol.md +22 -188
- package/skeleton/protocols/experiment/templates/notes.md +11 -71
- package/skeleton/protocols/maintain/builder-prompt.md +24 -45
- package/skeleton/protocols/maintain/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/maintain/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/maintain/prompts/maintain.md +1 -1
- package/skeleton/protocols/maintain/protocol.md +32 -266
- package/skeleton/protocols/maintain/templates/maintenance-run.md +11 -0
- package/skeleton/protocols/pir/builder-prompt.md +30 -64
- package/skeleton/protocols/pir/consult-types/impl-review.md +17 -50
- package/skeleton/protocols/pir/consult-types/pr-review.md +11 -40
- package/skeleton/protocols/pir/prompts/implement.md +1 -2
- package/skeleton/protocols/pir/prompts/plan.md +0 -3
- package/skeleton/protocols/pir/prompts/review.md +1 -1
- package/skeleton/protocols/pir/protocol.md +54 -177
- package/skeleton/protocols/research/builder-prompt.md +27 -58
- package/skeleton/protocols/research/protocol.md +28 -153
- package/skeleton/protocols/spike/builder-prompt.md +30 -48
- package/skeleton/protocols/spike/protocol.md +24 -107
- package/skeleton/protocols/spike/templates/findings.md +9 -39
- package/skeleton/protocols/spir/builder-prompt.md +33 -62
- package/skeleton/protocols/spir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/spir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/spir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/spir/prompts/implement.md +26 -195
- package/skeleton/protocols/spir/prompts/plan.md +20 -84
- package/skeleton/protocols/spir/prompts/review.md +28 -227
- package/skeleton/protocols/spir/prompts/specify.md +24 -110
- package/skeleton/protocols/spir/protocol.json +10 -0
- package/skeleton/protocols/spir/protocol.md +84 -633
- package/skeleton/protocols/spir/templates/plan.md +28 -147
- package/skeleton/protocols/spir/templates/review.md +21 -80
- package/skeleton/protocols/spir/templates/spec.md +24 -118
- package/skeleton/resources/commands/agent-farm.md +348 -0
- package/skeleton/resources/commands/codev.md +5 -0
- package/skeleton/resources/commands/consult.md +262 -8
- package/skeleton/resources/commands/overview.md +1 -0
- package/skeleton/roles/architect.md +67 -306
- package/skeleton/roles/builder.md +77 -191
- package/skeleton/templates/AGENTS.md +2 -0
- package/skeleton/templates/CLAUDE.md +2 -0
- package/templates/tower.html +39 -2
- package/dashboard-dist/assets/index-BZ1x7x1X.js.map +0 -1
- package/dashboard-dist/assets/index-DB1KBSNE.css +0 -32
- package/dist/agent-farm/servers/send-buffer.d.ts +0 -59
- package/dist/agent-farm/servers/send-buffer.d.ts.map +0 -1
- package/dist/agent-farm/servers/send-buffer.js +0 -103
- package/dist/agent-farm/servers/send-buffer.js.map +0 -1
- package/skeleton/porch/prompts/defend.md +0 -108
- package/skeleton/porch/prompts/diagnose.md +0 -70
- package/skeleton/porch/prompts/evaluate.md +0 -132
- package/skeleton/porch/prompts/fix.md +0 -59
- package/skeleton/porch/prompts/implement.md +0 -88
- package/skeleton/porch/prompts/plan.md +0 -74
- package/skeleton/porch/prompts/pr.md +0 -84
- package/skeleton/porch/prompts/review.md +0 -249
- package/skeleton/porch/prompts/specify.md +0 -53
- package/skeleton/porch/prompts/test.md +0 -63
- package/skeleton/protocols/aspir/templates/plan.md +0 -184
- package/skeleton/protocols/aspir/templates/review.md +0 -120
- package/skeleton/protocols/aspir/templates/spec.md +0 -154
|
@@ -0,0 +1,91 @@
|
|
|
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 _cols;
|
|
49
|
+
private _rows;
|
|
50
|
+
private pending;
|
|
51
|
+
private disposed;
|
|
52
|
+
constructor(cols: number, rows: number);
|
|
53
|
+
/**
|
|
54
|
+
* Fold one chunk of PTY output into the screen. Called at the session's single output
|
|
55
|
+
* chokepoint for EVERY byte (live output and the reconnect-replay seed alike), so the
|
|
56
|
+
* mirror stays a faithful copy of what the real terminal shows. Cheap: a terminal
|
|
57
|
+
* emulator parse of the delta, not a whole-history re-render. A no-op after
|
|
58
|
+
* {@link dispose} — a late PTY frame arriving during teardown must not touch a freed term.
|
|
59
|
+
*/
|
|
60
|
+
feed(data: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Resize the mirror to match the live session (Spec 1313: the gate renders at the
|
|
63
|
+
* session's geometry so wrapping reconstructs identically). Kept in lockstep with
|
|
64
|
+
* `PtySession.resize`. A no-op after {@link dispose}.
|
|
65
|
+
*/
|
|
66
|
+
resize(cols: number, rows: number): void;
|
|
67
|
+
/**
|
|
68
|
+
* Flush the parser and hand back the live buffer for the gate to read SYNCHRONOUSLY.
|
|
69
|
+
*
|
|
70
|
+
* `await this.pending` drains every byte fed up to this call into the grid, so the returned
|
|
71
|
+
* buffer reflects AT LEAST the output counted by `ringBuffer.bytesWritten` at the moment the
|
|
72
|
+
* caller sampled its change-token (xterm parses writes FIFO but may run ahead into later queued
|
|
73
|
+
* writes, so the buffer can reflect *more* — never less). That lower bound is the property the
|
|
74
|
+
* delivery path's token-before/after TOCTOU relies on: the caller MUST read the returned buffer
|
|
75
|
+
* with no intervening `await` (the classifier is synchronous), so no `feed` can interleave the
|
|
76
|
+
* read; any output that landed during THIS flush already advanced `bytesWritten`, so the caller's
|
|
77
|
+
* post-classify token re-check trips (→ hold) and nothing is delivered onto it.
|
|
78
|
+
*
|
|
79
|
+
* After {@link dispose} the term is freed and its parse callback may never fire, so this returns
|
|
80
|
+
* the current view WITHOUT awaiting `pending` — a disposed screen has no coherent frame, the
|
|
81
|
+
* classifier finds no marker → fail-safe hold, and `PtySession.cleanup` nulls `gateScreen` so the
|
|
82
|
+
* wiring already holds before a read() can reach a disposed mirror in practice.
|
|
83
|
+
*/
|
|
84
|
+
read(): Promise<ScreenView>;
|
|
85
|
+
/** Current mirror geometry (matches the live session). */
|
|
86
|
+
get cols(): number;
|
|
87
|
+
get rows(): number;
|
|
88
|
+
/** Release the headless Terminal. Idempotent; feeds/resizes/reads after it are no-ops. */
|
|
89
|
+
dispose(): void;
|
|
90
|
+
}
|
|
91
|
+
//# 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;AAOH,OAAO,KAAK,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAcpE,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,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;IAMtC;;;;;;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,0DAA0D;IAC1D,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0FAA0F;IAC1F,OAAO,IAAI,IAAI;CAUhB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
import xtermHeadless from '@xterm/headless';
|
|
44
|
+
const { Terminal } = xtermHeadless;
|
|
45
|
+
/**
|
|
46
|
+
* Scrollback retained by the mirror. The gate reads ONLY the current viewport
|
|
47
|
+
* (`viewportY … viewportY + rows`), never scrollback, so this can be modest — it exists
|
|
48
|
+
* only so a transient scroll doesn't momentarily drop viewport lines during reflow. Kept
|
|
49
|
+
* small to bound per-session memory (one Terminal per live session): at ~200 lines it is a
|
|
50
|
+
* few hundred KB even at a wide geometry. The viewport a classify sees is identical for any
|
|
51
|
+
* scrollback ≥ rows, so this never changes a verdict (asserted by the production-path tests).
|
|
52
|
+
*/
|
|
53
|
+
const GATE_SCROLLBACK = 200;
|
|
54
|
+
export class SessionScreen {
|
|
55
|
+
term;
|
|
56
|
+
_cols;
|
|
57
|
+
_rows;
|
|
58
|
+
// Promise of the most recently issued write's parse completion. `@xterm/headless`
|
|
59
|
+
// parses asynchronously and processes writes FIFO, so awaiting the LATEST write's
|
|
60
|
+
// callback guarantees every earlier write is parsed too — the flush {@link read} needs.
|
|
61
|
+
pending = Promise.resolve();
|
|
62
|
+
disposed = false;
|
|
63
|
+
constructor(cols, rows) {
|
|
64
|
+
this._cols = cols;
|
|
65
|
+
this._rows = rows;
|
|
66
|
+
this.term = new Terminal({ cols, rows, allowProposedApi: true, scrollback: GATE_SCROLLBACK });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fold one chunk of PTY output into the screen. Called at the session's single output
|
|
70
|
+
* chokepoint for EVERY byte (live output and the reconnect-replay seed alike), so the
|
|
71
|
+
* mirror stays a faithful copy of what the real terminal shows. Cheap: a terminal
|
|
72
|
+
* emulator parse of the delta, not a whole-history re-render. A no-op after
|
|
73
|
+
* {@link dispose} — a late PTY frame arriving during teardown must not touch a freed term.
|
|
74
|
+
*/
|
|
75
|
+
feed(data) {
|
|
76
|
+
if (this.disposed)
|
|
77
|
+
return;
|
|
78
|
+
this.pending = new Promise((resolve) => this.term.write(data, () => resolve()));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resize the mirror to match the live session (Spec 1313: the gate renders at the
|
|
82
|
+
* session's geometry so wrapping reconstructs identically). Kept in lockstep with
|
|
83
|
+
* `PtySession.resize`. A no-op after {@link dispose}.
|
|
84
|
+
*/
|
|
85
|
+
resize(cols, rows) {
|
|
86
|
+
if (this.disposed)
|
|
87
|
+
return;
|
|
88
|
+
this._cols = cols;
|
|
89
|
+
this._rows = rows;
|
|
90
|
+
this.term.resize(cols, rows);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Flush the parser and hand back the live buffer for the gate to read SYNCHRONOUSLY.
|
|
94
|
+
*
|
|
95
|
+
* `await this.pending` drains every byte fed up to this call into the grid, so the returned
|
|
96
|
+
* buffer reflects AT LEAST the output counted by `ringBuffer.bytesWritten` at the moment the
|
|
97
|
+
* caller sampled its change-token (xterm parses writes FIFO but may run ahead into later queued
|
|
98
|
+
* writes, so the buffer can reflect *more* — never less). That lower bound is the property the
|
|
99
|
+
* delivery path's token-before/after TOCTOU relies on: the caller MUST read the returned buffer
|
|
100
|
+
* with no intervening `await` (the classifier is synchronous), so no `feed` can interleave the
|
|
101
|
+
* read; any output that landed during THIS flush already advanced `bytesWritten`, so the caller's
|
|
102
|
+
* post-classify token re-check trips (→ hold) and nothing is delivered onto it.
|
|
103
|
+
*
|
|
104
|
+
* After {@link dispose} the term is freed and its parse callback may never fire, so this returns
|
|
105
|
+
* the current view WITHOUT awaiting `pending` — a disposed screen has no coherent frame, the
|
|
106
|
+
* classifier finds no marker → fail-safe hold, and `PtySession.cleanup` nulls `gateScreen` so the
|
|
107
|
+
* wiring already holds before a read() can reach a disposed mirror in practice.
|
|
108
|
+
*/
|
|
109
|
+
async read() {
|
|
110
|
+
if (this.disposed)
|
|
111
|
+
return { term: this.term, cols: this._cols, rows: this._rows };
|
|
112
|
+
await this.pending;
|
|
113
|
+
return { term: this.term, cols: this._cols, rows: this._rows };
|
|
114
|
+
}
|
|
115
|
+
/** Current mirror geometry (matches the live session). */
|
|
116
|
+
get cols() {
|
|
117
|
+
return this._cols;
|
|
118
|
+
}
|
|
119
|
+
get rows() {
|
|
120
|
+
return this._rows;
|
|
121
|
+
}
|
|
122
|
+
/** Release the headless Terminal. Idempotent; feeds/resizes/reads after it are no-ops. */
|
|
123
|
+
dispose() {
|
|
124
|
+
if (this.disposed)
|
|
125
|
+
return;
|
|
126
|
+
this.disposed = true;
|
|
127
|
+
this.term.dispose();
|
|
128
|
+
// Settle `pending` so a read() that samples it after dispose resolves immediately rather than
|
|
129
|
+
// awaiting a parse callback the freed term may never fire — otherwise an in-flight classify (and,
|
|
130
|
+
// via the drainer's `ticking` flag, the backstop) could wedge (Claude round-2 CMAP). Belt-and-
|
|
131
|
+
// suspenders with read()'s disposed early-return; not reachable on the pinned @xterm/headless.
|
|
132
|
+
this.pending = Promise.resolve();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=session-screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-screen.js","sourceRoot":"","sources":["../../src/terminal/session-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,wFAAwF;AACxF,4EAA4E;AAC5E,sFAAsF;AACtF,qFAAqF;AACrF,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,eAAe,GAAG,GAAG,CAAC;AAS5B,MAAM,OAAO,aAAa;IACP,IAAI,CAAmB;IAChC,KAAK,CAAS;IACd,KAAK,CAAS;IACtB,kFAAkF;IAClF,kFAAkF;IAClF,wFAAwF;IAChF,OAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAClF,MAAM,IAAI,CAAC,OAAO,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,0FAA0F;IAC1F,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,8FAA8F;QAC9F,kGAAkG;QAClG,+FAA+F;QAC/F,+FAA+F;QAC/F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -14,11 +14,15 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { EventEmitter } from 'node:events';
|
|
16
16
|
import { type WelcomeMessage, type SpawnMessage } from './shellper-protocol.js';
|
|
17
|
+
export declare const DEFAULT_REPLAY_TIMEOUT_MS = 500;
|
|
18
|
+
export declare const LEGACY_REPLAY_TIMEOUT_MS = 50;
|
|
17
19
|
export interface IShellperClient extends EventEmitter {
|
|
18
20
|
connect(): Promise<WelcomeMessage>;
|
|
19
21
|
disconnect(): void;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
/** Returns false when the frame was dropped because the client is not connected (#1198). */
|
|
23
|
+
write(data: string | Buffer): boolean;
|
|
24
|
+
/** Returns false when the frame was dropped because the client is not connected (#1198). */
|
|
25
|
+
resize(cols: number, rows: number): boolean;
|
|
22
26
|
signal(sig: number): void;
|
|
23
27
|
spawn(msg: SpawnMessage): void;
|
|
24
28
|
ping(): void;
|
|
@@ -38,8 +42,10 @@ export declare class ShellperClient extends EventEmitter implements IShellperCli
|
|
|
38
42
|
private readonly clientType;
|
|
39
43
|
private socket;
|
|
40
44
|
private _connected;
|
|
45
|
+
private _closePending;
|
|
41
46
|
private replayData;
|
|
42
47
|
private _lastDataAt;
|
|
48
|
+
private _alwaysSendsReplay;
|
|
43
49
|
constructor(socketPath: string, clientType?: 'tower' | 'terminal');
|
|
44
50
|
/**
|
|
45
51
|
* Emit an 'error' event only if listeners are attached.
|
|
@@ -64,8 +70,8 @@ export declare class ShellperClient extends EventEmitter implements IShellperCli
|
|
|
64
70
|
private handleFrame;
|
|
65
71
|
disconnect(): void;
|
|
66
72
|
private cleanup;
|
|
67
|
-
write(data: string | Buffer):
|
|
68
|
-
resize(cols: number, rows: number):
|
|
73
|
+
write(data: string | Buffer): boolean;
|
|
74
|
+
resize(cols: number, rows: number): boolean;
|
|
69
75
|
signal(sig: number): void;
|
|
70
76
|
spawn(msg: SpawnMessage): void;
|
|
71
77
|
ping(): void;
|
|
@@ -76,6 +82,15 @@ export declare class ShellperClient extends EventEmitter implements IShellperCli
|
|
|
76
82
|
* The shellper sends REPLAY immediately after WELCOME, but they may
|
|
77
83
|
* arrive in separate reads. Returns the replay data, or empty Buffer
|
|
78
84
|
* if no REPLAY arrives within the timeout (shellper had nothing to replay).
|
|
85
|
+
*
|
|
86
|
+
* #1215: a shellper that didn't advertise `alwaysSendsReplay` on WELCOME
|
|
87
|
+
* only sends REPLAY when it has buffered data — an idle one never sends
|
|
88
|
+
* it at all, so waiting the full `timeoutMs` (DEFAULT_REPLAY_TIMEOUT_MS
|
|
89
|
+
* by default) for every such session is pure stall. Bound the wait to
|
|
90
|
+
* LEGACY_REPLAY_TIMEOUT_MS instead: short enough to keep idle-session
|
|
91
|
+
* cost low, long enough to still catch a busy legacy shellper's REPLAY
|
|
92
|
+
* arriving on the later socket read this method exists to wait for in
|
|
93
|
+
* the first place (#1198).
|
|
79
94
|
*/
|
|
80
95
|
waitForReplay(timeoutMs?: number): Promise<Buffer>;
|
|
81
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-client.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAcL,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"shellper-client.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAcL,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAKhC,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAQ7C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,UAAU,IAAI,IAAI,CAAC;IACnB,4FAA4F;IAC5F,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,4FAA4F;IAC5F,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,IAAI,IAAI,IAAI,CAAC;IACb,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,eAAe;IAqCvE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IArC7B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAO3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAuB;IAmBzC,OAAO,CAAC,WAAW,CAAsB;IAKzC,OAAO,CAAC,kBAAkB,CAAS;gBAGhB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,OAAO,GAAG,UAAoB;IAK7D;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAMrB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;OAKG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IA6HlC,OAAO,CAAC,WAAW;IAwCnB,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,OAAO;IAWf,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAMrC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAM3C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAK9B,IAAI,IAAI,IAAI;IAKZ,0DAA0D;IAC1D,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,SAAS,GAAE,MAAkC,GAAG,OAAO,CAAC,MAAM,CAAC;CAoB9E"}
|
|
@@ -15,11 +15,29 @@
|
|
|
15
15
|
import net from 'node:net';
|
|
16
16
|
import { EventEmitter } from 'node:events';
|
|
17
17
|
import { FrameType, PROTOCOL_VERSION, createFrameParser, encodeHello, encodeData, encodeResize, encodeSignal, encodeSpawn, encodePing, encodePong, parseJsonPayload, isKnownFrameType, } from './shellper-protocol.js';
|
|
18
|
+
// Default bound for waitForReplay() against a shellper that advertised
|
|
19
|
+
// `alwaysSendsReplay` on WELCOME — long enough to cover a slow/large REPLAY
|
|
20
|
+
// send (see REPLAY_PAYLOAD_MAX) without the caller having to think about it.
|
|
21
|
+
export const DEFAULT_REPLAY_TIMEOUT_MS = 500;
|
|
22
|
+
// #1215: bound on how long waitForReplay() waits for a shellper that hasn't
|
|
23
|
+
// advertised `alwaysSendsReplay` on WELCOME. Short enough that an idle
|
|
24
|
+
// pre-#1215-behavior shellper's stall is negligible even across many
|
|
25
|
+
// sessions; long enough to still catch a busy legacy shellper's REPLAY
|
|
26
|
+
// frame arriving on a later socket read (same-process reads are normally
|
|
27
|
+
// sub-millisecond) — see waitForReplay() for the full rationale.
|
|
28
|
+
export const LEGACY_REPLAY_TIMEOUT_MS = 50;
|
|
18
29
|
export class ShellperClient extends EventEmitter {
|
|
19
30
|
socketPath;
|
|
20
31
|
clientType;
|
|
21
32
|
socket = null;
|
|
22
33
|
_connected = false;
|
|
34
|
+
// #1198: a 'close' emission is owed to consumers. Recorded by cleanup()
|
|
35
|
+
// when it tears down a live connection that did not ask to die (anything
|
|
36
|
+
// other than disconnect()); consumed by the socket's 'close' event. The
|
|
37
|
+
// decision must be captured at teardown time because error paths run
|
|
38
|
+
// cleanup() before that event fires — reading _connected inside the close
|
|
39
|
+
// handler is what swallowed the emission.
|
|
40
|
+
_closePending = false;
|
|
23
41
|
replayData = null;
|
|
24
42
|
// Wall-clock epoch (ms) of the last PTY byte the shellper has seen.
|
|
25
43
|
//
|
|
@@ -40,6 +58,11 @@ export class ShellperClient extends EventEmitter {
|
|
|
40
58
|
// own `lastDataAt`; from there, PtySession owns the read side and
|
|
41
59
|
// /api/overview enrichment uses ptySession.lastDataAt.
|
|
42
60
|
_lastDataAt = Date.now();
|
|
61
|
+
// #1215: whether the connected shellper guarantees a REPLAY frame right
|
|
62
|
+
// after WELCOME, even when empty. False until WELCOME says otherwise —
|
|
63
|
+
// an older shellper never sends this field, so waitForReplay() must not
|
|
64
|
+
// assume an empty REPLAY is coming for it.
|
|
65
|
+
_alwaysSendsReplay = false;
|
|
43
66
|
constructor(socketPath, clientType = 'tower') {
|
|
44
67
|
super();
|
|
45
68
|
this.socketPath = socketPath;
|
|
@@ -78,6 +101,7 @@ export class ShellperClient extends EventEmitter {
|
|
|
78
101
|
reject(new Error('Already connected'));
|
|
79
102
|
return;
|
|
80
103
|
}
|
|
104
|
+
this._closePending = false;
|
|
81
105
|
const socket = net.createConnection(this.socketPath);
|
|
82
106
|
this.socket = socket;
|
|
83
107
|
let handshakeResolved = false;
|
|
@@ -97,15 +121,31 @@ export class ShellperClient extends EventEmitter {
|
|
|
97
121
|
this.safeEmitError(err);
|
|
98
122
|
this.cleanup();
|
|
99
123
|
});
|
|
124
|
+
// #1198: the parser drops oversized frames instead of erroring (a
|
|
125
|
+
// long-lived shellper's replay can exceed the frame cap). The
|
|
126
|
+
// connection stays healthy; surface what was lost. For a dropped
|
|
127
|
+
// REPLAY, unblock replay waiters with an empty replay so adoption
|
|
128
|
+
// proceeds (viewers repaint via the post-connect resize nudge).
|
|
129
|
+
parser.on('frame-skipped', (info) => {
|
|
130
|
+
if (info.type === FrameType.REPLAY && this.replayData === null) {
|
|
131
|
+
this.replayData = Buffer.alloc(0);
|
|
132
|
+
this.emit('replay', this.replayData);
|
|
133
|
+
}
|
|
134
|
+
this.emit('frame-skipped', info);
|
|
135
|
+
});
|
|
100
136
|
socket.on('connect', () => {
|
|
101
137
|
socket.pipe(parser);
|
|
102
138
|
// Send HELLO to initiate handshake
|
|
103
139
|
socket.write(encodeHello({ version: PROTOCOL_VERSION, clientType: this.clientType }));
|
|
104
140
|
});
|
|
105
141
|
socket.on('close', () => {
|
|
106
|
-
const wasConnected = this._connected;
|
|
107
142
|
this.cleanup();
|
|
108
|
-
|
|
143
|
+
// Emit exactly once per unexpectedly lost live connection.
|
|
144
|
+
// _closePending was recorded by whichever cleanup() ran first — an
|
|
145
|
+
// error path's or the one just above — so error-path closes are no
|
|
146
|
+
// longer swallowed (#1198).
|
|
147
|
+
if (this._closePending) {
|
|
148
|
+
this._closePending = false;
|
|
109
149
|
this.emit('close');
|
|
110
150
|
}
|
|
111
151
|
if (!handshakeResolved) {
|
|
@@ -145,6 +185,10 @@ export class ShellperClient extends EventEmitter {
|
|
|
145
185
|
if (typeof welcome.lastDataAt === 'number') {
|
|
146
186
|
this._lastDataAt = welcome.lastDataAt;
|
|
147
187
|
}
|
|
188
|
+
// #1215: hydrate the REPLAY guarantee flag. Old shellpers omit
|
|
189
|
+
// it (falsy default stands); waitForReplay() uses this to pick
|
|
190
|
+
// its timeout.
|
|
191
|
+
this._alwaysSendsReplay = welcome.alwaysSendsReplay === true;
|
|
148
192
|
// Replay any buffered frames received before WELCOME
|
|
149
193
|
for (const buffered of preWelcomeBuffer) {
|
|
150
194
|
this.handleFrame(buffered);
|
|
@@ -209,9 +253,12 @@ export class ShellperClient extends EventEmitter {
|
|
|
209
253
|
}
|
|
210
254
|
}
|
|
211
255
|
disconnect() {
|
|
212
|
-
this.cleanup();
|
|
256
|
+
this.cleanup(true);
|
|
213
257
|
}
|
|
214
|
-
cleanup() {
|
|
258
|
+
cleanup(intentional = false) {
|
|
259
|
+
if (this._connected && !intentional) {
|
|
260
|
+
this._closePending = true;
|
|
261
|
+
}
|
|
215
262
|
this._connected = false;
|
|
216
263
|
if (this.socket && !this.socket.destroyed) {
|
|
217
264
|
this.socket.destroy();
|
|
@@ -220,13 +267,15 @@ export class ShellperClient extends EventEmitter {
|
|
|
220
267
|
}
|
|
221
268
|
write(data) {
|
|
222
269
|
if (!this._connected || !this.socket)
|
|
223
|
-
return;
|
|
270
|
+
return false;
|
|
224
271
|
this.socket.write(encodeData(data));
|
|
272
|
+
return true;
|
|
225
273
|
}
|
|
226
274
|
resize(cols, rows) {
|
|
227
275
|
if (!this._connected || !this.socket)
|
|
228
|
-
return;
|
|
276
|
+
return false;
|
|
229
277
|
this.socket.write(encodeResize({ cols, rows }));
|
|
278
|
+
return true;
|
|
230
279
|
}
|
|
231
280
|
signal(sig) {
|
|
232
281
|
if (!this._connected || !this.socket)
|
|
@@ -252,16 +301,29 @@ export class ShellperClient extends EventEmitter {
|
|
|
252
301
|
* The shellper sends REPLAY immediately after WELCOME, but they may
|
|
253
302
|
* arrive in separate reads. Returns the replay data, or empty Buffer
|
|
254
303
|
* if no REPLAY arrives within the timeout (shellper had nothing to replay).
|
|
304
|
+
*
|
|
305
|
+
* #1215: a shellper that didn't advertise `alwaysSendsReplay` on WELCOME
|
|
306
|
+
* only sends REPLAY when it has buffered data — an idle one never sends
|
|
307
|
+
* it at all, so waiting the full `timeoutMs` (DEFAULT_REPLAY_TIMEOUT_MS
|
|
308
|
+
* by default) for every such session is pure stall. Bound the wait to
|
|
309
|
+
* LEGACY_REPLAY_TIMEOUT_MS instead: short enough to keep idle-session
|
|
310
|
+
* cost low, long enough to still catch a busy legacy shellper's REPLAY
|
|
311
|
+
* arriving on the later socket read this method exists to wait for in
|
|
312
|
+
* the first place (#1198).
|
|
255
313
|
*/
|
|
256
|
-
waitForReplay(timeoutMs =
|
|
314
|
+
waitForReplay(timeoutMs = DEFAULT_REPLAY_TIMEOUT_MS) {
|
|
257
315
|
if (this.replayData !== null) {
|
|
258
316
|
return Promise.resolve(this.replayData);
|
|
259
317
|
}
|
|
318
|
+
const effectiveTimeoutMs = this._alwaysSendsReplay
|
|
319
|
+
? timeoutMs
|
|
320
|
+
: Math.min(timeoutMs, LEGACY_REPLAY_TIMEOUT_MS);
|
|
260
321
|
return new Promise((resolve) => {
|
|
261
322
|
const timer = setTimeout(() => {
|
|
262
323
|
this.removeListener('replay', onReplay);
|
|
324
|
+
this.emit('replay-timeout', { alwaysSendsReplay: this._alwaysSendsReplay, timeoutMs: effectiveTimeoutMs });
|
|
263
325
|
resolve(Buffer.alloc(0));
|
|
264
|
-
},
|
|
326
|
+
}, effectiveTimeoutMs);
|
|
265
327
|
const onReplay = (data) => {
|
|
266
328
|
clearTimeout(timer);
|
|
267
329
|
resolve(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellper-client.js","sourceRoot":"","sources":["../../src/terminal/shellper-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GAKjB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"shellper-client.js","sourceRoot":"","sources":["../../src/terminal/shellper-client.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;
|
|
1
|
+
{"version":3,"file":"shellper-process.d.ts","sourceRoot":"","sources":["../../src/terminal/shellper-process.ts"],"names":[],"mappings":"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"}
|