@amodalai/runtime 0.1.25 → 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/{agent/stores-e2e.test.d.ts → __tests__/providers.test.d.ts} +1 -1
- package/dist/src/__tests__/providers.test.js +209 -0
- package/dist/src/__tests__/providers.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/agent-types.d.ts +2 -2
- package/dist/src/agent/config-watcher.test.js +18 -14
- package/dist/src/agent/config-watcher.test.js.map +1 -1
- 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/local-server.test.js +17 -13
- package/dist/src/agent/local-server.test.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/{tool-context-builder.test.d.ts → loop.test.d.ts} +1 -1
- 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 +36 -33
- 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 -17
- package/dist/src/agent/routes/admin-chat.js.map +1 -1
- package/dist/src/agent/routes/automations.js +5 -4
- 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 -11
- package/dist/src/agent/routes/evals.js.map +1 -1
- package/dist/src/agent/routes/files.js +7 -6
- 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 +32 -15
- 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 -8
- 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 -6
- 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 -2
- 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/config.d.ts +96 -0
- package/dist/src/config.js +221 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/{agent/custom-tools-e2e.test.d.ts → config.test.d.ts} +1 -1
- package/dist/src/config.test.js +235 -0
- package/dist/src/config.test.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.d.ts +6 -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/errors.d.ts +145 -0
- package/dist/src/errors.js +218 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/errors.test.d.ts +6 -0
- package/dist/src/errors.test.js +203 -0
- package/dist/src/errors.test.js.map +1 -0
- package/dist/src/index.d.ts +38 -6
- package/dist/src/index.js +40 -22
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger.d.ts +15 -31
- package/dist/src/logger.js +19 -78
- package/dist/src/logger.js.map +1 -1
- package/dist/src/logger.test.d.ts +6 -0
- package/dist/src/logger.test.js +198 -0
- package/dist/src/logger.test.js.map +1 -0
- 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/providers/create-provider.test.d.ts +6 -0
- 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 -38
- 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 -27
- 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 -22
- 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 -2
- 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 -140
- 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 -233
- 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 -3
- 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.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.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 -451
- 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 -830
- package/dist/src/session/session-runner.test.js.map +0 -1
- /package/dist/src/{agent/write-repo-file.test.d.ts → __fixtures__/smoke.test.d.ts} +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* STREAMING state handler.
|
|
8
|
+
*
|
|
9
|
+
* Consumes the provider's fullStream, emits text deltas to the client,
|
|
10
|
+
* collects tool calls, and tracks token usage. Pre-executes read-only
|
|
11
|
+
* tools while the LLM might still be generating.
|
|
12
|
+
*
|
|
13
|
+
* Transitions:
|
|
14
|
+
* - No tool calls → DONE (model_stop)
|
|
15
|
+
* - Tool calls collected → EXECUTING
|
|
16
|
+
* - Stream error → DONE (error)
|
|
17
|
+
*/
|
|
18
|
+
import { SSEEventType } from '../../types.js';
|
|
19
|
+
import { executeTool } from './executing.js';
|
|
20
|
+
/**
|
|
21
|
+
* Handle the STREAMING state.
|
|
22
|
+
*/
|
|
23
|
+
export async function handleStreaming(state, ctx) {
|
|
24
|
+
const effects = [];
|
|
25
|
+
const toolCalls = [...state.pendingToolCalls];
|
|
26
|
+
// Consume the full stream
|
|
27
|
+
for await (const event of state.stream.fullStream) {
|
|
28
|
+
if (ctx.signal.aborted)
|
|
29
|
+
break;
|
|
30
|
+
switch (event.type) {
|
|
31
|
+
case 'text-delta': {
|
|
32
|
+
effects.push({
|
|
33
|
+
type: SSEEventType.TextDelta,
|
|
34
|
+
content: event.textDelta,
|
|
35
|
+
timestamp: new Date().toISOString(),
|
|
36
|
+
});
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
case 'tool-call': {
|
|
40
|
+
const call = {
|
|
41
|
+
toolCallId: event.toolCallId,
|
|
42
|
+
toolName: event.toolName,
|
|
43
|
+
args: event.args,
|
|
44
|
+
};
|
|
45
|
+
toolCalls.push(call);
|
|
46
|
+
// Pre-execute read-only tools while the model might still be generating
|
|
47
|
+
const toolDef = ctx.toolRegistry.get(event.toolName);
|
|
48
|
+
if (toolDef?.readOnly) {
|
|
49
|
+
const promise = executeTool(call, toolDef, ctx);
|
|
50
|
+
// Log but suppress rejection — errors are re-surfaced when awaited in EXECUTING.
|
|
51
|
+
// Without this, abort before reaching EXECUTING causes unhandled rejection.
|
|
52
|
+
promise.catch((err) => {
|
|
53
|
+
ctx.logger.debug('preexec_suppressed', {
|
|
54
|
+
tool: event.toolName,
|
|
55
|
+
callId: event.toolCallId,
|
|
56
|
+
error: err instanceof Error ? err.message : String(err),
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
ctx.preExecutionCache.set(event.toolCallId, promise);
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 'finish': {
|
|
64
|
+
// Track token usage
|
|
65
|
+
const usage = event.usage;
|
|
66
|
+
ctx.usage.inputTokens += usage.inputTokens;
|
|
67
|
+
ctx.usage.outputTokens += usage.outputTokens;
|
|
68
|
+
ctx.usage.totalTokens += usage.inputTokens + usage.outputTokens;
|
|
69
|
+
if (usage.cachedInputTokens) {
|
|
70
|
+
ctx.usage.cachedInputTokens = (ctx.usage.cachedInputTokens ?? 0) + usage.cachedInputTokens;
|
|
71
|
+
}
|
|
72
|
+
if (usage.cacheCreationInputTokens) {
|
|
73
|
+
ctx.usage.cacheCreationInputTokens = (ctx.usage.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;
|
|
74
|
+
}
|
|
75
|
+
// Fire onUsage hook (billing, metering)
|
|
76
|
+
if (ctx.onUsage) {
|
|
77
|
+
ctx.onUsage({
|
|
78
|
+
inputTokens: usage.inputTokens,
|
|
79
|
+
outputTokens: usage.outputTokens,
|
|
80
|
+
cachedInputTokens: usage.cachedInputTokens ?? 0,
|
|
81
|
+
cacheCreationInputTokens: usage.cacheCreationInputTokens ?? 0,
|
|
82
|
+
totalTokens: usage.inputTokens + usage.outputTokens,
|
|
83
|
+
turnNumber: ctx.turnCount,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 'tool-result':
|
|
89
|
+
// We don't pass execute functions to the AI SDK, so tool-result events
|
|
90
|
+
// should not arrive. If they do (provider auto-execution), ignore them —
|
|
91
|
+
// we handle tool execution ourselves in EXECUTING state.
|
|
92
|
+
break;
|
|
93
|
+
case 'error': {
|
|
94
|
+
ctx.logger.error('provider_stream_error', {
|
|
95
|
+
session: ctx.sessionId,
|
|
96
|
+
error: event.error instanceof Error ? event.error.message : String(event.error),
|
|
97
|
+
turn: ctx.turnCount,
|
|
98
|
+
});
|
|
99
|
+
effects.push({
|
|
100
|
+
type: SSEEventType.Error,
|
|
101
|
+
message: event.error instanceof Error ? event.error.message : String(event.error),
|
|
102
|
+
timestamp: new Date().toISOString(),
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
next: { type: 'done', usage: { ...ctx.usage }, reason: 'error' },
|
|
106
|
+
effects,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
default:
|
|
110
|
+
// Future stream event types — skip
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Append assistant message to conversation (text + tool calls)
|
|
115
|
+
const text = await state.stream.text;
|
|
116
|
+
const assistantMessage = buildAssistantMessage(text, toolCalls);
|
|
117
|
+
ctx.messages = [...ctx.messages, assistantMessage];
|
|
118
|
+
// No tool calls → model is done
|
|
119
|
+
if (toolCalls.length === 0) {
|
|
120
|
+
return {
|
|
121
|
+
next: { type: 'done', usage: { ...ctx.usage }, reason: 'model_stop' },
|
|
122
|
+
effects,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Tool calls → transition to EXECUTING
|
|
126
|
+
const [first, ...rest] = toolCalls;
|
|
127
|
+
return {
|
|
128
|
+
next: { type: 'executing', queue: rest, current: first, results: [] },
|
|
129
|
+
effects,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build a ModelMessage for the assistant's response.
|
|
134
|
+
*/
|
|
135
|
+
function buildAssistantMessage(text, toolCalls) {
|
|
136
|
+
// If text only, use string content shorthand
|
|
137
|
+
if (toolCalls.length === 0) {
|
|
138
|
+
return { role: 'assistant', content: text };
|
|
139
|
+
}
|
|
140
|
+
// Mix of text + tool calls — use content array
|
|
141
|
+
const content = [];
|
|
142
|
+
if (text) {
|
|
143
|
+
content.push({ type: 'text', text });
|
|
144
|
+
}
|
|
145
|
+
for (const call of toolCalls) {
|
|
146
|
+
content.push({
|
|
147
|
+
type: 'tool-call',
|
|
148
|
+
toolCallId: call.toolCallId,
|
|
149
|
+
toolName: call.toolName,
|
|
150
|
+
input: call.args,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return { role: 'assistant', content };
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=streaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../../src/agent/states/streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { ThinkingState, AgentContext, TransitionResult } from '../loop-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Handle the THINKING state.
|
|
9
|
+
*
|
|
10
|
+
* Increments turnCount, checks for loops, clears old results,
|
|
11
|
+
* then initiates a streaming LLM call.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleThinking(state: ThinkingState, ctx: AgentContext): TransitionResult;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { SSEEventType } from '../../types.js';
|
|
7
|
+
/** Sentinel values for cleared tool results. */
|
|
8
|
+
const CLEARED_TOOL_CALL_ID = 'cleared';
|
|
9
|
+
const CLEARED_TOOL_NAME = 'cleared';
|
|
10
|
+
const CLEARED_TOOL_RESULT_TEXT = '[Tool result cleared to save context space]';
|
|
11
|
+
/**
|
|
12
|
+
* Handle the THINKING state.
|
|
13
|
+
*
|
|
14
|
+
* Increments turnCount, checks for loops, clears old results,
|
|
15
|
+
* then initiates a streaming LLM call.
|
|
16
|
+
*/
|
|
17
|
+
export function handleThinking(state, ctx) {
|
|
18
|
+
const effects = [];
|
|
19
|
+
// 1. Increment turn counter
|
|
20
|
+
ctx.turnCount++;
|
|
21
|
+
// 2. Loop detection — check before spending tokens on an LLM call
|
|
22
|
+
const loop = detectLoop(state.messages);
|
|
23
|
+
if (loop && loop.count >= ctx.config.maxLoopIterations) {
|
|
24
|
+
ctx.logger.warn('agent_loop_detected', {
|
|
25
|
+
session: ctx.sessionId,
|
|
26
|
+
tool: loop.toolName,
|
|
27
|
+
count: loop.count,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
next: { type: 'done', usage: { ...ctx.usage }, reason: 'loop_detected' },
|
|
31
|
+
effects: [{
|
|
32
|
+
type: SSEEventType.Error,
|
|
33
|
+
message: `Agent stuck in a loop: ${loop.toolName} called ${loop.count} times with similar parameters`,
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
}],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
let messages = state.messages;
|
|
39
|
+
if (loop && loop.count >= ctx.config.loopWarningThreshold) {
|
|
40
|
+
ctx.logger.info('agent_loop_warning', {
|
|
41
|
+
session: ctx.sessionId,
|
|
42
|
+
tool: loop.toolName,
|
|
43
|
+
count: loop.count,
|
|
44
|
+
});
|
|
45
|
+
const warningMessage = {
|
|
46
|
+
role: 'system',
|
|
47
|
+
content: `[Warning] You have called ${loop.toolName} ${loop.count} times with similar parameters. Try a different approach.`,
|
|
48
|
+
};
|
|
49
|
+
messages = [...messages, warningMessage];
|
|
50
|
+
}
|
|
51
|
+
// 3. Clear old tool result bodies — keep last N full, replace older with summaries
|
|
52
|
+
// Prevents unbounded context growth in tool-heavy sessions.
|
|
53
|
+
messages = clearOldToolResults(messages, ctx.config.clearThreshold, ctx.config.keepRecentResults);
|
|
54
|
+
// 4. Build tool schemas for the AI SDK (strip execute functions — we handle
|
|
55
|
+
// execution ourselves in EXECUTING state with permission checks, SSE events, etc.)
|
|
56
|
+
// AI SDK v6 uses `inputSchema`, not `parameters`.
|
|
57
|
+
const allTools = ctx.toolRegistry.getTools();
|
|
58
|
+
const tools = {};
|
|
59
|
+
for (const [name, def] of Object.entries(allTools)) {
|
|
60
|
+
// ToolDefinition.parameters is either a Zod schema or FlexibleSchema —
|
|
61
|
+
// both are accepted by AI SDK as inputSchema.
|
|
62
|
+
tools[name] = {
|
|
63
|
+
description: def.description,
|
|
64
|
+
inputSchema: def.parameters,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
ctx.logger.debug('agent_thinking_start', {
|
|
68
|
+
session: ctx.sessionId,
|
|
69
|
+
turn: ctx.turnCount,
|
|
70
|
+
messageCount: messages.length,
|
|
71
|
+
toolCount: Object.keys(tools).length,
|
|
72
|
+
});
|
|
73
|
+
// 5. Start streaming LLM call
|
|
74
|
+
const result = ctx.provider.streamText({
|
|
75
|
+
messages,
|
|
76
|
+
system: ctx.systemPrompt,
|
|
77
|
+
tools,
|
|
78
|
+
maxOutputTokens: ctx.config.maxOutputTokens,
|
|
79
|
+
abortSignal: ctx.signal,
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
next: { type: 'streaming', stream: result, pendingToolCalls: [] },
|
|
83
|
+
effects,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Detect repeated tool calls in recent message history.
|
|
88
|
+
*
|
|
89
|
+
* Scans the last 16 messages for assistant tool-call content parts.
|
|
90
|
+
* Groups calls by tool name and checks for parameter similarity.
|
|
91
|
+
* A tool is considered looping when it has 3+ calls with similar
|
|
92
|
+
* parameters (same keys, same or similar values).
|
|
93
|
+
*/
|
|
94
|
+
function detectLoop(messages) {
|
|
95
|
+
const recentMessages = messages.slice(-16);
|
|
96
|
+
// Collect tool calls with their serialized args for similarity checking
|
|
97
|
+
const callsByTool = new Map();
|
|
98
|
+
for (const msg of recentMessages) {
|
|
99
|
+
if (msg.role !== 'assistant' || typeof msg.content === 'string')
|
|
100
|
+
continue;
|
|
101
|
+
if (!Array.isArray(msg.content))
|
|
102
|
+
continue;
|
|
103
|
+
for (const part of msg.content) {
|
|
104
|
+
if ('type' in part && part.type === 'tool-call' && 'toolName' in part) {
|
|
105
|
+
const name = part.toolName;
|
|
106
|
+
const args = 'input' in part ? JSON.stringify(part.input) : '{}';
|
|
107
|
+
const existing = callsByTool.get(name) ?? [];
|
|
108
|
+
existing.push(args);
|
|
109
|
+
callsByTool.set(name, existing);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Find the most repeated tool with similar parameters
|
|
114
|
+
let maxTool = null;
|
|
115
|
+
let maxCount = 0;
|
|
116
|
+
for (const [name, argsList] of callsByTool) {
|
|
117
|
+
// Count how many calls share similar parameters.
|
|
118
|
+
// Group by serialized args — exact duplicates are obvious loops.
|
|
119
|
+
// Also count near-duplicates where only values differ slightly.
|
|
120
|
+
const similarCount = countSimilarCalls(argsList);
|
|
121
|
+
if (similarCount > maxCount) {
|
|
122
|
+
maxTool = name;
|
|
123
|
+
maxCount = similarCount;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (maxTool && maxCount >= 3) {
|
|
127
|
+
return { toolName: maxTool, count: maxCount };
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Count the size of the largest group of similar argument sets.
|
|
133
|
+
*
|
|
134
|
+
* Two arg sets are "similar" if they share the same keys and at least
|
|
135
|
+
* half their values are identical. This catches loops where the agent
|
|
136
|
+
* retries with slightly different parameters (e.g., changing a page number
|
|
137
|
+
* but keeping everything else the same).
|
|
138
|
+
*/
|
|
139
|
+
function countSimilarCalls(argsList) {
|
|
140
|
+
if (argsList.length <= 2)
|
|
141
|
+
return argsList.length;
|
|
142
|
+
// Fast path: if most are exact duplicates, just count those
|
|
143
|
+
const counts = new Map();
|
|
144
|
+
for (const args of argsList) {
|
|
145
|
+
counts.set(args, (counts.get(args) ?? 0) + 1);
|
|
146
|
+
}
|
|
147
|
+
const maxExact = Math.max(...counts.values());
|
|
148
|
+
if (maxExact >= 3)
|
|
149
|
+
return maxExact;
|
|
150
|
+
// Slow path: parse and compare keys/values for similarity
|
|
151
|
+
const parsed = [];
|
|
152
|
+
for (const args of argsList) {
|
|
153
|
+
try {
|
|
154
|
+
const obj = JSON.parse(args);
|
|
155
|
+
if (typeof obj === 'object' && obj !== null && !Array.isArray(obj)) {
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON.parse returns unknown; narrowed to non-null non-array object above
|
|
157
|
+
parsed.push(obj);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Unparseable — treat each as unique
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (parsed.length <= 2)
|
|
165
|
+
return argsList.length;
|
|
166
|
+
// Group by key set, then check value similarity within groups
|
|
167
|
+
const byKeys = new Map();
|
|
168
|
+
for (const obj of parsed) {
|
|
169
|
+
const keyStr = Object.keys(obj).sort().join(',');
|
|
170
|
+
const group = byKeys.get(keyStr) ?? [];
|
|
171
|
+
group.push(obj);
|
|
172
|
+
byKeys.set(keyStr, group);
|
|
173
|
+
}
|
|
174
|
+
let largestSimilarGroup = 0;
|
|
175
|
+
for (const group of byKeys.values()) {
|
|
176
|
+
if (group.length < 3)
|
|
177
|
+
continue;
|
|
178
|
+
// Within a key group, count pairs with >50% identical values
|
|
179
|
+
// Use first element as reference and count how many are similar to it
|
|
180
|
+
const ref = group[0];
|
|
181
|
+
const keys = Object.keys(ref);
|
|
182
|
+
let similarToRef = 1;
|
|
183
|
+
for (let i = 1; i < group.length; i++) {
|
|
184
|
+
const matching = keys.filter((k) => JSON.stringify(ref[k]) === JSON.stringify(group[i][k]));
|
|
185
|
+
if (matching.length >= keys.length / 2) {
|
|
186
|
+
similarToRef++;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
largestSimilarGroup = Math.max(largestSimilarGroup, similarToRef);
|
|
190
|
+
}
|
|
191
|
+
return Math.max(maxExact, largestSimilarGroup);
|
|
192
|
+
}
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
// Tool result clearing
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
/**
|
|
197
|
+
* Replace old tool result bodies with one-line summaries.
|
|
198
|
+
*
|
|
199
|
+
* If there are more than `threshold` tool result messages, keep the last
|
|
200
|
+
* `keepRecent` full and replace older ones with "[Tool result cleared]".
|
|
201
|
+
* TODO: replace the marker with an actual LLM-generated summary of the
|
|
202
|
+
* cleared content.
|
|
203
|
+
*/
|
|
204
|
+
function clearOldToolResults(messages, threshold, keepRecent) {
|
|
205
|
+
// Count tool result messages
|
|
206
|
+
const toolResultIndices = [];
|
|
207
|
+
for (let i = 0; i < messages.length; i++) {
|
|
208
|
+
const msg = messages[i];
|
|
209
|
+
if (msg.role === 'tool') {
|
|
210
|
+
toolResultIndices.push(i);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (toolResultIndices.length <= threshold) {
|
|
214
|
+
return messages;
|
|
215
|
+
}
|
|
216
|
+
// Keep the last `keepRecent` tool results full, clear the rest
|
|
217
|
+
const indicesToClear = toolResultIndices.slice(0, -keepRecent);
|
|
218
|
+
const result = [...messages];
|
|
219
|
+
for (const idx of indicesToClear) {
|
|
220
|
+
const cleared = {
|
|
221
|
+
role: 'tool',
|
|
222
|
+
content: [{
|
|
223
|
+
type: 'tool-result',
|
|
224
|
+
toolCallId: CLEARED_TOOL_CALL_ID,
|
|
225
|
+
toolName: CLEARED_TOOL_NAME,
|
|
226
|
+
output: { type: 'text', value: CLEARED_TOOL_RESULT_TEXT },
|
|
227
|
+
}],
|
|
228
|
+
};
|
|
229
|
+
result[idx] = cleared;
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=thinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../../../src/agent/states/thinking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Rough token estimation from message arrays.
|
|
8
|
+
*
|
|
9
|
+
* Uses a ~4 chars per token heuristic (JSON serialized). This is a
|
|
10
|
+
* placeholder — a future improvement would use the provider's tokenizer
|
|
11
|
+
* or a local tiktoken instance for accurate counts.
|
|
12
|
+
*/
|
|
13
|
+
import type { ModelMessage } from 'ai';
|
|
14
|
+
/**
|
|
15
|
+
* Rough token estimate from a message array. ~4 chars per token.
|
|
16
|
+
*/
|
|
17
|
+
export declare function estimateTokenCount(messages: ModelMessage[]): number;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Rough token estimate from a message array. ~4 chars per token.
|
|
8
|
+
*/
|
|
9
|
+
export function estimateTokenCount(messages) {
|
|
10
|
+
const serialized = JSON.stringify(messages);
|
|
11
|
+
return Math.ceil(serialized.length / 4);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=token-estimate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-estimate.js","sourceRoot":"","sources":["../../../src/agent/token-estimate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAwB;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -12,26 +12,17 @@ import { mkdirSync } from 'node:fs';
|
|
|
12
12
|
export class LocalToolExecutor {
|
|
13
13
|
handlerCache = new Map();
|
|
14
14
|
async execute(tool, params, ctx) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return { result: null };
|
|
22
|
-
}
|
|
23
|
-
if (typeof result !== 'object' || Array.isArray(result)) {
|
|
24
|
-
return { result };
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
15
|
+
const handler = await this.loadHandler(tool);
|
|
16
|
+
const fn = resolveHandlerFn(handler, tool.name);
|
|
17
|
+
const result = await fn(params, ctx);
|
|
18
|
+
// Wrap non-object results
|
|
19
|
+
if (result === null || result === undefined) {
|
|
20
|
+
return { result: null };
|
|
27
21
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return { error: 'Tool execution aborted' };
|
|
31
|
-
}
|
|
32
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
-
return { error: message };
|
|
22
|
+
if (typeof result !== 'object' || Array.isArray(result)) {
|
|
23
|
+
return { result };
|
|
34
24
|
}
|
|
25
|
+
return result;
|
|
35
26
|
}
|
|
36
27
|
dispose() {
|
|
37
28
|
this.handlerCache.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor-local.js","sourceRoot":"","sources":["../../../src/agent/tool-executor-local.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AASlC;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACX,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjE,KAAK,CAAC,OAAO,CACX,IAAgB,EAChB,MAA+B,EAC/B,GAAsB;QAEtB,
|
|
1
|
+
{"version":3,"file":"tool-executor-local.js","sourceRoot":"","sources":["../../../src/agent/tool-executor-local.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,11 +80,10 @@ describe('LocalToolExecutor', () => {
|
|
|
80
80
|
const result = await executor.execute(tool, {}, makeCtx());
|
|
81
81
|
expect(result).toEqual({ result: [1, 2, 3] });
|
|
82
82
|
});
|
|
83
|
-
it('
|
|
83
|
+
it('propagates handler errors', async () => {
|
|
84
84
|
const handlerPath = createHandler('err-handler', 'export default async () => { throw new Error("boom"); };');
|
|
85
85
|
const tool = makeTool(handlerPath);
|
|
86
|
-
|
|
87
|
-
expect(result).toEqual({ error: 'boom' });
|
|
86
|
+
await expect(executor.execute(tool, {}, makeCtx())).rejects.toThrow('boom');
|
|
88
87
|
});
|
|
89
88
|
it('caches imported modules', async () => {
|
|
90
89
|
const handlerPath = createHandler('cache-handler', 'let count = 0; export default async () => ({ count: ++count });');
|
|
@@ -110,8 +109,7 @@ describe('LocalToolExecutor', () => {
|
|
|
110
109
|
it('throws for handler without default export', async () => {
|
|
111
110
|
const handlerPath = createHandler('no-default', 'export const handler = async () => ({});');
|
|
112
111
|
const tool = makeTool(handlerPath);
|
|
113
|
-
|
|
114
|
-
expect(result).toHaveProperty('error');
|
|
112
|
+
await expect(executor.execute(tool, {}, makeCtx())).rejects.toThrow();
|
|
115
113
|
});
|
|
116
114
|
});
|
|
117
115
|
//# sourceMappingURL=tool-executor-local.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor-local.test.js","sourceRoot":"","sources":["../../../src/agent/tool-executor-local.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-executor-local.test.js","sourceRoot":"","sources":["../../../src/agent/tool-executor-local.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { Agent, AgentConfig } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create a running agent from a repo path or pre-loaded bundle.
|
|
9
|
+
*
|
|
10
|
+
* This is the main entry point for programmatic use of the Amodal runtime.
|
|
11
|
+
* It loads the agent configuration, initializes stores, MCP connections,
|
|
12
|
+
* and the session manager, then returns an Agent handle for creating
|
|
13
|
+
* sessions and streaming messages.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createAgent(config: AgentConfig): Promise<Agent>;
|