@jait/gateway 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/jait.mjs +144 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/db/connection.d.ts +37 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +85 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +24 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +312 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/schema.d.ts +2253 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +195 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/foundation.d.ts +26 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +15 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +413 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/uuidv7.d.ts +10 -0
- package/dist/lib/uuidv7.d.ts.map +1 -0
- package/dist/lib/uuidv7.js +33 -0
- package/dist/lib/uuidv7.js.map +1 -0
- package/dist/memory/contracts.d.ts +42 -0
- package/dist/memory/contracts.d.ts.map +1 -0
- package/dist/memory/contracts.js +2 -0
- package/dist/memory/contracts.js.map +1 -0
- package/dist/memory/embeddings.d.ts +4 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +26 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/service.d.ts +17 -0
- package/dist/memory/service.d.ts.map +1 -0
- package/dist/memory/service.js +82 -0
- package/dist/memory/service.js.map +1 -0
- package/dist/memory/sqlite-backend.d.ts +11 -0
- package/dist/memory/sqlite-backend.d.ts.map +1 -0
- package/dist/memory/sqlite-backend.js +68 -0
- package/dist/memory/sqlite-backend.js.map +1 -0
- package/dist/plugins/contracts.d.ts +11 -0
- package/dist/plugins/contracts.d.ts.map +1 -0
- package/dist/plugins/contracts.js +2 -0
- package/dist/plugins/contracts.js.map +1 -0
- package/dist/providers/claude-code-provider.d.ts +39 -0
- package/dist/providers/claude-code-provider.d.ts.map +1 -0
- package/dist/providers/claude-code-provider.js +322 -0
- package/dist/providers/claude-code-provider.js.map +1 -0
- package/dist/providers/codex-provider.d.ts +51 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +826 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/contracts.d.ts +167 -0
- package/dist/providers/contracts.d.ts.map +1 -0
- package/dist/providers/contracts.js +13 -0
- package/dist/providers/contracts.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/jait-provider.d.ts +23 -0
- package/dist/providers/jait-provider.d.ts.map +1 -0
- package/dist/providers/jait-provider.js +67 -0
- package/dist/providers/jait-provider.js.map +1 -0
- package/dist/providers/registry.d.ts +39 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +64 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/pty-broker-client.d.ts +46 -0
- package/dist/pty-broker-client.d.ts.map +1 -0
- package/dist/pty-broker-client.js +142 -0
- package/dist/pty-broker-client.js.map +1 -0
- package/dist/routes/auth.d.ts +6 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +236 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/chat.d.ts +32 -0
- package/dist/routes/chat.d.ts.map +1 -0
- package/dist/routes/chat.js +1503 -0
- package/dist/routes/chat.js.map +1 -0
- package/dist/routes/consent.d.ts +10 -0
- package/dist/routes/consent.d.ts.map +1 -0
- package/dist/routes/consent.js +127 -0
- package/dist/routes/consent.js.map +1 -0
- package/dist/routes/filesystem.d.ts +14 -0
- package/dist/routes/filesystem.d.ts.map +1 -0
- package/dist/routes/filesystem.js +152 -0
- package/dist/routes/filesystem.js.map +1 -0
- package/dist/routes/git.d.ts +17 -0
- package/dist/routes/git.d.ts.map +1 -0
- package/dist/routes/git.js +213 -0
- package/dist/routes/git.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +21 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/hooks.d.ts +9 -0
- package/dist/routes/hooks.d.ts.map +1 -0
- package/dist/routes/hooks.js +22 -0
- package/dist/routes/hooks.js.map +1 -0
- package/dist/routes/jobs.d.ts +5 -0
- package/dist/routes/jobs.d.ts.map +1 -0
- package/dist/routes/jobs.js +333 -0
- package/dist/routes/jobs.js.map +1 -0
- package/dist/routes/mcp-server.d.ts +23 -0
- package/dist/routes/mcp-server.d.ts.map +1 -0
- package/dist/routes/mcp-server.js +177 -0
- package/dist/routes/mcp-server.js.map +1 -0
- package/dist/routes/mobile.d.ts +12 -0
- package/dist/routes/mobile.d.ts.map +1 -0
- package/dist/routes/mobile.js +64 -0
- package/dist/routes/mobile.js.map +1 -0
- package/dist/routes/network.d.ts +3 -0
- package/dist/routes/network.d.ts.map +1 -0
- package/dist/routes/network.js +367 -0
- package/dist/routes/network.js.map +1 -0
- package/dist/routes/repositories.d.ts +18 -0
- package/dist/routes/repositories.d.ts.map +1 -0
- package/dist/routes/repositories.js +90 -0
- package/dist/routes/repositories.js.map +1 -0
- package/dist/routes/screen-share.d.ts +17 -0
- package/dist/routes/screen-share.d.ts.map +1 -0
- package/dist/routes/screen-share.js +92 -0
- package/dist/routes/screen-share.js.map +1 -0
- package/dist/routes/sessions.d.ts +18 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +169 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/terminals.d.ts +15 -0
- package/dist/routes/terminals.d.ts.map +1 -0
- package/dist/routes/terminals.js +326 -0
- package/dist/routes/terminals.js.map +1 -0
- package/dist/routes/threads.d.ts +38 -0
- package/dist/routes/threads.d.ts.map +1 -0
- package/dist/routes/threads.js +488 -0
- package/dist/routes/threads.js.map +1 -0
- package/dist/routes/trust.d.ts +9 -0
- package/dist/routes/trust.d.ts.map +1 -0
- package/dist/routes/trust.js +25 -0
- package/dist/routes/trust.js.map +1 -0
- package/dist/routes/voice.d.ts +5 -0
- package/dist/routes/voice.d.ts.map +1 -0
- package/dist/routes/voice.js +37 -0
- package/dist/routes/voice.js.map +1 -0
- package/dist/routes/workspace.d.ts +13 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +275 -0
- package/dist/routes/workspace.js.map +1 -0
- package/dist/scheduler/contracts.d.ts +15 -0
- package/dist/scheduler/contracts.d.ts.map +1 -0
- package/dist/scheduler/contracts.js +2 -0
- package/dist/scheduler/contracts.js.map +1 -0
- package/dist/scheduler/hooks.d.ts +20 -0
- package/dist/scheduler/hooks.d.ts.map +1 -0
- package/dist/scheduler/hooks.js +78 -0
- package/dist/scheduler/hooks.js.map +1 -0
- package/dist/scheduler/service.d.ts +65 -0
- package/dist/scheduler/service.d.ts.map +1 -0
- package/dist/scheduler/service.js +188 -0
- package/dist/scheduler/service.js.map +1 -0
- package/dist/security/consent-executor.d.ts +48 -0
- package/dist/security/consent-executor.d.ts.map +1 -0
- package/dist/security/consent-executor.js +158 -0
- package/dist/security/consent-executor.js.map +1 -0
- package/dist/security/consent-manager.d.ts +105 -0
- package/dist/security/consent-manager.d.ts.map +1 -0
- package/dist/security/consent-manager.js +227 -0
- package/dist/security/consent-manager.js.map +1 -0
- package/dist/security/contracts.d.ts +31 -0
- package/dist/security/contracts.d.ts.map +1 -0
- package/dist/security/contracts.js +2 -0
- package/dist/security/contracts.js.map +1 -0
- package/dist/security/http-auth.d.ts +10 -0
- package/dist/security/http-auth.d.ts.map +1 -0
- package/dist/security/http-auth.js +48 -0
- package/dist/security/http-auth.js.map +1 -0
- package/dist/security/index.d.ts +10 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/path-guard.d.ts +40 -0
- package/dist/security/path-guard.d.ts.map +1 -0
- package/dist/security/path-guard.js +125 -0
- package/dist/security/path-guard.js.map +1 -0
- package/dist/security/sandbox-manager.d.ts +43 -0
- package/dist/security/sandbox-manager.d.ts.map +1 -0
- package/dist/security/sandbox-manager.js +110 -0
- package/dist/security/sandbox-manager.js.map +1 -0
- package/dist/security/ssrf-guard.d.ts +11 -0
- package/dist/security/ssrf-guard.d.ts.map +1 -0
- package/dist/security/ssrf-guard.js +59 -0
- package/dist/security/ssrf-guard.js.map +1 -0
- package/dist/security/tool-permissions.d.ts +61 -0
- package/dist/security/tool-permissions.d.ts.map +1 -0
- package/dist/security/tool-permissions.js +105 -0
- package/dist/security/tool-permissions.js.map +1 -0
- package/dist/security/tool-profiles.d.ts +23 -0
- package/dist/security/tool-profiles.d.ts.map +1 -0
- package/dist/security/tool-profiles.js +106 -0
- package/dist/security/tool-profiles.js.map +1 -0
- package/dist/security/trust-engine.d.ts +61 -0
- package/dist/security/trust-engine.d.ts.map +1 -0
- package/dist/security/trust-engine.js +192 -0
- package/dist/security/trust-engine.js.map +1 -0
- package/dist/server.d.ts +54 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +188 -0
- package/dist/server.js.map +1 -0
- package/dist/services/audit.d.ts +60 -0
- package/dist/services/audit.d.ts.map +1 -0
- package/dist/services/audit.js +58 -0
- package/dist/services/audit.js.map +1 -0
- package/dist/services/device-registry.d.ts +15 -0
- package/dist/services/device-registry.d.ts.map +1 -0
- package/dist/services/device-registry.js +32 -0
- package/dist/services/device-registry.js.map +1 -0
- package/dist/services/git.d.ts +168 -0
- package/dist/services/git.d.ts.map +1 -0
- package/dist/services/git.js +957 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/repositories.d.ts +32 -0
- package/dist/services/repositories.d.ts.map +1 -0
- package/dist/services/repositories.js +70 -0
- package/dist/services/repositories.js.map +1 -0
- package/dist/services/session-state.d.ts +20 -0
- package/dist/services/session-state.d.ts.map +1 -0
- package/dist/services/session-state.js +89 -0
- package/dist/services/session-state.js.map +1 -0
- package/dist/services/sessions.d.ts +68 -0
- package/dist/services/sessions.d.ts.map +1 -0
- package/dist/services/sessions.js +136 -0
- package/dist/services/sessions.js.map +1 -0
- package/dist/services/thread-title.d.ts +23 -0
- package/dist/services/thread-title.d.ts.map +1 -0
- package/dist/services/thread-title.js +141 -0
- package/dist/services/thread-title.js.map +1 -0
- package/dist/services/threads.d.ts +64 -0
- package/dist/services/threads.d.ts.map +1 -0
- package/dist/services/threads.js +202 -0
- package/dist/services/threads.js.map +1 -0
- package/dist/services/users.d.ts +39 -0
- package/dist/services/users.d.ts.map +1 -0
- package/dist/services/users.js +203 -0
- package/dist/services/users.js.map +1 -0
- package/dist/sessions/contracts.d.ts +14 -0
- package/dist/sessions/contracts.d.ts.map +1 -0
- package/dist/sessions/contracts.js +2 -0
- package/dist/sessions/contracts.js.map +1 -0
- package/dist/surfaces/browser.d.ts +65 -0
- package/dist/surfaces/browser.d.ts.map +1 -0
- package/dist/surfaces/browser.js +615 -0
- package/dist/surfaces/browser.js.map +1 -0
- package/dist/surfaces/contracts.d.ts +34 -0
- package/dist/surfaces/contracts.d.ts.map +1 -0
- package/dist/surfaces/contracts.js +2 -0
- package/dist/surfaces/contracts.js.map +1 -0
- package/dist/surfaces/filesystem.d.ts +76 -0
- package/dist/surfaces/filesystem.d.ts.map +1 -0
- package/dist/surfaces/filesystem.js +245 -0
- package/dist/surfaces/filesystem.js.map +1 -0
- package/dist/surfaces/index.d.ts +6 -0
- package/dist/surfaces/index.d.ts.map +1 -0
- package/dist/surfaces/index.js +5 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/registry.d.ts +24 -0
- package/dist/surfaces/registry.d.ts.map +1 -0
- package/dist/surfaces/registry.js +59 -0
- package/dist/surfaces/registry.js.map +1 -0
- package/dist/surfaces/terminal.d.ts +76 -0
- package/dist/surfaces/terminal.d.ts.map +1 -0
- package/dist/surfaces/terminal.js +271 -0
- package/dist/surfaces/terminal.js.map +1 -0
- package/dist/tools/agent-loop.d.ts +302 -0
- package/dist/tools/agent-loop.d.ts.map +1 -0
- package/dist/tools/agent-loop.js +918 -0
- package/dist/tools/agent-loop.js.map +1 -0
- package/dist/tools/agent-tools.d.ts +39 -0
- package/dist/tools/agent-tools.d.ts.map +1 -0
- package/dist/tools/agent-tools.js +263 -0
- package/dist/tools/agent-tools.js.map +1 -0
- package/dist/tools/browser-tools.d.ts +38 -0
- package/dist/tools/browser-tools.d.ts.map +1 -0
- package/dist/tools/browser-tools.js +725 -0
- package/dist/tools/browser-tools.js.map +1 -0
- package/dist/tools/chat-modes.d.ts +75 -0
- package/dist/tools/chat-modes.d.ts.map +1 -0
- package/dist/tools/chat-modes.js +228 -0
- package/dist/tools/chat-modes.js.map +1 -0
- package/dist/tools/contracts.d.ts +69 -0
- package/dist/tools/contracts.d.ts.map +1 -0
- package/dist/tools/contracts.js +2 -0
- package/dist/tools/contracts.js.map +1 -0
- package/dist/tools/core/agent.d.ts +31 -0
- package/dist/tools/core/agent.d.ts.map +1 -0
- package/dist/tools/core/agent.js +65 -0
- package/dist/tools/core/agent.js.map +1 -0
- package/dist/tools/core/edit.d.ts +30 -0
- package/dist/tools/core/edit.d.ts.map +1 -0
- package/dist/tools/core/edit.js +109 -0
- package/dist/tools/core/edit.js.map +1 -0
- package/dist/tools/core/execute.d.ts +36 -0
- package/dist/tools/core/execute.d.ts.map +1 -0
- package/dist/tools/core/execute.js +81 -0
- package/dist/tools/core/execute.js.map +1 -0
- package/dist/tools/core/get-fs.d.ts +32 -0
- package/dist/tools/core/get-fs.d.ts.map +1 -0
- package/dist/tools/core/get-fs.js +143 -0
- package/dist/tools/core/get-fs.js.map +1 -0
- package/dist/tools/core/index.d.ts +26 -0
- package/dist/tools/core/index.d.ts.map +1 -0
- package/dist/tools/core/index.js +26 -0
- package/dist/tools/core/index.js.map +1 -0
- package/dist/tools/core/jait.d.ts +60 -0
- package/dist/tools/core/jait.d.ts.map +1 -0
- package/dist/tools/core/jait.js +256 -0
- package/dist/tools/core/jait.js.map +1 -0
- package/dist/tools/core/read.d.ts +26 -0
- package/dist/tools/core/read.d.ts.map +1 -0
- package/dist/tools/core/read.js +118 -0
- package/dist/tools/core/read.js.map +1 -0
- package/dist/tools/core/search.d.ts +34 -0
- package/dist/tools/core/search.d.ts.map +1 -0
- package/dist/tools/core/search.js +187 -0
- package/dist/tools/core/search.js.map +1 -0
- package/dist/tools/core/todo.d.ts +38 -0
- package/dist/tools/core/todo.d.ts.map +1 -0
- package/dist/tools/core/todo.js +116 -0
- package/dist/tools/core/todo.js.map +1 -0
- package/dist/tools/core/web.d.ts +34 -0
- package/dist/tools/core/web.d.ts.map +1 -0
- package/dist/tools/core/web.js +120 -0
- package/dist/tools/core/web.js.map +1 -0
- package/dist/tools/cron-tools.d.ts +7 -0
- package/dist/tools/cron-tools.d.ts.map +1 -0
- package/dist/tools/cron-tools.js +116 -0
- package/dist/tools/cron-tools.js.map +1 -0
- package/dist/tools/file-tools.d.ts +32 -0
- package/dist/tools/file-tools.d.ts.map +1 -0
- package/dist/tools/file-tools.js +178 -0
- package/dist/tools/file-tools.js.map +1 -0
- package/dist/tools/gateway-tools.d.ts +15 -0
- package/dist/tools/gateway-tools.d.ts.map +1 -0
- package/dist/tools/gateway-tools.js +39 -0
- package/dist/tools/gateway-tools.js.map +1 -0
- package/dist/tools/index.d.ts +57 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +170 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-bridge.d.ts +111 -0
- package/dist/tools/mcp-bridge.d.ts.map +1 -0
- package/dist/tools/mcp-bridge.js +166 -0
- package/dist/tools/mcp-bridge.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +19 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +78 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/meta-tools.d.ts +25 -0
- package/dist/tools/meta-tools.d.ts.map +1 -0
- package/dist/tools/meta-tools.js +125 -0
- package/dist/tools/meta-tools.js.map +1 -0
- package/dist/tools/network-tools.d.ts +21 -0
- package/dist/tools/network-tools.d.ts.map +1 -0
- package/dist/tools/network-tools.js +189 -0
- package/dist/tools/network-tools.js.map +1 -0
- package/dist/tools/os-tools.d.ts +18 -0
- package/dist/tools/os-tools.d.ts.map +1 -0
- package/dist/tools/os-tools.js +210 -0
- package/dist/tools/os-tools.js.map +1 -0
- package/dist/tools/prompts/claude-prompt.d.ts +8 -0
- package/dist/tools/prompts/claude-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/claude-prompt.js +228 -0
- package/dist/tools/prompts/claude-prompt.js.map +1 -0
- package/dist/tools/prompts/default-openai-prompt.d.ts +8 -0
- package/dist/tools/prompts/default-openai-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/default-openai-prompt.js +67 -0
- package/dist/tools/prompts/default-openai-prompt.js.map +1 -0
- package/dist/tools/prompts/default-prompt.d.ts +7 -0
- package/dist/tools/prompts/default-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/default-prompt.js +50 -0
- package/dist/tools/prompts/default-prompt.js.map +1 -0
- package/dist/tools/prompts/gemini-prompt.d.ts +8 -0
- package/dist/tools/prompts/gemini-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/gemini-prompt.js +118 -0
- package/dist/tools/prompts/gemini-prompt.js.map +1 -0
- package/dist/tools/prompts/gpt5-codex-prompt.d.ts +8 -0
- package/dist/tools/prompts/gpt5-codex-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/gpt5-codex-prompt.js +72 -0
- package/dist/tools/prompts/gpt5-codex-prompt.js.map +1 -0
- package/dist/tools/prompts/gpt5-prompt.d.ts +8 -0
- package/dist/tools/prompts/gpt5-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/gpt5-prompt.js +177 -0
- package/dist/tools/prompts/gpt5-prompt.js.map +1 -0
- package/dist/tools/prompts/gpt51-prompt.d.ts +8 -0
- package/dist/tools/prompts/gpt51-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/gpt51-prompt.js +178 -0
- package/dist/tools/prompts/gpt51-prompt.js.map +1 -0
- package/dist/tools/prompts/gpt52-prompt.d.ts +8 -0
- package/dist/tools/prompts/gpt52-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/gpt52-prompt.js +198 -0
- package/dist/tools/prompts/gpt52-prompt.js.map +1 -0
- package/dist/tools/prompts/index.d.ts +22 -0
- package/dist/tools/prompts/index.d.ts.map +1 -0
- package/dist/tools/prompts/index.js +23 -0
- package/dist/tools/prompts/index.js.map +1 -0
- package/dist/tools/prompts/prompt-registry.d.ts +44 -0
- package/dist/tools/prompts/prompt-registry.d.ts.map +1 -0
- package/dist/tools/prompts/prompt-registry.js +60 -0
- package/dist/tools/prompts/prompt-registry.js.map +1 -0
- package/dist/tools/prompts/shared-sections.d.ts +28 -0
- package/dist/tools/prompts/shared-sections.d.ts.map +1 -0
- package/dist/tools/prompts/shared-sections.js +111 -0
- package/dist/tools/prompts/shared-sections.js.map +1 -0
- package/dist/tools/prompts/xai-prompt.d.ts +8 -0
- package/dist/tools/prompts/xai-prompt.d.ts.map +1 -0
- package/dist/tools/prompts/xai-prompt.js +68 -0
- package/dist/tools/prompts/xai-prompt.js.map +1 -0
- package/dist/tools/redeploy-tools.d.ts +30 -0
- package/dist/tools/redeploy-tools.d.ts.map +1 -0
- package/dist/tools/redeploy-tools.js +191 -0
- package/dist/tools/redeploy-tools.js.map +1 -0
- package/dist/tools/registry.d.ts +51 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +148 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/screen-share-tools.d.ts +31 -0
- package/dist/tools/screen-share-tools.d.ts.map +1 -0
- package/dist/tools/screen-share-tools.js +183 -0
- package/dist/tools/screen-share-tools.js.map +1 -0
- package/dist/tools/surface-tools.d.ts +23 -0
- package/dist/tools/surface-tools.d.ts.map +1 -0
- package/dist/tools/surface-tools.js +99 -0
- package/dist/tools/surface-tools.js.map +1 -0
- package/dist/tools/terminal-tools.d.ts +37 -0
- package/dist/tools/terminal-tools.d.ts.map +1 -0
- package/dist/tools/terminal-tools.js +448 -0
- package/dist/tools/terminal-tools.js.map +1 -0
- package/dist/tools/thread-tools.d.ts +61 -0
- package/dist/tools/thread-tools.d.ts.map +1 -0
- package/dist/tools/thread-tools.js +484 -0
- package/dist/tools/thread-tools.js.map +1 -0
- package/dist/tools/token-estimator.d.ts +55 -0
- package/dist/tools/token-estimator.d.ts.map +1 -0
- package/dist/tools/token-estimator.js +82 -0
- package/dist/tools/token-estimator.js.map +1 -0
- package/dist/tools/tool-names.d.ts +64 -0
- package/dist/tools/tool-names.d.ts.map +1 -0
- package/dist/tools/tool-names.js +76 -0
- package/dist/tools/tool-names.js.map +1 -0
- package/dist/tools/validate.d.ts +27 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +99 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/voice-tools.d.ts +8 -0
- package/dist/tools/voice-tools.d.ts.map +1 -0
- package/dist/tools/voice-tools.js +32 -0
- package/dist/tools/voice-tools.js.map +1 -0
- package/dist/voice/service.d.ts +42 -0
- package/dist/voice/service.d.ts.map +1 -0
- package/dist/voice/service.js +75 -0
- package/dist/voice/service.js.map +1 -0
- package/dist/ws.d.ts +90 -0
- package/dist/ws.d.ts.map +1 -0
- package/dist/ws.js +562 -0
- package/dist/ws.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Tools — persistent-terminal edition (OSC 633 shell integration)
|
|
3
|
+
*
|
|
4
|
+
* terminal.run — execute a command in a persistent interactive terminal (like VS Code)
|
|
5
|
+
* terminal.stream — start a new interactive terminal
|
|
6
|
+
*
|
|
7
|
+
* Commands run inside a real, visible terminal that the user can open and
|
|
8
|
+
* interact with in the frontend. Output is captured via OSC 633 escape
|
|
9
|
+
* sequences emitted by the shell integration scripts — the command itself
|
|
10
|
+
* is sent unmodified.
|
|
11
|
+
*
|
|
12
|
+
* Terminals persist between commands (up to 10 globally — oldest is
|
|
13
|
+
* stopped when the limit is exceeded).
|
|
14
|
+
*/
|
|
15
|
+
import { uuidv7 } from "../lib/uuidv7.js";
|
|
16
|
+
import { SandboxManager } from "../security/sandbox-manager.js";
|
|
17
|
+
import { writeFileSync, unlinkSync, mkdirSync } from "node:fs";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
// ── Constants ────────────────────────────────────────────────────
|
|
21
|
+
const MAX_TERMINALS = 10;
|
|
22
|
+
const INTERACTIVE_PROMPT_PATTERNS = [
|
|
23
|
+
/\[sudo\]\s+password\s+for\s+[^:]+:/i,
|
|
24
|
+
/password:\s*$/im,
|
|
25
|
+
/enter\s+passphrase\s+for\s+key/i,
|
|
26
|
+
/verification\s+code:\s*$/im,
|
|
27
|
+
/press\s+enter\s+to\s+continue/i,
|
|
28
|
+
];
|
|
29
|
+
// ── Session → terminal mapping ───────────────────────────────────
|
|
30
|
+
/** sessionId → terminalId of the session's "default" terminal */
|
|
31
|
+
const sessionTerminalMap = new Map();
|
|
32
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
33
|
+
/** Strip ANSI escape sequences from PTY output for clean text */
|
|
34
|
+
function stripAnsi(s) {
|
|
35
|
+
// eslint-disable-next-line no-control-regex
|
|
36
|
+
return s.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\].*?(?:\x07|\x1B\\))/g, "");
|
|
37
|
+
}
|
|
38
|
+
/** Strip OSC 633 sequences + ANSI + stray BEL from a PTY chunk for safe display */
|
|
39
|
+
function cleanChunk(s) {
|
|
40
|
+
// Remove OSC 633 shell-integration sequences (contain BEL \x07 which causes system beep)
|
|
41
|
+
let out = s.replace(/\x1b\]633;[A-Z][^\x07]*(?:\x07|\x1b\\)/g, "");
|
|
42
|
+
// Remove remaining ANSI escape sequences
|
|
43
|
+
out = stripAnsi(out);
|
|
44
|
+
// Remove any stray BEL characters
|
|
45
|
+
out = out.replace(/\x07/g, "");
|
|
46
|
+
// Normalise carriage returns
|
|
47
|
+
out = out.replace(/\r\n/g, "\n").replace(/\r/g, "");
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
export function detectInteractivePrompt(output) {
|
|
51
|
+
if (!output)
|
|
52
|
+
return false;
|
|
53
|
+
return INTERACTIVE_PROMPT_PATTERNS.some((pattern) => pattern.test(output));
|
|
54
|
+
}
|
|
55
|
+
/** Race a promise against an AbortSignal */
|
|
56
|
+
function raceAbort(promise, signal) {
|
|
57
|
+
if (signal.aborted)
|
|
58
|
+
return Promise.reject(new Error("Cancelled"));
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const onAbort = () => reject(new Error("Cancelled"));
|
|
61
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
62
|
+
promise.then((v) => { signal.removeEventListener("abort", onAbort); resolve(v); }, (e) => { signal.removeEventListener("abort", onAbort); reject(e); });
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// ── Session terminal management ──────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Get the session's existing terminal or spin up a new one.
|
|
68
|
+
* Enforces the global MAX_TERMINALS limit — oldest terminal is
|
|
69
|
+
* stopped when the cap is hit (the tool result will mention this).
|
|
70
|
+
*/
|
|
71
|
+
async function ensureSessionTerminal(registry, context, preferredId) {
|
|
72
|
+
// 1. Try preferred terminal (if provided and alive)
|
|
73
|
+
if (preferredId) {
|
|
74
|
+
try {
|
|
75
|
+
const s = registry.getSurface(preferredId);
|
|
76
|
+
if (s && s.type === "terminal" && s.state === "running") {
|
|
77
|
+
return { surface: s, terminalId: preferredId, isNew: false };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch { /* gone — fall through */ }
|
|
81
|
+
}
|
|
82
|
+
// 2. Try the session's default terminal
|
|
83
|
+
const existingId = sessionTerminalMap.get(context.sessionId);
|
|
84
|
+
if (existingId) {
|
|
85
|
+
try {
|
|
86
|
+
const s = registry.getSurface(existingId);
|
|
87
|
+
if (s && s.type === "terminal" && s.state === "running") {
|
|
88
|
+
return { surface: s, terminalId: existingId, isNew: false };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch { /* gone */ }
|
|
92
|
+
sessionTerminalMap.delete(context.sessionId);
|
|
93
|
+
}
|
|
94
|
+
// 3. Enforce global limit — stop oldest terminal(s) if at cap
|
|
95
|
+
let warning;
|
|
96
|
+
const allTerminals = registry
|
|
97
|
+
.listSurfaces()
|
|
98
|
+
.filter((s) => s.type === "terminal" && s.state === "running");
|
|
99
|
+
if (allTerminals.length >= MAX_TERMINALS) {
|
|
100
|
+
const oldest = allTerminals[0];
|
|
101
|
+
await registry.stopSurface(oldest.id, "terminal limit reached");
|
|
102
|
+
// Clean up stale session mapping
|
|
103
|
+
for (const [sid, tid] of sessionTerminalMap.entries()) {
|
|
104
|
+
if (tid === oldest.id) {
|
|
105
|
+
sessionTerminalMap.delete(sid);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
warning = `Terminal limit (${MAX_TERMINALS}) reached — stopped oldest terminal ${oldest.id}`;
|
|
110
|
+
console.log(`[terminal] ${warning}`);
|
|
111
|
+
}
|
|
112
|
+
// 4. Create a new terminal
|
|
113
|
+
const terminalId = `term-${uuidv7()}`;
|
|
114
|
+
const surface = (await registry.startSurface("terminal", terminalId, {
|
|
115
|
+
sessionId: context.sessionId,
|
|
116
|
+
workspaceRoot: context.workspaceRoot,
|
|
117
|
+
}));
|
|
118
|
+
sessionTerminalMap.set(context.sessionId, terminalId);
|
|
119
|
+
// Wait for shell integration to signal prompt-ready (OSC 633;B)
|
|
120
|
+
await surface.waitForPrompt();
|
|
121
|
+
return { surface, terminalId, isNew: true, warning };
|
|
122
|
+
}
|
|
123
|
+
// ── OSC 633 command execution ────────────────────────────────────
|
|
124
|
+
/**
|
|
125
|
+
* Parse OSC 633 sequences from raw PTY data.
|
|
126
|
+
*
|
|
127
|
+
* The shell integration scripts emit:
|
|
128
|
+
* \x1b]633;C\x07 — command execution started
|
|
129
|
+
* \x1b]633;D;{exit}\x07 — command finished, exit code
|
|
130
|
+
* \x1b]633;B\x07 — prompt ready (after D)
|
|
131
|
+
*
|
|
132
|
+
* We listen for D (command done + exit code) to know the command
|
|
133
|
+
* finished, and capture all output between C and D.
|
|
134
|
+
*/
|
|
135
|
+
// Regex for OSC 633;D;{exitCode} — terminated by BEL (\x07) or ST (\x1b\\)
|
|
136
|
+
// Exit code can be empty (null $LASTEXITCODE), a number, or negative
|
|
137
|
+
const OSC_DONE_RE = /\x1b\]633;D;(-?\d*)(?:\x07|\x1b\\)/;
|
|
138
|
+
// Regex for OSC 633;B — prompt end (command-line ready).
|
|
139
|
+
// B is always the LAST marker in the prompt sequence (D → P → A → prompt → B),
|
|
140
|
+
// but PowerShell's formatting pipeline can flush output *after* B arrives in
|
|
141
|
+
// the PTY. We use a short settle timer after D+B to capture late output.
|
|
142
|
+
const OSC_PROMPT_END_RE = /\x1b\]633;B(?:\x07|\x1b\\)/;
|
|
143
|
+
/**
|
|
144
|
+
* Send a command into a persistent terminal and capture its output + exit
|
|
145
|
+
* code using OSC 633 shell integration sequences.
|
|
146
|
+
*
|
|
147
|
+
* The command is sent **unmodified** — no wrapping, no temp files, no
|
|
148
|
+
* escaping. The shell's prompt hook emits OSC 633;D with the exit code
|
|
149
|
+
* when the command completes.
|
|
150
|
+
*
|
|
151
|
+
* Completion is gated on **both** D (exit code) and B (prompt-end), followed
|
|
152
|
+
* by a short settle period. B is the last marker in the prompt sequence, but
|
|
153
|
+
* PowerShell's formatting pipeline can flush command output *after* D+B arrive.
|
|
154
|
+
* A 50 ms settle timer captures this late output without arbitrary long waits.
|
|
155
|
+
*
|
|
156
|
+
* Multi-line commands are written to a temp .ps1 file and dot-sourced so
|
|
157
|
+
* they execute atomically in the current scope — PSReadLine otherwise
|
|
158
|
+
* treats each \n as a separate Enter keystroke, garbling execution order.
|
|
159
|
+
*/
|
|
160
|
+
function executeInTerminal(surface, command, timeoutMs, onChunk, signal) {
|
|
161
|
+
return new Promise((resolve) => {
|
|
162
|
+
let raw = "";
|
|
163
|
+
let settled = false;
|
|
164
|
+
// Cached D-marker result so we only scan for it once
|
|
165
|
+
let dMatch = null;
|
|
166
|
+
// Settle timer: after D+B is detected, wait briefly for any late
|
|
167
|
+
// output from PowerShell's deferred formatting pipeline before
|
|
168
|
+
// calling finish(). Each new PTY chunk resets the timer.
|
|
169
|
+
let settleTimer = null;
|
|
170
|
+
const listener = (data) => {
|
|
171
|
+
raw += data;
|
|
172
|
+
// Stream cleaned output to the frontend (strip OSC 633 / ANSI / BEL
|
|
173
|
+
// to avoid system beeps and rendering issues in the browser)
|
|
174
|
+
if (onChunk) {
|
|
175
|
+
const clean = cleanChunk(data);
|
|
176
|
+
if (clean)
|
|
177
|
+
onChunk(clean);
|
|
178
|
+
}
|
|
179
|
+
if (settled)
|
|
180
|
+
return;
|
|
181
|
+
// If we're in the settling phase (D+B already detected), reset
|
|
182
|
+
// the timer — more data just arrived that we want to capture.
|
|
183
|
+
if (settleTimer) {
|
|
184
|
+
clearTimeout(settleTimer);
|
|
185
|
+
settleTimer = setTimeout(() => finish(false, dMatch.exitCode), 50);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Step 1: Find D marker (command done — provides exit code)
|
|
189
|
+
if (!dMatch) {
|
|
190
|
+
const m = raw.match(OSC_DONE_RE);
|
|
191
|
+
if (m) {
|
|
192
|
+
dMatch = {
|
|
193
|
+
exitCode: m[1] ? parseInt(m[1], 10) : 0,
|
|
194
|
+
end: m.index + m[0].length,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Step 2: After D, wait for B (prompt-end). Don't finish
|
|
199
|
+
// immediately — PowerShell can flush command output *after* the
|
|
200
|
+
// prompt markers. Start a settle timer: if no more data arrives
|
|
201
|
+
// within 50 ms the output is considered complete.
|
|
202
|
+
if (dMatch && OSC_PROMPT_END_RE.test(raw.slice(dMatch.end))) {
|
|
203
|
+
settleTimer = setTimeout(() => finish(false, dMatch.exitCode), 50);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const finish = (timedOut, exitCode = null) => {
|
|
207
|
+
if (settled)
|
|
208
|
+
return;
|
|
209
|
+
settled = true;
|
|
210
|
+
clearTimeout(timer);
|
|
211
|
+
if (settleTimer)
|
|
212
|
+
clearTimeout(settleTimer);
|
|
213
|
+
signal?.removeEventListener("abort", onAbort);
|
|
214
|
+
surface.removeOutputListener(listener);
|
|
215
|
+
// Clean up temp script file
|
|
216
|
+
if (tmpFile) {
|
|
217
|
+
try {
|
|
218
|
+
unlinkSync(tmpFile);
|
|
219
|
+
}
|
|
220
|
+
catch { /* already gone */ }
|
|
221
|
+
}
|
|
222
|
+
// Strip all OSC 633 sequences (A, B, C, D, E, P) — they are invisible
|
|
223
|
+
// control codes, so removing them leaves only visible text in order:
|
|
224
|
+
// echoed command → command output → prompt text
|
|
225
|
+
let output = raw.replace(/\x1b\]633;[A-Z][^\x07]*(?:\x07|\x1b\\)/g, "");
|
|
226
|
+
// Strip ANSI and clean up
|
|
227
|
+
output = stripAnsi(output).replace(/\r/g, "");
|
|
228
|
+
// Split into lines for targeted cleanup
|
|
229
|
+
const lines = output.split("\n");
|
|
230
|
+
// Remove the echoed command. For single-line commands PSReadLine
|
|
231
|
+
// echoes the command text. For multi-line (dot-sourced via temp
|
|
232
|
+
// file) it echoes the `. 'path'` invocation instead.
|
|
233
|
+
if (tmpFile) {
|
|
234
|
+
// Remove the dot-source line echo
|
|
235
|
+
if (lines.length > 0 && lines[0].includes(tmpFile.replace(/\\/g, "\\\\"))) {
|
|
236
|
+
lines.shift();
|
|
237
|
+
}
|
|
238
|
+
else if (lines.length > 0 && (lines[0].trim().startsWith(". '") || lines[0].trim().startsWith("."))) {
|
|
239
|
+
lines.shift();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const cmdLines = command.trim().split("\n").map((l) => l.trim());
|
|
244
|
+
while (lines.length > 0 && cmdLines.length > 0) {
|
|
245
|
+
const head = lines[0].trim();
|
|
246
|
+
const cmdHead = cmdLines[0];
|
|
247
|
+
if (head === cmdHead || head.endsWith(cmdHead) || cmdHead.startsWith(head)) {
|
|
248
|
+
lines.shift();
|
|
249
|
+
cmdLines.shift();
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Remove trailing empty lines
|
|
257
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
|
|
258
|
+
lines.pop();
|
|
259
|
+
}
|
|
260
|
+
// Remove the prompt line at the end (e.g. "PS E:\path> ")
|
|
261
|
+
if (lines.length > 0) {
|
|
262
|
+
const lastLine = lines[lines.length - 1].trim();
|
|
263
|
+
if (/^PS .+?>/.test(lastLine)) {
|
|
264
|
+
lines.pop();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
output = lines.join("\n").trim();
|
|
268
|
+
if (output.length > 200_000) {
|
|
269
|
+
output = "…(truncated)\n" + output.slice(-200_000);
|
|
270
|
+
}
|
|
271
|
+
resolve({ output: output || "(no output)", exitCode, timedOut });
|
|
272
|
+
};
|
|
273
|
+
// Listen BEFORE writing so we don't miss fast output
|
|
274
|
+
surface.addOutputListener(listener);
|
|
275
|
+
const timer = setTimeout(() => {
|
|
276
|
+
// Interrupt the running command + Enter for clean prompt
|
|
277
|
+
surface.write("\x03\r");
|
|
278
|
+
setTimeout(() => finish(true), 500);
|
|
279
|
+
}, timeoutMs);
|
|
280
|
+
const onAbort = () => {
|
|
281
|
+
surface.write("\x03");
|
|
282
|
+
setTimeout(() => finish(false, null), 500);
|
|
283
|
+
};
|
|
284
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
285
|
+
// For multi-line commands, write to a temp .ps1 file and dot-source it.
|
|
286
|
+
// PSReadLine treats each \n as a separate Enter keystroke — bracketed
|
|
287
|
+
// paste mode is unreliable across PSReadLine versions. Dot-sourcing
|
|
288
|
+
// runs the script in the current scope (variables persist) and
|
|
289
|
+
// guarantees atomic execution. Cleanup happens in finish().
|
|
290
|
+
let tmpFile = null;
|
|
291
|
+
if (command.includes("\n")) {
|
|
292
|
+
const dir = join(tmpdir(), "jait-terminal");
|
|
293
|
+
mkdirSync(dir, { recursive: true });
|
|
294
|
+
tmpFile = join(dir, `cmd-${Date.now()}.ps1`);
|
|
295
|
+
writeFileSync(tmpFile, command, "utf-8");
|
|
296
|
+
surface.write(`. '${tmpFile.replace(/'/g, "''")}'\r`);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
surface.write(command + "\r");
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
export function createTerminalRunTool(registry, sandboxManager = new SandboxManager(), ws) {
|
|
304
|
+
return {
|
|
305
|
+
name: "terminal.run",
|
|
306
|
+
description: "Execute a shell command in a persistent terminal (visible to the user) and return the output. " +
|
|
307
|
+
"The terminal stays alive between calls — like VS Code's integrated terminal. " +
|
|
308
|
+
"Multi-line scripts, pipes, and complex syntax all work unchanged.",
|
|
309
|
+
tier: "core",
|
|
310
|
+
category: "terminal",
|
|
311
|
+
source: "builtin",
|
|
312
|
+
parameters: {
|
|
313
|
+
type: "object",
|
|
314
|
+
properties: {
|
|
315
|
+
command: { type: "string", description: "The shell command to execute" },
|
|
316
|
+
terminalId: { type: "string", description: "Reuse a specific terminal (omit to auto-select or create)" },
|
|
317
|
+
timeout: { type: "number", description: "Execution timeout in ms (default 30000)" },
|
|
318
|
+
sandbox: { type: "boolean", description: "Run inside Docker sandbox container" },
|
|
319
|
+
sandboxMountMode: { type: "string", description: "Sandbox mount mode: none, read-only, read-write" },
|
|
320
|
+
},
|
|
321
|
+
required: ["command"],
|
|
322
|
+
},
|
|
323
|
+
async execute(input, context) {
|
|
324
|
+
const { command, timeout = 30000, terminalId: preferredId } = input;
|
|
325
|
+
if (input.sandbox) {
|
|
326
|
+
const result = await sandboxManager.runCommand({
|
|
327
|
+
command,
|
|
328
|
+
workspaceRoot: context.workspaceRoot,
|
|
329
|
+
timeoutMs: timeout,
|
|
330
|
+
mountMode: input.sandboxMountMode ?? "read-write",
|
|
331
|
+
networkEnabled: false,
|
|
332
|
+
memoryLimitMb: 512,
|
|
333
|
+
cpuLimit: "1.0",
|
|
334
|
+
});
|
|
335
|
+
return {
|
|
336
|
+
ok: result.ok,
|
|
337
|
+
message: result.ok
|
|
338
|
+
? "Sandbox command completed (container isolated)"
|
|
339
|
+
: result.timedOut
|
|
340
|
+
? `Sandbox command timed out after ${timeout}ms`
|
|
341
|
+
: `Sandbox command failed (exit code ${result.exitCode ?? "unknown"})`,
|
|
342
|
+
data: {
|
|
343
|
+
output: result.output,
|
|
344
|
+
exitCode: result.exitCode,
|
|
345
|
+
timedOut: result.timedOut,
|
|
346
|
+
sandbox: true,
|
|
347
|
+
containerName: result.containerName,
|
|
348
|
+
hostUnaffected: true,
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if (context.signal?.aborted) {
|
|
353
|
+
return { ok: false, message: "Cancelled" };
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
// 1. Get or create a persistent terminal
|
|
357
|
+
const { surface, terminalId, isNew, warning } = await ensureSessionTerminal(registry, context, preferredId);
|
|
358
|
+
// 2. Execute the command (sentinel-based)
|
|
359
|
+
const execPromise = executeInTerminal(surface, command, timeout, context.onOutputChunk, context.signal);
|
|
360
|
+
const result = context.signal
|
|
361
|
+
? await raceAbort(execPromise, context.signal)
|
|
362
|
+
: await execPromise;
|
|
363
|
+
// 3. Build response
|
|
364
|
+
const ok = !result.timedOut && result.exitCode === 0;
|
|
365
|
+
const needsInteraction = result.timedOut && detectInteractivePrompt(result.output);
|
|
366
|
+
const reason = result.timedOut
|
|
367
|
+
? `timed out after ${timeout}ms`
|
|
368
|
+
: result.exitCode == null
|
|
369
|
+
? "exit status unavailable"
|
|
370
|
+
: `exit code ${result.exitCode}`;
|
|
371
|
+
let message = ok ? "Command completed (exit code 0)" : `Command failed (${reason})`;
|
|
372
|
+
if (needsInteraction) {
|
|
373
|
+
message += " [user interaction required in terminal]";
|
|
374
|
+
}
|
|
375
|
+
if (isNew)
|
|
376
|
+
message += ` [new terminal ${terminalId}]`;
|
|
377
|
+
if (warning)
|
|
378
|
+
message += ` [${warning}]`;
|
|
379
|
+
if (needsInteraction) {
|
|
380
|
+
ws?.sendUICommand({
|
|
381
|
+
command: "terminal.focus",
|
|
382
|
+
data: {
|
|
383
|
+
terminalId,
|
|
384
|
+
reason: "interactive-input-required",
|
|
385
|
+
message: "This command is waiting for input in the terminal (for example a sudo password).",
|
|
386
|
+
},
|
|
387
|
+
}, context.sessionId);
|
|
388
|
+
}
|
|
389
|
+
console.log(`[terminal.run] ${message}; output (${result.output.length} chars): ${JSON.stringify(result.output.slice(0, 500))}`);
|
|
390
|
+
return {
|
|
391
|
+
ok,
|
|
392
|
+
message,
|
|
393
|
+
data: {
|
|
394
|
+
output: result.output,
|
|
395
|
+
exitCode: result.exitCode,
|
|
396
|
+
timedOut: result.timedOut,
|
|
397
|
+
terminalId,
|
|
398
|
+
needsInteraction,
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
if (context.signal?.aborted)
|
|
404
|
+
return { ok: false, message: "Cancelled" };
|
|
405
|
+
return {
|
|
406
|
+
ok: false,
|
|
407
|
+
message: err instanceof Error ? err.message : "Command failed",
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
export function createTerminalStreamTool(registry) {
|
|
414
|
+
return {
|
|
415
|
+
name: "terminal.stream",
|
|
416
|
+
description: "Start a new streaming terminal session (output sent via WebSocket). Use when you need an interactive terminal.",
|
|
417
|
+
tier: "standard",
|
|
418
|
+
category: "terminal",
|
|
419
|
+
source: "builtin",
|
|
420
|
+
parameters: {
|
|
421
|
+
type: "object",
|
|
422
|
+
properties: {
|
|
423
|
+
sessionId: { type: "string", description: "Session to attach the terminal to" },
|
|
424
|
+
workspaceRoot: { type: "string", description: "Working directory for the terminal" },
|
|
425
|
+
cols: { type: "number", description: "Terminal width in columns" },
|
|
426
|
+
rows: { type: "number", description: "Terminal height in rows" },
|
|
427
|
+
},
|
|
428
|
+
required: ["sessionId"],
|
|
429
|
+
},
|
|
430
|
+
async execute(input, context) {
|
|
431
|
+
const termId = `term-${uuidv7()}`;
|
|
432
|
+
const workspaceRoot = input.workspaceRoot ?? context.workspaceRoot;
|
|
433
|
+
const surface = await registry.startSurface("terminal", termId, {
|
|
434
|
+
sessionId: input.sessionId || context.sessionId,
|
|
435
|
+
workspaceRoot,
|
|
436
|
+
});
|
|
437
|
+
return {
|
|
438
|
+
ok: true,
|
|
439
|
+
message: `Terminal started: ${termId}`,
|
|
440
|
+
data: {
|
|
441
|
+
terminalId: termId,
|
|
442
|
+
...surface.snapshot(),
|
|
443
|
+
},
|
|
444
|
+
};
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=terminal-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-tools.js","sourceRoot":"","sources":["../../src/tools/terminal-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ProviderId } from "../providers/contracts.js";
|
|
2
|
+
import type { ProviderRegistry } from "../providers/registry.js";
|
|
3
|
+
import { type GitStackedAction, type GitStepResult } from "../services/git.js";
|
|
4
|
+
import type { ThreadService } from "../services/threads.js";
|
|
5
|
+
import type { WsControlPlane } from "../ws.js";
|
|
6
|
+
import type { ToolDefinition } from "./contracts.js";
|
|
7
|
+
interface ThreadControlInput {
|
|
8
|
+
action: "list" | "get" | "create" | "create_many" | "update" | "delete" | "start" | "send" | "stop" | "interrupt" | "approve" | "activities" | "create_pr";
|
|
9
|
+
threadId?: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
providerId?: ProviderId;
|
|
13
|
+
model?: string;
|
|
14
|
+
runtimeMode?: "full-access" | "supervised";
|
|
15
|
+
workingDirectory?: string;
|
|
16
|
+
branch?: string;
|
|
17
|
+
message?: string;
|
|
18
|
+
attachments?: string[];
|
|
19
|
+
start?: boolean;
|
|
20
|
+
threads?: ThreadCreateSpec[];
|
|
21
|
+
requestId?: string;
|
|
22
|
+
approved?: boolean;
|
|
23
|
+
limit?: number;
|
|
24
|
+
prUrl?: string | null;
|
|
25
|
+
prNumber?: number | null;
|
|
26
|
+
prTitle?: string | null;
|
|
27
|
+
prState?: "open" | "closed" | "merged" | null;
|
|
28
|
+
cwd?: string;
|
|
29
|
+
gitAction?: GitStackedAction;
|
|
30
|
+
commitMessage?: string;
|
|
31
|
+
baseBranch?: string;
|
|
32
|
+
featureBranch?: boolean;
|
|
33
|
+
}
|
|
34
|
+
interface ThreadCreateSpec {
|
|
35
|
+
title: string;
|
|
36
|
+
providerId?: ProviderId;
|
|
37
|
+
model?: string;
|
|
38
|
+
runtimeMode?: "full-access" | "supervised";
|
|
39
|
+
workingDirectory?: string;
|
|
40
|
+
branch?: string;
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
start?: boolean;
|
|
43
|
+
message?: string;
|
|
44
|
+
attachments?: string[];
|
|
45
|
+
}
|
|
46
|
+
interface ThreadControlGit {
|
|
47
|
+
runStackedAction(cwd: string, action: GitStackedAction, commitMessage?: string, featureBranch?: boolean, baseBranch?: string, githubToken?: string): Promise<GitStepResult>;
|
|
48
|
+
}
|
|
49
|
+
export interface ThreadControlToolDeps {
|
|
50
|
+
threadService: ThreadService;
|
|
51
|
+
providerRegistry: ProviderRegistry;
|
|
52
|
+
ws?: WsControlPlane;
|
|
53
|
+
mcpConfig?: {
|
|
54
|
+
host: string;
|
|
55
|
+
port: number;
|
|
56
|
+
};
|
|
57
|
+
gitService?: ThreadControlGit;
|
|
58
|
+
}
|
|
59
|
+
export declare function createThreadControlTool(deps: ThreadControlToolDeps): ToolDefinition<ThreadControlInput>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=thread-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-tools.d.ts","sourceRoot":"","sources":["../../src/tools/thread-tools.ts"],"names":[],"mappings":"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"}
|