@songsid/agend 2.3.4-beta.5 → 2.3.5-alpha.2
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/backend/claude-code.d.ts +18 -12
- package/dist/backend/claude-code.js +225 -136
- 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 +1271 -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 +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +59 -0
- 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 +62 -5
- package/dist/daemon.js +760 -240
- 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 +125 -2
- package/dist/fleet-manager.js +1157 -27
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-windows-runtime.d.ts +92 -0
- package/dist/fleet-windows-runtime.js +373 -0
- package/dist/fleet-windows-runtime.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 +20 -3
- package/dist/instance-lifecycle.js +358 -156
- package/dist/instance-lifecycle.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 +34 -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 +227 -0
- package/dist/native-pane-lifecycle.js.map +1 -0
- package/dist/native-pane-manager.d.ts +58 -0
- package/dist/native-pane-manager.js +563 -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 +1 -0
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +12 -1
- package/dist/needs-you.js +8 -1
- 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 +107 -0
- package/dist/pane-port.js +2 -0
- package/dist/pane-port.js.map +1 -0
- 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 +147 -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-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 +43 -0
- package/dist/runtime-pane-host.js +403 -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 +43 -0
- package/dist/runtime-pane-mcp.js +137 -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 +134 -0
- package/dist/runtime-pane-port.js +537 -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 +169 -0
- package/dist/runtime-pane-protocol.js +189 -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.js +58 -0
- package/dist/settings-api.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 +15 -1
- package/dist/settings-confirmation.js +46 -9
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.js +23 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +11 -2
- package/dist/settings-http-confirmation.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/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 +21 -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/native-instance-settings.js +47 -0
- package/dist/ui/native-pane-recovery.js +45 -0
- package/dist/ui/panel-chat.js +61 -32
- package/dist/ui/panel-details.js +2 -1
- package/dist/ui/panel-fleet.js +99 -18
- package/dist/ui/panel-needs.js +152 -3
- package/dist/ui/panel-runtimes.js +231 -0
- package/dist/ui/panel-settings.js +14 -8
- 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 +14 -5
- package/dist/ui/settings-registry.js +5 -0
- package/dist/ui/settings-strings.js +14 -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 +20 -4
- package/dist/ui/shared/instance-switch.js +4 -3
- package/dist/ui/shared/ui-menu.js +28 -8
- package/dist/ui/shared/view-strings.js +6 -0
- package/dist/ui/windows-agents-nav.js +2 -0
- package/dist/ui/windows-cli-catalog.js +79 -0
- package/dist/update-check.d.ts +8 -2
- package/dist/update-check.js +5 -2
- package/dist/update-check.js.map +1 -1
- package/dist/web-api.d.ts +25 -0
- package/dist/web-api.js +171 -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-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 +112 -0
- package/dist/windows-agents.js +463 -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,537 @@
|
|
|
1
|
+
import { NativePaneOutputLog } from "./native-pane-output-log.js";
|
|
2
|
+
import { validatePaneOutputBatch } from "./runtime-pane-output.js";
|
|
3
|
+
/** Coordinator-side pane handle. Remote PIDs are never exposed as local supervision targets. */
|
|
4
|
+
import { EventEmitter } from "node:events";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { lstatSync, readFileSync } from "node:fs";
|
|
7
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
8
|
+
import { runtimeJobDigest } from "./runtime-client-store.js";
|
|
9
|
+
import { PANE_EDIT_KEYS, validateRuntimePaneRequest, validateRuntimePaneSnapshot, validateRuntimePaneOpenResult } from "./runtime-pane-protocol.js";
|
|
10
|
+
import { validateRuntimeTranscriptReference, validatePaneTranscriptBaseline, validatePaneTranscriptWireBatch, sameRuntimeTranscriptScope } from "./runtime-pane-transcript-protocol.js";
|
|
11
|
+
export class RuntimePanePort {
|
|
12
|
+
endpoint;
|
|
13
|
+
file;
|
|
14
|
+
inputIsComposer;
|
|
15
|
+
record;
|
|
16
|
+
tail = Promise.resolve();
|
|
17
|
+
error = null;
|
|
18
|
+
closing;
|
|
19
|
+
outputLog;
|
|
20
|
+
lastObservation;
|
|
21
|
+
inputCapture;
|
|
22
|
+
inputNotSent = false;
|
|
23
|
+
constructor(endpoint, file, launch, inputIsComposer = () => false) {
|
|
24
|
+
this.endpoint = endpoint;
|
|
25
|
+
this.file = file;
|
|
26
|
+
this.inputIsComposer = inputIsComposer;
|
|
27
|
+
this.record = { version: 1, machineId: endpoint.machineId, launch, openId: randomUUID() };
|
|
28
|
+
try {
|
|
29
|
+
const stat = lstatSync(file);
|
|
30
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 128 * 1024)
|
|
31
|
+
throw Error("Unsafe coordinator pane receipt");
|
|
32
|
+
const stored = JSON.parse(readFileSync(file, "utf8"));
|
|
33
|
+
if (stored?.version !== 1 || stored.machineId !== endpoint.machineId || stored.launch?.agentId !== launch.agentId
|
|
34
|
+
|| stored.launch.instance !== launch.instance || runtimeJobDigest(stored.launch) !== runtimeJobDigest(launch)
|
|
35
|
+
|| !/^[a-f0-9-]{36}$/i.test(stored.openId) || stored.statusRequested !== undefined && typeof stored.statusRequested !== "boolean")
|
|
36
|
+
throw Error("Coordinator pane receipt scope differs");
|
|
37
|
+
if (stored.snapshot)
|
|
38
|
+
validateRuntimePaneSnapshot(stored.snapshot);
|
|
39
|
+
if (stored.pending) {
|
|
40
|
+
const pending = validateRuntimePaneRequest(stored.pending);
|
|
41
|
+
if (pending.action !== "reconcile" || !stored.snapshot || pending.paneId !== stored.snapshot.paneId
|
|
42
|
+
|| pending.launchId !== stored.snapshot.launchId || pending.sequence !== stored.snapshot.commandSequence + 1)
|
|
43
|
+
throw Error("Pane command receipt scope differs");
|
|
44
|
+
}
|
|
45
|
+
if (stored.pendingClose) {
|
|
46
|
+
const close = validateRuntimePaneRequest(stored.pendingClose);
|
|
47
|
+
if (close.action !== "close" || !stored.snapshot || close.paneId !== stored.snapshot.paneId || close.launchId !== stored.snapshot.launchId)
|
|
48
|
+
throw Error("Pane close receipt scope differs");
|
|
49
|
+
}
|
|
50
|
+
this.record = stored;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error.code !== "ENOENT")
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
save() { atomicWriteFileSync(this.file, JSON.stringify(this.record), { mode: 0o600 }); }
|
|
58
|
+
serialize(operation) {
|
|
59
|
+
const result = this.tail.catch(() => { }).then(operation);
|
|
60
|
+
this.tail = result;
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
accept(value) {
|
|
64
|
+
const snapshot = validateRuntimePaneSnapshot(value);
|
|
65
|
+
const launch = this.record.launch;
|
|
66
|
+
if (launch.launchId !== undefined && snapshot.launchId !== launch.launchId || snapshot.paneId !== launch.paneId || snapshot.agentId !== launch.agentId || snapshot.instance !== launch.instance
|
|
67
|
+
|| launch.sessionId !== undefined && snapshot.sessionId !== launch.sessionId
|
|
68
|
+
|| launch.cli === "claude-code" && snapshot.sessionId !== (launch.sessionId ?? snapshot.launchId)
|
|
69
|
+
|| this.record.snapshot && (snapshot.launchId !== this.record.snapshot.launchId || snapshot.hostBootId !== this.record.snapshot.hostBootId)
|
|
70
|
+
|| this.record.snapshot?.sessionId && snapshot.sessionId !== this.record.snapshot.sessionId
|
|
71
|
+
|| this.record.snapshot && snapshot.commandSequence < this.record.snapshot.commandSequence)
|
|
72
|
+
throw Error("Pane ownership proof differs");
|
|
73
|
+
return snapshot;
|
|
74
|
+
}
|
|
75
|
+
async open() {
|
|
76
|
+
return this.serialize(async () => {
|
|
77
|
+
if (this.closing || this.record.pendingClose)
|
|
78
|
+
throw Error("Pane close outcome is retained; inspect its exit before starting again");
|
|
79
|
+
this.save(); // The open identity exists before the runtime may spawn.
|
|
80
|
+
const { reattached, ...raw } = validateRuntimePaneOpenResult(await this.endpoint.call({ action: "open", operationId: this.record.openId, launch: this.record.launch }));
|
|
81
|
+
if (this.record.snapshot && !reattached)
|
|
82
|
+
throw Error("Retained pane was not reattached by its host");
|
|
83
|
+
const snapshot = this.accept(raw);
|
|
84
|
+
this.record.snapshot = snapshot;
|
|
85
|
+
this.save();
|
|
86
|
+
// Exit/no-launch proof settles even an interrupted input or close. It is never permission to replay either.
|
|
87
|
+
if (snapshot.state === "exited") {
|
|
88
|
+
delete this.record.pending;
|
|
89
|
+
delete this.record.pendingClose;
|
|
90
|
+
this.save();
|
|
91
|
+
throw Error(snapshot.noLaunch ? "Pane admission refused before launch" : "Retained pane has exited");
|
|
92
|
+
}
|
|
93
|
+
if (this.record.pending) {
|
|
94
|
+
// Exact identity only. The host returns a prior applied result or holds an uncertain input; never resubmits it.
|
|
95
|
+
const result = this.accept(await this.endpoint.call(this.record.pending));
|
|
96
|
+
this.record.snapshot = result;
|
|
97
|
+
delete this.record.pending;
|
|
98
|
+
this.save();
|
|
99
|
+
}
|
|
100
|
+
if (snapshot.state !== "running")
|
|
101
|
+
throw Error("Pane is not confirmed running");
|
|
102
|
+
return { windowId: snapshot.paneId, reattached };
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Read-only recovery of an open whose ACK was lost. Never sends open or starts a process. */
|
|
106
|
+
async inspectRetained() {
|
|
107
|
+
return this.serialize(async () => {
|
|
108
|
+
const launch = this.record.launch;
|
|
109
|
+
if (!this.endpoint.online() || !launch.launchId)
|
|
110
|
+
throw Error("Retained native owner is unavailable");
|
|
111
|
+
const result = await this.endpoint.call({ action: "snapshot", paneId: launch.paneId, launchId: launch.launchId });
|
|
112
|
+
const snapshot = this.accept(result);
|
|
113
|
+
if (!this.endpoint.online())
|
|
114
|
+
throw Error("Retained native observation became disconnected");
|
|
115
|
+
this.record.snapshot = snapshot;
|
|
116
|
+
this.save();
|
|
117
|
+
return structuredClone(snapshot);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/** Idempotent metadata binding; it never types into the CLI or replays an input. */
|
|
121
|
+
async bindConversation(sessionId) {
|
|
122
|
+
return this.serialize(async () => {
|
|
123
|
+
const before = this.record.snapshot;
|
|
124
|
+
if (!before || !this.endpoint.online() || this.closing || this.record.pending || this.record.pendingClose)
|
|
125
|
+
throw Error("Pane session owner is unavailable or its input needs reconciliation");
|
|
126
|
+
const request = validateRuntimePaneRequest({ action: "bind-session", paneId: before.paneId, launchId: before.launchId, sessionId });
|
|
127
|
+
const snapshot = this.accept(await this.endpoint.call(request));
|
|
128
|
+
if (!this.endpoint.online() || snapshot.sessionId !== sessionId)
|
|
129
|
+
throw Error("Pane conversation binding is unconfirmed");
|
|
130
|
+
this.record.snapshot = snapshot;
|
|
131
|
+
this.save();
|
|
132
|
+
return structuredClone(snapshot);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/** Intent before the one automatic /status. A lost coordinator must inspect its result, never type it twice. */
|
|
136
|
+
beginStatusRequest() {
|
|
137
|
+
return this.serialize(async () => {
|
|
138
|
+
if (!this.endpoint.online() || this.closing || this.record.pending || this.record.pendingClose || this.record.snapshot?.state !== "running")
|
|
139
|
+
throw Error("Status request owner is unconfirmed");
|
|
140
|
+
if (this.record.statusRequested)
|
|
141
|
+
return false;
|
|
142
|
+
this.record.statusRequested = true;
|
|
143
|
+
this.save();
|
|
144
|
+
return true;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
runtimeTranscriptReference(cursor) {
|
|
148
|
+
const pane = this.record.snapshot;
|
|
149
|
+
if (!pane?.sessionId || pane.sessionId !== cursor.sessionId)
|
|
150
|
+
throw Error("Pane transcript conversation is not pinned");
|
|
151
|
+
return validateRuntimeTranscriptReference({ version: 1, machineId: this.endpoint.machineId, hostBootId: pane.hostBootId,
|
|
152
|
+
paneId: pane.paneId, launchId: pane.launchId, agentId: pane.agentId, provider: this.record.launch.cli, cursor });
|
|
153
|
+
}
|
|
154
|
+
async readTranscript(cursor, current = () => true) {
|
|
155
|
+
const ref = this.runtimeTranscriptReference(cursor);
|
|
156
|
+
if (!this.isTranscriptObservationCurrent(ref) || !current())
|
|
157
|
+
throw Error("Pane transcript observation is disconnected");
|
|
158
|
+
const result = await this.endpoint.call({ action: "transcript", paneId: ref.paneId, launchId: ref.launchId, cursor: ref.cursor });
|
|
159
|
+
if (!this.isTranscriptObservationCurrent(ref) || !current())
|
|
160
|
+
throw Error("Pane transcript observation became stale");
|
|
161
|
+
return validatePaneTranscriptWireBatch(result, ref.cursor.sessionId);
|
|
162
|
+
}
|
|
163
|
+
async readTranscriptBaseline(cursor, current = () => true) {
|
|
164
|
+
const ref = this.runtimeTranscriptReference(cursor);
|
|
165
|
+
if (!this.isTranscriptObservationCurrent(ref) || !current())
|
|
166
|
+
throw Error("Pane baseline observation is disconnected");
|
|
167
|
+
const result = await this.endpoint.call({ action: "transcript-baseline", paneId: ref.paneId, launchId: ref.launchId, cursor: ref.cursor });
|
|
168
|
+
if (!this.isTranscriptObservationCurrent(ref) || !current())
|
|
169
|
+
throw Error("Pane baseline observation became stale");
|
|
170
|
+
return validatePaneTranscriptBaseline(result, ref.cursor.sessionId);
|
|
171
|
+
}
|
|
172
|
+
isTranscriptObservationCurrent(ref) {
|
|
173
|
+
try {
|
|
174
|
+
const pane = this.record.snapshot;
|
|
175
|
+
return this.endpoint.online() && !this.closing && !this.record.pendingClose && !!pane && (pane.state === "running" || pane.state === "exited")
|
|
176
|
+
&& sameRuntimeTranscriptScope(ref, this.runtimeTranscriptReference(ref.cursor));
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async mutate(make, proof, input = true) {
|
|
183
|
+
return this.serialize(async () => {
|
|
184
|
+
this.inputNotSent = false;
|
|
185
|
+
try {
|
|
186
|
+
if (!this.endpoint.online() || this.closing || this.record.snapshot?.state !== "running" || this.record.pending || this.record.pendingClose)
|
|
187
|
+
throw Error("Pane input needs reconciliation");
|
|
188
|
+
let expectedSeq = this.record.snapshot.seq;
|
|
189
|
+
if (input) {
|
|
190
|
+
// Internal delivery proof comes from the daemon's recognised runtime-dialog veto (#2990 policy).
|
|
191
|
+
// Human dialog proof remains identity/cursor-bound. Composer-only and unproved callers keep the reader check.
|
|
192
|
+
// Every policy still needs the exact last capture and carries its output seq to the host.
|
|
193
|
+
let capture = proof ? this.inputCapture : undefined;
|
|
194
|
+
if (!proof) {
|
|
195
|
+
// A read refused during repaint precedes every mutation identity/write. Retry READS only, never input.
|
|
196
|
+
const deadline = performance.now() + 2000;
|
|
197
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
198
|
+
if (!this.endpoint.online() || this.closing || this.record.pendingClose || this.record.snapshot?.state !== "running")
|
|
199
|
+
break;
|
|
200
|
+
try {
|
|
201
|
+
capture = await this.captureCurrent();
|
|
202
|
+
}
|
|
203
|
+
catch { /* No input request has been built or sent. */ }
|
|
204
|
+
if (performance.now() >= deadline) {
|
|
205
|
+
capture = undefined;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
if (capture)
|
|
209
|
+
break;
|
|
210
|
+
if (attempt < 4)
|
|
211
|
+
await new Promise(done => setTimeout(done, 100));
|
|
212
|
+
}
|
|
213
|
+
if (!capture) {
|
|
214
|
+
this.inputNotSent = true;
|
|
215
|
+
this.error = "Pane observation unavailable; no input was sent";
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (!capture || (!capture.text.trim() && proof?.kind !== "delivery") || proof && capture.text !== proof.screen
|
|
220
|
+
|| (proof?.kind !== "dialog" && proof?.kind !== "delivery" && !this.inputIsComposer(capture.text))) {
|
|
221
|
+
this.inputNotSent = true;
|
|
222
|
+
this.error = "Pane input withheld: the intended composer or dialog is not verified";
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
expectedSeq = capture.snapshot.seq;
|
|
226
|
+
if (!this.endpoint.online() || this.closing || this.record.pendingClose || this.record.snapshot?.state !== "running")
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
const request = validateRuntimePaneRequest(make(this.record.snapshot, expectedSeq));
|
|
230
|
+
if (proof?.kind === "delivery" && (request.action !== "key" || request.key !== "Enter"))
|
|
231
|
+
throw Error("Delivery proof is only valid for Enter");
|
|
232
|
+
if (!("operationId" in request) || !("sequence" in request) || !("paneId" in request))
|
|
233
|
+
throw Error("Expected pane mutation");
|
|
234
|
+
this.record.pending = { action: "reconcile", paneId: request.paneId, launchId: request.launchId,
|
|
235
|
+
operationId: request.operationId, sequence: request.sequence, digest: runtimeJobDigest(request) };
|
|
236
|
+
this.save();
|
|
237
|
+
const snapshot = this.accept(await this.endpoint.call(request));
|
|
238
|
+
this.record.snapshot = snapshot;
|
|
239
|
+
delete this.record.pending;
|
|
240
|
+
this.save();
|
|
241
|
+
this.error = null;
|
|
242
|
+
if (snapshot.inputRefused) {
|
|
243
|
+
this.inputNotSent = true;
|
|
244
|
+
this.error = "Pane changed after observation; input was not sent";
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
this.error = "Pane input outcome is unconfirmed; reconnect and inspect before retrying";
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
target(snapshot) {
|
|
256
|
+
return { paneId: snapshot.paneId, launchId: snapshot.launchId, operationId: randomUUID(), sequence: snapshot.commandSequence + 1 };
|
|
257
|
+
}
|
|
258
|
+
async createWindow() { throw Error("Native panes require a typed configured launch, never a shell command"); }
|
|
259
|
+
async respawnWindow() { throw Error("Native pane replacement requires confirmed owned exit and a new launch receipt"); }
|
|
260
|
+
async killWindow() { if (!await this.killWindowConfirmed())
|
|
261
|
+
throw Error("Native pane exit is unconfirmed"); }
|
|
262
|
+
async killWindowConfirmed() {
|
|
263
|
+
if (this.closing)
|
|
264
|
+
return this.closing;
|
|
265
|
+
this.closing = this.closeOwned().finally(() => { this.closing = undefined; });
|
|
266
|
+
return this.closing;
|
|
267
|
+
}
|
|
268
|
+
async closeOwned() {
|
|
269
|
+
try {
|
|
270
|
+
const before = this.record.snapshot;
|
|
271
|
+
if (!before)
|
|
272
|
+
return false;
|
|
273
|
+
// A prior exact host exit receipt remains positive proof after disconnect. It is never inferred from a lost link.
|
|
274
|
+
if (this.lastObservation?.state === "exited") {
|
|
275
|
+
const exited = this.accept(this.lastObservation);
|
|
276
|
+
this.record.snapshot = exited;
|
|
277
|
+
delete this.record.pending;
|
|
278
|
+
delete this.record.pendingClose;
|
|
279
|
+
this.save();
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
if (!this.endpoint.online())
|
|
283
|
+
return false;
|
|
284
|
+
const snapshot = this.accept(await this.endpoint.call({ action: "snapshot", paneId: before.paneId, launchId: before.launchId }));
|
|
285
|
+
if (snapshot.state === "exited") {
|
|
286
|
+
this.record.snapshot = snapshot;
|
|
287
|
+
delete this.record.pending;
|
|
288
|
+
delete this.record.pendingClose;
|
|
289
|
+
this.save();
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
if (!this.record.pendingClose) {
|
|
293
|
+
// Independent of an uncertain input RPC. Capture runs behind any accepted write on the host's pane queue.
|
|
294
|
+
this.record.pendingClose = { action: "close", ...this.target(snapshot) };
|
|
295
|
+
this.save();
|
|
296
|
+
}
|
|
297
|
+
const result = this.accept(await this.endpoint.call(this.record.pendingClose));
|
|
298
|
+
if (result.state !== "exited")
|
|
299
|
+
return false;
|
|
300
|
+
this.record.snapshot = result;
|
|
301
|
+
delete this.record.pending;
|
|
302
|
+
delete this.record.pendingClose;
|
|
303
|
+
this.save();
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
this.error = "Pane close outcome is unconfirmed; its reservation is retained";
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async isWindowAlive() { const status = await this.getPaneStatus(); if (!status)
|
|
312
|
+
throw Error("Native pane observation is unconfirmed"); return status.alive; }
|
|
313
|
+
async setRemainOnExit() { }
|
|
314
|
+
async getPaneStatus() {
|
|
315
|
+
try {
|
|
316
|
+
const before = this.record.snapshot;
|
|
317
|
+
if (!before || !this.endpoint.online())
|
|
318
|
+
return null;
|
|
319
|
+
const snapshot = this.accept(await this.endpoint.call({ action: "snapshot", paneId: before.paneId, launchId: before.launchId }));
|
|
320
|
+
if (!this.endpoint.online())
|
|
321
|
+
return null;
|
|
322
|
+
this.lastObservation = snapshot;
|
|
323
|
+
return snapshot.state === "running" || snapshot.state === "exited" ? { alive: snapshot.state === "running", ...(snapshot.exitCode !== undefined ? { exitCode: snapshot.exitCode } : {}) } : null;
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async getWindowGeometry() {
|
|
330
|
+
await this.capture({});
|
|
331
|
+
const snapshot = this.record.snapshot;
|
|
332
|
+
return { columns: snapshot.columns, rows: snapshot.rows, mode: "native-pane" };
|
|
333
|
+
}
|
|
334
|
+
async getPaneInputMode() { return "unknown"; }
|
|
335
|
+
sendKeys(text, proof) { return this.mutate((snapshot, expectedSeq) => ({ action: "input", ...this.target(snapshot), expectedSeq, kind: "literal", text }), proof); }
|
|
336
|
+
async sendKeySequence(keys) {
|
|
337
|
+
if (!keys.length || keys.length > 64 || keys.some(key => !Object.hasOwn(PANE_EDIT_KEYS, key)))
|
|
338
|
+
return false;
|
|
339
|
+
return this.mutate((snapshot, expectedSeq) => ({ action: "edit", ...this.target(snapshot), expectedSeq, keys: [...keys] }));
|
|
340
|
+
}
|
|
341
|
+
sendSpecialKey(key, _timeoutMs, proof) { return this.mutate((snapshot, expectedSeq) => ({ action: "key", ...this.target(snapshot), expectedSeq, key }), proof); }
|
|
342
|
+
async deleteBackward(count) {
|
|
343
|
+
if (!Number.isInteger(count) || count <= 0)
|
|
344
|
+
return true;
|
|
345
|
+
if (count > 8192)
|
|
346
|
+
return false;
|
|
347
|
+
return this.mutate((snapshot, expectedSeq) => ({ action: "edit", ...this.target(snapshot), expectedSeq, keys: ["BSpace"], repeat: count }));
|
|
348
|
+
}
|
|
349
|
+
lastInputWasNotSent() { return this.inputNotSent && !this.record.pending; }
|
|
350
|
+
getLastSendSpecialKeyError() { return this.error; }
|
|
351
|
+
getLastPasteError() { return this.error; }
|
|
352
|
+
isLastPasteFailureRecoverable() { return false; }
|
|
353
|
+
async pasteText(text) {
|
|
354
|
+
if (!await this.pasteBuffer(text))
|
|
355
|
+
return false;
|
|
356
|
+
// Same settle margin as TmuxManager: Codex otherwise keeps the Enter inside its input/paste burst.
|
|
357
|
+
// Exactly one Enter; an uncertain submission must never be "fixed" with a second bare Enter.
|
|
358
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
359
|
+
return this.sendSpecialKey("Enter");
|
|
360
|
+
}
|
|
361
|
+
async pasteBuffer(text, opts = {}) {
|
|
362
|
+
if (opts.guard && !opts.guard())
|
|
363
|
+
return false;
|
|
364
|
+
return this.mutate((snapshot, expectedSeq) => {
|
|
365
|
+
if (opts.guard && !opts.guard())
|
|
366
|
+
throw Error("Delivery admission expired");
|
|
367
|
+
return { action: "input", ...this.target(snapshot), expectedSeq, kind: "paste", text };
|
|
368
|
+
}, opts.proof);
|
|
369
|
+
}
|
|
370
|
+
async pipeOutput(logPath) {
|
|
371
|
+
this.closeOutput();
|
|
372
|
+
const snapshot = this.record.snapshot;
|
|
373
|
+
if (!snapshot)
|
|
374
|
+
throw Error("Native output owner is missing");
|
|
375
|
+
const owner = runtimeJobDigest({ machine: this.endpoint.machineId, host: snapshot.hostBootId, pane: snapshot.paneId, launch: snapshot.launchId });
|
|
376
|
+
const feed = new NativePaneOutputLog(logPath, owner, () => this.outputLog === feed && this.endpoint.online() && this.record.snapshot?.hostBootId === snapshot.hostBootId && this.record.snapshot?.launchId === snapshot.launchId, async (offset) => validatePaneOutputBatch(await this.endpoint.call({ action: "output", paneId: snapshot.paneId, launchId: snapshot.launchId, offset }), offset));
|
|
377
|
+
this.outputLog = feed;
|
|
378
|
+
try {
|
|
379
|
+
await feed.start();
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
this.closeOutput();
|
|
383
|
+
throw error;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
closeOutput() { this.outputLog?.stop(); this.outputLog = undefined; }
|
|
387
|
+
async captureCurrent(options = {}) {
|
|
388
|
+
if (!this.endpoint.online() || !this.record.snapshot)
|
|
389
|
+
throw Error("Pane observation is disconnected");
|
|
390
|
+
const result = await this.endpoint.call({ action: "capture", paneId: this.record.launch.paneId, launchId: this.record.snapshot.launchId, ...options });
|
|
391
|
+
const snapshot = this.accept(result?.snapshot);
|
|
392
|
+
if (!this.endpoint.online() || typeof result.text !== "string")
|
|
393
|
+
throw Error("Invalid or disconnected pane capture");
|
|
394
|
+
// Capturing while an input awaits its response must never erase that input's durable identity.
|
|
395
|
+
if (!this.record.pending)
|
|
396
|
+
this.record.snapshot = snapshot;
|
|
397
|
+
const capture = { snapshot, text: result.text };
|
|
398
|
+
if (!options.history && !options.joined && !options.ansi)
|
|
399
|
+
this.inputCapture = capture;
|
|
400
|
+
return capture;
|
|
401
|
+
}
|
|
402
|
+
async capture(options) {
|
|
403
|
+
return (await this.captureCurrent(options)).text;
|
|
404
|
+
}
|
|
405
|
+
// Match TmuxManager's ordinary capture-pane -p. VT replay serialization is not detector-ready text.
|
|
406
|
+
capturePane() { return this.capture({}); }
|
|
407
|
+
capturePaneWithHistory(lines = 50) { return this.capture({ history: lines }); }
|
|
408
|
+
capturePaneJoined(lines = 0) { return this.capture({ history: lines, joined: true }); }
|
|
409
|
+
getWindowId() { return this.record.snapshot?.paneId ?? ""; }
|
|
410
|
+
/** A fresh authenticated endpoint proved the exact retained exit; retire an obsolete local relay without IO. */
|
|
411
|
+
async recordConfirmedExit(raw, current) {
|
|
412
|
+
await this.serialize(async () => {
|
|
413
|
+
current();
|
|
414
|
+
const snapshot = this.accept(raw);
|
|
415
|
+
if (snapshot.state !== "exited")
|
|
416
|
+
throw Error("Native exit evidence is not positive");
|
|
417
|
+
this.record.snapshot = snapshot;
|
|
418
|
+
this.lastObservation = snapshot;
|
|
419
|
+
this.save();
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
observedSnapshot() { return this.lastObservation ? structuredClone(this.lastObservation) : this.ownedSnapshot(); }
|
|
423
|
+
ownedSnapshot() { return this.record.snapshot ? structuredClone(this.record.snapshot) : null; }
|
|
424
|
+
}
|
|
425
|
+
/** Passive output source. A disconnected link never proves idle; a reconnect resets all observation fences. */
|
|
426
|
+
export class RuntimePaneObservation extends EventEmitter {
|
|
427
|
+
endpoint;
|
|
428
|
+
owned;
|
|
429
|
+
idleMs;
|
|
430
|
+
remove;
|
|
431
|
+
resetAt = Date.now();
|
|
432
|
+
last = new Map();
|
|
433
|
+
windows = new Set();
|
|
434
|
+
wasOnline = false;
|
|
435
|
+
sweep;
|
|
436
|
+
constructor(endpoint, owned, idleMs = 300) {
|
|
437
|
+
super();
|
|
438
|
+
this.endpoint = endpoint;
|
|
439
|
+
this.owned = owned;
|
|
440
|
+
this.idleMs = idleMs;
|
|
441
|
+
}
|
|
442
|
+
start() {
|
|
443
|
+
if (this.remove)
|
|
444
|
+
return;
|
|
445
|
+
this.wasOnline = this.endpoint.online();
|
|
446
|
+
this.remove = this.endpoint.subscribe(event => {
|
|
447
|
+
if (event.machineId !== this.endpoint.machineId)
|
|
448
|
+
return;
|
|
449
|
+
if (event.type === "machine") {
|
|
450
|
+
const online = this.endpoint.online();
|
|
451
|
+
if (online !== this.wasOnline) {
|
|
452
|
+
this.wasOnline = online;
|
|
453
|
+
this.resetAt = Date.now();
|
|
454
|
+
this.last.clear();
|
|
455
|
+
}
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
if (event.type !== "pane" || !event.pane || !this.windows.has(event.pane.paneId))
|
|
459
|
+
return;
|
|
460
|
+
const expected = this.owned(event.pane.paneId);
|
|
461
|
+
if (!expected || expected.launchId !== event.pane.launchId || expected.hostBootId !== event.pane.hostBootId || expected.agentId !== event.pane.agentId)
|
|
462
|
+
return;
|
|
463
|
+
const at = Date.now();
|
|
464
|
+
this.last.set(event.pane.paneId, at);
|
|
465
|
+
this.emit(`output:${event.pane.paneId}`, { paneId: event.pane.paneId, windowId: event.pane.paneId, at });
|
|
466
|
+
});
|
|
467
|
+
// The ordinary daemon needs a second quiet capture (and recovery after a transient failed capture), even if
|
|
468
|
+
// the CLI emits no further output. Like the tmux control client's sweep, this requests reads only: it is not
|
|
469
|
+
// output or positive idle evidence, and a disconnected endpoint must remain blind.
|
|
470
|
+
this.sweep = setInterval(() => { if (!this.isObservationBlind())
|
|
471
|
+
this.emit("safety_sweep"); }, 5_000);
|
|
472
|
+
this.sweep.unref?.();
|
|
473
|
+
}
|
|
474
|
+
stop() { if (this.sweep)
|
|
475
|
+
clearInterval(this.sweep); this.sweep = undefined; this.remove?.(); this.remove = undefined; this.last.clear(); this.windows.clear(); }
|
|
476
|
+
async registerWindow(id) { this.windows.add(id); this.resetAt = Date.now(); }
|
|
477
|
+
unregisterWindow(id) { this.windows.delete(id); this.last.delete(id); }
|
|
478
|
+
getObservationResetAt() { return this.resetAt; }
|
|
479
|
+
isObservationBlind() { return !this.remove || !this.endpoint.online(); }
|
|
480
|
+
isIdle(id) { const last = this.last.get(id); return !this.isObservationBlind() && last !== undefined && Date.now() - last >= this.idleMs; }
|
|
481
|
+
getLastOutputAt(id) { return this.isObservationBlind() ? undefined : this.last.get(id); }
|
|
482
|
+
hasOutputSince(id, ts) { return !this.isObservationBlind() && (this.last.get(id) ?? 0) > ts; }
|
|
483
|
+
async wait(predicate, timeout = 10_000, abandoned) {
|
|
484
|
+
const end = performance.now() + timeout;
|
|
485
|
+
while (performance.now() < end) {
|
|
486
|
+
if (abandoned?.() || this.isObservationBlind())
|
|
487
|
+
return false;
|
|
488
|
+
if (predicate())
|
|
489
|
+
return true;
|
|
490
|
+
await new Promise(done => setTimeout(done, 25));
|
|
491
|
+
}
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
waitForIdle(id, timeout) { return this.wait(() => this.isIdle(id), timeout); }
|
|
495
|
+
waitUntilIdle(id, timeout, abandoned) { return this.wait(() => this.isIdle(id), timeout, abandoned); }
|
|
496
|
+
waitForOutput(id, timeout) { const start = Date.now(); return this.wait(() => this.hasOutputSince(id, start), timeout); }
|
|
497
|
+
}
|
|
498
|
+
/** One configured agent's host facade. Session/PID APIs never cross the machine boundary as local process evidence. */
|
|
499
|
+
export class RuntimePaneHostPort {
|
|
500
|
+
pane;
|
|
501
|
+
endpoint;
|
|
502
|
+
executionHost = "remote";
|
|
503
|
+
constructor(pane, endpoint) {
|
|
504
|
+
this.pane = pane;
|
|
505
|
+
this.endpoint = endpoint;
|
|
506
|
+
}
|
|
507
|
+
bind(_session, id) {
|
|
508
|
+
if (id && id !== this.pane.getWindowId())
|
|
509
|
+
throw Error("Pane selector is outside this agent's launch");
|
|
510
|
+
return this.pane;
|
|
511
|
+
}
|
|
512
|
+
async ensureSession() { if (!this.endpoint.online())
|
|
513
|
+
throw Error("Native pane machine is offline"); }
|
|
514
|
+
async sessionExists() { return this.endpoint.online(); }
|
|
515
|
+
async sessionExistsStrict() { if (!this.endpoint.online())
|
|
516
|
+
throw Error("Native pane machine observation is unknown"); return true; }
|
|
517
|
+
async killSession() { await this.pane.killWindow(); }
|
|
518
|
+
async getServerPid() { return null; }
|
|
519
|
+
async listWindows() {
|
|
520
|
+
const owned = this.pane.ownedSnapshot();
|
|
521
|
+
if (!owned)
|
|
522
|
+
return [];
|
|
523
|
+
const result = await this.endpoint.call({ action: "list" });
|
|
524
|
+
if (!Array.isArray(result?.panes))
|
|
525
|
+
throw Error("Invalid pane list");
|
|
526
|
+
const matched = result.panes.map(validateRuntimePaneSnapshot).find(row => row.paneId === owned.paneId);
|
|
527
|
+
if (!matched)
|
|
528
|
+
throw Error("Owned pane is missing; replacement requires reconciliation");
|
|
529
|
+
if (matched.agentId !== owned.agentId || matched.launchId !== owned.launchId || matched.hostBootId !== owned.hostBootId || matched.state === "unknown")
|
|
530
|
+
throw Error("Owned pane identity is unconfirmed");
|
|
531
|
+
return matched.state === "exited" ? [] : [{ id: matched.paneId, name: matched.instance }];
|
|
532
|
+
}
|
|
533
|
+
listWindowsStrict() { return this.listWindows(); }
|
|
534
|
+
async getPanePid() { return null; }
|
|
535
|
+
async listPanePids() { return []; }
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=runtime-pane-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pane-port.js","sourceRoot":"","sources":["../src/runtime-pane-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PaneHostDescriptor {
|
|
2
|
+
version: 1;
|
|
3
|
+
scope: string;
|
|
4
|
+
hostBootId: string;
|
|
5
|
+
pid: number;
|
|
6
|
+
port: number;
|
|
7
|
+
token: string;
|
|
8
|
+
systemBootId?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function protectPaneDirectory(directory: string): Promise<void>;
|
|
11
|
+
export declare function readPaneHostDescriptor(directory: string, scope: string): PaneHostDescriptor | null;
|
|
12
|
+
export declare function savePaneHostDescriptor(directory: string, value: PaneHostDescriptor): void;
|
|
13
|
+
/** Called under the host's profile lock, after its listener has closed. Never remove another boot's discovery. */
|
|
14
|
+
export declare function removePaneHostDescriptor(directory: string, value: PaneHostDescriptor): void;
|