@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.
Files changed (367) hide show
  1. package/dist/src/__fixtures__/README.md +84 -0
  2. package/dist/src/__fixtures__/smoke-agent/amodal.json +11 -0
  3. package/dist/src/__fixtures__/smoke-agent/automations/test-auto.md +5 -0
  4. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/access.json +11 -0
  5. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/spec.json +4 -0
  6. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/surface.md +9 -0
  7. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/access.json +3 -0
  8. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/spec.json +8 -0
  9. package/dist/src/__fixtures__/smoke-agent/evals/basic-eval.md +12 -0
  10. package/dist/src/__fixtures__/smoke-agent/knowledge/test-knowledge.md +3 -0
  11. package/dist/src/__fixtures__/smoke-agent/skills/test-skill/SKILL.md +11 -0
  12. package/dist/src/__fixtures__/smoke-agent/stores/test-items.json +11 -0
  13. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.d.ts +18 -0
  14. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js +22 -0
  15. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js.map +1 -0
  16. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/tool.json +17 -0
  17. package/dist/src/__fixtures__/smoke.test.js +718 -0
  18. package/dist/src/__fixtures__/smoke.test.js.map +1 -0
  19. package/dist/src/{agent/stores-e2e.test.d.ts → __tests__/providers.test.d.ts} +1 -1
  20. package/dist/src/__tests__/providers.test.js +209 -0
  21. package/dist/src/__tests__/providers.test.js.map +1 -0
  22. package/dist/src/__tests__/test-providers.d.ts +40 -0
  23. package/dist/src/__tests__/test-providers.js +61 -0
  24. package/dist/src/__tests__/test-providers.js.map +1 -0
  25. package/dist/src/agent/agent-types.d.ts +2 -2
  26. package/dist/src/agent/config-watcher.test.js +18 -14
  27. package/dist/src/agent/config-watcher.test.js.map +1 -1
  28. package/dist/src/agent/local-server.d.ts +3 -3
  29. package/dist/src/agent/local-server.js +213 -122
  30. package/dist/src/agent/local-server.js.map +1 -1
  31. package/dist/src/agent/local-server.test.js +17 -13
  32. package/dist/src/agent/local-server.test.js.map +1 -1
  33. package/dist/src/agent/loop-types.d.ts +175 -0
  34. package/dist/src/agent/loop-types.js +20 -0
  35. package/dist/src/agent/loop-types.js.map +1 -0
  36. package/dist/src/agent/loop.d.ts +31 -0
  37. package/dist/src/agent/loop.js +139 -0
  38. package/dist/src/agent/loop.js.map +1 -0
  39. package/dist/src/agent/{tool-context-builder.test.d.ts → loop.test.d.ts} +1 -1
  40. package/dist/src/agent/loop.test.js +1030 -0
  41. package/dist/src/agent/loop.test.js.map +1 -0
  42. package/dist/src/agent/mcp-config.d.ts +28 -0
  43. package/dist/src/agent/mcp-config.js +57 -0
  44. package/dist/src/agent/mcp-config.js.map +1 -0
  45. package/dist/src/agent/page-builder.js +6 -1
  46. package/dist/src/agent/page-builder.js.map +1 -1
  47. package/dist/src/agent/proactive/proactive-runner.d.ts +24 -8
  48. package/dist/src/agent/proactive/proactive-runner.js +36 -33
  49. package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
  50. package/dist/src/agent/proactive/proactive-runner.test.d.ts +1 -1
  51. package/dist/src/agent/proactive/proactive-runner.test.js +75 -87
  52. package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -1
  53. package/dist/src/agent/routes/admin-chat.d.ts +15 -3
  54. package/dist/src/agent/routes/admin-chat.js +63 -17
  55. package/dist/src/agent/routes/admin-chat.js.map +1 -1
  56. package/dist/src/agent/routes/automations.js +5 -4
  57. package/dist/src/agent/routes/automations.js.map +1 -1
  58. package/dist/src/agent/routes/evals.d.ts +3 -2
  59. package/dist/src/agent/routes/evals.js +25 -11
  60. package/dist/src/agent/routes/evals.js.map +1 -1
  61. package/dist/src/agent/routes/files.js +7 -6
  62. package/dist/src/agent/routes/files.js.map +1 -1
  63. package/dist/src/agent/routes/inspect.d.ts +6 -2
  64. package/dist/src/agent/routes/inspect.js +32 -15
  65. package/dist/src/agent/routes/inspect.js.map +1 -1
  66. package/dist/src/agent/routes/inspect.test.js +18 -42
  67. package/dist/src/agent/routes/inspect.test.js.map +1 -1
  68. package/dist/src/agent/routes/stores.js +9 -8
  69. package/dist/src/agent/routes/stores.js.map +1 -1
  70. package/dist/src/agent/routes/task.d.ts +15 -3
  71. package/dist/src/agent/routes/task.js +16 -6
  72. package/dist/src/agent/routes/task.js.map +1 -1
  73. package/dist/src/agent/routes/task.test.d.ts +1 -1
  74. package/dist/src/agent/routes/task.test.js +70 -53
  75. package/dist/src/agent/routes/task.test.js.map +1 -1
  76. package/dist/src/agent/routes/webhooks.js +12 -2
  77. package/dist/src/agent/routes/webhooks.js.map +1 -1
  78. package/dist/src/agent/session-store.d.ts +11 -2
  79. package/dist/src/agent/session-store.js +1 -1
  80. package/dist/src/agent/session-store.js.map +1 -1
  81. package/dist/src/agent/snapshot-server.d.ts +2 -22
  82. package/dist/src/agent/snapshot-server.js +50 -27
  83. package/dist/src/agent/snapshot-server.js.map +1 -1
  84. package/dist/src/agent/states/compacting.d.ts +14 -0
  85. package/dist/src/agent/states/compacting.js +258 -0
  86. package/dist/src/agent/states/compacting.js.map +1 -0
  87. package/dist/src/agent/states/confirming.d.ts +10 -0
  88. package/dist/src/agent/states/confirming.js +76 -0
  89. package/dist/src/agent/states/confirming.js.map +1 -0
  90. package/dist/src/agent/states/dispatching.d.ts +18 -0
  91. package/dist/src/agent/states/dispatching.js +241 -0
  92. package/dist/src/agent/states/dispatching.js.map +1 -0
  93. package/dist/src/agent/states/executing.d.ts +21 -0
  94. package/dist/src/agent/states/executing.js +308 -0
  95. package/dist/src/agent/states/executing.js.map +1 -0
  96. package/dist/src/agent/states/streaming.d.ts +10 -0
  97. package/dist/src/agent/states/streaming.js +155 -0
  98. package/dist/src/agent/states/streaming.js.map +1 -0
  99. package/dist/src/agent/states/thinking.d.ts +13 -0
  100. package/dist/src/agent/states/thinking.js +233 -0
  101. package/dist/src/agent/states/thinking.js.map +1 -0
  102. package/dist/src/agent/token-estimate.d.ts +17 -0
  103. package/dist/src/agent/token-estimate.js +13 -0
  104. package/dist/src/agent/token-estimate.js.map +1 -0
  105. package/dist/src/agent/tool-executor-local.js +9 -18
  106. package/dist/src/agent/tool-executor-local.js.map +1 -1
  107. package/dist/src/agent/tool-executor-local.test.js +3 -5
  108. package/dist/src/agent/tool-executor-local.test.js.map +1 -1
  109. package/dist/src/api/create-agent.d.ts +15 -0
  110. package/dist/src/api/create-agent.js +137 -0
  111. package/dist/src/api/create-agent.js.map +1 -0
  112. package/dist/src/api/types.d.ts +68 -0
  113. package/dist/src/api/types.js +7 -0
  114. package/dist/src/api/types.js.map +1 -0
  115. package/dist/src/config.d.ts +96 -0
  116. package/dist/src/config.js +221 -0
  117. package/dist/src/config.js.map +1 -0
  118. package/dist/src/{agent/custom-tools-e2e.test.d.ts → config.test.d.ts} +1 -1
  119. package/dist/src/config.test.js +235 -0
  120. package/dist/src/config.test.js.map +1 -0
  121. package/dist/src/context/compiler.d.ts +13 -0
  122. package/dist/src/context/compiler.js +358 -0
  123. package/dist/src/context/compiler.js.map +1 -0
  124. package/dist/src/context/compiler.test.d.ts +6 -0
  125. package/dist/src/context/compiler.test.js +532 -0
  126. package/dist/src/context/compiler.test.js.map +1 -0
  127. package/dist/src/context/types.d.ts +110 -0
  128. package/dist/src/context/types.js +7 -0
  129. package/dist/src/context/types.js.map +1 -0
  130. package/dist/src/errors.d.ts +145 -0
  131. package/dist/src/errors.js +218 -0
  132. package/dist/src/errors.js.map +1 -0
  133. package/dist/src/errors.test.d.ts +6 -0
  134. package/dist/src/errors.test.js +203 -0
  135. package/dist/src/errors.test.js.map +1 -0
  136. package/dist/src/index.d.ts +38 -6
  137. package/dist/src/index.js +40 -22
  138. package/dist/src/index.js.map +1 -1
  139. package/dist/src/logger.d.ts +15 -31
  140. package/dist/src/logger.js +19 -78
  141. package/dist/src/logger.js.map +1 -1
  142. package/dist/src/logger.test.d.ts +6 -0
  143. package/dist/src/logger.test.js +198 -0
  144. package/dist/src/logger.test.js.map +1 -0
  145. package/dist/src/providers/create-provider.d.ts +23 -0
  146. package/dist/src/providers/create-provider.js +185 -0
  147. package/dist/src/providers/create-provider.js.map +1 -0
  148. package/dist/src/providers/create-provider.test.d.ts +6 -0
  149. package/dist/src/providers/create-provider.test.js +95 -0
  150. package/dist/src/providers/create-provider.test.js.map +1 -0
  151. package/dist/src/providers/failover.d.ts +38 -0
  152. package/dist/src/providers/failover.js +147 -0
  153. package/dist/src/providers/failover.js.map +1 -0
  154. package/dist/src/providers/failover.test.d.ts +6 -0
  155. package/dist/src/providers/failover.test.js +169 -0
  156. package/dist/src/providers/failover.test.js.map +1 -0
  157. package/dist/src/providers/types.d.ts +110 -0
  158. package/dist/src/providers/types.js +7 -0
  159. package/dist/src/providers/types.js.map +1 -0
  160. package/dist/src/routes/ai-stream.d.ts +13 -10
  161. package/dist/src/routes/ai-stream.js +76 -38
  162. package/dist/src/routes/ai-stream.js.map +1 -1
  163. package/dist/src/routes/chat-new.test.d.ts +6 -0
  164. package/dist/src/routes/chat-new.test.js +107 -0
  165. package/dist/src/routes/chat-new.test.js.map +1 -0
  166. package/dist/src/routes/chat-stream-new.test.d.ts +6 -0
  167. package/dist/src/routes/chat-stream-new.test.js +135 -0
  168. package/dist/src/routes/chat-stream-new.test.js.map +1 -0
  169. package/dist/src/routes/chat-stream.d.ts +14 -4
  170. package/dist/src/routes/chat-stream.js +47 -27
  171. package/dist/src/routes/chat-stream.js.map +1 -1
  172. package/dist/src/routes/chat.d.ts +13 -4
  173. package/dist/src/routes/chat.js +60 -22
  174. package/dist/src/routes/chat.js.map +1 -1
  175. package/dist/src/routes/health.d.ts +3 -2
  176. package/dist/src/routes/health.js.map +1 -1
  177. package/dist/src/routes/route-helpers.d.ts +50 -0
  178. package/dist/src/routes/route-helpers.js +80 -0
  179. package/dist/src/routes/route-helpers.js.map +1 -0
  180. package/dist/src/routes/session-resolver.d.ts +72 -0
  181. package/dist/src/routes/session-resolver.js +123 -0
  182. package/dist/src/routes/session-resolver.js.map +1 -0
  183. package/dist/src/routes/session-resolver.test.d.ts +6 -0
  184. package/dist/src/routes/session-resolver.test.js +206 -0
  185. package/dist/src/routes/session-resolver.test.js.map +1 -0
  186. package/dist/src/routes/webhooks.d.ts +3 -1
  187. package/dist/src/routes/webhooks.js +12 -2
  188. package/dist/src/routes/webhooks.js.map +1 -1
  189. package/dist/src/security/permission-checker.d.ts +80 -0
  190. package/dist/src/security/permission-checker.js +75 -0
  191. package/dist/src/security/permission-checker.js.map +1 -0
  192. package/dist/src/security/permission-checker.test.d.ts +6 -0
  193. package/dist/src/security/permission-checker.test.js +208 -0
  194. package/dist/src/security/permission-checker.test.js.map +1 -0
  195. package/dist/src/server.d.ts +12 -11
  196. package/dist/src/server.js +44 -46
  197. package/dist/src/server.js.map +1 -1
  198. package/dist/src/server.test.d.ts +1 -1
  199. package/dist/src/server.test.js +6 -140
  200. package/dist/src/server.test.js.map +1 -1
  201. package/dist/src/session/manager.d.ts +98 -0
  202. package/dist/src/session/manager.js +364 -0
  203. package/dist/src/session/manager.js.map +1 -0
  204. package/dist/src/session/manager.test.d.ts +6 -0
  205. package/dist/src/session/manager.test.js +315 -0
  206. package/dist/src/session/manager.test.js.map +1 -0
  207. package/dist/src/session/session-builder.d.ts +71 -0
  208. package/dist/src/session/session-builder.js +364 -0
  209. package/dist/src/session/session-builder.js.map +1 -0
  210. package/dist/src/session/session-builder.test.d.ts +6 -0
  211. package/dist/src/session/session-builder.test.js +352 -0
  212. package/dist/src/session/session-builder.test.js.map +1 -0
  213. package/dist/src/session/store.d.ts +57 -0
  214. package/dist/src/session/store.js +167 -0
  215. package/dist/src/session/store.js.map +1 -0
  216. package/dist/src/session/store.test.d.ts +6 -0
  217. package/dist/src/session/store.test.js +145 -0
  218. package/dist/src/session/store.test.js.map +1 -0
  219. package/dist/src/session/stream-hooks.d.ts +39 -0
  220. package/dist/src/session/stream-hooks.js +7 -0
  221. package/dist/src/session/stream-hooks.js.map +1 -0
  222. package/dist/src/session/tool-context-factory.d.ts +60 -0
  223. package/dist/src/session/tool-context-factory.js +190 -0
  224. package/dist/src/session/tool-context-factory.js.map +1 -0
  225. package/dist/src/session/tool-context-factory.test.d.ts +6 -0
  226. package/dist/src/session/tool-context-factory.test.js +287 -0
  227. package/dist/src/session/tool-context-factory.test.js.map +1 -0
  228. package/dist/src/session/types.d.ts +188 -0
  229. package/dist/src/session/types.js +7 -0
  230. package/dist/src/session/types.js.map +1 -0
  231. package/dist/src/stores/drizzle-store-backend.d.ts +49 -0
  232. package/dist/src/stores/drizzle-store-backend.js +306 -0
  233. package/dist/src/stores/drizzle-store-backend.js.map +1 -0
  234. package/dist/src/stores/drizzle-store-backend.test.d.ts +6 -0
  235. package/dist/src/stores/drizzle-store-backend.test.js +215 -0
  236. package/dist/src/stores/drizzle-store-backend.test.js.map +1 -0
  237. package/dist/src/stores/index.d.ts +4 -0
  238. package/dist/src/stores/index.js +2 -0
  239. package/dist/src/stores/index.js.map +1 -1
  240. package/dist/src/stores/pglite-store-backend.d.ts +16 -19
  241. package/dist/src/stores/pglite-store-backend.js +85 -233
  242. package/dist/src/stores/pglite-store-backend.js.map +1 -1
  243. package/dist/src/stores/postgres-store-backend.d.ts +30 -0
  244. package/dist/src/stores/postgres-store-backend.js +100 -0
  245. package/dist/src/stores/postgres-store-backend.js.map +1 -0
  246. package/dist/src/stores/schema.d.ts +491 -0
  247. package/dist/src/stores/schema.js +57 -0
  248. package/dist/src/stores/schema.js.map +1 -0
  249. package/dist/src/tools/admin-file-tools.d.ts +13 -0
  250. package/dist/src/tools/admin-file-tools.js +200 -0
  251. package/dist/src/tools/admin-file-tools.js.map +1 -0
  252. package/dist/src/tools/admin-file-tools.test.d.ts +6 -0
  253. package/dist/src/tools/admin-file-tools.test.js +152 -0
  254. package/dist/src/tools/admin-file-tools.test.js.map +1 -0
  255. package/dist/src/tools/custom-tool-adapter.d.ts +41 -0
  256. package/dist/src/tools/custom-tool-adapter.js +190 -0
  257. package/dist/src/tools/custom-tool-adapter.js.map +1 -0
  258. package/dist/src/tools/custom-tool-adapter.test.d.ts +6 -0
  259. package/dist/src/tools/custom-tool-adapter.test.js +244 -0
  260. package/dist/src/tools/custom-tool-adapter.test.js.map +1 -0
  261. package/dist/src/tools/dispatch-tool.d.ts +52 -0
  262. package/dist/src/tools/dispatch-tool.js +71 -0
  263. package/dist/src/tools/dispatch-tool.js.map +1 -0
  264. package/dist/src/tools/dispatch-tool.test.d.ts +6 -0
  265. package/dist/src/tools/dispatch-tool.test.js +75 -0
  266. package/dist/src/tools/dispatch-tool.test.js.map +1 -0
  267. package/dist/src/tools/mcp-tool-adapter.d.ts +18 -0
  268. package/dist/src/tools/mcp-tool-adapter.js +135 -0
  269. package/dist/src/tools/mcp-tool-adapter.js.map +1 -0
  270. package/dist/src/tools/mcp-tool-adapter.test.d.ts +6 -0
  271. package/dist/src/tools/mcp-tool-adapter.test.js +227 -0
  272. package/dist/src/tools/mcp-tool-adapter.test.js.map +1 -0
  273. package/dist/src/tools/registry.d.ts +25 -0
  274. package/dist/src/tools/registry.js +72 -0
  275. package/dist/src/tools/registry.js.map +1 -0
  276. package/dist/src/tools/registry.test.d.ts +6 -0
  277. package/dist/src/tools/registry.test.js +121 -0
  278. package/dist/src/tools/registry.test.js.map +1 -0
  279. package/dist/src/tools/request-tool.d.ts +42 -0
  280. package/dist/src/tools/request-tool.js +190 -0
  281. package/dist/src/tools/request-tool.js.map +1 -0
  282. package/dist/src/tools/request-tool.test.d.ts +6 -0
  283. package/dist/src/tools/request-tool.test.js +254 -0
  284. package/dist/src/tools/request-tool.test.js.map +1 -0
  285. package/dist/src/tools/store-tools.d.ts +29 -0
  286. package/dist/src/tools/store-tools.js +224 -0
  287. package/dist/src/tools/store-tools.js.map +1 -0
  288. package/dist/src/tools/store-tools.test.d.ts +6 -0
  289. package/dist/src/tools/store-tools.test.js +216 -0
  290. package/dist/src/tools/store-tools.test.js.map +1 -0
  291. package/dist/src/tools/types.d.ts +111 -0
  292. package/dist/src/tools/types.js +7 -0
  293. package/dist/src/tools/types.js.map +1 -0
  294. package/dist/src/types.d.ts +20 -12
  295. package/dist/src/types.js +3 -2
  296. package/dist/src/types.js.map +1 -1
  297. package/dist/tsconfig.tsbuildinfo +1 -1
  298. package/package.json +13 -3
  299. package/dist/src/agent/agent-runner.d.ts +0 -33
  300. package/dist/src/agent/agent-runner.js +0 -1040
  301. package/dist/src/agent/agent-runner.js.map +0 -1
  302. package/dist/src/agent/custom-tools-e2e.test.js +0 -566
  303. package/dist/src/agent/custom-tools-e2e.test.js.map +0 -1
  304. package/dist/src/agent/request-helper.d.ts +0 -16
  305. package/dist/src/agent/request-helper.js +0 -96
  306. package/dist/src/agent/request-helper.js.map +0 -1
  307. package/dist/src/agent/stores-e2e.test.js +0 -433
  308. package/dist/src/agent/stores-e2e.test.js.map +0 -1
  309. package/dist/src/agent/tool-context-builder.d.ts +0 -11
  310. package/dist/src/agent/tool-context-builder.js +0 -102
  311. package/dist/src/agent/tool-context-builder.js.map +0 -1
  312. package/dist/src/agent/tool-context-builder.test.js +0 -152
  313. package/dist/src/agent/tool-context-builder.test.js.map +0 -1
  314. package/dist/src/agent/write-repo-file.test.js +0 -270
  315. package/dist/src/agent/write-repo-file.test.js.map +0 -1
  316. package/dist/src/cron/heartbeat-runner.d.ts +0 -21
  317. package/dist/src/cron/heartbeat-runner.js +0 -79
  318. package/dist/src/cron/heartbeat-runner.js.map +0 -1
  319. package/dist/src/cron/heartbeat-runner.test.d.ts +0 -6
  320. package/dist/src/cron/heartbeat-runner.test.js +0 -120
  321. package/dist/src/cron/heartbeat-runner.test.js.map +0 -1
  322. package/dist/src/cron/heartbeat-scheduler.d.ts +0 -26
  323. package/dist/src/cron/heartbeat-scheduler.js +0 -55
  324. package/dist/src/cron/heartbeat-scheduler.js.map +0 -1
  325. package/dist/src/cron/heartbeat-scheduler.test.d.ts +0 -6
  326. package/dist/src/cron/heartbeat-scheduler.test.js +0 -61
  327. package/dist/src/cron/heartbeat-scheduler.test.js.map +0 -1
  328. package/dist/src/routes/ai-stream.test.d.ts +0 -6
  329. package/dist/src/routes/ai-stream.test.js +0 -586
  330. package/dist/src/routes/ai-stream.test.js.map +0 -1
  331. package/dist/src/routes/ask-user-response.d.ts +0 -30
  332. package/dist/src/routes/ask-user-response.js +0 -61
  333. package/dist/src/routes/ask-user-response.js.map +0 -1
  334. package/dist/src/routes/ask-user-response.test.d.ts +0 -6
  335. package/dist/src/routes/ask-user-response.test.js +0 -88
  336. package/dist/src/routes/ask-user-response.test.js.map +0 -1
  337. package/dist/src/routes/chat-stream.test.d.ts +0 -6
  338. package/dist/src/routes/chat-stream.test.js +0 -155
  339. package/dist/src/routes/chat-stream.test.js.map +0 -1
  340. package/dist/src/routes/chat.test.d.ts +0 -6
  341. package/dist/src/routes/chat.test.js +0 -99
  342. package/dist/src/routes/chat.test.js.map +0 -1
  343. package/dist/src/routes/widget-actions.d.ts +0 -49
  344. package/dist/src/routes/widget-actions.js +0 -78
  345. package/dist/src/routes/widget-actions.js.map +0 -1
  346. package/dist/src/session/custom-tool-adapter.d.ts +0 -74
  347. package/dist/src/session/custom-tool-adapter.js +0 -180
  348. package/dist/src/session/custom-tool-adapter.js.map +0 -1
  349. package/dist/src/session/history-converter.d.ts +0 -21
  350. package/dist/src/session/history-converter.js +0 -59
  351. package/dist/src/session/history-converter.js.map +0 -1
  352. package/dist/src/session/history-converter.test.d.ts +0 -6
  353. package/dist/src/session/history-converter.test.js +0 -130
  354. package/dist/src/session/history-converter.test.js.map +0 -1
  355. package/dist/src/session/session-manager.d.ts +0 -219
  356. package/dist/src/session/session-manager.js +0 -915
  357. package/dist/src/session/session-manager.js.map +0 -1
  358. package/dist/src/session/session-manager.test.d.ts +0 -6
  359. package/dist/src/session/session-manager.test.js +0 -451
  360. package/dist/src/session/session-manager.test.js.map +0 -1
  361. package/dist/src/session/session-runner.d.ts +0 -45
  362. package/dist/src/session/session-runner.js +0 -719
  363. package/dist/src/session/session-runner.js.map +0 -1
  364. package/dist/src/session/session-runner.test.d.ts +0 -6
  365. package/dist/src/session/session-runner.test.js +0 -830
  366. package/dist/src/session/session-runner.test.js.map +0 -1
  367. /package/dist/src/{agent/write-repo-file.test.d.ts → __fixtures__/smoke.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>;