@amodalai/runtime 0.1.26 → 0.2.1

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 (445) hide show
  1. package/dist/src/__fixtures__/README.md +88 -0
  2. package/dist/src/__fixtures__/e2e.test.js +211 -0
  3. package/dist/src/__fixtures__/e2e.test.js.map +1 -0
  4. package/dist/src/__fixtures__/smoke-agent/amodal.json +11 -0
  5. package/dist/src/__fixtures__/smoke-agent/automations/delivery-callback-test.json +9 -0
  6. package/dist/src/__fixtures__/smoke-agent/automations/test-auto.md +5 -0
  7. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/access.json +11 -0
  8. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/spec.json +4 -0
  9. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/surface.md +9 -0
  10. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/access.json +3 -0
  11. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/spec.json +8 -0
  12. package/dist/src/__fixtures__/smoke-agent/evals/basic-eval.md +12 -0
  13. package/dist/src/__fixtures__/smoke-agent/knowledge/test-knowledge.md +3 -0
  14. package/dist/src/__fixtures__/smoke-agent/skills/test-skill/SKILL.md +11 -0
  15. package/dist/src/__fixtures__/smoke-agent/stores/test-items.json +11 -0
  16. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.d.ts +18 -0
  17. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js +22 -0
  18. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js.map +1 -0
  19. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/tool.json +17 -0
  20. package/dist/src/__fixtures__/smoke.test.js +1404 -0
  21. package/dist/src/__fixtures__/smoke.test.js.map +1 -0
  22. package/dist/src/__fixtures__/test-env.d.ts +27 -0
  23. package/dist/src/__fixtures__/test-env.js +64 -0
  24. package/dist/src/__fixtures__/test-env.js.map +1 -0
  25. package/dist/src/__fixtures__/test-helpers.d.ts +30 -0
  26. package/dist/src/__fixtures__/test-helpers.js +120 -0
  27. package/dist/src/__fixtures__/test-helpers.js.map +1 -0
  28. package/dist/src/__tests__/test-providers.d.ts +40 -0
  29. package/dist/src/__tests__/test-providers.js +61 -0
  30. package/dist/src/__tests__/test-providers.js.map +1 -0
  31. package/dist/src/agent/agent-types.d.ts +22 -0
  32. package/dist/src/agent/agent-types.js.map +1 -1
  33. package/dist/src/agent/automation-bridge.d.ts +9 -0
  34. package/dist/src/agent/automation-bridge.js +26 -0
  35. package/dist/src/agent/automation-bridge.js.map +1 -1
  36. package/dist/src/agent/automation-bridge.test.js +63 -0
  37. package/dist/src/agent/automation-bridge.test.js.map +1 -1
  38. package/dist/src/agent/local-server.d.ts +1 -8
  39. package/dist/src/agent/local-server.js +398 -163
  40. package/dist/src/agent/local-server.js.map +1 -1
  41. package/dist/src/agent/local-server.test.js +14 -8
  42. package/dist/src/agent/local-server.test.js.map +1 -1
  43. package/dist/src/agent/loop-types.d.ts +254 -0
  44. package/dist/src/agent/loop-types.js +24 -0
  45. package/dist/src/agent/loop-types.js.map +1 -0
  46. package/dist/src/agent/loop.d.ts +31 -0
  47. package/dist/src/agent/loop.js +152 -0
  48. package/dist/src/agent/loop.js.map +1 -0
  49. package/dist/src/agent/loop.test.js +1594 -0
  50. package/dist/src/agent/loop.test.js.map +1 -0
  51. package/dist/src/agent/mcp-config.d.ts +28 -0
  52. package/dist/src/agent/mcp-config.js +57 -0
  53. package/dist/src/agent/mcp-config.js.map +1 -0
  54. package/dist/src/agent/page-builder.js +6 -1
  55. package/dist/src/agent/page-builder.js.map +1 -1
  56. package/dist/src/agent/proactive/delivery-router.d.ts +68 -0
  57. package/dist/src/agent/proactive/delivery-router.js +337 -0
  58. package/dist/src/agent/proactive/delivery-router.js.map +1 -0
  59. package/dist/src/agent/{stores-e2e.test.d.ts → proactive/delivery-router.test.d.ts} +1 -1
  60. package/dist/src/agent/proactive/delivery-router.test.js +455 -0
  61. package/dist/src/agent/proactive/delivery-router.test.js.map +1 -0
  62. package/dist/src/agent/proactive/proactive-runner.d.ts +46 -8
  63. package/dist/src/agent/proactive/proactive-runner.js +67 -37
  64. package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
  65. package/dist/src/agent/proactive/proactive-runner.test.d.ts +1 -1
  66. package/dist/src/agent/proactive/proactive-runner.test.js +73 -87
  67. package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -1
  68. package/dist/src/agent/routes/admin-chat-abort.test.d.ts +6 -0
  69. package/dist/src/agent/routes/admin-chat-abort.test.js +206 -0
  70. package/dist/src/agent/routes/admin-chat-abort.test.js.map +1 -0
  71. package/dist/src/agent/routes/admin-chat.d.ts +15 -3
  72. package/dist/src/agent/routes/admin-chat.js +61 -18
  73. package/dist/src/agent/routes/admin-chat.js.map +1 -1
  74. package/dist/src/agent/routes/automations.js +5 -6
  75. package/dist/src/agent/routes/automations.js.map +1 -1
  76. package/dist/src/agent/routes/evals.d.ts +3 -2
  77. package/dist/src/agent/routes/evals.js +25 -12
  78. package/dist/src/agent/routes/evals.js.map +1 -1
  79. package/dist/src/agent/routes/files.js +7 -9
  80. package/dist/src/agent/routes/files.js.map +1 -1
  81. package/dist/src/agent/routes/inspect.d.ts +6 -2
  82. package/dist/src/agent/routes/inspect.js +31 -17
  83. package/dist/src/agent/routes/inspect.js.map +1 -1
  84. package/dist/src/agent/routes/inspect.test.js +18 -42
  85. package/dist/src/agent/routes/inspect.test.js.map +1 -1
  86. package/dist/src/agent/routes/stores.js +9 -12
  87. package/dist/src/agent/routes/stores.js.map +1 -1
  88. package/dist/src/agent/routes/task.d.ts +15 -3
  89. package/dist/src/agent/routes/task.js +16 -7
  90. package/dist/src/agent/routes/task.js.map +1 -1
  91. package/dist/src/agent/routes/task.test.d.ts +1 -1
  92. package/dist/src/agent/routes/task.test.js +68 -53
  93. package/dist/src/agent/routes/task.test.js.map +1 -1
  94. package/dist/src/agent/routes/webhooks.js +12 -3
  95. package/dist/src/agent/routes/webhooks.js.map +1 -1
  96. package/dist/src/agent/snapshot-server.d.ts +2 -22
  97. package/dist/src/agent/snapshot-server.js +48 -27
  98. package/dist/src/agent/snapshot-server.js.map +1 -1
  99. package/dist/src/agent/states/compacting.d.ts +14 -0
  100. package/dist/src/agent/states/compacting.js +260 -0
  101. package/dist/src/agent/states/compacting.js.map +1 -0
  102. package/dist/src/agent/states/confirming.d.ts +10 -0
  103. package/dist/src/agent/states/confirming.js +79 -0
  104. package/dist/src/agent/states/confirming.js.map +1 -0
  105. package/dist/src/agent/states/dispatching.d.ts +18 -0
  106. package/dist/src/agent/states/dispatching.js +285 -0
  107. package/dist/src/agent/states/dispatching.js.map +1 -0
  108. package/dist/src/agent/states/executing.d.ts +21 -0
  109. package/dist/src/agent/states/executing.js +452 -0
  110. package/dist/src/agent/states/executing.js.map +1 -0
  111. package/dist/src/agent/states/streaming.d.ts +10 -0
  112. package/dist/src/agent/states/streaming.js +169 -0
  113. package/dist/src/agent/states/streaming.js.map +1 -0
  114. package/dist/src/agent/states/thinking.d.ts +13 -0
  115. package/dist/src/agent/states/thinking.js +450 -0
  116. package/dist/src/agent/states/thinking.js.map +1 -0
  117. package/dist/src/agent/token-estimate.d.ts +31 -0
  118. package/dist/src/agent/token-estimate.js +34 -0
  119. package/dist/src/agent/token-estimate.js.map +1 -0
  120. package/dist/src/agent/token-estimate.test.d.ts +6 -0
  121. package/dist/src/agent/token-estimate.test.js +44 -0
  122. package/dist/src/agent/token-estimate.test.js.map +1 -0
  123. package/dist/src/agent/tool-executor-local.js +9 -18
  124. package/dist/src/agent/tool-executor-local.js.map +1 -1
  125. package/dist/src/agent/tool-executor-local.test.js +3 -5
  126. package/dist/src/agent/tool-executor-local.test.js.map +1 -1
  127. package/dist/src/api/create-agent.d.ts +15 -0
  128. package/dist/src/api/create-agent.js +134 -0
  129. package/dist/src/api/create-agent.js.map +1 -0
  130. package/dist/src/api/types.d.ts +66 -0
  131. package/dist/src/api/types.js +7 -0
  132. package/dist/src/api/types.js.map +1 -0
  133. package/dist/src/context/compiler.d.ts +13 -0
  134. package/dist/src/context/compiler.js +358 -0
  135. package/dist/src/context/compiler.js.map +1 -0
  136. package/dist/src/context/compiler.test.d.ts +6 -0
  137. package/dist/src/context/compiler.test.js +532 -0
  138. package/dist/src/context/compiler.test.js.map +1 -0
  139. package/dist/src/context/types.d.ts +110 -0
  140. package/dist/src/context/types.js +7 -0
  141. package/dist/src/context/types.js.map +1 -0
  142. package/dist/src/env-ref.d.ts +13 -0
  143. package/dist/src/env-ref.js +31 -0
  144. package/dist/src/env-ref.js.map +1 -0
  145. package/dist/src/env-ref.test.d.ts +6 -0
  146. package/dist/src/env-ref.test.js +34 -0
  147. package/dist/src/env-ref.test.js.map +1 -0
  148. package/dist/src/errors.d.ts +15 -0
  149. package/dist/src/errors.js +22 -0
  150. package/dist/src/errors.js.map +1 -1
  151. package/dist/src/errors.test.js +2 -2
  152. package/dist/src/errors.test.js.map +1 -1
  153. package/dist/src/events/event-bus.d.ts +54 -0
  154. package/dist/src/events/event-bus.js +84 -0
  155. package/dist/src/events/event-bus.js.map +1 -0
  156. package/dist/src/events/event-bus.test.d.ts +6 -0
  157. package/dist/src/events/event-bus.test.js +112 -0
  158. package/dist/src/events/event-bus.test.js.map +1 -0
  159. package/dist/src/events/events-route.d.ts +36 -0
  160. package/dist/src/events/events-route.js +80 -0
  161. package/dist/src/events/events-route.js.map +1 -0
  162. package/dist/src/events/events-route.test.d.ts +6 -0
  163. package/dist/src/events/events-route.test.js +134 -0
  164. package/dist/src/events/events-route.test.js.map +1 -0
  165. package/dist/src/events/store-event-wrapper.d.ts +19 -0
  166. package/dist/src/events/store-event-wrapper.js +57 -0
  167. package/dist/src/events/store-event-wrapper.js.map +1 -0
  168. package/dist/src/events/store-event-wrapper.test.d.ts +6 -0
  169. package/dist/src/events/store-event-wrapper.test.js +91 -0
  170. package/dist/src/events/store-event-wrapper.test.js.map +1 -0
  171. package/dist/src/index.d.ts +33 -6
  172. package/dist/src/index.js +35 -21
  173. package/dist/src/index.js.map +1 -1
  174. package/dist/src/middleware/auth.d.ts +0 -2
  175. package/dist/src/middleware/auth.js.map +1 -1
  176. package/dist/src/providers/create-provider.d.ts +23 -0
  177. package/dist/src/providers/create-provider.js +185 -0
  178. package/dist/src/providers/create-provider.js.map +1 -0
  179. package/dist/src/providers/create-provider.test.d.ts +6 -0
  180. package/dist/src/providers/create-provider.test.js +95 -0
  181. package/dist/src/providers/create-provider.test.js.map +1 -0
  182. package/dist/src/providers/failover.d.ts +38 -0
  183. package/dist/src/providers/failover.js +147 -0
  184. package/dist/src/providers/failover.js.map +1 -0
  185. package/dist/src/providers/failover.test.d.ts +6 -0
  186. package/dist/src/providers/failover.test.js +169 -0
  187. package/dist/src/providers/failover.test.js.map +1 -0
  188. package/dist/src/providers/search-provider.d.ts +64 -0
  189. package/dist/src/providers/search-provider.js +174 -0
  190. package/dist/src/providers/search-provider.js.map +1 -0
  191. package/dist/src/providers/types.d.ts +118 -0
  192. package/dist/src/providers/types.js +7 -0
  193. package/dist/src/providers/types.js.map +1 -0
  194. package/dist/src/routes/ai-stream.d.ts +28 -10
  195. package/dist/src/routes/ai-stream.js +85 -41
  196. package/dist/src/routes/ai-stream.js.map +1 -1
  197. package/dist/src/routes/chat-new.test.d.ts +6 -0
  198. package/dist/src/routes/chat-new.test.js +107 -0
  199. package/dist/src/routes/chat-new.test.js.map +1 -0
  200. package/dist/src/routes/chat-stream-new.test.d.ts +6 -0
  201. package/dist/src/routes/chat-stream-new.test.js +135 -0
  202. package/dist/src/routes/chat-stream-new.test.js.map +1 -0
  203. package/dist/src/routes/chat-stream.d.ts +20 -4
  204. package/dist/src/routes/chat-stream.js +49 -29
  205. package/dist/src/routes/chat-stream.js.map +1 -1
  206. package/dist/src/routes/chat.d.ts +19 -4
  207. package/dist/src/routes/chat.js +62 -23
  208. package/dist/src/routes/chat.js.map +1 -1
  209. package/dist/src/routes/health.d.ts +3 -2
  210. package/dist/src/routes/health.js.map +1 -1
  211. package/dist/src/routes/route-helpers.d.ts +50 -0
  212. package/dist/src/routes/route-helpers.js +80 -0
  213. package/dist/src/routes/route-helpers.js.map +1 -0
  214. package/dist/src/routes/session-resolver.d.ts +77 -0
  215. package/dist/src/routes/session-resolver.js +109 -0
  216. package/dist/src/routes/session-resolver.js.map +1 -0
  217. package/dist/src/routes/session-resolver.test.d.ts +6 -0
  218. package/dist/src/routes/session-resolver.test.js +207 -0
  219. package/dist/src/routes/session-resolver.test.js.map +1 -0
  220. package/dist/src/routes/webhooks.d.ts +3 -1
  221. package/dist/src/routes/webhooks.js +12 -4
  222. package/dist/src/routes/webhooks.js.map +1 -1
  223. package/dist/src/security/permission-checker.d.ts +80 -0
  224. package/dist/src/security/permission-checker.js +75 -0
  225. package/dist/src/security/permission-checker.js.map +1 -0
  226. package/dist/src/security/permission-checker.test.d.ts +6 -0
  227. package/dist/src/security/permission-checker.test.js +208 -0
  228. package/dist/src/security/permission-checker.test.js.map +1 -0
  229. package/dist/src/server.d.ts +18 -11
  230. package/dist/src/server.js +46 -46
  231. package/dist/src/server.js.map +1 -1
  232. package/dist/src/server.test.d.ts +1 -1
  233. package/dist/src/server.test.js +6 -144
  234. package/dist/src/server.test.js.map +1 -1
  235. package/dist/src/session/drizzle-session-store.d.ts +56 -0
  236. package/dist/src/session/drizzle-session-store.js +203 -0
  237. package/dist/src/session/drizzle-session-store.js.map +1 -0
  238. package/dist/src/session/manager.d.ts +101 -0
  239. package/dist/src/session/manager.js +394 -0
  240. package/dist/src/session/manager.js.map +1 -0
  241. package/dist/src/session/manager.test.d.ts +6 -0
  242. package/dist/src/session/manager.test.js +309 -0
  243. package/dist/src/session/manager.test.js.map +1 -0
  244. package/dist/src/session/pglite-session-store.d.ts +23 -0
  245. package/dist/src/session/pglite-session-store.js +70 -0
  246. package/dist/src/session/pglite-session-store.js.map +1 -0
  247. package/dist/src/session/postgres-session-store.d.ts +44 -0
  248. package/dist/src/session/postgres-session-store.js +138 -0
  249. package/dist/src/session/postgres-session-store.js.map +1 -0
  250. package/dist/src/session/session-builder.d.ts +69 -0
  251. package/dist/src/session/session-builder.js +384 -0
  252. package/dist/src/session/session-builder.js.map +1 -0
  253. package/dist/src/session/session-builder.test.d.ts +6 -0
  254. package/dist/src/session/session-builder.test.js +350 -0
  255. package/dist/src/session/session-builder.test.js.map +1 -0
  256. package/dist/src/session/session-store-selector.d.ts +49 -0
  257. package/dist/src/session/session-store-selector.js +60 -0
  258. package/dist/src/session/session-store-selector.js.map +1 -0
  259. package/dist/src/session/session-store-selector.test.d.ts +6 -0
  260. package/dist/src/session/session-store-selector.test.js +79 -0
  261. package/dist/src/session/session-store-selector.test.js.map +1 -0
  262. package/dist/src/session/store.d.ts +171 -0
  263. package/dist/src/session/store.js +155 -0
  264. package/dist/src/session/store.js.map +1 -0
  265. package/dist/src/session/store.test.d.ts +6 -0
  266. package/dist/src/session/store.test.js +423 -0
  267. package/dist/src/session/store.test.js.map +1 -0
  268. package/dist/src/session/stream-hooks.d.ts +39 -0
  269. package/dist/src/session/stream-hooks.js +7 -0
  270. package/dist/src/session/stream-hooks.js.map +1 -0
  271. package/dist/src/session/tool-context-factory.d.ts +61 -0
  272. package/dist/src/session/tool-context-factory.js +189 -0
  273. package/dist/src/session/tool-context-factory.js.map +1 -0
  274. package/dist/src/session/tool-context-factory.test.d.ts +6 -0
  275. package/dist/src/session/tool-context-factory.test.js +284 -0
  276. package/dist/src/session/tool-context-factory.test.js.map +1 -0
  277. package/dist/src/session/types.d.ts +195 -0
  278. package/dist/src/session/types.js +7 -0
  279. package/dist/src/session/types.js.map +1 -0
  280. package/dist/src/stores/drizzle-store-backend.d.ts +49 -0
  281. package/dist/src/stores/drizzle-store-backend.js +306 -0
  282. package/dist/src/stores/drizzle-store-backend.js.map +1 -0
  283. package/dist/src/stores/drizzle-store-backend.test.d.ts +6 -0
  284. package/dist/src/stores/drizzle-store-backend.test.js +215 -0
  285. package/dist/src/stores/drizzle-store-backend.test.js.map +1 -0
  286. package/dist/src/stores/index.d.ts +4 -0
  287. package/dist/src/stores/index.js +2 -0
  288. package/dist/src/stores/index.js.map +1 -1
  289. package/dist/src/stores/pglite-store-backend.d.ts +16 -19
  290. package/dist/src/stores/pglite-store-backend.js +85 -239
  291. package/dist/src/stores/pglite-store-backend.js.map +1 -1
  292. package/dist/src/stores/postgres-store-backend.d.ts +30 -0
  293. package/dist/src/stores/postgres-store-backend.js +100 -0
  294. package/dist/src/stores/postgres-store-backend.js.map +1 -0
  295. package/dist/src/stores/schema.d.ts +457 -0
  296. package/dist/src/stores/schema.js +59 -0
  297. package/dist/src/stores/schema.js.map +1 -0
  298. package/dist/src/tools/admin-file-tools.d.ts +42 -0
  299. package/dist/src/tools/admin-file-tools.js +714 -0
  300. package/dist/src/tools/admin-file-tools.js.map +1 -0
  301. package/dist/src/tools/admin-file-tools.test.d.ts +6 -0
  302. package/dist/src/tools/admin-file-tools.test.js +521 -0
  303. package/dist/src/tools/admin-file-tools.test.js.map +1 -0
  304. package/dist/src/tools/custom-tool-adapter.d.ts +41 -0
  305. package/dist/src/tools/custom-tool-adapter.js +190 -0
  306. package/dist/src/tools/custom-tool-adapter.js.map +1 -0
  307. package/dist/src/tools/custom-tool-adapter.test.d.ts +6 -0
  308. package/dist/src/tools/custom-tool-adapter.test.js +243 -0
  309. package/dist/src/tools/custom-tool-adapter.test.js.map +1 -0
  310. package/dist/src/tools/dispatch-tool.d.ts +52 -0
  311. package/dist/src/tools/dispatch-tool.js +71 -0
  312. package/dist/src/tools/dispatch-tool.js.map +1 -0
  313. package/dist/src/tools/dispatch-tool.test.d.ts +6 -0
  314. package/dist/src/tools/dispatch-tool.test.js +75 -0
  315. package/dist/src/tools/dispatch-tool.test.js.map +1 -0
  316. package/dist/src/tools/fetch-url-tool.d.ts +23 -0
  317. package/dist/src/tools/fetch-url-tool.js +333 -0
  318. package/dist/src/tools/fetch-url-tool.js.map +1 -0
  319. package/dist/src/tools/fetch-url-tool.test.d.ts +6 -0
  320. package/dist/src/tools/fetch-url-tool.test.js +228 -0
  321. package/dist/src/tools/fetch-url-tool.test.js.map +1 -0
  322. package/dist/src/tools/mcp-tool-adapter.d.ts +18 -0
  323. package/dist/src/tools/mcp-tool-adapter.js +135 -0
  324. package/dist/src/tools/mcp-tool-adapter.js.map +1 -0
  325. package/dist/src/tools/mcp-tool-adapter.test.d.ts +6 -0
  326. package/dist/src/tools/mcp-tool-adapter.test.js +226 -0
  327. package/dist/src/tools/mcp-tool-adapter.test.js.map +1 -0
  328. package/dist/src/tools/registry.d.ts +25 -0
  329. package/dist/src/tools/registry.js +72 -0
  330. package/dist/src/tools/registry.js.map +1 -0
  331. package/dist/src/tools/registry.test.d.ts +6 -0
  332. package/dist/src/tools/registry.test.js +120 -0
  333. package/dist/src/tools/registry.test.js.map +1 -0
  334. package/dist/src/tools/request-tool.d.ts +42 -0
  335. package/dist/src/tools/request-tool.js +190 -0
  336. package/dist/src/tools/request-tool.js.map +1 -0
  337. package/dist/src/tools/request-tool.test.d.ts +6 -0
  338. package/dist/src/tools/request-tool.test.js +253 -0
  339. package/dist/src/tools/request-tool.test.js.map +1 -0
  340. package/dist/src/tools/store-tools.d.ts +29 -0
  341. package/dist/src/tools/store-tools.js +224 -0
  342. package/dist/src/tools/store-tools.js.map +1 -0
  343. package/dist/src/tools/store-tools.test.d.ts +6 -0
  344. package/dist/src/tools/store-tools.test.js +215 -0
  345. package/dist/src/tools/store-tools.test.js.map +1 -0
  346. package/dist/src/tools/types.d.ts +129 -0
  347. package/dist/src/tools/types.js +7 -0
  348. package/dist/src/tools/types.js.map +1 -0
  349. package/dist/src/tools/web-search-tool.d.ts +31 -0
  350. package/dist/src/tools/web-search-tool.js +170 -0
  351. package/dist/src/tools/web-search-tool.js.map +1 -0
  352. package/dist/src/tools/web-search-tool.test.d.ts +6 -0
  353. package/dist/src/tools/web-search-tool.test.js +153 -0
  354. package/dist/src/tools/web-search-tool.test.js.map +1 -0
  355. package/dist/src/tools/web-tools-shared.d.ts +21 -0
  356. package/dist/src/tools/web-tools-shared.js +32 -0
  357. package/dist/src/tools/web-tools-shared.js.map +1 -0
  358. package/dist/src/types.d.ts +40 -12
  359. package/dist/src/types.js +16 -2
  360. package/dist/src/types.js.map +1 -1
  361. package/dist/tsconfig.tsbuildinfo +1 -1
  362. package/package.json +27 -4
  363. package/dist/src/__tests__/sse-contract.test.js +0 -464
  364. package/dist/src/__tests__/sse-contract.test.js.map +0 -1
  365. package/dist/src/__tests__/tools.test.js +0 -583
  366. package/dist/src/__tests__/tools.test.js.map +0 -1
  367. package/dist/src/agent/agent-runner.d.ts +0 -33
  368. package/dist/src/agent/agent-runner.js +0 -1040
  369. package/dist/src/agent/agent-runner.js.map +0 -1
  370. package/dist/src/agent/custom-tools-e2e.test.d.ts +0 -6
  371. package/dist/src/agent/custom-tools-e2e.test.js +0 -566
  372. package/dist/src/agent/custom-tools-e2e.test.js.map +0 -1
  373. package/dist/src/agent/request-helper.d.ts +0 -16
  374. package/dist/src/agent/request-helper.js +0 -96
  375. package/dist/src/agent/request-helper.js.map +0 -1
  376. package/dist/src/agent/session-store.d.ts +0 -62
  377. package/dist/src/agent/session-store.js +0 -151
  378. package/dist/src/agent/session-store.js.map +0 -1
  379. package/dist/src/agent/stores-e2e.test.js +0 -433
  380. package/dist/src/agent/stores-e2e.test.js.map +0 -1
  381. package/dist/src/agent/tool-context-builder.d.ts +0 -11
  382. package/dist/src/agent/tool-context-builder.js +0 -102
  383. package/dist/src/agent/tool-context-builder.js.map +0 -1
  384. package/dist/src/agent/tool-context-builder.test.d.ts +0 -6
  385. package/dist/src/agent/tool-context-builder.test.js +0 -152
  386. package/dist/src/agent/tool-context-builder.test.js.map +0 -1
  387. package/dist/src/agent/write-repo-file.test.js +0 -270
  388. package/dist/src/agent/write-repo-file.test.js.map +0 -1
  389. package/dist/src/cron/heartbeat-runner.d.ts +0 -21
  390. package/dist/src/cron/heartbeat-runner.js +0 -79
  391. package/dist/src/cron/heartbeat-runner.js.map +0 -1
  392. package/dist/src/cron/heartbeat-runner.test.d.ts +0 -6
  393. package/dist/src/cron/heartbeat-runner.test.js +0 -120
  394. package/dist/src/cron/heartbeat-runner.test.js.map +0 -1
  395. package/dist/src/cron/heartbeat-scheduler.d.ts +0 -26
  396. package/dist/src/cron/heartbeat-scheduler.js +0 -55
  397. package/dist/src/cron/heartbeat-scheduler.js.map +0 -1
  398. package/dist/src/cron/heartbeat-scheduler.test.d.ts +0 -6
  399. package/dist/src/cron/heartbeat-scheduler.test.js +0 -61
  400. package/dist/src/cron/heartbeat-scheduler.test.js.map +0 -1
  401. package/dist/src/routes/ai-stream.test.d.ts +0 -6
  402. package/dist/src/routes/ai-stream.test.js +0 -586
  403. package/dist/src/routes/ai-stream.test.js.map +0 -1
  404. package/dist/src/routes/ask-user-response.d.ts +0 -30
  405. package/dist/src/routes/ask-user-response.js +0 -61
  406. package/dist/src/routes/ask-user-response.js.map +0 -1
  407. package/dist/src/routes/ask-user-response.test.d.ts +0 -6
  408. package/dist/src/routes/ask-user-response.test.js +0 -88
  409. package/dist/src/routes/ask-user-response.test.js.map +0 -1
  410. package/dist/src/routes/chat-stream.test.d.ts +0 -6
  411. package/dist/src/routes/chat-stream.test.js +0 -155
  412. package/dist/src/routes/chat-stream.test.js.map +0 -1
  413. package/dist/src/routes/chat.test.d.ts +0 -6
  414. package/dist/src/routes/chat.test.js +0 -99
  415. package/dist/src/routes/chat.test.js.map +0 -1
  416. package/dist/src/routes/widget-actions.d.ts +0 -49
  417. package/dist/src/routes/widget-actions.js +0 -78
  418. package/dist/src/routes/widget-actions.js.map +0 -1
  419. package/dist/src/session/admin-file-tools.d.ts +0 -136
  420. package/dist/src/session/admin-file-tools.js +0 -240
  421. package/dist/src/session/admin-file-tools.js.map +0 -1
  422. package/dist/src/session/custom-tool-adapter.d.ts +0 -74
  423. package/dist/src/session/custom-tool-adapter.js +0 -180
  424. package/dist/src/session/custom-tool-adapter.js.map +0 -1
  425. package/dist/src/session/history-converter.d.ts +0 -21
  426. package/dist/src/session/history-converter.js +0 -59
  427. package/dist/src/session/history-converter.js.map +0 -1
  428. package/dist/src/session/history-converter.test.d.ts +0 -6
  429. package/dist/src/session/history-converter.test.js +0 -130
  430. package/dist/src/session/history-converter.test.js.map +0 -1
  431. package/dist/src/session/session-manager.d.ts +0 -219
  432. package/dist/src/session/session-manager.js +0 -915
  433. package/dist/src/session/session-manager.js.map +0 -1
  434. package/dist/src/session/session-manager.test.d.ts +0 -6
  435. package/dist/src/session/session-manager.test.js +0 -455
  436. package/dist/src/session/session-manager.test.js.map +0 -1
  437. package/dist/src/session/session-runner.d.ts +0 -45
  438. package/dist/src/session/session-runner.js +0 -719
  439. package/dist/src/session/session-runner.js.map +0 -1
  440. package/dist/src/session/session-runner.test.d.ts +0 -6
  441. package/dist/src/session/session-runner.test.js +0 -834
  442. package/dist/src/session/session-runner.test.js.map +0 -1
  443. /package/dist/src/{__tests__/sse-contract.test.d.ts → __fixtures__/e2e.test.d.ts} +0 -0
  444. /package/dist/src/{__tests__/tools.test.d.ts → __fixtures__/smoke.test.d.ts} +0 -0
  445. /package/dist/src/agent/{write-repo-file.test.d.ts → loop.test.d.ts} +0 -0
@@ -0,0 +1,532 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Context Compiler Tests.
8
+ *
9
+ * Covers:
10
+ * 1. Basic compilation — identity, core behavior, error handling
11
+ * 2. Gotcha G9 — system prompt includes ALL context (skills, knowledge, connections)
12
+ * 3. Gotcha G10 — userContext and description both appear in correct places
13
+ * 4. Store schemas — rendered as tables in the prompt
14
+ * 5. Field guidance — generated from connection access configs
15
+ * 6. Scope labels — resolved from row scoping rules
16
+ * 7. Alternative lookups — generated from connection configs
17
+ * 8. basePrompt override — short-circuits compilation
18
+ * 9. Contributions — per-section token estimates
19
+ * 10. Plan mode
20
+ */
21
+ import { describe, it, expect } from 'vitest';
22
+ import { compileContext } from './compiler.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Fixtures
25
+ // ---------------------------------------------------------------------------
26
+ function makeConnection(overrides) {
27
+ return {
28
+ name: 'stripe',
29
+ description: 'Payment processing',
30
+ endpoints: [
31
+ { method: 'GET', path: '/v1/customers', description: 'List customers' },
32
+ { method: 'POST', path: '/v1/charges', description: 'Create a charge' },
33
+ ],
34
+ entities: '**Customer** — represents a paying customer',
35
+ rules: 'Always scope queries to the current tenant.',
36
+ ...overrides,
37
+ };
38
+ }
39
+ function makeSkill(overrides) {
40
+ return {
41
+ name: 'revenue-report',
42
+ description: 'Generate a monthly revenue report from Stripe data.',
43
+ trigger: 'When the user asks about revenue or monthly reports',
44
+ body: 'Step 1: Query /v1/charges with date filter.\nStep 2: Aggregate by status.\nStep 3: Present as a table.',
45
+ ...overrides,
46
+ };
47
+ }
48
+ function makeKnowledge(overrides) {
49
+ return {
50
+ name: 'formatting-rules',
51
+ title: 'Formatting Rules',
52
+ body: 'Always use markdown tables for tabular data. Currency values use USD with 2 decimal places.',
53
+ ...overrides,
54
+ };
55
+ }
56
+ function makeStore(overrides) {
57
+ return {
58
+ name: 'deals',
59
+ entity: {
60
+ name: 'Deal',
61
+ key: '{company}_{quarter}',
62
+ schema: {
63
+ company: { type: 'string' },
64
+ amount: { type: 'number', min: 0 },
65
+ stage: { type: 'enum', values: ['lead', 'qualified', 'closed'] },
66
+ contacts: { type: 'array', item: { type: 'string' } },
67
+ closedAt: { type: 'datetime', nullable: true },
68
+ },
69
+ },
70
+ ...overrides,
71
+ };
72
+ }
73
+ function makeFullInput() {
74
+ return {
75
+ name: 'Sales Agent',
76
+ description: 'A B2B sales intelligence agent for Acme Corp',
77
+ userContext: 'Always use a professional tone. Never share competitor pricing.',
78
+ agentOverride: 'You specialize in enterprise sales pipeline analysis.',
79
+ connections: [makeConnection()],
80
+ skills: [makeSkill()],
81
+ knowledge: [makeKnowledge()],
82
+ stores: [makeStore()],
83
+ userRoles: ['sales_rep'],
84
+ };
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ // 1. Basic compilation
88
+ // ---------------------------------------------------------------------------
89
+ describe('compileContext', () => {
90
+ it('produces a prompt with identity, core behavior, and error handling', () => {
91
+ const result = compileContext({ name: 'Test Agent' });
92
+ expect(result.source).toBe('compiled');
93
+ expect(result.systemPrompt).toContain('You are Test Agent.');
94
+ expect(result.systemPrompt).toContain('## How you work');
95
+ expect(result.systemPrompt).toContain('## Error handling');
96
+ });
97
+ it('includes description in identity line', () => {
98
+ const result = compileContext({ name: 'Bot', description: 'A helpful assistant' });
99
+ expect(result.systemPrompt).toContain('You are Bot — A helpful assistant.');
100
+ });
101
+ // -------------------------------------------------------------------------
102
+ // 2. Gotcha G9 — ALL context included
103
+ // -------------------------------------------------------------------------
104
+ it('G9: includes connection endpoints, skill bodies, and knowledge bodies', () => {
105
+ const input = makeFullInput();
106
+ const result = compileContext(input);
107
+ const prompt = result.systemPrompt;
108
+ // Connection endpoints
109
+ expect(prompt).toContain('GET /v1/customers');
110
+ expect(prompt).toContain('POST /v1/charges');
111
+ expect(prompt).toContain('Connection: stripe');
112
+ // Skill body (not just description)
113
+ expect(prompt).toContain('Step 1: Query /v1/charges');
114
+ expect(prompt).toContain('revenue-report');
115
+ // Knowledge body (not just title)
116
+ expect(prompt).toContain('Always use markdown tables for tabular data');
117
+ expect(prompt).toContain('Formatting Rules');
118
+ // Store schema
119
+ expect(prompt).toContain('deals');
120
+ expect(prompt).toContain('Deal');
121
+ });
122
+ it('G9: compiled prompt length is substantial with full config', () => {
123
+ const input = makeFullInput();
124
+ const result = compileContext(input);
125
+ // A full config should produce a prompt well over 1K chars
126
+ // (the bug from G9 dropped from 30K to 1.3K)
127
+ expect(result.systemPrompt.length).toBeGreaterThan(2000);
128
+ });
129
+ it('G9: section order matches design doc priority (skills before connections)', () => {
130
+ const input = makeFullInput();
131
+ const result = compileContext(input);
132
+ const prompt = result.systemPrompt;
133
+ const skillsIndex = prompt.indexOf('## Skills');
134
+ const connectionsIndex = prompt.indexOf('## Connected systems');
135
+ const knowledgeIndex = prompt.indexOf('## Knowledge Base');
136
+ const storesIndex = prompt.indexOf('## Data Stores');
137
+ // Skills before connections (skills trimmed first when budget is added)
138
+ expect(skillsIndex).toBeLessThan(connectionsIndex);
139
+ // Knowledge before connections
140
+ expect(knowledgeIndex).toBeLessThan(connectionsIndex);
141
+ // Stores after connections
142
+ expect(storesIndex).toBeGreaterThan(connectionsIndex);
143
+ });
144
+ // -------------------------------------------------------------------------
145
+ // 3. Gotcha G10 — userContext vs description
146
+ // -------------------------------------------------------------------------
147
+ it('G10: userContext and description both appear and are distinct', () => {
148
+ const result = compileContext({
149
+ name: 'Agent',
150
+ description: 'A content marketing agent for Amodal',
151
+ userContext: 'Always use casual tone. Never post without scheduling.',
152
+ });
153
+ const prompt = result.systemPrompt;
154
+ // Description is in the identity line
155
+ expect(prompt).toContain('A content marketing agent for Amodal');
156
+ // userContext is a separate section, not in the identity line
157
+ expect(prompt).toContain('Always use casual tone');
158
+ expect(prompt).toContain('Never post without scheduling');
159
+ // They appear in different locations
160
+ const descriptionIndex = prompt.indexOf('A content marketing agent for Amodal');
161
+ const contextIndex = prompt.indexOf('Always use casual tone');
162
+ expect(descriptionIndex).toBeLessThan(contextIndex);
163
+ });
164
+ it('G10: userContext without description works', () => {
165
+ const result = compileContext({
166
+ name: 'Agent',
167
+ userContext: 'Be concise.',
168
+ });
169
+ expect(result.systemPrompt).toContain('You are Agent.');
170
+ expect(result.systemPrompt).toContain('Be concise.');
171
+ });
172
+ it('G10: description without userContext works', () => {
173
+ const result = compileContext({
174
+ name: 'Agent',
175
+ description: 'A sales agent',
176
+ });
177
+ expect(result.systemPrompt).toContain('You are Agent — A sales agent.');
178
+ expect(result.systemPrompt).not.toContain('undefined');
179
+ });
180
+ // -------------------------------------------------------------------------
181
+ // 4. Connections
182
+ // -------------------------------------------------------------------------
183
+ it('renders connection endpoints, entities, and rules', () => {
184
+ const result = compileContext({
185
+ name: 'Agent',
186
+ connections: [makeConnection()],
187
+ });
188
+ const prompt = result.systemPrompt;
189
+ expect(prompt).toContain('## Connected systems');
190
+ expect(prompt).toContain('### Connection: stripe');
191
+ expect(prompt).toContain('Payment processing');
192
+ expect(prompt).toContain('**Available Endpoints:**');
193
+ expect(prompt).toContain('- GET /v1/customers — List customers');
194
+ expect(prompt).toContain('**Customer** — represents a paying customer');
195
+ expect(prompt).toContain('Always scope queries to the current tenant.');
196
+ expect(prompt).toContain('Use `request` with the connection name');
197
+ });
198
+ it('renders multiple connections', () => {
199
+ const result = compileContext({
200
+ name: 'Agent',
201
+ connections: [
202
+ makeConnection({ name: 'stripe' }),
203
+ makeConnection({ name: 'slack', description: 'Team messaging', endpoints: [{ method: 'POST', path: '/chat.postMessage', description: 'Send message' }] }),
204
+ ],
205
+ });
206
+ expect(result.systemPrompt).toContain('Connection: stripe');
207
+ expect(result.systemPrompt).toContain('Connection: slack');
208
+ expect(result.systemPrompt).toContain('POST /chat.postMessage');
209
+ });
210
+ // -------------------------------------------------------------------------
211
+ // 5. Skills
212
+ // -------------------------------------------------------------------------
213
+ it('renders skills with trigger and body', () => {
214
+ const result = compileContext({
215
+ name: 'Agent',
216
+ skills: [makeSkill()],
217
+ });
218
+ const prompt = result.systemPrompt;
219
+ expect(prompt).toContain('## Skills');
220
+ expect(prompt).toContain('### revenue-report');
221
+ expect(prompt).toContain('**When to activate:** When the user asks about revenue');
222
+ expect(prompt).toContain('Generate a monthly revenue report');
223
+ expect(prompt).toContain('Step 1: Query /v1/charges');
224
+ });
225
+ it('renders skill without trigger or body', () => {
226
+ const result = compileContext({
227
+ name: 'Agent',
228
+ skills: [{ name: 'simple', description: 'A simple skill' }],
229
+ });
230
+ expect(result.systemPrompt).toContain('### simple');
231
+ expect(result.systemPrompt).toContain('A simple skill');
232
+ expect(result.systemPrompt).not.toContain('When to activate');
233
+ });
234
+ // -------------------------------------------------------------------------
235
+ // 6. Knowledge
236
+ // -------------------------------------------------------------------------
237
+ it('renders knowledge docs with title and body', () => {
238
+ const result = compileContext({
239
+ name: 'Agent',
240
+ knowledge: [makeKnowledge()],
241
+ });
242
+ expect(result.systemPrompt).toContain('## Knowledge Base');
243
+ expect(result.systemPrompt).toContain('### Formatting Rules');
244
+ expect(result.systemPrompt).toContain('Always use markdown tables');
245
+ });
246
+ it('falls back to name when title is missing', () => {
247
+ const result = compileContext({
248
+ name: 'Agent',
249
+ knowledge: [{ name: 'rules', body: 'Some rules here.' }],
250
+ });
251
+ expect(result.systemPrompt).toContain('### rules');
252
+ expect(result.systemPrompt).toContain('Some rules here.');
253
+ });
254
+ // -------------------------------------------------------------------------
255
+ // 7. Store schemas
256
+ // -------------------------------------------------------------------------
257
+ it('renders store schemas as tables', () => {
258
+ const result = compileContext({
259
+ name: 'Agent',
260
+ stores: [makeStore()],
261
+ });
262
+ const prompt = result.systemPrompt;
263
+ expect(prompt).toContain('## Data Stores');
264
+ expect(prompt).toContain('### deals');
265
+ expect(prompt).toContain('Entity: Deal (key: `{company}_{quarter}`)');
266
+ expect(prompt).toContain('| Field | Type |');
267
+ expect(prompt).toContain('| company | string |');
268
+ expect(prompt).toContain('| amount | number |');
269
+ expect(prompt).toContain('| stage | lead | qualified | closed |');
270
+ expect(prompt).toContain('| contacts | string[] |');
271
+ expect(prompt).toContain('| closedAt | datetime | null |');
272
+ expect(prompt).toContain('query_store');
273
+ });
274
+ it('renders multiple stores', () => {
275
+ const result = compileContext({
276
+ name: 'Agent',
277
+ stores: [
278
+ makeStore(),
279
+ makeStore({
280
+ name: 'contacts',
281
+ entity: { name: 'Contact', key: '{email}', schema: { email: { type: 'string' }, active: { type: 'boolean' } } },
282
+ }),
283
+ ],
284
+ });
285
+ expect(result.systemPrompt).toContain('### deals');
286
+ expect(result.systemPrompt).toContain('### contacts');
287
+ expect(result.systemPrompt).toContain('| email | string |');
288
+ });
289
+ it('renders ref fields with store name', () => {
290
+ const result = compileContext({
291
+ name: 'Agent',
292
+ stores: [makeStore({
293
+ name: 'activities',
294
+ entity: {
295
+ name: 'Activity',
296
+ key: '{id}',
297
+ schema: { dealRef: { type: 'ref', store: 'deals' } },
298
+ },
299
+ })],
300
+ });
301
+ expect(result.systemPrompt).toContain('| dealRef | ref → deals |');
302
+ });
303
+ // -------------------------------------------------------------------------
304
+ // 8. Field guidance
305
+ // -------------------------------------------------------------------------
306
+ it('generates field guidance from connection access configs', () => {
307
+ const result = compileContext({
308
+ name: 'Agent',
309
+ connections: [makeConnection({
310
+ fieldRestrictions: [
311
+ { entity: 'Customer', field: 'tax_id', policy: 'never_retrieve', reason: 'PII' },
312
+ { entity: 'Customer', field: 'email', policy: 'retrieve_but_redact' },
313
+ { entity: 'Invoice', field: 'internal_notes', policy: 'role_gated', allowedRoles: ['admin'] },
314
+ ],
315
+ })],
316
+ userRoles: ['sales_rep'],
317
+ });
318
+ const prompt = result.systemPrompt;
319
+ expect(prompt).toContain('## Field Access Restrictions');
320
+ expect(prompt).toContain('Do not request: Customer.tax_id (PII)');
321
+ expect(prompt).toContain('Will be redacted: Customer.email');
322
+ expect(prompt).toContain('Do not request: Invoice.internal_notes (requires role: admin)');
323
+ });
324
+ it('allows role-gated fields when user has the role', () => {
325
+ const result = compileContext({
326
+ name: 'Agent',
327
+ connections: [makeConnection({
328
+ fieldRestrictions: [
329
+ { entity: 'Invoice', field: 'internal_notes', policy: 'role_gated', allowedRoles: ['admin'] },
330
+ ],
331
+ })],
332
+ userRoles: ['admin'],
333
+ });
334
+ // Should NOT include "Do not request" for a field the user has access to
335
+ expect(result.systemPrompt).not.toContain('Do not request: Invoice.internal_notes');
336
+ });
337
+ it('omits field guidance section when no restrictions', () => {
338
+ const result = compileContext({
339
+ name: 'Agent',
340
+ connections: [makeConnection({ fieldRestrictions: undefined })],
341
+ });
342
+ expect(result.systemPrompt).not.toContain('Field Access Restrictions');
343
+ });
344
+ // -------------------------------------------------------------------------
345
+ // 9. Scope labels
346
+ // -------------------------------------------------------------------------
347
+ it('resolves scope labels from row scoping rules', () => {
348
+ const result = compileContext({
349
+ name: 'Agent',
350
+ connections: [makeConnection({
351
+ rowScoping: {
352
+ Customer: {
353
+ admin: { type: 'all', label: 'all customers' },
354
+ sales_rep: { type: 'team', label: 'your team\'s customers' },
355
+ },
356
+ },
357
+ })],
358
+ userRoles: ['sales_rep'],
359
+ });
360
+ expect(result.systemPrompt).toContain('## Data Scope');
361
+ expect(result.systemPrompt).toContain("Customer: your team's customers");
362
+ });
363
+ it('omits scope section when no roles match', () => {
364
+ const result = compileContext({
365
+ name: 'Agent',
366
+ connections: [makeConnection({
367
+ rowScoping: {
368
+ Customer: { admin: { type: 'all', label: 'all customers' } },
369
+ },
370
+ })],
371
+ userRoles: ['viewer'],
372
+ });
373
+ expect(result.systemPrompt).not.toContain('## Data Scope');
374
+ });
375
+ // -------------------------------------------------------------------------
376
+ // 10. Alternative lookups
377
+ // -------------------------------------------------------------------------
378
+ it('generates alternative lookup guidance', () => {
379
+ const result = compileContext({
380
+ name: 'Agent',
381
+ connections: [makeConnection({
382
+ alternativeLookups: [
383
+ { restrictedField: 'Customer.tax_id', alternativeEndpoint: 'GET /v1/tax/ids', description: 'Tax ID lookup endpoint' },
384
+ ],
385
+ })],
386
+ });
387
+ expect(result.systemPrompt).toContain('Instead of Customer.tax_id, use GET /v1/tax/ids — Tax ID lookup endpoint');
388
+ });
389
+ // -------------------------------------------------------------------------
390
+ // 11. basePrompt override
391
+ // -------------------------------------------------------------------------
392
+ it('returns basePrompt directly without compiling', () => {
393
+ const result = compileContext({
394
+ name: 'Agent',
395
+ description: 'Should not appear',
396
+ basePrompt: 'You are a custom agent. Follow these rules.',
397
+ connections: [makeConnection()],
398
+ skills: [makeSkill()],
399
+ });
400
+ expect(result.source).toBe('base_prompt_override');
401
+ expect(result.systemPrompt).toBe('You are a custom agent. Follow these rules.');
402
+ expect(result.systemPrompt).not.toContain('Should not appear');
403
+ expect(result.systemPrompt).not.toContain('stripe');
404
+ });
405
+ // -------------------------------------------------------------------------
406
+ // 12. Contributions
407
+ // -------------------------------------------------------------------------
408
+ it('returns per-section token contributions', () => {
409
+ const input = makeFullInput();
410
+ const result = compileContext(input);
411
+ expect(result.contributions.length).toBeGreaterThan(0);
412
+ const categories = result.contributions.map((c) => c.category);
413
+ expect(categories).toContain('system');
414
+ expect(categories).toContain('connection');
415
+ expect(categories).toContain('skill');
416
+ expect(categories).toContain('knowledge');
417
+ expect(categories).toContain('store');
418
+ // Every contribution has a positive token count
419
+ for (const c of result.contributions) {
420
+ expect(c.tokens).toBeGreaterThan(0);
421
+ expect(c.name).toBeTruthy();
422
+ }
423
+ });
424
+ it('basePrompt override has single contribution', () => {
425
+ const result = compileContext({ name: 'Agent', basePrompt: 'Custom prompt.' });
426
+ expect(result.contributions).toHaveLength(1);
427
+ expect(result.contributions[0].name).toBe('Base prompt override');
428
+ });
429
+ // -------------------------------------------------------------------------
430
+ // 13. Plan mode
431
+ // -------------------------------------------------------------------------
432
+ it('includes plan mode section when active', () => {
433
+ const result = compileContext({ name: 'Agent', planMode: true });
434
+ expect(result.systemPrompt).toContain('## Planning Mode Active');
435
+ expect(result.systemPrompt).toContain('Present your plan to the user');
436
+ });
437
+ it('includes approved plan when provided', () => {
438
+ const result = compileContext({
439
+ name: 'Agent',
440
+ planMode: true,
441
+ approvedPlan: '1. Query Stripe\n2. Update store',
442
+ });
443
+ expect(result.systemPrompt).toContain('## Approved Plan');
444
+ expect(result.systemPrompt).toContain('1. Query Stripe');
445
+ });
446
+ // -------------------------------------------------------------------------
447
+ // 14. Agent override
448
+ // -------------------------------------------------------------------------
449
+ it('includes agentOverride in prompt', () => {
450
+ const result = compileContext({
451
+ name: 'Agent',
452
+ agentOverride: 'You specialize in data analysis.',
453
+ });
454
+ expect(result.systemPrompt).toContain('You specialize in data analysis.');
455
+ });
456
+ // -------------------------------------------------------------------------
457
+ // 15. Empty inputs
458
+ // -------------------------------------------------------------------------
459
+ it('handles empty connections, skills, knowledge, stores gracefully', () => {
460
+ const result = compileContext({
461
+ name: 'Agent',
462
+ connections: [],
463
+ skills: [],
464
+ knowledge: [],
465
+ stores: [],
466
+ });
467
+ expect(result.systemPrompt).not.toContain('## Connected systems');
468
+ expect(result.systemPrompt).not.toContain('## Skills');
469
+ expect(result.systemPrompt).not.toContain('## Knowledge Base');
470
+ expect(result.systemPrompt).not.toContain('## Data Stores');
471
+ });
472
+ it('handles undefined optional fields', () => {
473
+ const result = compileContext({ name: 'Minimal Agent' });
474
+ expect(result.source).toBe('compiled');
475
+ expect(result.systemPrompt).toContain('You are Minimal Agent.');
476
+ expect(result.systemPrompt).not.toContain('undefined');
477
+ expect(result.systemPrompt).not.toContain('null');
478
+ });
479
+ // -------------------------------------------------------------------------
480
+ // 16. Automation context
481
+ // -------------------------------------------------------------------------
482
+ it('includes automation context when provided', () => {
483
+ const result = compileContext({
484
+ name: 'Agent',
485
+ automationContext: 'This is a scheduled daily sync. Write results to the deals store.',
486
+ });
487
+ expect(result.systemPrompt).toContain('## Automation Context');
488
+ expect(result.systemPrompt).toContain('scheduled daily sync');
489
+ });
490
+ it('omits automation context section when not provided', () => {
491
+ const result = compileContext({ name: 'Agent' });
492
+ expect(result.systemPrompt).not.toContain('## Automation Context');
493
+ });
494
+ // -------------------------------------------------------------------------
495
+ // 17. Token budget warning
496
+ // -------------------------------------------------------------------------
497
+ it('emits warning when prompt exceeds maxSystemTokens', () => {
498
+ const result = compileContext({
499
+ name: 'Agent',
500
+ maxSystemTokens: 10, // absurdly low
501
+ });
502
+ expect(result.warnings).toHaveLength(1);
503
+ expect(result.warnings[0]).toContain('exceeds token budget');
504
+ });
505
+ it('no warning when prompt fits within maxSystemTokens', () => {
506
+ const result = compileContext({
507
+ name: 'Agent',
508
+ maxSystemTokens: 100_000,
509
+ });
510
+ expect(result.warnings).toHaveLength(0);
511
+ });
512
+ it('no warnings when maxSystemTokens is not set', () => {
513
+ const result = compileContext(makeFullInput());
514
+ expect(result.warnings).toHaveLength(0);
515
+ });
516
+ // -------------------------------------------------------------------------
517
+ // 18. Store contributions use accurate per-store estimates
518
+ // -------------------------------------------------------------------------
519
+ it('store contributions do not include section header overhead', () => {
520
+ const result = compileContext({
521
+ name: 'Agent',
522
+ stores: [makeStore()],
523
+ });
524
+ const storeContribution = result.contributions.find((c) => c.name === 'deals');
525
+ expect(storeContribution).toBeDefined();
526
+ // The contribution should not include "## Data Stores" header
527
+ // A single store with 5 fields should be ~200-400 chars (~50-100 tokens)
528
+ expect(storeContribution.tokens).toBeLessThan(150);
529
+ expect(storeContribution.tokens).toBeGreaterThan(20);
530
+ });
531
+ });
532
+ //# sourceMappingURL=compiler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.test.js","sourceRoot":"","sources":["../../../src/context/compiler.test.ts"],"names":[],"mappings":"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"}