parasor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +208 -0
- package/THIRD-PARTY-NOTICES.md +138 -0
- package/bin/parasor.mjs +3 -0
- package/node_modules/@parasor/shared/dist/client.d.ts +8 -0
- package/node_modules/@parasor/shared/dist/client.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/client.js +2 -0
- package/node_modules/@parasor/shared/dist/client.js.map +1 -0
- package/node_modules/@parasor/shared/dist/drops.d.ts +24 -0
- package/node_modules/@parasor/shared/dist/drops.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/drops.js +2 -0
- package/node_modules/@parasor/shared/dist/drops.js.map +1 -0
- package/node_modules/@parasor/shared/dist/file-uploads.d.ts +56 -0
- package/node_modules/@parasor/shared/dist/file-uploads.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/file-uploads.js +13 -0
- package/node_modules/@parasor/shared/dist/file-uploads.js.map +1 -0
- package/node_modules/@parasor/shared/dist/ide-commands.d.ts +8 -0
- package/node_modules/@parasor/shared/dist/ide-commands.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/ide-commands.js +59 -0
- package/node_modules/@parasor/shared/dist/ide-commands.js.map +1 -0
- package/node_modules/@parasor/shared/dist/pane-commands.d.ts +7 -0
- package/node_modules/@parasor/shared/dist/pane-commands.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/pane-commands.js +47 -0
- package/node_modules/@parasor/shared/dist/pane-commands.js.map +1 -0
- package/node_modules/@parasor/shared/dist/pane-model.d.ts +63 -0
- package/node_modules/@parasor/shared/dist/pane-model.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/pane-model.js +89 -0
- package/node_modules/@parasor/shared/dist/pane-model.js.map +1 -0
- package/node_modules/@parasor/shared/dist/panes.d.ts +33 -0
- package/node_modules/@parasor/shared/dist/panes.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/panes.js +2 -0
- package/node_modules/@parasor/shared/dist/panes.js.map +1 -0
- package/node_modules/@parasor/shared/dist/runtime.d.ts +180 -0
- package/node_modules/@parasor/shared/dist/runtime.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/runtime.js +2 -0
- package/node_modules/@parasor/shared/dist/runtime.js.map +1 -0
- package/node_modules/@parasor/shared/dist/state.d.ts +192 -0
- package/node_modules/@parasor/shared/dist/state.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/state.js +10 -0
- package/node_modules/@parasor/shared/dist/state.js.map +1 -0
- package/node_modules/@parasor/shared/dist/terminal.d.ts +191 -0
- package/node_modules/@parasor/shared/dist/terminal.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/terminal.js +174 -0
- package/node_modules/@parasor/shared/dist/terminal.js.map +1 -0
- package/node_modules/@parasor/shared/dist/types.d.ts +13 -0
- package/node_modules/@parasor/shared/dist/types.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/types.js +13 -0
- package/node_modules/@parasor/shared/dist/types.js.map +1 -0
- package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts +14 -0
- package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/worktree-local-files.js +41 -0
- package/node_modules/@parasor/shared/dist/worktree-local-files.js.map +1 -0
- package/node_modules/@parasor/shared/dist/ws-events.d.ts +152 -0
- package/node_modules/@parasor/shared/dist/ws-events.d.ts.map +1 -0
- package/node_modules/@parasor/shared/dist/ws-events.js +2 -0
- package/node_modules/@parasor/shared/dist/ws-events.js.map +1 -0
- package/node_modules/@parasor/shared/package.json +13 -0
- package/package.json +61 -0
- package/server/agent-detector/agent-state-store.d.ts +23 -0
- package/server/agent-detector/agent-state-store.d.ts.map +1 -0
- package/server/agent-detector/agent-state-store.js +110 -0
- package/server/agent-detector/agent-state-store.js.map +1 -0
- package/server/agent-detector/detector.d.ts +80 -0
- package/server/agent-detector/detector.d.ts.map +1 -0
- package/server/agent-detector/detector.js +219 -0
- package/server/agent-detector/detector.js.map +1 -0
- package/server/agent-detector/event-map.d.ts +25 -0
- package/server/agent-detector/event-map.d.ts.map +1 -0
- package/server/agent-detector/event-map.js +136 -0
- package/server/agent-detector/event-map.js.map +1 -0
- package/server/agent-detector/manual-agent-tracker.d.ts +19 -0
- package/server/agent-detector/manual-agent-tracker.d.ts.map +1 -0
- package/server/agent-detector/manual-agent-tracker.js +123 -0
- package/server/agent-detector/manual-agent-tracker.js.map +1 -0
- package/server/agent-detector/output-eligibility.d.ts +3 -0
- package/server/agent-detector/output-eligibility.d.ts.map +1 -0
- package/server/agent-detector/output-eligibility.js +39 -0
- package/server/agent-detector/output-eligibility.js.map +1 -0
- package/server/application/files/errors.d.ts +28 -0
- package/server/application/files/errors.d.ts.map +1 -0
- package/server/application/files/errors.js +55 -0
- package/server/application/files/errors.js.map +1 -0
- package/server/application/files/local-filesystem.d.ts +36 -0
- package/server/application/files/local-filesystem.d.ts.map +1 -0
- package/server/application/files/local-filesystem.js +171 -0
- package/server/application/files/local-filesystem.js.map +1 -0
- package/server/application/files/project-file-queries.d.ts +16 -0
- package/server/application/files/project-file-queries.d.ts.map +1 -0
- package/server/application/files/project-file-queries.js +126 -0
- package/server/application/files/project-file-queries.js.map +1 -0
- package/server/application/integrations/errors.d.ts +16 -0
- package/server/application/integrations/errors.d.ts.map +1 -0
- package/server/application/integrations/errors.js +31 -0
- package/server/application/integrations/errors.js.map +1 -0
- package/server/application/integrations/hook-notify.d.ts +32 -0
- package/server/application/integrations/hook-notify.d.ts.map +1 -0
- package/server/application/integrations/hook-notify.js +118 -0
- package/server/application/integrations/hook-notify.js.map +1 -0
- package/server/application/integrations/open-url.d.ts +11 -0
- package/server/application/integrations/open-url.d.ts.map +1 -0
- package/server/application/integrations/open-url.js +23 -0
- package/server/application/integrations/open-url.js.map +1 -0
- package/server/application/ports.d.ts +11 -0
- package/server/application/ports.d.ts.map +1 -0
- package/server/application/ports.js +2 -0
- package/server/application/ports.js.map +1 -0
- package/server/application/workspace/errors.d.ts +21 -0
- package/server/application/workspace/errors.d.ts.map +1 -0
- package/server/application/workspace/errors.js +21 -0
- package/server/application/workspace/errors.js.map +1 -0
- package/server/application/workspace/pane-commands.d.ts +47 -0
- package/server/application/workspace/pane-commands.d.ts.map +1 -0
- package/server/application/workspace/pane-commands.js +193 -0
- package/server/application/workspace/pane-commands.js.map +1 -0
- package/server/application/workspace/project-commands.d.ts +34 -0
- package/server/application/workspace/project-commands.d.ts.map +1 -0
- package/server/application/workspace/project-commands.js +81 -0
- package/server/application/workspace/project-commands.js.map +1 -0
- package/server/application/workspace/project-queries.d.ts +21 -0
- package/server/application/workspace/project-queries.d.ts.map +1 -0
- package/server/application/workspace/project-queries.js +216 -0
- package/server/application/workspace/project-queries.js.map +1 -0
- package/server/application/workspace/session-commands.d.ts +24 -0
- package/server/application/workspace/session-commands.d.ts.map +1 -0
- package/server/application/workspace/session-commands.js +123 -0
- package/server/application/workspace/session-commands.js.map +1 -0
- package/server/application/workspace/session-queries.d.ts +14 -0
- package/server/application/workspace/session-queries.d.ts.map +1 -0
- package/server/application/workspace/session-queries.js +47 -0
- package/server/application/workspace/session-queries.js.map +1 -0
- package/server/application/workspace/worktree-commands.d.ts +98 -0
- package/server/application/workspace/worktree-commands.d.ts.map +1 -0
- package/server/application/workspace/worktree-commands.js +323 -0
- package/server/application/workspace/worktree-commands.js.map +1 -0
- package/server/application/workspace/worktree-local-files.d.ts +11 -0
- package/server/application/workspace/worktree-local-files.d.ts.map +1 -0
- package/server/application/workspace/worktree-local-files.js +223 -0
- package/server/application/workspace/worktree-local-files.js.map +1 -0
- package/server/application/workspace/worktree-reconcile.d.ts +21 -0
- package/server/application/workspace/worktree-reconcile.d.ts.map +1 -0
- package/server/application/workspace/worktree-reconcile.js +49 -0
- package/server/application/workspace/worktree-reconcile.js.map +1 -0
- package/server/auth/origin.d.ts +17 -0
- package/server/auth/origin.d.ts.map +1 -0
- package/server/auth/origin.js +93 -0
- package/server/auth/origin.js.map +1 -0
- package/server/auth/pairing-token.d.ts +28 -0
- package/server/auth/pairing-token.d.ts.map +1 -0
- package/server/auth/pairing-token.js +46 -0
- package/server/auth/pairing-token.js.map +1 -0
- package/server/auth/token-exchange.d.ts +11 -0
- package/server/auth/token-exchange.d.ts.map +1 -0
- package/server/auth/token-exchange.js +27 -0
- package/server/auth/token-exchange.js.map +1 -0
- package/server/auth/token.d.ts +18 -0
- package/server/auth/token.d.ts.map +1 -0
- package/server/auth/token.js +115 -0
- package/server/auth/token.js.map +1 -0
- package/server/bootstrap/create-app-server.d.ts +49 -0
- package/server/bootstrap/create-app-server.d.ts.map +1 -0
- package/server/bootstrap/create-app-server.js +154 -0
- package/server/bootstrap/create-app-server.js.map +1 -0
- package/server/bootstrap/project-runtime.d.ts +29 -0
- package/server/bootstrap/project-runtime.d.ts.map +1 -0
- package/server/bootstrap/project-runtime.js +253 -0
- package/server/bootstrap/project-runtime.js.map +1 -0
- package/server/bootstrap/pty-env.d.ts +3 -0
- package/server/bootstrap/pty-env.d.ts.map +1 -0
- package/server/bootstrap/pty-env.js +15 -0
- package/server/bootstrap/pty-env.js.map +1 -0
- package/server/bootstrap/reconcile-state.d.ts +16 -0
- package/server/bootstrap/reconcile-state.d.ts.map +1 -0
- package/server/bootstrap/reconcile-state.js +73 -0
- package/server/bootstrap/reconcile-state.js.map +1 -0
- package/server/bootstrap/runtime-loops.d.ts +51 -0
- package/server/bootstrap/runtime-loops.d.ts.map +1 -0
- package/server/bootstrap/runtime-loops.js +189 -0
- package/server/bootstrap/runtime-loops.js.map +1 -0
- package/server/bootstrap/runtime-port.d.ts +4 -0
- package/server/bootstrap/runtime-port.d.ts.map +1 -0
- package/server/bootstrap/runtime-port.js +52 -0
- package/server/bootstrap/runtime-port.js.map +1 -0
- package/server/bootstrap/safety-gate.d.ts +22 -0
- package/server/bootstrap/safety-gate.d.ts.map +1 -0
- package/server/bootstrap/safety-gate.js +43 -0
- package/server/bootstrap/safety-gate.js.map +1 -0
- package/server/bootstrap/shutdown-marker.d.ts +35 -0
- package/server/bootstrap/shutdown-marker.d.ts.map +1 -0
- package/server/bootstrap/shutdown-marker.js +100 -0
- package/server/bootstrap/shutdown-marker.js.map +1 -0
- package/server/bootstrap/shutdown-runtime.d.ts +62 -0
- package/server/bootstrap/shutdown-runtime.d.ts.map +1 -0
- package/server/bootstrap/shutdown-runtime.js +66 -0
- package/server/bootstrap/shutdown-runtime.js.map +1 -0
- package/server/bootstrap/startup-banner.d.ts +34 -0
- package/server/bootstrap/startup-banner.d.ts.map +1 -0
- package/server/bootstrap/startup-banner.js +114 -0
- package/server/bootstrap/startup-banner.js.map +1 -0
- package/server/bootstrap/wire-runtime.d.ts +42 -0
- package/server/bootstrap/wire-runtime.d.ts.map +1 -0
- package/server/bootstrap/wire-runtime.js +205 -0
- package/server/bootstrap/wire-runtime.js.map +1 -0
- package/server/cli/help.d.ts +3 -0
- package/server/cli/help.d.ts.map +1 -0
- package/server/cli/help.js +39 -0
- package/server/cli/help.js.map +1 -0
- package/server/cli/hook-client.d.ts +12 -0
- package/server/cli/hook-client.d.ts.map +1 -0
- package/server/cli/hook-client.js +81 -0
- package/server/cli/hook-client.js.map +1 -0
- package/server/cli/hook.d.ts +3 -0
- package/server/cli/hook.d.ts.map +1 -0
- package/server/cli/hook.js +152 -0
- package/server/cli/hook.js.map +1 -0
- package/server/cli/main.d.ts +2 -0
- package/server/cli/main.d.ts.map +1 -0
- package/server/cli/main.js +133 -0
- package/server/cli/main.js.map +1 -0
- package/server/cli/notify.d.ts +19 -0
- package/server/cli/notify.d.ts.map +1 -0
- package/server/cli/notify.js +77 -0
- package/server/cli/notify.js.map +1 -0
- package/server/cli/open.d.ts +2 -0
- package/server/cli/open.d.ts.map +1 -0
- package/server/cli/open.js +47 -0
- package/server/cli/open.js.map +1 -0
- package/server/cli/probe-daemon-version.d.ts +46 -0
- package/server/cli/probe-daemon-version.d.ts.map +1 -0
- package/server/cli/probe-daemon-version.js +167 -0
- package/server/cli/probe-daemon-version.js.map +1 -0
- package/server/cli/pty-host.d.ts +36 -0
- package/server/cli/pty-host.d.ts.map +1 -0
- package/server/cli/pty-host.js +390 -0
- package/server/cli/pty-host.js.map +1 -0
- package/server/cli/qr.d.ts +2 -0
- package/server/cli/qr.d.ts.map +1 -0
- package/server/cli/qr.js +70 -0
- package/server/cli/qr.js.map +1 -0
- package/server/cli/restart-confirm.d.ts +33 -0
- package/server/cli/restart-confirm.d.ts.map +1 -0
- package/server/cli/restart-confirm.js +107 -0
- package/server/cli/restart-confirm.js.map +1 -0
- package/server/cli/restart.d.ts +17 -0
- package/server/cli/restart.d.ts.map +1 -0
- package/server/cli/restart.js +145 -0
- package/server/cli/restart.js.map +1 -0
- package/server/cli/service-darwin.d.ts +70 -0
- package/server/cli/service-darwin.d.ts.map +1 -0
- package/server/cli/service-darwin.js +562 -0
- package/server/cli/service-darwin.js.map +1 -0
- package/server/cli/service-linux.d.ts +81 -0
- package/server/cli/service-linux.d.ts.map +1 -0
- package/server/cli/service-linux.js +412 -0
- package/server/cli/service-linux.js.map +1 -0
- package/server/cli/service.d.ts +33 -0
- package/server/cli/service.d.ts.map +1 -0
- package/server/cli/service.js +133 -0
- package/server/cli/service.js.map +1 -0
- package/server/cli/shim-installer.d.ts +35 -0
- package/server/cli/shim-installer.d.ts.map +1 -0
- package/server/cli/shim-installer.js +662 -0
- package/server/cli/shim-installer.js.map +1 -0
- package/server/cli/shim-open.d.ts +2 -0
- package/server/cli/shim-open.d.ts.map +1 -0
- package/server/cli/shim-open.js +128 -0
- package/server/cli/shim-open.js.map +1 -0
- package/server/cli/shutdown-deps.d.ts +41 -0
- package/server/cli/shutdown-deps.d.ts.map +1 -0
- package/server/cli/shutdown-deps.js +158 -0
- package/server/cli/shutdown-deps.js.map +1 -0
- package/server/cli/stop.d.ts +11 -0
- package/server/cli/stop.d.ts.map +1 -0
- package/server/cli/stop.js +123 -0
- package/server/cli/stop.js.map +1 -0
- package/server/cli/unknown-command.d.ts +8 -0
- package/server/cli/unknown-command.d.ts.map +1 -0
- package/server/cli/unknown-command.js +14 -0
- package/server/cli/unknown-command.js.map +1 -0
- package/server/debug/agent-status-recorder.d.ts +57 -0
- package/server/debug/agent-status-recorder.d.ts.map +1 -0
- package/server/debug/agent-status-recorder.js +209 -0
- package/server/debug/agent-status-recorder.js.map +1 -0
- package/server/debug/terminal-trace-recorder.d.ts +41 -0
- package/server/debug/terminal-trace-recorder.d.ts.map +1 -0
- package/server/debug/terminal-trace-recorder.js +112 -0
- package/server/debug/terminal-trace-recorder.js.map +1 -0
- package/server/fonts/catalog.d.ts +35 -0
- package/server/fonts/catalog.d.ts.map +1 -0
- package/server/fonts/catalog.js +76 -0
- package/server/fonts/catalog.js.map +1 -0
- package/server/fonts/installer.d.ts +45 -0
- package/server/fonts/installer.d.ts.map +1 -0
- package/server/fonts/installer.js +201 -0
- package/server/fonts/installer.js.map +1 -0
- package/server/fonts/routes.d.ts +4 -0
- package/server/fonts/routes.d.ts.map +1 -0
- package/server/fonts/routes.js +91 -0
- package/server/fonts/routes.js.map +1 -0
- package/server/fs/drops.d.ts +50 -0
- package/server/fs/drops.d.ts.map +1 -0
- package/server/fs/drops.js +137 -0
- package/server/fs/drops.js.map +1 -0
- package/server/fs/file-uploads.d.ts +57 -0
- package/server/fs/file-uploads.d.ts.map +1 -0
- package/server/fs/file-uploads.js +214 -0
- package/server/fs/file-uploads.js.map +1 -0
- package/server/fs/file-watcher.d.ts +22 -0
- package/server/fs/file-watcher.d.ts.map +1 -0
- package/server/fs/file-watcher.js +105 -0
- package/server/fs/file-watcher.js.map +1 -0
- package/server/fs/git-watcher.d.ts +76 -0
- package/server/fs/git-watcher.d.ts.map +1 -0
- package/server/fs/git-watcher.js +356 -0
- package/server/fs/git-watcher.js.map +1 -0
- package/server/fs/media.d.ts +35 -0
- package/server/fs/media.d.ts.map +1 -0
- package/server/fs/media.js +271 -0
- package/server/fs/media.js.map +1 -0
- package/server/fs/service.d.ts +97 -0
- package/server/fs/service.d.ts.map +1 -0
- package/server/fs/service.js +306 -0
- package/server/fs/service.js.map +1 -0
- package/server/fs/upload-staging.d.ts +76 -0
- package/server/fs/upload-staging.d.ts.map +1 -0
- package/server/fs/upload-staging.js +283 -0
- package/server/fs/upload-staging.js.map +1 -0
- package/server/fs/watcher-lifecycle.d.ts +24 -0
- package/server/fs/watcher-lifecycle.d.ts.map +1 -0
- package/server/fs/watcher-lifecycle.js +105 -0
- package/server/fs/watcher-lifecycle.js.map +1 -0
- package/server/index.d.ts +17 -0
- package/server/index.d.ts.map +1 -0
- package/server/index.js +510 -0
- package/server/index.js.map +1 -0
- package/server/ipc/socket-server.d.ts +28 -0
- package/server/ipc/socket-server.d.ts.map +1 -0
- package/server/ipc/socket-server.js +206 -0
- package/server/ipc/socket-server.js.map +1 -0
- package/server/lib/git-exec.d.ts +38 -0
- package/server/lib/git-exec.d.ts.map +1 -0
- package/server/lib/git-exec.js +96 -0
- package/server/lib/git-exec.js.map +1 -0
- package/server/lib/open-in-ide.d.ts +22 -0
- package/server/lib/open-in-ide.d.ts.map +1 -0
- package/server/lib/open-in-ide.js +90 -0
- package/server/lib/open-in-ide.js.map +1 -0
- package/server/lib/open-in-os.d.ts +20 -0
- package/server/lib/open-in-os.d.ts.map +1 -0
- package/server/lib/open-in-os.js +51 -0
- package/server/lib/open-in-os.js.map +1 -0
- package/server/lib/path.d.ts +2 -0
- package/server/lib/path.d.ts.map +1 -0
- package/server/lib/path.js +10 -0
- package/server/lib/path.js.map +1 -0
- package/server/lib/promise-mutex.d.ts +7 -0
- package/server/lib/promise-mutex.d.ts.map +1 -0
- package/server/lib/promise-mutex.js +26 -0
- package/server/lib/promise-mutex.js.map +1 -0
- package/server/lib/sd-notify.d.ts +8 -0
- package/server/lib/sd-notify.d.ts.map +1 -0
- package/server/lib/sd-notify.js +27 -0
- package/server/lib/sd-notify.js.map +1 -0
- package/server/net/local-machine.d.ts +7 -0
- package/server/net/local-machine.d.ts.map +1 -0
- package/server/net/local-machine.js +79 -0
- package/server/net/local-machine.js.map +1 -0
- package/server/net/reachable-host.d.ts +12 -0
- package/server/net/reachable-host.d.ts.map +1 -0
- package/server/net/reachable-host.js +25 -0
- package/server/net/reachable-host.js.map +1 -0
- package/server/network/endpoints.d.ts +14 -0
- package/server/network/endpoints.d.ts.map +1 -0
- package/server/network/endpoints.js +104 -0
- package/server/network/endpoints.js.map +1 -0
- package/server/network/qr.d.ts +16 -0
- package/server/network/qr.d.ts.map +1 -0
- package/server/network/qr.js +89 -0
- package/server/network/qr.js.map +1 -0
- package/server/port-forwarder/forwarder.d.ts +47 -0
- package/server/port-forwarder/forwarder.d.ts.map +1 -0
- package/server/port-forwarder/forwarder.js +159 -0
- package/server/port-forwarder/forwarder.js.map +1 -0
- package/server/port-scanner/scanner.d.ts +24 -0
- package/server/port-scanner/scanner.d.ts.map +1 -0
- package/server/port-scanner/scanner.js +193 -0
- package/server/port-scanner/scanner.js.map +1 -0
- package/server/pty/connection-lifecycle.d.ts +50 -0
- package/server/pty/connection-lifecycle.d.ts.map +1 -0
- package/server/pty/connection-lifecycle.js +113 -0
- package/server/pty/connection-lifecycle.js.map +1 -0
- package/server/pty/daemon-connect.d.ts +52 -0
- package/server/pty/daemon-connect.d.ts.map +1 -0
- package/server/pty/daemon-connect.js +62 -0
- package/server/pty/daemon-connect.js.map +1 -0
- package/server/pty/handshake-timeout-race.d.ts +22 -0
- package/server/pty/handshake-timeout-race.d.ts.map +1 -0
- package/server/pty/handshake-timeout-race.js +23 -0
- package/server/pty/handshake-timeout-race.js.map +1 -0
- package/server/pty/headless-replay-snapshot.d.ts +28 -0
- package/server/pty/headless-replay-snapshot.d.ts.map +1 -0
- package/server/pty/headless-replay-snapshot.js +285 -0
- package/server/pty/headless-replay-snapshot.js.map +1 -0
- package/server/pty/headless-terminal-state-cache.d.ts +31 -0
- package/server/pty/headless-terminal-state-cache.d.ts.map +1 -0
- package/server/pty/headless-terminal-state-cache.js +119 -0
- package/server/pty/headless-terminal-state-cache.js.map +1 -0
- package/server/pty/hello-ack-validator.d.ts +15 -0
- package/server/pty/hello-ack-validator.d.ts.map +1 -0
- package/server/pty/hello-ack-validator.js +30 -0
- package/server/pty/hello-ack-validator.js.map +1 -0
- package/server/pty/host-daemon/bootstrap.d.ts +100 -0
- package/server/pty/host-daemon/bootstrap.d.ts.map +1 -0
- package/server/pty/host-daemon/bootstrap.js +611 -0
- package/server/pty/host-daemon/bootstrap.js.map +1 -0
- package/server/pty/host-daemon/daemon.d.ts +111 -0
- package/server/pty/host-daemon/daemon.d.ts.map +1 -0
- package/server/pty/host-daemon/daemon.js +648 -0
- package/server/pty/host-daemon/daemon.js.map +1 -0
- package/server/pty/host-daemon/entry.d.ts +3 -0
- package/server/pty/host-daemon/entry.d.ts.map +1 -0
- package/server/pty/host-daemon/entry.js +72 -0
- package/server/pty/host-daemon/entry.js.map +1 -0
- package/server/pty/host-daemon/lockfile.d.ts +12 -0
- package/server/pty/host-daemon/lockfile.d.ts.map +1 -0
- package/server/pty/host-daemon/lockfile.js +120 -0
- package/server/pty/host-daemon/lockfile.js.map +1 -0
- package/server/pty/host-daemon/mode-marker.d.ts +77 -0
- package/server/pty/host-daemon/mode-marker.d.ts.map +1 -0
- package/server/pty/host-daemon/mode-marker.js +228 -0
- package/server/pty/host-daemon/mode-marker.js.map +1 -0
- package/server/pty/host-daemon/orphan-cleanup.d.ts +42 -0
- package/server/pty/host-daemon/orphan-cleanup.d.ts.map +1 -0
- package/server/pty/host-daemon/orphan-cleanup.js +84 -0
- package/server/pty/host-daemon/orphan-cleanup.js.map +1 -0
- package/server/pty/host-daemon/paths.d.ts +10 -0
- package/server/pty/host-daemon/paths.d.ts.map +1 -0
- package/server/pty/host-daemon/paths.js +56 -0
- package/server/pty/host-daemon/paths.js.map +1 -0
- package/server/pty/host-daemon/server-connection.d.ts +44 -0
- package/server/pty/host-daemon/server-connection.d.ts.map +1 -0
- package/server/pty/host-daemon/server-connection.js +100 -0
- package/server/pty/host-daemon/server-connection.js.map +1 -0
- package/server/pty/host-daemon/service-detection.d.ts +24 -0
- package/server/pty/host-daemon/service-detection.d.ts.map +1 -0
- package/server/pty/host-daemon/service-detection.js +16 -0
- package/server/pty/host-daemon/service-detection.js.map +1 -0
- package/server/pty/host-daemon/socket-ready.d.ts +22 -0
- package/server/pty/host-daemon/socket-ready.d.ts.map +1 -0
- package/server/pty/host-daemon/socket-ready.js +33 -0
- package/server/pty/host-daemon/socket-ready.js.map +1 -0
- package/server/pty/host-daemon/spawn-daemon.d.ts +45 -0
- package/server/pty/host-daemon/spawn-daemon.d.ts.map +1 -0
- package/server/pty/host-daemon/spawn-daemon.js +155 -0
- package/server/pty/host-daemon/spawn-daemon.js.map +1 -0
- package/server/pty/host-daemon/terminate-daemon.d.ts +16 -0
- package/server/pty/host-daemon/terminate-daemon.d.ts.map +1 -0
- package/server/pty/host-daemon/terminate-daemon.js +128 -0
- package/server/pty/host-daemon/terminate-daemon.js.map +1 -0
- package/server/pty/host-protocol/frames.d.ts +110 -0
- package/server/pty/host-protocol/frames.d.ts.map +1 -0
- package/server/pty/host-protocol/frames.js +255 -0
- package/server/pty/host-protocol/frames.js.map +1 -0
- package/server/pty/host-protocol/messages.d.ts +140 -0
- package/server/pty/host-protocol/messages.d.ts.map +1 -0
- package/server/pty/host-protocol/messages.js +117 -0
- package/server/pty/host-protocol/messages.js.map +1 -0
- package/server/pty/host.d.ts +273 -0
- package/server/pty/host.d.ts.map +1 -0
- package/server/pty/host.js +184 -0
- package/server/pty/host.js.map +1 -0
- package/server/pty/in-process-host.d.ts +224 -0
- package/server/pty/in-process-host.d.ts.map +1 -0
- package/server/pty/in-process-host.js +1183 -0
- package/server/pty/in-process-host.js.map +1 -0
- package/server/pty/osc7-lifecycle.d.ts +8 -0
- package/server/pty/osc7-lifecycle.d.ts.map +1 -0
- package/server/pty/osc7-lifecycle.js +22 -0
- package/server/pty/osc7-lifecycle.js.map +1 -0
- package/server/pty/osc7-parser.d.ts +23 -0
- package/server/pty/osc7-parser.d.ts.map +1 -0
- package/server/pty/osc7-parser.js +91 -0
- package/server/pty/osc7-parser.js.map +1 -0
- package/server/pty/remote-host.d.ts +188 -0
- package/server/pty/remote-host.d.ts.map +1 -0
- package/server/pty/remote-host.js +810 -0
- package/server/pty/remote-host.js.map +1 -0
- package/server/pty/request-correlator.d.ts +59 -0
- package/server/pty/request-correlator.d.ts.map +1 -0
- package/server/pty/request-correlator.js +75 -0
- package/server/pty/request-correlator.js.map +1 -0
- package/server/pty/scrollback-log.d.ts +130 -0
- package/server/pty/scrollback-log.d.ts.map +1 -0
- package/server/pty/scrollback-log.js +344 -0
- package/server/pty/scrollback-log.js.map +1 -0
- package/server/pty/scrollback-sanitize.d.ts +2 -0
- package/server/pty/scrollback-sanitize.d.ts.map +1 -0
- package/server/pty/scrollback-sanitize.js +54 -0
- package/server/pty/scrollback-sanitize.js.map +1 -0
- package/server/pty/session-mirror.d.ts +67 -0
- package/server/pty/session-mirror.d.ts.map +1 -0
- package/server/pty/session-mirror.js +112 -0
- package/server/pty/session-mirror.js.map +1 -0
- package/server/pty/session-policy.d.ts +85 -0
- package/server/pty/session-policy.d.ts.map +1 -0
- package/server/pty/session-policy.js +186 -0
- package/server/pty/session-policy.js.map +1 -0
- package/server/pty/version-mismatch-recovery.d.ts +71 -0
- package/server/pty/version-mismatch-recovery.d.ts.map +1 -0
- package/server/pty/version-mismatch-recovery.js +63 -0
- package/server/pty/version-mismatch-recovery.js.map +1 -0
- package/server/routes/debug-agent-status.d.ts +5 -0
- package/server/routes/debug-agent-status.d.ts.map +1 -0
- package/server/routes/debug-agent-status.js +22 -0
- package/server/routes/debug-agent-status.js.map +1 -0
- package/server/routes/debug-diagnostics.d.ts +8 -0
- package/server/routes/debug-diagnostics.d.ts.map +1 -0
- package/server/routes/debug-diagnostics.js +34 -0
- package/server/routes/debug-diagnostics.js.map +1 -0
- package/server/routes/debug-terminal-trace.d.ts +16 -0
- package/server/routes/debug-terminal-trace.d.ts.map +1 -0
- package/server/routes/debug-terminal-trace.js +545 -0
- package/server/routes/debug-terminal-trace.js.map +1 -0
- package/server/routes/drops.d.ts +13 -0
- package/server/routes/drops.d.ts.map +1 -0
- package/server/routes/drops.js +126 -0
- package/server/routes/drops.js.map +1 -0
- package/server/routes/file-uploads.d.ts +9 -0
- package/server/routes/file-uploads.d.ts.map +1 -0
- package/server/routes/file-uploads.js +119 -0
- package/server/routes/file-uploads.js.map +1 -0
- package/server/routes/files.d.ts +9 -0
- package/server/routes/files.d.ts.map +1 -0
- package/server/routes/files.js +441 -0
- package/server/routes/files.js.map +1 -0
- package/server/routes/filesystem.d.ts +6 -0
- package/server/routes/filesystem.d.ts.map +1 -0
- package/server/routes/filesystem.js +76 -0
- package/server/routes/filesystem.js.map +1 -0
- package/server/routes/git.d.ts +38 -0
- package/server/routes/git.d.ts.map +1 -0
- package/server/routes/git.js +585 -0
- package/server/routes/git.js.map +1 -0
- package/server/routes/healthz.d.ts +8 -0
- package/server/routes/healthz.d.ts.map +1 -0
- package/server/routes/healthz.js +24 -0
- package/server/routes/healthz.js.map +1 -0
- package/server/routes/hook.d.ts +14 -0
- package/server/routes/hook.d.ts.map +1 -0
- package/server/routes/hook.js +86 -0
- package/server/routes/hook.js.map +1 -0
- package/server/routes/ide-commands.d.ts +9 -0
- package/server/routes/ide-commands.d.ts.map +1 -0
- package/server/routes/ide-commands.js +23 -0
- package/server/routes/ide-commands.js.map +1 -0
- package/server/routes/lib/resolve-worktree.d.ts +30 -0
- package/server/routes/lib/resolve-worktree.d.ts.map +1 -0
- package/server/routes/lib/resolve-worktree.js +35 -0
- package/server/routes/lib/resolve-worktree.js.map +1 -0
- package/server/routes/open.d.ts +4 -0
- package/server/routes/open.d.ts.map +1 -0
- package/server/routes/open.js +21 -0
- package/server/routes/open.js.map +1 -0
- package/server/routes/pane-commands.d.ts +9 -0
- package/server/routes/pane-commands.d.ts.map +1 -0
- package/server/routes/pane-commands.js +23 -0
- package/server/routes/pane-commands.js.map +1 -0
- package/server/routes/projects.d.ts +15 -0
- package/server/routes/projects.d.ts.map +1 -0
- package/server/routes/projects.js +363 -0
- package/server/routes/projects.js.map +1 -0
- package/server/routes/server-notices.d.ts +4 -0
- package/server/routes/server-notices.d.ts.map +1 -0
- package/server/routes/server-notices.js +29 -0
- package/server/routes/server-notices.js.map +1 -0
- package/server/routes/service-config.d.ts +11 -0
- package/server/routes/service-config.d.ts.map +1 -0
- package/server/routes/service-config.js +64 -0
- package/server/routes/service-config.js.map +1 -0
- package/server/routes/sessions.d.ts +7 -0
- package/server/routes/sessions.d.ts.map +1 -0
- package/server/routes/sessions.js +218 -0
- package/server/routes/sessions.js.map +1 -0
- package/server/service/caffeinate.d.ts +33 -0
- package/server/service/caffeinate.d.ts.map +1 -0
- package/server/service/caffeinate.js +72 -0
- package/server/service/caffeinate.js.map +1 -0
- package/server/state/app-state.d.ts +167 -0
- package/server/state/app-state.d.ts.map +1 -0
- package/server/state/app-state.js +335 -0
- package/server/state/app-state.js.map +1 -0
- package/server/state/project-manager.d.ts +30 -0
- package/server/state/project-manager.d.ts.map +1 -0
- package/server/state/project-manager.js +128 -0
- package/server/state/project-manager.js.map +1 -0
- package/server/state/server-notices.d.ts +12 -0
- package/server/state/server-notices.d.ts.map +1 -0
- package/server/state/server-notices.js +32 -0
- package/server/state/server-notices.js.map +1 -0
- package/server/state/worktree-cache.d.ts +25 -0
- package/server/state/worktree-cache.d.ts.map +1 -0
- package/server/state/worktree-cache.js +53 -0
- package/server/state/worktree-cache.js.map +1 -0
- package/server/ws/events.d.ts +45 -0
- package/server/ws/events.d.ts.map +1 -0
- package/server/ws/events.js +134 -0
- package/server/ws/events.js.map +1 -0
- package/server/ws/keepalive.d.ts +27 -0
- package/server/ws/keepalive.d.ts.map +1 -0
- package/server/ws/keepalive.js +63 -0
- package/server/ws/keepalive.js.map +1 -0
- package/server/ws/terminal-attach.d.ts +13 -0
- package/server/ws/terminal-attach.d.ts.map +1 -0
- package/server/ws/terminal-attach.js +233 -0
- package/server/ws/terminal-attach.js.map +1 -0
- package/server/ws/terminal-flow.d.ts +17 -0
- package/server/ws/terminal-flow.d.ts.map +1 -0
- package/server/ws/terminal-flow.js +64 -0
- package/server/ws/terminal-flow.js.map +1 -0
- package/server/ws/terminal.d.ts +69 -0
- package/server/ws/terminal.d.ts.map +1 -0
- package/server/ws/terminal.js +311 -0
- package/server/ws/terminal.js.map +1 -0
- package/web/assets/EditorPane-CzzT3iYY.js +123 -0
- package/web/assets/SymbolsNerdFontMono-Regular-CwEZqMeU.woff2 +0 -0
- package/web/assets/TerminalPane-CjbYzePr.js +68 -0
- package/web/assets/TerminalPane-DkTCHfhq.css +1 -0
- package/web/assets/file-icons-JBi09j0r.js +6 -0
- package/web/assets/index-CTTkRpnn.css +2 -0
- package/web/assets/index-CmhewzMp.js +34 -0
- package/web/assets/session-resume-7f-tB-ZU.js +2 -0
- package/web/assets/terminal-trace-PuuFRybC.js +2803 -0
- package/web/assets/useVirtualKeyboard-DgJb9u9d.js +1 -0
- package/web/index.html +52 -0
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { decodeGenerationStreamPayload, encodeGenerationStreamPayload, encodeStreamPayload, FrameType, } from "../host-protocol/frames.js";
|
|
3
|
+
import { decodeJsonPayload, encodeJsonPayload, isCompatibleVersion, PROTOCOL_VERSION, } from "../host-protocol/messages.js";
|
|
4
|
+
import { ServerConnection } from "./server-connection.js";
|
|
5
|
+
export class PtyHostDaemon {
|
|
6
|
+
host;
|
|
7
|
+
store;
|
|
8
|
+
daemonPid;
|
|
9
|
+
daemonStartedAt;
|
|
10
|
+
currentServer = null;
|
|
11
|
+
nextConnectionId = 1;
|
|
12
|
+
nextGeneration = 1n;
|
|
13
|
+
disposed = false;
|
|
14
|
+
/*
|
|
15
|
+
* -- in-flight host operations (CREATE_REQ /
|
|
16
|
+
* RESTART_REQ / DISPOSE_REQ / DISPOSE_ALL_REQ / INIT_CLIENT_REQ) hold
|
|
17
|
+
* Promises whose `.then`/`.catch` handlers run on the microtask queue
|
|
18
|
+
* after `dispose()` has already flagged shutdown. If we tear the host
|
|
19
|
+
* down (`shutdownAll`) before those handlers settle, a CREATE that
|
|
20
|
+
* raced just before SIGTERM will spawn its PTY and persist its
|
|
21
|
+
* SessionRecord *after* shutdownAll has stamped every other session
|
|
22
|
+
* "ended", leaving an orphan. We track every host-call chain and
|
|
23
|
+
* `drain()` waits for them all to settle so bootstrap can sequence
|
|
24
|
+
* shutdownAll -> flush -> marker -> destroy without that race.
|
|
25
|
+
*/
|
|
26
|
+
inFlight = new Set();
|
|
27
|
+
constructor(deps) {
|
|
28
|
+
this.host = deps.host;
|
|
29
|
+
this.store = deps.store ?? null;
|
|
30
|
+
this.daemonPid = deps.daemonPid ?? process.pid;
|
|
31
|
+
this.daemonStartedAt = deps.daemonStartedAt ?? new Date().toISOString();
|
|
32
|
+
/*
|
|
33
|
+
* Single global subscription on the engine. The daemon broadcasts to
|
|
34
|
+
* the *current* server only -- there is at most one. Per-client fan-
|
|
35
|
+
* out (INIT_CLIENT_REQ tagging different clientIds) is a server-side
|
|
36
|
+
* concern; daemon-side every server attach is one logical client of
|
|
37
|
+
* the engine, distinguished only by its server-supplied clientId.
|
|
38
|
+
*/
|
|
39
|
+
this.host.onSessionData((sessionId, data, generation) => {
|
|
40
|
+
// PTY generation gate: tag DATA frames with the producing PTY's generation so
|
|
41
|
+
// the remote-side WS layer can echo it back on INPUT and the
|
|
42
|
+
// daemon-side `handleWrite` gate can drop stale input.
|
|
43
|
+
this.broadcastDataStream(sessionId, data, generation);
|
|
44
|
+
});
|
|
45
|
+
this.host.onSessionInput((sessionId, data) => {
|
|
46
|
+
this.broadcastStream(FrameType.SESSION_INPUT, sessionId, data);
|
|
47
|
+
});
|
|
48
|
+
this.host.onSessionExit = (sessionId, sessionGeneration, endReason) => {
|
|
49
|
+
this.broadcastJson(FrameType.SESSION_EXIT, 0, {
|
|
50
|
+
sessionId,
|
|
51
|
+
sessionGeneration,
|
|
52
|
+
endReason,
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Hand the daemon a freshly-accepted IPC socket. The peer is expected
|
|
58
|
+
* to send HELLO as its first frame; until then the connection sits in
|
|
59
|
+
* `awaiting-hello` and is not yet considered current.
|
|
60
|
+
*
|
|
61
|
+
* Eviction is deferred to HELLO time so that a probe connect (e.g. the
|
|
62
|
+
* server's startup health check) doesn't kick off the previous current.
|
|
63
|
+
*/
|
|
64
|
+
acceptConnection(socket) {
|
|
65
|
+
if (this.disposed) {
|
|
66
|
+
socket.end();
|
|
67
|
+
throw new Error("PtyHostDaemon.acceptConnection: daemon disposed");
|
|
68
|
+
}
|
|
69
|
+
const conn = new ServerConnection({
|
|
70
|
+
socket,
|
|
71
|
+
connectionId: this.nextConnectionId++,
|
|
72
|
+
generation: this.nextGeneration++,
|
|
73
|
+
onFrame: (c, frame) => this.handleFrame(c, frame),
|
|
74
|
+
onClose: (c) => this.handleConnectionClosed(c),
|
|
75
|
+
});
|
|
76
|
+
return conn;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stop accepting frames and evict the current peer with a shutdown
|
|
80
|
+
* NACK so it knows not to try to reconnect. Does NOT terminate the
|
|
81
|
+
* underlying PtyHost -- that's the caller's call (see by design
|
|
82
|
+
* the in-process vs daemon-mode shutdown semantics divergence).
|
|
83
|
+
*/
|
|
84
|
+
dispose() {
|
|
85
|
+
if (this.disposed)
|
|
86
|
+
return;
|
|
87
|
+
this.disposed = true;
|
|
88
|
+
if (this.currentServer) {
|
|
89
|
+
this.currentServer.evict("daemon-shutting-down", "daemon is shutting down");
|
|
90
|
+
this.currentServer = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Wait for every host-call chain currently in flight to settle. Caller
|
|
95
|
+
* (bootstrap.shutdown) runs this between `dispose()` and `host.shutdownAll()`
|
|
96
|
+
* so a CREATE that won the race against SIGTERM finishes its persist
|
|
97
|
+
* step before shutdownAll iterates `this.sessions`. New frames are
|
|
98
|
+
* already blocked at this point: `dispose()` evicts the current peer
|
|
99
|
+
* and the listening sockets are closed in bootstrap before drain runs,
|
|
100
|
+
* so `inFlight` is monotonically shrinking.
|
|
101
|
+
*
|
|
102
|
+
* Bounded by `timeoutMs` (default 3s) so a hung host call (network
|
|
103
|
+
* filesystem stall, disk timeout) cannot block the entire shutdown
|
|
104
|
+
* path -- `shutdownAll`, marker write, and lock release all need to
|
|
105
|
+
* run for the user to recover (). On timeout
|
|
106
|
+
* the pending chains keep running but are no longer awaited; they
|
|
107
|
+
* will settle against a destroyed store and best-effort log the loss.
|
|
108
|
+
* Returns `true` when fully drained, `false` on timeout.
|
|
109
|
+
*/
|
|
110
|
+
async drain(timeoutMs = 3000) {
|
|
111
|
+
if (this.inFlight.size === 0)
|
|
112
|
+
return true;
|
|
113
|
+
const all = Promise.allSettled([...this.inFlight]).then(() => true);
|
|
114
|
+
let timer;
|
|
115
|
+
const timeout = new Promise((resolve) => {
|
|
116
|
+
timer = setTimeout(() => resolve(false), timeoutMs);
|
|
117
|
+
});
|
|
118
|
+
try {
|
|
119
|
+
return await Promise.race([all, timeout]);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
if (timer !== undefined)
|
|
123
|
+
clearTimeout(timer);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Track a host-call chain (the full Promise including its `.then`/`.catch`
|
|
128
|
+
* handlers, not just the host's underlying Promise). Removes itself on
|
|
129
|
+
* settle so the `Set` does not leak.
|
|
130
|
+
*/
|
|
131
|
+
track(promise) {
|
|
132
|
+
this.inFlight.add(promise);
|
|
133
|
+
const cleanup = () => {
|
|
134
|
+
this.inFlight.delete(promise);
|
|
135
|
+
};
|
|
136
|
+
promise.then(cleanup, cleanup);
|
|
137
|
+
}
|
|
138
|
+
// --- frame dispatcher ---
|
|
139
|
+
handleFrame(conn, frame) {
|
|
140
|
+
if (frame.type === FrameType.HELLO) {
|
|
141
|
+
this.handleHello(conn, frame);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (conn.getState() !== "ready") {
|
|
145
|
+
conn.evict("handshake-required", "frame received before HELLO");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (frame.connectionId !== conn.connectionId ||
|
|
149
|
+
frame.generation !== conn.generation) {
|
|
150
|
+
// Peer is sending stale/forged headers. Drop the connection -- we
|
|
151
|
+
// can't trust anything more from it.
|
|
152
|
+
conn.evict("frame-invalid", "header epoch mismatch");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
/*
|
|
156
|
+
* Stage-1 fence (by design): is the *connection itself* still the
|
|
157
|
+
* current one? If a newer peer has already taken over, drop the
|
|
158
|
+
* frame silently. The previous peer was already NACKed `evicted`
|
|
159
|
+
* when it lost its slot.
|
|
160
|
+
*/
|
|
161
|
+
if (this.currentServer !== conn)
|
|
162
|
+
return;
|
|
163
|
+
try {
|
|
164
|
+
this.dispatchReady(conn, frame);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
168
|
+
this.replyNack(conn, frame.requestId, "internal-error", message);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
handleHello(conn, frame) {
|
|
172
|
+
let payload;
|
|
173
|
+
try {
|
|
174
|
+
payload = decodeJsonPayload(frame.payload);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
const message = err instanceof Error ? err.message : "invalid HELLO json";
|
|
178
|
+
conn.evict("frame-invalid", message);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (!isCompatibleVersion(payload.protocolVersion, PROTOCOL_VERSION)) {
|
|
182
|
+
conn.evict("version-mismatch", `server ${payload.protocolVersion} not compatible with daemon ${PROTOCOL_VERSION}`);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Evict the previous current -- but only now, after we've decided we
|
|
186
|
+
// accept this one. A malformed HELLO would have failed above, leaving
|
|
187
|
+
// any prior current intact.
|
|
188
|
+
if (this.currentServer && this.currentServer !== conn) {
|
|
189
|
+
this.currentServer.evict("evicted", "superseded by newer server");
|
|
190
|
+
}
|
|
191
|
+
this.currentServer = conn;
|
|
192
|
+
conn.markReady();
|
|
193
|
+
const ack = {
|
|
194
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
195
|
+
connectionId: conn.connectionId,
|
|
196
|
+
generation: conn.generation.toString(),
|
|
197
|
+
daemonPid: this.daemonPid,
|
|
198
|
+
daemonStartedAt: this.daemonStartedAt,
|
|
199
|
+
};
|
|
200
|
+
conn.send({
|
|
201
|
+
type: FrameType.HELLO_ACK,
|
|
202
|
+
requestId: frame.requestId,
|
|
203
|
+
payload: encodeJsonPayload(ack),
|
|
204
|
+
});
|
|
205
|
+
// reconnect 後 SESSION_LIST で snapshot 再構築. Emit a
|
|
206
|
+
// full snapshot of currently-known sessions immediately so the
|
|
207
|
+
// freshly-attached server's mirror reflects daemon-side reality
|
|
208
|
+
// before any per-session SESSION_UPDATE/SESSION_EXIT broadcast lands.
|
|
209
|
+
// Without this, a server that reconnects to a daemon with live PTYs
|
|
210
|
+
// would see an empty list() until the next state change broadcast,
|
|
211
|
+
// turning live agents into "phantom orphans" from the routes' view.
|
|
212
|
+
const snapshot = { sessions: this.host.list() };
|
|
213
|
+
conn.send({
|
|
214
|
+
type: FrameType.SESSION_LIST,
|
|
215
|
+
requestId: 0,
|
|
216
|
+
payload: encodeJsonPayload(snapshot),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
dispatchReady(conn, frame) {
|
|
220
|
+
switch (frame.type) {
|
|
221
|
+
case FrameType.CREATE_REQ:
|
|
222
|
+
this.handleCreate(conn, frame);
|
|
223
|
+
return;
|
|
224
|
+
case FrameType.RESTART_REQ:
|
|
225
|
+
this.handleRestart(conn, frame);
|
|
226
|
+
return;
|
|
227
|
+
case FrameType.DISPOSE_REQ:
|
|
228
|
+
this.handleDispose(conn, frame);
|
|
229
|
+
return;
|
|
230
|
+
case FrameType.DISPOSE_ALL_REQ:
|
|
231
|
+
this.handleDisposeAll(conn, frame);
|
|
232
|
+
return;
|
|
233
|
+
case FrameType.SHUTDOWN_ALL_REQ:
|
|
234
|
+
this.handleShutdownAll(conn, frame);
|
|
235
|
+
return;
|
|
236
|
+
case FrameType.INIT_CLIENT_REQ:
|
|
237
|
+
this.handleInitClient(conn, frame);
|
|
238
|
+
return;
|
|
239
|
+
case FrameType.WRITE:
|
|
240
|
+
this.handleWrite(frame);
|
|
241
|
+
return;
|
|
242
|
+
case FrameType.RESIZE:
|
|
243
|
+
this.handleResize(frame);
|
|
244
|
+
return;
|
|
245
|
+
case FrameType.REFRESH:
|
|
246
|
+
this.handleRefresh(frame);
|
|
247
|
+
return;
|
|
248
|
+
case FrameType.PAUSE_OUTPUT:
|
|
249
|
+
this.handlePauseOutput(frame);
|
|
250
|
+
return;
|
|
251
|
+
case FrameType.RESUME_OUTPUT:
|
|
252
|
+
this.handleResumeOutput(frame);
|
|
253
|
+
return;
|
|
254
|
+
case FrameType.DETACH_CLIENT:
|
|
255
|
+
this.handleDetachClient(frame);
|
|
256
|
+
return;
|
|
257
|
+
case FrameType.SET_TITLE:
|
|
258
|
+
this.handleSetTitle(conn, frame);
|
|
259
|
+
return;
|
|
260
|
+
case FrameType.SET_PINNED:
|
|
261
|
+
this.handleSetPinned(conn, frame);
|
|
262
|
+
return;
|
|
263
|
+
case FrameType.SET_PTY_ENV:
|
|
264
|
+
this.handleSetPtyEnv(frame);
|
|
265
|
+
return;
|
|
266
|
+
case FrameType.PERSIST_PROJECT_DOMAINS_REQ:
|
|
267
|
+
this.handlePersistProjectDomains(conn, frame);
|
|
268
|
+
return;
|
|
269
|
+
default:
|
|
270
|
+
this.replyNack(conn, frame.requestId, "unknown-frame-type", `unknown frame type 0x${frame.type.toString(16)}`);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// --- request -> ack handlers (Promise<X>-returning host methods) ---
|
|
275
|
+
handleCreate(conn, frame) {
|
|
276
|
+
const req = decodeJsonPayload(frame.payload);
|
|
277
|
+
const chain = this.host
|
|
278
|
+
.create({
|
|
279
|
+
projectId: req.projectId,
|
|
280
|
+
command: req.command,
|
|
281
|
+
cwd: req.cwd,
|
|
282
|
+
title: req.title,
|
|
283
|
+
bootstrapInput: req.bootstrapInput,
|
|
284
|
+
})
|
|
285
|
+
.then((session) => {
|
|
286
|
+
// commit step splits into ACK gate and
|
|
287
|
+
// broadcast pivot. ACK only goes back if the requester is still
|
|
288
|
+
// current; the SESSION_UPDATE always fans to whoever is current
|
|
289
|
+
// (= new peer if the requester was evicted mid-await). That way
|
|
290
|
+
// the post-eviction successor sees the side-effect via its own
|
|
291
|
+
// mirror reconciliation and reconnect-resync holds.
|
|
292
|
+
if (this.fenceCommit(conn)) {
|
|
293
|
+
const ack = { session };
|
|
294
|
+
conn.send({
|
|
295
|
+
type: FrameType.CREATE_ACK,
|
|
296
|
+
requestId: frame.requestId,
|
|
297
|
+
payload: encodeJsonPayload(ack),
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
this.broadcastSessionUpdate(session);
|
|
301
|
+
})
|
|
302
|
+
.catch((err) => {
|
|
303
|
+
if (!this.fenceCommit(conn))
|
|
304
|
+
return;
|
|
305
|
+
this.replyNack(conn, frame.requestId, "create-failed", err instanceof Error ? err.message : String(err));
|
|
306
|
+
});
|
|
307
|
+
this.track(chain);
|
|
308
|
+
}
|
|
309
|
+
handleRestart(conn, frame) {
|
|
310
|
+
const req = decodeJsonPayload(frame.payload);
|
|
311
|
+
const chain = this.host
|
|
312
|
+
.restart(req.sessionId)
|
|
313
|
+
.then((session) => {
|
|
314
|
+
// broadcast pivot is unconditional so the
|
|
315
|
+
// restart's mutated state propagates to whoever is current,
|
|
316
|
+
// even if the original requester was evicted mid-await.
|
|
317
|
+
if (this.fenceCommit(conn)) {
|
|
318
|
+
conn.send({
|
|
319
|
+
type: FrameType.RESTART_ACK,
|
|
320
|
+
requestId: frame.requestId,
|
|
321
|
+
payload: encodeJsonPayload({ session }),
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
this.broadcastSessionUpdate(session);
|
|
325
|
+
})
|
|
326
|
+
.catch((err) => {
|
|
327
|
+
if (!this.fenceCommit(conn))
|
|
328
|
+
return;
|
|
329
|
+
this.replyNack(conn, frame.requestId, "restart-failed", err instanceof Error ? err.message : String(err));
|
|
330
|
+
});
|
|
331
|
+
this.track(chain);
|
|
332
|
+
}
|
|
333
|
+
handleDispose(conn, frame) {
|
|
334
|
+
const req = decodeJsonPayload(frame.payload);
|
|
335
|
+
const chain = this.host
|
|
336
|
+
.dispose(req.sessionId)
|
|
337
|
+
.then(() => {
|
|
338
|
+
// InProcessPtyHost.dispose() removes the
|
|
339
|
+
// session silently (no onSessionExit emit). To keep the current
|
|
340
|
+
// peer's mirror in sync, fan a fresh SESSION_LIST snapshot. This
|
|
341
|
+
// also covers the post-eviction case where the requester is gone
|
|
342
|
+
// and the new peer has the now-stale session in its initial
|
|
343
|
+
// snapshot.
|
|
344
|
+
if (this.fenceCommit(conn)) {
|
|
345
|
+
const ack = {};
|
|
346
|
+
conn.send({
|
|
347
|
+
type: FrameType.DISPOSE_ACK,
|
|
348
|
+
requestId: frame.requestId,
|
|
349
|
+
payload: encodeJsonPayload(ack),
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
this.broadcastSessionListSnapshot();
|
|
353
|
+
})
|
|
354
|
+
.catch((err) => {
|
|
355
|
+
if (!this.fenceCommit(conn))
|
|
356
|
+
return;
|
|
357
|
+
this.replyNack(conn, frame.requestId, "internal-error", err instanceof Error ? err.message : String(err));
|
|
358
|
+
});
|
|
359
|
+
this.track(chain);
|
|
360
|
+
}
|
|
361
|
+
handleDisposeAll(conn, frame) {
|
|
362
|
+
const chain = this.host
|
|
363
|
+
.disposeAll()
|
|
364
|
+
.then(() => {
|
|
365
|
+
// same broadcast pivot as handleDispose, but
|
|
366
|
+
// for every session.
|
|
367
|
+
if (this.fenceCommit(conn)) {
|
|
368
|
+
conn.send({
|
|
369
|
+
type: FrameType.DISPOSE_ALL_ACK,
|
|
370
|
+
requestId: frame.requestId,
|
|
371
|
+
payload: encodeJsonPayload({}),
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
this.broadcastSessionListSnapshot();
|
|
375
|
+
})
|
|
376
|
+
.catch((err) => {
|
|
377
|
+
if (!this.fenceCommit(conn))
|
|
378
|
+
return;
|
|
379
|
+
this.replyNack(conn, frame.requestId, "internal-error", err instanceof Error ? err.message : String(err));
|
|
380
|
+
});
|
|
381
|
+
this.track(chain);
|
|
382
|
+
}
|
|
383
|
+
handleShutdownAll(conn, frame) {
|
|
384
|
+
/*
|
|
385
|
+
* By protocol, `shutdownAll` is detach-
|
|
386
|
+
* only: do NOT terminate the PTYs, just close the IPC link so the
|
|
387
|
+
* server stops getting events. We keep the engine alive so a future
|
|
388
|
+
* server reconnect can resume. The dedicated `terminateAll` CLI
|
|
389
|
+
* command is the way to actually stop sessions remotely.
|
|
390
|
+
*/
|
|
391
|
+
if (!this.fenceCommit(conn))
|
|
392
|
+
return;
|
|
393
|
+
conn.send({
|
|
394
|
+
type: FrameType.SHUTDOWN_ALL_ACK,
|
|
395
|
+
requestId: frame.requestId,
|
|
396
|
+
payload: encodeJsonPayload({}),
|
|
397
|
+
});
|
|
398
|
+
conn.evict("evicted", "server requested shutdownAll detach");
|
|
399
|
+
}
|
|
400
|
+
handleInitClient(conn, frame) {
|
|
401
|
+
const req = decodeJsonPayload(frame.payload);
|
|
402
|
+
/*
|
|
403
|
+
* Single-server invariant means there is exactly one server fanning
|
|
404
|
+
* the engine's per-session output to its WebSocket clients. The
|
|
405
|
+
* daemon's job is to spawn the PTY on first attach and pipe the
|
|
406
|
+
* engine's broadcasts back; per-client demuxing happens in the
|
|
407
|
+
* server. We register a no-op listener here because the global
|
|
408
|
+
* `onSessionData` subscription already delivers DATA frames.
|
|
409
|
+
*/
|
|
410
|
+
const chain = this.host
|
|
411
|
+
.initClient(req.sessionId, req.clientId, req.cols, req.rows, () => {
|
|
412
|
+
// Output is broadcast via the global onSessionData subscription --
|
|
413
|
+
// this listener is just a presence flag for InProcessPtyHost so
|
|
414
|
+
// it knows a client is attached and can run its scrollback dump.
|
|
415
|
+
}, req.attachToken)
|
|
416
|
+
.then((result) => {
|
|
417
|
+
if (!this.fenceCommit(conn))
|
|
418
|
+
return;
|
|
419
|
+
const ack = { accepted: result.ok };
|
|
420
|
+
conn.send({
|
|
421
|
+
type: FrameType.INIT_CLIENT_ACK,
|
|
422
|
+
requestId: frame.requestId,
|
|
423
|
+
payload: encodeJsonPayload(ack),
|
|
424
|
+
});
|
|
425
|
+
if (result.ok)
|
|
426
|
+
this.maybeBroadcastSessionUpdate(conn, req.sessionId);
|
|
427
|
+
})
|
|
428
|
+
.catch((err) => {
|
|
429
|
+
if (!this.fenceCommit(conn))
|
|
430
|
+
return;
|
|
431
|
+
this.replyNack(conn, frame.requestId, "internal-error", err instanceof Error ? err.message : String(err));
|
|
432
|
+
});
|
|
433
|
+
this.track(chain);
|
|
434
|
+
}
|
|
435
|
+
// --- fire-and-forget mutators (no ack, optimistic mirror reconciles via SESSION_UPDATE) ---
|
|
436
|
+
handleWrite(frame) {
|
|
437
|
+
/*
|
|
438
|
+
* PTY generation gate: payload is the generation-tagged stream variant
|
|
439
|
+
* (`[idLen:u8][sessionId][gen:u32 BE][raw bytes]`). `gen=0` is the
|
|
440
|
+
* sentinel meaning "no gating" -- pass undefined to the host so the
|
|
441
|
+
* gate stays open (initial pre-init-ack queued INPUT, legacy
|
|
442
|
+
* non-WS callers). Any other value flows into the host's drop
|
|
443
|
+
* gate; a mismatch with the live currentGeneration drops the
|
|
444
|
+
* write.
|
|
445
|
+
*/
|
|
446
|
+
let decoded;
|
|
447
|
+
try {
|
|
448
|
+
decoded = decodeGenerationStreamPayload(frame.payload);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
const data = decoded.data.toString("utf8");
|
|
454
|
+
this.host.write(decoded.sessionId, data, decoded.generation === 0 ? undefined : decoded.generation);
|
|
455
|
+
}
|
|
456
|
+
handleResize(frame) {
|
|
457
|
+
const req = decodeJsonPayload(frame.payload);
|
|
458
|
+
this.host.resize(req.sessionId, req.cols, req.rows);
|
|
459
|
+
}
|
|
460
|
+
handleRefresh(frame) {
|
|
461
|
+
const req = decodeJsonPayload(frame.payload);
|
|
462
|
+
this.host.refresh(req.sessionId);
|
|
463
|
+
}
|
|
464
|
+
handlePauseOutput(frame) {
|
|
465
|
+
const req = decodeJsonPayload(frame.payload);
|
|
466
|
+
this.host.pauseOutput(req.sessionId, req.clientId);
|
|
467
|
+
}
|
|
468
|
+
handleResumeOutput(frame) {
|
|
469
|
+
const req = decodeJsonPayload(frame.payload);
|
|
470
|
+
this.host.resumeOutput(req.sessionId, req.clientId);
|
|
471
|
+
}
|
|
472
|
+
handleDetachClient(frame) {
|
|
473
|
+
const req = decodeJsonPayload(frame.payload);
|
|
474
|
+
this.host.detachClient(req.sessionId, req.clientId, req.attachToken);
|
|
475
|
+
}
|
|
476
|
+
handleSetTitle(conn, frame) {
|
|
477
|
+
const req = decodeJsonPayload(frame.payload);
|
|
478
|
+
const ok = this.host.setTitle(req.sessionId, req.title, req.titleManual === true);
|
|
479
|
+
if (ok)
|
|
480
|
+
this.maybeBroadcastSessionUpdate(conn, req.sessionId);
|
|
481
|
+
}
|
|
482
|
+
handleSetPinned(conn, frame) {
|
|
483
|
+
const req = decodeJsonPayload(frame.payload);
|
|
484
|
+
const ok = this.host.setPinned(req.sessionId, req.pinned);
|
|
485
|
+
if (ok)
|
|
486
|
+
this.maybeBroadcastSessionUpdate(conn, req.sessionId);
|
|
487
|
+
}
|
|
488
|
+
handleSetPtyEnv(frame) {
|
|
489
|
+
const req = decodeJsonPayload(frame.payload);
|
|
490
|
+
this.host.setPtyEnv(req.env);
|
|
491
|
+
}
|
|
492
|
+
/*
|
|
493
|
+
* daemon state ownership -- adopt the server's project-domain snapshot and persist it.
|
|
494
|
+
* The daemon is the sole writer of state.json; the server forwards
|
|
495
|
+
* its in-memory `projects` / `projectStates` / `serviceConfig` /
|
|
496
|
+
* `paneCommands` / `ideCommands` here
|
|
497
|
+
* whenever the in-store debounce timer fires. We use `internalMutate`
|
|
498
|
+
* because (a) in remote-mode the daemon's session-domain guard is
|
|
499
|
+
* never actually flipped on (only server-side copies set it) but the
|
|
500
|
+
* intent is identical to the orphan reconciler at boot -- adopt then
|
|
501
|
+
* flush; (b) it routes through the existing scheduleFlush so the
|
|
502
|
+
* daemon's own session writes coalesce with this snapshot. ACK gates
|
|
503
|
+
* on the flush completing so the server's request promise reflects
|
|
504
|
+
* IO success.
|
|
505
|
+
*/
|
|
506
|
+
handlePersistProjectDomains(conn, frame) {
|
|
507
|
+
if (!this.store) {
|
|
508
|
+
this.replyNack(conn, frame.requestId, "persist-failed", "daemon has no AppStateStore configured for persistence");
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
/*
|
|
512
|
+
* -- three-step fence-and-drain protocol so
|
|
513
|
+
* an evicted-mid-drain request cannot clobber the new server's
|
|
514
|
+
* snapshot:
|
|
515
|
+
*
|
|
516
|
+
* 1. fence-on-arrival: cheap reject for already-evicted senders.
|
|
517
|
+
* 2. drain-first: await any in-flight write (previous PERSIST
|
|
518
|
+
* or daemon session-domain debounce) so the
|
|
519
|
+
* next mutate+write is atomic from the
|
|
520
|
+
* store's POV.
|
|
521
|
+
* 3. fence-after-drain: if the conn was evicted while we awaited
|
|
522
|
+
* the drain, the in-flight snapshot is no
|
|
523
|
+
* longer authoritative -- drop it silently.
|
|
524
|
+
* The new server already has its own state
|
|
525
|
+
* and will send a fresh PERSIST.
|
|
526
|
+
*
|
|
527
|
+
* Mutate+write happens between (3) and the post-handler fence; both
|
|
528
|
+
* are sync (internalMutate is sync; daemon-store write() is
|
|
529
|
+
* writeFileSync, no delegate), so eviction cannot slip between
|
|
530
|
+
* them. Project-domain snapshots are SERVER-owned, so adopting an
|
|
531
|
+
* evicted snapshot would roll back project / projectStates /
|
|
532
|
+
* serviceConfig / paneCommands / ideCommands writes the new server already
|
|
533
|
+
* made.
|
|
534
|
+
*/
|
|
535
|
+
if (!this.fenceCommit(conn))
|
|
536
|
+
return;
|
|
537
|
+
const req = decodeJsonPayload(frame.payload);
|
|
538
|
+
const store = this.store;
|
|
539
|
+
const chain = (async () => {
|
|
540
|
+
await store.flush();
|
|
541
|
+
if (!this.fenceCommit(conn))
|
|
542
|
+
return "evicted-during-drain";
|
|
543
|
+
store.internalMutate((state) => {
|
|
544
|
+
state.projects = req.projects;
|
|
545
|
+
state.projectStates = req.projectStates;
|
|
546
|
+
state.serviceConfig = req.serviceConfig;
|
|
547
|
+
if (Array.isArray(req.paneCommands)) {
|
|
548
|
+
state.paneCommands = req.paneCommands;
|
|
549
|
+
}
|
|
550
|
+
if (Array.isArray(req.ideCommands)) {
|
|
551
|
+
state.ideCommands = req.ideCommands;
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
await store.flush();
|
|
555
|
+
return "committed";
|
|
556
|
+
})()
|
|
557
|
+
.then((result) => {
|
|
558
|
+
if (result === "evicted-during-drain")
|
|
559
|
+
return;
|
|
560
|
+
if (!this.fenceCommit(conn))
|
|
561
|
+
return;
|
|
562
|
+
conn.send({
|
|
563
|
+
type: FrameType.PERSIST_PROJECT_DOMAINS_ACK,
|
|
564
|
+
requestId: frame.requestId,
|
|
565
|
+
payload: encodeJsonPayload({}),
|
|
566
|
+
});
|
|
567
|
+
})
|
|
568
|
+
.catch((err) => {
|
|
569
|
+
if (!this.fenceCommit(conn))
|
|
570
|
+
return;
|
|
571
|
+
this.replyNack(conn, frame.requestId, "persist-failed", err instanceof Error ? err.message : String(err));
|
|
572
|
+
});
|
|
573
|
+
this.track(chain);
|
|
574
|
+
}
|
|
575
|
+
// --- broadcast helpers ---
|
|
576
|
+
broadcastJson(type, requestId, payload) {
|
|
577
|
+
const conn = this.currentServer;
|
|
578
|
+
if (!conn || conn.getState() !== "ready")
|
|
579
|
+
return;
|
|
580
|
+
conn.send({ type, requestId, payload: encodeJsonPayload(payload) });
|
|
581
|
+
}
|
|
582
|
+
broadcastStream(type, sessionId, data) {
|
|
583
|
+
const conn = this.currentServer;
|
|
584
|
+
if (!conn || conn.getState() !== "ready")
|
|
585
|
+
return;
|
|
586
|
+
conn.send({
|
|
587
|
+
type,
|
|
588
|
+
requestId: 0,
|
|
589
|
+
payload: encodeStreamPayload(sessionId, Buffer.from(data, "utf8")),
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
broadcastDataStream(sessionId, data, generation) {
|
|
593
|
+
const conn = this.currentServer;
|
|
594
|
+
if (!conn || conn.getState() !== "ready")
|
|
595
|
+
return;
|
|
596
|
+
conn.send({
|
|
597
|
+
type: FrameType.DATA,
|
|
598
|
+
requestId: 0,
|
|
599
|
+
payload: encodeGenerationStreamPayload(sessionId, Buffer.from(data, "utf8"), generation),
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
broadcastSessionUpdate(session) {
|
|
603
|
+
this.broadcastJson(FrameType.SESSION_UPDATE, 0, {
|
|
604
|
+
session,
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Send a fresh SESSION_LIST snapshot to the current peer. Used by
|
|
609
|
+
* dispose paths because InProcessPtyHost.dispose() removes the session
|
|
610
|
+
* silently, so neither SESSION_UPDATE nor SESSION_EXIT carries the
|
|
611
|
+
* removal -- we instead resync via a full snapshot. Cheap: list() is
|
|
612
|
+
* just a Map values() copy.
|
|
613
|
+
*/
|
|
614
|
+
broadcastSessionListSnapshot() {
|
|
615
|
+
this.broadcastJson(FrameType.SESSION_LIST, 0, {
|
|
616
|
+
sessions: this.host.list(),
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
maybeBroadcastSessionUpdate(conn, sessionId) {
|
|
620
|
+
if (this.currentServer !== conn)
|
|
621
|
+
return;
|
|
622
|
+
const session = this.host.get(sessionId);
|
|
623
|
+
if (session)
|
|
624
|
+
this.broadcastSessionUpdate(session);
|
|
625
|
+
}
|
|
626
|
+
// --- fence + nack helpers ---
|
|
627
|
+
/**
|
|
628
|
+
* Stage-3 fence (by design): called from async ack callbacks. If the
|
|
629
|
+
* connection that issued the request is no longer current, drop the
|
|
630
|
+
* ack -- its server has been evicted and any reply would arrive with
|
|
631
|
+
* a stale (connectionId, generation) pair the new peer would reject.
|
|
632
|
+
*/
|
|
633
|
+
fenceCommit(conn) {
|
|
634
|
+
return this.currentServer === conn && conn.getState() === "ready";
|
|
635
|
+
}
|
|
636
|
+
replyNack(conn, requestId, code, message) {
|
|
637
|
+
conn.send({
|
|
638
|
+
type: FrameType.NACK,
|
|
639
|
+
requestId,
|
|
640
|
+
payload: encodeJsonPayload({ code, message }),
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
handleConnectionClosed(conn) {
|
|
644
|
+
if (this.currentServer === conn)
|
|
645
|
+
this.currentServer = null;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/pty/host-daemon/daemon.ts"],"names":[],"mappings":"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"}
|