@songsid/agend 2.3.4-beta.7 → 2.3.5-alpha.3
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/README.md +2 -0
- package/README.zh-TW.md +2 -0
- package/THIRD_PARTY_NOTICES.md +53 -0
- package/dist/agent-endpoint.d.ts +5 -1
- package/dist/agent-endpoint.js +12 -2
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/auth-api.d.ts +21 -0
- package/dist/auth-api.js +89 -2
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/web-authority.d.ts +12 -2
- package/dist/authority/web-authority.js +25 -4
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/claude-code.d.ts +15 -12
- package/dist/backend/claude-code.js +152 -133
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-package.d.ts +5 -2
- package/dist/backend/codex-package.js +1 -5
- package/dist/backend/codex-package.js.map +1 -1
- package/dist/backend/codex.d.ts +136 -113
- package/dist/backend/codex.js +1281 -1219
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok-model-cache.d.ts +7 -0
- package/dist/backend/grok-model-cache.js +65 -0
- package/dist/backend/grok-model-cache.js.map +1 -0
- package/dist/backend/grok.d.ts +2 -0
- package/dist/backend/grok.js +22 -0
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/native-pane.d.ts +9 -0
- package/dist/backend/native-pane.js +59 -0
- package/dist/backend/native-pane.js.map +1 -0
- package/dist/backend/types.d.ts +7 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/ipc-bridge.d.ts +2 -0
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +71 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +67 -5
- package/dist/daemon.js +823 -266
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +15 -3
- package/dist/delivery-consumed-watch.js +23 -1
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-outbox.d.ts +5 -0
- package/dist/delivery-outbox.js +32 -4
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +2 -35
- package/dist/delivery-reconciliation.js +2 -156
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -2
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +2 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +238 -3
- package/dist/fleet-manager.js +1826 -104
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-windows-runtime.d.ts +92 -0
- package/dist/fleet-windows-runtime.js +380 -0
- package/dist/fleet-windows-runtime.js.map +1 -0
- package/dist/general-binding.d.ts +85 -0
- package/dist/general-binding.js +298 -0
- package/dist/general-binding.js.map +1 -0
- package/dist/general-host-owner.d.ts +8 -0
- package/dist/general-host-owner.js +26 -0
- package/dist/general-host-owner.js.map +1 -0
- package/dist/general-instance.d.ts +7 -0
- package/dist/general-instance.js +20 -3
- package/dist/general-instance.js.map +1 -1
- package/dist/general-role.d.ts +5 -0
- package/dist/general-role.js +26 -0
- package/dist/general-role.js.map +1 -0
- package/dist/instance-config-impact.js +4 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +21 -3
- package/dist/instance-lifecycle.js +378 -162
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +2 -0
- package/dist/instructions.js +6 -0
- package/dist/instructions.js.map +1 -1
- package/dist/local-pane-endpoint.d.ts +46 -0
- package/dist/local-pane-endpoint.js +189 -0
- package/dist/local-pane-endpoint.js.map +1 -0
- package/dist/local-pane-launcher.d.ts +2 -0
- package/dist/local-pane-launcher.js +38 -0
- package/dist/local-pane-launcher.js.map +1 -0
- package/dist/local-pane-stage.ps1 +101 -0
- package/dist/locale.js +85 -0
- package/dist/locale.js.map +1 -1
- package/dist/model-catalog-defaults.d.ts +14 -0
- package/dist/model-catalog-defaults.js +20 -0
- package/dist/model-catalog-defaults.js.map +1 -0
- package/dist/native-agent-admission.d.ts +7 -0
- package/dist/native-agent-admission.js +26 -0
- package/dist/native-agent-admission.js.map +1 -0
- package/dist/native-daemon-client.d.ts +13 -0
- package/dist/native-daemon-client.js +28 -0
- package/dist/native-daemon-client.js.map +1 -0
- package/dist/native-instance-api.d.ts +14 -0
- package/dist/native-instance-api.js +205 -0
- package/dist/native-instance-api.js.map +1 -0
- package/dist/native-instance-input.d.ts +84 -0
- package/dist/native-instance-input.js +54 -0
- package/dist/native-instance-input.js.map +1 -0
- package/dist/native-instance-registry.d.ts +32 -0
- package/dist/native-instance-registry.js +105 -0
- package/dist/native-instance-registry.js.map +1 -0
- package/dist/native-mcp.d.ts +40 -0
- package/dist/native-mcp.js +278 -0
- package/dist/native-mcp.js.map +1 -0
- package/dist/native-model-catalog.d.ts +5 -0
- package/dist/native-model-catalog.js +76 -0
- package/dist/native-model-catalog.js.map +1 -0
- package/dist/native-pane-crash-budget.d.ts +20 -0
- package/dist/native-pane-crash-budget.js +60 -0
- package/dist/native-pane-crash-budget.js.map +1 -0
- package/dist/native-pane-create.d.ts +26 -0
- package/dist/native-pane-create.js +53 -0
- package/dist/native-pane-create.js.map +1 -0
- package/dist/native-pane-lifecycle.d.ts +65 -0
- package/dist/native-pane-lifecycle.js +230 -0
- package/dist/native-pane-lifecycle.js.map +1 -0
- package/dist/native-pane-manager.d.ts +59 -0
- package/dist/native-pane-manager.js +584 -0
- package/dist/native-pane-manager.js.map +1 -0
- package/dist/native-pane-output-log.d.ts +15 -0
- package/dist/native-pane-output-log.js +108 -0
- package/dist/native-pane-output-log.js.map +1 -0
- package/dist/native-pane-reconciliation.d.ts +4 -0
- package/dist/native-pane-reconciliation.js +40 -0
- package/dist/native-pane-reconciliation.js.map +1 -0
- package/dist/native-pane-recovery.d.ts +12 -0
- package/dist/native-pane-recovery.js +10 -0
- package/dist/native-pane-recovery.js.map +1 -0
- package/dist/native-pane-tools.d.ts +2 -0
- package/dist/native-pane-tools.js +14 -0
- package/dist/native-pane-tools.js.map +1 -0
- package/dist/needs-you-hub.d.ts +2 -0
- package/dist/needs-you-hub.js +2 -1
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +19 -1
- package/dist/needs-you.js +12 -2
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.d.ts +16 -2
- package/dist/outbound-handlers.js +67 -3
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +38 -0
- package/dist/outbound-schemas.js +12 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-port.d.ts +118 -0
- package/dist/pane-port.js +2 -0
- package/dist/pane-port.js.map +1 -0
- package/dist/public-web-gateway.js +9 -0
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +5 -0
- package/dist/public-web-link.js +4 -0
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart-api.js +9 -5
- package/dist/quickstart-api.js.map +1 -1
- package/dist/quickstart.d.ts +1 -0
- package/dist/quickstart.js +4 -1
- package/dist/quickstart.js.map +1 -1
- package/dist/runtime-api.d.ts +8 -0
- package/dist/runtime-api.js +96 -0
- package/dist/runtime-api.js.map +1 -0
- package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +21 -0
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +2 -0
- package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +19 -0
- package/dist/runtime-assets/@xterm/addon-serialize/package.json +29 -0
- package/dist/runtime-assets/@xterm/headless/LICENSE +21 -0
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +2 -0
- package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +46 -0
- package/dist/runtime-assets/@xterm/headless/package.json +29 -0
- package/dist/runtime-assets/node-pty/CONPTY-LICENSE +21 -0
- package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +503 -0
- package/dist/runtime-assets/node-pty/LICENSE +69 -0
- package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +16 -0
- package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +47 -0
- package/dist/runtime-assets/node-pty/lib/index.js +52 -0
- package/dist/runtime-assets/node-pty/lib/interfaces.js +7 -0
- package/dist/runtime-assets/node-pty/lib/shared/conout.js +11 -0
- package/dist/runtime-assets/node-pty/lib/terminal.js +190 -0
- package/dist/runtime-assets/node-pty/lib/types.js +7 -0
- package/dist/runtime-assets/node-pty/lib/unixTerminal.js +346 -0
- package/dist/runtime-assets/node-pty/lib/utils.js +39 -0
- package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +125 -0
- package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +320 -0
- package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +199 -0
- package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +22 -0
- package/dist/runtime-assets/node-pty/package.json +64 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/dist/runtime-bundle.d.ts +17 -0
- package/dist/runtime-bundle.js +150 -0
- package/dist/runtime-bundle.js.map +1 -0
- package/dist/runtime-cli.d.ts +2 -0
- package/dist/runtime-cli.js +117 -0
- package/dist/runtime-cli.js.map +1 -0
- package/dist/runtime-client-store.d.ts +49 -0
- package/dist/runtime-client-store.js +292 -0
- package/dist/runtime-client-store.js.map +1 -0
- package/dist/runtime-client.d.ts +100 -0
- package/dist/runtime-client.js +700 -0
- package/dist/runtime-client.js.map +1 -0
- package/dist/runtime-coordinator.d.ts +82 -0
- package/dist/runtime-coordinator.js +864 -0
- package/dist/runtime-coordinator.js.map +1 -0
- package/dist/runtime-general-protocol.d.ts +22 -0
- package/dist/runtime-general-protocol.js +57 -0
- package/dist/runtime-general-protocol.js.map +1 -0
- package/dist/runtime-general-workspace.d.ts +17 -0
- package/dist/runtime-general-workspace.js +213 -0
- package/dist/runtime-general-workspace.js.map +1 -0
- package/dist/runtime-pane-assets.d.ts +17 -0
- package/dist/runtime-pane-assets.js +23 -0
- package/dist/runtime-pane-assets.js.map +1 -0
- package/dist/runtime-pane-boot.d.ts +2 -0
- package/dist/runtime-pane-boot.js +24 -0
- package/dist/runtime-pane-boot.js.map +1 -0
- package/dist/runtime-pane-codex-index.d.ts +1 -0
- package/dist/runtime-pane-codex-index.js +47 -0
- package/dist/runtime-pane-codex-index.js.map +1 -0
- package/dist/runtime-pane-config.d.ts +16 -0
- package/dist/runtime-pane-config.js +54 -0
- package/dist/runtime-pane-config.js.map +1 -0
- package/dist/runtime-pane-host.d.ts +44 -0
- package/dist/runtime-pane-host.js +424 -0
- package/dist/runtime-pane-host.js.map +1 -0
- package/dist/runtime-pane-job-owner.d.ts +1 -0
- package/dist/runtime-pane-job-owner.js +29 -0
- package/dist/runtime-pane-job-owner.js.map +1 -0
- package/dist/runtime-pane-job.ps1 +116 -0
- package/dist/runtime-pane-link.d.ts +40 -0
- package/dist/runtime-pane-link.js +246 -0
- package/dist/runtime-pane-link.js.map +1 -0
- package/dist/runtime-pane-mcp-protocol.d.ts +32 -0
- package/dist/runtime-pane-mcp-protocol.js +39 -0
- package/dist/runtime-pane-mcp-protocol.js.map +1 -0
- package/dist/runtime-pane-mcp-relay.d.ts +17 -0
- package/dist/runtime-pane-mcp-relay.js +70 -0
- package/dist/runtime-pane-mcp-relay.js.map +1 -0
- package/dist/runtime-pane-mcp.d.ts +51 -0
- package/dist/runtime-pane-mcp.js +150 -0
- package/dist/runtime-pane-mcp.js.map +1 -0
- package/dist/runtime-pane-native.d.ts +45 -0
- package/dist/runtime-pane-native.js +65 -0
- package/dist/runtime-pane-native.js.map +1 -0
- package/dist/runtime-pane-output.d.ts +19 -0
- package/dist/runtime-pane-output.js +53 -0
- package/dist/runtime-pane-output.js.map +1 -0
- package/dist/runtime-pane-port.d.ts +139 -0
- package/dist/runtime-pane-port.js +558 -0
- package/dist/runtime-pane-port.js.map +1 -0
- package/dist/runtime-pane-private.d.ts +14 -0
- package/dist/runtime-pane-private.js +51 -0
- package/dist/runtime-pane-private.js.map +1 -0
- package/dist/runtime-pane-private.ps1 +14 -0
- package/dist/runtime-pane-process.d.ts +4 -0
- package/dist/runtime-pane-process.js +108 -0
- package/dist/runtime-pane-process.js.map +1 -0
- package/dist/runtime-pane-protocol.d.ts +172 -0
- package/dist/runtime-pane-protocol.js +195 -0
- package/dist/runtime-pane-protocol.js.map +1 -0
- package/dist/runtime-pane-screen.d.ts +19 -0
- package/dist/runtime-pane-screen.js +76 -0
- package/dist/runtime-pane-screen.js.map +1 -0
- package/dist/runtime-pane-service.d.ts +11 -0
- package/dist/runtime-pane-service.js +221 -0
- package/dist/runtime-pane-service.js.map +1 -0
- package/dist/runtime-pane-stdio-protocol.d.ts +54 -0
- package/dist/runtime-pane-stdio-protocol.js +94 -0
- package/dist/runtime-pane-stdio-protocol.js.map +1 -0
- package/dist/runtime-pane-stdio.d.ts +3 -0
- package/dist/runtime-pane-stdio.js +123 -0
- package/dist/runtime-pane-stdio.js.map +1 -0
- package/dist/runtime-pane-store.d.ts +33 -0
- package/dist/runtime-pane-store.js +164 -0
- package/dist/runtime-pane-store.js.map +1 -0
- package/dist/runtime-pane-transcript-protocol.d.ts +43 -0
- package/dist/runtime-pane-transcript-protocol.js +58 -0
- package/dist/runtime-pane-transcript-protocol.js.map +1 -0
- package/dist/runtime-pane-transcript.d.ts +45 -0
- package/dist/runtime-pane-transcript.js +605 -0
- package/dist/runtime-pane-transcript.js.map +1 -0
- package/dist/runtime-pane-worker.d.ts +1 -0
- package/dist/runtime-pane-worker.js +154 -0
- package/dist/runtime-pane-worker.js.map +1 -0
- package/dist/runtime-protocol.d.ts +149 -0
- package/dist/runtime-protocol.js +19 -0
- package/dist/runtime-protocol.js.map +1 -0
- package/dist/runtime-switches.d.ts +79 -0
- package/dist/runtime-switches.js +90 -0
- package/dist/runtime-switches.js.map +1 -0
- package/dist/runtime-transcript-delta-reader.d.ts +23 -0
- package/dist/runtime-transcript-delta-reader.js +74 -0
- package/dist/runtime-transcript-delta-reader.js.map +1 -0
- package/dist/runtime-transcript-source.d.ts +36 -0
- package/dist/runtime-transcript-source.js +189 -0
- package/dist/runtime-transcript-source.js.map +1 -0
- package/dist/runtime-windows-bridge.d.ts +41 -0
- package/dist/runtime-windows-bridge.js +157 -0
- package/dist/runtime-windows-bridge.js.map +1 -0
- package/dist/settings-api.d.ts +5 -0
- package/dist/settings-api.js +95 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-baseline.d.ts +1 -0
- package/dist/settings-baseline.js +1 -1
- package/dist/settings-baseline.js.map +1 -1
- package/dist/settings-change.js +28 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +16 -1
- package/dist/settings-confirmation.js +47 -9
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.d.ts +4 -0
- package/dist/settings-effect.js +58 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +1 -0
- package/dist/settings-http-confirmation.js +15 -2
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-request-capability.d.ts +2 -0
- package/dist/settings-request-capability.js +4 -0
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/settings-route-lifetime.d.ts +14 -0
- package/dist/settings-route-lifetime.js +48 -0
- package/dist/settings-route-lifetime.js.map +1 -0
- package/dist/settings-transaction.d.ts +4 -0
- package/dist/settings-transaction.js +9 -0
- package/dist/settings-transaction.js.map +1 -1
- package/dist/setup-form.js +6 -3
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-i18n.js +3 -0
- package/dist/setup-i18n.js.map +1 -1
- package/dist/tmux-control.d.ts +2 -1
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +2 -1
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-pane-host.d.ts +26 -0
- package/dist/tmux-pane-host.js +25 -0
- package/dist/tmux-pane-host.js.map +1 -0
- package/dist/tool-permissions.js +2 -1
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.js +3 -0
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +1 -1
- package/dist/transcript-delta-reader.js +1 -1
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-monitor.d.ts +3 -0
- package/dist/transcript-monitor.js +22 -46
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-needles.d.ts +35 -0
- package/dist/transcript-needles.js +158 -0
- package/dist/transcript-needles.js.map +1 -0
- package/dist/transcript-records.d.ts +21 -0
- package/dist/transcript-records.js +140 -0
- package/dist/transcript-records.js.map +1 -0
- package/dist/transcript-sources.d.ts +5 -0
- package/dist/transcript-sources.js +8 -79
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/ui/agent-proposals.js +90 -0
- package/dist/ui/agent-runtime.js +106 -0
- package/dist/ui/chat-store.js +13 -2
- package/dist/ui/chat-strings.js +48 -0
- package/dist/ui/cli-picker.js +42 -0
- package/dist/ui/general-location.js +71 -0
- package/dist/ui/native-instance-settings.js +47 -0
- package/dist/ui/native-pane-recovery.js +45 -0
- package/dist/ui/panel-chat.js +63 -32
- package/dist/ui/panel-details.js +2 -1
- package/dist/ui/panel-fleet.js +99 -18
- package/dist/ui/panel-needs.js +154 -3
- package/dist/ui/panel-runtimes.js +231 -0
- package/dist/ui/panel-settings.js +19 -9
- package/dist/ui/panel-windows-agent.js +86 -0
- package/dist/ui/panel-windows-cli.js +143 -0
- package/dist/ui/provider-marks.js +83 -0
- package/dist/ui/runtime-catalog.js +55 -0
- package/dist/ui/settings-catalog.js +37 -10
- package/dist/ui/settings-confirm.js +3 -1
- package/dist/ui/settings-dialogs.js +22 -7
- package/dist/ui/settings-model.js +2 -1
- package/dist/ui/settings-outside.js +176 -0
- package/dist/ui/settings-registry.js +6 -0
- package/dist/ui/settings-strings.js +16 -0
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-route.js +6 -2
- package/dist/ui/shared/app-shell.js +3 -2
- package/dist/ui/shared/app-store.js +1 -0
- package/dist/ui/shared/app-stream.js +3 -1
- package/dist/ui/shared/app.css +301 -0
- package/dist/ui/shared/app.js +4 -0
- package/dist/ui/shared/header-tools.js +6 -4
- package/dist/ui/shared/instance-nav.js +33 -7
- package/dist/ui/shared/instance-switch.js +4 -3
- package/dist/ui/shared/qrcode.module.js +2237 -0
- package/dist/ui/shared/signin.js +39 -5
- package/dist/ui/shared/ui-menu.js +28 -8
- package/dist/ui/shared/vendor/qrcode-generator.LICENSE +27 -0
- package/dist/ui/shared/vendor/vendor.json +19 -2
- package/dist/ui/shared/view-strings.js +8 -0
- package/dist/ui/windows-agents-nav.js +2 -0
- package/dist/ui/windows-cli-catalog.js +79 -0
- package/dist/web-api.d.ts +37 -0
- package/dist/web-api.js +248 -6
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +19 -2
- package/dist/web-chat-history.js +72 -3
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-only-fleet.d.ts +20 -0
- package/dist/web-only-fleet.js +21 -0
- package/dist/web-only-fleet.js.map +1 -1
- package/dist/web-remote-access.d.ts +152 -0
- package/dist/web-remote-access.js +368 -0
- package/dist/web-remote-access.js.map +1 -0
- package/dist/web-session.d.ts +7 -0
- package/dist/web-session.js +2 -0
- package/dist/web-session.js.map +1 -1
- package/dist/web-shell-routes.d.ts +4 -1
- package/dist/web-shell-routes.js +7 -2
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/windows-agents.d.ts +124 -0
- package/dist/windows-agents.js +487 -0
- package/dist/windows-agents.js.map +1 -0
- package/dist/windows-cli-api.d.ts +23 -0
- package/dist/windows-cli-api.js +158 -0
- package/dist/windows-cli-api.js.map +1 -0
- package/dist/windows-cli-providers.d.ts +115 -0
- package/dist/windows-cli-providers.js +429 -0
- package/dist/windows-cli-providers.js.map +1 -0
- package/dist/windows-cli-worker.d.ts +58 -0
- package/dist/windows-cli-worker.js +479 -0
- package/dist/windows-cli-worker.js.map +1 -0
- package/dist/windows-cli.d.ts +115 -0
- package/dist/windows-cli.js +402 -0
- package/dist/windows-cli.js.map +1 -0
- package/dist/windows-native-mcp.d.ts +19 -0
- package/dist/windows-native-mcp.js +143 -0
- package/dist/windows-native-mcp.js.map +1 -0
- package/dist/windows-pane-mcp.d.ts +26 -0
- package/dist/windows-pane-mcp.js +187 -0
- package/dist/windows-pane-mcp.js.map +1 -0
- package/package.json +9 -3
- package/templates/runtime-assets/conpty-LICENSE +21 -0
- package/templates/runtime-assets/conpty-NOTICE.md +503 -0
- package/templates/runtime-assets/local-pane-stage.ps1 +101 -0
- package/templates/runtime-assets/runtime-pane-job.ps1 +116 -0
- package/templates/runtime-assets/runtime-pane-private.ps1 +14 -0
- package/templates/runtime-assets/xterm-LICENSE +21 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuntimePaneLaunch } from "./runtime-pane-protocol.js";
|
|
2
|
+
import type { NativePaneOwner } from "./runtime-pane-native.js";
|
|
3
|
+
export interface NativePaneConfig {
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
instructionsFile?: string;
|
|
6
|
+
mcp?: {
|
|
7
|
+
nodePath: string;
|
|
8
|
+
helperPath: string;
|
|
9
|
+
connectionPath: string;
|
|
10
|
+
configPath: string;
|
|
11
|
+
tools: string[];
|
|
12
|
+
serverName: string;
|
|
13
|
+
};
|
|
14
|
+
cleanup(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function prepareNativePaneConfig(launch: RuntimePaneLaunch, owner: NativePaneOwner, nodePath: string, helperPath: string): NativePaneConfig;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Launch-local files only. Provider account configuration and credentials are never copied or rewritten. */
|
|
2
|
+
import { lstatSync, mkdirSync, rmdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { validateNativeMcpConnection } from "./windows-cli-providers.js";
|
|
5
|
+
import { validatePaneMcpOwner } from "./runtime-pane-mcp-protocol.js";
|
|
6
|
+
function realDirectory(path) { const stat = lstatSync(path); if (!stat.isDirectory() || stat.isSymbolicLink())
|
|
7
|
+
throw Error("Pane configuration must stay in its owned directory"); }
|
|
8
|
+
export function prepareNativePaneConfig(launch, owner, nodePath, helperPath) {
|
|
9
|
+
realDirectory(owner.directory);
|
|
10
|
+
const parent = join(owner.directory, "launches");
|
|
11
|
+
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
|
12
|
+
realDirectory(parent);
|
|
13
|
+
const directory = join(parent, owner.launchId);
|
|
14
|
+
mkdirSync(directory, { mode: 0o700 });
|
|
15
|
+
const files = [];
|
|
16
|
+
const config = { ...(launch.cli === "claude-code" ? { sessionId: launch.sessionId ?? owner.launchId } : {}), cleanup: () => {
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
try {
|
|
19
|
+
unlinkSync(file);
|
|
20
|
+
}
|
|
21
|
+
catch { /* Only exact files created by this launch. */ }
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
rmdirSync(directory);
|
|
25
|
+
}
|
|
26
|
+
catch { /* Unknown extra files are never deleted. */ }
|
|
27
|
+
} };
|
|
28
|
+
const write = (name, value) => { const file = join(directory, name); writeFileSync(file, value, { encoding: "utf8", mode: 0o600, flag: "wx" }); files.push(file); return file; };
|
|
29
|
+
try {
|
|
30
|
+
if (launch.mcpTools) {
|
|
31
|
+
if (!owner.mcp)
|
|
32
|
+
throw Error("Persistent pane MCP scope was not prepared");
|
|
33
|
+
const identity = validatePaneMcpOwner(owner.mcp.owner), mcp = validateNativeMcpConnection({ endpoint: owner.mcp.endpoint, token: owner.mcp.token, tools: owner.mcp.tools });
|
|
34
|
+
if (identity.paneId !== launch.paneId || identity.launchId !== owner.launchId || identity.agentId !== launch.agentId || identity.instance !== launch.instance
|
|
35
|
+
|| JSON.stringify(mcp.tools) !== JSON.stringify(launch.mcpTools))
|
|
36
|
+
throw Error("Persistent pane MCP scope differs from its launch");
|
|
37
|
+
const connectionPath = write("mcp-connection.json", JSON.stringify({ ...mcp, owner: identity }));
|
|
38
|
+
const serverName = `agend_${launch.agentId.replace(/-/g, "")}`;
|
|
39
|
+
const server = { command: nodePath, args: [helperPath, "--connection-file", connectionPath] };
|
|
40
|
+
const configPath = write("mcp.json", JSON.stringify({ mcpServers: { [serverName]: server } }));
|
|
41
|
+
config.mcp = { nodePath, helperPath, connectionPath, configPath, serverName, tools: mcp.tools };
|
|
42
|
+
}
|
|
43
|
+
else if (owner.mcp)
|
|
44
|
+
throw Error("Unexpected pane MCP scope");
|
|
45
|
+
if (launch.cli === "claude-code" && launch.instructions)
|
|
46
|
+
config.instructionsFile = write("instructions.txt", launch.instructions);
|
|
47
|
+
return config;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
config.cleanup();
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=runtime-pane-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pane-config.js","sourceRoot":"","sources":["../src/runtime-pane-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { IPty } from "node-pty";
|
|
2
|
+
import { RuntimePaneStore } from "./runtime-pane-store.js";
|
|
3
|
+
import { type RuntimePaneLaunch, type RuntimePaneSnapshot } from "./runtime-pane-protocol.js";
|
|
4
|
+
import type { PaneMcpConnection } from "./windows-pane-mcp.js";
|
|
5
|
+
import type { NativePaneOwner } from "./runtime-pane-native.js";
|
|
6
|
+
import type { PaneMcpOwner } from "./runtime-pane-mcp-protocol.js";
|
|
7
|
+
import { NativePaneTranscriptReader, type NativeClaudeSessionState } from "./runtime-pane-transcript.js";
|
|
8
|
+
export { persistentNativeArguments } from "./runtime-pane-native.js";
|
|
9
|
+
export type RuntimePaneProcess = Pick<IPty, "pid" | "write" | "resize" | "kill" | "pause" | "resume" | "onData" | "onExit"> & {
|
|
10
|
+
onFailure?(listener: () => void): {
|
|
11
|
+
dispose(): void;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export interface RuntimePaneHostOptions {
|
|
15
|
+
store: RuntimePaneStore;
|
|
16
|
+
bootId: string;
|
|
17
|
+
systemBootId?: string;
|
|
18
|
+
online(): boolean;
|
|
19
|
+
maxAgents(): number;
|
|
20
|
+
/** Internal local launch factory, never a field in the remote request. */
|
|
21
|
+
spawn?(launch: RuntimePaneLaunch, owner: NativePaneOwner): Promise<RuntimePaneProcess>;
|
|
22
|
+
mcpConnection?(owner: PaneMcpOwner, tools: string[]): PaneMcpConnection;
|
|
23
|
+
/** Internal runner seam. A remote request never provides roots or a path. */
|
|
24
|
+
transcript?(launch: RuntimePaneLaunch, sessionId: string): (Pick<NativePaneTranscriptReader, "read" | "close"> & Partial<Pick<NativePaneTranscriptReader, "baseline">>);
|
|
25
|
+
sessionProof?(launch: RuntimePaneLaunch, sessionId: string, current: () => boolean): Promise<NativeClaudeSessionState>;
|
|
26
|
+
output?(snapshot: RuntimePaneSnapshot): void;
|
|
27
|
+
}
|
|
28
|
+
export declare class RuntimePaneHost {
|
|
29
|
+
private readonly options;
|
|
30
|
+
private readonly live;
|
|
31
|
+
private readonly queues;
|
|
32
|
+
private closing;
|
|
33
|
+
private readonly general;
|
|
34
|
+
constructor(options: RuntimePaneHostOptions);
|
|
35
|
+
list(): RuntimePaneSnapshot[];
|
|
36
|
+
/** Exact live reservation; no PID adoption or scans of other panes. */
|
|
37
|
+
owns(owner: PaneMcpOwner): boolean;
|
|
38
|
+
request(raw: unknown, current?: () => boolean): Promise<unknown>;
|
|
39
|
+
private open;
|
|
40
|
+
private recover;
|
|
41
|
+
private operate;
|
|
42
|
+
private readTranscript;
|
|
43
|
+
stop(): Promise<void>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import { RuntimePaneOutputBuffer } from "./runtime-pane-output.js";
|
|
2
|
+
import { RuntimeGeneralWorkspace, loadGeneralKnowledge } from "./runtime-general-workspace.js";
|
|
3
|
+
import { GeneralManagedFileError } from "./runtime-general-protocol.js";
|
|
4
|
+
/** Runner-owned, persistent CLI panes. A coordinator reconnect neither launches nor replays anything. */
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { RuntimePaneStore } from "./runtime-pane-store.js";
|
|
7
|
+
import { RuntimePaneScreen } from "./runtime-pane-screen.js";
|
|
8
|
+
import { PANE_EDIT_KEYS, validateRuntimePaneRequest } from "./runtime-pane-protocol.js";
|
|
9
|
+
import { spawnNativePane } from "./runtime-pane-process.js";
|
|
10
|
+
import { NativePaneTranscriptReader, nativeClaudeSessionState, nativeCodexSessionState } from "./runtime-pane-transcript.js";
|
|
11
|
+
import { validatePaneTranscriptBaseline, validatePaneTranscriptWireBatch } from "./runtime-pane-transcript-protocol.js";
|
|
12
|
+
export { persistentNativeArguments } from "./runtime-pane-native.js";
|
|
13
|
+
const KEYS = { Enter: "\r", Escape: "\x1b", Up: "\x1b[A", Down: "\x1b[B", Right: "\x1b[C", Left: "\x1b[D", "C-c": "\x03", "C-q": "\x11" };
|
|
14
|
+
export class RuntimePaneHost {
|
|
15
|
+
options;
|
|
16
|
+
live = new Map();
|
|
17
|
+
queues = new Map();
|
|
18
|
+
closing = false;
|
|
19
|
+
general;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.general = new RuntimeGeneralWorkspace(options.store.directory);
|
|
23
|
+
}
|
|
24
|
+
list() {
|
|
25
|
+
for (const row of this.options.store.list())
|
|
26
|
+
if (!this.live.has(row.launch.paneId))
|
|
27
|
+
this.options.store.reconcileExit(row.launch.paneId);
|
|
28
|
+
return this.options.store.list().map(row => structuredClone(this.live.get(row.launch.paneId)?.record.snapshot ?? row.snapshot));
|
|
29
|
+
}
|
|
30
|
+
/** Exact live reservation; no PID adoption or scans of other panes. */
|
|
31
|
+
owns(owner) {
|
|
32
|
+
if (this.closing || owner.hostBootId !== this.options.bootId)
|
|
33
|
+
return false;
|
|
34
|
+
try {
|
|
35
|
+
const pane = this.live.get(owner.paneId)?.record.snapshot ?? this.options.store.get(owner.paneId)?.snapshot;
|
|
36
|
+
return !!pane && pane.hostBootId === owner.hostBootId && pane.launchId === owner.launchId && pane.agentId === owner.agentId
|
|
37
|
+
&& pane.instance === owner.instance && (pane.state === "starting" || pane.state === "running");
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async request(raw, current = () => true) {
|
|
44
|
+
const request = validateRuntimePaneRequest(raw);
|
|
45
|
+
if (request.action === "list")
|
|
46
|
+
return { hostBootId: this.options.bootId, capabilities: { openDisposition: true, recovery: true, claudeSessionProof: true, codexSessionProof: true, generalWorkspace: true }, panes: this.list() };
|
|
47
|
+
if (this.closing || !this.options.online() || !current())
|
|
48
|
+
throw Error("Pane runtime is disconnected");
|
|
49
|
+
if (request.action === "general-workspace") {
|
|
50
|
+
const installed = loadGeneralKnowledge(request.cli).hash;
|
|
51
|
+
if (installed !== request.packHash)
|
|
52
|
+
return { version: 1, bindingId: request.bindingId, instance: request.instance, cli: request.cli, packHash: installed, upgradeRequired: true };
|
|
53
|
+
try {
|
|
54
|
+
return this.general.prepare(request, current, cwd => !this.list().some(row => row.state !== "exited"
|
|
55
|
+
&& this.options.store.get(row.paneId)?.launch.cwd.toLowerCase() === cwd.toLowerCase()));
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
// Closed, fixed-asset diagnostics cross the transport; raw errors, paths and file contents never do.
|
|
59
|
+
if (!(err instanceof GeneralManagedFileError))
|
|
60
|
+
throw err;
|
|
61
|
+
return { version: 1, bindingId: request.bindingId, instance: request.instance, cli: request.cli, packHash: request.packHash, managedFile: err.file };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (request.action === "shutdown") {
|
|
65
|
+
// No await between the inventory, admission fence and reply. An accepted/queued launch or an unknown
|
|
66
|
+
// reservation prevents shutdown; disconnect/lease loss alone never tears down a persistent host.
|
|
67
|
+
if (request.hostBootId !== this.options.bootId || this.queues.size || this.list().some(pane => pane.state !== "exited"))
|
|
68
|
+
throw Error("Pane host still has live or unconfirmed work");
|
|
69
|
+
this.closing = true;
|
|
70
|
+
return { hostBootId: this.options.bootId, shutdown: true };
|
|
71
|
+
}
|
|
72
|
+
const id = request.action === "open" ? request.launch.paneId : request.paneId;
|
|
73
|
+
const queue = this.queues.get(id) ?? { tail: Promise.resolve(), count: 0 };
|
|
74
|
+
if (queue.count >= 16)
|
|
75
|
+
throw Error("Pane operation queue is full");
|
|
76
|
+
queue.count++;
|
|
77
|
+
this.queues.set(id, queue);
|
|
78
|
+
const operation = queue.tail.catch(() => { }).then(async () => {
|
|
79
|
+
if (this.closing || !this.options.online() || !current())
|
|
80
|
+
throw Error("Pane runtime is disconnected");
|
|
81
|
+
return request.action === "open" ? this.open(request) : request.action === "recover" ? this.recover(request) : this.operate(request, current);
|
|
82
|
+
});
|
|
83
|
+
queue.tail = operation;
|
|
84
|
+
try {
|
|
85
|
+
return await operation;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
if (--queue.count === 0 && this.queues.get(id) === queue)
|
|
89
|
+
this.queues.delete(id);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async open(request) {
|
|
93
|
+
const { launch, operationId } = request;
|
|
94
|
+
const digest = RuntimePaneStore.digest(launch);
|
|
95
|
+
const existing = this.options.store.get(launch.paneId);
|
|
96
|
+
if (existing) {
|
|
97
|
+
if (existing.openOperationId !== operationId || existing.openDigest !== digest)
|
|
98
|
+
throw Error("Pane id already belongs to another launch");
|
|
99
|
+
const live = this.live.get(launch.paneId);
|
|
100
|
+
if (!live && existing.snapshot.state !== "exited")
|
|
101
|
+
throw Error("Pane launch outcome is unknown; no replacement was started");
|
|
102
|
+
return { ...structuredClone(live?.record.snapshot ?? existing.snapshot), reattached: true };
|
|
103
|
+
}
|
|
104
|
+
this.list();
|
|
105
|
+
const rows = this.options.store.list();
|
|
106
|
+
const limit = this.options.maxAgents();
|
|
107
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 16)
|
|
108
|
+
throw Error("Invalid machine pane limit");
|
|
109
|
+
if (launch.launchId && rows.some(row => row.snapshot.launchId === launch.launchId))
|
|
110
|
+
throw Error("Pane launch identity already belongs to another pane");
|
|
111
|
+
const record = {
|
|
112
|
+
...(this.options.systemBootId ? { systemBootId: this.options.systemBootId } : {}),
|
|
113
|
+
launch, openDigest: digest, openOperationId: operationId, bootId: this.options.bootId,
|
|
114
|
+
snapshot: { hostBootId: this.options.bootId, paneId: launch.paneId, agentId: launch.agentId, instance: launch.instance, launchId: launch.launchId ?? randomUUID(), columns: launch.columns, rows: launch.rows,
|
|
115
|
+
state: "starting", seq: 0, outputAt: 0, commandSequence: 0 },
|
|
116
|
+
};
|
|
117
|
+
const sessionId = launch.sessionId ?? (launch.cli === "claude-code" ? record.snapshot.launchId : undefined);
|
|
118
|
+
if (sessionId)
|
|
119
|
+
record.snapshot.sessionId = sessionId;
|
|
120
|
+
if (rows.some(row => row.launch.agentId === launch.agentId && row.snapshot.state !== "exited")
|
|
121
|
+
|| rows.filter(row => row.snapshot.state !== "exited").length >= limit) {
|
|
122
|
+
// A durable tombstone consumes this open identity. Even a lost refusal ACK cannot turn its retry into a launch.
|
|
123
|
+
// Never issue this proof for a spawn exception: the factory may have created a child before throwing.
|
|
124
|
+
record.snapshot.state = "exited";
|
|
125
|
+
record.snapshot.noLaunch = true;
|
|
126
|
+
this.options.store.put(record);
|
|
127
|
+
return { ...structuredClone(record.snapshot), reattached: false };
|
|
128
|
+
}
|
|
129
|
+
if (launch.generalWorkspace)
|
|
130
|
+
this.general.verify({ action: "general-workspace", ...launch.generalWorkspace, instance: launch.instance, cli: launch.cli }, launch.cwd);
|
|
131
|
+
// Synchronous reservation before the first await: parallel opens cannot oversubscribe the machine.
|
|
132
|
+
this.options.store.put(record);
|
|
133
|
+
let process;
|
|
134
|
+
try {
|
|
135
|
+
const owner = { directory: this.options.store.directory, launchId: record.snapshot.launchId };
|
|
136
|
+
if (launch.mcpTools) {
|
|
137
|
+
if (!this.options.mcpConnection)
|
|
138
|
+
throw Error("Persistent pane MCP authority is unavailable");
|
|
139
|
+
owner.mcp = this.options.mcpConnection({ hostBootId: this.options.bootId, paneId: launch.paneId, launchId: record.snapshot.launchId, agentId: launch.agentId, instance: launch.instance }, launch.mcpTools);
|
|
140
|
+
}
|
|
141
|
+
process = await (this.options.spawn ? this.options.spawn(launch, owner) : spawnNativePane(launch, owner));
|
|
142
|
+
let finish;
|
|
143
|
+
const exited = new Promise(resolve => { finish = resolve; });
|
|
144
|
+
const screen = new RuntimePaneScreen(launch.columns, launch.rows, data => {
|
|
145
|
+
if (this.live.get(launch.paneId)?.record === record && record.snapshot.state === "running")
|
|
146
|
+
process.write(data);
|
|
147
|
+
});
|
|
148
|
+
const live = { record, process, screen, parsed: Promise.resolve(), output: new RuntimePaneOutputBuffer(), exited, finish };
|
|
149
|
+
this.live.set(launch.paneId, live);
|
|
150
|
+
record.pid = process.pid;
|
|
151
|
+
record.snapshot.state = "running";
|
|
152
|
+
process.onFailure?.(() => {
|
|
153
|
+
if (record.snapshot.state === "exited")
|
|
154
|
+
return;
|
|
155
|
+
record.snapshot.state = "unknown";
|
|
156
|
+
try {
|
|
157
|
+
this.options.store.put(record);
|
|
158
|
+
}
|
|
159
|
+
catch { /* retained on disk as unfinished */ }
|
|
160
|
+
});
|
|
161
|
+
process.onData(data => {
|
|
162
|
+
if (this.live.get(launch.paneId) !== live)
|
|
163
|
+
return;
|
|
164
|
+
live.output.append(data);
|
|
165
|
+
// Invalidate observations when bytes arrive, not later when the VT parser finishes. A queued repaint
|
|
166
|
+
// already makes an old composer proof unsafe, even while capture or parser completion is awaiting.
|
|
167
|
+
record.snapshot.seq++;
|
|
168
|
+
record.snapshot.outputAt = Date.now();
|
|
169
|
+
live.parsed = screen.write(data).then(() => {
|
|
170
|
+
try {
|
|
171
|
+
this.options.output?.(structuredClone(record.snapshot));
|
|
172
|
+
}
|
|
173
|
+
catch { /* observer backpressure cannot change process ownership */ }
|
|
174
|
+
}).catch(() => {
|
|
175
|
+
record.snapshot.state = "unknown";
|
|
176
|
+
try {
|
|
177
|
+
process.pause();
|
|
178
|
+
this.options.store.put(record);
|
|
179
|
+
}
|
|
180
|
+
catch { /* reserved until exit is proven */ }
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
process.onExit(({ exitCode }) => {
|
|
184
|
+
record.snapshot.state = "exited";
|
|
185
|
+
record.snapshot.exitCode = exitCode;
|
|
186
|
+
try {
|
|
187
|
+
this.options.store.put(record);
|
|
188
|
+
}
|
|
189
|
+
catch { /* an old live record stays reserved on restart */ }
|
|
190
|
+
finish();
|
|
191
|
+
try {
|
|
192
|
+
this.options.output?.(structuredClone(record.snapshot));
|
|
193
|
+
}
|
|
194
|
+
catch { /* process exit is independent of its observer */ }
|
|
195
|
+
const retired = [...this.live.values()].filter(row => row.record.snapshot.state === "exited");
|
|
196
|
+
for (const old of retired.slice(0, Math.max(0, retired.length - 16))) {
|
|
197
|
+
void old.transcript?.close().catch(() => { });
|
|
198
|
+
old.screen.dispose();
|
|
199
|
+
this.live.delete(old.record.launch.paneId);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
this.options.store.put(record);
|
|
203
|
+
if (this.closing) {
|
|
204
|
+
process.kill();
|
|
205
|
+
throw Error("Pane host stopped during launch");
|
|
206
|
+
}
|
|
207
|
+
return { ...structuredClone(record.snapshot), reattached: false };
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
if (process) {
|
|
211
|
+
try {
|
|
212
|
+
process.kill();
|
|
213
|
+
}
|
|
214
|
+
catch { /* retain uncertain reservation */ }
|
|
215
|
+
}
|
|
216
|
+
// A launch factory may fail after creating a native child. Only onExit proves there is no process.
|
|
217
|
+
if (record.snapshot.state !== "exited")
|
|
218
|
+
record.snapshot.state = "unknown";
|
|
219
|
+
this.options.store.put(record);
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
recover(request) {
|
|
224
|
+
const record = this.options.store.get(request.paneId);
|
|
225
|
+
if (!record || record.snapshot.launchId !== request.launchId || record.snapshot.hostBootId !== request.hostBootId)
|
|
226
|
+
throw Error("Recovery needs the exact retained pane with no live host owner");
|
|
227
|
+
if (record.snapshot.state === "exited")
|
|
228
|
+
return structuredClone(record.snapshot);
|
|
229
|
+
if (this.live.has(request.paneId) || record.snapshot.state !== "unknown" || record.bootId === this.options.bootId || request.confirmedStopped !== true)
|
|
230
|
+
throw Error("The retained pane is not eligible for stopped-process recovery");
|
|
231
|
+
record.snapshot.state = "exited";
|
|
232
|
+
record.snapshot.exitProof = "admin-confirmed";
|
|
233
|
+
delete record.snapshot.exitCode;
|
|
234
|
+
this.options.store.put(record);
|
|
235
|
+
return structuredClone(record.snapshot);
|
|
236
|
+
}
|
|
237
|
+
async operate(request, current) {
|
|
238
|
+
const live = this.live.get(request.paneId);
|
|
239
|
+
const stored = this.options.store.get(request.paneId);
|
|
240
|
+
if (!stored || stored.snapshot.launchId !== request.launchId)
|
|
241
|
+
throw Error("Pane launch identity is stale");
|
|
242
|
+
if (request.action === "snapshot")
|
|
243
|
+
return structuredClone(live?.record.snapshot ?? stored.snapshot);
|
|
244
|
+
if (request.action === "session-proof") {
|
|
245
|
+
const { launch, snapshot } = live?.record ?? stored;
|
|
246
|
+
if (!["claude-code", "codex"].includes(launch.cli) || snapshot.state !== "exited" || snapshot.noLaunch || !snapshot.sessionId)
|
|
247
|
+
throw Error("Session proof requires an exited supported pane");
|
|
248
|
+
let settled = false, timer;
|
|
249
|
+
const lease = () => !settled && !this.closing && this.options.online() && current();
|
|
250
|
+
const read = this.options.sessionProof
|
|
251
|
+
? this.options.sessionProof(launch, snapshot.sessionId, lease)
|
|
252
|
+
: (launch.cli === "codex" ? nativeCodexSessionState : nativeClaudeSessionState)(launch.cwd, snapshot.sessionId, lease);
|
|
253
|
+
try {
|
|
254
|
+
const state = await Promise.race([read, new Promise(done => { timer = setTimeout(() => done("unknown"), 1500); })]);
|
|
255
|
+
return { snapshot: structuredClone(snapshot), state: lease() && ["absent", "saved", "unknown"].includes(state) ? state : "unknown" };
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return { snapshot: structuredClone(snapshot), state: "unknown" };
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
settled = true;
|
|
262
|
+
clearTimeout(timer);
|
|
263
|
+
void read.catch(() => { });
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (!live && request.action === "capture" && stored.snapshot.state === "exited")
|
|
267
|
+
return { snapshot: structuredClone(stored.snapshot), text: "" };
|
|
268
|
+
if (!live)
|
|
269
|
+
throw Error("Pane process is not owned by this runner; its reservation is retained");
|
|
270
|
+
const record = live.record;
|
|
271
|
+
if (request.action === "output")
|
|
272
|
+
return live.output.read(request.offset, record.snapshot.state === "exited");
|
|
273
|
+
await live.parsed;
|
|
274
|
+
if (request.action === "capture") {
|
|
275
|
+
const seq = record.snapshot.seq, text = await live.screen.capture(request);
|
|
276
|
+
if (seq !== record.snapshot.seq)
|
|
277
|
+
throw Error("Pane changed during capture; observe it again");
|
|
278
|
+
return { snapshot: structuredClone(record.snapshot), text };
|
|
279
|
+
}
|
|
280
|
+
if (request.action === "bind-session") {
|
|
281
|
+
const expected = record.snapshot.sessionId ?? record.launch.sessionId ?? (record.launch.cli === "claude-code" ? record.snapshot.launchId : undefined);
|
|
282
|
+
if (expected && expected !== request.sessionId)
|
|
283
|
+
throw Error("Pane conversation identity is already pinned elsewhere");
|
|
284
|
+
if (!expected) {
|
|
285
|
+
if (record.snapshot.state !== "running")
|
|
286
|
+
throw Error("An unowned pane cannot establish a conversation identity");
|
|
287
|
+
const text = await live.screen.capture({ history: 200, joined: true });
|
|
288
|
+
const ids = [...text.matchAll(/\bSession:\s*([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\b/gi)].map(match => match[1]);
|
|
289
|
+
if (ids.length !== 1 || ids[0] !== request.sessionId)
|
|
290
|
+
throw Error("The owned pane has no unique matching status identity");
|
|
291
|
+
}
|
|
292
|
+
if (!current() || !this.options.online() || this.closing)
|
|
293
|
+
throw Error("Pane session binding lease expired");
|
|
294
|
+
if (record.snapshot.sessionId !== request.sessionId) {
|
|
295
|
+
record.snapshot.sessionId = request.sessionId;
|
|
296
|
+
try {
|
|
297
|
+
this.options.store.put(record);
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
delete record.snapshot.sessionId;
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return structuredClone(record.snapshot);
|
|
305
|
+
}
|
|
306
|
+
if (request.action === "transcript" || request.action === "transcript-baseline")
|
|
307
|
+
return this.readTranscript(live, request.cursor, current, request.action === "transcript-baseline");
|
|
308
|
+
if (request.action === "reconcile") {
|
|
309
|
+
if (record.snapshot.commandSequence !== request.sequence || record.lastCommand?.id !== request.operationId
|
|
310
|
+
|| record.lastCommand.digest !== request.digest || record.lastCommand.state !== "applied")
|
|
311
|
+
throw Error("Pane command outcome is unconfirmed");
|
|
312
|
+
return structuredClone(record.snapshot);
|
|
313
|
+
}
|
|
314
|
+
if (!current() || !this.options.online())
|
|
315
|
+
throw Error("Pane input lease expired");
|
|
316
|
+
const digest = RuntimePaneStore.digest(request);
|
|
317
|
+
if (request.sequence === record.snapshot.commandSequence) {
|
|
318
|
+
if (record.lastCommand?.id !== request.operationId || record.lastCommand.digest !== digest)
|
|
319
|
+
throw Error("Pane input sequence belongs to another command");
|
|
320
|
+
if (record.lastCommand.state !== "applied")
|
|
321
|
+
throw Error("Pane input outcome is unknown; it will not be replayed");
|
|
322
|
+
return structuredClone(record.snapshot);
|
|
323
|
+
}
|
|
324
|
+
if (request.sequence !== record.snapshot.commandSequence + 1)
|
|
325
|
+
throw Error("Pane input sequence is stale or has a gap");
|
|
326
|
+
if (record.lastCommand?.state === "prepared" && request.action !== "close")
|
|
327
|
+
throw Error("Previous pane input outcome is unknown");
|
|
328
|
+
if (record.snapshot.state !== "running" && request.action !== "close")
|
|
329
|
+
throw Error("Pane process is not confirmed running");
|
|
330
|
+
record.snapshot.commandSequence = request.sequence;
|
|
331
|
+
record.lastCommand = { id: request.operationId, digest, state: "prepared" };
|
|
332
|
+
delete record.snapshot.inputRefused;
|
|
333
|
+
if ((request.action === "input" || request.action === "key" || request.action === "edit") && request.expectedSeq !== record.snapshot.seq) {
|
|
334
|
+
// Positively no input. Consume this command identity: a lost refusal ACK must never become a later key.
|
|
335
|
+
record.snapshot.inputRefused = true;
|
|
336
|
+
record.lastCommand.state = "applied";
|
|
337
|
+
this.options.store.put(record);
|
|
338
|
+
return structuredClone(record.snapshot);
|
|
339
|
+
}
|
|
340
|
+
// Durable before input: a crash after this write must hold, never duplicate Enter.
|
|
341
|
+
this.options.store.put(record);
|
|
342
|
+
if (request.action === "input")
|
|
343
|
+
live.process.write(request.kind === "paste" ? live.screen.bracketedPaste(request.text) : request.text);
|
|
344
|
+
else if (request.action === "edit")
|
|
345
|
+
live.process.write(request.keys.map(key => PANE_EDIT_KEYS[key]).join("").repeat(request.repeat ?? 1));
|
|
346
|
+
else if (request.action === "key")
|
|
347
|
+
live.process.write(KEYS[request.key]);
|
|
348
|
+
else if (request.action === "resize") {
|
|
349
|
+
live.process.resize(request.columns, request.rows);
|
|
350
|
+
await live.screen.resize(request.columns, request.rows);
|
|
351
|
+
record.snapshot.columns = request.columns;
|
|
352
|
+
record.snapshot.rows = request.rows;
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
live.process.kill();
|
|
356
|
+
let timer;
|
|
357
|
+
const stopped = await Promise.race([live.exited.then(() => true), new Promise(resolve => { timer = setTimeout(() => resolve(false), 10_000); })]);
|
|
358
|
+
clearTimeout(timer);
|
|
359
|
+
if (!stopped)
|
|
360
|
+
record.snapshot.state = "unknown";
|
|
361
|
+
}
|
|
362
|
+
record.lastCommand.state = "applied";
|
|
363
|
+
this.options.store.put(record);
|
|
364
|
+
return structuredClone(record.snapshot);
|
|
365
|
+
}
|
|
366
|
+
async readTranscript(live, cursor, current, baseline = false) {
|
|
367
|
+
const { launch, snapshot } = live.record;
|
|
368
|
+
if (!snapshot.sessionId || cursor.sessionId !== snapshot.sessionId)
|
|
369
|
+
throw Error("Transcript identity differs from its owned pane");
|
|
370
|
+
if (snapshot.state !== "running" && snapshot.state !== "exited")
|
|
371
|
+
throw Error("Transcript pane ownership is unconfirmed");
|
|
372
|
+
live.transcript ??= this.options.transcript?.(launch, snapshot.sessionId) ?? new NativePaneTranscriptReader(launch.cli, launch.cwd, snapshot.sessionId);
|
|
373
|
+
let settled = false, timer;
|
|
374
|
+
const lease = () => !settled && !this.closing && current() && this.options.online();
|
|
375
|
+
const read = baseline ? live.transcript.baseline?.(cursor, lease) ?? Promise.resolve({ state: "pending", cursor, complete: false, turnKnown: false, openTurn: null }) : live.transcript.read(cursor, lease);
|
|
376
|
+
try {
|
|
377
|
+
const batch = await Promise.race([read, new Promise((_resolve, reject) => { timer = setTimeout(() => reject(Error("Pane transcript read deadline exceeded")), 1000); })]);
|
|
378
|
+
if (!lease())
|
|
379
|
+
throw Error("Pane transcript read lease expired");
|
|
380
|
+
if (baseline)
|
|
381
|
+
return validatePaneTranscriptBaseline(batch, snapshot.sessionId);
|
|
382
|
+
if (!("data" in batch))
|
|
383
|
+
throw Error("Pane transcript response has no records");
|
|
384
|
+
return validatePaneTranscriptWireBatch({ state: batch.state, cursor: batch.cursor, data: batch.data, complete: batch.complete, gap: batch.gap }, snapshot.sessionId);
|
|
385
|
+
}
|
|
386
|
+
finally {
|
|
387
|
+
settled = true;
|
|
388
|
+
clearTimeout(timer);
|
|
389
|
+
void read.catch(() => { });
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async stop() {
|
|
393
|
+
this.closing = true;
|
|
394
|
+
for (const live of this.live.values())
|
|
395
|
+
if (live.record.snapshot.state !== "exited") {
|
|
396
|
+
try {
|
|
397
|
+
live.process.kill();
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
live.record.snapshot.state = "unknown";
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// Pending opens recheck admission and retire their own process; no new request can enter.
|
|
404
|
+
await Promise.allSettled([...this.queues.values()].map(queue => queue.tail));
|
|
405
|
+
// A request to close is not exit evidence. Keep native helpers alive until their job receipt or the bounded hold.
|
|
406
|
+
const remaining = [...this.live.values()].filter(live => live.record.snapshot.state !== "exited");
|
|
407
|
+
let timer;
|
|
408
|
+
if (remaining.length)
|
|
409
|
+
await Promise.race([Promise.all(remaining.map(live => live.exited)), new Promise(done => { timer = setTimeout(done, 10_000); })]);
|
|
410
|
+
clearTimeout(timer);
|
|
411
|
+
for (const live of this.live.values()) {
|
|
412
|
+
if (live.record.snapshot.state !== "exited")
|
|
413
|
+
live.record.snapshot.state = "unknown";
|
|
414
|
+
try {
|
|
415
|
+
this.options.store.put(live.record);
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
live.screen.dispose();
|
|
419
|
+
void live.transcript?.close().catch(() => { });
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
//# sourceMappingURL=runtime-pane-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pane-host.js","sourceRoot":"","sources":["../src/runtime-pane-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runPaneJobOwner(args: string[]): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Detached native Node owner: Windows PowerShell needs an attached launch, even with redirected pipes. */
|
|
2
|
+
import { spawn } from "./child-process.js";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { validWindowsAgentId, validWindowsDirectory, nativeCliEnvironment } from "./windows-cli-worker.js";
|
|
6
|
+
export function runPaneJobOwner(args) {
|
|
7
|
+
const [directory, launch, pane, agent, owner] = args;
|
|
8
|
+
if (process.platform !== "win32" || args.length !== 5 || !validWindowsDirectory(directory)
|
|
9
|
+
|| ![launch, pane, agent].every(validWindowsAgentId) || !/^[1-9]\d{0,9}$/.test(owner))
|
|
10
|
+
throw Error("Invalid local pane owner");
|
|
11
|
+
// Only fixed program paths. The private first stdin frame still controls the validated configured CLI.
|
|
12
|
+
const child = spawn(join(process.env.SystemRoot || "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "powershell.exe"), [
|
|
13
|
+
"-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-File", fileURLToPath(new URL("./runtime-pane-job.ps1", import.meta.url)),
|
|
14
|
+
"-NodePath", process.execPath, "-WorkerPath", fileURLToPath(new URL("./runtime-pane-worker.js", import.meta.url)),
|
|
15
|
+
"-StateDirectory", directory, "-LaunchId", launch, "-PaneId", pane, "-AgentId", agent,
|
|
16
|
+
"-OwnerPid", owner, "-ReceiptPid", String(process.pid),
|
|
17
|
+
], { windowsHide: true, shell: false, env: nativeCliEnvironment(), stdio: "inherit" });
|
|
18
|
+
child.on("error", () => { process.exitCode = 1; });
|
|
19
|
+
child.on("close", code => { process.exitCode = code ?? 1; });
|
|
20
|
+
}
|
|
21
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
22
|
+
try {
|
|
23
|
+
runPaneJobOwner(process.argv.slice(2));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=runtime-pane-job-owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pane-job-owner.js","sourceRoot":"","sources":["../src/runtime-pane-job-owner.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE3G,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;WACrF,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACjI,uGAAuG;IACvG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE;QAC5H,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACzI,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACjH,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK;QACrF,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;KACvD,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACvF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACnF,IAAI,CAAC;QAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAAC,CAAC;AACjF,CAAC"}
|