@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,195 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Session types for the standalone session manager.
8
+ */
9
+ import type { ModelMessage } from 'ai';
10
+ import type { RuntimeEventPayload } from '@amodalai/types';
11
+ import type { TokenUsage, LLMProvider } from '../providers/types.js';
12
+ import type { ToolRegistry, ToolContext } from '../tools/types.js';
13
+ import type { PermissionChecker } from '../security/permission-checker.js';
14
+ import type { Logger } from '../logger.js';
15
+ /** Minimal event bus surface the session manager needs. */
16
+ export interface SessionEventBus {
17
+ emit: (payload: RuntimeEventPayload) => unknown;
18
+ }
19
+ /**
20
+ * Token usage for a single turn (one LLM call + tool executions).
21
+ * Reported via the `onUsage` callback on AgentContext.
22
+ */
23
+ export interface TurnUsage {
24
+ inputTokens: number;
25
+ outputTokens: number;
26
+ cachedInputTokens: number;
27
+ cacheCreationInputTokens: number;
28
+ totalTokens: number;
29
+ turnNumber: number;
30
+ }
31
+ /**
32
+ * Full automation configuration from the agent repo.
33
+ *
34
+ * All fields are defined here. Only `schedule`, `prompt`, and `enabled`
35
+ * are currently implemented. The parser reads and validates the full
36
+ * schema; unimplemented fields are stored but ignored, so when future
37
+ * features ship the config is already parsed.
38
+ */
39
+ export interface AutomationConfig {
40
+ name: string;
41
+ description?: string;
42
+ /** Cron expression */
43
+ schedule: string;
44
+ /** IANA timezone (default: UTC) */
45
+ timezone?: string;
46
+ prompt: string;
47
+ /** LLM model override (default: primary model) */
48
+ model?: string;
49
+ /** Max turns per run (default: 15) */
50
+ maxTurns?: number;
51
+ /** Max tokens per run */
52
+ budget?: number;
53
+ /** Delivery routing — parsed now, implemented in roadmap 3.1 */
54
+ delivery?: {
55
+ on: 'completion' | 'new_results';
56
+ targets: Array<{
57
+ type: 'webhook' | 'callback';
58
+ url?: string;
59
+ }>;
60
+ template?: string;
61
+ };
62
+ /** Failure alerting — parsed now, implemented in roadmap 3.1 */
63
+ failureAlert?: {
64
+ after: number;
65
+ targets: Array<{
66
+ type: 'webhook' | 'callback';
67
+ url?: string;
68
+ }>;
69
+ cooldownMinutes?: number;
70
+ };
71
+ enabled: boolean;
72
+ }
73
+ /**
74
+ * Result of an automation run (returned to onAutomationResult hook).
75
+ */
76
+ export interface AutomationResult {
77
+ automation: string;
78
+ response: string;
79
+ toolCalls: Array<{
80
+ toolName: string;
81
+ toolId: string;
82
+ status: 'success' | 'error';
83
+ durationMs?: number;
84
+ }>;
85
+ outputSent: boolean;
86
+ durationMs: number;
87
+ usage: TokenUsage;
88
+ }
89
+ /**
90
+ * Shape of a persisted session record in the database.
91
+ * Versioned from day one so we can migrate the format later.
92
+ */
93
+ export interface PersistedSession {
94
+ version: 1;
95
+ id: string;
96
+ messages: ModelMessage[];
97
+ tokenUsage: TokenUsage;
98
+ metadata: SessionMetadata;
99
+ createdAt: Date;
100
+ updatedAt: Date;
101
+ }
102
+ /** Metadata stored alongside a session. */
103
+ export interface SessionMetadata {
104
+ title?: string;
105
+ model?: string;
106
+ provider?: string;
107
+ appId?: string;
108
+ automationName?: string;
109
+ [key: string]: unknown;
110
+ }
111
+ /**
112
+ * A live session managed by the standalone SessionManager.
113
+ *
114
+ * This is the runtime representation — it holds the components needed
115
+ * to execute messages via the agent loop. Separate from the persisted
116
+ * session which only holds serializable data.
117
+ */
118
+ export interface Session {
119
+ id: string;
120
+ /** LLM provider for this session (pinned at creation) */
121
+ provider: LLMProvider;
122
+ /** Tool registry holding all available tools */
123
+ toolRegistry: ToolRegistry;
124
+ /** Permission checker for tool execution */
125
+ permissionChecker: PermissionChecker;
126
+ /** Logger scoped to this session */
127
+ logger: Logger;
128
+ /** Compiled system prompt */
129
+ systemPrompt: string;
130
+ /** Mutable: conversation messages */
131
+ messages: ModelMessage[];
132
+ /** Mutable: accumulated token usage */
133
+ usage: TokenUsage;
134
+ /** Model identifier (pinned at creation, survives resume) */
135
+ model: string;
136
+ /** Provider name (pinned at creation, survives resume) */
137
+ providerName: string;
138
+ /** User roles for permission checks and field guidance */
139
+ userRoles: string[];
140
+ /** App ID for multi-app isolation */
141
+ appId: string;
142
+ /** Session metadata (title, automation info, etc.) */
143
+ metadata: SessionMetadata;
144
+ /** Timestamps */
145
+ createdAt: number;
146
+ lastAccessedAt: number;
147
+ /** Max turns for the agent loop */
148
+ maxTurns: number;
149
+ /** Max context tokens (provider limit) */
150
+ maxContextTokens: number;
151
+ /** Optional total-token budget; loop stops with reason `budget_exceeded` */
152
+ maxSessionTokens?: number;
153
+ /** Tool context factory cached from session creation (avoids rebuilding per request) */
154
+ toolContextFactory?: (callId: string) => ToolContext;
155
+ }
156
+ /** Options for creating the standalone SessionManager. */
157
+ export interface SessionManagerOptions {
158
+ /** Session TTL in milliseconds (default: 30 minutes) */
159
+ ttlMs?: number;
160
+ /** Cleanup interval in milliseconds (default: 5 minutes) */
161
+ cleanupIntervalMs?: number;
162
+ /** Logger for the session manager itself */
163
+ logger: Logger;
164
+ /** Default max turns per session (default: 50) */
165
+ defaultMaxTurns?: number;
166
+ /** Default max context tokens (default: 200_000) */
167
+ defaultMaxContextTokens?: number;
168
+ /** Default token budget per session (default: undefined, no cap) */
169
+ defaultMaxSessionTokens?: number;
170
+ /** Optional event bus for emitting session lifecycle events */
171
+ eventBus?: SessionEventBus;
172
+ }
173
+ /** Options for creating a new session. */
174
+ export interface CreateSessionOptions {
175
+ provider: LLMProvider;
176
+ toolRegistry: ToolRegistry;
177
+ permissionChecker: PermissionChecker;
178
+ systemPrompt: string;
179
+ appId?: string;
180
+ metadata?: SessionMetadata;
181
+ maxTurns?: number;
182
+ maxContextTokens?: number;
183
+ /** Optional total-token budget; loop stops with `budget_exceeded` when reached */
184
+ maxSessionTokens?: number;
185
+ /** Optional: seed messages for resuming */
186
+ messages?: ModelMessage[];
187
+ /** Optional: seed token usage for resuming */
188
+ usage?: TokenUsage;
189
+ /** User roles for permission checks and field guidance */
190
+ userRoles?: string[];
191
+ /** Optional: onUsage callback fired after each turn */
192
+ onUsage?: (usage: TurnUsage) => void;
193
+ /** Optional: tool context factory to cache on the session */
194
+ toolContextFactory?: (callId: string) => ToolContext;
195
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
7
+ import type { LoadedStore } from '@amodalai/core';
8
+ import type { StoreBackend, StoreDocument, StoreDocumentMeta, StorePutResult, StoreListOptions, StoreListResult } from '@amodalai/types';
9
+ import type { Logger } from '../logger.js';
10
+ type AnyPgDatabase = PgDatabase<PgQueryResultHKT, Record<string, unknown>>;
11
+ export interface DrizzleStoreBackendOptions {
12
+ db: AnyPgDatabase;
13
+ stores: LoadedStore[];
14
+ logger: Logger;
15
+ onClose: () => Promise<void>;
16
+ }
17
+ export declare class DrizzleStoreBackend implements StoreBackend {
18
+ private readonly db;
19
+ private readonly storeConfigs;
20
+ private readonly logger;
21
+ private readonly onClose;
22
+ private writeQueue;
23
+ private closed;
24
+ constructor(opts: DrizzleStoreBackendOptions);
25
+ /**
26
+ * StoreBackend.initialize() — no-op on this class. The concrete
27
+ * factory (createPGLiteStoreBackend / createPostgresStoreBackend)
28
+ * creates the db client and runs DDL before constructing this
29
+ * backend. Kept for interface compliance.
30
+ */
31
+ initialize(_stores: LoadedStore[]): Promise<void>;
32
+ /**
33
+ * Serialize write operations through a queue so that PGLite's
34
+ * single-threaded WASM engine never sees concurrent writes. Postgres
35
+ * doesn't need this strictly, but the overhead is negligible and the
36
+ * shared ordering semantics are valuable.
37
+ */
38
+ private enqueue;
39
+ private ensureOpen;
40
+ get(appId: string, store: string, key: string): Promise<StoreDocument | null>;
41
+ put(appId: string, store: string, key: string, payload: Record<string, unknown>, meta: Partial<StoreDocumentMeta>): Promise<StorePutResult>;
42
+ list(appId: string, store: string, options?: StoreListOptions): Promise<StoreListResult>;
43
+ delete(appId: string, store: string, key: string): Promise<boolean>;
44
+ history(appId: string, store: string, key: string): Promise<StoreDocument[]>;
45
+ purgeExpired(appId: string, store?: string): Promise<number>;
46
+ close(): Promise<void>;
47
+ private rowToDocument;
48
+ }
49
+ export {};
@@ -0,0 +1,306 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Shared Drizzle-ORM StoreBackend implementation.
8
+ *
9
+ * One query layer used by both PGLiteStoreBackend (local dev, in-process
10
+ * WASM Postgres) and PostgresStoreBackend (hosted runtime, real Postgres).
11
+ * Each concrete factory constructs the underlying db client and passes it
12
+ * here along with an `onClose` callback for teardown.
13
+ *
14
+ * Errors bubble up as StoreError — callers at module edges (routes,
15
+ * tool-context factory) are responsible for handling.
16
+ */
17
+ import { sql, and, eq, lte, gt, isNull, or, desc, asc, count } from 'drizzle-orm';
18
+ import { storeDocuments, storeDocumentVersions } from './schema.js';
19
+ import { resolveTtl } from './ttl-resolver.js';
20
+ import { StoreError } from '../errors.js';
21
+ // Valid JSONB field identifier — alphanumerics and underscore only, must
22
+ // start with a letter or underscore. Used to guard filter/sort fields
23
+ // before interpolating into raw SQL via Drizzle's sql`` tag.
24
+ const FIELD_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
25
+ export class DrizzleStoreBackend {
26
+ db;
27
+ storeConfigs;
28
+ logger;
29
+ onClose;
30
+ writeQueue = Promise.resolve();
31
+ closed = false;
32
+ constructor(opts) {
33
+ this.db = opts.db;
34
+ this.logger = opts.logger;
35
+ this.onClose = opts.onClose;
36
+ this.storeConfigs = new Map(opts.stores.map((s) => [s.name, s]));
37
+ }
38
+ /**
39
+ * StoreBackend.initialize() — no-op on this class. The concrete
40
+ * factory (createPGLiteStoreBackend / createPostgresStoreBackend)
41
+ * creates the db client and runs DDL before constructing this
42
+ * backend. Kept for interface compliance.
43
+ */
44
+ async initialize(_stores) {
45
+ // Intentionally empty — initialization happens in the factories.
46
+ }
47
+ /**
48
+ * Serialize write operations through a queue so that PGLite's
49
+ * single-threaded WASM engine never sees concurrent writes. Postgres
50
+ * doesn't need this strictly, but the overhead is negligible and the
51
+ * shared ordering semantics are valuable.
52
+ */
53
+ enqueue(fn) {
54
+ const task = this.writeQueue.then(fn, fn);
55
+ this.writeQueue = task.then(() => { }, () => { });
56
+ return task;
57
+ }
58
+ ensureOpen(store, operation) {
59
+ if (this.closed) {
60
+ throw new StoreError('Store backend is closed', { store, operation });
61
+ }
62
+ }
63
+ async get(appId, store, key) {
64
+ this.ensureOpen(store, 'get');
65
+ try {
66
+ const rows = await this.db
67
+ .select()
68
+ .from(storeDocuments)
69
+ .where(and(eq(storeDocuments.appId, appId), eq(storeDocuments.store, store), eq(storeDocuments.key, key)))
70
+ .limit(1);
71
+ if (rows.length === 0)
72
+ return null;
73
+ return this.rowToDocument(rows[0]);
74
+ }
75
+ catch (err) {
76
+ throw new StoreError('get failed', { store, operation: 'get', context: { appId, key }, cause: err });
77
+ }
78
+ }
79
+ async put(appId, store, key, payload, meta) {
80
+ this.ensureOpen(store, 'put');
81
+ return this.enqueue(async () => {
82
+ const storeConfig = this.storeConfigs.get(store);
83
+ const ttlSeconds = resolveTtl(storeConfig?.ttl, payload);
84
+ const maxVersions = storeConfig?.history?.versions;
85
+ const fullMeta = {
86
+ computedAt: new Date().toISOString(),
87
+ stale: false,
88
+ ...meta,
89
+ ttl: ttlSeconds,
90
+ };
91
+ const expiresAt = ttlSeconds ? new Date(Date.now() + ttlSeconds * 1000) : null;
92
+ try {
93
+ const existing = await this.db
94
+ .select({
95
+ version: storeDocuments.version,
96
+ payload: storeDocuments.payload,
97
+ meta: storeDocuments.meta,
98
+ })
99
+ .from(storeDocuments)
100
+ .where(and(eq(storeDocuments.appId, appId), eq(storeDocuments.store, store), eq(storeDocuments.key, key)))
101
+ .limit(1);
102
+ if (existing.length > 0) {
103
+ const oldVersion = existing[0].version;
104
+ const newVersion = oldVersion + 1;
105
+ if (maxVersions && maxVersions > 0) {
106
+ await this.db.insert(storeDocumentVersions).values({
107
+ appId,
108
+ store,
109
+ key,
110
+ version: oldVersion,
111
+ payload: existing[0].payload,
112
+ meta: existing[0].meta,
113
+ });
114
+ // Trim history: keep only the most recent maxVersions rows.
115
+ await this.db.execute(sql `
116
+ DELETE FROM ${storeDocumentVersions}
117
+ WHERE ${storeDocumentVersions.appId} = ${appId}
118
+ AND ${storeDocumentVersions.store} = ${store}
119
+ AND ${storeDocumentVersions.key} = ${key}
120
+ AND ${storeDocumentVersions.version} <= (
121
+ SELECT COALESCE(MAX(${storeDocumentVersions.version}), 0) - ${maxVersions}
122
+ FROM ${storeDocumentVersions}
123
+ WHERE ${storeDocumentVersions.appId} = ${appId}
124
+ AND ${storeDocumentVersions.store} = ${store}
125
+ AND ${storeDocumentVersions.key} = ${key}
126
+ )
127
+ `);
128
+ }
129
+ await this.db
130
+ .update(storeDocuments)
131
+ .set({
132
+ version: newVersion,
133
+ payload,
134
+ meta: fullMeta,
135
+ expiresAt,
136
+ updatedAt: new Date(),
137
+ })
138
+ .where(and(eq(storeDocuments.appId, appId), eq(storeDocuments.store, store), eq(storeDocuments.key, key)));
139
+ return { stored: true, key, version: newVersion, previousVersion: oldVersion };
140
+ }
141
+ await this.db.insert(storeDocuments).values({
142
+ appId,
143
+ store,
144
+ key,
145
+ version: 1,
146
+ payload,
147
+ meta: fullMeta,
148
+ expiresAt,
149
+ });
150
+ return { stored: true, key, version: 1 };
151
+ }
152
+ catch (err) {
153
+ throw new StoreError('put failed', { store, operation: 'put', context: { appId, key }, cause: err });
154
+ }
155
+ });
156
+ }
157
+ async list(appId, store, options = {}) {
158
+ this.ensureOpen(store, 'list');
159
+ const { filter, sort, limit = 100, offset = 0, includeStale = false } = options;
160
+ try {
161
+ const conds = [eq(storeDocuments.appId, appId), eq(storeDocuments.store, store)];
162
+ if (!includeStale) {
163
+ const staleCond = or(isNull(storeDocuments.expiresAt), gt(storeDocuments.expiresAt, new Date()));
164
+ if (staleCond)
165
+ conds.push(staleCond);
166
+ }
167
+ if (filter) {
168
+ for (const [field, value] of Object.entries(filter)) {
169
+ if (!FIELD_NAME_RE.test(field)) {
170
+ throw new StoreError(`Invalid store filter field name: ${field}`, {
171
+ store,
172
+ operation: 'list',
173
+ context: { field },
174
+ });
175
+ }
176
+ // `field` is regex-validated (safe to inline). `value` is bound as a parameter.
177
+ conds.push(sql `${storeDocuments.payload}->>${sql.raw(`'${field}'`)} = ${String(value)}`);
178
+ }
179
+ }
180
+ const whereClause = and(...conds);
181
+ const totalRows = await this.db
182
+ .select({ total: count() })
183
+ .from(storeDocuments)
184
+ .where(whereClause);
185
+ const total = Number(totalRows[0]?.total ?? 0);
186
+ // If limit is 0, the caller only wants the count — skip the data fetch.
187
+ if (limit === 0) {
188
+ return { documents: [], total, hasMore: total > 0 };
189
+ }
190
+ let orderExpr;
191
+ if (sort) {
192
+ const descOrder = sort.startsWith('-');
193
+ const field = descOrder ? sort.slice(1) : sort;
194
+ if (!FIELD_NAME_RE.test(field)) {
195
+ throw new StoreError(`Invalid store sort field name: ${field}`, {
196
+ store,
197
+ operation: 'list',
198
+ context: { sort },
199
+ });
200
+ }
201
+ const fieldSql = sql `${storeDocuments.payload}->>${sql.raw(`'${field}'`)}`;
202
+ orderExpr = descOrder ? desc(fieldSql) : asc(fieldSql);
203
+ }
204
+ else {
205
+ orderExpr = desc(storeDocuments.updatedAt);
206
+ }
207
+ const rows = await this.db
208
+ .select()
209
+ .from(storeDocuments)
210
+ .where(whereClause)
211
+ .orderBy(orderExpr)
212
+ .limit(limit)
213
+ .offset(offset);
214
+ const documents = rows.map((r) => this.rowToDocument(r));
215
+ return { documents, total, hasMore: offset + documents.length < total };
216
+ }
217
+ catch (err) {
218
+ if (err instanceof StoreError)
219
+ throw err;
220
+ throw new StoreError('list failed', { store, operation: 'list', context: { appId }, cause: err });
221
+ }
222
+ }
223
+ async delete(appId, store, key) {
224
+ this.ensureOpen(store, 'delete');
225
+ return this.enqueue(async () => {
226
+ try {
227
+ await this.db
228
+ .delete(storeDocumentVersions)
229
+ .where(and(eq(storeDocumentVersions.appId, appId), eq(storeDocumentVersions.store, store), eq(storeDocumentVersions.key, key)));
230
+ const deleted = await this.db
231
+ .delete(storeDocuments)
232
+ .where(and(eq(storeDocuments.appId, appId), eq(storeDocuments.store, store), eq(storeDocuments.key, key)))
233
+ .returning({ key: storeDocuments.key });
234
+ return deleted.length > 0;
235
+ }
236
+ catch (err) {
237
+ throw new StoreError('delete failed', { store, operation: 'delete', context: { appId, key }, cause: err });
238
+ }
239
+ });
240
+ }
241
+ async history(appId, store, key) {
242
+ this.ensureOpen(store, 'history');
243
+ try {
244
+ const rows = await this.db
245
+ .select()
246
+ .from(storeDocumentVersions)
247
+ .where(and(eq(storeDocumentVersions.appId, appId), eq(storeDocumentVersions.store, store), eq(storeDocumentVersions.key, key)))
248
+ .orderBy(desc(storeDocumentVersions.version));
249
+ return rows.map((r) => ({
250
+ key: r.key,
251
+ appId: r.appId,
252
+ store: r.store,
253
+ version: r.version,
254
+ payload: r.payload,
255
+ meta: r.meta,
256
+ }));
257
+ }
258
+ catch (err) {
259
+ throw new StoreError('history failed', { store, operation: 'history', context: { appId, key }, cause: err });
260
+ }
261
+ }
262
+ async purgeExpired(appId, store) {
263
+ this.ensureOpen(store ?? '(all)', 'purgeExpired');
264
+ return this.enqueue(async () => {
265
+ try {
266
+ const conds = [
267
+ eq(storeDocuments.appId, appId),
268
+ sql `${storeDocuments.expiresAt} IS NOT NULL`,
269
+ lte(storeDocuments.expiresAt, new Date()),
270
+ ];
271
+ if (store)
272
+ conds.push(eq(storeDocuments.store, store));
273
+ const deleted = await this.db
274
+ .delete(storeDocuments)
275
+ .where(and(...conds))
276
+ .returning({ key: storeDocuments.key });
277
+ return deleted.length;
278
+ }
279
+ catch (err) {
280
+ throw new StoreError('purgeExpired failed', { store: store ?? '(all)', operation: 'purgeExpired', context: { appId }, cause: err });
281
+ }
282
+ });
283
+ }
284
+ async close() {
285
+ if (this.closed)
286
+ return;
287
+ this.closed = true;
288
+ // Wait for any in-flight writes to settle before closing the db.
289
+ await this.writeQueue.catch(() => { });
290
+ await this.onClose();
291
+ this.logger.debug('store_backend_closed', {});
292
+ }
293
+ rowToDocument(row) {
294
+ const isStale = row.expiresAt ? row.expiresAt <= new Date() : false;
295
+ const meta = { ...row.meta, stale: isStale };
296
+ return {
297
+ key: row.key,
298
+ appId: row.appId,
299
+ store: row.store,
300
+ version: row.version,
301
+ payload: row.payload,
302
+ meta,
303
+ };
304
+ }
305
+ }
306
+ //# sourceMappingURL=drizzle-store-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle-store-backend.js","sourceRoot":"","sources":["../../../src/stores/drizzle-store-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};