@amodalai/runtime 0.1.26 → 0.2.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/src/__fixtures__/README.md +84 -0
- package/dist/src/__fixtures__/smoke-agent/amodal.json +11 -0
- package/dist/src/__fixtures__/smoke-agent/automations/test-auto.md +5 -0
- package/dist/src/__fixtures__/smoke-agent/connections/mock-api/access.json +11 -0
- package/dist/src/__fixtures__/smoke-agent/connections/mock-api/spec.json +4 -0
- package/dist/src/__fixtures__/smoke-agent/connections/mock-api/surface.md +9 -0
- package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/access.json +3 -0
- package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/spec.json +8 -0
- package/dist/src/__fixtures__/smoke-agent/evals/basic-eval.md +12 -0
- package/dist/src/__fixtures__/smoke-agent/knowledge/test-knowledge.md +3 -0
- package/dist/src/__fixtures__/smoke-agent/skills/test-skill/SKILL.md +11 -0
- package/dist/src/__fixtures__/smoke-agent/stores/test-items.json +11 -0
- package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.d.ts +18 -0
- package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js +22 -0
- package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js.map +1 -0
- package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/tool.json +17 -0
- package/dist/src/__fixtures__/smoke.test.js +718 -0
- package/dist/src/__fixtures__/smoke.test.js.map +1 -0
- package/dist/src/__tests__/test-providers.d.ts +40 -0
- package/dist/src/__tests__/test-providers.js +61 -0
- package/dist/src/__tests__/test-providers.js.map +1 -0
- package/dist/src/agent/local-server.d.ts +3 -3
- package/dist/src/agent/local-server.js +213 -122
- package/dist/src/agent/local-server.js.map +1 -1
- package/dist/src/agent/loop-types.d.ts +175 -0
- package/dist/src/agent/loop-types.js +20 -0
- package/dist/src/agent/loop-types.js.map +1 -0
- package/dist/src/agent/loop.d.ts +31 -0
- package/dist/src/agent/loop.js +139 -0
- package/dist/src/agent/loop.js.map +1 -0
- package/dist/src/agent/loop.test.js +1030 -0
- package/dist/src/agent/loop.test.js.map +1 -0
- package/dist/src/agent/mcp-config.d.ts +28 -0
- package/dist/src/agent/mcp-config.js +57 -0
- package/dist/src/agent/mcp-config.js.map +1 -0
- package/dist/src/agent/page-builder.js +6 -1
- package/dist/src/agent/page-builder.js.map +1 -1
- package/dist/src/agent/proactive/proactive-runner.d.ts +24 -8
- package/dist/src/agent/proactive/proactive-runner.js +30 -32
- package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
- package/dist/src/agent/proactive/proactive-runner.test.d.ts +1 -1
- package/dist/src/agent/proactive/proactive-runner.test.js +75 -87
- package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -1
- package/dist/src/agent/routes/admin-chat.d.ts +15 -3
- package/dist/src/agent/routes/admin-chat.js +63 -18
- package/dist/src/agent/routes/admin-chat.js.map +1 -1
- package/dist/src/agent/routes/automations.js +5 -6
- package/dist/src/agent/routes/automations.js.map +1 -1
- package/dist/src/agent/routes/evals.d.ts +3 -2
- package/dist/src/agent/routes/evals.js +25 -12
- package/dist/src/agent/routes/evals.js.map +1 -1
- package/dist/src/agent/routes/files.js +7 -9
- package/dist/src/agent/routes/files.js.map +1 -1
- package/dist/src/agent/routes/inspect.d.ts +6 -2
- package/dist/src/agent/routes/inspect.js +31 -17
- package/dist/src/agent/routes/inspect.js.map +1 -1
- package/dist/src/agent/routes/inspect.test.js +18 -42
- package/dist/src/agent/routes/inspect.test.js.map +1 -1
- package/dist/src/agent/routes/stores.js +9 -12
- package/dist/src/agent/routes/stores.js.map +1 -1
- package/dist/src/agent/routes/task.d.ts +15 -3
- package/dist/src/agent/routes/task.js +16 -7
- package/dist/src/agent/routes/task.js.map +1 -1
- package/dist/src/agent/routes/task.test.d.ts +1 -1
- package/dist/src/agent/routes/task.test.js +70 -53
- package/dist/src/agent/routes/task.test.js.map +1 -1
- package/dist/src/agent/routes/webhooks.js +12 -3
- package/dist/src/agent/routes/webhooks.js.map +1 -1
- package/dist/src/agent/session-store.d.ts +11 -2
- package/dist/src/agent/session-store.js +1 -1
- package/dist/src/agent/session-store.js.map +1 -1
- package/dist/src/agent/snapshot-server.d.ts +2 -22
- package/dist/src/agent/snapshot-server.js +50 -27
- package/dist/src/agent/snapshot-server.js.map +1 -1
- package/dist/src/agent/states/compacting.d.ts +14 -0
- package/dist/src/agent/states/compacting.js +258 -0
- package/dist/src/agent/states/compacting.js.map +1 -0
- package/dist/src/agent/states/confirming.d.ts +10 -0
- package/dist/src/agent/states/confirming.js +76 -0
- package/dist/src/agent/states/confirming.js.map +1 -0
- package/dist/src/agent/states/dispatching.d.ts +18 -0
- package/dist/src/agent/states/dispatching.js +241 -0
- package/dist/src/agent/states/dispatching.js.map +1 -0
- package/dist/src/agent/states/executing.d.ts +21 -0
- package/dist/src/agent/states/executing.js +308 -0
- package/dist/src/agent/states/executing.js.map +1 -0
- package/dist/src/agent/states/streaming.d.ts +10 -0
- package/dist/src/agent/states/streaming.js +155 -0
- package/dist/src/agent/states/streaming.js.map +1 -0
- package/dist/src/agent/states/thinking.d.ts +13 -0
- package/dist/src/agent/states/thinking.js +233 -0
- package/dist/src/agent/states/thinking.js.map +1 -0
- package/dist/src/agent/token-estimate.d.ts +17 -0
- package/dist/src/agent/token-estimate.js +13 -0
- package/dist/src/agent/token-estimate.js.map +1 -0
- package/dist/src/agent/tool-executor-local.js +9 -18
- package/dist/src/agent/tool-executor-local.js.map +1 -1
- package/dist/src/agent/tool-executor-local.test.js +3 -5
- package/dist/src/agent/tool-executor-local.test.js.map +1 -1
- package/dist/src/api/create-agent.d.ts +15 -0
- package/dist/src/api/create-agent.js +137 -0
- package/dist/src/api/create-agent.js.map +1 -0
- package/dist/src/api/types.d.ts +68 -0
- package/dist/src/api/types.js +7 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/context/compiler.d.ts +13 -0
- package/dist/src/context/compiler.js +358 -0
- package/dist/src/context/compiler.js.map +1 -0
- package/dist/src/context/compiler.test.js +532 -0
- package/dist/src/context/compiler.test.js.map +1 -0
- package/dist/src/context/types.d.ts +110 -0
- package/dist/src/context/types.js +7 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/index.d.ts +33 -6
- package/dist/src/index.js +35 -21
- package/dist/src/index.js.map +1 -1
- package/dist/src/providers/create-provider.d.ts +23 -0
- package/dist/src/providers/create-provider.js +185 -0
- package/dist/src/providers/create-provider.js.map +1 -0
- package/dist/src/{agent/stores-e2e.test.d.ts → providers/create-provider.test.d.ts} +1 -1
- package/dist/src/providers/create-provider.test.js +95 -0
- package/dist/src/providers/create-provider.test.js.map +1 -0
- package/dist/src/providers/failover.d.ts +38 -0
- package/dist/src/providers/failover.js +147 -0
- package/dist/src/providers/failover.js.map +1 -0
- package/dist/src/providers/failover.test.d.ts +6 -0
- package/dist/src/providers/failover.test.js +169 -0
- package/dist/src/providers/failover.test.js.map +1 -0
- package/dist/src/providers/types.d.ts +110 -0
- package/dist/src/providers/types.js +7 -0
- package/dist/src/providers/types.js.map +1 -0
- package/dist/src/routes/ai-stream.d.ts +13 -10
- package/dist/src/routes/ai-stream.js +76 -41
- package/dist/src/routes/ai-stream.js.map +1 -1
- package/dist/src/routes/chat-new.test.d.ts +6 -0
- package/dist/src/routes/chat-new.test.js +107 -0
- package/dist/src/routes/chat-new.test.js.map +1 -0
- package/dist/src/routes/chat-stream-new.test.d.ts +6 -0
- package/dist/src/routes/chat-stream-new.test.js +135 -0
- package/dist/src/routes/chat-stream-new.test.js.map +1 -0
- package/dist/src/routes/chat-stream.d.ts +14 -4
- package/dist/src/routes/chat-stream.js +47 -29
- package/dist/src/routes/chat-stream.js.map +1 -1
- package/dist/src/routes/chat.d.ts +13 -4
- package/dist/src/routes/chat.js +60 -23
- package/dist/src/routes/chat.js.map +1 -1
- package/dist/src/routes/health.d.ts +3 -2
- package/dist/src/routes/health.js.map +1 -1
- package/dist/src/routes/route-helpers.d.ts +50 -0
- package/dist/src/routes/route-helpers.js +80 -0
- package/dist/src/routes/route-helpers.js.map +1 -0
- package/dist/src/routes/session-resolver.d.ts +72 -0
- package/dist/src/routes/session-resolver.js +123 -0
- package/dist/src/routes/session-resolver.js.map +1 -0
- package/dist/src/routes/session-resolver.test.d.ts +6 -0
- package/dist/src/routes/session-resolver.test.js +206 -0
- package/dist/src/routes/session-resolver.test.js.map +1 -0
- package/dist/src/routes/webhooks.d.ts +3 -1
- package/dist/src/routes/webhooks.js +12 -4
- package/dist/src/routes/webhooks.js.map +1 -1
- package/dist/src/security/permission-checker.d.ts +80 -0
- package/dist/src/security/permission-checker.js +75 -0
- package/dist/src/security/permission-checker.js.map +1 -0
- package/dist/src/security/permission-checker.test.d.ts +6 -0
- package/dist/src/security/permission-checker.test.js +208 -0
- package/dist/src/security/permission-checker.test.js.map +1 -0
- package/dist/src/server.d.ts +12 -11
- package/dist/src/server.js +44 -46
- package/dist/src/server.js.map +1 -1
- package/dist/src/server.test.d.ts +1 -1
- package/dist/src/server.test.js +6 -144
- package/dist/src/server.test.js.map +1 -1
- package/dist/src/session/manager.d.ts +98 -0
- package/dist/src/session/manager.js +364 -0
- package/dist/src/session/manager.js.map +1 -0
- package/dist/src/session/manager.test.d.ts +6 -0
- package/dist/src/session/manager.test.js +315 -0
- package/dist/src/session/manager.test.js.map +1 -0
- package/dist/src/session/session-builder.d.ts +71 -0
- package/dist/src/session/session-builder.js +364 -0
- package/dist/src/session/session-builder.js.map +1 -0
- package/dist/src/session/session-builder.test.d.ts +6 -0
- package/dist/src/session/session-builder.test.js +352 -0
- package/dist/src/session/session-builder.test.js.map +1 -0
- package/dist/src/session/store.d.ts +57 -0
- package/dist/src/session/store.js +167 -0
- package/dist/src/session/store.js.map +1 -0
- package/dist/src/session/store.test.d.ts +6 -0
- package/dist/src/session/store.test.js +145 -0
- package/dist/src/session/store.test.js.map +1 -0
- package/dist/src/session/stream-hooks.d.ts +39 -0
- package/dist/src/session/stream-hooks.js +7 -0
- package/dist/src/session/stream-hooks.js.map +1 -0
- package/dist/src/session/tool-context-factory.d.ts +60 -0
- package/dist/src/session/tool-context-factory.js +190 -0
- package/dist/src/session/tool-context-factory.js.map +1 -0
- package/dist/src/session/tool-context-factory.test.d.ts +6 -0
- package/dist/src/session/tool-context-factory.test.js +287 -0
- package/dist/src/session/tool-context-factory.test.js.map +1 -0
- package/dist/src/session/types.d.ts +188 -0
- package/dist/src/session/types.js +7 -0
- package/dist/src/session/types.js.map +1 -0
- package/dist/src/stores/drizzle-store-backend.d.ts +49 -0
- package/dist/src/stores/drizzle-store-backend.js +306 -0
- package/dist/src/stores/drizzle-store-backend.js.map +1 -0
- package/dist/src/stores/drizzle-store-backend.test.d.ts +6 -0
- package/dist/src/stores/drizzle-store-backend.test.js +215 -0
- package/dist/src/stores/drizzle-store-backend.test.js.map +1 -0
- package/dist/src/stores/index.d.ts +4 -0
- package/dist/src/stores/index.js +2 -0
- package/dist/src/stores/index.js.map +1 -1
- package/dist/src/stores/pglite-store-backend.d.ts +16 -19
- package/dist/src/stores/pglite-store-backend.js +85 -239
- package/dist/src/stores/pglite-store-backend.js.map +1 -1
- package/dist/src/stores/postgres-store-backend.d.ts +30 -0
- package/dist/src/stores/postgres-store-backend.js +100 -0
- package/dist/src/stores/postgres-store-backend.js.map +1 -0
- package/dist/src/stores/schema.d.ts +491 -0
- package/dist/src/stores/schema.js +57 -0
- package/dist/src/stores/schema.js.map +1 -0
- package/dist/src/tools/admin-file-tools.d.ts +13 -0
- package/dist/src/tools/admin-file-tools.js +200 -0
- package/dist/src/tools/admin-file-tools.js.map +1 -0
- package/dist/src/tools/admin-file-tools.test.d.ts +6 -0
- package/dist/src/tools/admin-file-tools.test.js +152 -0
- package/dist/src/tools/admin-file-tools.test.js.map +1 -0
- package/dist/src/tools/custom-tool-adapter.d.ts +41 -0
- package/dist/src/tools/custom-tool-adapter.js +190 -0
- package/dist/src/tools/custom-tool-adapter.js.map +1 -0
- package/dist/src/tools/custom-tool-adapter.test.d.ts +6 -0
- package/dist/src/tools/custom-tool-adapter.test.js +244 -0
- package/dist/src/tools/custom-tool-adapter.test.js.map +1 -0
- package/dist/src/tools/dispatch-tool.d.ts +52 -0
- package/dist/src/tools/dispatch-tool.js +71 -0
- package/dist/src/tools/dispatch-tool.js.map +1 -0
- package/dist/src/tools/dispatch-tool.test.d.ts +6 -0
- package/dist/src/tools/dispatch-tool.test.js +75 -0
- package/dist/src/tools/dispatch-tool.test.js.map +1 -0
- package/dist/src/tools/mcp-tool-adapter.d.ts +18 -0
- package/dist/src/tools/mcp-tool-adapter.js +135 -0
- package/dist/src/tools/mcp-tool-adapter.js.map +1 -0
- package/dist/src/tools/mcp-tool-adapter.test.d.ts +6 -0
- package/dist/src/tools/mcp-tool-adapter.test.js +227 -0
- package/dist/src/tools/mcp-tool-adapter.test.js.map +1 -0
- package/dist/src/tools/registry.d.ts +25 -0
- package/dist/src/tools/registry.js +72 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/registry.test.d.ts +6 -0
- package/dist/src/tools/registry.test.js +121 -0
- package/dist/src/tools/registry.test.js.map +1 -0
- package/dist/src/tools/request-tool.d.ts +42 -0
- package/dist/src/tools/request-tool.js +190 -0
- package/dist/src/tools/request-tool.js.map +1 -0
- package/dist/src/tools/request-tool.test.d.ts +6 -0
- package/dist/src/tools/request-tool.test.js +254 -0
- package/dist/src/tools/request-tool.test.js.map +1 -0
- package/dist/src/tools/store-tools.d.ts +29 -0
- package/dist/src/tools/store-tools.js +224 -0
- package/dist/src/tools/store-tools.js.map +1 -0
- package/dist/src/tools/store-tools.test.d.ts +6 -0
- package/dist/src/tools/store-tools.test.js +216 -0
- package/dist/src/tools/store-tools.test.js.map +1 -0
- package/dist/src/tools/types.d.ts +111 -0
- package/dist/src/tools/types.js +7 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/types.d.ts +20 -12
- package/dist/src/types.js +3 -2
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -4
- package/dist/src/__tests__/sse-contract.test.js +0 -464
- package/dist/src/__tests__/sse-contract.test.js.map +0 -1
- package/dist/src/__tests__/tools.test.js +0 -583
- package/dist/src/__tests__/tools.test.js.map +0 -1
- package/dist/src/agent/agent-runner.d.ts +0 -33
- package/dist/src/agent/agent-runner.js +0 -1040
- package/dist/src/agent/agent-runner.js.map +0 -1
- package/dist/src/agent/custom-tools-e2e.test.d.ts +0 -6
- package/dist/src/agent/custom-tools-e2e.test.js +0 -566
- package/dist/src/agent/custom-tools-e2e.test.js.map +0 -1
- package/dist/src/agent/request-helper.d.ts +0 -16
- package/dist/src/agent/request-helper.js +0 -96
- package/dist/src/agent/request-helper.js.map +0 -1
- package/dist/src/agent/stores-e2e.test.js +0 -433
- package/dist/src/agent/stores-e2e.test.js.map +0 -1
- package/dist/src/agent/tool-context-builder.d.ts +0 -11
- package/dist/src/agent/tool-context-builder.js +0 -102
- package/dist/src/agent/tool-context-builder.js.map +0 -1
- package/dist/src/agent/tool-context-builder.test.d.ts +0 -6
- package/dist/src/agent/tool-context-builder.test.js +0 -152
- package/dist/src/agent/tool-context-builder.test.js.map +0 -1
- package/dist/src/agent/write-repo-file.test.js +0 -270
- package/dist/src/agent/write-repo-file.test.js.map +0 -1
- package/dist/src/cron/heartbeat-runner.d.ts +0 -21
- package/dist/src/cron/heartbeat-runner.js +0 -79
- package/dist/src/cron/heartbeat-runner.js.map +0 -1
- package/dist/src/cron/heartbeat-runner.test.d.ts +0 -6
- package/dist/src/cron/heartbeat-runner.test.js +0 -120
- package/dist/src/cron/heartbeat-runner.test.js.map +0 -1
- package/dist/src/cron/heartbeat-scheduler.d.ts +0 -26
- package/dist/src/cron/heartbeat-scheduler.js +0 -55
- package/dist/src/cron/heartbeat-scheduler.js.map +0 -1
- package/dist/src/cron/heartbeat-scheduler.test.d.ts +0 -6
- package/dist/src/cron/heartbeat-scheduler.test.js +0 -61
- package/dist/src/cron/heartbeat-scheduler.test.js.map +0 -1
- package/dist/src/routes/ai-stream.test.d.ts +0 -6
- package/dist/src/routes/ai-stream.test.js +0 -586
- package/dist/src/routes/ai-stream.test.js.map +0 -1
- package/dist/src/routes/ask-user-response.d.ts +0 -30
- package/dist/src/routes/ask-user-response.js +0 -61
- package/dist/src/routes/ask-user-response.js.map +0 -1
- package/dist/src/routes/ask-user-response.test.d.ts +0 -6
- package/dist/src/routes/ask-user-response.test.js +0 -88
- package/dist/src/routes/ask-user-response.test.js.map +0 -1
- package/dist/src/routes/chat-stream.test.d.ts +0 -6
- package/dist/src/routes/chat-stream.test.js +0 -155
- package/dist/src/routes/chat-stream.test.js.map +0 -1
- package/dist/src/routes/chat.test.d.ts +0 -6
- package/dist/src/routes/chat.test.js +0 -99
- package/dist/src/routes/chat.test.js.map +0 -1
- package/dist/src/routes/widget-actions.d.ts +0 -49
- package/dist/src/routes/widget-actions.js +0 -78
- package/dist/src/routes/widget-actions.js.map +0 -1
- package/dist/src/session/custom-tool-adapter.d.ts +0 -74
- package/dist/src/session/custom-tool-adapter.js +0 -180
- package/dist/src/session/custom-tool-adapter.js.map +0 -1
- package/dist/src/session/history-converter.d.ts +0 -21
- package/dist/src/session/history-converter.js +0 -59
- package/dist/src/session/history-converter.js.map +0 -1
- package/dist/src/session/history-converter.test.d.ts +0 -6
- package/dist/src/session/history-converter.test.js +0 -130
- package/dist/src/session/history-converter.test.js.map +0 -1
- package/dist/src/session/session-manager.d.ts +0 -219
- package/dist/src/session/session-manager.js +0 -915
- package/dist/src/session/session-manager.js.map +0 -1
- package/dist/src/session/session-manager.test.d.ts +0 -6
- package/dist/src/session/session-manager.test.js +0 -455
- package/dist/src/session/session-manager.test.js.map +0 -1
- package/dist/src/session/session-runner.d.ts +0 -45
- package/dist/src/session/session-runner.js +0 -719
- package/dist/src/session/session-runner.js.map +0 -1
- package/dist/src/session/session-runner.test.d.ts +0 -6
- package/dist/src/session/session-runner.test.js +0 -834
- package/dist/src/session/session-runner.test.js.map +0 -1
- /package/dist/src/{__tests__/sse-contract.test.d.ts → __fixtures__/smoke.test.d.ts} +0 -0
- /package/dist/src/{__tests__/tools.test.d.ts → agent/loop.test.d.ts} +0 -0
- /package/dist/src/{agent/write-repo-file.test.d.ts → context/compiler.test.d.ts} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* DISPATCHING state handler.
|
|
8
|
+
*
|
|
9
|
+
* Spawns a child agent with a subset of tools and a specific prompt.
|
|
10
|
+
* The child runs its own runAgent() loop; each child event is wrapped
|
|
11
|
+
* as an SSESubagentEvent and yielded as an effect so the client can
|
|
12
|
+
* display real-time sub-agent activity.
|
|
13
|
+
*
|
|
14
|
+
* After the child completes, the handler builds a ToolResult from the
|
|
15
|
+
* child's text response and transitions back through the normal
|
|
16
|
+
* EXECUTING post-result flow (queue, compaction, thinking).
|
|
17
|
+
*/
|
|
18
|
+
import { SSEEventType } from '../../types.js';
|
|
19
|
+
import { createToolRegistry } from '../../tools/registry.js';
|
|
20
|
+
import { DEFAULT_LOOP_CONFIG } from '../loop-types.js';
|
|
21
|
+
import { runAgent } from '../loop.js';
|
|
22
|
+
import { nextAfterToolResult } from './executing.js';
|
|
23
|
+
import { DEFAULT_CHILD_MAX_TURNS, DISPATCH_TOOL_NAME } from '../../tools/dispatch-tool.js';
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Constants
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const DEFAULT_CHILD_MAX_CONTEXT_TOKENS = 100_000;
|
|
28
|
+
const DEFAULT_CHILD_TIMEOUT_MS = 60_000;
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Handler
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Handle the DISPATCHING state — run a child agent loop.
|
|
34
|
+
*
|
|
35
|
+
* Creates a child AgentContext with:
|
|
36
|
+
* - Same provider, logger, signal, tenant, user, permission checker
|
|
37
|
+
* - Tool registry subset (only the requested tools, never dispatch_task)
|
|
38
|
+
* - Same buildToolContext factory (child shares parent's connections/stores)
|
|
39
|
+
* - Reduced maxTurns (default 10) and maxContextTokens
|
|
40
|
+
* - Fresh messages (dispatch prompt as user message)
|
|
41
|
+
* - Fresh usage counters (merged back to parent after completion)
|
|
42
|
+
*/
|
|
43
|
+
export async function handleDispatching(state, ctx) {
|
|
44
|
+
const { task, toolCallId } = state;
|
|
45
|
+
const effects = [];
|
|
46
|
+
const startedAt = Date.now();
|
|
47
|
+
ctx.logger.info('dispatch_start', {
|
|
48
|
+
session: ctx.sessionId,
|
|
49
|
+
agent: task.agentName,
|
|
50
|
+
tools: task.toolSubset,
|
|
51
|
+
maxTurns: task.maxTurns ?? DEFAULT_CHILD_MAX_TURNS,
|
|
52
|
+
parentToolCallId: toolCallId,
|
|
53
|
+
});
|
|
54
|
+
// Build child tool registry from the parent's subset
|
|
55
|
+
const childRegistry = createToolRegistry();
|
|
56
|
+
const subsetTools = ctx.toolRegistry.subset(task.toolSubset);
|
|
57
|
+
for (const [name, def] of Object.entries(subsetTools)) {
|
|
58
|
+
childRegistry.register(name, def);
|
|
59
|
+
}
|
|
60
|
+
// Child-specific timeout — prevents a slow child from starving the parent.
|
|
61
|
+
// Combined with parent's signal so parent abort also stops child.
|
|
62
|
+
const childTimeoutMs = task.timeoutMs ?? DEFAULT_CHILD_TIMEOUT_MS;
|
|
63
|
+
const childSignal = AbortSignal.any([ctx.signal, AbortSignal.timeout(childTimeoutMs)]);
|
|
64
|
+
// Minimal system prompt for the child — the full parent prompt (skills,
|
|
65
|
+
// knowledge, connection docs) is unnecessary for a focused sub-task and
|
|
66
|
+
// wastes tokens. The child gets a task-scoped prompt with available tools.
|
|
67
|
+
const childToolNames = childRegistry.names();
|
|
68
|
+
const childSystemPrompt = buildChildSystemPrompt(task.agentName, task.prompt, childToolNames);
|
|
69
|
+
// Build child context
|
|
70
|
+
const childCtx = {
|
|
71
|
+
provider: ctx.provider,
|
|
72
|
+
toolRegistry: childRegistry,
|
|
73
|
+
permissionChecker: ctx.permissionChecker,
|
|
74
|
+
logger: ctx.logger,
|
|
75
|
+
signal: childSignal,
|
|
76
|
+
sessionId: ctx.sessionId,
|
|
77
|
+
tenantId: ctx.tenantId,
|
|
78
|
+
user: ctx.user,
|
|
79
|
+
systemPrompt: childSystemPrompt,
|
|
80
|
+
messages: [],
|
|
81
|
+
usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
|
|
82
|
+
turnCount: 0,
|
|
83
|
+
maxTurns: task.maxTurns ?? DEFAULT_CHILD_MAX_TURNS,
|
|
84
|
+
maxContextTokens: task.maxContextTokens ?? DEFAULT_CHILD_MAX_CONTEXT_TOKENS,
|
|
85
|
+
config: { ...DEFAULT_LOOP_CONFIG },
|
|
86
|
+
compactionFailures: 0,
|
|
87
|
+
preExecutionCache: new Map(),
|
|
88
|
+
waitForConfirmation: ctx.waitForConfirmation,
|
|
89
|
+
buildToolContext: ctx.buildToolContext,
|
|
90
|
+
};
|
|
91
|
+
// Run child agent loop and translate events to SubagentEvents
|
|
92
|
+
let childResponse = '';
|
|
93
|
+
let childFailed = false;
|
|
94
|
+
try {
|
|
95
|
+
for await (const childEvent of runAgent({ messages: [{ role: 'user', content: task.prompt }], context: childCtx })) {
|
|
96
|
+
if (ctx.signal.aborted)
|
|
97
|
+
break;
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- intentionally skip child-internal events (Init, Widget, etc.)
|
|
99
|
+
switch (childEvent.type) {
|
|
100
|
+
case SSEEventType.TextDelta:
|
|
101
|
+
childResponse += childEvent.content;
|
|
102
|
+
effects.push({
|
|
103
|
+
type: SSEEventType.SubagentEvent,
|
|
104
|
+
parent_tool_id: toolCallId,
|
|
105
|
+
agent_name: task.agentName,
|
|
106
|
+
event_type: 'thought',
|
|
107
|
+
text: childEvent.content,
|
|
108
|
+
timestamp: childEvent.timestamp,
|
|
109
|
+
});
|
|
110
|
+
break;
|
|
111
|
+
case SSEEventType.ToolCallStart:
|
|
112
|
+
effects.push({
|
|
113
|
+
type: SSEEventType.SubagentEvent,
|
|
114
|
+
parent_tool_id: toolCallId,
|
|
115
|
+
agent_name: task.agentName,
|
|
116
|
+
event_type: 'tool_call_start',
|
|
117
|
+
tool_name: childEvent.tool_name,
|
|
118
|
+
tool_args: childEvent.parameters,
|
|
119
|
+
timestamp: childEvent.timestamp,
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
case SSEEventType.ToolCallResult:
|
|
123
|
+
effects.push({
|
|
124
|
+
type: SSEEventType.SubagentEvent,
|
|
125
|
+
parent_tool_id: toolCallId,
|
|
126
|
+
agent_name: task.agentName,
|
|
127
|
+
event_type: 'tool_call_end',
|
|
128
|
+
tool_name: undefined,
|
|
129
|
+
result: childEvent.status === 'error' ? childEvent.error : undefined,
|
|
130
|
+
timestamp: childEvent.timestamp,
|
|
131
|
+
});
|
|
132
|
+
break;
|
|
133
|
+
case SSEEventType.Error:
|
|
134
|
+
effects.push({
|
|
135
|
+
type: SSEEventType.SubagentEvent,
|
|
136
|
+
parent_tool_id: toolCallId,
|
|
137
|
+
agent_name: task.agentName,
|
|
138
|
+
event_type: 'error',
|
|
139
|
+
error: childEvent.message,
|
|
140
|
+
timestamp: childEvent.timestamp,
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case SSEEventType.Done:
|
|
144
|
+
effects.push({
|
|
145
|
+
type: SSEEventType.SubagentEvent,
|
|
146
|
+
parent_tool_id: toolCallId,
|
|
147
|
+
agent_name: task.agentName,
|
|
148
|
+
event_type: 'complete',
|
|
149
|
+
timestamp: childEvent.timestamp,
|
|
150
|
+
});
|
|
151
|
+
break;
|
|
152
|
+
default:
|
|
153
|
+
// Skip Init and other events — they're child-internal
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
160
|
+
ctx.logger.error('dispatch_child_error', {
|
|
161
|
+
session: ctx.sessionId,
|
|
162
|
+
agent: task.agentName,
|
|
163
|
+
error: errorMessage,
|
|
164
|
+
parentToolCallId: toolCallId,
|
|
165
|
+
});
|
|
166
|
+
effects.push({
|
|
167
|
+
type: SSEEventType.SubagentEvent,
|
|
168
|
+
parent_tool_id: toolCallId,
|
|
169
|
+
agent_name: task.agentName,
|
|
170
|
+
event_type: 'error',
|
|
171
|
+
error: errorMessage,
|
|
172
|
+
timestamp: new Date().toISOString(),
|
|
173
|
+
});
|
|
174
|
+
childResponse = `Sub-agent "${task.agentName}" failed: ${errorMessage}`;
|
|
175
|
+
childFailed = true;
|
|
176
|
+
}
|
|
177
|
+
// Merge child usage into parent
|
|
178
|
+
ctx.usage.inputTokens += childCtx.usage.inputTokens;
|
|
179
|
+
ctx.usage.outputTokens += childCtx.usage.outputTokens;
|
|
180
|
+
ctx.usage.totalTokens += childCtx.usage.totalTokens;
|
|
181
|
+
if (childCtx.usage.cachedInputTokens) {
|
|
182
|
+
ctx.usage.cachedInputTokens = (ctx.usage.cachedInputTokens ?? 0) + childCtx.usage.cachedInputTokens;
|
|
183
|
+
}
|
|
184
|
+
if (childCtx.usage.cacheCreationInputTokens) {
|
|
185
|
+
ctx.usage.cacheCreationInputTokens = (ctx.usage.cacheCreationInputTokens ?? 0) + childCtx.usage.cacheCreationInputTokens;
|
|
186
|
+
}
|
|
187
|
+
const duration = Date.now() - startedAt;
|
|
188
|
+
ctx.logger.info('dispatch_complete', {
|
|
189
|
+
session: ctx.sessionId,
|
|
190
|
+
agent: task.agentName,
|
|
191
|
+
childTurns: childCtx.turnCount,
|
|
192
|
+
childUsage: childCtx.usage,
|
|
193
|
+
responseLength: childResponse.length,
|
|
194
|
+
parentToolCallId: toolCallId,
|
|
195
|
+
duration,
|
|
196
|
+
});
|
|
197
|
+
// Build tool result from child response
|
|
198
|
+
const result = {
|
|
199
|
+
callId: toolCallId,
|
|
200
|
+
toolName: DISPATCH_TOOL_NAME,
|
|
201
|
+
status: childFailed ? 'error' : 'success',
|
|
202
|
+
content: childResponse || '(no response from sub-agent)',
|
|
203
|
+
};
|
|
204
|
+
// Emit ToolCallResult for the dispatch_task call
|
|
205
|
+
effects.push({
|
|
206
|
+
type: SSEEventType.ToolCallResult,
|
|
207
|
+
tool_id: toolCallId,
|
|
208
|
+
status: result.status,
|
|
209
|
+
duration_ms: duration,
|
|
210
|
+
...(result.status === 'error' ? { error: result.content } : {}),
|
|
211
|
+
timestamp: new Date().toISOString(),
|
|
212
|
+
});
|
|
213
|
+
// Use the shared post-result transition logic from EXECUTING.
|
|
214
|
+
// This handles: append tool result message, continue queue, compaction check.
|
|
215
|
+
const executingState = {
|
|
216
|
+
type: 'executing',
|
|
217
|
+
current: { toolCallId, toolName: DISPATCH_TOOL_NAME, args: {} },
|
|
218
|
+
queue: state.queue,
|
|
219
|
+
results: state.results,
|
|
220
|
+
};
|
|
221
|
+
return nextAfterToolResult(executingState, result, effects, ctx);
|
|
222
|
+
}
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Child system prompt
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
/**
|
|
227
|
+
* Build a minimal system prompt for the child agent.
|
|
228
|
+
*
|
|
229
|
+
* The full parent prompt (30K+ chars of skills, knowledge, connection docs)
|
|
230
|
+
* is wasteful for a focused sub-task. The child gets a concise, task-scoped
|
|
231
|
+
* prompt listing only its available tools.
|
|
232
|
+
*/
|
|
233
|
+
function buildChildSystemPrompt(agentName, taskPrompt, toolNames) {
|
|
234
|
+
const toolList = toolNames.length > 0
|
|
235
|
+
? `\n\nAvailable tools: ${toolNames.join(', ')}`
|
|
236
|
+
: '';
|
|
237
|
+
return `You are "${agentName}", a sub-agent executing a delegated task. Complete the task and return a concise summary of your findings or actions.
|
|
238
|
+
|
|
239
|
+
Do not ask clarifying questions — work with what you have. If you cannot complete the task, explain what went wrong.${toolList}`;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=dispatching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatching.js","sourceRoot":"","sources":["../../../../src/agent/states/dispatching.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { SSEEvent } from '../../types.js';
|
|
7
|
+
import type { ToolDefinition } from '../../tools/types.js';
|
|
8
|
+
import type { ExecutingState, AgentContext, TransitionResult, ToolCall, ToolResult } from '../loop-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handle the EXECUTING state — execute a single tool call.
|
|
11
|
+
*/
|
|
12
|
+
export declare function handleExecuting(state: ExecutingState, ctx: AgentContext): Promise<TransitionResult>;
|
|
13
|
+
/**
|
|
14
|
+
* Execute a tool call, building the ToolContext from the AgentContext.
|
|
15
|
+
* Enforces a timeout via AbortSignal to prevent hanging on broken tools.
|
|
16
|
+
*/
|
|
17
|
+
export declare function executeTool(call: ToolCall, toolDef: ToolDefinition, ctx: AgentContext): Promise<unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* After a tool result: append to messages, then continue to next call or back to THINKING.
|
|
20
|
+
*/
|
|
21
|
+
export declare function nextAfterToolResult(state: ExecutingState, result: ToolResult, effects: SSEEvent[], ctx: AgentContext): TransitionResult;
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { SSEEventType } from '../../types.js';
|
|
7
|
+
import { estimateTokenCount } from '../token-estimate.js';
|
|
8
|
+
import { DISPATCH_TOOL_NAME } from '../../tools/dispatch-tool.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handle the EXECUTING state — execute a single tool call.
|
|
11
|
+
*/
|
|
12
|
+
export async function handleExecuting(state, ctx) {
|
|
13
|
+
const { current, queue } = state;
|
|
14
|
+
const effects = [];
|
|
15
|
+
const timestamp = new Date().toISOString();
|
|
16
|
+
// 1. Look up the tool
|
|
17
|
+
const toolDef = ctx.toolRegistry.get(current.toolName);
|
|
18
|
+
if (!toolDef) {
|
|
19
|
+
const result = {
|
|
20
|
+
callId: current.toolCallId,
|
|
21
|
+
toolName: current.toolName,
|
|
22
|
+
status: 'error',
|
|
23
|
+
content: `Tool "${current.toolName}" not found. Available tools: ${ctx.toolRegistry.names().join(', ')}`,
|
|
24
|
+
};
|
|
25
|
+
ctx.logger.warn('tool_not_found', {
|
|
26
|
+
tool: current.toolName,
|
|
27
|
+
session: ctx.sessionId,
|
|
28
|
+
});
|
|
29
|
+
return nextAfterToolResult(state, result, effects, ctx);
|
|
30
|
+
}
|
|
31
|
+
// 2. Validate args against schema (cheap guard against hallucinated params)
|
|
32
|
+
// Only for Zod schemas — FlexibleSchema (MCP/custom tools) uses jsonSchema()
|
|
33
|
+
// which is validated by the AI SDK at the provider level.
|
|
34
|
+
if ('safeParse' in toolDef.parameters) {
|
|
35
|
+
const validation = toolDef.parameters.safeParse(current.args);
|
|
36
|
+
if (!validation.success) {
|
|
37
|
+
const result = {
|
|
38
|
+
callId: current.toolCallId,
|
|
39
|
+
toolName: current.toolName,
|
|
40
|
+
status: 'error',
|
|
41
|
+
content: `Invalid parameters: ${validation.error.message}`,
|
|
42
|
+
};
|
|
43
|
+
ctx.logger.warn('tool_args_invalid', {
|
|
44
|
+
tool: current.toolName,
|
|
45
|
+
callId: current.toolCallId,
|
|
46
|
+
session: ctx.sessionId,
|
|
47
|
+
errors: validation.error.issues,
|
|
48
|
+
});
|
|
49
|
+
return nextAfterToolResult(state, result, effects, ctx);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 3. Check permissions
|
|
53
|
+
// Currently scoped to connection tools only — they have access.json ACLs
|
|
54
|
+
// with endpoint-level allow/deny/confirm rules. Store tools and admin tools
|
|
55
|
+
// have their own guards (read-only paths, blocked filenames, schema validation).
|
|
56
|
+
// TODO: generalize to any tool via a requiresConfirmation metadata flag on
|
|
57
|
+
// ToolDefinition so store/custom/admin tools can opt into the same gate.
|
|
58
|
+
if (toolDef.metadata?.category === 'connection' && toolDef.metadata.connection) {
|
|
59
|
+
const method = typeof current.args['method'] === 'string' ? current.args['method'] : 'GET';
|
|
60
|
+
const endpoint = typeof current.args['endpoint'] === 'string' ? current.args['endpoint'] : '/';
|
|
61
|
+
const rawIntent = current.args['intent'];
|
|
62
|
+
const intent = rawIntent === 'write' || rawIntent === 'confirmed_write' ? rawIntent : 'read';
|
|
63
|
+
const permResult = ctx.permissionChecker.check({
|
|
64
|
+
connection: toolDef.metadata.connection,
|
|
65
|
+
endpointPath: `${method} ${endpoint}`,
|
|
66
|
+
intent,
|
|
67
|
+
method,
|
|
68
|
+
params: current.args,
|
|
69
|
+
});
|
|
70
|
+
if (!permResult.allowed) {
|
|
71
|
+
const result = {
|
|
72
|
+
callId: current.toolCallId,
|
|
73
|
+
toolName: current.toolName,
|
|
74
|
+
status: 'error',
|
|
75
|
+
content: `Permission denied: ${permResult.reason}`,
|
|
76
|
+
};
|
|
77
|
+
ctx.logger.warn('tool_permission_denied', {
|
|
78
|
+
tool: current.toolName,
|
|
79
|
+
reason: permResult.reason,
|
|
80
|
+
session: ctx.sessionId,
|
|
81
|
+
});
|
|
82
|
+
return nextAfterToolResult(state, result, effects, ctx);
|
|
83
|
+
}
|
|
84
|
+
if (permResult.allowed && permResult.requiresConfirmation) {
|
|
85
|
+
return {
|
|
86
|
+
next: { type: 'confirming', call: current, remainingQueue: queue },
|
|
87
|
+
effects: [...effects, {
|
|
88
|
+
type: SSEEventType.ConfirmationRequired,
|
|
89
|
+
endpoint,
|
|
90
|
+
method,
|
|
91
|
+
reason: permResult.reason,
|
|
92
|
+
escalated: false,
|
|
93
|
+
timestamp,
|
|
94
|
+
}],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 4. Intercept dispatch_task — transition to DISPATCHING instead of executing
|
|
99
|
+
if (current.toolName === DISPATCH_TOOL_NAME) {
|
|
100
|
+
const args = current.args;
|
|
101
|
+
const rawTools = Array.isArray(args['tools']) ? args['tools'] : [];
|
|
102
|
+
const toolSubset = rawTools
|
|
103
|
+
.filter((t) => typeof t === 'string')
|
|
104
|
+
.filter((t) => t !== DISPATCH_TOOL_NAME);
|
|
105
|
+
effects.push({
|
|
106
|
+
type: SSEEventType.ToolCallStart,
|
|
107
|
+
tool_name: current.toolName,
|
|
108
|
+
tool_id: current.toolCallId,
|
|
109
|
+
parameters: sanitizeParams(current.args),
|
|
110
|
+
timestamp,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
next: {
|
|
114
|
+
type: 'dispatching',
|
|
115
|
+
task: {
|
|
116
|
+
agentName: String(args['agent_name'] ?? 'sub-agent'),
|
|
117
|
+
toolSubset,
|
|
118
|
+
prompt: String(args['prompt'] ?? ''),
|
|
119
|
+
maxTurns: typeof args['max_turns'] === 'number' ? args['max_turns'] : undefined,
|
|
120
|
+
},
|
|
121
|
+
toolCallId: current.toolCallId,
|
|
122
|
+
queue,
|
|
123
|
+
results: state.results,
|
|
124
|
+
},
|
|
125
|
+
effects,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// 5. Execute the tool
|
|
129
|
+
effects.push({
|
|
130
|
+
type: SSEEventType.ToolCallStart,
|
|
131
|
+
tool_name: current.toolName,
|
|
132
|
+
tool_id: current.toolCallId,
|
|
133
|
+
parameters: sanitizeParams(current.args),
|
|
134
|
+
timestamp,
|
|
135
|
+
});
|
|
136
|
+
const startedAt = Date.now();
|
|
137
|
+
let result;
|
|
138
|
+
try {
|
|
139
|
+
// Check pre-execution cache first (read-only tools started during streaming)
|
|
140
|
+
const cached = ctx.preExecutionCache.get(current.toolCallId);
|
|
141
|
+
const output = cached
|
|
142
|
+
? await cached
|
|
143
|
+
: await executeTool(current, toolDef, ctx);
|
|
144
|
+
const content = typeof output === 'string' ? output : JSON.stringify(output);
|
|
145
|
+
// Detect error-as-result pattern: tool returned {error: "..."} without throwing.
|
|
146
|
+
// This happens when tool internals catch errors and return them as data.
|
|
147
|
+
// Treat these as failures so the SSE event shows status: 'error'.
|
|
148
|
+
const isErrorResult = typeof output === 'object' && output !== null
|
|
149
|
+
&& 'error' in output && typeof output['error'] === 'string'
|
|
150
|
+
&& Object.keys(output).length === 1;
|
|
151
|
+
result = {
|
|
152
|
+
callId: current.toolCallId,
|
|
153
|
+
toolName: current.toolName,
|
|
154
|
+
status: isErrorResult ? 'error' : 'success',
|
|
155
|
+
content,
|
|
156
|
+
};
|
|
157
|
+
if (isErrorResult) {
|
|
158
|
+
ctx.logger.warn('tool_returned_error', {
|
|
159
|
+
tool: current.toolName,
|
|
160
|
+
callId: current.toolCallId,
|
|
161
|
+
error: output['error'],
|
|
162
|
+
session: ctx.sessionId,
|
|
163
|
+
duration: Date.now() - startedAt,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
// Tool execution failed — don't crash the loop, tell the model what happened
|
|
169
|
+
result = {
|
|
170
|
+
callId: current.toolCallId,
|
|
171
|
+
toolName: current.toolName,
|
|
172
|
+
status: 'error',
|
|
173
|
+
content: `Tool execution failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
174
|
+
};
|
|
175
|
+
ctx.logger.error('tool_execution_error', {
|
|
176
|
+
tool: current.toolName,
|
|
177
|
+
callId: current.toolCallId,
|
|
178
|
+
error: err instanceof Error ? err.message : String(err),
|
|
179
|
+
session: ctx.sessionId,
|
|
180
|
+
tenant: ctx.tenantId,
|
|
181
|
+
duration: Date.now() - startedAt,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const duration = Date.now() - startedAt;
|
|
185
|
+
effects.push({
|
|
186
|
+
type: SSEEventType.ToolCallResult,
|
|
187
|
+
tool_id: current.toolCallId,
|
|
188
|
+
status: result.status,
|
|
189
|
+
duration_ms: duration,
|
|
190
|
+
...(result.status === 'error' ? { error: result.content } : {}),
|
|
191
|
+
timestamp: new Date().toISOString(),
|
|
192
|
+
});
|
|
193
|
+
ctx.logger.info('tool_call', {
|
|
194
|
+
tool: current.toolName,
|
|
195
|
+
callId: current.toolCallId,
|
|
196
|
+
status: result.status,
|
|
197
|
+
session: ctx.sessionId,
|
|
198
|
+
tenant: ctx.tenantId,
|
|
199
|
+
duration,
|
|
200
|
+
});
|
|
201
|
+
return nextAfterToolResult(state, result, effects, ctx);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Execute a tool call, building the ToolContext from the AgentContext.
|
|
205
|
+
* Enforces a timeout via AbortSignal to prevent hanging on broken tools.
|
|
206
|
+
*/
|
|
207
|
+
export async function executeTool(call, toolDef, ctx) {
|
|
208
|
+
const toolCtx = ctx.buildToolContext(call.toolCallId);
|
|
209
|
+
// Combine session abort signal with a per-tool timeout.
|
|
210
|
+
// Mutate instead of spread — toolCtx.request() reads ctx.signal at call
|
|
211
|
+
// time, so the combined signal propagates to HTTP requests and other
|
|
212
|
+
// async operations inside the tool.
|
|
213
|
+
const timeoutSignal = AbortSignal.timeout(ctx.config.toolTimeoutMs);
|
|
214
|
+
toolCtx.signal = AbortSignal.any([ctx.signal, timeoutSignal]);
|
|
215
|
+
return toolDef.execute(call.args, toolCtx);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* After a tool result: append to messages, then continue to next call or back to THINKING.
|
|
219
|
+
*/
|
|
220
|
+
export function nextAfterToolResult(state, result, effects, ctx) {
|
|
221
|
+
// Smart snipping: if a tool result exceeds maxResultSize, keep the first
|
|
222
|
+
// and last 2K chars with a [snipped] marker in between. This preserves
|
|
223
|
+
// the beginning (usually headers/structure) and end (usually the answer)
|
|
224
|
+
// while cutting the middle bulk.
|
|
225
|
+
if (result.content.length > ctx.config.maxResultSize) {
|
|
226
|
+
const originalSize = result.content.length;
|
|
227
|
+
const keepChars = 2_000;
|
|
228
|
+
const head = result.content.slice(0, keepChars);
|
|
229
|
+
const tail = result.content.slice(-keepChars);
|
|
230
|
+
result = {
|
|
231
|
+
...result,
|
|
232
|
+
content: `${head}\n\n[... snipped ${originalSize - keepChars * 2} chars — full output was ${originalSize} chars ...]\n\n${tail}`,
|
|
233
|
+
};
|
|
234
|
+
ctx.logger.info('tool_result_snipped', {
|
|
235
|
+
callId: result.callId,
|
|
236
|
+
tool: result.toolName,
|
|
237
|
+
originalSize,
|
|
238
|
+
snippedTo: keepChars * 2,
|
|
239
|
+
session: ctx.sessionId,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// Append tool result message
|
|
243
|
+
const resultMessage = buildToolResultMessage(result);
|
|
244
|
+
ctx.messages = [...ctx.messages, resultMessage];
|
|
245
|
+
const allResults = [...state.results, result];
|
|
246
|
+
// More tool calls in the queue?
|
|
247
|
+
if (state.queue.length > 0) {
|
|
248
|
+
const [next, ...rest] = state.queue;
|
|
249
|
+
return {
|
|
250
|
+
next: {
|
|
251
|
+
type: 'executing',
|
|
252
|
+
queue: rest,
|
|
253
|
+
current: next,
|
|
254
|
+
results: allResults,
|
|
255
|
+
},
|
|
256
|
+
effects,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
// All tool calls done — check if context is heavy enough to compact
|
|
260
|
+
const estimatedTokens = estimateTokenCount(ctx.messages);
|
|
261
|
+
if (estimatedTokens > ctx.maxContextTokens * ctx.config.compactThreshold) {
|
|
262
|
+
ctx.logger.info('context_compaction_triggered', {
|
|
263
|
+
session: ctx.sessionId,
|
|
264
|
+
estimatedTokens,
|
|
265
|
+
maxContextTokens: ctx.maxContextTokens,
|
|
266
|
+
threshold: ctx.config.compactThreshold,
|
|
267
|
+
});
|
|
268
|
+
return {
|
|
269
|
+
next: { type: 'compacting', messages: ctx.messages, estimatedTokens },
|
|
270
|
+
effects,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// Context OK — back to THINKING for the next LLM turn
|
|
274
|
+
return {
|
|
275
|
+
next: { type: 'thinking', messages: ctx.messages },
|
|
276
|
+
effects,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Build a tool result message in AI SDK format.
|
|
281
|
+
*/
|
|
282
|
+
function buildToolResultMessage(result) {
|
|
283
|
+
return {
|
|
284
|
+
role: 'tool',
|
|
285
|
+
content: [{
|
|
286
|
+
type: 'tool-result',
|
|
287
|
+
toolCallId: result.callId,
|
|
288
|
+
toolName: result.toolName,
|
|
289
|
+
output: { type: 'text', value: result.content },
|
|
290
|
+
}],
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Strip sensitive fields from tool call parameters for SSE events.
|
|
295
|
+
*/
|
|
296
|
+
function sanitizeParams(params) {
|
|
297
|
+
const sanitized = {};
|
|
298
|
+
for (const [key, value] of Object.entries(params)) {
|
|
299
|
+
if (/token|secret|password|key|auth/i.test(key)) {
|
|
300
|
+
sanitized[key] = '[REDACTED]';
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
sanitized[key] = value;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return sanitized;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=executing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executing.js","sourceRoot":"","sources":["../../../../src/agent/states/executing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { StreamingState, AgentContext, TransitionResult } from '../loop-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Handle the STREAMING state.
|
|
9
|
+
*/
|
|
10
|
+
export declare function handleStreaming(state: StreamingState, ctx: AgentContext): Promise<TransitionResult>;
|