@chances-ai/engine 24.0.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/dist/agents/discover.d.ts +30 -0
- package/dist/agents/discover.d.ts.map +1 -0
- package/dist/agents/discover.js +183 -0
- package/dist/agents/discover.js.map +1 -0
- package/dist/agents/index.d.ts +20 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +52 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/parse.d.ts +61 -0
- package/dist/agents/parse.d.ts.map +1 -0
- package/dist/agents/parse.js +527 -0
- package/dist/agents/parse.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +8 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.js +125 -0
- package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
- package/dist/ai/adapters/ai-sdk.d.ts +56 -0
- package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk.js +112 -0
- package/dist/ai/adapters/ai-sdk.js.map +1 -0
- package/dist/ai/adapters/mock.d.ts +13 -0
- package/dist/ai/adapters/mock.d.ts.map +1 -0
- package/dist/ai/adapters/mock.js +54 -0
- package/dist/ai/adapters/mock.js.map +1 -0
- package/dist/ai/adapters/openai-compatible.d.ts +23 -0
- package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
- package/dist/ai/adapters/openai-compatible.js +45 -0
- package/dist/ai/adapters/openai-compatible.js.map +1 -0
- package/dist/ai/cost.d.ts +3 -0
- package/dist/ai/cost.d.ts.map +1 -0
- package/dist/ai/cost.js +5 -0
- package/dist/ai/cost.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +11 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/known-models.d.ts +20 -0
- package/dist/ai/known-models.d.ts.map +1 -0
- package/dist/ai/known-models.js +129 -0
- package/dist/ai/known-models.js.map +1 -0
- package/dist/ai/registry.d.ts +12 -0
- package/dist/ai/registry.d.ts.map +1 -0
- package/dist/ai/registry.js +24 -0
- package/dist/ai/registry.js.map +1 -0
- package/dist/ai/retry.d.ts +11 -0
- package/dist/ai/retry.d.ts.map +1 -0
- package/dist/ai/retry.js +14 -0
- package/dist/ai/retry.js.map +1 -0
- package/dist/ai/router.d.ts +25 -0
- package/dist/ai/router.d.ts.map +1 -0
- package/dist/ai/router.js +36 -0
- package/dist/ai/router.js.map +1 -0
- package/dist/ai/setup.d.ts +23 -0
- package/dist/ai/setup.d.ts.map +1 -0
- package/dist/ai/setup.js +47 -0
- package/dist/ai/setup.js.map +1 -0
- package/dist/ai/summarizer.d.ts +24 -0
- package/dist/ai/summarizer.d.ts.map +1 -0
- package/dist/ai/summarizer.js +56 -0
- package/dist/ai/summarizer.js.map +1 -0
- package/dist/ai/types.d.ts +83 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/core/compaction/circuit-breaker.d.ts +32 -0
- package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
- package/dist/core/compaction/circuit-breaker.js +42 -0
- package/dist/core/compaction/circuit-breaker.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +75 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -0
- package/dist/core/compaction/compactor.js +261 -0
- package/dist/core/compaction/compactor.js.map +1 -0
- package/dist/core/compaction/estimate.d.ts +39 -0
- package/dist/core/compaction/estimate.d.ts.map +1 -0
- package/dist/core/compaction/estimate.js +74 -0
- package/dist/core/compaction/estimate.js.map +1 -0
- package/dist/core/compaction/index.d.ts +5 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +5 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/prune.d.ts +43 -0
- package/dist/core/compaction/prune.d.ts.map +1 -0
- package/dist/core/compaction/prune.js +51 -0
- package/dist/core/compaction/prune.js.map +1 -0
- package/dist/core/engine.d.ts +268 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +767 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/task-tool.d.ts +175 -0
- package/dist/core/task-tool.d.ts.map +1 -0
- package/dist/core/task-tool.js +901 -0
- package/dist/core/task-tool.js.map +1 -0
- package/dist/core/workspace-query.d.ts +83 -0
- package/dist/core/workspace-query.d.ts.map +1 -0
- package/dist/core/workspace-query.js +217 -0
- package/dist/core/workspace-query.js.map +1 -0
- package/dist/core/worktree/active-marker.d.ts +31 -0
- package/dist/core/worktree/active-marker.d.ts.map +1 -0
- package/dist/core/worktree/active-marker.js +109 -0
- package/dist/core/worktree/active-marker.js.map +1 -0
- package/dist/core/worktree/create.d.ts +40 -0
- package/dist/core/worktree/create.d.ts.map +1 -0
- package/dist/core/worktree/create.js +121 -0
- package/dist/core/worktree/create.js.map +1 -0
- package/dist/core/worktree/errors.d.ts +7 -0
- package/dist/core/worktree/errors.d.ts.map +1 -0
- package/dist/core/worktree/errors.js +11 -0
- package/dist/core/worktree/errors.js.map +1 -0
- package/dist/core/worktree/gc.d.ts +39 -0
- package/dist/core/worktree/gc.d.ts.map +1 -0
- package/dist/core/worktree/gc.js +146 -0
- package/dist/core/worktree/gc.js.map +1 -0
- package/dist/core/worktree/git.d.ts +53 -0
- package/dist/core/worktree/git.d.ts.map +1 -0
- package/dist/core/worktree/git.js +166 -0
- package/dist/core/worktree/git.js.map +1 -0
- package/dist/core/worktree/index.d.ts +8 -0
- package/dist/core/worktree/index.d.ts.map +1 -0
- package/dist/core/worktree/index.js +8 -0
- package/dist/core/worktree/index.js.map +1 -0
- package/dist/core/worktree/paths.d.ts +26 -0
- package/dist/core/worktree/paths.d.ts.map +1 -0
- package/dist/core/worktree/paths.js +57 -0
- package/dist/core/worktree/paths.js.map +1 -0
- package/dist/core/worktree/slug.d.ts +6 -0
- package/dist/core/worktree/slug.d.ts.map +1 -0
- package/dist/core/worktree/slug.js +21 -0
- package/dist/core/worktree/slug.js.map +1 -0
- package/dist/local-vault/file-store.d.ts +64 -0
- package/dist/local-vault/file-store.d.ts.map +1 -0
- package/dist/local-vault/file-store.js +225 -0
- package/dist/local-vault/file-store.js.map +1 -0
- package/dist/local-vault/index.d.ts +57 -0
- package/dist/local-vault/index.d.ts.map +1 -0
- package/dist/local-vault/index.js +68 -0
- package/dist/local-vault/index.js.map +1 -0
- package/dist/local-vault/keychain.d.ts +58 -0
- package/dist/local-vault/keychain.d.ts.map +1 -0
- package/dist/local-vault/keychain.js +200 -0
- package/dist/local-vault/keychain.js.map +1 -0
- package/dist/local-vault/mutex.d.ts +20 -0
- package/dist/local-vault/mutex.d.ts.map +1 -0
- package/dist/local-vault/mutex.js +44 -0
- package/dist/local-vault/mutex.js.map +1 -0
- package/dist/local-vault/passphrase.d.ts +30 -0
- package/dist/local-vault/passphrase.d.ts.map +1 -0
- package/dist/local-vault/passphrase.js +72 -0
- package/dist/local-vault/passphrase.js.map +1 -0
- package/dist/lsp/config.d.ts +34 -0
- package/dist/lsp/config.d.ts.map +1 -0
- package/dist/lsp/config.js +68 -0
- package/dist/lsp/config.js.map +1 -0
- package/dist/lsp/detect.d.ts +7 -0
- package/dist/lsp/detect.d.ts.map +1 -0
- package/dist/lsp/detect.js +78 -0
- package/dist/lsp/detect.js.map +1 -0
- package/dist/lsp/errors.d.ts +11 -0
- package/dist/lsp/errors.d.ts.map +1 -0
- package/dist/lsp/errors.js +11 -0
- package/dist/lsp/errors.js.map +1 -0
- package/dist/lsp/formatters.d.ts +147 -0
- package/dist/lsp/formatters.d.ts.map +1 -0
- package/dist/lsp/formatters.js +259 -0
- package/dist/lsp/formatters.js.map +1 -0
- package/dist/lsp/index.d.ts +31 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +31 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/instance.d.ts +72 -0
- package/dist/lsp/instance.d.ts.map +1 -0
- package/dist/lsp/instance.js +489 -0
- package/dist/lsp/instance.js.map +1 -0
- package/dist/lsp/lazy-load.d.ts +27 -0
- package/dist/lsp/lazy-load.d.ts.map +1 -0
- package/dist/lsp/lazy-load.js +57 -0
- package/dist/lsp/lazy-load.js.map +1 -0
- package/dist/lsp/manager.d.ts +59 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +242 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/ops.d.ts +13 -0
- package/dist/lsp/ops.d.ts.map +1 -0
- package/dist/lsp/ops.js +225 -0
- package/dist/lsp/ops.js.map +1 -0
- package/dist/lsp/rpc.d.ts +47 -0
- package/dist/lsp/rpc.d.ts.map +1 -0
- package/dist/lsp/rpc.js +134 -0
- package/dist/lsp/rpc.js.map +1 -0
- package/dist/lsp/safe-uri.d.ts +18 -0
- package/dist/lsp/safe-uri.d.ts.map +1 -0
- package/dist/lsp/safe-uri.js +96 -0
- package/dist/lsp/safe-uri.js.map +1 -0
- package/dist/lsp/types.d.ts +70 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +16 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/mcp/bridge.d.ts +57 -0
- package/dist/mcp/bridge.d.ts.map +1 -0
- package/dist/mcp/bridge.js +98 -0
- package/dist/mcp/bridge.js.map +1 -0
- package/dist/mcp/category.d.ts +22 -0
- package/dist/mcp/category.d.ts.map +1 -0
- package/dist/mcp/category.js +11 -0
- package/dist/mcp/category.js.map +1 -0
- package/dist/mcp/client.d.ts +228 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +352 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/content.d.ts +86 -0
- package/dist/mcp/content.d.ts.map +1 -0
- package/dist/mcp/content.js +147 -0
- package/dist/mcp/content.js.map +1 -0
- package/dist/mcp/env.d.ts +19 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +50 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/host.d.ts +199 -0
- package/dist/mcp/host.d.ts.map +1 -0
- package/dist/mcp/host.js +530 -0
- package/dist/mcp/host.js.map +1 -0
- package/dist/mcp/index.d.ts +18 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/load-mcp-host.d.ts +32 -0
- package/dist/mcp/load-mcp-host.d.ts.map +1 -0
- package/dist/mcp/load-mcp-host.js +49 -0
- package/dist/mcp/load-mcp-host.js.map +1 -0
- package/dist/mcp/oauth/callback-server.d.ts +73 -0
- package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
- package/dist/mcp/oauth/callback-server.js +280 -0
- package/dist/mcp/oauth/callback-server.js.map +1 -0
- package/dist/mcp/oauth/config-hash.d.ts +24 -0
- package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
- package/dist/mcp/oauth/config-hash.js +55 -0
- package/dist/mcp/oauth/config-hash.js.map +1 -0
- package/dist/mcp/oauth/error-normalize.d.ts +39 -0
- package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
- package/dist/mcp/oauth/error-normalize.js +91 -0
- package/dist/mcp/oauth/error-normalize.js.map +1 -0
- package/dist/mcp/oauth/provider.d.ts +190 -0
- package/dist/mcp/oauth/provider.d.ts.map +1 -0
- package/dist/mcp/oauth/provider.js +305 -0
- package/dist/mcp/oauth/provider.js.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.js +77 -0
- package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.js +21 -0
- package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
- package/dist/mcp/parse.d.ts +28 -0
- package/dist/mcp/parse.d.ts.map +1 -0
- package/dist/mcp/parse.js +209 -0
- package/dist/mcp/parse.js.map +1 -0
- package/dist/mcp/prompts.d.ts +31 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +71 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/redact.d.ts +62 -0
- package/dist/mcp/redact.d.ts.map +1 -0
- package/dist/mcp/redact.js +87 -0
- package/dist/mcp/redact.js.map +1 -0
- package/dist/mcp/resources.d.ts +70 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +170 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/types.d.ts +123 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/frontmatter.d.ts +18 -0
- package/dist/memory/frontmatter.d.ts.map +1 -0
- package/dist/memory/frontmatter.js +81 -0
- package/dist/memory/frontmatter.js.map +1 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/store.d.ts +44 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +237 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/tools.d.ts +11 -0
- package/dist/memory/tools.d.ts.map +1 -0
- package/dist/memory/tools.js +159 -0
- package/dist/memory/tools.js.map +1 -0
- package/dist/memory/types.d.ts +32 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +20 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/plugin-api/index.d.ts +167 -0
- package/dist/plugin-api/index.d.ts.map +1 -0
- package/dist/plugin-api/index.js +151 -0
- package/dist/plugin-api/index.js.map +1 -0
- package/dist/plugin-logger/index.d.ts +21 -0
- package/dist/plugin-logger/index.d.ts.map +1 -0
- package/dist/plugin-logger/index.js +59 -0
- package/dist/plugin-logger/index.js.map +1 -0
- package/dist/session/index.d.ts +125 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +202 -0
- package/dist/session/index.js.map +1 -0
- package/dist/tools/approval.d.ts +33 -0
- package/dist/tools/approval.d.ts.map +1 -0
- package/dist/tools/approval.js +53 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/builtins/_shared.d.ts +94 -0
- package/dist/tools/builtins/_shared.d.ts.map +1 -0
- package/dist/tools/builtins/_shared.js +246 -0
- package/dist/tools/builtins/_shared.js.map +1 -0
- package/dist/tools/builtins/ask-user-question.d.ts +27 -0
- package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
- package/dist/tools/builtins/ask-user-question.js +191 -0
- package/dist/tools/builtins/ask-user-question.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts +3 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -0
- package/dist/tools/builtins/bash.js +158 -0
- package/dist/tools/builtins/bash.js.map +1 -0
- package/dist/tools/builtins/diff.d.ts +3 -0
- package/dist/tools/builtins/diff.d.ts.map +1 -0
- package/dist/tools/builtins/diff.js +83 -0
- package/dist/tools/builtins/diff.js.map +1 -0
- package/dist/tools/builtins/edit.d.ts +3 -0
- package/dist/tools/builtins/edit.d.ts.map +1 -0
- package/dist/tools/builtins/edit.js +40 -0
- package/dist/tools/builtins/edit.js.map +1 -0
- package/dist/tools/builtins/glob.d.ts +3 -0
- package/dist/tools/builtins/glob.d.ts.map +1 -0
- package/dist/tools/builtins/glob.js +37 -0
- package/dist/tools/builtins/glob.js.map +1 -0
- package/dist/tools/builtins/grep.d.ts +3 -0
- package/dist/tools/builtins/grep.d.ts.map +1 -0
- package/dist/tools/builtins/grep.js +81 -0
- package/dist/tools/builtins/grep.js.map +1 -0
- package/dist/tools/builtins/lsp.d.ts +3 -0
- package/dist/tools/builtins/lsp.d.ts.map +1 -0
- package/dist/tools/builtins/lsp.js +102 -0
- package/dist/tools/builtins/lsp.js.map +1 -0
- package/dist/tools/builtins/pty.d.ts +64 -0
- package/dist/tools/builtins/pty.d.ts.map +1 -0
- package/dist/tools/builtins/pty.js +536 -0
- package/dist/tools/builtins/pty.js.map +1 -0
- package/dist/tools/builtins/read.d.ts +3 -0
- package/dist/tools/builtins/read.d.ts.map +1 -0
- package/dist/tools/builtins/read.js +18 -0
- package/dist/tools/builtins/read.js.map +1 -0
- package/dist/tools/builtins/web-fetch.d.ts +4 -0
- package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
- package/dist/tools/builtins/web-fetch.js +353 -0
- package/dist/tools/builtins/web-fetch.js.map +1 -0
- package/dist/tools/builtins/write.d.ts +3 -0
- package/dist/tools/builtins/write.d.ts.map +1 -0
- package/dist/tools/builtins/write.js +48 -0
- package/dist/tools/builtins/write.js.map +1 -0
- package/dist/tools/builtins.d.ts +9 -0
- package/dist/tools/builtins.d.ts.map +1 -0
- package/dist/tools/builtins.js +29 -0
- package/dist/tools/builtins.js.map +1 -0
- package/dist/tools/diff.d.ts +18 -0
- package/dist/tools/diff.d.ts.map +1 -0
- package/dist/tools/diff.js +57 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/permission.d.ts +120 -0
- package/dist/tools/permission.d.ts.map +1 -0
- package/dist/tools/permission.js +208 -0
- package/dist/tools/permission.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +19 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +244 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +15 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (5.1) `pty` — interactive bidirectional PTY tool.
|
|
3
|
+
*
|
|
4
|
+
* Op-enum surface (mirrors 4.2 LSP pattern):
|
|
5
|
+
* start | write | read | resize | kill | interrupt | adopt | list
|
|
6
|
+
*
|
|
7
|
+
* Per-op permission via `Tool.permission(args, ctx)` hook (5.1 API
|
|
8
|
+
* surface change). Each op returns either:
|
|
9
|
+
* - a `PermissionRequest` with a per-op `cacheKey` (`start` re-prompts
|
|
10
|
+
* per `(command, cwd, shell, env)`; `kill` per `(session_id, signal)`;
|
|
11
|
+
* `write` per `(session_id, sha256(line))` for command-class input,
|
|
12
|
+
* etc.), or
|
|
13
|
+
* - `null` to bypass the gate entirely (`read`, `resize`, `list`).
|
|
14
|
+
*
|
|
15
|
+
* Codex Round-1 MUST-FIX #3 — `write` containing `\n`/`\r`/control bytes
|
|
16
|
+
* is "command-class" input that executes a line in the underlying
|
|
17
|
+
* shell/REPL; re-prompt required.
|
|
18
|
+
*
|
|
19
|
+
* Codex Round-1 MUST-FIX #7 — `start` permission summary includes
|
|
20
|
+
* resolved `cwd`, allowlisted `shell` (or rejected with `PTY_BAD_SHELL`),
|
|
21
|
+
* and non-default env keys (values redacted past 8 chars).
|
|
22
|
+
*
|
|
23
|
+
* Codex Round-1 Q4/Q7 — shell allowlist + dedicated `interrupt` op
|
|
24
|
+
* (separate gate from `kill`).
|
|
25
|
+
*/
|
|
26
|
+
import { createHash } from "node:crypto";
|
|
27
|
+
import { basename, isAbsolute } from "node:path";
|
|
28
|
+
import { AppError, ErrorCode, createId } from "@chances-ai/runtime";
|
|
29
|
+
import { optNum, optStr, preview, str } from "./_shared.js";
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Shell allowlist
|
|
32
|
+
/** Built-in allowlist by basename. Matches the design D4 table verbatim.
|
|
33
|
+
* Codex Round-1 Q4 / MUST-FIX #7. */
|
|
34
|
+
const BUILTIN_SHELL_ALLOWLIST = new Set([
|
|
35
|
+
"sh",
|
|
36
|
+
"bash",
|
|
37
|
+
"zsh",
|
|
38
|
+
"fish",
|
|
39
|
+
"dash",
|
|
40
|
+
"cmd",
|
|
41
|
+
"cmd.exe",
|
|
42
|
+
"powershell",
|
|
43
|
+
"powershell.exe",
|
|
44
|
+
"pwsh",
|
|
45
|
+
"pwsh.exe",
|
|
46
|
+
]);
|
|
47
|
+
function isShellAllowed(shell, userExtra) {
|
|
48
|
+
// (5.1 codex Round-2 MUST-FIX #4) — reject relative-path forms
|
|
49
|
+
// outright. `./bash` or `subdir/bash` would otherwise pass the
|
|
50
|
+
// basename check, letting a model execute a workspace-resident
|
|
51
|
+
// binary disguised as `bash`. Accept ONLY:
|
|
52
|
+
// - a bare basename in the built-in allowlist (resolved through
|
|
53
|
+
// PATH by the shell spawn), OR
|
|
54
|
+
// - an absolute path explicitly allowlisted by the user.
|
|
55
|
+
const looksLikePath = shell.includes("/") || shell.includes("\\");
|
|
56
|
+
if (looksLikePath) {
|
|
57
|
+
if (!isAbsolute(shell))
|
|
58
|
+
return false;
|
|
59
|
+
return userExtra.includes(shell);
|
|
60
|
+
}
|
|
61
|
+
return BUILTIN_SHELL_ALLOWLIST.has(shell.toLowerCase());
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Per-op cache key helpers
|
|
65
|
+
function startCacheKey(command, cwd, shell, env) {
|
|
66
|
+
const sortedEnv = Object.keys(env).sort().map((k) => `${k}=${env[k]}`).join("\x00");
|
|
67
|
+
const h = createHash("sha256").update(`${command}\x01${cwd}\x01${shell}\x01${sortedEnv}`).digest("hex");
|
|
68
|
+
return `pty.start/${h.slice(0, 16)}`;
|
|
69
|
+
}
|
|
70
|
+
function writeExecCacheKey(sessionId, line) {
|
|
71
|
+
const h = createHash("sha256").update(line).digest("hex").slice(0, 8);
|
|
72
|
+
return `pty.write.exec/${sessionId}:${h}`;
|
|
73
|
+
}
|
|
74
|
+
function killCacheKey(sessionId, signal) {
|
|
75
|
+
return `pty.kill.${signal}/${sessionId}`;
|
|
76
|
+
}
|
|
77
|
+
function interruptCacheKey(sessionId) {
|
|
78
|
+
return `pty.interrupt/${sessionId}`;
|
|
79
|
+
}
|
|
80
|
+
function adoptCacheKey(sessionId) {
|
|
81
|
+
return `pty.adopt/${sessionId}`;
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// Safe-write classifier
|
|
85
|
+
/** "Safe-write" = short input AND no command-execution byte
|
|
86
|
+
* (`\n` / `\r` / C0 except `\t`/`\b`). Codex Round-1 MUST-FIX #3 /
|
|
87
|
+
* Q1 — newline-terminated input executes a line in the underlying
|
|
88
|
+
* shell/REPL and is treated as command-class, requiring re-prompt. */
|
|
89
|
+
function isSafeWrite(input) {
|
|
90
|
+
if (input.length > 256)
|
|
91
|
+
return false;
|
|
92
|
+
for (let i = 0; i < input.length; i++) {
|
|
93
|
+
const c = input.charCodeAt(i);
|
|
94
|
+
if (c === 0x0a || c === 0x0d)
|
|
95
|
+
return false; // \n or \r
|
|
96
|
+
if (c < 0x20 && c !== 0x09 && c !== 0x08)
|
|
97
|
+
return false; // C0 except tab/backspace
|
|
98
|
+
if (c === 0x7f)
|
|
99
|
+
return false; // DEL
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Permission summary helpers
|
|
105
|
+
function envDiff(env) {
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const [k, v] of Object.entries(env)) {
|
|
108
|
+
if (process.env[k] === v)
|
|
109
|
+
continue;
|
|
110
|
+
out.push({ key: k, redactedValue: redactValue(v) });
|
|
111
|
+
}
|
|
112
|
+
return out.sort((a, b) => a.key.localeCompare(b.key));
|
|
113
|
+
}
|
|
114
|
+
function redactValue(v) {
|
|
115
|
+
if (v.length <= 8)
|
|
116
|
+
return "***";
|
|
117
|
+
return `${v.slice(0, 4)}…${v.slice(-2)}`;
|
|
118
|
+
}
|
|
119
|
+
function startSummary(command, cwd, shell, env) {
|
|
120
|
+
const cmdHead = command.length > 80 ? command.slice(0, 80) + "…" : command;
|
|
121
|
+
const envParts = envDiff(env);
|
|
122
|
+
const lines = [`pty start: ${cmdHead}`, ` cwd: ${cwd}`, ` shell: ${shell}`];
|
|
123
|
+
if (envParts.length > 0) {
|
|
124
|
+
const envFormatted = envParts.map((e) => `${e.key}=${e.redactedValue}`).join(", ");
|
|
125
|
+
lines.push(` env: ${envFormatted}`);
|
|
126
|
+
}
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
}
|
|
129
|
+
function writeSummary(sessionInfo, input) {
|
|
130
|
+
const head = sessionInfo?.command ?? "<unknown session>";
|
|
131
|
+
return `pty write to ${head}: ${preview(input)}`;
|
|
132
|
+
}
|
|
133
|
+
function killSummary(sessionInfo, signal) {
|
|
134
|
+
const head = sessionInfo?.command ?? "<unknown session>";
|
|
135
|
+
return `pty kill ${signal}: ${head}`;
|
|
136
|
+
}
|
|
137
|
+
function interruptSummary(sessionInfo) {
|
|
138
|
+
const head = sessionInfo?.command ?? "<unknown session>";
|
|
139
|
+
return `pty interrupt (SIGINT): ${head}`;
|
|
140
|
+
}
|
|
141
|
+
function adoptSummary(sessionInfo) {
|
|
142
|
+
const head = sessionInfo?.command ?? "<unknown session>";
|
|
143
|
+
return `pty adopt subagent session: ${head}`;
|
|
144
|
+
}
|
|
145
|
+
const VALID_OPS = new Set([
|
|
146
|
+
"start",
|
|
147
|
+
"write",
|
|
148
|
+
"read",
|
|
149
|
+
"resize",
|
|
150
|
+
"kill",
|
|
151
|
+
"interrupt",
|
|
152
|
+
"adopt",
|
|
153
|
+
"list",
|
|
154
|
+
]);
|
|
155
|
+
function parseOp(args) {
|
|
156
|
+
if (!args || typeof args !== "object" || Array.isArray(args)) {
|
|
157
|
+
throw new AppError(ErrorCode.Tool, "pty: expected an object with an `op` field");
|
|
158
|
+
}
|
|
159
|
+
const rec = args;
|
|
160
|
+
const op = rec.op;
|
|
161
|
+
if (typeof op !== "string" || !VALID_OPS.has(op)) {
|
|
162
|
+
throw new AppError(ErrorCode.Tool, `pty: unknown op '${String(op)}'. Expected one of: ${[...VALID_OPS].join(", ")}`);
|
|
163
|
+
}
|
|
164
|
+
return { op: op, args: rec };
|
|
165
|
+
}
|
|
166
|
+
export function createPtyTool(deps) {
|
|
167
|
+
// (5.1 codex Round-2 follow-up to MUST-FIX #4) Default shell is the
|
|
168
|
+
// BARE basename — Round-2 tightened `isShellAllowed` to reject any
|
|
169
|
+
// path-like value not on the user allowlist, so the prior default
|
|
170
|
+
// of `/bin/sh` would self-reject. Bare `sh` resolves via PATH at
|
|
171
|
+
// spawn time, which is what we want anyway; the operator can
|
|
172
|
+
// override via `deps.defaultShell` when running in a sandbox where
|
|
173
|
+
// PATH won't surface a usable shell.
|
|
174
|
+
const defaultShell = deps.defaultShell ?? (process.platform === "win32" ? "cmd.exe" : "sh");
|
|
175
|
+
const userExtra = deps.shellAllowlistExtra ?? [];
|
|
176
|
+
function resolveStartConfig(args) {
|
|
177
|
+
const command = str(args, "command");
|
|
178
|
+
// (5.1 codex Round-2 MUST-FIX #3) Default to the per-engine
|
|
179
|
+
// `defaultCwd` when set — for isolated subagents this is the
|
|
180
|
+
// worktree path, so a `pty.start({command: "pwd"})` runs inside
|
|
181
|
+
// the worktree rather than against the parent checkout.
|
|
182
|
+
const cwd = optStr(args, "cwd") ?? deps.defaultCwd ?? deps.workspaceRoot;
|
|
183
|
+
const shell = optStr(args, "shell") ?? defaultShell;
|
|
184
|
+
const cols = optNum(args, "cols");
|
|
185
|
+
const rows = optNum(args, "rows");
|
|
186
|
+
if (!isShellAllowed(shell, userExtra)) {
|
|
187
|
+
return {
|
|
188
|
+
error: `PTY_BAD_SHELL: shell '${shell}' is not in the allowlist. Built-in allowlist: ${[...BUILTIN_SHELL_ALLOWLIST].sort().join(", ")}. User allowlist (absolute paths) via 'config.pty.shellAllowlist'.`,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const envRaw = args["env"];
|
|
192
|
+
let env = {};
|
|
193
|
+
if (envRaw && typeof envRaw === "object" && !Array.isArray(envRaw)) {
|
|
194
|
+
for (const [k, v] of Object.entries(envRaw)) {
|
|
195
|
+
if (typeof v !== "string") {
|
|
196
|
+
return { error: `PTY_BAD_ARGS: env value for '${k}' must be a string` };
|
|
197
|
+
}
|
|
198
|
+
env[k] = v;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (envRaw !== undefined && envRaw !== null) {
|
|
202
|
+
return { error: `PTY_BAD_ARGS: 'env' must be an object of string→string` };
|
|
203
|
+
}
|
|
204
|
+
return { command, cwd, shell, env, cols, rows };
|
|
205
|
+
}
|
|
206
|
+
function lookupInfo(sessionId) {
|
|
207
|
+
// Use `list(agentId)` so D10 isolation is respected — model only
|
|
208
|
+
// gets to see commands for sessions it owns.
|
|
209
|
+
for (const s of deps.registry.list(deps.agentId)) {
|
|
210
|
+
if (s.sessionId === sessionId)
|
|
211
|
+
return s;
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
const description = [
|
|
216
|
+
"Drive a long-lived shell session. Use this when a command requires interactive input (REPL prompts, sudo password, dev-server tail, `python -i`, `psql`).",
|
|
217
|
+
"",
|
|
218
|
+
"Ops (pass as { op: ..., ... }):",
|
|
219
|
+
"- start({command, cwd?, cols?, rows?, shell?, env?}) → {session_id, first_chunk?, state}. Requires `shell` permission. Permission prompt includes resolved cwd, shell, and any non-default env keys.",
|
|
220
|
+
"- read({session_id, since?, timeout_ms?}) → {chunks: [{seq, text}], state, exit_code?, dropped?, truncated?, next_since?, persisted_path?}. Polls up to timeout_ms (default 1000, max 5000). Per-call cleaned-text payload capped at 30 KB; overflow persisted to .chances/tool-results/<callId>/pty.txt.",
|
|
221
|
+
"- write({session_id, input}) → {ok}. Write to stdin. Re-prompts when input contains newline/CR/control bytes (it's then command-class input that executes a line).",
|
|
222
|
+
"- resize({session_id, cols, rows}) → {ok}. SIGWINCH-equiv. Returns PTY_NO_PTY under pipe-fallback.",
|
|
223
|
+
"- interrupt({session_id}) → {ok}. Send SIGINT (operator Ctrl-C). Re-prompts.",
|
|
224
|
+
"- kill({session_id, signal?}) → {ok}. Default SIGTERM; pass 'SIGKILL' for hard kill. Re-prompts per signal — SIGTERM approval does NOT pre-approve SIGKILL.",
|
|
225
|
+
"- adopt({session_id}) → {ok}. Parent claims ownership of a subagent's session so it survives the subagent's exit. Re-prompts.",
|
|
226
|
+
"- list() → {sessions: [{session_id, command, cwd, shell, started_at, state, exit_code?}]}. Returns only sessions owned by you.",
|
|
227
|
+
].join("\n");
|
|
228
|
+
const tool = {
|
|
229
|
+
name: "pty",
|
|
230
|
+
description,
|
|
231
|
+
// `start` is the gateway op; classifying the whole tool as `shell`
|
|
232
|
+
// makes the gate's category-default reach the right resolver. Per-op
|
|
233
|
+
// overrides happen via `permission()` below.
|
|
234
|
+
category: "shell",
|
|
235
|
+
parameters: {
|
|
236
|
+
type: "object",
|
|
237
|
+
properties: {
|
|
238
|
+
op: {
|
|
239
|
+
type: "string",
|
|
240
|
+
enum: [...VALID_OPS],
|
|
241
|
+
description: "Operation: start | write | read | resize | kill | interrupt | adopt | list",
|
|
242
|
+
},
|
|
243
|
+
command: { type: "string", description: "[start] Shell command line to run." },
|
|
244
|
+
cwd: { type: "string", description: "[start] Working directory. Defaults to the workspace root." },
|
|
245
|
+
cols: { type: "number", description: "[start] PTY column count." },
|
|
246
|
+
rows: { type: "number", description: "[start] PTY row count." },
|
|
247
|
+
shell: { type: "string", description: "[start] Shell binary (must be in the allowlist)." },
|
|
248
|
+
env: { type: "object", description: "[start] Environment overrides. Keys/values must be strings." },
|
|
249
|
+
session_id: { type: "string", description: "Session id returned by start. Required for write/read/resize/kill/interrupt/adopt." },
|
|
250
|
+
since: { type: "number", description: "[read] Resume cursor (seq). 0 returns from the beginning of the ring." },
|
|
251
|
+
timeout_ms: { type: "number", description: "[read] Max poll window in ms. Default 1000, max 5000." },
|
|
252
|
+
input: { type: "string", description: "[write] Stdin payload. Include trailing \\n if the program expects it (this triggers a re-prompt — command-class input)." },
|
|
253
|
+
signal: { type: "string", enum: ["SIGTERM", "SIGKILL"], description: "[kill] Default SIGTERM." },
|
|
254
|
+
},
|
|
255
|
+
required: ["op"],
|
|
256
|
+
},
|
|
257
|
+
summarize: (args) => {
|
|
258
|
+
try {
|
|
259
|
+
const { op, args: a } = parseOp(args);
|
|
260
|
+
if (op === "start")
|
|
261
|
+
return `pty start: ${preview(optStr(a, "command") ?? "")}`;
|
|
262
|
+
const sid = optStr(a, "session_id") ?? "?";
|
|
263
|
+
if (op === "write")
|
|
264
|
+
return `pty write to ${sid}: ${preview(optStr(a, "input") ?? "")}`;
|
|
265
|
+
if (op === "kill")
|
|
266
|
+
return `pty kill ${optStr(a, "signal") ?? "SIGTERM"}: ${sid}`;
|
|
267
|
+
if (op === "interrupt")
|
|
268
|
+
return `pty interrupt (SIGINT): ${sid}`;
|
|
269
|
+
if (op === "adopt")
|
|
270
|
+
return `pty adopt: ${sid}`;
|
|
271
|
+
return `pty ${op}: ${sid}`;
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return "pty: invalid args";
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
permission(args, _ctx) {
|
|
278
|
+
let parsed;
|
|
279
|
+
try {
|
|
280
|
+
parsed = parseOp(args);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// Bad op surface as `PermissionRequest` so the engine still
|
|
284
|
+
// gates (and the tool's execute path returns the structured
|
|
285
|
+
// error). Use the tool's category default.
|
|
286
|
+
return {
|
|
287
|
+
name: "pty",
|
|
288
|
+
category: "shell",
|
|
289
|
+
summary: "pty: invalid args",
|
|
290
|
+
args,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const { op, args: a } = parsed;
|
|
294
|
+
if (op === "start") {
|
|
295
|
+
const cfg = resolveStartConfig(a);
|
|
296
|
+
if ("error" in cfg) {
|
|
297
|
+
// Surface as a normal start prompt; the execute path will
|
|
298
|
+
// return ok:false with the precise error. Re-prompting the
|
|
299
|
+
// user for a malformed start would be confusing, but the gate
|
|
300
|
+
// doesn't have a "skip-and-fail" channel — settle on the
|
|
301
|
+
// generic summary; execute returns the labelled error.
|
|
302
|
+
return {
|
|
303
|
+
name: "pty",
|
|
304
|
+
category: "shell",
|
|
305
|
+
summary: `pty start: ${preview(optStr(a, "command") ?? "")}`,
|
|
306
|
+
args,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
name: "pty",
|
|
311
|
+
category: "shell",
|
|
312
|
+
summary: startSummary(cfg.command, cfg.cwd, cfg.shell, cfg.env),
|
|
313
|
+
args,
|
|
314
|
+
cacheKey: startCacheKey(cfg.command, cfg.cwd, cfg.shell, cfg.env),
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
if (op === "read" || op === "resize" || op === "list") {
|
|
318
|
+
// Bypass the gate — D4. read/resize/list are operationally
|
|
319
|
+
// covered by the original start approval.
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
if (op === "write") {
|
|
323
|
+
const sessionId = optStr(a, "session_id") ?? "?";
|
|
324
|
+
const input = optStr(a, "input") ?? "";
|
|
325
|
+
if (isSafeWrite(input))
|
|
326
|
+
return null;
|
|
327
|
+
const info = lookupInfo(sessionId);
|
|
328
|
+
return {
|
|
329
|
+
name: "pty",
|
|
330
|
+
category: "shell",
|
|
331
|
+
summary: writeSummary(info, input),
|
|
332
|
+
args,
|
|
333
|
+
cacheKey: writeExecCacheKey(sessionId, input),
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
if (op === "kill") {
|
|
337
|
+
const sessionId = optStr(a, "session_id") ?? "?";
|
|
338
|
+
const sig = (optStr(a, "signal") ?? "SIGTERM").toUpperCase();
|
|
339
|
+
const info = lookupInfo(sessionId);
|
|
340
|
+
return {
|
|
341
|
+
name: "pty",
|
|
342
|
+
category: "shell",
|
|
343
|
+
summary: killSummary(info, sig),
|
|
344
|
+
args,
|
|
345
|
+
cacheKey: killCacheKey(sessionId, sig),
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
if (op === "interrupt") {
|
|
349
|
+
const sessionId = optStr(a, "session_id") ?? "?";
|
|
350
|
+
const info = lookupInfo(sessionId);
|
|
351
|
+
return {
|
|
352
|
+
name: "pty",
|
|
353
|
+
category: "shell",
|
|
354
|
+
summary: interruptSummary(info),
|
|
355
|
+
args,
|
|
356
|
+
cacheKey: interruptCacheKey(sessionId),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
// op === "adopt"
|
|
360
|
+
const sessionId = optStr(a, "session_id") ?? "?";
|
|
361
|
+
// Adopt may target a session NOT yet owned by this agent (that's
|
|
362
|
+
// the whole point of adopt). We still look up via `lookupInfo`
|
|
363
|
+
// which returns undefined for cross-agent sessions — the prompt
|
|
364
|
+
// then shows `<unknown session>` rather than leaking the
|
|
365
|
+
// command. Operator approval still gates the transfer.
|
|
366
|
+
const info = lookupInfo(sessionId);
|
|
367
|
+
return {
|
|
368
|
+
name: "pty",
|
|
369
|
+
category: "shell",
|
|
370
|
+
summary: adoptSummary(info),
|
|
371
|
+
args,
|
|
372
|
+
cacheKey: adoptCacheKey(sessionId),
|
|
373
|
+
};
|
|
374
|
+
},
|
|
375
|
+
async execute(args, ctx) {
|
|
376
|
+
let parsed;
|
|
377
|
+
try {
|
|
378
|
+
parsed = parseOp(args);
|
|
379
|
+
}
|
|
380
|
+
catch (e) {
|
|
381
|
+
return { ok: false, output: e.message };
|
|
382
|
+
}
|
|
383
|
+
const { op, args: a } = parsed;
|
|
384
|
+
try {
|
|
385
|
+
switch (op) {
|
|
386
|
+
case "start":
|
|
387
|
+
return await executeStart(a, ctx);
|
|
388
|
+
case "read":
|
|
389
|
+
return await executeRead(a, ctx);
|
|
390
|
+
case "write":
|
|
391
|
+
return await executeWrite(a);
|
|
392
|
+
case "resize":
|
|
393
|
+
return await executeResize(a);
|
|
394
|
+
case "kill":
|
|
395
|
+
return await executeKill(a);
|
|
396
|
+
case "interrupt":
|
|
397
|
+
return await executeInterrupt(a);
|
|
398
|
+
case "adopt":
|
|
399
|
+
return executeAdopt(a);
|
|
400
|
+
case "list":
|
|
401
|
+
return executeList();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
catch (e) {
|
|
405
|
+
return { ok: false, output: `pty ${op}: ${e.message ?? String(e)}` };
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
async function executeStart(a, ctx) {
|
|
410
|
+
const cfg = resolveStartConfig(a);
|
|
411
|
+
if ("error" in cfg)
|
|
412
|
+
return { ok: false, output: cfg.error };
|
|
413
|
+
try {
|
|
414
|
+
const result = await deps.registry.start({
|
|
415
|
+
agentId: deps.agentId,
|
|
416
|
+
agentName: deps.agentName,
|
|
417
|
+
callId: ctx.callId ?? createId("call"),
|
|
418
|
+
command: cfg.command,
|
|
419
|
+
cwd: cfg.cwd,
|
|
420
|
+
env: cfg.env,
|
|
421
|
+
cols: cfg.cols,
|
|
422
|
+
rows: cfg.rows,
|
|
423
|
+
shell: cfg.shell,
|
|
424
|
+
worktreeCwd: deps.worktreeCwd,
|
|
425
|
+
createHandle: (spawnOpts, onChunk) =>
|
|
426
|
+
// The factory is injected via the engine wiring; here we
|
|
427
|
+
// delegate to a runtime-resolved factory passed through deps.
|
|
428
|
+
deps.createHandle(spawnOpts, onChunk),
|
|
429
|
+
});
|
|
430
|
+
const payload = {
|
|
431
|
+
session_id: result.sessionId,
|
|
432
|
+
state: result.state,
|
|
433
|
+
};
|
|
434
|
+
if (result.firstChunk) {
|
|
435
|
+
payload.first_chunk = { seq: result.firstChunk.seq, text: result.firstChunk.text };
|
|
436
|
+
}
|
|
437
|
+
return { ok: true, output: jsonOutput(payload) };
|
|
438
|
+
}
|
|
439
|
+
catch (e) {
|
|
440
|
+
const msg = e.message ?? String(e);
|
|
441
|
+
// PTY_MAX_SESSIONS / spawn failure / etc. all flatten to ok:false
|
|
442
|
+
// with the labelled message so the model can recover.
|
|
443
|
+
return { ok: false, output: msg };
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
async function executeRead(a, ctx) {
|
|
447
|
+
const sessionId = str(a, "session_id");
|
|
448
|
+
const since = optNum(a, "since");
|
|
449
|
+
const timeoutMs = optNum(a, "timeout_ms");
|
|
450
|
+
try {
|
|
451
|
+
const result = await deps.registry.read(sessionId, deps.agentId, { since, timeoutMs, callId: ctx.callId ?? createId("call") }, ctx.signal);
|
|
452
|
+
const payload = {
|
|
453
|
+
state: result.state,
|
|
454
|
+
chunks: result.chunks.map((c) => ({ seq: c.seq, text: c.text })),
|
|
455
|
+
};
|
|
456
|
+
if (result.exitCode !== undefined)
|
|
457
|
+
payload.exit_code = result.exitCode;
|
|
458
|
+
if (result.dropped)
|
|
459
|
+
payload.dropped = result.dropped;
|
|
460
|
+
if (result.truncated)
|
|
461
|
+
payload.truncated = true;
|
|
462
|
+
if (result.nextSince !== undefined)
|
|
463
|
+
payload.next_since = result.nextSince;
|
|
464
|
+
if (result.persistedPath)
|
|
465
|
+
payload.persisted_path = result.persistedPath;
|
|
466
|
+
return { ok: true, output: jsonOutput(payload) };
|
|
467
|
+
}
|
|
468
|
+
catch (e) {
|
|
469
|
+
// SessionNotFoundError lands here as a typed error.
|
|
470
|
+
return { ok: false, output: e.message ?? String(e) };
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
async function executeWrite(a) {
|
|
474
|
+
const sessionId = str(a, "session_id");
|
|
475
|
+
const input = str(a, "input");
|
|
476
|
+
const bytes = Buffer.from(input, "utf8");
|
|
477
|
+
const r = await deps.registry.write(sessionId, deps.agentId, bytes);
|
|
478
|
+
return formatOpResult(r);
|
|
479
|
+
}
|
|
480
|
+
async function executeResize(a) {
|
|
481
|
+
const sessionId = str(a, "session_id");
|
|
482
|
+
const cols = optNum(a, "cols");
|
|
483
|
+
const rows = optNum(a, "rows");
|
|
484
|
+
if (cols === undefined || rows === undefined) {
|
|
485
|
+
return { ok: false, output: "PTY_BAD_ARGS: 'cols' and 'rows' required for resize" };
|
|
486
|
+
}
|
|
487
|
+
const r = await deps.registry.resize(sessionId, deps.agentId, cols, rows);
|
|
488
|
+
return formatOpResult(r);
|
|
489
|
+
}
|
|
490
|
+
async function executeKill(a) {
|
|
491
|
+
const sessionId = str(a, "session_id");
|
|
492
|
+
const sig = (optStr(a, "signal") ?? "SIGTERM").toUpperCase();
|
|
493
|
+
if (sig !== "SIGTERM" && sig !== "SIGKILL") {
|
|
494
|
+
return { ok: false, output: `PTY_BAD_ARGS: signal must be SIGTERM or SIGKILL, got '${sig}'` };
|
|
495
|
+
}
|
|
496
|
+
const r = await deps.registry.kill(sessionId, deps.agentId, sig);
|
|
497
|
+
return formatOpResult(r);
|
|
498
|
+
}
|
|
499
|
+
async function executeInterrupt(a) {
|
|
500
|
+
const sessionId = str(a, "session_id");
|
|
501
|
+
const r = await deps.registry.interrupt(sessionId, deps.agentId);
|
|
502
|
+
return formatOpResult(r);
|
|
503
|
+
}
|
|
504
|
+
function executeAdopt(a) {
|
|
505
|
+
const sessionId = str(a, "session_id");
|
|
506
|
+
const r = deps.registry.adopt(sessionId, deps.agentId);
|
|
507
|
+
return formatOpResult(r);
|
|
508
|
+
}
|
|
509
|
+
function executeList() {
|
|
510
|
+
const sessions = deps.registry.list(deps.agentId).map((s) => ({
|
|
511
|
+
session_id: s.sessionId,
|
|
512
|
+
command: s.command,
|
|
513
|
+
cwd: s.cwd,
|
|
514
|
+
shell: s.shell,
|
|
515
|
+
started_at: s.startedAt,
|
|
516
|
+
state: s.state,
|
|
517
|
+
...(s.exitCode !== undefined ? { exit_code: s.exitCode } : {}),
|
|
518
|
+
}));
|
|
519
|
+
return { ok: true, output: jsonOutput({ sessions }) };
|
|
520
|
+
}
|
|
521
|
+
return tool;
|
|
522
|
+
}
|
|
523
|
+
function formatOpResult(r) {
|
|
524
|
+
if (r.ok)
|
|
525
|
+
return { ok: true, output: jsonOutput({ ok: true }) };
|
|
526
|
+
const body = r.message ? `${r.error}: ${r.message}` : r.error;
|
|
527
|
+
return { ok: false, output: body };
|
|
528
|
+
}
|
|
529
|
+
/** Stringify a JSON payload as the tool result body. Insertion-order
|
|
530
|
+
* (matches JSON.stringify defaults); tests construct payloads in a
|
|
531
|
+
* deterministic order so snapshots stay stable without an extra sort
|
|
532
|
+
* pass. */
|
|
533
|
+
function jsonOutput(obj) {
|
|
534
|
+
return JSON.stringify(obj);
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=pty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../../src/tools/builtins/pty.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,QAAQ,EAAE,IAatB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { safePath, str } from "./_shared.js";
|
|
3
|
+
export const readTool = {
|
|
4
|
+
name: "read",
|
|
5
|
+
description: "Read a UTF-8 text file from the workspace.",
|
|
6
|
+
category: "file-read",
|
|
7
|
+
parameters: { type: "object", properties: { path: { type: "string" } }, required: ["path"] },
|
|
8
|
+
summarize: (args) => `read ${str(args, "path")}`,
|
|
9
|
+
async execute(args, ctx) {
|
|
10
|
+
const path = safePath(ctx, str(args, "path"));
|
|
11
|
+
if (!existsSync(path))
|
|
12
|
+
return { ok: false, output: `No such file: ${str(args, "path")}` };
|
|
13
|
+
const content = readFileSync(path, "utf8");
|
|
14
|
+
const clipped = content.length > 60_000 ? content.slice(0, 60_000) + "\n…(truncated)" : content;
|
|
15
|
+
return { ok: true, output: clipped };
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/builtins/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC5F,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;IAChD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/web-fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,IAAI,EAAc,MAAM,aAAa,CAAC;AAwIvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6B/C;AA0FD,eAAO,MAAM,YAAY,EAAE,IA8F1B,CAAC"}
|