@otto-code/server 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.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 +141 -0
- package/dist/scripts/supervisor-log-config.js +31 -0
- package/dist/scripts/supervisor.js +252 -0
- package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
- package/dist/server/executable-resolution/executable-resolution.js +118 -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 +28 -0
- package/dist/server/server/agent/activity-curator.js +227 -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-loading.d.ts +14 -0
- package/dist/server/server/agent/agent-loading.js +54 -0
- package/dist/server/server/agent/agent-manager.d.ts +470 -0
- package/dist/server/server/agent/agent-manager.js +3049 -0
- package/dist/server/server/agent/agent-personalities.d.ts +59 -0
- package/dist/server/server/agent/agent-personalities.js +103 -0
- package/dist/server/server/agent/agent-projections.d.ts +35 -0
- package/dist/server/server/agent/agent-projections.js +488 -0
- package/dist/server/server/agent/agent-prompt.d.ts +76 -0
- package/dist/server/server/agent/agent-prompt.js +230 -0
- package/dist/server/server/agent/agent-response-loop.d.ts +72 -0
- package/dist/server/server/agent/agent-response-loop.js +333 -0
- package/dist/server/server/agent/agent-sdk-types.d.ts +736 -0
- package/dist/server/server/agent/agent-sdk-types.js +22 -0
- package/dist/server/server/agent/agent-storage.d.ts +147 -0
- package/dist/server/server/agent/agent-storage.js +326 -0
- package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
- package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
- package/dist/server/server/agent/agent-timeline-store-types.d.ts +50 -0
- package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
- package/dist/server/server/agent/agent-timeline-store.d.ts +27 -0
- package/dist/server/server/agent/agent-timeline-store.js +230 -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 +91 -0
- package/dist/server/server/agent/create-agent/create.js +370 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +54 -0
- package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +152 -0
- package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
- package/dist/server/server/agent/create-agent-mode.js +62 -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/effort-levels.d.ts +2 -0
- package/dist/server/server/agent/effort-levels.js +7 -0
- package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
- package/dist/server/server/agent/foreground-run-state.js +160 -0
- package/dist/server/server/agent/import-sessions.d.ts +47 -0
- package/dist/server/server/agent/import-sessions.js +145 -0
- package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
- package/dist/server/server/agent/lifecycle-command.js +92 -0
- package/dist/server/server/agent/mcp-server.d.ts +5 -0
- package/dist/server/server/agent/mcp-server.js +66 -0
- package/dist/server/server/agent/mcp-shared.d.ts +192 -0
- package/dist/server/server/agent/mcp-shared.js +201 -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/personality-stats-store.d.ts +23 -0
- package/dist/server/server/agent/personality-stats-store.js +65 -0
- package/dist/server/server/agent/prompt-attachments.d.ts +7 -0
- package/dist/server/server/agent/prompt-attachments.js +117 -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 +3 -0
- package/dist/server/server/agent/provider-notices.js +5 -0
- package/dist/server/server/agent/provider-registry.d.ts +41 -0
- package/dist/server/server/agent/provider-registry.js +532 -0
- package/dist/server/server/agent/provider-session-import.d.ts +10 -0
- package/dist/server/server/agent/provider-session-import.js +49 -0
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +142 -0
- package/dist/server/server/agent/provider-snapshot-manager.js +690 -0
- package/dist/server/server/agent/providers/acp-agent.d.ts +353 -0
- package/dist/server/server/agent/providers/acp-agent.js +2439 -0
- package/dist/server/server/agent/providers/claude/agent.d.ts +66 -0
- package/dist/server/server/agent/providers/claude/agent.js +4535 -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/model-manifest.d.ts +90 -0
- package/dist/server/server/agent/providers/claude/model-manifest.js +205 -0
- package/dist/server/server/agent/providers/claude/models.d.ts +11 -0
- package/dist/server/server/agent/providers/claude/models.js +97 -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/sidechain-tracker.d.ts +22 -0
- package/dist/server/server/agent/providers/claude/sidechain-tracker.js +232 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +35 -0
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +272 -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 +90 -0
- package/dist/server/server/agent/providers/codex/app-server-transport.js +262 -0
- package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
- package/dist/server/server/agent/providers/codex/rewind.js +46 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +36 -0
- package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +217 -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 +830 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +308 -0
- package/dist/server/server/agent/providers/codex-app-server-agent.js +4515 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
- package/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
- package/dist/server/server/agent/providers/copilot-acp-agent.js +188 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +15 -0
- package/dist/server/server/agent/providers/cursor-acp-agent.js +18 -0
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +355 -0
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +42 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +160 -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 +85 -0
- package/dist/server/server/agent/providers/mock-load-test-agent.js +1010 -0
- package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
- package/dist/server/server/agent/providers/mock-slow-provider.js +39 -0
- package/dist/server/server/agent/providers/openai-compat-agent.d.ts +422 -0
- package/dist/server/server/agent/providers/openai-compat-agent.js +2536 -0
- package/dist/server/server/agent/providers/openai-compat-feature-definitions.d.ts +40 -0
- package/dist/server/server/agent/providers/openai-compat-feature-definitions.js +82 -0
- package/dist/server/server/agent/providers/openai-compat-mcp.d.ts +87 -0
- package/dist/server/server/agent/providers/openai-compat-mcp.js +353 -0
- package/dist/server/server/agent/providers/openai-compat-otto-tool-permissions.d.ts +29 -0
- package/dist/server/server/agent/providers/openai-compat-otto-tool-permissions.js +96 -0
- package/dist/server/server/agent/providers/openai-compat-tools.d.ts +69 -0
- package/dist/server/server/agent/providers/openai-compat-tools.js +1224 -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 +91 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +425 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +25 -0
- package/dist/server/server/agent/providers/opencode/test-server-manager.js +39 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.d.ts +92 -0
- package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.js +260 -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 +286 -0
- package/dist/server/server/agent/providers/opencode-agent.js +2830 -0
- package/dist/server/server/agent/providers/pi/agent.d.ts +132 -0
- package/dist/server/server/agent/providers/pi/agent.js +1649 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
- package/dist/server/server/agent/providers/pi/cli-runtime.js +261 -0
- package/dist/server/server/agent/providers/pi/history-mapper.d.ts +9 -0
- package/dist/server/server/agent/providers/pi/history-mapper.js +140 -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 +208 -0
- package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
- package/dist/server/server/agent/providers/pi/runtime.d.ts +57 -0
- package/dist/server/server/agent/providers/pi/runtime.js +56 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
- package/dist/server/server/agent/providers/pi/session-descriptor.js +346 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +83 -0
- package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +184 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
- package/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
- package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
- package/dist/server/server/agent/providers/provider-image-output.js +111 -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/test-utils/session-stream-adapter.d.ts +3 -0
- package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +60 -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/structured-generation-providers.d.ts +29 -0
- package/dist/server/server/agent/structured-generation-providers.js +236 -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-projection.d.ts +71 -0
- package/dist/server/server/agent/timeline-projection.js +373 -0
- package/dist/server/server/agent/tools/otto-tools.d.ts +80 -0
- package/dist/server/server/agent/tools/otto-tools.js +2912 -0
- package/dist/server/server/agent/tools/types.d.ts +36 -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/artifact/artifact-prompt.d.ts +2 -0
- package/dist/server/server/artifact/artifact-prompt.js +15 -0
- package/dist/server/server/artifact/artifact-service.d.ts +91 -0
- package/dist/server/server/artifact/artifact-service.js +419 -0
- package/dist/server/server/artifact/artifact-store.d.ts +24 -0
- package/dist/server/server/artifact/artifact-store.js +168 -0
- package/dist/server/server/artifact/artifact-watcher.d.ts +34 -0
- package/dist/server/server/artifact/artifact-watcher.js +146 -0
- package/dist/server/server/artifact/html-validator.d.ts +26 -0
- package/dist/server/server/artifact/html-validator.js +92 -0
- package/dist/server/server/atomic-file.d.ts +5 -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 +143 -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 +92 -0
- package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
- package/dist/server/server/auto-archive-on-merge/index.js +15 -0
- package/dist/server/server/bootstrap.d.ts +127 -0
- package/dist/server/server/bootstrap.js +1331 -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 +24 -0
- package/dist/server/server/browser-tools/tools.js +967 -0
- package/dist/server/server/chat/chat-mentions.d.ts +47 -0
- package/dist/server/server/chat/chat-mentions.js +113 -0
- package/dist/server/server/chat/chat-service.d.ts +78 -0
- package/dist/server/server/chat/chat-service.js +337 -0
- package/dist/server/server/checkout/status-projection.d.ts +19 -0
- package/dist/server/server/checkout/status-projection.js +117 -0
- package/dist/server/server/checkout-diff-manager.d.ts +41 -0
- package/dist/server/server/checkout-diff-manager.js +189 -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 +22 -0
- package/dist/server/server/config.js +330 -0
- package/dist/server/server/connection-offer.d.ts +20 -0
- package/dist/server/server/connection-offer.js +59 -0
- package/dist/server/server/daemon-config-store.d.ts +44 -0
- package/dist/server/server/daemon-config-store.js +530 -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 +251 -0
- package/dist/server/server/dictation/dictation-stream-manager.d.ts +87 -0
- package/dist/server/server/dictation/dictation-stream-manager.js +572 -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/code-index.d.ts +28 -0
- package/dist/server/server/file-explorer/code-index.js +127 -0
- package/dist/server/server/file-explorer/file-search.d.ts +72 -0
- package/dist/server/server/file-explorer/file-search.js +297 -0
- package/dist/server/server/file-explorer/file-watcher.d.ts +40 -0
- package/dist/server/server/file-explorer/file-watcher.js +0 -0
- package/dist/server/server/file-explorer/gitignore.d.ts +39 -0
- package/dist/server/server/file-explorer/gitignore.js +191 -0
- package/dist/server/server/file-explorer/service.d.ts +103 -0
- package/dist/server/server/file-explorer/service.js +420 -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/hostnames.d.ts +13 -0
- package/dist/server/server/hostnames.js +94 -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 +125 -0
- package/dist/server/server/loop-service.d.ts +234 -0
- package/dist/server/server/loop-service.js +804 -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/otto-env.d.ts +13 -0
- package/dist/server/server/otto-env.js +53 -0
- package/dist/server/server/otto-home.d.ts +2 -0
- package/dist/server/server/otto-home.js +19 -0
- package/dist/server/server/otto-worktree-service.d.ts +52 -0
- package/dist/server/server/otto-worktree-service.js +294 -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 +7 -0
- package/dist/server/server/pairing-qr.js +45 -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 +417 -0
- package/dist/server/server/persisted-config.js +471 -0
- package/dist/server/server/persistence-hooks.d.ts +31 -0
- package/dist/server/server/persistence-hooks.js +93 -0
- package/dist/server/server/pid-lock.d.ts +32 -0
- package/dist/server/server/pid-lock.js +170 -0
- package/dist/server/server/preview/dev-server-manager.d.ts +108 -0
- package/dist/server/server/preview/dev-server-manager.js +426 -0
- package/dist/server/server/preview/launch-config.d.ts +37 -0
- package/dist/server/server/preview/launch-config.js +63 -0
- package/dist/server/server/preview/preview-tools.d.ts +30 -0
- package/dist/server/server/preview/preview-tools.js +249 -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/push/notifications.d.ts +9 -0
- package/dist/server/server/push/notifications.js +15 -0
- package/dist/server/server/push/push-service.d.ts +20 -0
- package/dist/server/server/push/push-service.js +66 -0
- package/dist/server/server/push/token-store.d.ts +18 -0
- package/dist/server/server/push/token-store.js +68 -0
- package/dist/server/server/relay-transport.d.ts +31 -0
- package/dist/server/server/relay-transport.js +514 -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 +32 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +121 -0
- package/dist/server/server/schedule/cron.d.ts +4 -0
- package/dist/server/server/schedule/cron.js +81 -0
- package/dist/server/server/schedule/service.d.ts +89 -0
- package/dist/server/server/schedule/service.js +882 -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 +714 -0
- package/dist/server/server/session/agent-config/agent-config-session.d.ts +59 -0
- package/dist/server/server/session/agent-config/agent-config-session.js +110 -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 +232 -0
- package/dist/server/server/session/artifact/artifact-session.d.ts +45 -0
- package/dist/server/server/session/artifact/artifact-session.js +293 -0
- package/dist/server/server/session/chat/chat-schedule-loop-session.d.ts +120 -0
- package/dist/server/server/session/chat/chat-schedule-loop-session.js +489 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +146 -0
- package/dist/server/server/session/checkout/checkout-session.js +1000 -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 +32 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +76 -0
- package/dist/server/server/session/daemon/daemon-session.js +148 -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 +60 -0
- package/dist/server/server/session/files/workspace-files-session.js +518 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
- package/dist/server/server/session/project-config/project-config-session.d.ts +34 -0
- package/dist/server/server/session/project-config/project-config-session.js +125 -0
- package/dist/server/server/session/provider/provider-catalog-session.d.ts +74 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +343 -0
- package/dist/server/server/session/voice/voice-session.d.ts +167 -0
- package/dist/server/server/session/voice/voice-session.js +912 -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 +36 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
- package/dist/server/server/session.d.ts +450 -0
- package/dist/server/server/session.js +4763 -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 +133 -0
- package/dist/server/server/speech/providers/local/models.d.ts +13 -0
- package/dist/server/server/speech/providers/local/models.js +21 -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 +109 -0
- package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +129 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +16 -0
- package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +195 -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 +24 -0
- package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +145 -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/sherpa/tts-voices.d.ts +10 -0
- package/dist/server/server/speech/providers/local/sherpa/tts-voices.js +86 -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 +591 -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 +96 -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 +160 -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 +20 -0
- package/dist/server/server/speech/providers/openai/tts.js +70 -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 +71 -0
- package/dist/server/server/speech/speech-provider.js +2 -0
- package/dist/server/server/speech/speech-runtime.d.ts +67 -0
- package/dist/server/server/speech/speech-runtime.js +615 -0
- package/dist/server/server/speech/speech-settings-options.d.ts +14 -0
- package/dist/server/server/speech/speech-settings-options.js +73 -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 +279 -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/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +94 -0
- package/dist/server/server/websocket/runtime-metrics.js +148 -0
- package/dist/server/server/websocket-server.d.ts +187 -0
- package/dist/server/server/websocket-server.js +1766 -0
- package/dist/server/server/workspace-archive-service.d.ts +65 -0
- package/dist/server/server/workspace-archive-service.js +229 -0
- package/dist/server/server/workspace-auto-name.d.ts +55 -0
- package/dist/server/server/workspace-auto-name.js +128 -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 +93 -0
- package/dist/server/server/workspace-directory.js +422 -0
- package/dist/server/server/workspace-git-metadata.d.ts +24 -0
- package/dist/server/server/workspace-git-metadata.js +55 -0
- package/dist/server/server/workspace-git-service.d.ts +270 -0
- package/dist/server/server/workspace-git-service.js +1423 -0
- package/dist/server/server/workspace-reconciliation-service.d.ts +57 -0
- package/dist/server/server/workspace-reconciliation-service.js +278 -0
- package/dist/server/server/workspace-registry-bootstrap.d.ts +13 -0
- package/dist/server/server/workspace-registry-bootstrap.js +121 -0
- package/dist/server/server/workspace-registry-model.d.ts +55 -0
- package/dist/server/server/workspace-registry-model.js +190 -0
- package/dist/server/server/workspace-registry.d.ts +117 -0
- package/dist/server/server/workspace-registry.js +194 -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-registry.d.ts +19 -0
- package/dist/server/server/workspace-service-port-registry.js +59 -0
- package/dist/server/server/worktree/commands.d.ts +55 -0
- package/dist/server/server/worktree/commands.js +107 -0
- package/dist/server/server/worktree-bootstrap.d.ts +76 -0
- package/dist/server/server/worktree-bootstrap.js +720 -0
- package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
- package/dist/server/server/worktree-branch-name-generator.js +91 -0
- package/dist/server/server/worktree-core.d.ts +31 -0
- package/dist/server/server/worktree-core.js +105 -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 +152 -0
- package/dist/server/server/worktree-session.js +466 -0
- package/dist/server/services/git-hosting/bitbucket-cloud-service.d.ts +24 -0
- package/dist/server/services/git-hosting/bitbucket-cloud-service.js +754 -0
- package/dist/server/services/git-hosting/github-hosting-service.d.ts +4 -0
- package/dist/server/services/git-hosting/github-hosting-service.js +11 -0
- package/dist/server/services/git-hosting/hosting-http-client.d.ts +20 -0
- package/dist/server/services/git-hosting/hosting-http-client.js +131 -0
- package/dist/server/services/git-hosting/request-cache.d.ts +20 -0
- package/dist/server/services/git-hosting/request-cache.js +68 -0
- package/dist/server/services/git-hosting/resolver.d.ts +32 -0
- package/dist/server/services/git-hosting/resolver.js +152 -0
- package/dist/server/services/git-hosting/router.d.ts +4 -0
- package/dist/server/services/git-hosting/router.js +105 -0
- package/dist/server/services/git-hosting/status-poller.d.ts +39 -0
- package/dist/server/services/git-hosting/status-poller.js +149 -0
- package/dist/server/services/git-hosting/types.d.ts +53 -0
- package/dist/server/services/git-hosting/types.js +75 -0
- package/dist/server/services/github-service.d.ts +339 -0
- package/dist/server/services/github-service.js +2109 -0
- package/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
- package/dist/server/services/quota-fetcher/manifest.js +52 -0
- package/dist/server/services/quota-fetcher/provider.d.ts +17 -0
- package/dist/server/services/quota-fetcher/provider.js +2 -0
- package/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
- package/dist/server/services/quota-fetcher/providers/claude.js +217 -0
- package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
- package/dist/server/services/quota-fetcher/providers/codex.js +211 -0
- package/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
- package/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
- package/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
- package/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
- package/dist/server/services/quota-fetcher/providers/grok.js +89 -0
- package/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
- package/dist/server/services/quota-fetcher/providers/kimi.js +89 -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 +28 -0
- package/dist/server/services/quota-fetcher/service.js +58 -0
- package/dist/server/services/quota-fetcher/usage.d.ts +22 -0
- package/dist/server/services/quota-fetcher/usage.js +49 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
- package/dist/server/terminal/activity/terminal-activity-tracker.js +59 -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 +46 -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/otto-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 +78 -0
- package/dist/server/terminal/terminal-manager.js +319 -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 +85 -0
- package/dist/server/terminal/terminal-session-controller.js +819 -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 +304 -0
- package/dist/server/terminal/terminal-worker-protocol.d.ts +119 -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 +1155 -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 +253 -0
- package/dist/server/utils/checkout-git.js +2241 -0
- package/dist/server/utils/directory-suggestions.d.ts +26 -0
- package/dist/server/utils/directory-suggestions.js +830 -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/github-remote.d.ts +9 -0
- package/dist/server/utils/github-remote.js +62 -0
- package/dist/server/utils/otto-config-file.d.ts +30 -0
- package/dist/server/utils/otto-config-file.js +90 -0
- package/dist/server/utils/path.d.ts +18 -0
- package/dist/server/utils/path.js +123 -0
- package/dist/server/utils/project-icon.d.ts +39 -0
- package/dist/server/utils/project-icon.js +364 -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 +37 -0
- package/dist/server/utils/run-git-command.js +232 -0
- package/dist/server/utils/spawn.d.ts +25 -0
- package/dist/server/utils/spawn.js +59 -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 +18 -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 +39 -0
- package/dist/server/utils/worktree-metadata.js +174 -0
- package/dist/server/utils/worktree.d.ts +205 -0
- package/dist/server/utils/worktree.js +1120 -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-a25c6055b348629689f75618db2c83e1.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-a25c6055b348629689f75618db2c83e1.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-a25c6055b348629689f75618db2c83e1.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js +3199 -0
- package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@expo-google-fonts/inter/400Regular/Inter_400Regular.51b6ad87261f18b6433ec52871ddfabc.ttf +0 -0
- package/dist/server/web-ui/assets/__node_modules/@expo-google-fonts/jetbrains-mono/400Regular/JetBrainsMono_400Regular.a0147b5ab9e4946e81879aef45313def.ttf +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/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/clion.baa1f4eb572e962a6117bdbee95749e4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/goland.0796ab2b9be2637fd1cdcde891fad3ca.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/intellij-idea.33bc9ff9c0815d8ad43f618c8c244401.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/phpstorm.c60b33bc7a8309143d232e14b76554c5.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/pycharm.88f25ac484989c45c25323e0adccfa9f.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/rider.1a1091dc3a0ede0461f0aa38a54f080a.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/rubymine.0e5b66fd7d43f8cbac0f05bba97c9a21.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/rustrover.3590ef05482369f41d3484c90272570d.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.3b2c331d11122d8f743c73a5878593be.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.6077c2ab71021b31c82a42e0b42ad837.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.12984efe6d435a13794a74cd2f858dcd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.3b2c331d11122d8f743c73a5878593be.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.6077c2ab71021b31c82a42e0b42ad837.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.12984efe6d435a13794a74cd2f858dcd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.2394c3b427c0f5ee2bb84864d8fb0f45.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +147 -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 +118 -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/otto-env.js +53 -0
- package/dist/src/server/otto-home.js +19 -0
- package/dist/src/server/persisted-config.js +471 -0
- package/dist/src/server/pid-lock.js +170 -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/otto-integration.zsh +32 -0
- package/dist/src/utils/spawn.js +59 -0
- package/dist/src/utils/windows-command.js +41 -0
- package/package.json +118 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AgentFeature, AgentSelectOption } from "../agent-sdk-types.js";
|
|
2
|
+
export declare const OPENAI_COMPAT_REASONING_EFFORTS: readonly ["off", "low", "medium", "high"];
|
|
3
|
+
export type OpenAICompatReasoningEffort = (typeof OPENAI_COMPAT_REASONING_EFFORTS)[number];
|
|
4
|
+
/**
|
|
5
|
+
* Effort advertised per model as `thinkingOptions`, like every other
|
|
6
|
+
* provider, so the standard Effort control (composer, schedule form,
|
|
7
|
+
* artifact form) drives it. The selection maps onto the request's
|
|
8
|
+
* `reasoning_effort` parameter. Custom provider profiles that declare their
|
|
9
|
+
* own per-model `thinkingOptions` override these defaults in the registry
|
|
10
|
+
* merge.
|
|
11
|
+
*/
|
|
12
|
+
export declare const OPENAI_COMPAT_THINKING_OPTIONS: readonly AgentSelectOption[];
|
|
13
|
+
export declare const OPENAI_COMPAT_DEFAULT_THINKING_OPTION_ID: OpenAICompatReasoningEffort;
|
|
14
|
+
/**
|
|
15
|
+
* "off" omits the reasoning_effort parameter from requests entirely, so
|
|
16
|
+
* endpoints that reject unknown parameters are unaffected until the user
|
|
17
|
+
* opts in. Unknown persisted values also normalize to "off" rather than
|
|
18
|
+
* failing the session.
|
|
19
|
+
*/
|
|
20
|
+
export declare function normalizeOpenAICompatReasoningEffort(value: unknown): OpenAICompatReasoningEffort;
|
|
21
|
+
/**
|
|
22
|
+
* Auto-compaction control: "off", or the context-window percentage at which
|
|
23
|
+
* the daemon compacts the conversation automatically. Option ids mirror
|
|
24
|
+
* COMPACTION_THRESHOLD_PERCENTS in the protocol's provider config.
|
|
25
|
+
*/
|
|
26
|
+
export declare const OPENAI_COMPAT_AUTO_COMPACT_VALUES: readonly ["off", "50", "60", "70", "80", "90"];
|
|
27
|
+
export type OpenAICompatAutoCompact = (typeof OPENAI_COMPAT_AUTO_COMPACT_VALUES)[number];
|
|
28
|
+
export declare const OPENAI_COMPAT_AUTO_COMPACT_FALLBACK: OpenAICompatAutoCompact;
|
|
29
|
+
/**
|
|
30
|
+
* Unknown persisted values normalize to the provider-configured default
|
|
31
|
+
* rather than failing the session, mirroring reasoning-effort handling.
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeOpenAICompatAutoCompact(value: unknown, defaultValue: OpenAICompatAutoCompact): OpenAICompatAutoCompact;
|
|
34
|
+
export declare function buildOpenAICompatFeatures(input: {
|
|
35
|
+
autoCompact: OpenAICompatAutoCompact;
|
|
36
|
+
autoCompactDefault: OpenAICompatAutoCompact;
|
|
37
|
+
/** Provider config hides the per-agent select; the default applies silently. */
|
|
38
|
+
hideAutoCompact?: boolean;
|
|
39
|
+
}): AgentFeature[];
|
|
40
|
+
//# sourceMappingURL=openai-compat-feature-definitions.d.ts.map
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export const OPENAI_COMPAT_REASONING_EFFORTS = ["off", "low", "medium", "high"];
|
|
2
|
+
/**
|
|
3
|
+
* Effort advertised per model as `thinkingOptions`, like every other
|
|
4
|
+
* provider, so the standard Effort control (composer, schedule form,
|
|
5
|
+
* artifact form) drives it. The selection maps onto the request's
|
|
6
|
+
* `reasoning_effort` parameter. Custom provider profiles that declare their
|
|
7
|
+
* own per-model `thinkingOptions` override these defaults in the registry
|
|
8
|
+
* merge.
|
|
9
|
+
*/
|
|
10
|
+
export const OPENAI_COMPAT_THINKING_OPTIONS = [
|
|
11
|
+
{ id: "off", label: "Off", description: "Don't request reasoning", isDefault: true },
|
|
12
|
+
{ id: "low", label: "Low" },
|
|
13
|
+
{ id: "medium", label: "Medium" },
|
|
14
|
+
{ id: "high", label: "High" },
|
|
15
|
+
];
|
|
16
|
+
export const OPENAI_COMPAT_DEFAULT_THINKING_OPTION_ID = "off";
|
|
17
|
+
/**
|
|
18
|
+
* "off" omits the reasoning_effort parameter from requests entirely, so
|
|
19
|
+
* endpoints that reject unknown parameters are unaffected until the user
|
|
20
|
+
* opts in. Unknown persisted values also normalize to "off" rather than
|
|
21
|
+
* failing the session.
|
|
22
|
+
*/
|
|
23
|
+
export function normalizeOpenAICompatReasoningEffort(value) {
|
|
24
|
+
return OPENAI_COMPAT_REASONING_EFFORTS.includes(value)
|
|
25
|
+
? value
|
|
26
|
+
: "off";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Auto-compaction control: "off", or the context-window percentage at which
|
|
30
|
+
* the daemon compacts the conversation automatically. Option ids mirror
|
|
31
|
+
* COMPACTION_THRESHOLD_PERCENTS in the protocol's provider config.
|
|
32
|
+
*/
|
|
33
|
+
export const OPENAI_COMPAT_AUTO_COMPACT_VALUES = ["off", "50", "60", "70", "80", "90"];
|
|
34
|
+
export const OPENAI_COMPAT_AUTO_COMPACT_FALLBACK = "80";
|
|
35
|
+
function buildAutoCompactFeature(defaultValue) {
|
|
36
|
+
return {
|
|
37
|
+
type: "select",
|
|
38
|
+
id: "auto_compact",
|
|
39
|
+
label: "Auto-compact",
|
|
40
|
+
description: "Compact the conversation automatically when context usage crosses the threshold",
|
|
41
|
+
tooltip: "Change auto-compaction",
|
|
42
|
+
icon: "summarize",
|
|
43
|
+
options: [
|
|
44
|
+
{
|
|
45
|
+
id: "off",
|
|
46
|
+
label: "Off",
|
|
47
|
+
description: "Only compact manually via /compact",
|
|
48
|
+
...(defaultValue === "off" ? { isDefault: true } : {}),
|
|
49
|
+
},
|
|
50
|
+
...["50", "60", "70", "80", "90"].map((percent) => {
|
|
51
|
+
const option = {
|
|
52
|
+
id: percent,
|
|
53
|
+
label: `At ${percent}%`,
|
|
54
|
+
};
|
|
55
|
+
if (defaultValue === percent) {
|
|
56
|
+
option.isDefault = true;
|
|
57
|
+
}
|
|
58
|
+
return option;
|
|
59
|
+
}),
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Unknown persisted values normalize to the provider-configured default
|
|
65
|
+
* rather than failing the session, mirroring reasoning-effort handling.
|
|
66
|
+
*/
|
|
67
|
+
export function normalizeOpenAICompatAutoCompact(value, defaultValue) {
|
|
68
|
+
return OPENAI_COMPAT_AUTO_COMPACT_VALUES.includes(value)
|
|
69
|
+
? value
|
|
70
|
+
: defaultValue;
|
|
71
|
+
}
|
|
72
|
+
export function buildOpenAICompatFeatures(input) {
|
|
73
|
+
const features = [];
|
|
74
|
+
if (!input.hideAutoCompact) {
|
|
75
|
+
features.push({
|
|
76
|
+
...buildAutoCompactFeature(input.autoCompactDefault),
|
|
77
|
+
value: input.autoCompact,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return features;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=openai-compat-feature-definitions.js.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { McpServerConfig } from "../agent-sdk-types.js";
|
|
3
|
+
import type { ManagedProcessRegistry } from "../../managed-processes/managed-processes.js";
|
|
4
|
+
export interface McpToolBinding {
|
|
5
|
+
/** Namespaced, sanitized name exposed to the model. */
|
|
6
|
+
modelName: string;
|
|
7
|
+
serverName: string;
|
|
8
|
+
toolName: string;
|
|
9
|
+
description: string;
|
|
10
|
+
parameters: Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* The server's self-declared readOnlyHint annotation. Untrusted — only
|
|
13
|
+
* consulted in acceptEdits mode when the provider opts into
|
|
14
|
+
* mcpToolPermissions: "trust-read-only".
|
|
15
|
+
*/
|
|
16
|
+
readOnlyHint: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface McpPromptBinding {
|
|
19
|
+
/** Namespaced, sanitized slash-command name. */
|
|
20
|
+
commandName: string;
|
|
21
|
+
serverName: string;
|
|
22
|
+
promptName: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
argumentNames: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface McpServerFailure {
|
|
27
|
+
name: string;
|
|
28
|
+
error: string;
|
|
29
|
+
}
|
|
30
|
+
export interface McpToolCallOutcome {
|
|
31
|
+
output: string;
|
|
32
|
+
isError: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface OpenAICompatMcpManagerOptions {
|
|
35
|
+
servers: Record<string, McpServerConfig>;
|
|
36
|
+
providerId: string;
|
|
37
|
+
cwd: string;
|
|
38
|
+
logger?: Logger;
|
|
39
|
+
managedProcesses?: ManagedProcessRegistry | null;
|
|
40
|
+
connectTimeoutMs?: number;
|
|
41
|
+
}
|
|
42
|
+
export declare class OpenAICompatMcpManager {
|
|
43
|
+
private readonly servers;
|
|
44
|
+
private readonly providerId;
|
|
45
|
+
private readonly cwd;
|
|
46
|
+
private readonly logger?;
|
|
47
|
+
private readonly managedProcesses;
|
|
48
|
+
private readonly connectTimeoutMs;
|
|
49
|
+
/** Every configured header/env value, replaced with *** in outgoing text. */
|
|
50
|
+
private readonly secrets;
|
|
51
|
+
private connectPromise;
|
|
52
|
+
private connected;
|
|
53
|
+
private toolBindings;
|
|
54
|
+
private connectionFailures;
|
|
55
|
+
private closed;
|
|
56
|
+
constructor(options: OpenAICompatMcpManagerOptions);
|
|
57
|
+
get hasServers(): boolean;
|
|
58
|
+
/** Failures recorded by the last connect pass; empty before the first connect. */
|
|
59
|
+
get failures(): readonly McpServerFailure[];
|
|
60
|
+
/**
|
|
61
|
+
* Connect to every configured server and snapshot its tools. Memoized so
|
|
62
|
+
* idle sessions never spawn processes and repeated turns reuse connections.
|
|
63
|
+
* Per-server failures are collected, never thrown.
|
|
64
|
+
*/
|
|
65
|
+
ensureConnected(): Promise<void>;
|
|
66
|
+
private connectAll;
|
|
67
|
+
private recordConnectionFailure;
|
|
68
|
+
private connectServer;
|
|
69
|
+
private snapshotTools;
|
|
70
|
+
/** Pids of spawned stdio servers (diagnostics and lifecycle tests). */
|
|
71
|
+
getStdioPids(): number[];
|
|
72
|
+
/** Tool bindings snapshotted at connect; empty before the first connect. */
|
|
73
|
+
getToolBindings(): McpToolBinding[];
|
|
74
|
+
resolveTool(modelName: string): McpToolBinding | undefined;
|
|
75
|
+
callTool(binding: McpToolBinding, args: Record<string, unknown>, options: {
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
}): Promise<McpToolCallOutcome>;
|
|
78
|
+
/** Prompts listed on demand (for slash commands); per-server failures are skipped. */
|
|
79
|
+
listPrompts(): Promise<McpPromptBinding[]>;
|
|
80
|
+
/** Resolve a prompt to the text fed to the model in place of the typed /command. */
|
|
81
|
+
getPrompt(binding: McpPromptBinding, argumentValue: string | null): Promise<string>;
|
|
82
|
+
/** Idempotent: close clients, tree-kill stdio children, unregister processes. */
|
|
83
|
+
close(): Promise<void>;
|
|
84
|
+
/** Replace configured header/env secret values in outgoing text with ***. */
|
|
85
|
+
redact(text: string): string;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=openai-compat-mcp.d.ts.map
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
3
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
4
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
5
|
+
import { createExternalProcessEnv } from "../../otto-env.js";
|
|
6
|
+
import { terminateWithTreeKill } from "../../../utils/tree-kill.js";
|
|
7
|
+
import { capToolOutput } from "./openai-compat-tools.js";
|
|
8
|
+
/**
|
|
9
|
+
* MCP client host for the OpenAI-compatible provider. The daemon owns that
|
|
10
|
+
* provider's tool loop (there is no agent binary to host an MCP client), so
|
|
11
|
+
* this manager connects to the configured MCP servers, snapshots their tools,
|
|
12
|
+
* and routes tool calls — one manager per agent session.
|
|
13
|
+
*
|
|
14
|
+
* Security posture:
|
|
15
|
+
* - stdio servers spawn with a scrubbed environment (Otto control vars
|
|
16
|
+
* stripped) plus only the explicit per-server overlay, cwd = agent cwd, and
|
|
17
|
+
* no shell. They are tree-killed on close and registered in the
|
|
18
|
+
* managed-process registry so daemon-restart reaping covers leaks.
|
|
19
|
+
* - Configured header and env values are secrets: they are redacted from all
|
|
20
|
+
* error text this module returns, and never logged.
|
|
21
|
+
* - A server that fails to connect is skipped and recorded as a failure —
|
|
22
|
+
* never fatal to the session.
|
|
23
|
+
* - Tool names are namespaced `mcp_{server}_{tool}` so a server cannot shadow
|
|
24
|
+
* the builtin coding tools or Otto's injected catalog.
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_CONNECT_TIMEOUT_MS = 10000;
|
|
27
|
+
const LIST_TIMEOUT_MS = 10000;
|
|
28
|
+
const CALL_TOOL_TIMEOUT_MS = 120000;
|
|
29
|
+
const STDIO_KILL_GRACE_MS = 500;
|
|
30
|
+
/** OpenAI function names must match ^[a-zA-Z0-9_-]{1,64}$. */
|
|
31
|
+
const MAX_FUNCTION_NAME_CHARS = 64;
|
|
32
|
+
const REDACTED = "***";
|
|
33
|
+
function sanitizeNamePart(part) {
|
|
34
|
+
return part.replace(/[^a-zA-Z0-9_-]/gu, "_");
|
|
35
|
+
}
|
|
36
|
+
/** Build `mcp_{server}_{tool}` capped at the OpenAI limit, deduped with a numeric suffix. */
|
|
37
|
+
function buildNamespacedName(prefix, used) {
|
|
38
|
+
let candidate = prefix.slice(0, MAX_FUNCTION_NAME_CHARS);
|
|
39
|
+
let suffix = 2;
|
|
40
|
+
while (used.has(candidate)) {
|
|
41
|
+
const tail = `_${suffix}`;
|
|
42
|
+
candidate = `${prefix.slice(0, MAX_FUNCTION_NAME_CHARS - tail.length)}${tail}`;
|
|
43
|
+
suffix += 1;
|
|
44
|
+
}
|
|
45
|
+
used.add(candidate);
|
|
46
|
+
return candidate;
|
|
47
|
+
}
|
|
48
|
+
function flattenContentText(content) {
|
|
49
|
+
if (!Array.isArray(content)) {
|
|
50
|
+
return "";
|
|
51
|
+
}
|
|
52
|
+
return content
|
|
53
|
+
.flatMap((part) => {
|
|
54
|
+
if (!part || typeof part !== "object")
|
|
55
|
+
return [];
|
|
56
|
+
const record = part;
|
|
57
|
+
return record.type === "text" && typeof record.text === "string" ? [record.text] : [];
|
|
58
|
+
})
|
|
59
|
+
.join("\n");
|
|
60
|
+
}
|
|
61
|
+
export class OpenAICompatMcpManager {
|
|
62
|
+
constructor(options) {
|
|
63
|
+
this.connectPromise = null;
|
|
64
|
+
this.connected = [];
|
|
65
|
+
this.toolBindings = new Map();
|
|
66
|
+
this.connectionFailures = [];
|
|
67
|
+
this.closed = false;
|
|
68
|
+
this.servers = options.servers;
|
|
69
|
+
this.providerId = options.providerId;
|
|
70
|
+
this.cwd = options.cwd;
|
|
71
|
+
this.logger = options.logger;
|
|
72
|
+
this.managedProcesses = options.managedProcesses ?? null;
|
|
73
|
+
this.connectTimeoutMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
|
|
74
|
+
this.secrets = collectSecrets(options.servers);
|
|
75
|
+
}
|
|
76
|
+
get hasServers() {
|
|
77
|
+
return Object.keys(this.servers).length > 0;
|
|
78
|
+
}
|
|
79
|
+
/** Failures recorded by the last connect pass; empty before the first connect. */
|
|
80
|
+
get failures() {
|
|
81
|
+
return this.connectionFailures;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Connect to every configured server and snapshot its tools. Memoized so
|
|
85
|
+
* idle sessions never spawn processes and repeated turns reuse connections.
|
|
86
|
+
* Per-server failures are collected, never thrown.
|
|
87
|
+
*/
|
|
88
|
+
ensureConnected() {
|
|
89
|
+
if (this.closed) {
|
|
90
|
+
return Promise.resolve();
|
|
91
|
+
}
|
|
92
|
+
this.connectPromise ?? (this.connectPromise = this.connectAll());
|
|
93
|
+
return this.connectPromise;
|
|
94
|
+
}
|
|
95
|
+
async connectAll() {
|
|
96
|
+
// Connect in parallel — sequential connects stack the 10s timeout per
|
|
97
|
+
// unreachable server ahead of the session's first turn. Tool snapshots
|
|
98
|
+
// still run in config order so namespaced-name dedup suffixes stay
|
|
99
|
+
// deterministic.
|
|
100
|
+
const entries = Object.entries(this.servers);
|
|
101
|
+
const results = await Promise.allSettled(entries.map(([name, config]) => this.connectServer(name, config)));
|
|
102
|
+
const usedNames = new Set();
|
|
103
|
+
for (const [index, [name]] of entries.entries()) {
|
|
104
|
+
const result = results[index];
|
|
105
|
+
if (result.status === "rejected") {
|
|
106
|
+
this.recordConnectionFailure(name, result.reason);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
this.connected.push(result.value);
|
|
110
|
+
try {
|
|
111
|
+
await this.snapshotTools(result.value, usedNames);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.recordConnectionFailure(name, error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
recordConnectionFailure(name, error) {
|
|
119
|
+
const message = this.redact(error instanceof Error ? error.message : String(error));
|
|
120
|
+
this.connectionFailures.push({ name, error: message });
|
|
121
|
+
this.logger?.warn({ provider: this.providerId, mcpServer: name, error: message }, "MCP server connection failed");
|
|
122
|
+
}
|
|
123
|
+
async connectServer(name, config) {
|
|
124
|
+
const client = new Client({ name: "otto-openai-compat", version: "1.0.0" });
|
|
125
|
+
if (config.type === "stdio") {
|
|
126
|
+
const transport = new StdioClientTransport({
|
|
127
|
+
command: config.command,
|
|
128
|
+
args: config.args ?? [],
|
|
129
|
+
cwd: this.cwd,
|
|
130
|
+
env: createExternalProcessEnv(process.env, config.env ?? {}),
|
|
131
|
+
stderr: "pipe",
|
|
132
|
+
});
|
|
133
|
+
transport.stderr?.on("data", (chunk) => {
|
|
134
|
+
this.logger?.debug({ provider: this.providerId, mcpServer: name }, `MCP server stderr: ${this.redact(chunk.toString("utf8")).slice(0, 500)}`);
|
|
135
|
+
});
|
|
136
|
+
try {
|
|
137
|
+
await client.connect(transport, { timeout: this.connectTimeoutMs });
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
// The SDK spawned the process before the handshake failed — reap it.
|
|
141
|
+
const pid = transport.pid;
|
|
142
|
+
if (typeof pid === "number") {
|
|
143
|
+
void killPidTree(pid);
|
|
144
|
+
}
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
const pid = transport.pid;
|
|
148
|
+
let managedRecordId = null;
|
|
149
|
+
if (typeof pid === "number" && this.managedProcesses) {
|
|
150
|
+
try {
|
|
151
|
+
const record = await this.managedProcesses.record({
|
|
152
|
+
owner: { provider: this.providerId, kind: "mcp-server" },
|
|
153
|
+
pid,
|
|
154
|
+
command: config.command,
|
|
155
|
+
args: config.args ?? [],
|
|
156
|
+
metadata: { server: name },
|
|
157
|
+
});
|
|
158
|
+
managedRecordId = record.id;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
this.logger?.warn({ err: error, provider: this.providerId, mcpServer: name }, "Failed to register MCP server process");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return { name, client, stdioPid: pid ?? null, managedRecordId };
|
|
165
|
+
}
|
|
166
|
+
const url = new URL(config.url);
|
|
167
|
+
const requestInit = config.headers
|
|
168
|
+
? { headers: config.headers }
|
|
169
|
+
: undefined;
|
|
170
|
+
const transport = config.type === "http"
|
|
171
|
+
? new StreamableHTTPClientTransport(url, requestInit ? { requestInit } : undefined)
|
|
172
|
+
: new SSEClientTransport(url, requestInit ? { requestInit } : undefined);
|
|
173
|
+
await client.connect(transport, { timeout: this.connectTimeoutMs });
|
|
174
|
+
return { name, client, stdioPid: null, managedRecordId: null };
|
|
175
|
+
}
|
|
176
|
+
async snapshotTools(server, usedNames) {
|
|
177
|
+
const listing = await server.client.listTools(undefined, { timeout: LIST_TIMEOUT_MS });
|
|
178
|
+
for (const tool of listing.tools) {
|
|
179
|
+
const prefix = `mcp_${sanitizeNamePart(server.name)}_${sanitizeNamePart(tool.name)}`;
|
|
180
|
+
const modelName = buildNamespacedName(prefix, usedNames);
|
|
181
|
+
this.toolBindings.set(modelName, {
|
|
182
|
+
modelName,
|
|
183
|
+
serverName: server.name,
|
|
184
|
+
toolName: tool.name,
|
|
185
|
+
description: tool.description ?? "",
|
|
186
|
+
parameters: tool.inputSchema ?? {
|
|
187
|
+
type: "object",
|
|
188
|
+
properties: {},
|
|
189
|
+
},
|
|
190
|
+
readOnlyHint: tool.annotations?.readOnlyHint === true,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Pids of spawned stdio servers (diagnostics and lifecycle tests). */
|
|
195
|
+
getStdioPids() {
|
|
196
|
+
return this.connected.flatMap((server) => (server.stdioPid !== null ? [server.stdioPid] : []));
|
|
197
|
+
}
|
|
198
|
+
/** Tool bindings snapshotted at connect; empty before the first connect. */
|
|
199
|
+
getToolBindings() {
|
|
200
|
+
return [...this.toolBindings.values()];
|
|
201
|
+
}
|
|
202
|
+
resolveTool(modelName) {
|
|
203
|
+
return this.toolBindings.get(modelName);
|
|
204
|
+
}
|
|
205
|
+
async callTool(binding, args, options) {
|
|
206
|
+
const server = this.connected.find((candidate) => candidate.name === binding.serverName);
|
|
207
|
+
if (!server) {
|
|
208
|
+
return {
|
|
209
|
+
output: `Error: MCP server '${binding.serverName}' is not connected`,
|
|
210
|
+
isError: true,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const result = await server.client.callTool({ name: binding.toolName, arguments: args }, undefined, { timeout: CALL_TOOL_TIMEOUT_MS, ...(options.signal ? { signal: options.signal } : {}) });
|
|
215
|
+
const text = flattenContentText(result.content);
|
|
216
|
+
const fallback = result.isError ? "Tool failed" : "Done.";
|
|
217
|
+
return {
|
|
218
|
+
output: capToolOutput(this.redact(text || fallback)),
|
|
219
|
+
isError: result.isError === true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const message = this.redact(error instanceof Error ? error.message : String(error));
|
|
224
|
+
return { output: `Error: ${message}`, isError: true };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/** Prompts listed on demand (for slash commands); per-server failures are skipped. */
|
|
228
|
+
async listPrompts() {
|
|
229
|
+
await this.ensureConnected();
|
|
230
|
+
const bindings = [];
|
|
231
|
+
const usedNames = new Set();
|
|
232
|
+
for (const server of this.connected) {
|
|
233
|
+
try {
|
|
234
|
+
const listing = await server.client.listPrompts(undefined, { timeout: LIST_TIMEOUT_MS });
|
|
235
|
+
for (const prompt of listing.prompts) {
|
|
236
|
+
const prefix = `mcp_${sanitizeNamePart(server.name)}_${sanitizeNamePart(prompt.name)}`;
|
|
237
|
+
bindings.push({
|
|
238
|
+
commandName: buildNamespacedName(prefix, usedNames),
|
|
239
|
+
serverName: server.name,
|
|
240
|
+
promptName: prompt.name,
|
|
241
|
+
...(prompt.description ? { description: prompt.description } : {}),
|
|
242
|
+
argumentNames: (prompt.arguments ?? []).map((argument) => argument.name),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
// Servers without prompt support reply with "method not found" — normal.
|
|
248
|
+
this.logger?.debug({ provider: this.providerId, mcpServer: server.name, err: error }, "MCP prompts listing unavailable");
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return bindings;
|
|
252
|
+
}
|
|
253
|
+
/** Resolve a prompt to the text fed to the model in place of the typed /command. */
|
|
254
|
+
async getPrompt(binding, argumentValue) {
|
|
255
|
+
const server = this.connected.find((candidate) => candidate.name === binding.serverName);
|
|
256
|
+
if (!server) {
|
|
257
|
+
throw new Error(`MCP server '${binding.serverName}' is not connected`);
|
|
258
|
+
}
|
|
259
|
+
const firstArgument = binding.argumentNames[0];
|
|
260
|
+
const result = await server.client.getPrompt({
|
|
261
|
+
name: binding.promptName,
|
|
262
|
+
...(firstArgument && argumentValue
|
|
263
|
+
? { arguments: { [firstArgument]: argumentValue } }
|
|
264
|
+
: {}),
|
|
265
|
+
}, { timeout: LIST_TIMEOUT_MS });
|
|
266
|
+
const text = result.messages
|
|
267
|
+
.map((message) => {
|
|
268
|
+
const content = message.content;
|
|
269
|
+
return content?.type === "text" && typeof content.text === "string" ? content.text : "";
|
|
270
|
+
})
|
|
271
|
+
.filter(Boolean)
|
|
272
|
+
.join("\n\n");
|
|
273
|
+
if (!text) {
|
|
274
|
+
throw new Error(`MCP prompt '${binding.promptName}' returned no text content`);
|
|
275
|
+
}
|
|
276
|
+
return this.redact(text);
|
|
277
|
+
}
|
|
278
|
+
/** Idempotent: close clients, tree-kill stdio children, unregister processes. */
|
|
279
|
+
async close() {
|
|
280
|
+
if (this.closed) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
this.closed = true;
|
|
284
|
+
const servers = this.connected;
|
|
285
|
+
this.connected = [];
|
|
286
|
+
this.toolBindings = new Map();
|
|
287
|
+
for (const server of servers) {
|
|
288
|
+
await server.client.close().catch(() => undefined);
|
|
289
|
+
if (server.stdioPid !== null) {
|
|
290
|
+
await killPidTree(server.stdioPid);
|
|
291
|
+
}
|
|
292
|
+
if (server.managedRecordId && this.managedProcesses) {
|
|
293
|
+
await this.managedProcesses.remove(server.managedRecordId).catch(() => undefined);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/** Replace configured header/env secret values in outgoing text with ***. */
|
|
298
|
+
redact(text) {
|
|
299
|
+
let result = text;
|
|
300
|
+
for (const secret of this.secrets) {
|
|
301
|
+
result = result.split(secret).join(REDACTED);
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function collectSecrets(servers) {
|
|
307
|
+
const secrets = [];
|
|
308
|
+
for (const config of Object.values(servers)) {
|
|
309
|
+
const values = config.type === "stdio"
|
|
310
|
+
? Object.values(config.env ?? {})
|
|
311
|
+
: Object.values(config.headers ?? {});
|
|
312
|
+
for (const value of values) {
|
|
313
|
+
// Very short values would redact common substrings; headers/env values
|
|
314
|
+
// that short are not meaningful secrets.
|
|
315
|
+
if (value.length >= 4) {
|
|
316
|
+
secrets.push(value);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return secrets;
|
|
321
|
+
}
|
|
322
|
+
function isPidAlive(pid) {
|
|
323
|
+
try {
|
|
324
|
+
process.kill(pid, 0);
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* SDK close() only signals the direct child; npx-style wrappers leave orphaned
|
|
333
|
+
* grandchildren. Tree-kill by pid: without an exit-event handle the graceful
|
|
334
|
+
* wait always runs its course, so skip dead pids and keep the grace short.
|
|
335
|
+
*/
|
|
336
|
+
async function killPidTree(pid) {
|
|
337
|
+
if (!isPidAlive(pid)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
await terminateWithTreeKill({
|
|
341
|
+
pid,
|
|
342
|
+
kill: (signal) => {
|
|
343
|
+
try {
|
|
344
|
+
process.kill(pid, signal);
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
}, { gracefulTimeoutMs: STDIO_KILL_GRACE_MS });
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=openai-compat-mcp.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission classification for Otto catalog tools (browser_*, preview_*,
|
|
3
|
+
* agent/terminal/schedule management) when the openai-compat provider is the
|
|
4
|
+
* tool runtime.
|
|
5
|
+
*
|
|
6
|
+
* CLI providers reach these tools through their own MCP client, so the CLI's
|
|
7
|
+
* permission system prompts before running them. The openai-compat provider
|
|
8
|
+
* has no CLI in front of it — the daemon executes the call directly — so the
|
|
9
|
+
* daemon must supply the equivalent gating itself. Without it, an "Always Ask"
|
|
10
|
+
* session could create a terminal and send keystrokes (shell execution),
|
|
11
|
+
* upload arbitrary files through a browser form, or flip another agent to
|
|
12
|
+
* bypassPermissions, all without a prompt.
|
|
13
|
+
*
|
|
14
|
+
* The classes mirror CompatToolKind (openai-compat-tools.ts):
|
|
15
|
+
*
|
|
16
|
+
* - "read": observation only — never prompts.
|
|
17
|
+
* - "interact": drives visible UI the user is watching (browser pane
|
|
18
|
+
* interaction, preview servers) — prompts in default mode,
|
|
19
|
+
* auto-approved in acceptEdits, like file edits.
|
|
20
|
+
* - "execute": can run code, move data off the page, or change what other
|
|
21
|
+
* agents are allowed to do — prompts in default AND acceptEdits,
|
|
22
|
+
* like shell commands.
|
|
23
|
+
*
|
|
24
|
+
* Unknown names default to "execute": a new tool must be classified here
|
|
25
|
+
* before it can skip prompts.
|
|
26
|
+
*/
|
|
27
|
+
export type OttoToolPermissionKind = "read" | "interact" | "execute";
|
|
28
|
+
export declare function ottoToolPermissionKind(name: string): OttoToolPermissionKind;
|
|
29
|
+
//# sourceMappingURL=openai-compat-otto-tool-permissions.d.ts.map
|