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,611 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* -- `parasor-pty-host` daemon bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* `bootstrapDaemon` wires the runtime path layer (paths.ts), the
|
|
5
|
+
* single-instance lock layer (lockfile.ts), the IPC accept loop, and the
|
|
6
|
+
* `PtyHostDaemon` core into one start/stop lifecycle. It does *not* parse
|
|
7
|
+
* argv / write logs / fork to background -- those are the entry-point's
|
|
8
|
+
* job (entry.ts) so tests can drive bootstrap without touching the host
|
|
9
|
+
* process state.
|
|
10
|
+
*
|
|
11
|
+
* Design notes:
|
|
12
|
+
* - `acceptUnix` (default true) listens on `paths.socketPath`. Tests
|
|
13
|
+
* pass `acceptUnix: false` + `acceptTcpPort: 0` to avoid macOS
|
|
14
|
+
* sandbox-exec restrictions on Unix-socket bind() (Mach lookup).
|
|
15
|
+
* - SIGTERM/SIGINT trigger graceful shutdown: dispose daemon (drops
|
|
16
|
+
* current server, leaves underlying PTYs alone -- that's the daemon-mode
|
|
17
|
+
* contract), close listening socket, dispose host, drop
|
|
18
|
+
* lockfile/socket. Idempotent -- repeated signals are a no-op.
|
|
19
|
+
* - Caller-supplied `host` overrides the default in-process host.
|
|
20
|
+
* Useful for tests that bring their own `PtyHost` mock.
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync, unlinkSync } from "node:fs";
|
|
23
|
+
import * as net from "node:net";
|
|
24
|
+
import { homedir } from "node:os";
|
|
25
|
+
import { join as pathJoin } from "node:path";
|
|
26
|
+
import { readAndClearDaemonShutdownMarker, writeDaemonShutdownMarker, } from "../../bootstrap/shutdown-marker.js";
|
|
27
|
+
import { InProcessPtyHost } from "../in-process-host.js";
|
|
28
|
+
import { PtyHostDaemon } from "./daemon.js";
|
|
29
|
+
import { acquireDaemonLock, DaemonAlreadyRunningError, } from "./lockfile.js";
|
|
30
|
+
import { acquireAppStateOwnership, markerFileFor, } from "./mode-marker.js";
|
|
31
|
+
import { reconcileSessionRecords } from "./orphan-cleanup.js";
|
|
32
|
+
import { ensureRuntimeDir, resolveDaemonPaths, } from "./paths.js";
|
|
33
|
+
function defaultAppStateDir(env = process.env) {
|
|
34
|
+
return env.PARASOR_CONFIG_DIR ?? pathJoin(homedir(), ".config", "parasor");
|
|
35
|
+
}
|
|
36
|
+
const DEFAULT_SIGNALS = ["SIGTERM", "SIGINT"];
|
|
37
|
+
export async function bootstrapDaemon(opts = {}) {
|
|
38
|
+
const paths = opts.paths ?? resolveDaemonPaths();
|
|
39
|
+
const log = opts.log ?? (() => { });
|
|
40
|
+
const acceptUnix = opts.acceptUnix ?? true;
|
|
41
|
+
const acquire = opts.acquireLock ?? true;
|
|
42
|
+
ensureRuntimeDir(paths.runtimeDir);
|
|
43
|
+
/*
|
|
44
|
+
* refuse to start if a live in-process server already
|
|
45
|
+
* owns the AppStateStore. The check is done *after* the daemon lock
|
|
46
|
+
* is acquired so two daemons racing on the same runtime dir cannot
|
|
47
|
+
* both write the marker and then have the loser's lock-failure path
|
|
48
|
+
* unlink the winner's marker (reviewed for correctness). Lock acquisition
|
|
49
|
+
* is the actual mutex; marker reads/writes piggy-back its serialisation.
|
|
50
|
+
*
|
|
51
|
+
* The marker file lives in the AppState dir (`paths.appStateDir`),
|
|
52
|
+
* not the daemon runtime dir -- it must collide with whatever path
|
|
53
|
+
* the in-process server uses for state.json, regardless of the
|
|
54
|
+
* daemon's `XDG_RUNTIME_DIR` / `PARASOR_PTY_SOCK` overrides
|
|
55
|
+
* (reviewed for correctness).
|
|
56
|
+
*/
|
|
57
|
+
let lock = null;
|
|
58
|
+
if (acquire) {
|
|
59
|
+
lock = await acquireDaemonLock(paths);
|
|
60
|
+
}
|
|
61
|
+
/*
|
|
62
|
+
* Design contract: the marker file lives next to
|
|
63
|
+
* whichever `state.json` *this* store will open. We derive the dir
|
|
64
|
+
* without instantiating the store (creating it triggers
|
|
65
|
+
* `mkdir`/`load` side effects we want sequenced after the conflict
|
|
66
|
+
* check):
|
|
67
|
+
* 1) explicit `opts.appStateDir` (tests / custom layouts)
|
|
68
|
+
* 2) `opts.store.getDir()` if a store was supplied
|
|
69
|
+
* 3) `PARASOR_CONFIG_DIR` env or `~/.config/parasor` (matches
|
|
70
|
+
* `AppStateStore`'s own default)
|
|
71
|
+
* `acquireAppStateOwnership` holds a proper-lockfile advisory lock
|
|
72
|
+
* on the marker file for the daemon's lifetime -- the same primitive
|
|
73
|
+
* we use for the daemon-runtime lockfile. The lock is the mutex; the
|
|
74
|
+
* marker body is informational diagnostics for `parasor doctor`.
|
|
75
|
+
*/
|
|
76
|
+
const enforceMarker = opts.enforceModeMarker ?? true;
|
|
77
|
+
const appStateDir = opts.appStateDir ??
|
|
78
|
+
(opts.store && typeof opts.store.getDir === "function"
|
|
79
|
+
? opts.store.getDir()
|
|
80
|
+
: defaultAppStateDir());
|
|
81
|
+
const markerFile = markerFileFor(appStateDir);
|
|
82
|
+
let appStateOwner = null;
|
|
83
|
+
if (enforceMarker) {
|
|
84
|
+
try {
|
|
85
|
+
appStateOwner = await acquireAppStateOwnership(markerFile, "daemon");
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
if (lock)
|
|
89
|
+
await lock.release();
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/*
|
|
94
|
+
* Socket probe -- defensive layer over `proper-lockfile`.
|
|
95
|
+
*
|
|
96
|
+
* proper-lockfile is mtime + stale-timeout based, not kernel flock. A
|
|
97
|
+
* live daemon whose event loop is stalled, whose host machine slept, or
|
|
98
|
+
* whose lockfile mtime got skewed by a clock jump can have its lock
|
|
99
|
+
* declared stale even though it is still bound to `paths.socketPath`
|
|
100
|
+
* and still accepting connections. Without this probe two daemons
|
|
101
|
+
* could end up sharing the runtime dir (split-brain).
|
|
102
|
+
*
|
|
103
|
+
* The probe is the *only* signal we trust here: kernel-bound sockets
|
|
104
|
+
* survive sleep, so an alive `connect()` is unambiguous proof that a
|
|
105
|
+
* daemon is listening. Conversely ECONNREFUSED / ENOENT prove the file
|
|
106
|
+
* is a leftover with no listener -- exactly the recycled-PID and
|
|
107
|
+
* crash-restart paths we want to allow.
|
|
108
|
+
*/
|
|
109
|
+
if (acceptUnix && existsSync(paths.socketPath)) {
|
|
110
|
+
if (await isSocketActive(paths.socketPath, 200)) {
|
|
111
|
+
if (lock)
|
|
112
|
+
await lock.release();
|
|
113
|
+
if (appStateOwner)
|
|
114
|
+
await appStateOwner.release();
|
|
115
|
+
throw new DaemonAlreadyRunningError(-1, paths.pidFile);
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
unlinkSync(paths.socketPath);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (lock)
|
|
122
|
+
await lock.release();
|
|
123
|
+
if (appStateOwner)
|
|
124
|
+
await appStateOwner.release();
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const ownsHost = opts.host === undefined;
|
|
129
|
+
let store = opts.store;
|
|
130
|
+
let host;
|
|
131
|
+
let daemonStartedAt = null;
|
|
132
|
+
if (opts.host) {
|
|
133
|
+
host = opts.host;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
if (!store) {
|
|
137
|
+
// Default store path matches AppStateStore's own default. We pass
|
|
138
|
+
// the default explicitly so tests can override paths.host without
|
|
139
|
+
// also having to plumb a store.
|
|
140
|
+
const { AppStateStore: AppStateStoreCtor } = await import("../../state/app-state.js");
|
|
141
|
+
store = new AppStateStoreCtor({ dir: appStateDir });
|
|
142
|
+
}
|
|
143
|
+
/*
|
|
144
|
+
* -- every SessionRecord written by this
|
|
145
|
+
* daemon carries our (pid, startedAt) tuple. orphan-cleanup uses
|
|
146
|
+
* the tuple at next-boot to distinguish records this generation
|
|
147
|
+
* just created from records inherited from a previous daemon. The
|
|
148
|
+
* timestamp is captured *here* (lock acquired, before any record
|
|
149
|
+
* mutation) so it is a stable identifier for the daemon's lifetime.
|
|
150
|
+
* Reused by reconcileSessionRecords below so both the writer-side
|
|
151
|
+
* stamp and the boot-time orphan check see the exact same string --
|
|
152
|
+
* a sub-ms gap between two `new Date()` calls could otherwise mark
|
|
153
|
+
* this daemon's own freshly-written records as orphans.
|
|
154
|
+
*/
|
|
155
|
+
daemonStartedAt = new Date().toISOString();
|
|
156
|
+
host = new InProcessPtyHost(store, null, {
|
|
157
|
+
pid: process.pid,
|
|
158
|
+
startedAt: daemonStartedAt,
|
|
159
|
+
}, opts.uploadsDir ?? null);
|
|
160
|
+
}
|
|
161
|
+
/*
|
|
162
|
+
* orphan reconciliation runs *before* we accept any IPC
|
|
163
|
+
* connections. Records left behind by a previous daemon generation
|
|
164
|
+
* (different (pid, startedAt) tuple) get marked "orphaned" if their
|
|
165
|
+
* underlying PTY is still alive, "lost" otherwise. The daemon owns
|
|
166
|
+
* the writer side, so we go through `internalMutate` to bypass the
|
|
167
|
+
* read-only mirror guard set by createPtyHost("remote").
|
|
168
|
+
*
|
|
169
|
+
* The reconcile only runs in the default ownsHost path: a caller-
|
|
170
|
+
* supplied `host` (test fixture, mock) brings its own state model
|
|
171
|
+
* and we don't presume access to its sessionRecords array.
|
|
172
|
+
*/
|
|
173
|
+
if (ownsHost && store) {
|
|
174
|
+
const before = store.get().sessionRecords;
|
|
175
|
+
const result = reconcileSessionRecords(before, {
|
|
176
|
+
currentDaemonPid: process.pid,
|
|
177
|
+
currentDaemonStartedAt: daemonStartedAt ?? new Date().toISOString(),
|
|
178
|
+
});
|
|
179
|
+
if (result.transitions.some((t) => t.type === "orphaned" || t.type === "lost")) {
|
|
180
|
+
store.internalMutate((s) => {
|
|
181
|
+
s.sessionRecords = result.records;
|
|
182
|
+
});
|
|
183
|
+
for (const t of result.transitions) {
|
|
184
|
+
if (t.type === "orphaned") {
|
|
185
|
+
log(`orphan-reconcile: session=${t.id} -> orphaned (previous daemon pid=${t.previousDaemonPid})`);
|
|
186
|
+
}
|
|
187
|
+
else if (t.type === "lost") {
|
|
188
|
+
log(`orphan-reconcile: session=${t.id} -> lost (${t.reason})`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/*
|
|
194
|
+
* -- daemon-side session continuity. The daemon
|
|
195
|
+
* persists sessions (state.json) so a kill-and-relaunch cycle preserves
|
|
196
|
+
* the user's tab list. The marker file at `<appStateDir>/daemon-shutdown.marker`
|
|
197
|
+
* lets us distinguish a clean SIGTERM (graceful) from an abrupt SIGKILL/OOM
|
|
198
|
+
* (crash); sessions that already carry an `endReason` (process exited
|
|
199
|
+
* before shutdown, or `shutdownAll` already stamped daemon-graceful)
|
|
200
|
+
* keep theirs untouched. Mirrors the index.ts:220 server-side path.
|
|
201
|
+
*/
|
|
202
|
+
if (ownsHost && store) {
|
|
203
|
+
const wasGracefulShutdown = readAndClearDaemonShutdownMarker(appStateDir);
|
|
204
|
+
for (const session of store.get().sessions) {
|
|
205
|
+
host.loadPersistedSession(session, wasGracefulShutdown);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const daemon = new PtyHostDaemon({ host, store });
|
|
209
|
+
const servers = [];
|
|
210
|
+
let tcpPort = null;
|
|
211
|
+
/*
|
|
212
|
+
* Track every accepted socket so shutdown can force-close them. Without
|
|
213
|
+
* this, a peer that connects but never sends HELLO is invisible to
|
|
214
|
+
* `daemon.dispose()` (which only knows about the *current* peer) and
|
|
215
|
+
* keeps `net.Server.close()` waiting forever -- a single idle probe
|
|
216
|
+
* pins SIGTERM and prevents lockfile/socket cleanup. See the shutdown-safety guard
|
|
217
|
+
* "Daemon shutdown can hang forever on idle pre-HELLO sockets".
|
|
218
|
+
*/
|
|
219
|
+
const accepted = new Set();
|
|
220
|
+
const trackSocket = (socket) => {
|
|
221
|
+
accepted.add(socket);
|
|
222
|
+
socket.once("close", () => accepted.delete(socket));
|
|
223
|
+
};
|
|
224
|
+
const onConnection = (socket) => {
|
|
225
|
+
trackSocket(socket);
|
|
226
|
+
try {
|
|
227
|
+
daemon.acceptConnection(socket);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
log(`accept error: ${err.message}`);
|
|
231
|
+
socket.destroy();
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
/*
|
|
235
|
+
* listen() can fail (EADDRINUSE on the TCP port,
|
|
236
|
+
* EACCES on the Unix path, ENOSPC, …) AFTER we've taken the lockfile
|
|
237
|
+
* and the AppState owner marker. Without explicit cleanup, a failed
|
|
238
|
+
* boot leaves the lockfile pinning the runtime dir for ~60s
|
|
239
|
+
* (proper-lockfile's stale window) and the marker preventing any
|
|
240
|
+
* server-side reconcile. Wrap the listen path so any reject runs the
|
|
241
|
+
* full release sequence before rethrowing.
|
|
242
|
+
*/
|
|
243
|
+
const releaseAcquiredResources = async () => {
|
|
244
|
+
for (const s of servers) {
|
|
245
|
+
try {
|
|
246
|
+
await new Promise((resolve) => s.close(() => resolve()));
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
/* best-effort */
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (acceptUnix && existsSync(paths.socketPath)) {
|
|
253
|
+
try {
|
|
254
|
+
unlinkSync(paths.socketPath);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
/* file may have been unlinked by failing listen() itself */
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (appStateOwner) {
|
|
261
|
+
try {
|
|
262
|
+
await appStateOwner.release();
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
/* best-effort */
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (lock) {
|
|
269
|
+
try {
|
|
270
|
+
await lock.release();
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
/* best-effort */
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
try {
|
|
278
|
+
if (acceptUnix) {
|
|
279
|
+
const unixServer = net.createServer(onConnection);
|
|
280
|
+
await new Promise((resolve, reject) => {
|
|
281
|
+
unixServer.once("error", reject);
|
|
282
|
+
unixServer.listen(paths.socketPath, () => {
|
|
283
|
+
unixServer.removeListener("error", reject);
|
|
284
|
+
resolve();
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
servers.push(unixServer);
|
|
288
|
+
}
|
|
289
|
+
if (typeof opts.acceptTcpPort === "number" && opts.acceptTcpPort >= 0) {
|
|
290
|
+
const tcpServer = net.createServer(onConnection);
|
|
291
|
+
await new Promise((resolve, reject) => {
|
|
292
|
+
tcpServer.once("error", reject);
|
|
293
|
+
tcpServer.listen(opts.acceptTcpPort, "127.0.0.1", () => {
|
|
294
|
+
tcpServer.removeListener("error", reject);
|
|
295
|
+
resolve();
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
const addr = tcpServer.address();
|
|
299
|
+
if (addr && typeof addr === "object")
|
|
300
|
+
tcpPort = addr.port;
|
|
301
|
+
servers.push(tcpServer);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (listenErr) {
|
|
305
|
+
await releaseAcquiredResources();
|
|
306
|
+
throw listenErr;
|
|
307
|
+
}
|
|
308
|
+
let stopped = false;
|
|
309
|
+
const shutdown = async (reason = "external") => {
|
|
310
|
+
if (stopped)
|
|
311
|
+
return;
|
|
312
|
+
stopped = true;
|
|
313
|
+
log(`shutdown reason=${reason}`);
|
|
314
|
+
daemon.dispose();
|
|
315
|
+
/*
|
|
316
|
+
* Destroy every accepted socket *before* awaiting server.close().
|
|
317
|
+
* Pre-HELLO probes that never became `currentServer` are invisible
|
|
318
|
+
* to daemon.dispose() -- without explicit destroy here, server.close()
|
|
319
|
+
* would block until those sockets close themselves and our shutdown
|
|
320
|
+
* could hang indefinitely (idle probe = no FIN). daemon.dispose()
|
|
321
|
+
* already FIN'd `currentServer`'s socket via evict(), so destroying
|
|
322
|
+
* it again is idempotent.
|
|
323
|
+
*/
|
|
324
|
+
for (const sock of accepted) {
|
|
325
|
+
try {
|
|
326
|
+
sock.destroy();
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
/* socket already in error state */
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
accepted.clear();
|
|
333
|
+
await Promise.all(servers.map((s) => new Promise((resolve) => {
|
|
334
|
+
s.close(() => resolve());
|
|
335
|
+
})));
|
|
336
|
+
if (acceptUnix && existsSync(paths.socketPath)) {
|
|
337
|
+
try {
|
|
338
|
+
unlinkSync(paths.socketPath);
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
/* best-effort */
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/*
|
|
345
|
+
* -- drain in-flight host-call chains before
|
|
346
|
+
* tearing the host down. By this point `daemon.dispose()` has
|
|
347
|
+
* flagged shutdown and evicted the current peer, and every accepted
|
|
348
|
+
* socket is destroyed, so no new requests can be handled. The
|
|
349
|
+
* remaining in-flight Promises (CREATE/RESTART/DISPOSE/INIT_CLIENT
|
|
350
|
+
* that were already mid-await on the host) still need to settle:
|
|
351
|
+
* their `.then` handlers persist sessions to state.json. Without
|
|
352
|
+
* this drain a CREATE that won the race against SIGTERM would
|
|
353
|
+
* spawn its PTY *after* shutdownAll iterated `this.sessions`,
|
|
354
|
+
* leaving an orphan child the next boot cannot reclaim.
|
|
355
|
+
*/
|
|
356
|
+
let drained = true;
|
|
357
|
+
try {
|
|
358
|
+
drained = await daemon.drain(opts.drainTimeoutMs);
|
|
359
|
+
if (!drained) {
|
|
360
|
+
log("daemon drain timeout -- proceeding with shutdownAll, in-flight host calls may leak");
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
drained = false;
|
|
365
|
+
log(`daemon drain error: ${err.message}`);
|
|
366
|
+
}
|
|
367
|
+
/*
|
|
368
|
+
* Daemon graceful shutdown terminates every
|
|
369
|
+
* owned PTY using a deterministic SIGTERM -> 5s grace -> SIGKILL
|
|
370
|
+
* escalation. This is *not* the server-side `detach()` semantic
|
|
371
|
+
* used when the server process shuts down and sessions stay alive inside
|
|
372
|
+
* the daemon. Here we are the daemon process exiting -- once we go the
|
|
373
|
+
* master fds close and PTY children receive SIGHUP at unpredictable
|
|
374
|
+
* timing, so we terminate the process groups ourselves first.
|
|
375
|
+
*
|
|
376
|
+
* Algorithm:
|
|
377
|
+
* 1. Snapshot every (pid, pgid) we have written to AppState.
|
|
378
|
+
* 2. Call host.shutdownAll({type:"daemon-graceful"}) -- this
|
|
379
|
+
* issues node-pty's default SIGHUP via `proc.kill()` for each
|
|
380
|
+
* live session AND stamps every session in state.json with
|
|
381
|
+
* state="ended" + endReason="daemon-graceful" so the next
|
|
382
|
+
* daemon boot can restore them as terminated tabs (with
|
|
383
|
+
* scrollback) instead of losing them. Distinct from
|
|
384
|
+
* `disposeAll()` which destructively removes sessions.
|
|
385
|
+
* 3. Poll `kill(pid, 0)` every 250ms for 5s. Any pid still alive
|
|
386
|
+
* at the deadline gets `kill(-pgid, "SIGKILL")` -- process-
|
|
387
|
+
* group kill so foreground children inherit the death.
|
|
388
|
+
* 4. Write the daemon-shutdown marker so the next boot knows the
|
|
389
|
+
* previous exit was graceful (sessions without an existing
|
|
390
|
+
* endReason get `daemon-graceful` instead of `daemon-crash`).
|
|
391
|
+
* 5. Best-effort logging only; we never fail shutdown over a
|
|
392
|
+
* stuck child (the lockfile/socket cleanup must still run).
|
|
393
|
+
*/
|
|
394
|
+
if (ownsHost && "shutdownAll" in host) {
|
|
395
|
+
const survivors = [];
|
|
396
|
+
if (store) {
|
|
397
|
+
for (const r of store.get().sessionRecords) {
|
|
398
|
+
if (r.state === "running" && r.pid !== null && r.pgid !== null) {
|
|
399
|
+
survivors.push({ pid: r.pid, pgid: r.pgid, id: r.id });
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
try {
|
|
404
|
+
await host.shutdownAll({
|
|
405
|
+
type: "daemon-graceful",
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
catch (err) {
|
|
409
|
+
log(`host shutdownAll error: ${err.message}`);
|
|
410
|
+
}
|
|
411
|
+
/*
|
|
412
|
+
* -- `shutdownAll` mutates every session's
|
|
413
|
+
* `state` and `endReason` via `store.mutateSessions()`, which schedules a
|
|
414
|
+
* debounced flush (300ms by default). The marker write below is
|
|
415
|
+
* the post-condition users observe after SIGTERM; if `store.destroy()`
|
|
416
|
+
* runs before the timer fires, the cancellation drops every "ended
|
|
417
|
+
* + daemon-graceful" mutation and the next boot reads stale
|
|
418
|
+
* "running" sessions stamped with `daemon-crash` on absent marker --
|
|
419
|
+
* a clean shutdown gets misread as a crash. Force the writes through
|
|
420
|
+
* synchronously here so state.json reflects daemon-graceful before
|
|
421
|
+
* we touch the marker or the store. Track success: on flush failure
|
|
422
|
+
* (ENOSPC/EIO) we MUST skip the marker so the next boot does not
|
|
423
|
+
* see stale "running" rows beside a graceful marker. The conservative
|
|
424
|
+
* side is "treat as crash".
|
|
425
|
+
*/
|
|
426
|
+
let stateFlushed = true;
|
|
427
|
+
if (store && typeof store.flush === "function") {
|
|
428
|
+
try {
|
|
429
|
+
await store.flush();
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
stateFlushed = false;
|
|
433
|
+
log(`store flush error: ${err.message}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// Poll-then-SIGKILL escalation. Skip entirely when no survivors.
|
|
437
|
+
if (survivors.length > 0) {
|
|
438
|
+
const graceMs = opts.shutdownGraceMs ?? 5000;
|
|
439
|
+
const pollMs = 250;
|
|
440
|
+
const polls = Math.max(1, Math.ceil(graceMs / pollMs));
|
|
441
|
+
const sleep = opts.sleep ??
|
|
442
|
+
((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
443
|
+
const kill = opts.killProcess ?? defaultKill;
|
|
444
|
+
for (let i = 0; i < polls; i++) {
|
|
445
|
+
if (!survivors.some((s) => kill(s.pid, 0)))
|
|
446
|
+
break;
|
|
447
|
+
if (i < polls - 1)
|
|
448
|
+
await sleep(pollMs);
|
|
449
|
+
}
|
|
450
|
+
for (const s of survivors) {
|
|
451
|
+
if (!kill(s.pid, 0))
|
|
452
|
+
continue;
|
|
453
|
+
// kill(-pgid, SIGKILL) -- negative pid signals the whole
|
|
454
|
+
// process group, catching foreground children that survive
|
|
455
|
+
// the shell exit (long-running grep, vim, …).
|
|
456
|
+
const ok = kill(-s.pgid, "SIGKILL");
|
|
457
|
+
log(`host SIGKILL pid=${s.pid} pgid=${s.pgid} session=${s.id} ${ok ? "ok" : "failed"}`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
/*
|
|
461
|
+
* Write the marker AFTER PTY teardown completes. The marker is
|
|
462
|
+
* the post-condition of "graceful exit was reached"; if we'd
|
|
463
|
+
* crashed mid-shutdownAll the marker would not be written and
|
|
464
|
+
* the next boot would correctly treat orphan-risk sessions as
|
|
465
|
+
* `daemon-crash`. Skip when:
|
|
466
|
+
* - state flush failed: in-memory "ended" mutation never reached
|
|
467
|
+
* state.json, so the next boot would pair `running` rows with a
|
|
468
|
+
* graceful marker.
|
|
469
|
+
* - drain timed out: an in-flight
|
|
470
|
+
* CREATE / INIT_CLIENT can settle *after* shutdownAll snapshotted
|
|
471
|
+
* `this.sessions`, potentially writing a fresh "running" row that
|
|
472
|
+
* shutdownAll never saw -- the same orphan race the drain was
|
|
473
|
+
* supposed to close, just shifted to the timeout window. Treat
|
|
474
|
+
* as crash so the orphan-cleanup reconciler runs on next boot.
|
|
475
|
+
* Best-effort otherwise -- a write failure is logged but never
|
|
476
|
+
* blocks shutdown (worst case: graceful is misread as crash,
|
|
477
|
+
* conservative side).
|
|
478
|
+
*/
|
|
479
|
+
if (!stateFlushed) {
|
|
480
|
+
log("daemon-shutdown marker skipped -- state flush failed");
|
|
481
|
+
}
|
|
482
|
+
else if (!drained) {
|
|
483
|
+
log("daemon-shutdown marker skipped -- drain timeout");
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
try {
|
|
487
|
+
writeDaemonShutdownMarker(appStateDir);
|
|
488
|
+
}
|
|
489
|
+
catch (err) {
|
|
490
|
+
log(`daemon-shutdown marker write error: ${err.message}`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
if (ownsHost && store && "destroy" in store) {
|
|
495
|
+
try {
|
|
496
|
+
store.destroy();
|
|
497
|
+
}
|
|
498
|
+
catch (err) {
|
|
499
|
+
log(`store destroy error: ${err.message}`);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
if (lock) {
|
|
503
|
+
try {
|
|
504
|
+
await lock.release();
|
|
505
|
+
}
|
|
506
|
+
catch (err) {
|
|
507
|
+
log(`lock release error: ${err.message}`);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
if (appStateOwner) {
|
|
511
|
+
try {
|
|
512
|
+
await appStateOwner.release();
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
log(`appstate owner release error: ${err.message}`);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
for (const sig of installedSignals) {
|
|
519
|
+
process.removeListener(sig, signalHandler);
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
const signals = opts.signals ?? DEFAULT_SIGNALS;
|
|
523
|
+
const installedSignals = [];
|
|
524
|
+
const signalHandler = (signal) => {
|
|
525
|
+
void shutdown(signal);
|
|
526
|
+
};
|
|
527
|
+
for (const sig of signals) {
|
|
528
|
+
process.on(sig, signalHandler);
|
|
529
|
+
installedSignals.push(sig);
|
|
530
|
+
}
|
|
531
|
+
return { daemon, paths, tcpPort, shutdown };
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Default `kill(pid, signal)` for the SIGTERM->SIGKILL escalation.
|
|
535
|
+
* Returns true when the process exists (or `EPERM` -- process exists,
|
|
536
|
+
* but we lack permission, which is still "alive" for our purposes),
|
|
537
|
+
* false on `ESRCH` / unknown pid. Test seam injects a deterministic
|
|
538
|
+
* spy in place of this so escalation can be driven without a real
|
|
539
|
+
* child process under sandbox.
|
|
540
|
+
*/
|
|
541
|
+
function defaultKill(pid, signal) {
|
|
542
|
+
try {
|
|
543
|
+
process.kill(pid, signal);
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
546
|
+
catch (err) {
|
|
547
|
+
return err.code === "EPERM";
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Probes a Unix-domain socket path with a non-blocking connect.
|
|
552
|
+
*
|
|
553
|
+
* - `connect` event -> true (= a daemon is listening and accepted SYN)
|
|
554
|
+
* - `error` event -> false (ECONNREFUSED / ENOENT / etc. -- file is
|
|
555
|
+
* a stale leftover, kernel decides instantly)
|
|
556
|
+
* - timeout exceeded -> true (treated as "live but stalled", *not*
|
|
557
|
+
* "dead". Fail-closed for split-brain
|
|
558
|
+
* defense -- see reviewed for correctness 5th pass.)
|
|
559
|
+
*
|
|
560
|
+
* Why timeout = alive: when no listener owns `socketPath` the kernel
|
|
561
|
+
* synchronously returns ECONNREFUSED (file exists, no socket) or ENOENT
|
|
562
|
+
* (file gone), so a probe that takes longer than `timeoutMs` is almost
|
|
563
|
+
* certainly hitting a daemon whose accept loop is blocked (event loop
|
|
564
|
+
* stall, GC pause, kernel listen-backlog full). Treating that as "dead"
|
|
565
|
+
* would unlink the active socket and let a second daemon take over --
|
|
566
|
+
* exactly the split-brain scenario this probe exists to prevent. The
|
|
567
|
+
* priority axis here is stability > startup latency, so we err on the
|
|
568
|
+
* side of "another daemon is alive, refuse to boot".
|
|
569
|
+
*
|
|
570
|
+
* We open the socket and IMMEDIATELY destroy it without sending HELLO --
|
|
571
|
+
* the daemon's connection-tracking layer drops idle pre-HELLO sockets
|
|
572
|
+
* cleanly so this leaves no observable state behind.
|
|
573
|
+
*
|
|
574
|
+
* Exported only for unit testing -- the alive-detection path is also
|
|
575
|
+
* exercised end-to-end by manual smoke tests (Unix-socket bind is
|
|
576
|
+
* blocked under macOS sandbox-exec so we can't drive a real listener
|
|
577
|
+
* from Vitest).
|
|
578
|
+
*/
|
|
579
|
+
export async function isSocketActive(socketPath, timeoutMs,
|
|
580
|
+
// Test seam -- production callers always use net.connect. Vitest cannot
|
|
581
|
+
// spy on the ESM `node:net` namespace, so we accept the connector here
|
|
582
|
+
// to drive the timeout-as-alive branch from a unit test.
|
|
583
|
+
connectFn = net.connect) {
|
|
584
|
+
return new Promise((resolve) => {
|
|
585
|
+
const socket = connectFn(socketPath);
|
|
586
|
+
let settled = false;
|
|
587
|
+
const finish = (alive) => {
|
|
588
|
+
if (settled)
|
|
589
|
+
return;
|
|
590
|
+
settled = true;
|
|
591
|
+
try {
|
|
592
|
+
socket.destroy();
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
/* ignore */
|
|
596
|
+
}
|
|
597
|
+
resolve(alive);
|
|
598
|
+
};
|
|
599
|
+
// Timeout = "live but stalled" -> fail-closed (true). See doc comment.
|
|
600
|
+
const timer = setTimeout(() => finish(true), timeoutMs);
|
|
601
|
+
socket.once("connect", () => {
|
|
602
|
+
clearTimeout(timer);
|
|
603
|
+
finish(true);
|
|
604
|
+
});
|
|
605
|
+
socket.once("error", () => {
|
|
606
|
+
clearTimeout(timer);
|
|
607
|
+
finish(false);
|
|
608
|
+
});
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/pty/host-daemon/bootstrap.ts"],"names":[],"mappings":"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"}
|