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 @@
|
|
|
1
|
+
{"version":3,"file":"remote-host.js","sourceRoot":"","sources":["../../src/pty/remote-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Buffer } from "node:buffer";
|
|
2
|
+
import type { Frame } from "./host-protocol/frames.js";
|
|
3
|
+
export interface PendingRequest {
|
|
4
|
+
resolve: (frame: Frame) => void;
|
|
5
|
+
reject: (err: Error) => void;
|
|
6
|
+
timer: ReturnType<typeof setTimeout>;
|
|
7
|
+
}
|
|
8
|
+
export interface RequestCorrelatorDeps {
|
|
9
|
+
/** Per-request timeout in milliseconds. */
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
/** Build the error used to reject a request that times out. The correlator
|
|
12
|
+
* supplies its own assigned requestId and the configured timeoutMs so the
|
|
13
|
+
* caller can format a domain-appropriate message without re-encoding either
|
|
14
|
+
* value (keeps the correlator decoupled from `RemotePtyHostError`). */
|
|
15
|
+
buildTimeoutError: (requestId: number, timeoutMs: number) => Error;
|
|
16
|
+
/** Hand the frame to the wire. Called once per `request()` with the
|
|
17
|
+
* correlator-assigned requestId. State-machine guards and socket-write
|
|
18
|
+
* failure handling stay on the caller side -- the correlator is socket /
|
|
19
|
+
* state agnostic. */
|
|
20
|
+
send: (type: number, requestId: number, payload: Buffer) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Request/response correlation for the daemon wire-frame protocol. Owns:
|
|
24
|
+
* - monotonic requestId assignment (starts at 1; `requestId=0` is reserved
|
|
25
|
+
* by the protocol for fire-and-forget and connection-level NACK and is
|
|
26
|
+
* never assigned here).
|
|
27
|
+
* - the pending-request map (id -> {resolve, reject, timer}).
|
|
28
|
+
* - per-request timeout scheduling.
|
|
29
|
+
* - ACK / NACK dispatch to the matching pending entry.
|
|
30
|
+
* - bulk-reject on connection drop.
|
|
31
|
+
*
|
|
32
|
+
* The pending entry is registered **before** `send` is called so a
|
|
33
|
+
* synchronous send-side fault that triggers a connection drop in the caller
|
|
34
|
+
* can still iterate `rejectAll` and reject the just-registered Promise (the
|
|
35
|
+
* same ordering invariant the inline-on-`RemotePtyHost` implementation
|
|
36
|
+
* relied on).
|
|
37
|
+
*/
|
|
38
|
+
export declare class RequestCorrelator {
|
|
39
|
+
private nextId;
|
|
40
|
+
private readonly pending;
|
|
41
|
+
private readonly deps;
|
|
42
|
+
constructor(deps: RequestCorrelatorDeps);
|
|
43
|
+
/** Assign a fresh requestId, register the pending entry, arm the timeout,
|
|
44
|
+
* and hand the frame to the wire. */
|
|
45
|
+
request(type: number, payload: Buffer): Promise<Frame>;
|
|
46
|
+
/** Resolve the pending entry keyed by `frame.requestId`, if any. Returns
|
|
47
|
+
* true when a pending entry was matched and resolved, false on a stale
|
|
48
|
+
* ACK (peer slow / fenced). */
|
|
49
|
+
ack(frame: Frame): boolean;
|
|
50
|
+
/** Reject the pending entry for `requestId` with `err`. `requestId === 0`
|
|
51
|
+
* is a connection-level NACK and is rejected here as a no-op (the caller
|
|
52
|
+
* treats it as a wire fault and drops the connection). Returns true on
|
|
53
|
+
* match, false on stale or `requestId === 0`. */
|
|
54
|
+
nack(requestId: number, err: Error): boolean;
|
|
55
|
+
/** Reject every pending entry with `err` and clear the map. Used on socket
|
|
56
|
+
* drop so in-flight Promise<X>-returning methods don't hang. */
|
|
57
|
+
rejectAll(err: Error): void;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=request-correlator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-correlator.d.ts","sourceRoot":"","sources":["../../src/pty/request-correlator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB;;;4EAGwE;IACxE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;IACnE;;;0BAGsB;IACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,IAAI,EAAE,qBAAqB;IAIvC;0CACsC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAatD;;oCAEgC;IAChC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAS1B;;;sDAGkD;IAClD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,OAAO;IAU5C;qEACiE;IACjE,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;CAO5B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/response correlation for the daemon wire-frame protocol. Owns:
|
|
3
|
+
* - monotonic requestId assignment (starts at 1; `requestId=0` is reserved
|
|
4
|
+
* by the protocol for fire-and-forget and connection-level NACK and is
|
|
5
|
+
* never assigned here).
|
|
6
|
+
* - the pending-request map (id -> {resolve, reject, timer}).
|
|
7
|
+
* - per-request timeout scheduling.
|
|
8
|
+
* - ACK / NACK dispatch to the matching pending entry.
|
|
9
|
+
* - bulk-reject on connection drop.
|
|
10
|
+
*
|
|
11
|
+
* The pending entry is registered **before** `send` is called so a
|
|
12
|
+
* synchronous send-side fault that triggers a connection drop in the caller
|
|
13
|
+
* can still iterate `rejectAll` and reject the just-registered Promise (the
|
|
14
|
+
* same ordering invariant the inline-on-`RemotePtyHost` implementation
|
|
15
|
+
* relied on).
|
|
16
|
+
*/
|
|
17
|
+
export class RequestCorrelator {
|
|
18
|
+
nextId = 1;
|
|
19
|
+
pending = new Map();
|
|
20
|
+
deps;
|
|
21
|
+
constructor(deps) {
|
|
22
|
+
this.deps = deps;
|
|
23
|
+
}
|
|
24
|
+
/** Assign a fresh requestId, register the pending entry, arm the timeout,
|
|
25
|
+
* and hand the frame to the wire. */
|
|
26
|
+
request(type, payload) {
|
|
27
|
+
const requestId = this.nextId++;
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const timer = setTimeout(() => {
|
|
30
|
+
if (this.pending.delete(requestId)) {
|
|
31
|
+
reject(this.deps.buildTimeoutError(requestId, this.deps.timeoutMs));
|
|
32
|
+
}
|
|
33
|
+
}, this.deps.timeoutMs);
|
|
34
|
+
this.pending.set(requestId, { resolve, reject, timer });
|
|
35
|
+
this.deps.send(type, requestId, payload);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Resolve the pending entry keyed by `frame.requestId`, if any. Returns
|
|
39
|
+
* true when a pending entry was matched and resolved, false on a stale
|
|
40
|
+
* ACK (peer slow / fenced). */
|
|
41
|
+
ack(frame) {
|
|
42
|
+
const entry = this.pending.get(frame.requestId);
|
|
43
|
+
if (!entry)
|
|
44
|
+
return false;
|
|
45
|
+
this.pending.delete(frame.requestId);
|
|
46
|
+
clearTimeout(entry.timer);
|
|
47
|
+
entry.resolve(frame);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
/** Reject the pending entry for `requestId` with `err`. `requestId === 0`
|
|
51
|
+
* is a connection-level NACK and is rejected here as a no-op (the caller
|
|
52
|
+
* treats it as a wire fault and drops the connection). Returns true on
|
|
53
|
+
* match, false on stale or `requestId === 0`. */
|
|
54
|
+
nack(requestId, err) {
|
|
55
|
+
if (requestId === 0)
|
|
56
|
+
return false;
|
|
57
|
+
const entry = this.pending.get(requestId);
|
|
58
|
+
if (!entry)
|
|
59
|
+
return false;
|
|
60
|
+
this.pending.delete(requestId);
|
|
61
|
+
clearTimeout(entry.timer);
|
|
62
|
+
entry.reject(err);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/** Reject every pending entry with `err` and clear the map. Used on socket
|
|
66
|
+
* drop so in-flight Promise<X>-returning methods don't hang. */
|
|
67
|
+
rejectAll(err) {
|
|
68
|
+
for (const [id, entry] of this.pending) {
|
|
69
|
+
clearTimeout(entry.timer);
|
|
70
|
+
entry.reject(err);
|
|
71
|
+
this.pending.delete(id);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=request-correlator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-correlator.js","sourceRoot":"","sources":["../../src/pty/request-correlator.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5C,IAAI,CAAwB;IAE7C,YAAY,IAA2B;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;0CACsC;IACtC,OAAO,CAAC,IAAY,EAAE,OAAe;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;oCAEgC;IAChC,GAAG,CAAC,KAAY;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;sDAGkD;IAClD,IAAI,CAAC,SAAiB,EAAE,GAAU;QAChC,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;qEACiE;IACjE,SAAS,CAAC,GAAU;QAClB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
interface ScrollbackLogOptions {
|
|
2
|
+
maxBytes?: number;
|
|
3
|
+
tailBytes?: number;
|
|
4
|
+
/**
|
|
5
|
+
* Per-session in-memory chunk ring budget for delta replay
|
|
6
|
+
*. Disk persistence is unchanged. Override
|
|
7
|
+
* via the `PARASOR_IN_MEMORY_CHUNK_BUDGET` env elsewhere.
|
|
8
|
+
*/
|
|
9
|
+
inMemoryChunkBudget?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ChunkRecord {
|
|
12
|
+
seq: bigint;
|
|
13
|
+
data: Buffer;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Result of `readSince`.
|
|
17
|
+
*
|
|
18
|
+
* - `delta`: chunk ring contains every seq after `lastSeen`.
|
|
19
|
+
* Sender writes the binary OUTPUTs, no JSON replay needed.
|
|
20
|
+
* - `full`: ring evicted before `lastSeen` OR generation mismatch.
|
|
21
|
+
* Sender flushes the disk tail via `readTail()` then resumes from
|
|
22
|
+
* the current seq.
|
|
23
|
+
* - `none`: client has no `lastSeen`, OR ring is empty (fresh PTY).
|
|
24
|
+
* Sender skips replay entirely; live OUTPUT will deliver everything.
|
|
25
|
+
*/
|
|
26
|
+
export type ReadSinceResult = {
|
|
27
|
+
kind: "delta";
|
|
28
|
+
chunks: ChunkRecord[];
|
|
29
|
+
} | {
|
|
30
|
+
kind: "full";
|
|
31
|
+
} | {
|
|
32
|
+
kind: "none";
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Per-session append-only log for scrollback. Writes are buffered (flush
|
|
36
|
+
* on 64KB or 100ms) to keep onData hot-paths cheap. When a file exceeds
|
|
37
|
+
* `maxBytes` it is truncated to the last `tailBytes` -- good-enough to give
|
|
38
|
+
* users visual continuity after a server restart without unbounded growth.
|
|
39
|
+
*
|
|
40
|
+
* added an in-memory chunk ring on top of the same
|
|
41
|
+
* structure: each broadcast writes one chunk via `appendChunk` so a
|
|
42
|
+
* reconnecting client with a `lastSeen: {generation, seq}` can be
|
|
43
|
+
* served just the missing chunks ("delta") rather than the full tail.
|
|
44
|
+
* The disk file remains the canonical fallback (`readTail()`) for cases
|
|
45
|
+
* where the ring evicted before `lastSeen` or generations diverge.
|
|
46
|
+
*/
|
|
47
|
+
export declare class ScrollbackLog {
|
|
48
|
+
private readonly dir;
|
|
49
|
+
private readonly maxBytes;
|
|
50
|
+
private readonly tailBytes;
|
|
51
|
+
private readonly inMemoryBudget;
|
|
52
|
+
private readonly buffers;
|
|
53
|
+
private readonly rings;
|
|
54
|
+
constructor(configDir: string, options?: ScrollbackLogOptions);
|
|
55
|
+
/**
|
|
56
|
+
* Enqueue data for the given session. Buffers in memory; flushes on
|
|
57
|
+
* timer or threshold. Safe to call from every onData.
|
|
58
|
+
*/
|
|
59
|
+
append(sessionId: string, data: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Synchronously flush all pending buffers to disk. Called on graceful
|
|
62
|
+
* shutdown so no outstanding writes are lost.
|
|
63
|
+
*/
|
|
64
|
+
flushAll(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Return the tail of the log for a session, if any. Used to rehydrate
|
|
67
|
+
* xterm scrollback after a server restart, and as the `replay:"full"`
|
|
68
|
+
* fallback in chunked replay.
|
|
69
|
+
*
|
|
70
|
+
* Flushes the session's pending append buffer synchronously before
|
|
71
|
+
* reading so callers see every byte already passed to `append()`.
|
|
72
|
+
* Without this, the 64 KiB / 100 ms write coalescing window would
|
|
73
|
+
* leak into the replay (e.g. the auto-resume separator appended in
|
|
74
|
+
* the same attach turn would be missing from the snapshot).
|
|
75
|
+
*/
|
|
76
|
+
readTail(sessionId: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Append a binary chunk to the in-memory ring and return the assigned
|
|
79
|
+
* seq. the daemon shutdown contract-- caller passes the live PTY generation; if
|
|
80
|
+
* it doesn't match the ring's generation the ring is reset so we
|
|
81
|
+
* never emit (gen, seq) pairs that overlap a previous epoch.
|
|
82
|
+
*
|
|
83
|
+
* `seq` is uint64 (BigInt). Overflow is not handled because 1.8e19
|
|
84
|
+
* chunks is unreachable in practice -- a malicious client cannot
|
|
85
|
+
* influence chunk-allocation rate (chunks come from PTY output, not
|
|
86
|
+
* client input), and even at 1 chunk/ns we'd need 580 years.
|
|
87
|
+
*/
|
|
88
|
+
appendChunk(sessionId: string, generation: number, data: Buffer): bigint;
|
|
89
|
+
/**
|
|
90
|
+
* Bump generation: PTY respawn (`restart`). Resets seq to 0n and
|
|
91
|
+
* drops the in-memory ring -- disk persistence is untouched so a
|
|
92
|
+
* concurrent reconnect still has a fallback path.
|
|
93
|
+
*/
|
|
94
|
+
bumpGeneration(sessionId: string, newGeneration: number): void;
|
|
95
|
+
/**
|
|
96
|
+
* Current ring snapshot -- used for init-ack `serverState`. Returns
|
|
97
|
+
* `null` for `lastDeliveredSeq` / `oldestSeq` when the ring is empty
|
|
98
|
+
* (fresh session, no broadcast yet) so the client can distinguish
|
|
99
|
+
* "no chunks ever" from "chunk 0 was the last one".
|
|
100
|
+
*/
|
|
101
|
+
ringState(sessionId: string, fallbackGeneration: number): {
|
|
102
|
+
generation: number;
|
|
103
|
+
lastDeliveredSeq: bigint | null;
|
|
104
|
+
oldestSeq: bigint | null;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Decide replay strategy for a reconnecting client.
|
|
108
|
+
*
|
|
109
|
+
* - no ring + lastSeen -> `full` (server restart, client has cursor)
|
|
110
|
+
* - no ring + no lastSeen -> `none`
|
|
111
|
+
* - generation mismatch -> `full`
|
|
112
|
+
* - lastSeen.seq < oldestSeq (evicted) -> `full`
|
|
113
|
+
* - lastSeen.seq >= nextSeq - 1 (already saw current) -> `none`
|
|
114
|
+
* - otherwise -> `delta` with the chunks where seq > lastSeen.seq
|
|
115
|
+
*/
|
|
116
|
+
readSince(sessionId: string, lastSeen: {
|
|
117
|
+
generation: number;
|
|
118
|
+
seq: bigint;
|
|
119
|
+
} | undefined): ReadSinceResult;
|
|
120
|
+
/**
|
|
121
|
+
* Delete a session's log file and drop any pending buffer. Called when
|
|
122
|
+
* the user explicitly closes a session (dispose).
|
|
123
|
+
*/
|
|
124
|
+
remove(sessionId: string): void;
|
|
125
|
+
private pathFor;
|
|
126
|
+
private flushSession;
|
|
127
|
+
private rotateIfNeeded;
|
|
128
|
+
}
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=scrollback-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollback-log.d.ts","sourceRoot":"","sources":["../../src/pty/scrollback-log.ts"],"names":[],"mappings":"AA4CA,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAQD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAcD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAE1C,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAyBjE;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsB7C;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAMhB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAanC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAsBxE;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAS9D;;;;;OAKG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,GACzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B;IAuBD;;;;;;;;;OASG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GACxD,eAAe;IAclB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAa/B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,cAAc;CAsDvB"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, renameSync, statSync, truncateSync, unlinkSync, writeSync, } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const DEFAULT_MAX_BYTES = 8 * 1024 * 1024;
|
|
4
|
+
const DEFAULT_TAIL_BYTES = 4 * 1024 * 1024;
|
|
5
|
+
const FLUSH_INTERVAL_MS = 100;
|
|
6
|
+
const FLUSH_THRESHOLD_BYTES = 64 * 1024;
|
|
7
|
+
const DEFAULT_IN_MEMORY_CHUNK_BUDGET_BYTES = 1 * 1024 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* Drop a leading run of UTF-8 continuation bytes (`10xx_xxxx`) from a
|
|
10
|
+
* tail slice. Without this, a tail boundary landing in the middle of a
|
|
11
|
+
* multi-byte sequence would decode the orphaned continuation bytes as
|
|
12
|
+
* U+FFFD. The first valid UTF-8 start byte is either ASCII (0xxxxxxx)
|
|
13
|
+
* or a leading byte (11xxxxxx); we scan at most 3 bytes (max multi-byte
|
|
14
|
+
* tail prefix length).
|
|
15
|
+
*/
|
|
16
|
+
function decodeFromUtf8Boundary(slice) {
|
|
17
|
+
let i = 0;
|
|
18
|
+
while (i < slice.length && i < 3 && (slice[i] & 0xc0) === 0x80)
|
|
19
|
+
i++;
|
|
20
|
+
return slice.subarray(i).toString("utf8");
|
|
21
|
+
}
|
|
22
|
+
function readPositiveIntegerEnv(name) {
|
|
23
|
+
const raw = process.env[name];
|
|
24
|
+
if (!raw)
|
|
25
|
+
return null;
|
|
26
|
+
const value = Number(raw);
|
|
27
|
+
if (!Number.isSafeInteger(value) || value <= 0)
|
|
28
|
+
return null;
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Per-session append-only log for scrollback. Writes are buffered (flush
|
|
33
|
+
* on 64KB or 100ms) to keep onData hot-paths cheap. When a file exceeds
|
|
34
|
+
* `maxBytes` it is truncated to the last `tailBytes` -- good-enough to give
|
|
35
|
+
* users visual continuity after a server restart without unbounded growth.
|
|
36
|
+
*
|
|
37
|
+
* added an in-memory chunk ring on top of the same
|
|
38
|
+
* structure: each broadcast writes one chunk via `appendChunk` so a
|
|
39
|
+
* reconnecting client with a `lastSeen: {generation, seq}` can be
|
|
40
|
+
* served just the missing chunks ("delta") rather than the full tail.
|
|
41
|
+
* The disk file remains the canonical fallback (`readTail()`) for cases
|
|
42
|
+
* where the ring evicted before `lastSeen` or generations diverge.
|
|
43
|
+
*/
|
|
44
|
+
export class ScrollbackLog {
|
|
45
|
+
dir;
|
|
46
|
+
maxBytes;
|
|
47
|
+
tailBytes;
|
|
48
|
+
inMemoryBudget;
|
|
49
|
+
buffers = new Map();
|
|
50
|
+
rings = new Map();
|
|
51
|
+
constructor(configDir, options = {}) {
|
|
52
|
+
this.dir = join(configDir, "sessions");
|
|
53
|
+
this.maxBytes =
|
|
54
|
+
options.maxBytes ??
|
|
55
|
+
readPositiveIntegerEnv("PARASOR_SCROLLBACK_MAX_BYTES") ??
|
|
56
|
+
DEFAULT_MAX_BYTES;
|
|
57
|
+
this.tailBytes = Math.min(options.tailBytes ??
|
|
58
|
+
readPositiveIntegerEnv("PARASOR_SCROLLBACK_TAIL_BYTES") ??
|
|
59
|
+
DEFAULT_TAIL_BYTES, this.maxBytes);
|
|
60
|
+
const envBudget = Number(process.env.PARASOR_IN_MEMORY_CHUNK_BUDGET);
|
|
61
|
+
this.inMemoryBudget =
|
|
62
|
+
options.inMemoryChunkBudget ??
|
|
63
|
+
(Number.isFinite(envBudget) && envBudget > 0
|
|
64
|
+
? envBudget
|
|
65
|
+
: DEFAULT_IN_MEMORY_CHUNK_BUDGET_BYTES);
|
|
66
|
+
try {
|
|
67
|
+
mkdirSync(this.dir, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// best-effort -- appends will fail later but won't crash the server
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Enqueue data for the given session. Buffers in memory; flushes on
|
|
75
|
+
* timer or threshold. Safe to call from every onData.
|
|
76
|
+
*/
|
|
77
|
+
append(sessionId, data) {
|
|
78
|
+
const buf = Buffer.from(data, "utf8");
|
|
79
|
+
let pending = this.buffers.get(sessionId);
|
|
80
|
+
if (!pending) {
|
|
81
|
+
pending = { chunks: [], size: 0, timer: null };
|
|
82
|
+
this.buffers.set(sessionId, pending);
|
|
83
|
+
}
|
|
84
|
+
pending.chunks.push(buf);
|
|
85
|
+
pending.size += buf.length;
|
|
86
|
+
if (pending.size >= FLUSH_THRESHOLD_BYTES) {
|
|
87
|
+
this.flushSession(sessionId);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (!pending.timer) {
|
|
91
|
+
pending.timer = setTimeout(() => this.flushSession(sessionId), FLUSH_INTERVAL_MS);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Synchronously flush all pending buffers to disk. Called on graceful
|
|
96
|
+
* shutdown so no outstanding writes are lost.
|
|
97
|
+
*/
|
|
98
|
+
flushAll() {
|
|
99
|
+
for (const id of [...this.buffers.keys()]) {
|
|
100
|
+
this.flushSession(id);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Return the tail of the log for a session, if any. Used to rehydrate
|
|
105
|
+
* xterm scrollback after a server restart, and as the `replay:"full"`
|
|
106
|
+
* fallback in chunked replay.
|
|
107
|
+
*
|
|
108
|
+
* Flushes the session's pending append buffer synchronously before
|
|
109
|
+
* reading so callers see every byte already passed to `append()`.
|
|
110
|
+
* Without this, the 64 KiB / 100 ms write coalescing window would
|
|
111
|
+
* leak into the replay (e.g. the auto-resume separator appended in
|
|
112
|
+
* the same attach turn would be missing from the snapshot).
|
|
113
|
+
*/
|
|
114
|
+
readTail(sessionId) {
|
|
115
|
+
this.flushSession(sessionId);
|
|
116
|
+
const path = this.pathFor(sessionId);
|
|
117
|
+
if (!existsSync(path))
|
|
118
|
+
return "";
|
|
119
|
+
try {
|
|
120
|
+
const buf = readFileSync(path);
|
|
121
|
+
if (buf.length <= this.tailBytes)
|
|
122
|
+
return buf.toString("utf8");
|
|
123
|
+
return decodeFromUtf8Boundary(buf.subarray(buf.length - this.tailBytes));
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return "";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Append a binary chunk to the in-memory ring and return the assigned
|
|
131
|
+
* seq. the daemon shutdown contract-- caller passes the live PTY generation; if
|
|
132
|
+
* it doesn't match the ring's generation the ring is reset so we
|
|
133
|
+
* never emit (gen, seq) pairs that overlap a previous epoch.
|
|
134
|
+
*
|
|
135
|
+
* `seq` is uint64 (BigInt). Overflow is not handled because 1.8e19
|
|
136
|
+
* chunks is unreachable in practice -- a malicious client cannot
|
|
137
|
+
* influence chunk-allocation rate (chunks come from PTY output, not
|
|
138
|
+
* client input), and even at 1 chunk/ns we'd need 580 years.
|
|
139
|
+
*/
|
|
140
|
+
appendChunk(sessionId, generation, data) {
|
|
141
|
+
let ring = this.rings.get(sessionId);
|
|
142
|
+
if (!ring || ring.generation !== generation) {
|
|
143
|
+
ring = {
|
|
144
|
+
generation,
|
|
145
|
+
nextSeq: 0n,
|
|
146
|
+
chunks: [],
|
|
147
|
+
totalBytes: 0,
|
|
148
|
+
};
|
|
149
|
+
this.rings.set(sessionId, ring);
|
|
150
|
+
}
|
|
151
|
+
const seq = ring.nextSeq;
|
|
152
|
+
ring.nextSeq = seq + 1n;
|
|
153
|
+
ring.chunks.push({ seq, data });
|
|
154
|
+
ring.totalBytes += data.length;
|
|
155
|
+
while (ring.totalBytes > this.inMemoryBudget && ring.chunks.length > 1) {
|
|
156
|
+
const evicted = ring.chunks.shift();
|
|
157
|
+
if (evicted)
|
|
158
|
+
ring.totalBytes -= evicted.data.length;
|
|
159
|
+
}
|
|
160
|
+
return seq;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Bump generation: PTY respawn (`restart`). Resets seq to 0n and
|
|
164
|
+
* drops the in-memory ring -- disk persistence is untouched so a
|
|
165
|
+
* concurrent reconnect still has a fallback path.
|
|
166
|
+
*/
|
|
167
|
+
bumpGeneration(sessionId, newGeneration) {
|
|
168
|
+
this.rings.set(sessionId, {
|
|
169
|
+
generation: newGeneration,
|
|
170
|
+
nextSeq: 0n,
|
|
171
|
+
chunks: [],
|
|
172
|
+
totalBytes: 0,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Current ring snapshot -- used for init-ack `serverState`. Returns
|
|
177
|
+
* `null` for `lastDeliveredSeq` / `oldestSeq` when the ring is empty
|
|
178
|
+
* (fresh session, no broadcast yet) so the client can distinguish
|
|
179
|
+
* "no chunks ever" from "chunk 0 was the last one".
|
|
180
|
+
*/
|
|
181
|
+
ringState(sessionId, fallbackGeneration) {
|
|
182
|
+
const ring = this.rings.get(sessionId);
|
|
183
|
+
if (!ring) {
|
|
184
|
+
return {
|
|
185
|
+
generation: fallbackGeneration,
|
|
186
|
+
lastDeliveredSeq: null,
|
|
187
|
+
oldestSeq: null,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
if (ring.chunks.length === 0) {
|
|
191
|
+
return {
|
|
192
|
+
generation: ring.generation,
|
|
193
|
+
lastDeliveredSeq: null,
|
|
194
|
+
oldestSeq: null,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
generation: ring.generation,
|
|
199
|
+
lastDeliveredSeq: ring.nextSeq - 1n,
|
|
200
|
+
oldestSeq: ring.chunks[0]?.seq ?? null,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Decide replay strategy for a reconnecting client.
|
|
205
|
+
*
|
|
206
|
+
* - no ring + lastSeen -> `full` (server restart, client has cursor)
|
|
207
|
+
* - no ring + no lastSeen -> `none`
|
|
208
|
+
* - generation mismatch -> `full`
|
|
209
|
+
* - lastSeen.seq < oldestSeq (evicted) -> `full`
|
|
210
|
+
* - lastSeen.seq >= nextSeq - 1 (already saw current) -> `none`
|
|
211
|
+
* - otherwise -> `delta` with the chunks where seq > lastSeen.seq
|
|
212
|
+
*/
|
|
213
|
+
readSince(sessionId, lastSeen) {
|
|
214
|
+
const ring = this.rings.get(sessionId);
|
|
215
|
+
if (!ring)
|
|
216
|
+
return lastSeen ? { kind: "full" } : { kind: "none" };
|
|
217
|
+
if (!lastSeen)
|
|
218
|
+
return { kind: "none" };
|
|
219
|
+
if (lastSeen.generation !== ring.generation)
|
|
220
|
+
return { kind: "full" };
|
|
221
|
+
if (lastSeen.seq >= ring.nextSeq - 1n)
|
|
222
|
+
return { kind: "none" };
|
|
223
|
+
const oldest = ring.chunks[0]?.seq;
|
|
224
|
+
if (oldest === undefined)
|
|
225
|
+
return { kind: "none" };
|
|
226
|
+
if (lastSeen.seq < oldest - 1n)
|
|
227
|
+
return { kind: "full" };
|
|
228
|
+
const startIdx = ring.chunks.findIndex((c) => c.seq > lastSeen.seq);
|
|
229
|
+
if (startIdx < 0)
|
|
230
|
+
return { kind: "none" };
|
|
231
|
+
return { kind: "delta", chunks: ring.chunks.slice(startIdx) };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Delete a session's log file and drop any pending buffer. Called when
|
|
235
|
+
* the user explicitly closes a session (dispose).
|
|
236
|
+
*/
|
|
237
|
+
remove(sessionId) {
|
|
238
|
+
const pending = this.buffers.get(sessionId);
|
|
239
|
+
if (pending?.timer)
|
|
240
|
+
clearTimeout(pending.timer);
|
|
241
|
+
this.buffers.delete(sessionId);
|
|
242
|
+
this.rings.delete(sessionId);
|
|
243
|
+
const path = this.pathFor(sessionId);
|
|
244
|
+
try {
|
|
245
|
+
if (existsSync(path))
|
|
246
|
+
unlinkSync(path);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// ignore
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
pathFor(sessionId) {
|
|
253
|
+
return join(this.dir, `${sessionId}.log`);
|
|
254
|
+
}
|
|
255
|
+
flushSession(sessionId) {
|
|
256
|
+
const pending = this.buffers.get(sessionId);
|
|
257
|
+
if (!pending || pending.chunks.length === 0)
|
|
258
|
+
return;
|
|
259
|
+
if (pending.timer) {
|
|
260
|
+
clearTimeout(pending.timer);
|
|
261
|
+
pending.timer = null;
|
|
262
|
+
}
|
|
263
|
+
const merged = Buffer.concat(pending.chunks, pending.size);
|
|
264
|
+
pending.chunks = [];
|
|
265
|
+
pending.size = 0;
|
|
266
|
+
const path = this.pathFor(sessionId);
|
|
267
|
+
let fd = null;
|
|
268
|
+
try {
|
|
269
|
+
fd = openSync(path, "a");
|
|
270
|
+
writeSync(fd, merged);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// best-effort; drop this chunk so we don't retry endlessly
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
if (fd !== null) {
|
|
277
|
+
try {
|
|
278
|
+
closeSync(fd);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// ignore
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
this.rotateIfNeeded(path);
|
|
286
|
+
}
|
|
287
|
+
rotateIfNeeded(path) {
|
|
288
|
+
let size;
|
|
289
|
+
try {
|
|
290
|
+
size = statSync(path).size;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (size <= this.maxBytes)
|
|
296
|
+
return;
|
|
297
|
+
// Partial read: only pull the last `tailBytes` off disk instead of
|
|
298
|
+
// loading the full 8 MiB file into memory. The trim is always a
|
|
299
|
+
// strict suffix because size > maxBytes >= tailBytes.
|
|
300
|
+
const tail = Buffer.alloc(this.tailBytes);
|
|
301
|
+
let srcFd = null;
|
|
302
|
+
try {
|
|
303
|
+
srcFd = openSync(path, "r");
|
|
304
|
+
let read = 0;
|
|
305
|
+
while (read < this.tailBytes) {
|
|
306
|
+
const n = readSync(srcFd, tail, read, this.tailBytes - read, size - this.tailBytes + read);
|
|
307
|
+
if (n === 0)
|
|
308
|
+
break;
|
|
309
|
+
read += n;
|
|
310
|
+
}
|
|
311
|
+
const trimmed = read === this.tailBytes ? tail : tail.subarray(0, read);
|
|
312
|
+
const tmp = `${path}.tmp`;
|
|
313
|
+
// Write tail to tmp, rename over original -- atomic-ish truncation.
|
|
314
|
+
const dstFd = openSync(tmp, "w");
|
|
315
|
+
try {
|
|
316
|
+
writeSync(dstFd, trimmed);
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
closeSync(dstFd);
|
|
320
|
+
}
|
|
321
|
+
renameSync(tmp, path);
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
// Fallback: truncate to zero so we don't grow unbounded on failure.
|
|
325
|
+
try {
|
|
326
|
+
truncateSync(path, 0);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
// ignore
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
finally {
|
|
333
|
+
if (srcFd !== null) {
|
|
334
|
+
try {
|
|
335
|
+
closeSync(srcFd);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// ignore
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=scrollback-log.js.map
|