@camerontaylor/paseo-server 0.8.0-fork.1
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/.env.example +31 -0
- package/README.md +111 -0
- package/dist/scripts/dev-runner.js +37 -0
- package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
- package/dist/scripts/supervisor-entrypoint.js +160 -0
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor.js +313 -0
- package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
- package/dist/server/executable-resolution/executable-resolution.js +121 -0
- package/dist/server/executable-resolution/windows.d.ts +18 -0
- package/dist/server/executable-resolution/windows.js +65 -0
- package/dist/server/server/agent/activity-curator.d.ts +40 -0
- package/dist/server/server/agent/activity-curator.js +243 -0
- package/dist/server/server/agent/agent-archive.d.ts +11 -0
- package/dist/server/server/agent/agent-archive.js +16 -0
- package/dist/server/server/agent/agent-configuration-validator.d.ts +18 -0
- package/dist/server/server/agent/agent-configuration-validator.js +42 -0
- package/dist/server/server/agent/agent-loading.d.ts +17 -0
- package/dist/server/server/agent/agent-loading.js +88 -0
- package/dist/server/server/agent/agent-manager.d.ts +555 -0
- package/dist/server/server/agent/agent-manager.js +3930 -0
- package/dist/server/server/agent/agent-owner.d.ts +12 -0
- package/dist/server/server/agent/agent-owner.js +12 -0
- package/dist/server/server/agent/agent-projections.d.ts +26 -0
- package/dist/server/server/agent/agent-projections.js +414 -0
- package/dist/server/server/agent/agent-prompt.d.ts +91 -0
- package/dist/server/server/agent/agent-prompt.js +359 -0
- package/dist/server/server/agent/agent-response-loop.d.ts +72 -0
- package/dist/server/server/agent/agent-response-loop.js +336 -0
- package/dist/server/server/agent/agent-run-state.d.ts +76 -0
- package/dist/server/server/agent/agent-run-state.js +212 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts +742 -0
- package/dist/server/server/agent/agent-sdk-types.js +25 -0
- package/dist/server/server/agent/agent-storage.d.ts +148 -0
- package/dist/server/server/agent/agent-storage.js +401 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +43 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +187 -0
- package/dist/server/server/agent/agent-timeline-content.d.ts +6 -0
- package/dist/server/server/agent/agent-timeline-content.js +62 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +31 -0
- package/dist/server/server/agent/agent-timeline-store.js +249 -0
- package/dist/server/server/agent/audio-utils.d.ts +3 -0
- package/dist/server/server/agent/audio-utils.js +19 -0
- package/dist/server/server/agent/create-agent/create.d.ts +102 -0
- package/dist/server/server/agent/create-agent/create.js +362 -0
- package/dist/server/server/agent/create-agent/intent.d.ts +25 -0
- package/dist/server/server/agent/create-agent/intent.js +30 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +65 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +166 -0
- package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
- package/dist/server/server/agent/create-agent-mode.js +65 -0
- package/dist/server/server/agent/create-agent-title.d.ts +10 -0
- package/dist/server/server/agent/create-agent-title.js +34 -0
- package/dist/server/server/agent/dictation-debug.d.ts +13 -0
- package/dist/server/server/agent/dictation-debug.js +50 -0
- package/dist/server/server/agent/import-sessions.d.ts +57 -0
- package/dist/server/server/agent/import-sessions.js +240 -0
- package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
- package/dist/server/server/agent/lifecycle-command.js +99 -0
- package/dist/server/server/agent/mcp-server.d.ts +5 -0
- package/dist/server/server/agent/mcp-server.js +31 -0
- package/dist/server/server/agent/mcp-shared.d.ts +181 -0
- package/dist/server/server/agent/mcp-shared.js +199 -0
- package/dist/server/server/agent/mutable-provider-config-owner.d.ts +8 -0
- package/dist/server/server/agent/mutable-provider-config-owner.js +35 -0
- package/dist/server/server/agent/paseo-tool-policy.d.ts +9 -0
- package/dist/server/server/agent/paseo-tool-policy.js +16 -0
- package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
- package/dist/server/server/agent/pcm16-resampler.js +63 -0
- package/dist/server/server/agent/permission-response.d.ts +15 -0
- package/dist/server/server/agent/permission-response.js +14 -0
- package/dist/server/server/agent/plugin-provider.d.ts +16 -0
- package/dist/server/server/agent/plugin-provider.js +1356 -0
- package/dist/server/server/agent/prompt-attachments.d.ts +12 -0
- package/dist/server/server/agent/prompt-attachments.js +182 -0
- package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
- package/dist/server/server/agent/provider-history-timestamps.js +16 -0
- package/dist/server/server/agent/provider-launch-config.d.ts +43 -0
- package/dist/server/server/agent/provider-launch-config.js +167 -0
- package/dist/server/server/agent/provider-notices.d.ts +4 -0
- package/dist/server/server/agent/provider-notices.js +9 -0
- package/dist/server/server/agent/provider-options.d.ts +19 -0
- package/dist/server/server/agent/provider-options.js +53 -0
- package/dist/server/server/agent/provider-refresh-deadline.d.ts +11 -0
- package/dist/server/server/agent/provider-refresh-deadline.js +65 -0
- package/dist/server/server/agent/provider-registry.d.ts +72 -0
- package/dist/server/server/agent/provider-registry.js +604 -0
- package/dist/server/server/agent/provider-runtime.d.ts +16 -0
- package/dist/server/server/agent/provider-runtime.js +35 -0
- package/dist/server/server/agent/provider-session-import.d.ts +10 -0
- package/dist/server/server/agent/provider-session-import.js +55 -0
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +166 -0
- package/dist/server/server/agent/provider-snapshot-manager.js +843 -0
- package/dist/server/server/agent/provider-subagents/store.d.ts +68 -0
- package/dist/server/server/agent/provider-subagents/store.js +111 -0
- package/dist/server/server/agent/providers/acp-agent.d.ts +703 -0
- package/dist/server/server/agent/providers/acp-agent.js +3412 -0
- package/dist/server/server/agent/providers/claude/agent.d.ts +74 -0
- package/dist/server/server/agent/providers/claude/agent.js +5236 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
- package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
- package/dist/server/server/agent/providers/claude/hooks.d.ts +12 -0
- package/dist/server/server/agent/providers/claude/hooks.js +20 -0
- package/dist/server/server/agent/providers/claude/model-manifest.d.ts +147 -0
- package/dist/server/server/agent/providers/claude/model-manifest.js +342 -0
- package/dist/server/server/agent/providers/claude/models.d.ts +28 -0
- package/dist/server/server/agent/providers/claude/models.js +141 -0
- package/dist/server/server/agent/providers/claude/options.d.ts +85 -0
- package/dist/server/server/agent/providers/claude/options.js +93 -0
- package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
- package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
- package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
- package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
- package/dist/server/server/agent/providers/claude/query.d.ts +17 -0
- package/dist/server/server/agent/providers/claude/query.js +86 -0
- package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
- package/dist/server/server/agent/providers/claude/rewind.js +30 -0
- package/dist/server/server/agent/providers/claude/side-question.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/side-question.js +57 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +35 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +392 -0
- package/dist/server/server/agent/providers/claude/subagents/live-source.d.ts +161 -0
- package/dist/server/server/agent/providers/claude/subagents/live-source.js +415 -0
- package/dist/server/server/agent/providers/claude/subagents/observation.d.ts +53 -0
- package/dist/server/server/agent/providers/claude/subagents/observation.js +57 -0
- package/dist/server/server/agent/providers/claude/subagents/presentation.d.ts +12 -0
- package/dist/server/server/agent/providers/claude/subagents/presentation.js +41 -0
- package/dist/server/server/agent/providers/claude/subagents/replay-source.d.ts +70 -0
- package/dist/server/server/agent/providers/claude/subagents/replay-source.js +305 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-output.d.ts +4 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-output.js +86 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.d.ts +38 -0
- package/dist/server/server/agent/providers/claude/subagents/workflow-replay-source.js +225 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +37 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +296 -0
- package/dist/server/server/agent/providers/claude/task-state.d.ts +18 -0
- package/dist/server/server/agent/providers/claude/task-state.js +185 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
- package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +101 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.js +290 -0
- package/dist/server/server/agent/providers/codex/async-questions.d.ts +18 -0
- package/dist/server/server/agent/providers/codex/async-questions.js +135 -0
- package/dist/server/server/agent/providers/codex/options.d.ts +59 -0
- package/dist/server/server/agent/providers/codex/options.js +82 -0
- package/dist/server/server/agent/providers/codex/rewind.d.ts +24 -0
- package/dist/server/server/agent/providers/codex/rewind.js +77 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
- package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
- package/dist/server/server/agent/providers/codex/tool-call-mapper.js +909 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +384 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js +5877 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.js +55 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +17 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +31 -0
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +356 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +55 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +178 -0
- package/dist/server/server/agent/providers/gjc-acp-agent.d.ts +155 -0
- package/dist/server/server/agent/providers/gjc-acp-agent.js +588 -0
- package/dist/server/server/agent/providers/jsonl-frame-decoder.d.ts +17 -0
- package/dist/server/server/agent/providers/jsonl-frame-decoder.js +149 -0
- package/dist/server/server/agent/providers/jsonl-rpc-process.d.ts +63 -0
- package/dist/server/server/agent/providers/jsonl-rpc-process.js +207 -0
- package/dist/server/server/agent/providers/kimi-acp-agent.d.ts +35 -0
- package/dist/server/server/agent/providers/kimi-acp-agent.js +65 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
- package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +111 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +1340 -0
- package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
- package/dist/server/server/agent/providers/mock-slow-provider.js +40 -0
- package/dist/server/server/agent/providers/omp/advisor-message.d.ts +11 -0
- package/dist/server/server/agent/providers/omp/advisor-message.js +80 -0
- package/dist/server/server/agent/providers/omp/agent.d.ts +178 -0
- package/dist/server/server/agent/providers/omp/agent.js +1952 -0
- package/dist/server/server/agent/providers/omp/cli-runtime.d.ts +22 -0
- package/dist/server/server/agent/providers/omp/cli-runtime.js +208 -0
- package/dist/server/server/agent/providers/omp/commands.d.ts +8 -0
- package/dist/server/server/agent/providers/omp/commands.js +62 -0
- package/dist/server/server/agent/providers/omp/custom-message.d.ts +7 -0
- package/dist/server/server/agent/providers/omp/custom-message.js +4 -0
- package/dist/server/server/agent/providers/omp/event-mapper.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/event-mapper.js +267 -0
- package/dist/server/server/agent/providers/omp/history-hooks.d.ts +3 -0
- package/dist/server/server/agent/providers/omp/history-hooks.js +13 -0
- package/dist/server/server/agent/providers/omp/history.d.ts +19 -0
- package/dist/server/server/agent/providers/omp/history.js +306 -0
- package/dist/server/server/agent/providers/omp/host-tools.d.ts +14 -0
- package/dist/server/server/agent/providers/omp/host-tools.js +196 -0
- package/dist/server/server/agent/providers/omp/map-omp-model.d.ts +11 -0
- package/dist/server/server/agent/providers/omp/map-omp-model.js +67 -0
- package/dist/server/server/agent/providers/omp/message-history.d.ts +38 -0
- package/dist/server/server/agent/providers/omp/message-history.js +216 -0
- package/dist/server/server/agent/providers/omp/protocol-session.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/protocol-session.js +39 -0
- package/dist/server/server/agent/providers/omp/provider-config.d.ts +43 -0
- package/dist/server/server/agent/providers/omp/provider-config.js +120 -0
- package/dist/server/server/agent/providers/omp/rpc-types.d.ts +2040 -0
- package/dist/server/server/agent/providers/omp/rpc-types.js +551 -0
- package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.d.ts +24 -0
- package/dist/server/server/agent/providers/omp/rpc-ui-permission-mapper.js +156 -0
- package/dist/server/server/agent/providers/omp/runtime.d.ts +85 -0
- package/dist/server/server/agent/providers/omp/runtime.js +62 -0
- package/dist/server/server/agent/providers/omp/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/omp/session-descriptor.js +389 -0
- package/dist/server/server/agent/providers/omp/subagent-card-tracker.d.ts +33 -0
- package/dist/server/server/agent/providers/omp/subagent-card-tracker.js +264 -0
- package/dist/server/server/agent/providers/omp/subagent-index.d.ts +13 -0
- package/dist/server/server/agent/providers/omp/subagent-index.js +111 -0
- package/dist/server/server/agent/providers/omp/subagent-title.d.ts +2 -0
- package/dist/server/server/agent/providers/omp/subagent-title.js +14 -0
- package/dist/server/server/agent/providers/omp/system-notice.d.ts +8 -0
- package/dist/server/server/agent/providers/omp/system-notice.js +68 -0
- package/dist/server/server/agent/providers/omp/todo-mapper.d.ts +9 -0
- package/dist/server/server/agent/providers/omp/todo-mapper.js +52 -0
- package/dist/server/server/agent/providers/omp/tool-call-detail.d.ts +110 -0
- package/dist/server/server/agent/providers/omp/tool-call-detail.js +288 -0
- package/dist/server/server/agent/providers/omp/tool-call-id.d.ts +4 -0
- package/dist/server/server/agent/providers/omp/tool-call-id.js +34 -0
- package/dist/server/server/agent/providers/omp/tool-call-mapper.d.ts +7 -0
- package/dist/server/server/agent/providers/omp/tool-call-mapper.js +98 -0
- package/dist/server/server/agent/providers/omp/usage-poller.d.ts +32 -0
- package/dist/server/server/agent/providers/omp/usage-poller.js +141 -0
- package/dist/server/server/agent/providers/opencode/bridge-plugin.bundle.mjs +14678 -0
- package/dist/server/server/agent/providers/opencode/bridge.d.ts +39 -0
- package/dist/server/server/agent/providers/opencode/bridge.js +249 -0
- package/dist/server/server/agent/providers/opencode/event-consumer.d.ts +60 -0
- package/dist/server/server/agent/providers/opencode/event-consumer.js +221 -0
- package/dist/server/server/agent/providers/opencode/options.d.ts +156 -0
- package/dist/server/server/agent/providers/opencode/options.js +62 -0
- package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/paths.js +7 -0
- package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
- package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +101 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +513 -0
- package/dist/server/server/agent/providers/opencode/side-question.d.ts +78 -0
- package/dist/server/server/agent/providers/opencode/side-question.js +172 -0
- package/dist/server/server/agent/providers/opencode/subagent-presentation.d.ts +36 -0
- package/dist/server/server/agent/providers/opencode/subagent-presentation.js +62 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +22 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.js +43 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
- package/dist/server/server/agent/providers/opencode-agent.d.ts +393 -0
- package/dist/server/server/agent/providers/opencode-agent.js +4106 -0
- package/dist/server/server/agent/providers/pi/agent.d.ts +164 -0
- package/dist/server/server/agent/providers/pi/agent.js +2236 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.js +177 -0
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts +36 -0
- package/dist/server/server/agent/providers/pi/history-mapper.js +212 -0
- package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
- package/dist/server/server/agent/providers/pi/rewind.js +8 -0
- package/dist/server/server/agent/providers/pi/rpc-types.d.ts +252 -0
- package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts +77 -0
- package/dist/server/server/agent/providers/pi/runtime.js +65 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.js +355 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +113 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.js +340 -0
- package/dist/server/server/agent/providers/pi/usage-poller.d.ts +32 -0
- package/dist/server/server/agent/providers/pi/usage-poller.js +141 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
- package/dist/server/server/agent/providers/provider-image-output.js +165 -0
- package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
- package/dist/server/server/agent/providers/provider-runner.js +81 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
- package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
- package/dist/server/server/agent/providers/trae-acp-agent.d.ts +15 -0
- package/dist/server/server/agent/providers/trae-acp-agent.js +18 -0
- package/dist/server/server/agent/recordings-debug.d.ts +3 -0
- package/dist/server/server/agent/recordings-debug.js +19 -0
- package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
- package/dist/server/server/agent/rewind/rewind.js +29 -0
- package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
- package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
- package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
- package/dist/server/server/agent/runtime-mcp-config.js +53 -0
- package/dist/server/server/agent/side-conversations/store.d.ts +33 -0
- package/dist/server/server/agent/side-conversations/store.js +62 -0
- package/dist/server/server/agent/stale-provider-session-error.d.ts +6 -0
- package/dist/server/server/agent/stale-provider-session-error.js +11 -0
- package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
- package/dist/server/server/agent/structured-generation-providers.js +193 -0
- package/dist/server/server/agent/stt-debug.d.ts +10 -0
- package/dist/server/server/agent/stt-debug.js +33 -0
- package/dist/server/server/agent/stt-manager.d.ts +38 -0
- package/dist/server/server/agent/stt-manager.js +246 -0
- package/dist/server/server/agent/system-prompt.d.ts +2 -0
- package/dist/server/server/agent/system-prompt.js +8 -0
- package/dist/server/server/agent/timeline-append.d.ts +10 -0
- package/dist/server/server/agent/timeline-append.js +27 -0
- package/dist/server/server/agent/timeline-page-bounds.d.ts +19 -0
- package/dist/server/server/agent/timeline-page-bounds.js +37 -0
- package/dist/server/server/agent/timeline-projection.d.ts +74 -0
- package/dist/server/server/agent/timeline-projection.js +467 -0
- package/dist/server/server/agent/timeline-prompt-index.d.ts +12 -0
- package/dist/server/server/agent/timeline-prompt-index.js +23 -0
- package/dist/server/server/agent/tools/paseo-tool-serialization.d.ts +4 -0
- package/dist/server/server/agent/tools/paseo-tool-serialization.js +58 -0
- package/dist/server/server/agent/tools/paseo-tools.d.ts +62 -0
- package/dist/server/server/agent/tools/paseo-tools.js +2445 -0
- package/dist/server/server/agent/tools/types.d.ts +39 -0
- package/dist/server/server/agent/tools/types.js +2 -0
- package/dist/server/server/agent/tts-debug.d.ts +8 -0
- package/dist/server/server/agent/tts-debug.js +24 -0
- package/dist/server/server/agent/tts-manager.d.ts +41 -0
- package/dist/server/server/agent/tts-manager.js +375 -0
- package/dist/server/server/agent-attention-policy.d.ts +29 -0
- package/dist/server/server/agent-attention-policy.js +36 -0
- package/dist/server/server/agent-history-search.d.ts +48 -0
- package/dist/server/server/agent-history-search.js +129 -0
- package/dist/server/server/atomic-file.d.ts +3 -0
- package/dist/server/server/atomic-file.js +19 -0
- package/dist/server/server/auth.d.ts +38 -0
- package/dist/server/server/auth.js +122 -0
- package/dist/server/server/authorization/index.d.ts +18 -0
- package/dist/server/server/authorization/index.js +47 -0
- package/dist/server/server/authorization/operation-permissions.d.ts +8 -0
- package/dist/server/server/authorization/operation-permissions.js +438 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
- package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +64 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +13 -0
- package/dist/server/server/auto-archive-on-merge/index.js +77 -0
- package/dist/server/server/bootstrap.d.ts +166 -0
- package/dist/server/server/bootstrap.js +1388 -0
- package/dist/server/server/browser-tools/broker.d.ts +45 -0
- package/dist/server/server/browser-tools/broker.js +390 -0
- package/dist/server/server/browser-tools/errors.d.ts +22 -0
- package/dist/server/server/browser-tools/errors.js +27 -0
- package/dist/server/server/browser-tools/policy.d.ts +10 -0
- package/dist/server/server/browser-tools/policy.js +16 -0
- package/dist/server/server/browser-tools/tools.d.ts +16 -0
- package/dist/server/server/browser-tools/tools.js +796 -0
- package/dist/server/server/checkout/status-projection.d.ts +19 -0
- package/dist/server/server/checkout/status-projection.js +127 -0
- package/dist/server/server/checkout-diff-manager.d.ts +48 -0
- package/dist/server/server/checkout-diff-manager.js +284 -0
- package/dist/server/server/checkout-git-utils.d.ts +11 -0
- package/dist/server/server/checkout-git-utils.js +34 -0
- package/dist/server/server/client-message-id.d.ts +3 -0
- package/dist/server/server/client-message-id.js +12 -0
- package/dist/server/server/config.d.ts +26 -0
- package/dist/server/server/config.js +594 -0
- package/dist/server/server/connection-offer.d.ts +20 -0
- package/dist/server/server/connection-offer.js +59 -0
- package/dist/server/server/creation/index.d.ts +41 -0
- package/dist/server/server/creation/index.js +250 -0
- package/dist/server/server/daemon-config-store.d.ts +63 -0
- package/dist/server/server/daemon-config-store.js +524 -0
- package/dist/server/server/daemon-keypair.d.ts +8 -0
- package/dist/server/server/daemon-keypair.js +42 -0
- package/dist/server/server/daemon-version.d.ts +5 -0
- package/dist/server/server/daemon-version.js +22 -0
- package/dist/server/server/daemon-worker.d.ts +2 -0
- package/dist/server/server/daemon-worker.js +287 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +88 -0
- package/dist/server/server/dictation/dictation-stream-manager.js +578 -0
- package/dist/server/server/directory-sync/index.d.ts +45 -0
- package/dist/server/server/directory-sync/index.js +98 -0
- package/dist/server/server/directory-sync/internal/versioned-collection.d.ts +56 -0
- package/dist/server/server/directory-sync/internal/versioned-collection.js +94 -0
- package/dist/server/server/exports.d.ts +24 -0
- package/dist/server/server/exports.js +24 -0
- package/dist/server/server/file-download/token-store.d.ts +24 -0
- package/dist/server/server/file-download/token-store.js +40 -0
- package/dist/server/server/file-explorer/observer.d.ts +32 -0
- package/dist/server/server/file-explorer/observer.js +130 -0
- package/dist/server/server/file-explorer/service.d.ts +125 -0
- package/dist/server/server/file-explorer/service.js +663 -0
- package/dist/server/server/file-observer/index.d.ts +43 -0
- package/dist/server/server/file-observer/index.js +114 -0
- package/dist/server/server/file-observer/internal/contracts.d.ts +26 -0
- package/dist/server/server/file-observer/internal/contracts.js +2 -0
- package/dist/server/server/file-observer/internal/linux.d.ts +4 -0
- package/dist/server/server/file-observer/internal/linux.js +260 -0
- package/dist/server/server/file-observer/internal/native-recursive.d.ts +9 -0
- package/dist/server/server/file-observer/internal/native-recursive.js +577 -0
- package/dist/server/server/file-observer/internal/observation.d.ts +21 -0
- package/dist/server/server/file-observer/internal/observation.js +129 -0
- package/dist/server/server/file-observer/internal/paths.d.ts +10 -0
- package/dist/server/server/file-observer/internal/paths.js +43 -0
- package/dist/server/server/file-upload/index.d.ts +27 -0
- package/dist/server/server/file-upload/index.js +158 -0
- package/dist/server/server/git-metadata-event-rules.d.ts +123 -0
- package/dist/server/server/git-metadata-event-rules.js +152 -0
- package/dist/server/server/hostnames.d.ts +13 -0
- package/dist/server/server/hostnames.js +94 -0
- package/dist/server/server/hub/daemon-executions.d.ts +89 -0
- package/dist/server/server/hub/daemon-executions.js +287 -0
- package/dist/server/server/hub/execution-controller.d.ts +30 -0
- package/dist/server/server/hub/execution-controller.js +220 -0
- package/dist/server/server/hub/relationship-controller.d.ts +116 -0
- package/dist/server/server/hub/relationship-controller.js +534 -0
- package/dist/server/server/hub/relationship-remote.d.ts +68 -0
- package/dist/server/server/hub/relationship-remote.js +159 -0
- package/dist/server/server/hub/relationship-retry.d.ts +7 -0
- package/dist/server/server/hub/relationship-retry.js +15 -0
- package/dist/server/server/json-utils.d.ts +11 -0
- package/dist/server/server/json-utils.js +45 -0
- package/dist/server/server/lifecycle-reasons.d.ts +4 -0
- package/dist/server/server/lifecycle-reasons.js +6 -0
- package/dist/server/server/logger.d.ts +29 -0
- package/dist/server/server/logger.js +127 -0
- package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
- package/dist/server/server/managed-processes/managed-processes.js +326 -0
- package/dist/server/server/messages.d.ts +9 -0
- package/dist/server/server/messages.js +29 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
- package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
- package/dist/server/server/orchestration-skills/index.d.ts +18 -0
- package/dist/server/server/orchestration-skills/index.js +18 -0
- package/dist/server/server/orchestration-skills/internal/controller.d.ts +39 -0
- package/dist/server/server/orchestration-skills/internal/controller.js +108 -0
- package/dist/server/server/orchestration-skills/internal/operations.d.ts +43 -0
- package/dist/server/server/orchestration-skills/internal/operations.js +178 -0
- package/dist/server/server/orchestration-skills/internal/paths.d.ts +4 -0
- package/dist/server/server/orchestration-skills/internal/paths.js +21 -0
- package/dist/server/server/orchestration-skills/internal/selection-store.d.ts +12 -0
- package/dist/server/server/orchestration-skills/internal/selection-store.js +39 -0
- package/dist/server/server/orchestration-skills/internal/sync.d.ts +21 -0
- package/dist/server/server/orchestration-skills/internal/sync.js +177 -0
- package/dist/server/server/orchestration-skills/internal/transaction.d.ts +22 -0
- package/dist/server/server/orchestration-skills/internal/transaction.js +483 -0
- package/dist/server/server/package-version.d.ts +19 -0
- package/dist/server/server/package-version.js +60 -0
- package/dist/server/server/pagination/cursor.d.ts +16 -0
- package/dist/server/server/pagination/cursor.js +62 -0
- package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
- package/dist/server/server/pagination/sortable-pager.js +68 -0
- package/dist/server/server/pairing-offer.d.ts +18 -0
- package/dist/server/server/pairing-offer.js +47 -0
- package/dist/server/server/pairing-qr.d.ts +2 -0
- package/dist/server/server/pairing-qr.js +15 -0
- package/dist/server/server/paseo-env.d.ts +13 -0
- package/dist/server/server/paseo-env.js +54 -0
- package/dist/server/server/paseo-home.d.ts +2 -0
- package/dist/server/server/paseo-home.js +19 -0
- package/dist/server/server/paseo-worktree-service.d.ts +45 -0
- package/dist/server/server/paseo-worktree-service.js +191 -0
- package/dist/server/server/path-utils.d.ts +5 -0
- package/dist/server/server/path-utils.js +34 -0
- package/dist/server/server/persisted-config.d.ts +397 -0
- package/dist/server/server/persisted-config.js +411 -0
- package/dist/server/server/persistence-hooks.d.ts +32 -0
- package/dist/server/server/persistence-hooks.js +96 -0
- package/dist/server/server/pid-lock.d.ts +44 -0
- package/dist/server/server/pid-lock.js +285 -0
- package/dist/server/server/plugins/compiler-imports.d.ts +13 -0
- package/dist/server/server/plugins/compiler-imports.js +90 -0
- package/dist/server/server/plugins/compiler.d.ts +10 -0
- package/dist/server/server/plugins/compiler.js +354 -0
- package/dist/server/server/plugins/daemon-transport.d.ts +9 -0
- package/dist/server/server/plugins/daemon-transport.js +68 -0
- package/dist/server/server/plugins/index.d.ts +102 -0
- package/dist/server/server/plugins/index.js +575 -0
- package/dist/server/server/plugins/lifecycle/index.d.ts +40 -0
- package/dist/server/server/plugins/lifecycle/index.js +200 -0
- package/dist/server/server/plugins/managed-source.d.ts +50 -0
- package/dist/server/server/plugins/managed-source.js +327 -0
- package/dist/server/server/plugins/manifest.d.ts +12 -0
- package/dist/server/server/plugins/manifest.js +26 -0
- package/dist/server/server/plugins/plugin-process-protocol.d.ts +120 -0
- package/dist/server/server/plugins/plugin-process-protocol.js +154 -0
- package/dist/server/server/plugins/plugin-process.d.ts +2 -0
- package/dist/server/server/plugins/plugin-process.js +419 -0
- package/dist/server/server/plugins/plugin-sdk-specifiers.d.ts +5 -0
- package/dist/server/server/plugins/plugin-sdk-specifiers.js +23 -0
- package/dist/server/server/plugins/plugin-session-identity.d.ts +4 -0
- package/dist/server/server/plugins/plugin-session-identity.js +11 -0
- package/dist/server/server/plugins/preparation.d.ts +4 -0
- package/dist/server/server/plugins/preparation.js +49 -0
- package/dist/server/server/plugins/provider-icon.d.ts +2 -0
- package/dist/server/server/plugins/provider-icon.js +55 -0
- package/dist/server/server/plugins/runtime.d.ts +83 -0
- package/dist/server/server/plugins/runtime.js +836 -0
- package/dist/server/server/plugins/session-socket.d.ts +23 -0
- package/dist/server/server/plugins/session-socket.js +82 -0
- package/dist/server/server/plugins/settings/index.d.ts +96 -0
- package/dist/server/server/plugins/settings/index.js +115 -0
- package/dist/server/server/private-files.d.ts +6 -0
- package/dist/server/server/private-files.js +37 -0
- package/dist/server/server/process-diagnostics.d.ts +17 -0
- package/dist/server/server/process-diagnostics.js +22 -0
- package/dist/server/server/project-directory-service.d.ts +30 -0
- package/dist/server/server/project-directory-service.js +120 -0
- package/dist/server/server/project-key.d.ts +14 -0
- package/dist/server/server/project-key.js +44 -0
- package/dist/server/server/push/index.d.ts +16 -0
- package/dist/server/server/push/index.js +26 -0
- package/dist/server/server/push/push-service.d.ts +19 -0
- package/dist/server/server/push/push-service.js +66 -0
- package/dist/server/server/push/token-store.d.ts +22 -0
- package/dist/server/server/push/token-store.js +125 -0
- package/dist/server/server/relay-runtime.d.ts +27 -0
- package/dist/server/server/relay-runtime.js +46 -0
- package/dist/server/server/relay-transport.d.ts +33 -0
- package/dist/server/server/relay-transport.js +481 -0
- package/dist/server/server/request-receipts/index.d.ts +33 -0
- package/dist/server/server/request-receipts/index.js +131 -0
- package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
- package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
- package/dist/server/server/resolve-worktree-creation-intent.d.ts +44 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +186 -0
- package/dist/server/server/schedule/cron.d.ts +4 -0
- package/dist/server/server/schedule/cron.js +83 -0
- package/dist/server/server/schedule/service.d.ts +75 -0
- package/dist/server/server/schedule/service.js +810 -0
- package/dist/server/server/schedule/store.d.ts +27 -0
- package/dist/server/server/schedule/store.js +190 -0
- package/dist/server/server/script-health-monitor.d.ts +39 -0
- package/dist/server/server/script-health-monitor.js +159 -0
- package/dist/server/server/script-proxy.d.ts +3 -0
- package/dist/server/server/script-proxy.js +2 -0
- package/dist/server/server/script-route-branch-handler.d.ts +10 -0
- package/dist/server/server/script-route-branch-handler.js +11 -0
- package/dist/server/server/script-status-projection.d.ts +36 -0
- package/dist/server/server/script-status-projection.js +200 -0
- package/dist/server/server/server-id.d.ts +17 -0
- package/dist/server/server/server-id.js +68 -0
- package/dist/server/server/service-proxy.d.ts +237 -0
- package/dist/server/server/service-proxy.js +679 -0
- package/dist/server/server/session/agent-config/agent-config-session.d.ts +75 -0
- package/dist/server/server/session/agent-config/agent-config-session.js +151 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +65 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.js +266 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +150 -0
- package/dist/server/server/session/checkout/checkout-session.js +1187 -0
- package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
- package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +34 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +90 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +33 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +60 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +90 -0
- package/dist/server/server/session/daemon/daemon-session.js +224 -0
- package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
- package/dist/server/server/session/daemon/diagnostics.js +431 -0
- package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
- package/dist/server/server/session/daemon/install-origin.js +64 -0
- package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
- package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
- package/dist/server/server/session/files/workspace-files-session.d.ts +55 -0
- package/dist/server/server/session/files/workspace-files-session.js +359 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +32 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +74 -0
- package/dist/server/server/session/project-config/project-config-session.d.ts +35 -0
- package/dist/server/server/session/project-config/project-config-session.js +143 -0
- package/dist/server/server/session/project-config/worktree-setup-commit-status.d.ts +6 -0
- package/dist/server/server/session/project-config/worktree-setup-commit-status.js +38 -0
- package/dist/server/server/session/provider/provider-catalog-session.d.ts +78 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +388 -0
- package/dist/server/server/session/schedule/schedule-session.d.ts +47 -0
- package/dist/server/server/session/schedule/schedule-session.js +188 -0
- package/dist/server/server/session/voice/voice-session.d.ts +166 -0
- package/dist/server/server/session/voice/voice-session.js +904 -0
- package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
- package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +42 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +170 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +59 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +326 -0
- package/dist/server/server/session/workspace-recovery/workspace-recovery-service.d.ts +30 -0
- package/dist/server/server/session/workspace-recovery/workspace-recovery-service.js +178 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +54 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +156 -0
- package/dist/server/server/session.d.ts +555 -0
- package/dist/server/server/session.js +6540 -0
- package/dist/server/server/speech/audio.d.ts +10 -0
- package/dist/server/server/speech/audio.js +101 -0
- package/dist/server/server/speech/provider-resolver.d.ts +3 -0
- package/dist/server/server/speech/provider-resolver.js +7 -0
- package/dist/server/server/speech/providers/local/config.d.ts +30 -0
- package/dist/server/server/speech/providers/local/config.js +134 -0
- package/dist/server/server/speech/providers/local/models.d.ts +12 -0
- package/dist/server/server/speech/providers/local/models.js +18 -0
- package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
- package/dist/server/server/speech/providers/local/runtime.js +135 -0
- package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +17 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +145 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +101 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
- package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
- package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
- package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
- package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
- package/dist/server/server/speech/providers/local/worker-client.js +590 -0
- package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
- package/dist/server/server/speech/providers/local/worker-process.js +270 -0
- package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
- package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
- package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/config.js +148 -0
- package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
- package/dist/server/server/speech/providers/openai/runtime.js +102 -0
- package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
- package/dist/server/server/speech/providers/openai/stt.js +209 -0
- package/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
- package/dist/server/server/speech/providers/openai/tts.js +48 -0
- package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
- package/dist/server/server/speech/speech-config-resolver.js +132 -0
- package/dist/server/server/speech/speech-provider.d.ts +59 -0
- package/dist/server/server/speech/speech-provider.js +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts +45 -0
- package/dist/server/server/speech/speech-runtime.js +571 -0
- package/dist/server/server/speech/speech-types.d.ts +22 -0
- package/dist/server/server/speech/speech-types.js +8 -0
- package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
- package/dist/server/server/speech/turn-detection-provider.js +2 -0
- package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
- package/dist/server/server/utils/diff-highlighter.js +304 -0
- package/dist/server/server/voice-config.d.ts +15 -0
- package/dist/server/server/voice-config.js +54 -0
- package/dist/server/server/voice-permission-policy.d.ts +4 -0
- package/dist/server/server/voice-permission-policy.js +13 -0
- package/dist/server/server/voice-types.d.ts +12 -0
- package/dist/server/server/voice-types.js +2 -0
- package/dist/server/server/watcher-liveness-canary.d.ts +11 -0
- package/dist/server/server/watcher-liveness-canary.js +53 -0
- package/dist/server/server/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/encrypted-relay-socket.d.ts +23 -0
- package/dist/server/server/websocket/encrypted-relay-socket.js +64 -0
- package/dist/server/server/websocket/physical-socket.d.ts +36 -0
- package/dist/server/server/websocket/physical-socket.js +95 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +95 -0
- package/dist/server/server/websocket/runtime-metrics.js +148 -0
- package/dist/server/server/websocket-server.d.ts +214 -0
- package/dist/server/server/websocket-server.js +2258 -0
- package/dist/server/server/workspace-archive-service.d.ts +63 -0
- package/dist/server/server/workspace-archive-service.js +355 -0
- package/dist/server/server/workspace-auto-name.d.ts +55 -0
- package/dist/server/server/workspace-auto-name.js +127 -0
- package/dist/server/server/workspace-automation-gate.d.ts +16 -0
- package/dist/server/server/workspace-automation-gate.js +35 -0
- package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
- package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
- package/dist/server/server/workspace-directory.d.ts +99 -0
- package/dist/server/server/workspace-directory.js +467 -0
- package/dist/server/server/workspace-git-fetch.d.ts +33 -0
- package/dist/server/server/workspace-git-fetch.js +108 -0
- package/dist/server/server/workspace-git-metadata.d.ts +8 -0
- package/dist/server/server/workspace-git-metadata.js +24 -0
- package/dist/server/server/workspace-git-service.d.ts +348 -0
- package/dist/server/server/workspace-git-service.js +2534 -0
- package/dist/server/server/workspace-labels/index.d.ts +14 -0
- package/dist/server/server/workspace-labels/index.js +10 -0
- package/dist/server/server/workspace-labels/internal/catalog-store.d.ts +50 -0
- package/dist/server/server/workspace-labels/internal/catalog-store.js +203 -0
- package/dist/server/server/workspace-labels/internal/sequence.d.ts +43 -0
- package/dist/server/server/workspace-labels/internal/sequence.js +80 -0
- package/dist/server/server/workspace-labels/internal/service.d.ts +57 -0
- package/dist/server/server/workspace-labels/internal/service.js +224 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts +103 -0
- package/dist/server/server/workspace-reconciliation-service.js +379 -0
- package/dist/server/server/workspace-registry-bootstrap-legacy.d.ts +21 -0
- package/dist/server/server/workspace-registry-bootstrap-legacy.js +57 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts +14 -0
- package/dist/server/server/workspace-registry-bootstrap.js +155 -0
- package/dist/server/server/workspace-registry-model.d.ts +56 -0
- package/dist/server/server/workspace-registry-model.js +150 -0
- package/dist/server/server/workspace-registry.d.ts +228 -0
- package/dist/server/server/workspace-registry.js +468 -0
- package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
- package/dist/server/server/workspace-script-runtime-store.js +78 -0
- package/dist/server/server/workspace-service-env.d.ts +18 -0
- package/dist/server/server/workspace-service-env.js +85 -0
- package/dist/server/server/workspace-service-port-allocator.d.ts +11 -0
- package/dist/server/server/workspace-service-port-allocator.js +89 -0
- package/dist/server/server/workspace-service-port-registry.d.ts +24 -0
- package/dist/server/server/workspace-service-port-registry.js +172 -0
- package/dist/server/server/workspace-setup-runtime.d.ts +7 -0
- package/dist/server/server/workspace-setup-runtime.js +30 -0
- package/dist/server/server/workspace-source.d.ts +7 -0
- package/dist/server/server/workspace-source.js +15 -0
- package/dist/server/server/worktree/commands.d.ts +55 -0
- package/dist/server/server/worktree/commands.js +99 -0
- package/dist/server/server/worktree-bootstrap.d.ts +86 -0
- package/dist/server/server/worktree-bootstrap.js +753 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
- package/dist/server/server/worktree-branch-name-generator.js +89 -0
- package/dist/server/server/worktree-core.d.ts +32 -0
- package/dist/server/server/worktree-core.js +114 -0
- package/dist/server/server/worktree-errors.d.ts +12 -0
- package/dist/server/server/worktree-errors.js +28 -0
- package/dist/server/server/worktree-session.d.ts +165 -0
- package/dist/server/server/worktree-session.js +594 -0
- package/dist/server/services/forge-cli-command.d.ts +128 -0
- package/dist/server/services/forge-cli-command.js +212 -0
- package/dist/server/services/forge-registry.d.ts +25 -0
- package/dist/server/services/forge-registry.js +155 -0
- package/dist/server/services/forge-resolver.d.ts +38 -0
- package/dist/server/services/forge-resolver.js +191 -0
- package/dist/server/services/forge-service.d.ts +430 -0
- package/dist/server/services/forge-service.js +50 -0
- package/dist/server/services/gitea-facts.d.ts +11 -0
- package/dist/server/services/gitea-facts.js +4 -0
- package/dist/server/services/gitea-service.d.ts +62 -0
- package/dist/server/services/gitea-service.js +1844 -0
- package/dist/server/services/github-facts.d.ts +27 -0
- package/dist/server/services/github-facts.js +4 -0
- package/dist/server/services/github-service.d.ts +76 -0
- package/dist/server/services/github-service.js +3297 -0
- package/dist/server/services/gitlab-facts.d.ts +26 -0
- package/dist/server/services/gitlab-facts.js +4 -0
- package/dist/server/services/gitlab-service.d.ts +43 -0
- package/dist/server/services/gitlab-service.js +1092 -0
- package/dist/server/services/quota-fetcher/manifest.d.ts +5 -0
- package/dist/server/services/quota-fetcher/manifest.js +118 -0
- package/dist/server/services/quota-fetcher/provider.d.ts +18 -0
- package/dist/server/services/quota-fetcher/provider.js +2 -0
- package/dist/server/services/quota-fetcher/providers/claude.d.ts +40 -0
- package/dist/server/services/quota-fetcher/providers/claude.js +389 -0
- package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/codex.js +167 -0
- package/dist/server/services/quota-fetcher/providers/copilot.d.ts +21 -0
- package/dist/server/services/quota-fetcher/providers/copilot.js +77 -0
- package/dist/server/services/quota-fetcher/providers/cursor.d.ts +19 -0
- package/dist/server/services/quota-fetcher/providers/cursor.js +185 -0
- package/dist/server/services/quota-fetcher/providers/grok.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/grok.js +137 -0
- package/dist/server/services/quota-fetcher/providers/kimi.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/kimi.js +260 -0
- package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
- package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
- package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
- package/dist/server/services/quota-fetcher/service.d.ts +34 -0
- package/dist/server/services/quota-fetcher/service.js +74 -0
- package/dist/server/services/quota-fetcher/usage.d.ts +39 -0
- package/dist/server/services/quota-fetcher/usage.js +78 -0
- package/dist/server/skills/paseo/SKILL.md +129 -0
- package/dist/server/skills/paseo-advisor/SKILL.md +63 -0
- package/dist/server/skills/paseo-committee/SKILL.md +46 -0
- package/dist/server/skills/paseo-handoff/SKILL.md +65 -0
- package/dist/server/skills/paseo-help/SKILL.md +92 -0
- package/dist/server/skills/paseo-plugin/SKILL.md +639 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +21 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.js +65 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
- package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
- package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
- package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +81 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
- package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
- package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
- package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
- package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
- package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/server/terminal/terminal-capture.d.ts +12 -0
- package/dist/server/terminal/terminal-capture.js +43 -0
- package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
- package/dist/server/terminal/terminal-manager-factory.js +5 -0
- package/dist/server/terminal/terminal-manager.d.ts +80 -0
- package/dist/server/terminal/terminal-manager.js +321 -0
- package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
- package/dist/server/terminal/terminal-output-coalescer.js +73 -0
- package/dist/server/terminal/terminal-restore.d.ts +18 -0
- package/dist/server/terminal/terminal-restore.js +52 -0
- package/dist/server/terminal/terminal-session-controller.d.ts +90 -0
- package/dist/server/terminal/terminal-session-controller.js +849 -0
- package/dist/server/terminal/terminal-size-ownership.d.ts +9 -0
- package/dist/server/terminal/terminal-size-ownership.js +23 -0
- package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
- package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
- package/dist/server/terminal/terminal-worker-process.js +308 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +121 -0
- package/dist/server/terminal/terminal-worker-protocol.js +2 -0
- package/dist/server/terminal/terminal.d.ts +151 -0
- package/dist/server/terminal/terminal.js +1234 -0
- package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
- package/dist/server/terminal/worker-terminal-manager.js +688 -0
- package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
- package/dist/server/utils/build-metadata-prompt.js +29 -0
- package/dist/server/utils/checkout-git.d.ts +317 -0
- package/dist/server/utils/checkout-git.js +2886 -0
- package/dist/server/utils/directory-suggestions.d.ts +29 -0
- package/dist/server/utils/directory-suggestions.js +596 -0
- package/dist/server/utils/git-command-runtime-metrics.d.ts +67 -0
- package/dist/server/utils/git-command-runtime-metrics.js +126 -0
- package/dist/server/utils/git-command-trace.d.ts +29 -0
- package/dist/server/utils/git-command-trace.js +74 -0
- package/dist/server/utils/git-process-scheduler.d.ts +34 -0
- package/dist/server/utils/git-process-scheduler.js +112 -0
- package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
- package/dist/server/utils/git-rev-parse-path.js +21 -0
- package/dist/server/utils/paseo-config-file.d.ts +30 -0
- package/dist/server/utils/paseo-config-file.js +90 -0
- package/dist/server/utils/path.d.ts +27 -0
- package/dist/server/utils/path.js +156 -0
- package/dist/server/utils/project-custom-icon.d.ts +40 -0
- package/dist/server/utils/project-custom-icon.js +144 -0
- package/dist/server/utils/project-icon.d.ts +54 -0
- package/dist/server/utils/project-icon.js +445 -0
- package/dist/server/utils/promise-timeout.d.ts +9 -0
- package/dist/server/utils/promise-timeout.js +25 -0
- package/dist/server/utils/run-git-command.d.ts +59 -0
- package/dist/server/utils/run-git-command.js +393 -0
- package/dist/server/utils/spawn.d.ts +26 -0
- package/dist/server/utils/spawn.js +60 -0
- package/dist/server/utils/ssh-hostname.d.ts +8 -0
- package/dist/server/utils/ssh-hostname.js +60 -0
- package/dist/server/utils/string-command-shell.d.ts +13 -0
- package/dist/server/utils/string-command-shell.js +37 -0
- package/dist/server/utils/tree-kill.d.ts +19 -0
- package/dist/server/utils/tree-kill.js +77 -0
- package/dist/server/utils/windows-command.d.ts +15 -0
- package/dist/server/utils/windows-command.js +41 -0
- package/dist/server/utils/worktree-metadata.d.ts +77 -0
- package/dist/server/utils/worktree-metadata.js +280 -0
- package/dist/server/utils/worktree.d.ts +232 -0
- package/dist/server/utils/worktree.js +1193 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-29f33408b1a3c5b435c5202d62a36719.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-41547ee520dfff946caa727824742a5c.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js +16819 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-03b99be4265ac4a2bc5a6d602fd59cc4.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-5444610146b0794f1e7d9edad4522d41.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-88b083190031a44788be59103814f511.js.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +90 -0
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/dist/server/web-ui/manifest.json +27 -0
- package/dist/server/web-ui/manifest.json.br +0 -0
- package/dist/server/web-ui/manifest.json.gz +0 -0
- package/dist/server/web-ui/metadata.json +1 -0
- package/dist/server/web-ui/metadata.json.br +1 -0
- package/dist/server/web-ui/metadata.json.gz +0 -0
- package/dist/server/web-ui/pwa-icon-192.png +0 -0
- package/dist/server/web-ui/pwa-icon-512.png +0 -0
- package/dist/server/web-ui/robots.txt +2 -0
- package/dist/src/executable-resolution/executable-resolution.js +121 -0
- package/dist/src/executable-resolution/windows.js +65 -0
- package/dist/src/server/agent/provider-launch-config.js +167 -0
- package/dist/src/server/paseo-env.js +54 -0
- package/dist/src/server/paseo-home.js +19 -0
- package/dist/src/server/persisted-config.js +411 -0
- package/dist/src/server/pid-lock.js +285 -0
- package/dist/src/server/private-files.js +37 -0
- package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
- package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
- package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
- package/dist/src/utils/spawn.js +60 -0
- package/dist/src/utils/tree-kill.js +77 -0
- package/dist/src/utils/windows-command.js +41 -0
- package/package.json +125 -0
|
@@ -0,0 +1,1234 @@
|
|
|
1
|
+
import * as pty from "node-pty";
|
|
2
|
+
import xterm from "@xterm/headless";
|
|
3
|
+
import { randomUUID } from "crypto";
|
|
4
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, statSync } from "node:fs";
|
|
5
|
+
import { tmpdir, userInfo } from "node:os";
|
|
6
|
+
import { basename, delimiter, dirname, extname, join, resolve as resolvePath } from "node:path";
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { createExternalProcessEnv } from "../server/paseo-env.js";
|
|
10
|
+
import { writePrivateFileAtomicSync } from "../server/private-files.js";
|
|
11
|
+
import { findExecutable } from "../executable-resolution/executable-resolution.js";
|
|
12
|
+
import { TerminalInputModeTracker } from "@camerontaylor/paseo-protocol/terminal-input-mode";
|
|
13
|
+
import { TerminalActivityTracker } from "./activity/terminal-activity-tracker.js";
|
|
14
|
+
const { Terminal } = xterm;
|
|
15
|
+
const require = createRequire(import.meta.url);
|
|
16
|
+
const PASEO_CLI_BIN_ENTRY = "@camerontaylor/paseo-cli/bin/paseo";
|
|
17
|
+
let nodePtySpawnHelperChecked = false;
|
|
18
|
+
const TERMINAL_TITLE_DEBOUNCE_MS = 150;
|
|
19
|
+
const TERMINAL_EXIT_OUTPUT_LINE_LIMIT = 12;
|
|
20
|
+
const TERMINAL_EXIT_OUTPUT_CHAR_LIMIT = 16000;
|
|
21
|
+
const TERMINAL_OSC_COLOR_QUERY_RESPONSES = new Map([
|
|
22
|
+
[10, "rgb:e6e6/e6e6/e6e6"],
|
|
23
|
+
[11, "rgb:0b0b/0b0b/0b0b"],
|
|
24
|
+
[12, "rgb:e6e6/e6e6/e6e6"],
|
|
25
|
+
]);
|
|
26
|
+
function parseCommandFinishedOsc(data) {
|
|
27
|
+
// OSC 633 is terminal control traffic, but a foreground command can still
|
|
28
|
+
// print arbitrary control bytes. Keep this boundary to the exact VS Code
|
|
29
|
+
// command-finished shape emitted by our shell integration.
|
|
30
|
+
const parts = data.split(";");
|
|
31
|
+
if (parts[0] !== "D") {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (parts.length === 1) {
|
|
35
|
+
return { exitCode: null };
|
|
36
|
+
}
|
|
37
|
+
if (parts.length !== 2 || !/^-?\d+$/.test(parts[1])) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return { exitCode: Number(parts[1]) };
|
|
41
|
+
}
|
|
42
|
+
function toTerminalActivity(snapshot) {
|
|
43
|
+
if (!snapshot.state) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
state: snapshot.state,
|
|
48
|
+
...(snapshot.attentionReason ? { attentionReason: snapshot.attentionReason } : {}),
|
|
49
|
+
changedAt: snapshot.changedAt,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function resolveInitialTitleMode(presetTitle) {
|
|
53
|
+
return presetTitle?.trim() ? "manual" : "auto";
|
|
54
|
+
}
|
|
55
|
+
function isTerminalActivityInterruptInput(data) {
|
|
56
|
+
return data === "\x03" || data === "\x1b";
|
|
57
|
+
}
|
|
58
|
+
function resolveNodePtyPackageRoot() {
|
|
59
|
+
try {
|
|
60
|
+
const packageJsonPath = require.resolve("node-pty/package.json");
|
|
61
|
+
return dirname(packageJsonPath);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function ensureExecutableBit(path) {
|
|
68
|
+
if (!existsSync(path)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const stat = statSync(path);
|
|
72
|
+
if (!stat.isFile()) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// node-pty 1.1.0 shipped darwin prebuild spawn-helper without execute bit.
|
|
76
|
+
if ((stat.mode & 0o111) === 0o111) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
chmodSync(path, stat.mode | 0o111);
|
|
80
|
+
}
|
|
81
|
+
export function ensureNodePtySpawnHelperExecutableForCurrentPlatform(options = {}) {
|
|
82
|
+
const platform = options.platform ?? process.platform;
|
|
83
|
+
if (platform !== "darwin") {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (nodePtySpawnHelperChecked && !options.force) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const packageRoot = options.packageRoot ?? resolveNodePtyPackageRoot();
|
|
90
|
+
if (!packageRoot) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const arch = options.arch ?? process.arch;
|
|
94
|
+
const candidates = [
|
|
95
|
+
join(packageRoot, "build", "Release", "spawn-helper"),
|
|
96
|
+
join(packageRoot, "build", "Debug", "spawn-helper"),
|
|
97
|
+
join(packageRoot, "prebuilds", `darwin-${arch}`, "spawn-helper"),
|
|
98
|
+
];
|
|
99
|
+
for (const candidate of candidates) {
|
|
100
|
+
try {
|
|
101
|
+
ensureExecutableBit(candidate);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// best-effort hardening only
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (!options.force) {
|
|
108
|
+
nodePtySpawnHelperChecked = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export function resolveDefaultTerminalShell(options = {}) {
|
|
112
|
+
const platform = options.platform ?? process.platform;
|
|
113
|
+
const env = options.env ?? process.env;
|
|
114
|
+
if (platform === "win32") {
|
|
115
|
+
return env.ComSpec || env.COMSPEC || "C:\\Windows\\System32\\cmd.exe";
|
|
116
|
+
}
|
|
117
|
+
return env.SHELL || "/bin/sh";
|
|
118
|
+
}
|
|
119
|
+
// cmd.exe treats these characters specially even inside a double-quoted
|
|
120
|
+
// argument, unlike a POSIX shell — quoting alone does not neutralize them.
|
|
121
|
+
// Prefixing each with `^`, cmd.exe's own escape character, does. Mirrors the
|
|
122
|
+
// `escape.command` metachar list in the `cross-spawn` npm package (already a
|
|
123
|
+
// dependency of this repo), which solves this exact `.cmd`/`.bat` spawning
|
|
124
|
+
// problem — see http://www.robvanderwoude.com/escapechars.php.
|
|
125
|
+
const CMD_EXE_METACHAR_PATTERN = /([()%!^"`<>&|;, *?])/g;
|
|
126
|
+
function escapeCmdExeMetaChars(text) {
|
|
127
|
+
return text.replace(CMD_EXE_METACHAR_PATTERN, "^$1");
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Escape one argument for safe inclusion in a `cmd.exe /c "..."` command
|
|
131
|
+
* line that is about to invoke a `.cmd`/`.bat` shim.
|
|
132
|
+
*
|
|
133
|
+
* node-pty builds an MSVCRT/`CommandLineToArgvW`-style quoted command line
|
|
134
|
+
* for whatever `command` it is given (double-quote wrap on whitespace,
|
|
135
|
+
* backslash-escape only backslash runs immediately before a quote). That
|
|
136
|
+
* quoting is correct for a normal executable, which parses its own argv via
|
|
137
|
+
* that same convention. It is not correct here: the `command` node-pty
|
|
138
|
+
* launches for a `.cmd`/`.bat` target is `cmd.exe` itself, and cmd.exe
|
|
139
|
+
* re-parses the whole line with its *own* tokenizer before ever handing
|
|
140
|
+
* arguments to the batch script — a tokenizer that treats `&`, `|`, `^`,
|
|
141
|
+
* `%` (environment-variable expansion), `<`, `>` etc. as live syntax even
|
|
142
|
+
* inside double quotes. A prompt containing any of those characters would
|
|
143
|
+
* therefore be interpreted by cmd.exe, not passed through as text — the
|
|
144
|
+
* same class of hazard tracked upstream as Node's CVE-2024-27980
|
|
145
|
+
* ("batBadBadging").
|
|
146
|
+
*
|
|
147
|
+
* The escaping below is the "qntm" algorithm (https://qntm.org/cmd): double
|
|
148
|
+
* every backslash run that immediately precedes a quote (or the end of the
|
|
149
|
+
* argument, since a closing quote is appended next) and escape that quote,
|
|
150
|
+
* wrap the whole argument in quotes, then caret-escape cmd.exe's
|
|
151
|
+
* metacharacters — including the quotes just added, because cmd.exe's own
|
|
152
|
+
* tokenizer runs first and would otherwise treat them as toggling a quoted
|
|
153
|
+
* region. It is the same algorithm `cross-spawn` uses for its `.cmd`/`.bat`
|
|
154
|
+
* auto-shell path (`lib/util/escape.js`). Command shims forward `%*`, which
|
|
155
|
+
* adds a second cmd.exe parse, so metacharacters need a second escape pass to
|
|
156
|
+
* survive as literal argv in the Node process behind an npm-generated shim.
|
|
157
|
+
*
|
|
158
|
+
* cmd.exe has no escape for a literal CR or LF inside a single command
|
|
159
|
+
* line — its parser treats them as command separators regardless of
|
|
160
|
+
* quoting, so passing one through verbatim would let a crafted prompt
|
|
161
|
+
* inject a second, attacker-chosen command after the newline. There is no
|
|
162
|
+
* fidelity-preserving option for that case, so newlines are normalized to
|
|
163
|
+
* spaces before quoting: the target process still receives the full text,
|
|
164
|
+
* just without the original line breaks, instead of cmd.exe splitting the
|
|
165
|
+
* prompt into multiple commands.
|
|
166
|
+
*/
|
|
167
|
+
function escapeCmdExeArgument(rawArg) {
|
|
168
|
+
const arg = rawArg.replace(/\r\n|\r|\n/g, " ");
|
|
169
|
+
let escaped = arg.replace(/(\\*)"/g, '$1$1\\"');
|
|
170
|
+
escaped = escaped.replace(/(\\*)$/, "$1$1");
|
|
171
|
+
escaped = `"${escaped}"`;
|
|
172
|
+
return escapeCmdExeMetaChars(escapeCmdExeMetaChars(escaped));
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Resolve a terminal profile command (e.g. `claude`) into something node-pty's
|
|
176
|
+
* conpty backend can actually launch on Windows.
|
|
177
|
+
*
|
|
178
|
+
* On Windows, conpty's underlying `CreateProcess` does not apply `PATHEXT`, so a
|
|
179
|
+
* bare `claude` (installed by npm as `claude.cmd`) fails with `error code: 2`
|
|
180
|
+
* (`ERROR_FILE_NOT_FOUND`). Worse, conpty completes the spawn asynchronously on
|
|
181
|
+
* its own conout worker thread, so that failure surfaces as an uncaught
|
|
182
|
+
* exception that takes down the whole terminal worker process. Resolving the
|
|
183
|
+
* real path up front — and routing `.cmd`/`.bat` shims through `cmd.exe /c`
|
|
184
|
+
* (node-pty has no `shell` option) — keeps the profile launchable.
|
|
185
|
+
*
|
|
186
|
+
* Non-Windows and the default-shell path (no explicit command) are unchanged.
|
|
187
|
+
*/
|
|
188
|
+
export async function resolveTerminalSpawnCommand(command, args, options = {}) {
|
|
189
|
+
const platform = options.platform ?? process.platform;
|
|
190
|
+
if (platform !== "win32") {
|
|
191
|
+
return { command, args };
|
|
192
|
+
}
|
|
193
|
+
const resolveExecutable = options.resolveExecutable ?? findExecutable;
|
|
194
|
+
const resolved = await resolveExecutable(command);
|
|
195
|
+
if (!resolved) {
|
|
196
|
+
// Leave the command as-is so the terminal itself surfaces the "not found"
|
|
197
|
+
// error to the user instead of silently doing nothing.
|
|
198
|
+
return { command, args };
|
|
199
|
+
}
|
|
200
|
+
// `.cmd`/`.bat` shims are batch scripts that conpty's CreateProcess cannot
|
|
201
|
+
// launch directly; they must run through cmd.exe (node-pty has no `shell`
|
|
202
|
+
// option, so build the `cmd /c` invocation ourselves). Checked by extension
|
|
203
|
+
// rather than isWindowsCommandScript() because that helper gates on the live
|
|
204
|
+
// process.platform, which is wrong once we're already on the win32 branch.
|
|
205
|
+
const extension = extname(resolved).toLowerCase();
|
|
206
|
+
if (extension === ".cmd" || extension === ".bat") {
|
|
207
|
+
const env = options.env ?? process.env;
|
|
208
|
+
const comSpec = env.ComSpec || env.COMSPEC || "C:\\Windows\\System32\\cmd.exe";
|
|
209
|
+
// Build the `/c` command line ourselves — as a single pre-escaped
|
|
210
|
+
// string, not an argv array — so node-pty's own array quoting never
|
|
211
|
+
// runs over these values; see escapeCmdExeArgument for why that
|
|
212
|
+
// quoting alone is not safe once cmd.exe re-parses the line. `resolved`
|
|
213
|
+
// gets the same metachar (not quote-wrap) treatment as the args: it
|
|
214
|
+
// isn't attacker-controlled, but it now sits inside the same joined
|
|
215
|
+
// command line and needs to survive cmd.exe's tokenizer too (e.g. a
|
|
216
|
+
// space in the install path).
|
|
217
|
+
const commandLine = [
|
|
218
|
+
"/d",
|
|
219
|
+
"/s",
|
|
220
|
+
"/c",
|
|
221
|
+
`"${[escapeCmdExeMetaChars(resolved), ...args.map(escapeCmdExeArgument)].join(" ")}"`,
|
|
222
|
+
].join(" ");
|
|
223
|
+
return { command: comSpec, args: commandLine };
|
|
224
|
+
}
|
|
225
|
+
return { command: resolved, args };
|
|
226
|
+
}
|
|
227
|
+
export function resolveZshShellIntegrationDir() {
|
|
228
|
+
return fileURLToPath(new URL("./shell-integration/zsh", import.meta.url));
|
|
229
|
+
}
|
|
230
|
+
function resolveExternalProcessPath(filePath) {
|
|
231
|
+
return filePath.replace(/\.asar(?=[/\\]|$)/, ".asar.unpacked");
|
|
232
|
+
}
|
|
233
|
+
export function resolvePaseoCliBinDir() {
|
|
234
|
+
const cliExecutable = resolvePaseoCliExecutablePath();
|
|
235
|
+
return cliExecutable ? dirname(cliExecutable) : null;
|
|
236
|
+
}
|
|
237
|
+
export function resolvePaseoCliExecutablePath() {
|
|
238
|
+
const configuredCli = process.env.PASEO_CLI?.trim();
|
|
239
|
+
if (configuredCli) {
|
|
240
|
+
return resolvePath(configuredCli);
|
|
241
|
+
}
|
|
242
|
+
const cliEntrypoint = resolvePaseoCliBinEntrypoint();
|
|
243
|
+
if (!cliEntrypoint) {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
const externalCliEntrypoint = resolveExternalProcessPath(cliEntrypoint);
|
|
247
|
+
const npmBinDir = findNpmBinDir(dirname(externalCliEntrypoint));
|
|
248
|
+
if (npmBinDir) {
|
|
249
|
+
const shim = resolvePaseoCliShim(npmBinDir);
|
|
250
|
+
if (shim) {
|
|
251
|
+
return shim;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return externalCliEntrypoint;
|
|
255
|
+
}
|
|
256
|
+
function resolvePaseoCliBinEntrypoint() {
|
|
257
|
+
try {
|
|
258
|
+
return require.resolve(PASEO_CLI_BIN_ENTRY);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function findNpmBinDir(startPath) {
|
|
265
|
+
let current = startPath;
|
|
266
|
+
while (true) {
|
|
267
|
+
const candidate = join(current, "node_modules", ".bin");
|
|
268
|
+
if (hasPaseoCliShim(candidate)) {
|
|
269
|
+
return candidate;
|
|
270
|
+
}
|
|
271
|
+
const parent = dirname(current);
|
|
272
|
+
if (parent === current) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
current = parent;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function hasPaseoCliShim(binDir) {
|
|
279
|
+
return resolvePaseoCliShim(binDir) !== null;
|
|
280
|
+
}
|
|
281
|
+
function resolvePaseoCliShim(binDir) {
|
|
282
|
+
for (const name of paseoCliShimNames()) {
|
|
283
|
+
const candidate = join(binDir, name);
|
|
284
|
+
if (existsSync(candidate)) {
|
|
285
|
+
return candidate;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
function paseoCliShimNames() {
|
|
291
|
+
return process.platform === "win32" ? ["paseo.cmd", "paseo.exe", "paseo"] : ["paseo"];
|
|
292
|
+
}
|
|
293
|
+
function resolveZshShellIntegrationRuntimeDir() {
|
|
294
|
+
let username = "unknown";
|
|
295
|
+
try {
|
|
296
|
+
username = userInfo().username || username;
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
// keep fallback
|
|
300
|
+
}
|
|
301
|
+
return join(tmpdir(), `${username}-paseo-zsh-${process.pid}`);
|
|
302
|
+
}
|
|
303
|
+
function prepareZshShellIntegrationRuntimeDir(sourceDir = resolveZshShellIntegrationDir()) {
|
|
304
|
+
const readableSourceDir = resolveExternalProcessPath(sourceDir);
|
|
305
|
+
const runtimeDir = resolveZshShellIntegrationRuntimeDir();
|
|
306
|
+
mkdirSync(runtimeDir, { recursive: true, mode: 0o700 });
|
|
307
|
+
chmodSync(runtimeDir, 0o700);
|
|
308
|
+
writePrivateFileAtomicSync(join(runtimeDir, ".zshenv"), readFileSync(join(readableSourceDir, ".zshenv")));
|
|
309
|
+
writePrivateFileAtomicSync(join(runtimeDir, "paseo-integration.zsh"), readFileSync(join(readableSourceDir, "paseo-integration.zsh")));
|
|
310
|
+
return runtimeDir;
|
|
311
|
+
}
|
|
312
|
+
export function buildTerminalEnvironment(input) {
|
|
313
|
+
const baseEnv = createExternalProcessEnv(process.env, input.env, {
|
|
314
|
+
TERM: "xterm-256color",
|
|
315
|
+
TERM_PROGRAM: "kitty",
|
|
316
|
+
});
|
|
317
|
+
const envWithAgentHooks = prependPaseoCliToPath(baseEnv, input.paseoCliBinDir === undefined ? resolvePaseoCliBinDir() : input.paseoCliBinDir);
|
|
318
|
+
const envWithHookCli = injectPaseoHookCli(envWithAgentHooks, input.paseoHookCliPath === undefined ? resolvePaseoCliExecutablePath() : input.paseoHookCliPath);
|
|
319
|
+
if (basename(input.shell) !== "zsh") {
|
|
320
|
+
return envWithHookCli;
|
|
321
|
+
}
|
|
322
|
+
const originalZdotdir = envWithHookCli.ZDOTDIR ?? "";
|
|
323
|
+
return {
|
|
324
|
+
...envWithHookCli,
|
|
325
|
+
PASEO_ZSH_ZDOTDIR: originalZdotdir,
|
|
326
|
+
ZDOTDIR: prepareZshShellIntegrationRuntimeDir(input.zshShellIntegrationDir),
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function injectPaseoHookCli(env, cliPath) {
|
|
330
|
+
if (!cliPath) {
|
|
331
|
+
return env;
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
...env,
|
|
335
|
+
PASEO_HOOK_CLI: resolvePath(resolveExternalProcessPath(cliPath)),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function prependPaseoCliToPath(env, cliBinDir) {
|
|
339
|
+
if (!cliBinDir) {
|
|
340
|
+
return env;
|
|
341
|
+
}
|
|
342
|
+
const pathKey = getPathEnvKey(env);
|
|
343
|
+
const currentPath = env[pathKey] ?? "";
|
|
344
|
+
return {
|
|
345
|
+
...env,
|
|
346
|
+
[pathKey]: prependPathEntry(currentPath, cliBinDir),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
function getPathEnvKey(env) {
|
|
350
|
+
return Object.keys(env).find((key) => key.toLowerCase() === "path") ?? "PATH";
|
|
351
|
+
}
|
|
352
|
+
function prependPathEntry(currentPath, entry) {
|
|
353
|
+
const entries = currentPath.split(delimiter).filter((value) => value && value !== entry);
|
|
354
|
+
return [entry, ...entries].join(delimiter);
|
|
355
|
+
}
|
|
356
|
+
function extractCell(terminal, row, col) {
|
|
357
|
+
const buffer = terminal.buffer.active;
|
|
358
|
+
const line = buffer.getLine(row);
|
|
359
|
+
if (!line) {
|
|
360
|
+
return { char: " ", fg: undefined, bg: undefined };
|
|
361
|
+
}
|
|
362
|
+
const cell = line.getCell(col);
|
|
363
|
+
if (!cell) {
|
|
364
|
+
return { char: " ", fg: undefined, bg: undefined };
|
|
365
|
+
}
|
|
366
|
+
// Color modes from xterm.js: 0=DEFAULT, 1=16 colors (ANSI), 2=256 colors, 3=RGB
|
|
367
|
+
// getFgColorMode() returns packed value with mode in upper byte (e.g. 0x01000000 for mode 1)
|
|
368
|
+
const fgModeRaw = cell.getFgColorMode();
|
|
369
|
+
const bgModeRaw = cell.getBgColorMode();
|
|
370
|
+
const fgMode = fgModeRaw >> 24;
|
|
371
|
+
const bgMode = bgModeRaw >> 24;
|
|
372
|
+
// Only return color if not default (mode 0)
|
|
373
|
+
const fg = fgMode !== 0 ? cell.getFgColor() : undefined;
|
|
374
|
+
const bg = bgMode !== 0 ? cell.getBgColor() : undefined;
|
|
375
|
+
return {
|
|
376
|
+
// Wide chars (CJK) span two cells; xterm returns "" for the zero-width
|
|
377
|
+
// continuation. Collapsing it to " " injects a real space on restore.
|
|
378
|
+
char: cell.getWidth() === 0 ? "" : cell.getChars() || " ",
|
|
379
|
+
fg,
|
|
380
|
+
bg,
|
|
381
|
+
fgMode: fgMode !== 0 ? fgMode : undefined,
|
|
382
|
+
bgMode: bgMode !== 0 ? bgMode : undefined,
|
|
383
|
+
bold: cell.isBold() !== 0,
|
|
384
|
+
italic: cell.isItalic() !== 0,
|
|
385
|
+
underline: cell.isUnderline() !== 0,
|
|
386
|
+
dim: cell.isDim() !== 0,
|
|
387
|
+
inverse: cell.isInverse() !== 0,
|
|
388
|
+
strikethrough: cell.isStrikethrough() !== 0,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
function extractGrid(terminal) {
|
|
392
|
+
const grid = [];
|
|
393
|
+
const buffer = terminal.buffer.active;
|
|
394
|
+
// Visible viewport starts at baseY
|
|
395
|
+
const baseY = buffer.baseY;
|
|
396
|
+
for (let row = 0; row < terminal.rows; row++) {
|
|
397
|
+
const rowCells = [];
|
|
398
|
+
for (let col = 0; col < terminal.cols; col++) {
|
|
399
|
+
rowCells.push(extractCell(terminal, baseY + row, col));
|
|
400
|
+
}
|
|
401
|
+
grid.push(rowCells);
|
|
402
|
+
}
|
|
403
|
+
return grid;
|
|
404
|
+
}
|
|
405
|
+
function extractScrollback(terminal, options) {
|
|
406
|
+
const scrollback = [];
|
|
407
|
+
const buffer = terminal.buffer.active;
|
|
408
|
+
// baseY is the first row of the visible viewport (0-indexed)
|
|
409
|
+
// Lines 0 to baseY-1 are in scrollback, lines baseY onwards are visible
|
|
410
|
+
const scrollbackLines = buffer.baseY;
|
|
411
|
+
const startRow = typeof options?.scrollbackLines === "number"
|
|
412
|
+
? Math.max(0, scrollbackLines - options.scrollbackLines)
|
|
413
|
+
: 0;
|
|
414
|
+
for (let row = startRow; row < scrollbackLines; row++) {
|
|
415
|
+
const rowCells = [];
|
|
416
|
+
const line = buffer.getLine(row);
|
|
417
|
+
for (let col = 0; col < terminal.cols; col++) {
|
|
418
|
+
if (line) {
|
|
419
|
+
const cell = line.getCell(col);
|
|
420
|
+
if (cell) {
|
|
421
|
+
const fgModeRaw = cell.getFgColorMode();
|
|
422
|
+
const bgModeRaw = cell.getBgColorMode();
|
|
423
|
+
const fgMode = fgModeRaw >> 24;
|
|
424
|
+
const bgMode = bgModeRaw >> 24;
|
|
425
|
+
const fg = fgMode !== 0 ? cell.getFgColor() : undefined;
|
|
426
|
+
const bg = bgMode !== 0 ? cell.getBgColor() : undefined;
|
|
427
|
+
rowCells.push({
|
|
428
|
+
// Wide chars (CJK) span two cells; xterm returns "" for the zero-width
|
|
429
|
+
// continuation. Collapsing it to " " injects a real space on restore.
|
|
430
|
+
char: cell.getWidth() === 0 ? "" : cell.getChars() || " ",
|
|
431
|
+
fg,
|
|
432
|
+
bg,
|
|
433
|
+
fgMode: fgMode !== 0 ? fgMode : undefined,
|
|
434
|
+
bgMode: bgMode !== 0 ? bgMode : undefined,
|
|
435
|
+
bold: cell.isBold() !== 0,
|
|
436
|
+
italic: cell.isItalic() !== 0,
|
|
437
|
+
underline: cell.isUnderline() !== 0,
|
|
438
|
+
dim: cell.isDim() !== 0,
|
|
439
|
+
inverse: cell.isInverse() !== 0,
|
|
440
|
+
strikethrough: cell.isStrikethrough() !== 0,
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
rowCells.push({ char: " ", fg: undefined, bg: undefined });
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
rowCells.push({ char: " ", fg: undefined, bg: undefined });
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
scrollback.push(rowCells);
|
|
452
|
+
}
|
|
453
|
+
return scrollback;
|
|
454
|
+
}
|
|
455
|
+
// xterm marks a line `isWrapped` when it is a continuation of the PREVIOUS line.
|
|
456
|
+
// The snapshot carries the inverse, tmux-style flag — "this row continues onto the
|
|
457
|
+
// next row" — so the client can rejoin and reflow logical lines. So row y's flag is
|
|
458
|
+
// whether line y+1 is a wrapped continuation.
|
|
459
|
+
function lineContinuesToNext(terminal, absoluteRow) {
|
|
460
|
+
return terminal.buffer.active.getLine(absoluteRow + 1)?.isWrapped === true;
|
|
461
|
+
}
|
|
462
|
+
function extractGridWrapped(terminal) {
|
|
463
|
+
const baseY = terminal.buffer.active.baseY;
|
|
464
|
+
const wrapped = [];
|
|
465
|
+
for (let row = 0; row < terminal.rows; row++) {
|
|
466
|
+
wrapped.push(lineContinuesToNext(terminal, baseY + row));
|
|
467
|
+
}
|
|
468
|
+
return wrapped;
|
|
469
|
+
}
|
|
470
|
+
function extractScrollbackWrapped(terminal, options) {
|
|
471
|
+
const scrollbackLines = terminal.buffer.active.baseY;
|
|
472
|
+
const startRow = typeof options?.scrollbackLines === "number"
|
|
473
|
+
? Math.max(0, scrollbackLines - options.scrollbackLines)
|
|
474
|
+
: 0;
|
|
475
|
+
const wrapped = [];
|
|
476
|
+
for (let row = startRow; row < scrollbackLines; row++) {
|
|
477
|
+
wrapped.push(lineContinuesToNext(terminal, row));
|
|
478
|
+
}
|
|
479
|
+
return wrapped;
|
|
480
|
+
}
|
|
481
|
+
function extractCursorState(terminal) {
|
|
482
|
+
const coreService = terminal
|
|
483
|
+
._core?.coreService;
|
|
484
|
+
const cursorStyle = coreService?.decPrivateModes?.cursorStyle;
|
|
485
|
+
const normalizedCursorStyle = cursorStyle === "block" || cursorStyle === "underline" || cursorStyle === "bar"
|
|
486
|
+
? cursorStyle
|
|
487
|
+
: undefined;
|
|
488
|
+
const cursorBlink = typeof coreService?.decPrivateModes?.cursorBlink === "boolean"
|
|
489
|
+
? coreService.decPrivateModes.cursorBlink
|
|
490
|
+
: undefined;
|
|
491
|
+
const hidden = Boolean(coreService?.isCursorHidden);
|
|
492
|
+
return {
|
|
493
|
+
row: terminal.buffer.active.cursorY,
|
|
494
|
+
col: terminal.buffer.active.cursorX,
|
|
495
|
+
...(hidden ? { hidden: true } : {}),
|
|
496
|
+
...(normalizedCursorStyle ? { style: normalizedCursorStyle } : {}),
|
|
497
|
+
...(typeof cursorBlink === "boolean" ? { blink: cursorBlink } : {}),
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
function normalizeProcessToken(token) {
|
|
501
|
+
if (token.length === 0) {
|
|
502
|
+
return token;
|
|
503
|
+
}
|
|
504
|
+
let quote;
|
|
505
|
+
if (token.startsWith('"') && token.endsWith('"')) {
|
|
506
|
+
quote = '"';
|
|
507
|
+
}
|
|
508
|
+
else if (token.startsWith("'") && token.endsWith("'")) {
|
|
509
|
+
quote = "'";
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
quote = "";
|
|
513
|
+
}
|
|
514
|
+
const rawToken = quote ? token.slice(1, -1) : token;
|
|
515
|
+
if (rawToken.length === 0) {
|
|
516
|
+
return token;
|
|
517
|
+
}
|
|
518
|
+
const assignmentMatch = rawToken.match(/^([A-Za-z_][A-Za-z0-9_]*=)(.+)$/);
|
|
519
|
+
const prefix = assignmentMatch ? assignmentMatch[1] : "";
|
|
520
|
+
const value = assignmentMatch ? assignmentMatch[2] : rawToken;
|
|
521
|
+
if (!value.includes("/")) {
|
|
522
|
+
return token;
|
|
523
|
+
}
|
|
524
|
+
const normalized = `${prefix}${basename(value)}`;
|
|
525
|
+
return quote ? `${quote}${normalized}${quote}` : normalized;
|
|
526
|
+
}
|
|
527
|
+
export function normalizeProcessTitle(processTitle) {
|
|
528
|
+
const trimmed = processTitle.trim().replace(/\s+/g, " ");
|
|
529
|
+
if (trimmed.length === 0) {
|
|
530
|
+
return undefined;
|
|
531
|
+
}
|
|
532
|
+
const normalized = trimmed
|
|
533
|
+
.split(" ")
|
|
534
|
+
.map((token) => normalizeProcessToken(token))
|
|
535
|
+
.join(" ")
|
|
536
|
+
.trim();
|
|
537
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
538
|
+
}
|
|
539
|
+
const PROCESS_INTERPRETERS = new Set([
|
|
540
|
+
"bash",
|
|
541
|
+
"bun",
|
|
542
|
+
"deno",
|
|
543
|
+
"node",
|
|
544
|
+
"nodejs",
|
|
545
|
+
"python",
|
|
546
|
+
"python3",
|
|
547
|
+
"ruby",
|
|
548
|
+
"sh",
|
|
549
|
+
"tsx",
|
|
550
|
+
"zsh",
|
|
551
|
+
]);
|
|
552
|
+
const PACKAGE_MANAGER_SCRIPT_NAMES = new Map([
|
|
553
|
+
["bun.js", "bun"],
|
|
554
|
+
["npm-cli.js", "npm"],
|
|
555
|
+
["npx-cli.js", "npx"],
|
|
556
|
+
["pnpm.cjs", "pnpm"],
|
|
557
|
+
["pnpm.js", "pnpm"],
|
|
558
|
+
["yarn.cjs", "yarn"],
|
|
559
|
+
["yarn.js", "yarn"],
|
|
560
|
+
]);
|
|
561
|
+
export function humanizeProcessTitle(processTitle) {
|
|
562
|
+
const normalized = normalizeProcessTitle(processTitle);
|
|
563
|
+
if (!normalized) {
|
|
564
|
+
return undefined;
|
|
565
|
+
}
|
|
566
|
+
const tokens = normalized.split(" ").filter(Boolean);
|
|
567
|
+
if (tokens.length === 0) {
|
|
568
|
+
return undefined;
|
|
569
|
+
}
|
|
570
|
+
while (tokens[0] === "env") {
|
|
571
|
+
tokens.shift();
|
|
572
|
+
while (tokens[0] && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[0])) {
|
|
573
|
+
tokens.shift();
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
if (tokens.length === 0) {
|
|
577
|
+
return normalized;
|
|
578
|
+
}
|
|
579
|
+
const first = tokens[0];
|
|
580
|
+
const second = tokens[1];
|
|
581
|
+
if (PROCESS_INTERPRETERS.has(first) && second) {
|
|
582
|
+
const packageManager = PACKAGE_MANAGER_SCRIPT_NAMES.get(second);
|
|
583
|
+
if (packageManager) {
|
|
584
|
+
return [packageManager, ...tokens.slice(2)].join(" ").trim() || packageManager;
|
|
585
|
+
}
|
|
586
|
+
if (!second.startsWith("-")) {
|
|
587
|
+
return [second, ...tokens.slice(2)].join(" ").trim();
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
return normalized;
|
|
591
|
+
}
|
|
592
|
+
function extractLastOutputLines(terminal, limit) {
|
|
593
|
+
const buffer = terminal.buffer.active;
|
|
594
|
+
const mergedLines = [];
|
|
595
|
+
for (let row = 0; row < buffer.length; row++) {
|
|
596
|
+
const line = buffer.getLine(row);
|
|
597
|
+
if (!line) {
|
|
598
|
+
continue;
|
|
599
|
+
}
|
|
600
|
+
const text = line.translateToString(true);
|
|
601
|
+
const isWrapped = line.isWrapped === true;
|
|
602
|
+
if (isWrapped && mergedLines.length > 0) {
|
|
603
|
+
mergedLines[mergedLines.length - 1] += text;
|
|
604
|
+
continue;
|
|
605
|
+
}
|
|
606
|
+
mergedLines.push(text);
|
|
607
|
+
}
|
|
608
|
+
while (mergedLines.length > 0 && mergedLines[0]?.trim().length === 0) {
|
|
609
|
+
mergedLines.shift();
|
|
610
|
+
}
|
|
611
|
+
while (mergedLines.length > 0 && mergedLines[mergedLines.length - 1]?.trim().length === 0) {
|
|
612
|
+
mergedLines.pop();
|
|
613
|
+
}
|
|
614
|
+
return mergedLines.slice(-limit);
|
|
615
|
+
}
|
|
616
|
+
const ESC = String.fromCharCode(0x1b);
|
|
617
|
+
const BEL = String.fromCharCode(0x07);
|
|
618
|
+
const ANSI_SEQUENCE_PATTERN = new RegExp(`${ESC}(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~]|\\].*?(?:${BEL}|${ESC}\\\\))`, "g");
|
|
619
|
+
function stripAnsiSequences(input) {
|
|
620
|
+
return input.replace(ANSI_SEQUENCE_PATTERN, "");
|
|
621
|
+
}
|
|
622
|
+
function extractLastOutputLinesFromText(text, limit) {
|
|
623
|
+
const normalized = stripAnsiSequences(text).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
624
|
+
const lines = normalized.split("\n").map((line) => line.trimEnd());
|
|
625
|
+
while (lines[0]?.trim().length === 0) {
|
|
626
|
+
lines.shift();
|
|
627
|
+
}
|
|
628
|
+
while (lines[lines.length - 1]?.trim().length === 0) {
|
|
629
|
+
lines.pop();
|
|
630
|
+
}
|
|
631
|
+
return lines.slice(-limit);
|
|
632
|
+
}
|
|
633
|
+
export async function createTerminal(options) {
|
|
634
|
+
const { cwd, workspaceId, shell, env = {}, activityEnv = {}, rows = 24, cols = 80, name = "Terminal", title: presetTitle, command, args = [], } = options;
|
|
635
|
+
const resolvedShell = shell ?? resolveDefaultTerminalShell();
|
|
636
|
+
const id = options.id ?? randomUUID();
|
|
637
|
+
const listeners = new Set();
|
|
638
|
+
const exitListeners = new Set();
|
|
639
|
+
const commandFinishedListeners = new Set();
|
|
640
|
+
const titleChangeListeners = new Set();
|
|
641
|
+
let killed = false;
|
|
642
|
+
let disposed = false;
|
|
643
|
+
let exitEmitted = false;
|
|
644
|
+
let processExited = false;
|
|
645
|
+
const processExitWaiters = new Set();
|
|
646
|
+
let exitInfo = null;
|
|
647
|
+
// Recent output is retained as whole chunks plus a running char length so we
|
|
648
|
+
// avoid reallocating a ~16KB string on every pty chunk. We keep enough whole
|
|
649
|
+
// chunks that their join always contains at least the last
|
|
650
|
+
// TERMINAL_EXIT_OUTPUT_CHAR_LIMIT chars; the exact tail is sliced at exit.
|
|
651
|
+
const recentOutputChunks = [];
|
|
652
|
+
let recentOutputLength = 0;
|
|
653
|
+
let title;
|
|
654
|
+
let titleMode = resolveInitialTitleMode(presetTitle);
|
|
655
|
+
let pendingTitle;
|
|
656
|
+
let titleDebounceTimer = null;
|
|
657
|
+
let pendingInput = "";
|
|
658
|
+
let inputFlushImmediate = null;
|
|
659
|
+
let stateRevision = 0;
|
|
660
|
+
const inputModeTracker = new TerminalInputModeTracker();
|
|
661
|
+
const activityTracker = new TerminalActivityTracker();
|
|
662
|
+
const activityChangeListeners = new Set();
|
|
663
|
+
let titleChangeSubscription = null;
|
|
664
|
+
// Create xterm.js headless terminal
|
|
665
|
+
const terminal = new Terminal({
|
|
666
|
+
rows,
|
|
667
|
+
cols,
|
|
668
|
+
scrollback: 1000,
|
|
669
|
+
allowProposedApi: true,
|
|
670
|
+
});
|
|
671
|
+
ensureNodePtySpawnHelperExecutableForCurrentPlatform();
|
|
672
|
+
// Create PTY
|
|
673
|
+
const { command: spawnCommand, args: spawnArgs } = command
|
|
674
|
+
? await resolveTerminalSpawnCommand(command, args)
|
|
675
|
+
: { command: resolvedShell, args: [] };
|
|
676
|
+
const ptyProcess = pty.spawn(spawnCommand, spawnArgs, {
|
|
677
|
+
name: "xterm-256color",
|
|
678
|
+
cols,
|
|
679
|
+
rows,
|
|
680
|
+
cwd,
|
|
681
|
+
env: buildTerminalEnvironment({
|
|
682
|
+
shell: spawnCommand,
|
|
683
|
+
env: {
|
|
684
|
+
...env,
|
|
685
|
+
...activityEnv,
|
|
686
|
+
PASEO_WORKSPACE_ID: workspaceId,
|
|
687
|
+
},
|
|
688
|
+
}),
|
|
689
|
+
});
|
|
690
|
+
function emitTitleChange(nextTitle) {
|
|
691
|
+
if (title === nextTitle) {
|
|
692
|
+
return;
|
|
693
|
+
}
|
|
694
|
+
title = nextTitle;
|
|
695
|
+
for (const listener of Array.from(titleChangeListeners)) {
|
|
696
|
+
try {
|
|
697
|
+
listener(title);
|
|
698
|
+
}
|
|
699
|
+
catch {
|
|
700
|
+
// no-op
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
for (const listener of Array.from(listeners)) {
|
|
704
|
+
try {
|
|
705
|
+
listener({ type: "titleChange", title });
|
|
706
|
+
}
|
|
707
|
+
catch {
|
|
708
|
+
// no-op
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
function clearPendingTitleChange() {
|
|
713
|
+
pendingTitle = undefined;
|
|
714
|
+
if (titleDebounceTimer) {
|
|
715
|
+
clearTimeout(titleDebounceTimer);
|
|
716
|
+
titleDebounceTimer = null;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
function disposeTitleChangeSubscription() {
|
|
720
|
+
titleChangeSubscription?.dispose();
|
|
721
|
+
titleChangeSubscription = null;
|
|
722
|
+
}
|
|
723
|
+
function setTitle(nextTitle) {
|
|
724
|
+
const manualTitle = nextTitle.trim();
|
|
725
|
+
if (!manualTitle) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
titleMode = "manual";
|
|
729
|
+
disposeTitleChangeSubscription();
|
|
730
|
+
clearPendingTitleChange();
|
|
731
|
+
emitTitleChange(manualTitle);
|
|
732
|
+
}
|
|
733
|
+
const initialManualTitle = presetTitle?.trim() || undefined;
|
|
734
|
+
const processTitle = command ? [command, ...args].join(" ") : null;
|
|
735
|
+
let initialTitle = initialManualTitle;
|
|
736
|
+
if (!initialTitle && processTitle) {
|
|
737
|
+
initialTitle = humanizeProcessTitle(processTitle) ?? normalizeProcessTitle(processTitle);
|
|
738
|
+
}
|
|
739
|
+
emitTitleChange(initialTitle);
|
|
740
|
+
// Respond to DA1 queries (CSI c or CSI 0 c) — apps like nvim query terminal capabilities
|
|
741
|
+
terminal.parser.registerCsiHandler({ final: "c" }, (params) => {
|
|
742
|
+
if (params.length === 0 || (params.length === 1 && params[0] === 0)) {
|
|
743
|
+
ptyProcess.write("\x1b[?62;4;22c");
|
|
744
|
+
return true;
|
|
745
|
+
}
|
|
746
|
+
return false;
|
|
747
|
+
});
|
|
748
|
+
terminal.parser.registerCsiHandler({ final: "n" }, (params) => {
|
|
749
|
+
if (params.length !== 1) {
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
if (params[0] === 5) {
|
|
753
|
+
ptyProcess.write("\x1b[0n");
|
|
754
|
+
return true;
|
|
755
|
+
}
|
|
756
|
+
if (params[0] === 6) {
|
|
757
|
+
const buffer = terminal.buffer.active;
|
|
758
|
+
ptyProcess.write(`\x1b[${buffer.cursorY + 1};${buffer.cursorX + 1}R`);
|
|
759
|
+
return true;
|
|
760
|
+
}
|
|
761
|
+
return false;
|
|
762
|
+
});
|
|
763
|
+
terminal.parser.registerCsiHandler({ prefix: "?", final: "n" }, (params) => {
|
|
764
|
+
if (params.length !== 1 || params[0] !== 6) {
|
|
765
|
+
return false;
|
|
766
|
+
}
|
|
767
|
+
const buffer = terminal.buffer.active;
|
|
768
|
+
ptyProcess.write(`\x1b[?${buffer.cursorY + 1};${buffer.cursorX + 1}R`);
|
|
769
|
+
return true;
|
|
770
|
+
});
|
|
771
|
+
for (const [code, response] of TERMINAL_OSC_COLOR_QUERY_RESPONSES) {
|
|
772
|
+
terminal.parser.registerOscHandler(code, (data) => {
|
|
773
|
+
if (data.trim() !== "?") {
|
|
774
|
+
return false;
|
|
775
|
+
}
|
|
776
|
+
ptyProcess.write(`\x1b]${code};${response}\x1b\\`);
|
|
777
|
+
return true;
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
if (titleMode === "auto") {
|
|
781
|
+
titleChangeSubscription = terminal.onTitleChange((nextTitle) => {
|
|
782
|
+
if (disposed || killed) {
|
|
783
|
+
return;
|
|
784
|
+
}
|
|
785
|
+
pendingTitle = nextTitle.trim().length > 0 ? nextTitle : undefined;
|
|
786
|
+
if (titleDebounceTimer) {
|
|
787
|
+
clearTimeout(titleDebounceTimer);
|
|
788
|
+
}
|
|
789
|
+
titleDebounceTimer = setTimeout(() => {
|
|
790
|
+
titleDebounceTimer = null;
|
|
791
|
+
emitTitleChange(pendingTitle);
|
|
792
|
+
pendingTitle = undefined;
|
|
793
|
+
}, TERMINAL_TITLE_DEBOUNCE_MS);
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
const disposeCommandLifecycleSubscription = terminal.parser.registerOscHandler(633, (data) => {
|
|
797
|
+
const commandFinished = parseCommandFinishedOsc(data);
|
|
798
|
+
if (!commandFinished) {
|
|
799
|
+
return true;
|
|
800
|
+
}
|
|
801
|
+
for (const listener of Array.from(commandFinishedListeners)) {
|
|
802
|
+
try {
|
|
803
|
+
listener(commandFinished);
|
|
804
|
+
}
|
|
805
|
+
catch {
|
|
806
|
+
// no-op
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
return true;
|
|
810
|
+
});
|
|
811
|
+
activityTracker.onChange((snapshot, previousSnapshot) => {
|
|
812
|
+
if (disposed || killed) {
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
const transition = {
|
|
816
|
+
activity: toTerminalActivity(snapshot),
|
|
817
|
+
previous: toTerminalActivity(previousSnapshot),
|
|
818
|
+
};
|
|
819
|
+
for (const listener of Array.from(activityChangeListeners)) {
|
|
820
|
+
try {
|
|
821
|
+
listener(transition);
|
|
822
|
+
}
|
|
823
|
+
catch {
|
|
824
|
+
// no-op
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
});
|
|
828
|
+
function buildExitInfo(input) {
|
|
829
|
+
const lastOutputLines = extractLastOutputLines(terminal, TERMINAL_EXIT_OUTPUT_LINE_LIMIT);
|
|
830
|
+
return {
|
|
831
|
+
exitCode: input?.exitCode ?? null,
|
|
832
|
+
signal: input?.signal && input.signal > 0 ? input.signal : null,
|
|
833
|
+
lastOutputLines: lastOutputLines.length > 0
|
|
834
|
+
? lastOutputLines
|
|
835
|
+
: extractLastOutputLinesFromText(recentOutputChunks.join("").slice(-TERMINAL_EXIT_OUTPUT_CHAR_LIMIT), TERMINAL_EXIT_OUTPUT_LINE_LIMIT),
|
|
836
|
+
};
|
|
837
|
+
}
|
|
838
|
+
function emitExit(info) {
|
|
839
|
+
if (exitEmitted) {
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
exitEmitted = true;
|
|
843
|
+
exitInfo = info;
|
|
844
|
+
for (const listener of Array.from(exitListeners)) {
|
|
845
|
+
try {
|
|
846
|
+
listener(info);
|
|
847
|
+
}
|
|
848
|
+
catch {
|
|
849
|
+
// no-op
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
exitListeners.clear();
|
|
853
|
+
}
|
|
854
|
+
function disposeResources() {
|
|
855
|
+
if (disposed) {
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
disposed = true;
|
|
859
|
+
activityTracker.clear();
|
|
860
|
+
pendingInput = "";
|
|
861
|
+
recentOutputChunks.length = 0;
|
|
862
|
+
recentOutputLength = 0;
|
|
863
|
+
inputModeTracker.reset();
|
|
864
|
+
if (inputFlushImmediate) {
|
|
865
|
+
clearImmediate(inputFlushImmediate);
|
|
866
|
+
inputFlushImmediate = null;
|
|
867
|
+
}
|
|
868
|
+
clearPendingTitleChange();
|
|
869
|
+
disposeTitleChangeSubscription();
|
|
870
|
+
disposeCommandLifecycleSubscription.dispose();
|
|
871
|
+
activityTracker.dispose();
|
|
872
|
+
terminal.dispose();
|
|
873
|
+
listeners.clear();
|
|
874
|
+
exitListeners.clear();
|
|
875
|
+
commandFinishedListeners.clear();
|
|
876
|
+
titleChangeListeners.clear();
|
|
877
|
+
activityChangeListeners.clear();
|
|
878
|
+
}
|
|
879
|
+
function writeOutputToHeadless(data) {
|
|
880
|
+
terminal.write(data, () => {
|
|
881
|
+
if (disposed || killed) {
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
stateRevision += 1;
|
|
885
|
+
for (const listener of listeners) {
|
|
886
|
+
listener({ type: "output", data, revision: stateRevision });
|
|
887
|
+
}
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
// Pipe PTY output to terminal emulator
|
|
891
|
+
ptyProcess.onData((data) => {
|
|
892
|
+
if (killed)
|
|
893
|
+
return;
|
|
894
|
+
const inputModeUpdate = inputModeTracker.feed(data);
|
|
895
|
+
for (const response of inputModeUpdate.responses) {
|
|
896
|
+
ptyProcess.write(response);
|
|
897
|
+
}
|
|
898
|
+
recentOutputChunks.push(data);
|
|
899
|
+
recentOutputLength += data.length;
|
|
900
|
+
// Drop whole leading chunks while the rest still covers the char limit, so
|
|
901
|
+
// the retained join always contains at least the last limit chars.
|
|
902
|
+
while (recentOutputChunks.length > 1 &&
|
|
903
|
+
recentOutputLength - recentOutputChunks[0].length >= TERMINAL_EXIT_OUTPUT_CHAR_LIMIT) {
|
|
904
|
+
recentOutputLength -= recentOutputChunks[0].length;
|
|
905
|
+
recentOutputChunks.shift();
|
|
906
|
+
}
|
|
907
|
+
// We never drop the last chunk, so a single chunk larger than the cap would
|
|
908
|
+
// grow the buffer unbounded; slice its tail to keep the cap hard.
|
|
909
|
+
if (recentOutputChunks.length === 1 && recentOutputLength > TERMINAL_EXIT_OUTPUT_CHAR_LIMIT) {
|
|
910
|
+
const tail = recentOutputChunks[0].slice(-TERMINAL_EXIT_OUTPUT_CHAR_LIMIT);
|
|
911
|
+
recentOutputChunks[0] = tail;
|
|
912
|
+
recentOutputLength = tail.length;
|
|
913
|
+
}
|
|
914
|
+
writeOutputToHeadless(data);
|
|
915
|
+
});
|
|
916
|
+
ptyProcess.onExit((event) => {
|
|
917
|
+
killed = true;
|
|
918
|
+
processExited = true;
|
|
919
|
+
for (const waiter of Array.from(processExitWaiters)) {
|
|
920
|
+
try {
|
|
921
|
+
waiter();
|
|
922
|
+
}
|
|
923
|
+
catch {
|
|
924
|
+
// no-op
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
processExitWaiters.clear();
|
|
928
|
+
emitExit(buildExitInfo({
|
|
929
|
+
exitCode: event.exitCode,
|
|
930
|
+
signal: event.signal,
|
|
931
|
+
}));
|
|
932
|
+
disposeResources();
|
|
933
|
+
});
|
|
934
|
+
async function waitForPtyProcessStart() {
|
|
935
|
+
if (process.platform !== "win32") {
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
const started = () => {
|
|
939
|
+
const windowsPtyProcess = ptyProcess;
|
|
940
|
+
return ptyProcess.pid > 0 || (windowsPtyProcess._agent?.innerPid ?? 0) > 0 || processExited;
|
|
941
|
+
};
|
|
942
|
+
const deadline = Date.now() + 5000;
|
|
943
|
+
while (!started() && Date.now() < deadline) {
|
|
944
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
function getState(snapshotOptions) {
|
|
948
|
+
return {
|
|
949
|
+
rows: terminal.rows,
|
|
950
|
+
cols: terminal.cols,
|
|
951
|
+
grid: extractGrid(terminal),
|
|
952
|
+
scrollback: extractScrollback(terminal, {
|
|
953
|
+
scrollbackLines: snapshotOptions?.scrollbackLines,
|
|
954
|
+
}),
|
|
955
|
+
cursor: extractCursorState(terminal),
|
|
956
|
+
...(title ? { title } : {}),
|
|
957
|
+
...(snapshotOptions?.includeWrapFlags
|
|
958
|
+
? {
|
|
959
|
+
gridWrapped: extractGridWrapped(terminal),
|
|
960
|
+
scrollbackWrapped: extractScrollbackWrapped(terminal, {
|
|
961
|
+
scrollbackLines: snapshotOptions?.scrollbackLines,
|
|
962
|
+
}),
|
|
963
|
+
}
|
|
964
|
+
: {}),
|
|
965
|
+
};
|
|
966
|
+
}
|
|
967
|
+
function getStateSnapshot(snapshotOptions) {
|
|
968
|
+
return {
|
|
969
|
+
state: getState(snapshotOptions),
|
|
970
|
+
revision: stateRevision,
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
function getSize() {
|
|
974
|
+
return {
|
|
975
|
+
rows: terminal.rows,
|
|
976
|
+
cols: terminal.cols,
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
function getReplayPreamble() {
|
|
980
|
+
return inputModeTracker.getPreamble();
|
|
981
|
+
}
|
|
982
|
+
function writeInputToPty(data) {
|
|
983
|
+
ptyProcess.write(data);
|
|
984
|
+
}
|
|
985
|
+
function flushPendingInput() {
|
|
986
|
+
if (inputFlushImmediate) {
|
|
987
|
+
clearImmediate(inputFlushImmediate);
|
|
988
|
+
inputFlushImmediate = null;
|
|
989
|
+
}
|
|
990
|
+
const data = pendingInput;
|
|
991
|
+
pendingInput = "";
|
|
992
|
+
if (!data || killed || disposed) {
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
995
|
+
writeInputToPty(data);
|
|
996
|
+
}
|
|
997
|
+
function scheduleInputFlush() {
|
|
998
|
+
if (inputFlushImmediate) {
|
|
999
|
+
return;
|
|
1000
|
+
}
|
|
1001
|
+
inputFlushImmediate = setImmediate(() => {
|
|
1002
|
+
inputFlushImmediate = null;
|
|
1003
|
+
flushPendingInput();
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1006
|
+
function send(msg) {
|
|
1007
|
+
if (killed)
|
|
1008
|
+
return;
|
|
1009
|
+
switch (msg.type) {
|
|
1010
|
+
case "input": {
|
|
1011
|
+
if (isTerminalActivityInterruptInput(msg.data)) {
|
|
1012
|
+
activityTracker.interrupt();
|
|
1013
|
+
}
|
|
1014
|
+
pendingInput += msg.data;
|
|
1015
|
+
scheduleInputFlush();
|
|
1016
|
+
break;
|
|
1017
|
+
}
|
|
1018
|
+
case "resize":
|
|
1019
|
+
flushPendingInput();
|
|
1020
|
+
terminal.resize(msg.cols, msg.rows);
|
|
1021
|
+
ptyProcess.resize(msg.cols, msg.rows);
|
|
1022
|
+
stateRevision += 1;
|
|
1023
|
+
break;
|
|
1024
|
+
case "mouse":
|
|
1025
|
+
// Mouse events can be sent as escape sequences if terminal supports it
|
|
1026
|
+
// For now, we'll just ignore them - can be implemented later
|
|
1027
|
+
break;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
function subscribe(listener, subscribeOptions) {
|
|
1031
|
+
let active = true;
|
|
1032
|
+
let snapshotDelivered = false;
|
|
1033
|
+
const queuedMessages = [];
|
|
1034
|
+
const initialSnapshot = subscribeOptions?.initialSnapshot ?? "state";
|
|
1035
|
+
const subscriptionListener = (msg) => {
|
|
1036
|
+
if (!active) {
|
|
1037
|
+
return;
|
|
1038
|
+
}
|
|
1039
|
+
if (!snapshotDelivered) {
|
|
1040
|
+
queuedMessages.push(msg);
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1043
|
+
listener(msg);
|
|
1044
|
+
};
|
|
1045
|
+
listeners.add(subscriptionListener);
|
|
1046
|
+
terminal.write("", () => {
|
|
1047
|
+
if (!disposed && active && listeners.has(subscriptionListener)) {
|
|
1048
|
+
snapshotDelivered = true;
|
|
1049
|
+
if (initialSnapshot === "ready") {
|
|
1050
|
+
// Carry the input-mode preamble so the snapshot-less "ready" path
|
|
1051
|
+
// (live restore) can replay it without a separate state fetch.
|
|
1052
|
+
listener({
|
|
1053
|
+
type: "snapshotReady",
|
|
1054
|
+
revision: stateRevision,
|
|
1055
|
+
replayPreamble: getReplayPreamble(),
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
else {
|
|
1059
|
+
listener({ type: "snapshot", ...getStateSnapshot() });
|
|
1060
|
+
}
|
|
1061
|
+
for (const message of queuedMessages.splice(0)) {
|
|
1062
|
+
listener(message);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
return () => {
|
|
1067
|
+
active = false;
|
|
1068
|
+
queuedMessages.length = 0;
|
|
1069
|
+
listeners.delete(subscriptionListener);
|
|
1070
|
+
};
|
|
1071
|
+
}
|
|
1072
|
+
function onExit(listener) {
|
|
1073
|
+
if (killed) {
|
|
1074
|
+
queueMicrotask(() => {
|
|
1075
|
+
try {
|
|
1076
|
+
listener(exitInfo ?? buildExitInfo());
|
|
1077
|
+
}
|
|
1078
|
+
catch {
|
|
1079
|
+
// no-op
|
|
1080
|
+
}
|
|
1081
|
+
});
|
|
1082
|
+
return () => { };
|
|
1083
|
+
}
|
|
1084
|
+
exitListeners.add(listener);
|
|
1085
|
+
return () => {
|
|
1086
|
+
exitListeners.delete(listener);
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
function onCommandFinished(listener) {
|
|
1090
|
+
commandFinishedListeners.add(listener);
|
|
1091
|
+
return () => {
|
|
1092
|
+
commandFinishedListeners.delete(listener);
|
|
1093
|
+
};
|
|
1094
|
+
}
|
|
1095
|
+
function onTitleChange(listener) {
|
|
1096
|
+
titleChangeListeners.add(listener);
|
|
1097
|
+
if (title !== undefined) {
|
|
1098
|
+
queueMicrotask(() => {
|
|
1099
|
+
if (disposed || !titleChangeListeners.has(listener)) {
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
try {
|
|
1103
|
+
listener(title);
|
|
1104
|
+
}
|
|
1105
|
+
catch {
|
|
1106
|
+
// no-op
|
|
1107
|
+
}
|
|
1108
|
+
});
|
|
1109
|
+
}
|
|
1110
|
+
return () => {
|
|
1111
|
+
titleChangeListeners.delete(listener);
|
|
1112
|
+
};
|
|
1113
|
+
}
|
|
1114
|
+
function onActivityChange(listener) {
|
|
1115
|
+
activityChangeListeners.add(listener);
|
|
1116
|
+
return () => {
|
|
1117
|
+
activityChangeListeners.delete(listener);
|
|
1118
|
+
};
|
|
1119
|
+
}
|
|
1120
|
+
function getTitle() {
|
|
1121
|
+
return title;
|
|
1122
|
+
}
|
|
1123
|
+
function getActivity() {
|
|
1124
|
+
return toTerminalActivity(activityTracker.getSnapshot());
|
|
1125
|
+
}
|
|
1126
|
+
function setActivity(state) {
|
|
1127
|
+
activityTracker.set(state);
|
|
1128
|
+
}
|
|
1129
|
+
function clearActivityAttention() {
|
|
1130
|
+
return activityTracker.clearAttention();
|
|
1131
|
+
}
|
|
1132
|
+
function getExitInfo() {
|
|
1133
|
+
return exitInfo;
|
|
1134
|
+
}
|
|
1135
|
+
function kill() {
|
|
1136
|
+
if (!killed) {
|
|
1137
|
+
killed = true;
|
|
1138
|
+
if (!processExited) {
|
|
1139
|
+
killPtyProcess();
|
|
1140
|
+
}
|
|
1141
|
+
emitExit(buildExitInfo());
|
|
1142
|
+
}
|
|
1143
|
+
if (processExited) {
|
|
1144
|
+
disposeResources();
|
|
1145
|
+
return;
|
|
1146
|
+
}
|
|
1147
|
+
void waitForProcessExit(1000).finally(disposeResources);
|
|
1148
|
+
}
|
|
1149
|
+
function killPtyProcess(signal) {
|
|
1150
|
+
if (process.platform === "win32") {
|
|
1151
|
+
ptyProcess.kill();
|
|
1152
|
+
return;
|
|
1153
|
+
}
|
|
1154
|
+
ptyProcess.kill(signal);
|
|
1155
|
+
}
|
|
1156
|
+
function waitForProcessExit(timeoutMs) {
|
|
1157
|
+
if (processExited) {
|
|
1158
|
+
return Promise.resolve(true);
|
|
1159
|
+
}
|
|
1160
|
+
return new Promise((resolve) => {
|
|
1161
|
+
let pendingResolve = resolve;
|
|
1162
|
+
const settle = (value) => {
|
|
1163
|
+
if (!pendingResolve)
|
|
1164
|
+
return;
|
|
1165
|
+
const fn = pendingResolve;
|
|
1166
|
+
pendingResolve = null;
|
|
1167
|
+
fn(value);
|
|
1168
|
+
};
|
|
1169
|
+
const waiter = () => {
|
|
1170
|
+
clearTimeout(timer);
|
|
1171
|
+
settle(true);
|
|
1172
|
+
};
|
|
1173
|
+
const timer = setTimeout(() => {
|
|
1174
|
+
processExitWaiters.delete(waiter);
|
|
1175
|
+
settle(false);
|
|
1176
|
+
}, timeoutMs);
|
|
1177
|
+
processExitWaiters.add(waiter);
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1180
|
+
async function killAndWait(killOptions) {
|
|
1181
|
+
const gracefulTimeoutMs = killOptions?.gracefulTimeoutMs ?? 2000;
|
|
1182
|
+
const forceTimeoutMs = killOptions?.forceTimeoutMs ?? 1000;
|
|
1183
|
+
if (processExited) {
|
|
1184
|
+
kill();
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
try {
|
|
1188
|
+
killPtyProcess();
|
|
1189
|
+
}
|
|
1190
|
+
catch {
|
|
1191
|
+
// process may already be gone
|
|
1192
|
+
}
|
|
1193
|
+
const exitedGracefully = await waitForProcessExit(gracefulTimeoutMs);
|
|
1194
|
+
if (!exitedGracefully) {
|
|
1195
|
+
try {
|
|
1196
|
+
killPtyProcess("SIGKILL");
|
|
1197
|
+
}
|
|
1198
|
+
catch {
|
|
1199
|
+
// process may already be gone
|
|
1200
|
+
}
|
|
1201
|
+
await waitForProcessExit(forceTimeoutMs);
|
|
1202
|
+
}
|
|
1203
|
+
// Finalize bookkeeping (idempotent if ptyProcess.onExit already fired).
|
|
1204
|
+
kill();
|
|
1205
|
+
}
|
|
1206
|
+
await waitForPtyProcessStart();
|
|
1207
|
+
// Small delay to let shell initialize
|
|
1208
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
1209
|
+
return {
|
|
1210
|
+
id,
|
|
1211
|
+
name,
|
|
1212
|
+
cwd,
|
|
1213
|
+
workspaceId,
|
|
1214
|
+
send,
|
|
1215
|
+
subscribe,
|
|
1216
|
+
onExit,
|
|
1217
|
+
onCommandFinished,
|
|
1218
|
+
onTitleChange,
|
|
1219
|
+
onActivityChange,
|
|
1220
|
+
getSize,
|
|
1221
|
+
getState,
|
|
1222
|
+
getStateSnapshot,
|
|
1223
|
+
getReplayPreamble,
|
|
1224
|
+
getTitle,
|
|
1225
|
+
getActivity,
|
|
1226
|
+
setActivity,
|
|
1227
|
+
clearActivityAttention,
|
|
1228
|
+
setTitle,
|
|
1229
|
+
getExitInfo,
|
|
1230
|
+
kill,
|
|
1231
|
+
killAndWait,
|
|
1232
|
+
};
|
|
1233
|
+
}
|
|
1234
|
+
//# sourceMappingURL=terminal.js.map
|