@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,463 @@
|
|
|
1
|
+
/** Named Windows CLI conversations; independent of Linux/tmux instances. Local administrator only. */
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
6
|
+
import { maxAgentsPerMachine } from "./runtime-switches.js";
|
|
7
|
+
import { getAgendHome } from "./paths.js";
|
|
8
|
+
import { validWindowsAgentId, validWindowsDirectory } from "./windows-cli-worker.js";
|
|
9
|
+
import { validNativeSessionId } from "./windows-cli-providers.js";
|
|
10
|
+
import { validateRuntimePaneSnapshot } from "./runtime-pane-protocol.js";
|
|
11
|
+
import { windowsBridgeFor } from "./windows-cli.js";
|
|
12
|
+
import { isNativeProviderId, nativeProvider, validateNativeModel } from "./windows-cli-providers.js";
|
|
13
|
+
/**
|
|
14
|
+
* M-2297: the per-PC agent limit is reached. The message keeps its original first sentence (callers match on it) and
|
|
15
|
+
* names the limit and what holds the slots; `limit` and `holders` carry the same for a localised view.
|
|
16
|
+
*/
|
|
17
|
+
export class MachineSlotLimitError extends Error {
|
|
18
|
+
limit;
|
|
19
|
+
holders;
|
|
20
|
+
constructor(limit, holders) {
|
|
21
|
+
super(`This Windows computer has reached its concurrent agent limit (${limit}): ${holders.map(h => h.unknown ? `${h.name} (outcome unknown — check and unlock it)` : h.name).join(", ")}`);
|
|
22
|
+
this.limit = limit;
|
|
23
|
+
this.holders = holders;
|
|
24
|
+
this.name = "MachineSlotLimitError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const idPattern = /^[a-f0-9-]{36}$/i;
|
|
28
|
+
const shortText = (value, limit) => typeof value === "string" && value.length <= limit && !value.includes("\0");
|
|
29
|
+
export class WindowsAgents {
|
|
30
|
+
bridge;
|
|
31
|
+
data = { version: 1, agents: [], requests: {} };
|
|
32
|
+
file;
|
|
33
|
+
listeners = new Set();
|
|
34
|
+
launching = new Set();
|
|
35
|
+
constructor(home, bridge) {
|
|
36
|
+
this.bridge = bridge;
|
|
37
|
+
this.file = join(home, "windows-agents.json");
|
|
38
|
+
if (existsSync(this.file)) {
|
|
39
|
+
if (statSync(this.file).size > 20 * 1024 * 1024)
|
|
40
|
+
throw new Error("Windows agent store is too large");
|
|
41
|
+
const value = JSON.parse(readFileSync(this.file, "utf8"));
|
|
42
|
+
if (value.version !== 1 || !Array.isArray(value.agents) || !value.requests || typeof value.requests !== "object")
|
|
43
|
+
throw new Error("Invalid Windows agent store");
|
|
44
|
+
this.data = value;
|
|
45
|
+
// Version 1 profiles created before provider selection were all Codex conversations.
|
|
46
|
+
for (const agent of this.data.agents) {
|
|
47
|
+
agent.cli ??= "codex";
|
|
48
|
+
if (!isNativeProviderId(agent.cli))
|
|
49
|
+
throw new Error("Invalid Windows agent CLI");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
change(fn) {
|
|
54
|
+
const before = JSON.stringify(this.data);
|
|
55
|
+
try {
|
|
56
|
+
const result = fn();
|
|
57
|
+
const body = JSON.stringify(this.data);
|
|
58
|
+
if (Buffer.byteLength(body) > 20 * 1024 * 1024)
|
|
59
|
+
throw new Error("Windows agent history limit reached");
|
|
60
|
+
mkdirSync(dirname(this.file), { recursive: true });
|
|
61
|
+
atomicWriteFileSync(this.file, body, { mode: 0o600 });
|
|
62
|
+
for (const listener of [...this.listeners]) {
|
|
63
|
+
try {
|
|
64
|
+
listener();
|
|
65
|
+
}
|
|
66
|
+
catch { /* Observers cannot roll back committed data. */ }
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
this.data = JSON.parse(before);
|
|
72
|
+
throw e;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
find(id) {
|
|
76
|
+
const agent = this.data.agents.find(a => a.id === id);
|
|
77
|
+
if (!agent)
|
|
78
|
+
throw new Error("Windows agent not found");
|
|
79
|
+
return agent;
|
|
80
|
+
}
|
|
81
|
+
useExecutor(executor) { this.bridge = executor; }
|
|
82
|
+
get(id) {
|
|
83
|
+
// A paired runtime can finish while the coordinator is restarting. Reconcile its durable result before
|
|
84
|
+
// interpreting a saved active turn as an orphan; provider session IDs still belong to the same machine.
|
|
85
|
+
const saved = this.find(id), recovered = saved.activeId ? this.bridge.get(saved.activeId) : null;
|
|
86
|
+
if (saved.activeId && !saved.paneLaunchId && recovered?.finishedAt && recovered.outcomeConfirmed === true) {
|
|
87
|
+
this.change(() => {
|
|
88
|
+
const turn = saved.turns.find(row => row.id === saved.activeId);
|
|
89
|
+
if (turn)
|
|
90
|
+
Object.assign(turn, { output: recovered.output, status: recovered.status, finishedAt: recovered.finishedAt, error: recovered.error });
|
|
91
|
+
if (recovered.threadId)
|
|
92
|
+
saved.threadId = recovered.threadId;
|
|
93
|
+
delete saved.activeId;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
const agent = structuredClone(this.find(id));
|
|
97
|
+
const task = agent.activeId ? this.bridge.get(agent.activeId) : null;
|
|
98
|
+
const blocked = !!agent.activeId && ((!task && !this.launching.has(agent.activeId)) || task?.outcomeConfirmed === false || !!task?.finishedAt);
|
|
99
|
+
const turn = agent.turns.find(t => t.id === agent.activeId);
|
|
100
|
+
if (turn && task)
|
|
101
|
+
Object.assign(turn, { status: task.status, output: task.output, error: task.error });
|
|
102
|
+
if (turn && blocked) {
|
|
103
|
+
turn.status = "interrupted";
|
|
104
|
+
turn.error = "Windows execution outcome is unknown. Check that its Windows processes stopped before unlocking this agent.";
|
|
105
|
+
}
|
|
106
|
+
return { ...agent, blocked };
|
|
107
|
+
}
|
|
108
|
+
list() {
|
|
109
|
+
return this.data.agents.map(a => { const { turns: _turns, instructions: _instructions, ...row } = this.get(a.id); return row; });
|
|
110
|
+
}
|
|
111
|
+
subscribe(listener) { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; }
|
|
112
|
+
/** Synchronous profile reservation is shared by exec and pane starts. Unknown owners still occupy a slot. */
|
|
113
|
+
admitMachineSlot(agent) {
|
|
114
|
+
const machine = agent.machineId?.toLowerCase();
|
|
115
|
+
const holders = this.data.agents.filter(other => other.id !== agent.id && other.machineId?.toLowerCase() === machine && !!other.activeId);
|
|
116
|
+
const limit = maxAgentsPerMachine();
|
|
117
|
+
if (holders.length >= limit) {
|
|
118
|
+
// M-2297: say which agents hold the slots, by the name a person gave them (the instance name is windows-<uuid>).
|
|
119
|
+
// "Unknown outcome" is the exec turn's lost-task state (`blocked`); a pane holder has no exec task, so that flag
|
|
120
|
+
// says nothing about it and it is never marked from it (#3003 acceptance: every healthy pane showed as unknown).
|
|
121
|
+
throw new MachineSlotLimitError(limit, holders.map(other => ({ name: other.name || other.fleet_instance || other.id,
|
|
122
|
+
unknown: !other.paneLaunchId && this.get(other.id).blocked })));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Metadata reservation before a pane can spawn. Exec and persistent adapters can never own one profile together. */
|
|
126
|
+
reservePane(id, launchId) {
|
|
127
|
+
const agent = this.find(id);
|
|
128
|
+
if (!validWindowsAgentId(launchId) || agent.paused || agent.activeId && agent.activeId !== launchId
|
|
129
|
+
|| agent.paneLaunchId && agent.paneLaunchId !== launchId || agent.activeId === launchId && agent.paneLaunchId !== launchId)
|
|
130
|
+
throw Error("Windows profile has another active or unconfirmed owner");
|
|
131
|
+
if (!agent.activeId)
|
|
132
|
+
this.admitMachineSlot(agent);
|
|
133
|
+
if (agent.paneLaunchId !== launchId || agent.activeId !== launchId)
|
|
134
|
+
this.change(() => { agent.activeId = launchId; agent.paneLaunchId = launchId; });
|
|
135
|
+
return structuredClone(agent);
|
|
136
|
+
}
|
|
137
|
+
setPaneRecovery(id, recovery) {
|
|
138
|
+
const agent = this.find(id);
|
|
139
|
+
if (JSON.stringify(agent.paneRecovery) === JSON.stringify(recovery))
|
|
140
|
+
return;
|
|
141
|
+
this.change(() => { if (recovery) {
|
|
142
|
+
agent.paneRecovery = structuredClone(recovery);
|
|
143
|
+
agent.paneRecoveryAt = Date.now();
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
delete agent.paneRecovery;
|
|
147
|
+
delete agent.paneRecoveryAt;
|
|
148
|
+
} });
|
|
149
|
+
}
|
|
150
|
+
pinPaneSession(id, launchId, sessionId) {
|
|
151
|
+
const agent = this.find(id);
|
|
152
|
+
if (agent.activeId !== launchId || agent.paneLaunchId !== launchId || !validNativeSessionId(agent.cli, sessionId)
|
|
153
|
+
|| agent.threadId && agent.threadId !== sessionId)
|
|
154
|
+
throw Error("Windows pane conversation differs from its reserved profile");
|
|
155
|
+
if (agent.threadId !== sessionId)
|
|
156
|
+
this.change(() => { agent.threadId = sessionId; });
|
|
157
|
+
}
|
|
158
|
+
/** Only a durable fresh-session intent plus an exact positive exit can replace a pane pin. No provider data is removed. */
|
|
159
|
+
replacePaneSession(id, raw, nextSessionId) {
|
|
160
|
+
const previous = validateRuntimePaneSnapshot(raw), agent = this.find(id);
|
|
161
|
+
if (agent.cli !== "claude-code" || agent.activeId || agent.paneLaunchId || previous.state !== "exited"
|
|
162
|
+
|| previous.agentId !== id || previous.instance !== agent.fleet_instance || !previous.sessionId
|
|
163
|
+
|| !validNativeSessionId("claude-code", nextSessionId) || previous.sessionId === nextSessionId
|
|
164
|
+
|| agent.threadId !== previous.sessionId && agent.threadId !== nextSessionId)
|
|
165
|
+
throw Error("Fresh pane conversation scope differs");
|
|
166
|
+
if (agent.threadId !== nextSessionId)
|
|
167
|
+
this.change(() => { agent.threadId = nextSessionId; delete agent.paneRecovery; delete agent.paneRecoveryAt; });
|
|
168
|
+
}
|
|
169
|
+
/** The durable Codex fresh intent is committed first; only its exact observed launch may replace the old pin. */
|
|
170
|
+
pinFreshCodexSession(id, rawPrevious, rawObserved) {
|
|
171
|
+
const previous = validateRuntimePaneSnapshot(rawPrevious), observed = validateRuntimePaneSnapshot(rawObserved), agent = this.find(id);
|
|
172
|
+
if (agent.cli !== "codex" || previous.state !== "exited" || previous.noLaunch
|
|
173
|
+
|| previous.agentId !== id || previous.instance !== agent.fleet_instance || observed.agentId !== id || observed.instance !== previous.instance
|
|
174
|
+
|| !["running", "exited"].includes(observed.state) || observed.noLaunch || !observed.sessionId || !validNativeSessionId("codex", observed.sessionId)
|
|
175
|
+
|| observed.launchId === previous.launchId || observed.sessionId === previous.sessionId
|
|
176
|
+
|| agent.activeId !== observed.launchId || agent.paneLaunchId !== observed.launchId
|
|
177
|
+
|| agent.threadId !== previous.sessionId && agent.threadId !== observed.sessionId)
|
|
178
|
+
throw Error("Fresh Codex conversation scope differs");
|
|
179
|
+
if (agent.threadId !== observed.sessionId)
|
|
180
|
+
this.change(() => { agent.threadId = observed.sessionId; delete agent.paneRecovery; delete agent.paneRecoveryAt; });
|
|
181
|
+
}
|
|
182
|
+
/** A fresh Codex launch can exit before reporting any UUID. Release only that positive exit; retain the old pin. */
|
|
183
|
+
releaseUnpinnedCodexPane(id, rawPrevious, rawExit) {
|
|
184
|
+
const previous = validateRuntimePaneSnapshot(rawPrevious), exit = validateRuntimePaneSnapshot(rawExit), agent = this.find(id);
|
|
185
|
+
if (agent.cli !== "codex" || previous.state !== "exited" || previous.noLaunch || !previous.sessionId || agent.threadId !== previous.sessionId
|
|
186
|
+
|| previous.agentId !== id || previous.instance !== agent.fleet_instance || exit.agentId !== id || exit.instance !== previous.instance
|
|
187
|
+
|| exit.state !== "exited" || exit.noLaunch || exit.sessionId !== undefined || exit.launchId === previous.launchId
|
|
188
|
+
|| agent.activeId !== exit.launchId || agent.paneLaunchId !== exit.launchId)
|
|
189
|
+
throw Error("Unpinned Codex exit scope differs");
|
|
190
|
+
this.change(() => { delete agent.activeId; delete agent.paneLaunchId; });
|
|
191
|
+
}
|
|
192
|
+
/** Only an exact positive owned-exit snapshot releases the old exec-compatible reservation. */
|
|
193
|
+
releasePane(id, raw) {
|
|
194
|
+
const snapshot = validateRuntimePaneSnapshot(raw), agent = this.find(id);
|
|
195
|
+
if (snapshot.agentId !== id || snapshot.state !== "exited" || agent.activeId !== snapshot.launchId || agent.paneLaunchId !== snapshot.launchId
|
|
196
|
+
|| agent.fleet_instance && agent.fleet_instance !== snapshot.instance || agent.threadId && snapshot.sessionId !== undefined && snapshot.sessionId !== agent.threadId)
|
|
197
|
+
throw Error("Windows pane exit identity is unconfirmed");
|
|
198
|
+
this.change(() => { delete agent.activeId; delete agent.paneLaunchId; });
|
|
199
|
+
}
|
|
200
|
+
bindInstance(id, name) {
|
|
201
|
+
if (!name || name.length > 128 || /[\\/\x00-\x1f\x7f]/.test(name) || name.includes(".."))
|
|
202
|
+
throw new Error("Invalid Fleet instance name");
|
|
203
|
+
const agent = this.find(id);
|
|
204
|
+
if (agent.fleet_instance === name)
|
|
205
|
+
return;
|
|
206
|
+
this.change(() => { agent.fleet_instance = name; });
|
|
207
|
+
}
|
|
208
|
+
/** Validate without changing the retained launch or profile (used before an explicit cold-settings stop). */
|
|
209
|
+
previewUpdate(id, patch) {
|
|
210
|
+
const current = this.find(id);
|
|
211
|
+
if (!patch || typeof patch !== "object" || Array.isArray(patch) || Object.keys(patch).some(key => !["name", "cwd", "description", "instructions", "sandbox", "cli", "model"].includes(key)))
|
|
212
|
+
throw new Error("Unknown Windows agent field");
|
|
213
|
+
const next = structuredClone(current);
|
|
214
|
+
if (Object.hasOwn(patch, "name")) {
|
|
215
|
+
if (!shortText(patch.name, 64) || !patch.name.trim() || /[\x00-\x1f\x7f]/.test(patch.name))
|
|
216
|
+
throw new Error("Enter a Windows agent name (1–64 characters)");
|
|
217
|
+
next.name = patch.name.trim();
|
|
218
|
+
if (this.data.agents.some(agent => agent.id !== id && agent.name.toLowerCase() === next.name.toLowerCase()))
|
|
219
|
+
throw new Error("A Windows agent already uses that name");
|
|
220
|
+
}
|
|
221
|
+
if (Object.hasOwn(patch, "cwd")) {
|
|
222
|
+
if (!validWindowsDirectory(patch.cwd))
|
|
223
|
+
throw new Error("Enter an absolute Windows working directory");
|
|
224
|
+
next.cwd = patch.cwd;
|
|
225
|
+
}
|
|
226
|
+
if (Object.hasOwn(patch, "cli")) {
|
|
227
|
+
if (!isNativeProviderId(patch.cli))
|
|
228
|
+
throw new Error("Choose a supported Windows CLI");
|
|
229
|
+
next.cli = patch.cli;
|
|
230
|
+
}
|
|
231
|
+
if (current.threadId && (next.cli !== current.cli || next.cwd !== current.cwd))
|
|
232
|
+
throw new Error("Start a new conversation before changing this agent's CLI or working directory");
|
|
233
|
+
if (Object.hasOwn(patch, "description")) {
|
|
234
|
+
if (!shortText(patch.description, 512))
|
|
235
|
+
throw new Error("Agent description is too long");
|
|
236
|
+
next.description = patch.description;
|
|
237
|
+
}
|
|
238
|
+
if (Object.hasOwn(patch, "instructions")) {
|
|
239
|
+
if (!shortText(patch.instructions, 8000))
|
|
240
|
+
throw new Error("Agent instructions are too long");
|
|
241
|
+
next.instructions = patch.instructions;
|
|
242
|
+
}
|
|
243
|
+
if (Object.hasOwn(patch, "model")) {
|
|
244
|
+
const model = validateNativeModel(patch.model);
|
|
245
|
+
if (model)
|
|
246
|
+
next.model = model;
|
|
247
|
+
else
|
|
248
|
+
delete next.model;
|
|
249
|
+
}
|
|
250
|
+
if (Object.hasOwn(patch, "sandbox")) {
|
|
251
|
+
if (patch.sandbox !== "read-only" && patch.sandbox !== "workspace-write")
|
|
252
|
+
throw new Error("Choose a file access mode");
|
|
253
|
+
next.sandbox = patch.sandbox;
|
|
254
|
+
}
|
|
255
|
+
const provider = nativeProvider(next.cli);
|
|
256
|
+
if (!provider.supports.execution || !provider.supports.resume)
|
|
257
|
+
throw new Error(provider.reason || "This CLI cannot create Windows conversations yet");
|
|
258
|
+
if (next.sandbox === "read-only" && !provider.readOnlySupport)
|
|
259
|
+
throw new Error(`${provider.name} does not support read-only execution`);
|
|
260
|
+
return next;
|
|
261
|
+
}
|
|
262
|
+
update(id, patch, authorized = () => true) {
|
|
263
|
+
const current = this.find(id), next = this.previewUpdate(id, patch);
|
|
264
|
+
// Only identity metadata is hot. A retained/unknown pane still fences every effective launch setting.
|
|
265
|
+
const cold = ["cwd", "cli", "instructions", "sandbox", "model"].some(key => (next[key] ?? "") !== (current[key] ?? ""));
|
|
266
|
+
if (current.activeId && (!current.paneLaunchId || cold))
|
|
267
|
+
throw new Error("Wait for the Windows agent to finish before changing its settings");
|
|
268
|
+
if (!authorized())
|
|
269
|
+
throw new Error("Authorization expired before changing the Windows agent");
|
|
270
|
+
if (JSON.stringify(next) === JSON.stringify(current))
|
|
271
|
+
return structuredClone(current);
|
|
272
|
+
this.change(() => { this.data.agents[this.data.agents.findIndex(agent => agent.id === id)] = next; });
|
|
273
|
+
return structuredClone(next);
|
|
274
|
+
}
|
|
275
|
+
remove(id, authorized = () => true) {
|
|
276
|
+
const agent = this.find(id);
|
|
277
|
+
if (agent.activeId)
|
|
278
|
+
throw new Error("Cancel and finish the Windows agent before removing it");
|
|
279
|
+
if (!authorized())
|
|
280
|
+
throw new Error("Authorization expired before removing the Windows agent");
|
|
281
|
+
const snapshot = structuredClone(agent);
|
|
282
|
+
this.change(() => { this.data.agents = this.data.agents.filter(row => row.id !== id); });
|
|
283
|
+
// Workspaces, provider sessions and request tombstones survive removal.
|
|
284
|
+
return snapshot;
|
|
285
|
+
}
|
|
286
|
+
restore(snapshot) {
|
|
287
|
+
if (this.data.agents.some(row => row.id === snapshot.id || row.name.toLowerCase() === snapshot.name.toLowerCase()))
|
|
288
|
+
throw new Error("Cannot restore a Windows agent over an existing agent");
|
|
289
|
+
this.change(() => { this.data.agents.push(structuredClone(snapshot)); });
|
|
290
|
+
}
|
|
291
|
+
setPaused(id, paused) {
|
|
292
|
+
const agent = this.find(id);
|
|
293
|
+
if (typeof paused !== "boolean")
|
|
294
|
+
throw new Error("Paused must be a boolean");
|
|
295
|
+
if (agent.paused === paused || !agent.paused && !paused)
|
|
296
|
+
return structuredClone(agent);
|
|
297
|
+
this.change(() => { agent.paused = paused; });
|
|
298
|
+
return structuredClone(agent);
|
|
299
|
+
}
|
|
300
|
+
cancel(id) {
|
|
301
|
+
const agent = this.find(id);
|
|
302
|
+
if (agent.paneLaunchId)
|
|
303
|
+
throw new Error("Persistent panes are cancelled through the Fleet daemon, never the exec worker");
|
|
304
|
+
return agent.activeId ? this.bridge.cancel(agent.activeId) : null;
|
|
305
|
+
}
|
|
306
|
+
async create(input, authorized = () => true) {
|
|
307
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
308
|
+
throw new Error("Agent must be an object");
|
|
309
|
+
const v = input;
|
|
310
|
+
if (Object.keys(v).some(k => !["name", "cwd", "description", "instructions", "sandbox", "cli", "model", "machineId"].includes(k)))
|
|
311
|
+
throw new Error("Unknown Windows agent field");
|
|
312
|
+
if (v.machineId !== undefined && (typeof v.machineId !== "string" || !/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(v.machineId)))
|
|
313
|
+
throw new Error("Choose a paired runtime machine");
|
|
314
|
+
const cli = v.cli ?? "codex";
|
|
315
|
+
if (!isNativeProviderId(cli))
|
|
316
|
+
throw new Error("Choose a supported Windows CLI");
|
|
317
|
+
const provider = nativeProvider(cli), model = validateNativeModel(v.model);
|
|
318
|
+
if (!provider.supports.execution || !provider.supports.resume)
|
|
319
|
+
throw new Error(provider.reason || "This CLI cannot create Windows conversations yet");
|
|
320
|
+
if (v.sandbox === "read-only" && !provider.readOnlySupport)
|
|
321
|
+
throw new Error(`${provider.name} does not support read-only execution; choose native CLI permissions`);
|
|
322
|
+
if (!shortText(v.name, 64) || !v.name.trim() || /[\x00-\x1f\x7f]/.test(v.name))
|
|
323
|
+
throw new Error("Enter a Windows agent name (1–64 characters)");
|
|
324
|
+
const suppliedCwd = v.cwd === undefined ? "" : typeof v.cwd === "string" ? v.cwd.trim() : null;
|
|
325
|
+
if (suppliedCwd === null || suppliedCwd && !validWindowsDirectory(suppliedCwd))
|
|
326
|
+
throw new Error("Enter an absolute Windows working directory or leave it empty");
|
|
327
|
+
if (v.sandbox !== "read-only" && v.sandbox !== "workspace-write")
|
|
328
|
+
throw new Error("Choose a file access mode");
|
|
329
|
+
if (!shortText(v.description ?? "", 512) || !shortText(v.instructions ?? "", 8000))
|
|
330
|
+
throw new Error("Agent description or instructions are too long");
|
|
331
|
+
if (this.data.agents.length >= 16)
|
|
332
|
+
throw new Error("This preview supports at most 16 Windows agents");
|
|
333
|
+
if (this.data.agents.some(a => a.name.toLowerCase() === v.name.trim().toLowerCase()))
|
|
334
|
+
throw new Error("A Windows agent already uses that name");
|
|
335
|
+
if (!authorized())
|
|
336
|
+
throw new Error("Authorization expired before creating the Windows agent");
|
|
337
|
+
const id = randomUUID(), name = v.name.trim();
|
|
338
|
+
const machineId = v.machineId;
|
|
339
|
+
// Managed workspaces are created by the selected machine; supplied paths are checked again before execution.
|
|
340
|
+
const cwd = suppliedCwd || await (machineId ? this.bridge.prepareWorkspace(id, authorized, machineId) : this.bridge.prepareWorkspace(id, authorized));
|
|
341
|
+
if (!validWindowsDirectory(cwd))
|
|
342
|
+
throw new Error("Could not create a valid Windows workspace");
|
|
343
|
+
const agent = { id, name, cli, ...(model ? { model } : {}), ...(machineId ? { machineId } : {}), cwd, sandbox: v.sandbox, description: String(v.description ?? ""), instructions: String(v.instructions ?? ""), createdAt: Date.now(), turns: [] };
|
|
344
|
+
this.change(() => {
|
|
345
|
+
if (!authorized())
|
|
346
|
+
throw new Error("Authorization expired while creating the Windows agent");
|
|
347
|
+
// Another creation may have completed while native Windows prepared this workspace.
|
|
348
|
+
if (this.data.agents.length >= 16)
|
|
349
|
+
throw new Error("This preview supports at most 16 Windows agents");
|
|
350
|
+
if (this.data.agents.some(a => a.name.toLowerCase() === name.toLowerCase()))
|
|
351
|
+
throw new Error("A Windows agent already uses that name");
|
|
352
|
+
this.data.agents.push(agent);
|
|
353
|
+
});
|
|
354
|
+
return structuredClone(agent);
|
|
355
|
+
}
|
|
356
|
+
send(id, value, authorized, options = {}) {
|
|
357
|
+
const agent = this.find(id);
|
|
358
|
+
const v = value;
|
|
359
|
+
if (!v || typeof v !== "object" || Array.isArray(v) || Object.keys(v).some(k => !["requestId", "prompt"].includes(k))
|
|
360
|
+
|| typeof v.requestId !== "string" || !idPattern.test(v.requestId) || !shortText(v.prompt, 8000) || !v.prompt.trim())
|
|
361
|
+
throw new Error("Invalid Windows agent message");
|
|
362
|
+
const requestId = v.requestId, prompt = v.prompt;
|
|
363
|
+
const digest = createHash("sha256").update(prompt).digest("hex");
|
|
364
|
+
const old = Object.hasOwn(this.data.requests, requestId) ? this.data.requests[requestId] : null;
|
|
365
|
+
if (old) {
|
|
366
|
+
if (old.agentId !== id || old.digest !== digest)
|
|
367
|
+
throw new Error("requestId belongs to a different message");
|
|
368
|
+
const turn = this.get(id).turns.find(t => t.id === requestId);
|
|
369
|
+
if (!turn)
|
|
370
|
+
throw new Error("This message was already sent; its visible history has expired");
|
|
371
|
+
return turn;
|
|
372
|
+
}
|
|
373
|
+
if (agent.paneLaunchId)
|
|
374
|
+
throw new Error("This Windows profile is reserved by its persistent pane");
|
|
375
|
+
if (agent.activeId)
|
|
376
|
+
throw new Error(this.get(id).blocked ? "Check Windows processes and unlock this agent before continuing" : "This Windows agent is still working");
|
|
377
|
+
if (agent.paused)
|
|
378
|
+
throw new Error("This Windows agent is paused; resume it before sending work");
|
|
379
|
+
if (Object.keys(this.data.requests).length >= 4096)
|
|
380
|
+
throw new Error("Windows agent preview message limit reached");
|
|
381
|
+
this.admitMachineSlot(agent);
|
|
382
|
+
this.launching.add(requestId);
|
|
383
|
+
try {
|
|
384
|
+
this.change(() => {
|
|
385
|
+
agent.activeId = requestId;
|
|
386
|
+
agent.turns.push({ id: requestId, prompt, output: "", status: "starting", startedAt: Date.now() });
|
|
387
|
+
if (agent.turns.length > 10)
|
|
388
|
+
agent.turns.shift();
|
|
389
|
+
this.data.requests[requestId] = { agentId: id, digest };
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
this.launching.delete(requestId);
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
396
|
+
try {
|
|
397
|
+
return this.bridge.start({ requestId, cli: agent.cli, ...(agent.model ? { model: agent.model } : {}), cwd: agent.cwd, sandbox: agent.sandbox,
|
|
398
|
+
prompt: agent.instructions ? `Agent instructions:\n${agent.instructions}\n\nUser task:\n${prompt}` : prompt }, authorized, {
|
|
399
|
+
resumeSessionId: agent.threadId,
|
|
400
|
+
...(agent.machineId ? { machineId: agent.machineId } : {}),
|
|
401
|
+
...(options.mcp ? { mcp: options.mcp } : {}), ...(options.context ? { context: options.context } : {}),
|
|
402
|
+
onSettled: task => {
|
|
403
|
+
try {
|
|
404
|
+
this.change(() => {
|
|
405
|
+
const current = this.find(id), turn = current.turns.find(t => t.id === requestId);
|
|
406
|
+
Object.assign(turn, { output: task.output, status: task.status, finishedAt: task.finishedAt, error: task.error });
|
|
407
|
+
if (task.threadId)
|
|
408
|
+
current.threadId = task.threadId;
|
|
409
|
+
if (task.status === "completed" && !current.threadId) {
|
|
410
|
+
turn.status = "failed";
|
|
411
|
+
turn.error = "CLI returned no conversation id. The next message will start a new conversation.";
|
|
412
|
+
}
|
|
413
|
+
if (task.outcomeConfirmed)
|
|
414
|
+
delete current.activeId;
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
options.onSettled?.({ ...task, status: "failed", error: `Could not save Windows conversation: ${error instanceof Error ? error.message : error}` });
|
|
419
|
+
throw error;
|
|
420
|
+
}
|
|
421
|
+
const saved = this.find(id).turns.find(turn => turn.id === requestId);
|
|
422
|
+
options.onSettled?.(saved?.status === "failed" ? { ...task, status: "failed", error: saved.error } : { ...task });
|
|
423
|
+
},
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
catch (e) {
|
|
427
|
+
this.change(() => { const current = this.find(id); delete current.activeId; current.turns = current.turns.filter(t => t.id !== requestId); delete this.data.requests[requestId]; });
|
|
428
|
+
throw e;
|
|
429
|
+
}
|
|
430
|
+
finally {
|
|
431
|
+
this.launching.delete(requestId);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
recover(id, confirmedStopped) {
|
|
435
|
+
const agent = this.find(id);
|
|
436
|
+
if (agent.paneLaunchId)
|
|
437
|
+
throw new Error("A persistent pane needs its exact owned exit receipt before unlocking");
|
|
438
|
+
if (confirmedStopped !== true || !agent.activeId || !this.get(id).blocked)
|
|
439
|
+
throw new Error("Confirm the disconnected Windows process has stopped before unlocking");
|
|
440
|
+
this.bridge.releaseUnknown(agent.activeId);
|
|
441
|
+
this.change(() => {
|
|
442
|
+
const turn = agent.turns.find(t => t.id === agent.activeId);
|
|
443
|
+
if (turn) {
|
|
444
|
+
turn.status = "interrupted";
|
|
445
|
+
turn.finishedAt = Date.now();
|
|
446
|
+
}
|
|
447
|
+
delete agent.activeId;
|
|
448
|
+
});
|
|
449
|
+
return this.get(id);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
const stores = new WeakMap();
|
|
453
|
+
export function windowsAgentsFor(owner, executor) {
|
|
454
|
+
let store = stores.get(owner);
|
|
455
|
+
if (!store) {
|
|
456
|
+
store = new WindowsAgents(owner.dataDir ?? getAgendHome(), executor ?? windowsBridgeFor(owner));
|
|
457
|
+
stores.set(owner, store);
|
|
458
|
+
}
|
|
459
|
+
else if (executor)
|
|
460
|
+
store.useExecutor(executor);
|
|
461
|
+
return store;
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=windows-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-agents.js","sourceRoot":"","sources":["../src/windows-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type { WebSessionStore } from "./web-session.js";
|
|
3
|
+
import { type WindowsCliBridge } from "./windows-cli.js";
|
|
4
|
+
import type { FleetWindowsRuntime } from "./fleet-windows-runtime.js";
|
|
5
|
+
export interface WindowsCliApiContext {
|
|
6
|
+
readonly webToken: string | null;
|
|
7
|
+
readonly webSessions?: WebSessionStore | null;
|
|
8
|
+
readonly dataDir?: string;
|
|
9
|
+
readonly fleetConfig?: {
|
|
10
|
+
instances: Record<string, {
|
|
11
|
+
runtime?: "wsl" | "windows";
|
|
12
|
+
native_agent_id?: string;
|
|
13
|
+
}>;
|
|
14
|
+
} | null;
|
|
15
|
+
nativeInstanceRuntime?(): FleetWindowsRuntime;
|
|
16
|
+
deliverToInstance?(name: string, payload: Record<string, unknown>, options?: {
|
|
17
|
+
stillCurrent?: () => boolean;
|
|
18
|
+
}): Promise<boolean | void>;
|
|
19
|
+
emitSseEvent?(event: string, data: unknown): void;
|
|
20
|
+
}
|
|
21
|
+
/** The ordinary dashboard gate AND an explicit admin-only, non-public boundary. Rechecked after every await. */
|
|
22
|
+
export declare function nativeCliAuthorization(req: IncomingMessage, url: URL, ctx: WindowsCliApiContext): boolean;
|
|
23
|
+
export declare function handleWindowsCliRequest(req: IncomingMessage, res: ServerResponse, url: URL, ctx: WindowsCliApiContext, bridge?: WindowsCliBridge): boolean;
|