@desplega.ai/agent-swarm 2.7.4 → 2.7.6

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 (326) hide show
  1. package/README.md +1 -1
  2. package/dist/acp-adapter-bp91d37f.js +15 -0
  3. package/dist/{actions-gfrr9vb7.js → actions-yj0eeaqh.js} +19 -18
  4. package/dist/{amp-adapter-0s58gm46.js → amp-adapter-4pg9h34q.js} +3 -3
  5. package/dist/{app-stvq692g.js → app-909e97cr.js} +3 -3
  6. package/dist/{assistant-5s37fr9n.js → assistant-qdyb5fyy.js} +32 -23
  7. package/dist/{boot-reembed-yzy1841n.js → boot-reembed-fk0s9z18.js} +1 -1
  8. package/dist/{boot-reembed-cv82gz7y.js → boot-reembed-gs1rzrnh.js} +1 -1
  9. package/dist/{boot-scrub-sweep-8k4q95ap.js → boot-scrub-sweep-4qfd4kfx.js} +4 -4
  10. package/dist/{boot-seeds-ftt9htah.js → boot-seeds-yr00k13d.js} +4 -4
  11. package/dist/{boxd-515v1t8z.js → boxd-vdmfssd9.js} +5 -5
  12. package/dist/{claude-adapter-t00wrzeh.js → claude-adapter-qta1f1xn.js} +7 -7
  13. package/dist/{claude-managed-adapter-g6vmjccb.js → claude-managed-adapter-dvs2xw5n.js} +2 -2
  14. package/dist/{claude-managed-setup-afpa82f7.js → claude-managed-setup-sc6j4dm0.js} +3 -3
  15. package/dist/{claude-sdk-session-vj0c2azx.js → claude-sdk-session-zgrz6yvc.js} +9175 -9076
  16. package/dist/{cli-gjr2y2xk.js → cli-0agcv1v5.js} +4 -1
  17. package/dist/{cli-edmm9d9y.js → cli-0at8w34w.js} +7 -7
  18. package/dist/{cli-a81qevyg.js → cli-0qatpy8q.js} +20 -36
  19. package/dist/{cli-bcz074zx.js → cli-0yv5z2pg.js} +1 -1
  20. package/dist/{cli-a4btqqft.js → cli-1b7btd38.js} +1 -1
  21. package/dist/{cli-a2jw6ee5.js → cli-1p89xny0.js} +1 -1
  22. package/dist/{cli-v726afdm.js → cli-2pnswgh8.js} +1 -1
  23. package/dist/{cli-jkt52mgt.js → cli-386tyxxg.js} +2 -2
  24. package/dist/{cli-az0bpf8p.js → cli-3ypk9vk1.js} +3 -3
  25. package/dist/{cli-wk9md5px.js → cli-436532ck.js} +4 -4
  26. package/dist/{cli-7n5sbw0z.js → cli-4necwtsv.js} +5 -5
  27. package/dist/cli-54t00gt8.js +151 -0
  28. package/dist/{cli-655xm9ms.js → cli-583frbyr.js} +1 -1
  29. package/dist/{cli-4r12t6w6.js → cli-5c4hjzne.js} +101 -4
  30. package/dist/{cli-hf6zt5m6.js → cli-69szn7w7.js} +17 -1
  31. package/dist/{cli-rtk9g7av.js → cli-73jzwksr.js} +6 -2
  32. package/dist/{cli-jg0nfda6.js → cli-75gkpjvw.js} +52 -21
  33. package/dist/{cli-wcmnan2g.js → cli-89knwags.js} +5 -5
  34. package/dist/{cli-pwyevs29.js → cli-8bc1w0tw.js} +22 -21
  35. package/dist/{cli-t282jgab.js → cli-8snvgs5r.js} +41 -16
  36. package/dist/{cli-vqgnyh76.js → cli-98rw5dt5.js} +15 -3
  37. package/dist/{cli-9cctx1tn.js → cli-a22h291q.js} +1 -1
  38. package/dist/{cli-ycm6180s.js → cli-a7v854rf.js} +5 -3
  39. package/dist/{cli-98pke4vk.js → cli-ae7mrdf9.js} +2 -2
  40. package/dist/{cli-je8yeyc5.js → cli-bjb3z51z.js} +5 -5
  41. package/dist/{cli-mc97xy2s.js → cli-c60vetmm.js} +16 -4
  42. package/dist/{cli-j4kw3rsx.js → cli-cm5yqn35.js} +18 -0
  43. package/dist/{cli-wndv9p7g.js → cli-decfb6v8.js} +6 -6
  44. package/dist/{cli-h55y2bjc.js → cli-dhar9qay.js} +2 -2
  45. package/dist/{cli-8yy525ad.js → cli-drr5v6av.js} +2 -2
  46. package/dist/{cli-5gr1g711.js → cli-dxae2yg7.js} +2 -2
  47. package/dist/{cli-pe09p6dv.js → cli-e3r2neck.js} +8 -7
  48. package/dist/{cli-13jvmew3.js → cli-ekwks2vs.js} +7 -7
  49. package/dist/{cli-jg4p5t36.js → cli-es6va8jk.js} +121 -51
  50. package/dist/{cli-j4kt1mpb.js → cli-faxe6thg.js} +3 -3
  51. package/dist/{cli-tzrpv5sc.js → cli-ftyxyspd.js} +1 -1
  52. package/dist/cli-fw2w0kva.js +47 -0
  53. package/dist/{cli-2dfbv8qr.js → cli-fy6x31ps.js} +1 -0
  54. package/dist/{cli-aq58fk5m.js → cli-g83s9ewh.js} +7 -1
  55. package/dist/cli-gdhpcbhf.js +55 -0
  56. package/dist/{cli-82jg7fp9.js → cli-he5nxaa8.js} +1 -1
  57. package/dist/{cli-8veytvbh.js → cli-he9wchme.js} +1 -1
  58. package/dist/{cli-k76tgq03.js → cli-hgaazk69.js} +2 -2
  59. package/dist/{cli-d2pzqej1.js → cli-hr2e2fft.js} +741 -7
  60. package/dist/{cli-dae4sbgy.js → cli-jm2vfpfd.js} +2 -2
  61. package/dist/{cli-1s1dqn1j.js → cli-k2gzwsj2.js} +297 -140
  62. package/dist/{cli-b1afgtj3.js → cli-kqdg1bsb.js} +3 -3
  63. package/dist/cli-m2z8jagn.js +12078 -0
  64. package/dist/{cli-mvckssyq.js → cli-m48g6p95.js} +5 -5
  65. package/dist/{cli-bwty35gx.js → cli-mthwvjre.js} +1 -1
  66. package/dist/{cli-41z8xwj0.js → cli-nhrvpaj7.js} +34 -8
  67. package/dist/{cli-ahd90bwt.js → cli-nwj0ee2w.js} +6 -6
  68. package/dist/{cli-kvtc7aez.js → cli-p5gp8pcx.js} +44 -14
  69. package/dist/{cli-avgcz4ra.js → cli-pd7vagab.js} +436 -171
  70. package/dist/{cli-zn15c46z.js → cli-q0k1w5zd.js} +1 -1
  71. package/dist/{cli-bq2pcphn.js → cli-rmmmrjkd.js} +1 -1
  72. package/dist/{cli-2qpvmmkw.js → cli-s0qnd4wv.js} +1 -1
  73. package/dist/{cli-kg8hchyg.js → cli-sa02jsqt.js} +1 -1
  74. package/dist/{cli-1yekbyqm.js → cli-shpbx5ee.js} +283 -82
  75. package/dist/{cli-9y354g3j.js → cli-srye3vdt.js} +1 -1
  76. package/dist/{cli-byqfbnjw.js → cli-svj5090z.js} +9 -9
  77. package/dist/{cli-gcbdjt47.js → cli-vfym7wmz.js} +6 -6
  78. package/dist/{cli-v1yw3wha.js → cli-vvpx3gsx.js} +4 -4
  79. package/dist/{cli-a1fhj4n9.js → cli-w6dt9ged.js} +2 -2
  80. package/dist/{cli-1gm8jcyr.js → cli-waqbxg08.js} +5232 -68
  81. package/dist/{cli-5hjced2v.js → cli-wp9sp1qb.js} +6 -6
  82. package/dist/{cli-eny54typ.js → cli-wx3rhnm0.js} +1 -1
  83. package/dist/{cli-s0exq74r.js → cli-xbbndvjy.js} +3 -3
  84. package/dist/{cli-f255yaqn.js → cli-xds5f77d.js} +3 -3
  85. package/dist/{cli-0sbkss7h.js → cli-xnqgpshy.js} +2 -2
  86. package/dist/{cli-0fgr1w9b.js → cli-xnrwazav.js} +20 -3
  87. package/dist/{cli-gf5hbmdr.js → cli-yjdgea32.js} +3 -3
  88. package/dist/{cli-cq1pf336.js → cli-yn4kxs06.js} +124 -11
  89. package/dist/{cli-224epwwf.js → cli-yx4kfngt.js} +3 -3
  90. package/dist/{cli-eqx6k993.js → cli-yy3rhsdw.js} +47 -13
  91. package/dist/{cli-36g23z21.js → cli-zbbwez0r.js} +4 -4
  92. package/dist/{cli-ktmvb20s.js → cli-zm72anhg.js} +12 -12
  93. package/dist/cli.js +26 -25
  94. package/dist/{codex-adapter-g0gctw29.js → codex-adapter-ayd1fb6h.js} +5 -5
  95. package/dist/{codex-hook-vrzz2xhr.js → codex-hook-9efm2x1m.js} +1 -1
  96. package/dist/{codex-login-0gg46ygn.js → codex-login-y0pmff1c.js} +1 -1
  97. package/dist/{codex-session-runner-dr2cxe1c.js → codex-session-runner-jesa32xc.js} +6 -6
  98. package/dist/{commands-1p07cvff.js → commands-hanewgf2.js} +9 -3
  99. package/dist/{controller-z0s7sv6r.js → controller-dt1n3c1q.js} +9 -4
  100. package/dist/{controllers-connect-x9kvvhyk.js → controllers-connect-xx8x64n5.js} +22 -21
  101. package/dist/{cursor-adapter-m5b98pvk.js → cursor-adapter-9s4dwwdw.js} +2 -2
  102. package/dist/{db-capk2raj.js → db-3vttcbv4.js} +3 -3
  103. package/dist/{db-rsh04kh3.js → db-9dv0g1ab.js} +12 -4
  104. package/dist/{devin-adapter-yxm87fe9.js → devin-adapter-r9phbnc9.js} +1 -1
  105. package/dist/{devtools-82fzqra8.js → devtools-qxfgbsqz.js} +1 -1
  106. package/dist/{dispatcher-304q6fwa.js → dispatcher-tx9hd1sv.js} +18 -17
  107. package/dist/{docker-7rxt0rry.js → docker-c1a3gqmf.js} +91 -24
  108. package/dist/{dsh-adapter-btewem0y.js → dsh-adapter-007y4ejs.js} +2 -2
  109. package/dist/{e2b-renc0k8q.js → e2b-a19d28rz.js} +4 -4
  110. package/dist/{e2b-7fc9b9bd.js → e2b-we6hs6q5.js} +6 -6
  111. package/dist/{easter-egg-3d-fm1p3n4d.js → easter-egg-3d-rgbrqb8s.js} +1 -1
  112. package/dist/{embedding-space-s68v49ct.js → embedding-space-ny1e2940.js} +6 -6
  113. package/dist/{embeddings-4ms3604w.js → embeddings-2t386t13.js} +1 -1
  114. package/dist/{event-bus-dfjx2qdh.js → event-bus-g0ka3pbw.js} +1 -1
  115. package/dist/{execute-mcdgccjs.js → execute-pksh0ceh.js} +1 -1
  116. package/dist/{external-channel-9dxwfztn.js → external-channel-phgmhmd7.js} +2 -2
  117. package/dist/fx-adapter-fy8rr921.js +18 -0
  118. package/dist/{google-generative-ai-yvmdxyxa.js → google-generative-ai-8y3m3k4b.js} +1 -1
  119. package/dist/{google-vertex-jrtdh9gs.js → google-vertex-w3v98n7b.js} +1 -1
  120. package/dist/{grok-adapter-05ecv4h0.js → grok-adapter-q0abvpaj.js} +8 -8
  121. package/dist/handlers-by3sfxyx.js +32 -0
  122. package/dist/{heartbeat-3n94heh3.js → heartbeat-kadyek8p.js} +21 -20
  123. package/dist/{hook-aadrn69x.js → hook-5zs3msf6.js} +6 -6
  124. package/dist/{hook-zxwje86c.js → hook-9k551xnj.js} +4 -4
  125. package/dist/{http-xzxk9mst.js → http-mhz9vw1f.js} +272 -103
  126. package/dist/index-4f2pvxae.js +37 -0
  127. package/dist/index-98gz7tmp.js +30 -0
  128. package/dist/{index-5rk6rfzr.js → index-fvzke5kx.js} +1 -1
  129. package/dist/index-k08z2cak.js +33 -0
  130. package/dist/{index-yqhz88yy.js → index-pxn30mse.js} +8 -8
  131. package/dist/{index-d34f6r87.js → index-q361cg2f.js} +1 -1
  132. package/dist/{index-9j4zwcht.js → index-rvr00sg7.js} +168 -675
  133. package/dist/{index-qeb82z37.js → index-vdygbq10.js} +1 -1
  134. package/dist/{keepalive-w4aakbyk.js → keepalive-w56f32cg.js} +4 -4
  135. package/dist/lead-enq35nqp.js +70 -0
  136. package/dist/{maintenance-hbptpk6p.js → maintenance-7mdgxcea.js} +1 -1
  137. package/dist/{oauth-refresh-sweep-217semrv.js → oauth-refresh-sweep-29txy9vk.js} +3 -3
  138. package/dist/{onboard-vz2s5df3.js → onboard-kpsrkarj.js} +5 -5
  139. package/dist/{opencode-adapter-gtfd7d7v.js → opencode-adapter-j25vm3rr.js} +5 -5
  140. package/dist/{otel-impl-aefave37.js → otel-impl-6kkct7a8.js} +2 -2
  141. package/dist/{pi-mono-adapter-f8h5yseh.js → pi-mono-adapter-exhkzhn2.js} +117 -23
  142. package/dist/{pricing-refresh-m1yhh9ya.js → pricing-refresh-n2x7jh6k.js} +3 -3
  143. package/dist/{rbac-roles-rrw8twdz.js → rbac-roles-81ypx6es.js} +1 -1
  144. package/dist/{rbac-roles-svj72cdf.js → rbac-roles-b5htkjby.js} +2 -2
  145. package/dist/{render-v2-amwbnfxh.js → render-v2-qn6jmpk4.js} +3 -3
  146. package/dist/{resume-9cd6wf6z.js → resume-wd30wx23.js} +7 -7
  147. package/dist/{runtime-fp4vrx7m.js → runtime-4hsg7h60.js} +1 -1
  148. package/dist/{session-access-21t6yjyg.js → session-access-5qvfevhk.js} +4 -4
  149. package/dist/{session-source-backfill-pxbzcsc6.js → session-source-backfill-n1czavbr.js} +3 -3
  150. package/dist/{setup-4592tqz4.js → setup-dnb56qy5.js} +3 -3
  151. package/dist/{virtual-modules-gzfnpmnz.js → virtual-modules-76xxv9fs.js} +2 -2
  152. package/dist/{work-objects-t9tcf174.js → work-objects-4n21tfkm.js} +21 -20
  153. package/dist/{worker-follow-up-q32jh4yk.js → worker-follow-up-77hvzxww.js} +18 -17
  154. package/dist/worker-gg1576j3.js +70 -0
  155. package/dist/{x-b6wxntdt.js → x-vmmye1kb.js} +2 -2
  156. package/openapi.json +189 -32
  157. package/package.json +8 -7
  158. package/src/be/db/script-runs.ts +23 -0
  159. package/src/be/db/session-summaries.ts +8 -2
  160. package/src/be/db/session-tree.ts +174 -61
  161. package/src/be/db/session-visibility.ts +5 -4
  162. package/src/be/db/tasks/read.ts +122 -3
  163. package/src/be/db-client.ts +8 -5
  164. package/src/be/db.ts +23 -8
  165. package/src/be/memory/providers/sqlite-store.ts +49 -12
  166. package/src/be/migrations/259_session_summaries_open_tasks.sql +111 -0
  167. package/src/be/migrations/260_runtime_pool_cache.sql +20 -0
  168. package/src/be/migrations/262_session_visibility_indexes.sql +18 -0
  169. package/src/be/migrations/263_task_list_filter_index.sql +11 -0
  170. package/src/be/migrations/264_slack_thread_cover_index.sql +9 -0
  171. package/src/be/migrations/266_script_runs_source_task.sql +11 -0
  172. package/src/be/model-validation.ts +5 -1
  173. package/src/be/pricing-normalize.ts +7 -2
  174. package/src/be/runtime-pools/cache-cleanup.ts +109 -0
  175. package/src/be/runtime-pools/db.ts +65 -6
  176. package/src/be/runtime-pools/remote-controller.ts +5 -0
  177. package/src/be/runtime-pools/supervisor.ts +33 -2
  178. package/src/be/scripts/typecheck.ts +23 -0
  179. package/src/be/seed/schedules-seeder.ts +135 -9
  180. package/src/be/seed/workflows-seeder.ts +65 -1
  181. package/src/be/seed-pricing.ts +23 -0
  182. package/src/be/seed-scripts/catalog/task-failure-audit.ts +5 -1
  183. package/src/be/steering.ts +50 -3
  184. package/src/be/swarm-config-guard.ts +1 -0
  185. package/src/commands/controller.ts +4 -0
  186. package/src/commands/entrypoint-api-readiness.ts +74 -0
  187. package/src/commands/provider-credentials.ts +29 -2
  188. package/src/commands/runner.ts +86 -5
  189. package/src/extensions/contract-types.generated.ts +1 -1
  190. package/src/extensions/contract.ts +27 -1
  191. package/src/extensions/dispatcher.ts +4 -0
  192. package/src/http/agents.ts +1 -0
  193. package/src/http/index.ts +1 -1
  194. package/src/http/list-total-cache.ts +14 -7
  195. package/src/http/mcp-bridge.ts +4 -0
  196. package/src/http/memory.ts +38 -9
  197. package/src/http/script-runs.ts +174 -5
  198. package/src/http/status.ts +10 -2
  199. package/src/http/tasks.ts +4 -2
  200. package/src/integrations/chat-sdk/inbound.ts +15 -5
  201. package/src/integrations/chat-sdk/steering.ts +3 -1
  202. package/src/kv-reserved-namespaces.ts +2 -0
  203. package/src/prompts/base-prompt.ts +4 -1
  204. package/src/prompts/session-templates.ts +26 -0
  205. package/src/providers/acp-adapter.ts +190 -26
  206. package/src/providers/acp-targets.ts +306 -6
  207. package/src/providers/amp-adapter.ts +1 -1
  208. package/src/providers/codex-adapter.ts +9 -44
  209. package/src/providers/codex-oauth/flow.ts +24 -3
  210. package/src/providers/codex-oauth/storage.ts +56 -17
  211. package/src/providers/codex-oauth/subscription.ts +67 -0
  212. package/src/providers/fx-adapter.ts +211 -0
  213. package/src/providers/index.ts +5 -1
  214. package/src/providers/mcp-loopback-proxy.ts +94 -0
  215. package/src/providers/pi-mono-adapter.ts +98 -13
  216. package/src/providers/pricing-sources.md +8 -0
  217. package/src/providers/reasoning-effort.ts +17 -1
  218. package/src/providers/types.ts +2 -1
  219. package/src/runtime-providers/controller-protocol.ts +14 -1
  220. package/src/runtime-providers/controller.ts +5 -0
  221. package/src/runtime-providers/docker.ts +108 -23
  222. package/src/runtime-providers/types.ts +16 -0
  223. package/src/scheduler/scheduler.ts +36 -3
  224. package/src/script-workflows/workflow-ctx.ts +8 -0
  225. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  226. package/src/scripts-runtime/types/stdlib.d.ts +27 -0
  227. package/src/scripts-runtime/types/swarm-extension.d.ts +33 -0
  228. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -0
  229. package/src/server-user.ts +1 -0
  230. package/src/server.ts +7 -0
  231. package/src/slack/assistant.ts +17 -1
  232. package/src/slack/commands.ts +5 -1
  233. package/src/slack/handlers.ts +53 -5
  234. package/src/slack/left-threads.ts +88 -0
  235. package/src/slack/steering.ts +3 -0
  236. package/src/slack/thread-buffer.ts +40 -16
  237. package/src/tasks/follow-up-redelegation-guard.ts +155 -0
  238. package/src/tests/acp-adapter.test.ts +79 -0
  239. package/src/tests/base-prompt.test.ts +12 -0
  240. package/src/tests/chat-sdk-inbound.test.ts +30 -0
  241. package/src/tests/chatgpt-subscription-model-groups.test.ts +62 -0
  242. package/src/tests/chatgpt-subscription-pi.test.ts +170 -0
  243. package/src/tests/chatgpt-subscription-session-bench.test.ts +198 -0
  244. package/src/tests/claude-artifacts-read-script.test.ts +209 -0
  245. package/src/tests/codex-oauth-credential-info.test.ts +40 -0
  246. package/src/tests/codex-oauth-refresh-egress.test.ts +194 -0
  247. package/src/tests/context-window.test.ts +7 -0
  248. package/src/tests/db-client.test.ts +21 -0
  249. package/src/tests/db-task-read-contract.test.ts +8 -2
  250. package/src/tests/db-task-write-contract.test.ts +5 -1
  251. package/src/tests/entrypoint-api-readiness.test.ts +416 -210
  252. package/src/tests/explicit-model-validation.test.ts +113 -8
  253. package/src/tests/extensions-run-context.test.ts +11 -0
  254. package/src/tests/extensions-steering.test.ts +353 -0
  255. package/src/tests/extensions-validate.test.ts +5 -0
  256. package/src/tests/fixtures/extensions/steering-policy/hooks.ts +39 -0
  257. package/src/tests/fixtures/extensions/steering-policy/manifest.json +7 -0
  258. package/src/tests/fixtures/fake-fx.ts +167 -0
  259. package/src/tests/fixtures/fx/acp-responses-recorded.json +157 -0
  260. package/src/tests/fixtures/fx/acp-updates-recorded.jsonl +15 -0
  261. package/src/tests/follow-up-redelivery-guard.test.ts +432 -202
  262. package/src/tests/fx-adapter.test.ts +771 -0
  263. package/src/tests/grok-adapter.test.ts +36 -0
  264. package/src/tests/list-total-cache.test.ts +27 -2
  265. package/src/tests/mcp-loopback-proxy.test.ts +193 -0
  266. package/src/tests/memory-fts-populate.test.ts +11 -9
  267. package/src/tests/memory-retrieval-purge.test.ts +80 -0
  268. package/src/tests/migration-260-runtime-pool-cache.test.ts +118 -0
  269. package/src/tests/model-tier-resolution.test.ts +3 -3
  270. package/src/tests/pricing-refresh.test.ts +5 -5
  271. package/src/tests/prompt-template-session.test.ts +5 -3
  272. package/src/tests/provider-registration.test.ts +2 -1
  273. package/src/tests/query-audit-plans.test.ts +30 -2
  274. package/src/tests/runtime-cache-cleanup.test.ts +367 -0
  275. package/src/tests/runtime-e2b-pools.test.ts +41 -0
  276. package/src/tests/runtime-pools-db.test.ts +98 -0
  277. package/src/tests/runtime-pools-http.test.ts +29 -0
  278. package/src/tests/runtime-providers-docker.test.ts +253 -0
  279. package/src/tests/runtime-remote-controller.test.ts +66 -2
  280. package/src/tests/runtime-supervisor.test.ts +66 -2
  281. package/src/tests/script-connections.test.ts +13 -0
  282. package/src/tests/script-runs-http.test.ts +684 -2
  283. package/src/tests/seed-model-profiles.test.ts +2 -2
  284. package/src/tests/seed-schedules.test.ts +138 -0
  285. package/src/tests/seed-scripts.test.ts +26 -0
  286. package/src/tests/session-cost-recompute-unit.test.ts +39 -0
  287. package/src/tests/session-costs-golden.test.ts +26 -0
  288. package/src/tests/session-summaries-plans.test.ts +120 -0
  289. package/src/tests/session-summaries.test.ts +72 -12
  290. package/src/tests/sessions-tree.test.ts +11 -3
  291. package/src/tests/slack-leave-thread.test.ts +571 -0
  292. package/src/tests/slack-render-v2-query-plans.test.ts +24 -2
  293. package/src/tests/status.test.ts +11 -0
  294. package/src/tests/tasks-readable-row.test.ts +155 -0
  295. package/src/tests/tool-annotations.test.ts +2 -1
  296. package/src/tests/workflow-engine-v2.test.ts +42 -0
  297. package/src/tests/workflow-script-principal.test.ts +207 -7
  298. package/src/tools/send-task.ts +35 -47
  299. package/src/tools/slack-leave-thread.ts +104 -0
  300. package/src/tools/steer-task.ts +3 -2
  301. package/src/tools/task-dedup.ts +45 -21
  302. package/src/tools/tool-config.ts +2 -1
  303. package/src/types.ts +57 -0
  304. package/src/utils/codex-auth-failure.ts +30 -0
  305. package/src/utils/context-window.ts +4 -1
  306. package/src/utils/credentials.ts +7 -0
  307. package/src/utils/fx-models.ts +43 -0
  308. package/src/workflows/cooldown.ts +3 -2
  309. package/src/workflows/engine.ts +24 -9
  310. package/templates/schedules/dreaming-daily/config.json +1 -1
  311. package/templates/schedules/dreaming-daily/content.md +6 -14
  312. package/templates/skills/composio-google-docs/content.md +10 -0
  313. package/templates/skills/script-workflows/content.md +19 -1
  314. package/templates/skills/swarm-docs/content.md +2 -0
  315. package/templates/skills/swarm-scripts/SKILL.md +2 -0
  316. package/templates/skills/swarm-scripts/content.md +2 -0
  317. package/templates/workflows/dreaming/content.md +5 -1
  318. package/dist/acp-adapter-96dc64m2.js +0 -15
  319. package/dist/cli-dznrgaep.js +0 -30
  320. package/dist/cli-w3hcrxht.js +0 -6985
  321. package/dist/handlers-jg7v74ty.js +0 -31
  322. package/dist/index-8c1zbz59.js +0 -29
  323. package/dist/index-8k8tmfxd.js +0 -32
  324. package/dist/index-hq617xdj.js +0 -36
  325. package/dist/lead-567kw7x3.js +0 -68
  326. package/dist/worker-fjdqra6q.js +0 -68
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ALL_TOOLS,
3
3
  init_tool_config
4
- } from "./cli-2dfbv8qr.js";
4
+ } from "./cli-fy6x31ps.js";
5
5
  import {
6
6
  normalizeAssetKey,
7
7
  defaultAssetKey,
@@ -28,7 +28,14 @@ import {
28
28
  VersionableFieldSchema,
29
29
  SessionCostModelBreakdownSchema,
30
30
  init_types4
31
- } from "./cli-41z8xwj0.js";
31
+ } from "./cli-nhrvpaj7.js";
32
+ import {
33
+ CODEX_AUTH_FAILURE_BENCH_THRESHOLD,
34
+ CODEX_AUTH_FAILURE_BENCH_MS,
35
+ CODEX_AUTH_WATCH_NAMESPACE,
36
+ codexAuthBenchMarkerKey,
37
+ init_codex_auth_failure
38
+ } from "./cli-fw2w0kva.js";
32
39
  import {
33
40
  generateDefaultClaudeMd2,
34
41
  generateDefaultSoulMd2,
@@ -42,7 +49,7 @@ import {
42
49
  init_identity_field_budget,
43
50
  contentSha256,
44
51
  init_profile_sync
45
- } from "./cli-ycm6180s.js";
52
+ } from "./cli-a7v854rf.js";
46
53
  import {
47
54
  isSlackConfigured,
48
55
  init_config4
@@ -53,7 +60,7 @@ import {
53
60
  } from "./cli-4sydckyj.js";
54
61
  import {
55
62
  init_templates4
56
- } from "./cli-v726afdm.js";
63
+ } from "./cli-2pnswgh8.js";
57
64
  import {
58
65
  SUBSCRIPTION_KEY_TYPES,
59
66
  planAllowsModelFamily,
@@ -70,7 +77,7 @@ import {
70
77
  deriveProviderFromKeyType,
71
78
  selectCredential,
72
79
  init_credentials2
73
- } from "./cli-aq58fk5m.js";
80
+ } from "./cli-g83s9ewh.js";
74
81
  import {
75
82
  registerTemplate,
76
83
  getAllTemplateDefinitions,
@@ -78,11 +85,11 @@ import {
78
85
  configureDbResolver,
79
86
  init_resolver,
80
87
  init_session_templates
81
- } from "./cli-j4kw3rsx.js";
88
+ } from "./cli-cm5yqn35.js";
82
89
  import {
83
90
  runtimeHarnessSections,
84
91
  init_runtime_model_catalog
85
- } from "./cli-a2jw6ee5.js";
92
+ } from "./cli-1p89xny0.js";
86
93
  import {
87
94
  init_zod
88
95
  } from "./cli-k5671be5.js";
@@ -110,7 +117,7 @@ import {
110
117
  import {
111
118
  init_package,
112
119
  package_default
113
- } from "./cli-pe09p6dv.js";
120
+ } from "./cli-e3r2neck.js";
114
121
  import {
115
122
  realtimeBus,
116
123
  init_bus
@@ -125,13 +132,13 @@ import {
125
132
  registerVolatileSecret,
126
133
  registerSensitiveKeyName,
127
134
  init_secret_scrubber
128
- } from "./cli-a4btqqft.js";
135
+ } from "./cli-1b7btd38.js";
129
136
  import {
130
137
  isAlias,
131
138
  parseAlias,
132
139
  harnessModelMismatch,
133
140
  init_src2
134
- } from "./cli-4r12t6w6.js";
141
+ } from "./cli-5c4hjzne.js";
135
142
  import {
136
143
  __toCommonJS,
137
144
  __commonJS,
@@ -3977,7 +3984,8 @@ class BunSqliteClient {
3977
3984
  };
3978
3985
  const ctx = txContext.getStore();
3979
3986
  if (ctx && !ctx.closed) {
3980
- return timed(() => op(this.getDatabase()));
3987
+ const db = this.getDatabase();
3988
+ return timed(() => op(db));
3981
3989
  }
3982
3990
  let sleptMs = 0;
3983
3991
  for (let attemptIndex = 0;; attemptIndex++) {
@@ -3986,7 +3994,8 @@ class BunSqliteClient {
3986
3994
  const release = await this.lock.acquire();
3987
3995
  let backoff = 0;
3988
3996
  try {
3989
- return timed(() => this.shortSpin(this.getDatabase(), () => op(this.getDatabase()), !canRetryAfter), canRetryAfter);
3997
+ const db = this.getDatabase();
3998
+ return timed(() => this.shortSpin(db, () => op(db), !canRetryAfter), canRetryAfter);
3990
3999
  } catch (err) {
3991
4000
  if (!isSqliteBusy(err) || !canRetryAfter || next === undefined)
3992
4001
  throw err;
@@ -5019,7 +5028,7 @@ var init_runtime2 = __esm(() => {
5019
5028
  // src/telemetry-identity.ts
5020
5029
  async function loadUserRole(userId) {
5021
5030
  try {
5022
- const { getUserGrant } = await import("./rbac-roles-svj72cdf.js");
5031
+ const { getUserGrant } = await import("./rbac-roles-b5htkjby.js");
5023
5032
  const grant = await getUserGrant(userId);
5024
5033
  const role = grant.grantsAll ? "admin" : "member";
5025
5034
  const user = await getDbClient2().get("SELECT json_extract(metadata, '$.jobFunction') AS jobFunction FROM users WHERE id = ? AND json_valid(metadata)", [userId]);
@@ -5181,27 +5190,6 @@ var init_telemetry_trigger = __esm(() => {
5181
5190
  rootSurfaceCache = new Map;
5182
5191
  });
5183
5192
 
5184
- // src/utils/codex-auth-failure.ts
5185
- function isCodexAuthFailureReason(failureReason) {
5186
- if (!failureReason || !failureReason.includes("[auth-error]"))
5187
- return false;
5188
- const lower = failureReason.toLowerCase();
5189
- return !TRANSIENT_AUTH_ERROR_MARKERS.some((m) => lower.includes(m));
5190
- }
5191
- var CODEX_AUTH_FAILURE_BENCH_THRESHOLD = 2, CODEX_AUTH_FAILURE_BENCH_MS, CODEX_AUTH_WATCH_NAMESPACE = "codex-auth-watch", codexAuthBenchMarkerKey = (keySuffix) => `bench:${keySuffix}`, TRANSIENT_AUTH_ERROR_MARKERS;
5192
- var init_codex_auth_failure = __esm(() => {
5193
- CODEX_AUTH_FAILURE_BENCH_MS = 365 * 24 * 60 * 60 * 1000;
5194
- TRANSIENT_AUTH_ERROR_MARKERS = [
5195
- "waiting for the refresh lock",
5196
- "refresh rejected (429",
5197
- "refresh rejected (5",
5198
- "refresh rejected (unknown status",
5199
- "out of credits",
5200
- "no credentials found in config store",
5201
- "not a confirmed auth rejection"
5202
- ];
5203
- });
5204
-
5205
5193
  // src/utils/config-env-export.ts
5206
5194
  function isEnvExportRestrictedKey(key) {
5207
5195
  return ENV_EXPORT_RESTRICTED_KEYS.has(key.toUpperCase()) || CONNECTION_SECRET_KEY.test(key);
@@ -6422,6 +6410,32 @@ function readableSessionCondition(userId, taskIdColumn = "agent_tasks.id", opts
6422
6410
  params: userId ? [userId, userId] : []
6423
6411
  };
6424
6412
  }
6413
+ function readableSessionRowCondition(userId, taskIdColumn = "agent_tasks.id") {
6414
+ const otherOwner = userId ? "up.requestedByUserId IS NOT NULL AND up.requestedByUserId != ?" : "up.requestedByUserId IS NOT NULL";
6415
+ const shareMatch = userId ? "(s.userId IS NULL OR s.userId = ?)" : "s.userId IS NULL";
6416
+ const set = readableSessionCondition(userId, taskIdColumn);
6417
+ return {
6418
+ sql: `(CASE (
6419
+ WITH RECURSIVE up(id, parentTaskId, requestedByUserId, scheduleId, depth) AS (
6420
+ SELECT u.id, u.parentTaskId, u.requestedByUserId, u.scheduleId, 0
6421
+ FROM agent_tasks u WHERE u.id = ${taskIdColumn}
6422
+ UNION ALL
6423
+ SELECT p.id, p.parentTaskId, p.requestedByUserId, p.scheduleId, up.depth + 1
6424
+ FROM up JOIN agent_tasks p ON p.id = up.parentTaskId
6425
+ WHERE up.depth < ${READABLE_WALK_MAX_DEPTH}
6426
+ )
6427
+ SELECT CASE WHEN ${otherOwner} AND up.scheduleId IS NULL
6428
+ AND NOT EXISTS (SELECT 1 FROM session_shares s
6429
+ WHERE s.rootTaskId = up.id AND s.revokedAt IS NULL AND ${shareMatch})
6430
+ THEN 1 ELSE 0 END
6431
+ FROM up
6432
+ WHERE up.parentTaskId IS NULL
6433
+ OR NOT EXISTS (SELECT 1 FROM agent_tasks p WHERE p.id = up.parentTaskId)
6434
+ LIMIT 1
6435
+ ) WHEN 0 THEN 1 WHEN 1 THEN 0 ELSE ${set.sql} END)`,
6436
+ params: [...userId ? [userId, userId] : [], ...set.params]
6437
+ };
6438
+ }
6425
6439
  async function getAllTasks2(filters, opts) {
6426
6440
  const conditions = [];
6427
6441
  const params = [];
@@ -6507,7 +6521,7 @@ async function getAllTasks2(filters, opts) {
6507
6521
  conditions.push(`(IFNULL(taskType, '') NOT IN ('heartbeat', 'heartbeat-checklist', 'boot-triage') AND tags NOT LIKE '%"heartbeat"%')`);
6508
6522
  }
6509
6523
  if (filters?.readableBy) {
6510
- const readable = readableSessionCondition(filters.readableBy.userId);
6524
+ const readable = readableSessionRowCondition(filters.readableBy.userId);
6511
6525
  conditions.push(readable.sql);
6512
6526
  params.push(...readable.params);
6513
6527
  }
@@ -7011,17 +7025,49 @@ async function getMostRecentTaskInThread2(channelId, threadTs) {
7011
7025
  LIMIT 1`, [channelId, threadTs]);
7012
7026
  return row ? rowToAgentTask(row) : null;
7013
7027
  }
7014
- async function findCompletedTaskInThread2(channelId, threadTs, windowMinutes) {
7028
+ async function findCompletedTasksInThread2(channelId, threadTs, windowMinutes, limit = 200, before) {
7015
7029
  const since = new Date(Date.now() - windowMinutes * 60 * 1000).toISOString();
7016
- const row = await getDbClient2().get(`SELECT * FROM agent_tasks
7030
+ const cursorSql = before ? "AND (lastUpdatedAt < ? OR (lastUpdatedAt = ? AND id < ?))" : "";
7031
+ const cursorParams = before ? [before.lastUpdatedAt, before.lastUpdatedAt, before.id] : [];
7032
+ const rows = await getDbClient2().query(`SELECT * FROM agent_tasks
7017
7033
  WHERE slackChannelId = ?
7018
7034
  AND slackThreadTs = ?
7019
7035
  AND status = 'completed'
7036
+ AND COALESCE(taskType, '') != 'follow-up'
7037
+ AND lastUpdatedAt > ?
7038
+ ${cursorSql}
7039
+ ORDER BY lastUpdatedAt DESC, id DESC
7040
+ LIMIT ?`, [channelId, threadTs, since, ...cursorParams, limit]);
7041
+ return rows.map(rowToAgentTask);
7042
+ }
7043
+ async function findRecentFailedTaskInThread2(channelId, threadTs, windowMinutes) {
7044
+ const since = new Date(Date.now() - windowMinutes * 60 * 1000).toISOString();
7045
+ const row = await getDbClient2().get(`SELECT * FROM agent_tasks
7046
+ WHERE slackChannelId = ?
7047
+ AND slackThreadTs = ?
7048
+ AND status = 'failed'
7020
7049
  AND lastUpdatedAt > ?
7021
7050
  ORDER BY lastUpdatedAt DESC
7022
7051
  LIMIT 1`, [channelId, threadTs, since]);
7023
7052
  return row ? rowToAgentTask(row) : null;
7024
7053
  }
7054
+ async function countAgentDispatchesInThread2(channelId, threadTs, creatorAgentId, windowMinutes) {
7055
+ const since = new Date(Date.now() - windowMinutes * 60 * 1000).toISOString();
7056
+ const row = await getDbClient2().get(`SELECT COUNT(*) AS c FROM (
7057
+ SELECT MIN(createdAt) AS firstAt FROM agent_tasks
7058
+ WHERE slackChannelId = ?
7059
+ AND slackThreadTs = ?
7060
+ AND creatorAgentId = ?
7061
+ AND source = 'mcp'
7062
+ AND (createdAt > ? OR taskType = 'script-run-step')
7063
+ GROUP BY CASE
7064
+ WHEN taskType = 'script-run-step' AND contextKey LIKE 'script-run:%:%'
7065
+ THEN substr(contextKey, 1, instr(substr(contextKey, 12), ':') + 10)
7066
+ ELSE id
7067
+ END
7068
+ ) WHERE firstAt > ?`, [channelId, threadTs, creatorAgentId, since, since]);
7069
+ return row?.c ?? 0;
7070
+ }
7025
7071
  async function findRecentCancelledTaskInThread2(channelId, threadTs, windowMinutes) {
7026
7072
  const since = new Date(Date.now() - windowMinutes * 60 * 1000).toISOString();
7027
7073
  const row = await getDbClient2().get(`SELECT * FROM agent_tasks
@@ -7044,7 +7090,7 @@ async function findRecentCancelledTaskInThread2(channelId, threadTs, windowMinut
7044
7090
  LIMIT 1`, [channelId, threadTs, since]);
7045
7091
  return row ? rowToAgentTask(row) : null;
7046
7092
  }
7047
- var dependencies2, TASK_PREVIEW_LENGTH = 300, TASK_PREVIEW_BYTES, SIBLING_OPEN = "<sibling_tasks_in_progress>", SIBLING_CLOSE = "</sibling_tasks_in_progress>", TASK_BLOB = "CAST(agent_tasks.task AS BLOB)", SIBLING_CLOSE_AT, SIBLING_END, TASK_PREVIEW_START, TASK_PREVIEW_SQL, taskPreviewDecoder, LIST_COLUMNS, TASK_LINEAGE_LIMITS2, LINEAGE_COLUMNS, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, NEVER_STARTED_TASK_STATUSES, findTaskByGitHub2, CHAT_RELAY_ELIGIBLE_SQL = `(obligation.last_attempt_at IS NULL
7093
+ var dependencies2, TASK_PREVIEW_LENGTH = 300, TASK_PREVIEW_BYTES, SIBLING_OPEN = "<sibling_tasks_in_progress>", SIBLING_CLOSE = "</sibling_tasks_in_progress>", TASK_BLOB = "CAST(agent_tasks.task AS BLOB)", SIBLING_CLOSE_AT, SIBLING_END, TASK_PREVIEW_START, TASK_PREVIEW_SQL, taskPreviewDecoder, LIST_COLUMNS, TASK_LINEAGE_LIMITS2, LINEAGE_COLUMNS, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, NEVER_STARTED_TASK_STATUSES, findTaskByGitHub2, READABLE_WALK_MAX_DEPTH = 64, CHAT_RELAY_ELIGIBLE_SQL = `(obligation.last_attempt_at IS NULL
7048
7094
  OR (julianday(?) - julianday(obligation.last_attempt_at)) * 86400000.0 >=
7049
7095
  CASE WHEN obligation.attempt_count >= 8 THEN 600000
7050
7096
  ELSE 3000 * (1 << obligation.attempt_count) END)`, LINEAR_TRACKER_CONTEXT_KEY_PREFIX = "task:trackers:linear:";
@@ -7267,8 +7313,8 @@ var init_page_search = __esm(() => {
7267
7313
 
7268
7314
  // src/be/db/session-visibility.ts
7269
7315
  function sessionViewerCondition(viewer) {
7270
- const shared = `EXISTS (SELECT 1 FROM session_shares s
7271
- WHERE s.rootTaskId = r.id AND s.revokedAt IS NULL AND (s.userId IS NULL OR s.userId = ?))`;
7316
+ const shared = `r.id IN (SELECT s.rootTaskId FROM session_shares s
7317
+ WHERE s.revokedAt IS NULL AND (s.userId IS NULL OR s.userId = ?))`;
7272
7318
  if (viewer.scope === "mine") {
7273
7319
  return { sql: "r.requestedByUserId = ?", params: [viewer.userId] };
7274
7320
  }
@@ -7289,8 +7335,8 @@ function sessionMineCondition(userId) {
7289
7335
  return {
7290
7336
  sql: `((r.requestedByUserId = ? AND (r.source NOT IN (${machine})
7291
7337
  OR (r.source = 'system' AND r.taskType IN (${humanSystem}))))
7292
- OR EXISTS (SELECT 1 FROM session_shares s
7293
- WHERE s.rootTaskId = r.id AND s.revokedAt IS NULL AND (s.userId IS NULL OR s.userId = ?)))`,
7338
+ OR r.id IN (SELECT s.rootTaskId FROM session_shares s
7339
+ WHERE s.revokedAt IS NULL AND (s.userId IS NULL OR s.userId = ?)))`,
7294
7340
  params: [userId, ...MACHINE_SESSION_SOURCES, ...HUMAN_SYSTEM_TASK_TYPES, userId]
7295
7341
  };
7296
7342
  }
@@ -7405,21 +7451,21 @@ var init_session_moves = __esm(() => {
7405
7451
  });
7406
7452
 
7407
7453
  // src/be/db/session-tree.ts
7408
- function sessionReadStateSql(userId, now = new Date().toISOString()) {
7454
+ function sessionReadStateSql(userId, now = new Date().toISOString(), a = LEGACY_READ_STATE_COLUMNS) {
7409
7455
  const quiet = new Date(Date.parse(now) - AUTO_DONE_QUIET_MS).toISOString();
7410
7456
  const scope = inboxScopeCondition(userId);
7411
- const autoDone = `(a.openTasks = 0 AND a.pendingApproval = 0 AND a.lastActivityAt <= ? AND ${scope.sql})`;
7457
+ const autoDone = `(${a.openTasks} = 0 AND ${a.pendingApproval} = 0 AND ${a.lastActivityAt} <= ? AND ${scope.sql})`;
7412
7458
  const autoDoneParams = [quiet, ...scope.params];
7413
7459
  return {
7414
7460
  sql: `CASE
7415
7461
  WHEN s.id IS NULL THEN CASE
7416
- WHEN a.lastActivityAt > ? THEN 'unread'
7462
+ WHEN ${a.lastActivityAt} > ? THEN 'unread'
7417
7463
  WHEN ${autoDone} THEN 'done'
7418
7464
  ELSE 'read' END
7419
7465
  WHEN s.status = 'dismissed' THEN 'done'
7420
- WHEN s.status = 'done' THEN CASE WHEN a.reopensDone > 0 THEN 'unread' ELSE 'done' END
7466
+ WHEN s.status = 'done' THEN CASE WHEN ${a.reopensDone} THEN 'unread' ELSE 'done' END
7421
7467
  WHEN s.status = 'snoozed' THEN CASE WHEN s.snoozeUntil > ? THEN 'later' ELSE 'unread' END
7422
- WHEN a.lastActivityAt > COALESCE(s.lastReadAt, s.lastUpdatedAt) THEN 'unread'
7468
+ WHEN ${a.lastActivityAt} > COALESCE(s.lastReadAt, s.lastUpdatedAt) THEN 'unread'
7423
7469
  WHEN ${autoDone} AND s.lastUpdatedAt <= ? THEN 'done'
7424
7470
  ELSE 'read'
7425
7471
  END`,
@@ -7435,29 +7481,42 @@ function sessionReadStateSql(userId, now = new Date().toISOString()) {
7435
7481
  function sourceKeyRanges() {
7436
7482
  return SESSION_SOURCES.map((source) => ({ source, ...keyPrefixRange(`shared/${source}/`) }));
7437
7483
  }
7438
- function threadRootsSql() {
7484
+ function sourceThreadKeySql() {
7439
7485
  const key = 'r."key"';
7440
7486
  const leaf = `substr(${key}, length(rtrim(rtrim(${key}, '/'), replace(${key}, '/', ''))) + 1)`;
7441
7487
  const ranges = sourceKeyRanges();
7442
7488
  return {
7443
- sql: `(CASE WHEN (${ranges.map(() => `(${key} >= ? AND ${key} < ?)`).join(" OR ")}) AND ${leaf} GLOB 'thread:?*/'
7444
- THEN (SELECT COUNT(*) FROM agent_tasks session_thread_root WHERE session_thread_root."key" = ${key}
7445
- AND session_thread_root.parentTaskId IS NULL AND session_thread_root.requestedByUserId IS NOT NULL)
7446
- ELSE 0 END)`,
7489
+ sql: `(${ranges.map(() => `(${key} >= ? AND ${key} < ?)`).join(" OR ")}) AND ${leaf} GLOB 'thread:?*/'`,
7447
7490
  params: ranges.flatMap(({ lo, hi }) => [lo, hi])
7448
7491
  };
7449
7492
  }
7493
+ function threadRootsSql() {
7494
+ const thread = sourceThreadKeySql();
7495
+ return {
7496
+ sql: `(CASE WHEN ${thread.sql}
7497
+ THEN (SELECT COUNT(*) FROM session_summaries session_thread_root
7498
+ WHERE session_thread_root."key" = r."key" AND session_thread_root.requestedByUserId IS NOT NULL)
7499
+ ELSE 0 END)`,
7500
+ params: thread.params
7501
+ };
7502
+ }
7503
+ async function threadRootCounts() {
7504
+ const thread = sourceThreadKeySql();
7505
+ const rows = await getDbClient2().query(`SELECT r."key", COUNT(*) AS threadRoots FROM session_summaries r
7506
+ WHERE r.requestedByUserId IS NOT NULL AND ${thread.sql} GROUP BY r."key"`, thread.params);
7507
+ return new Map(rows.map((row) => [row.key, row.threadRoots]));
7508
+ }
7450
7509
  async function getSessionGroupKey(task) {
7451
7510
  const threadRoots = threadRootsSql();
7452
7511
  const row = await getDbClient2().get(`SELECT ${threadRoots.sql} AS threadRoots FROM agent_tasks r WHERE r.id = ?`, [...threadRoots.params, task.id]);
7453
7512
  return sessionThreadGroupKey(task.key, row?.threadRoots ?? 0);
7454
7513
  }
7455
- function groupCondition(group) {
7514
+ function groupCondition(group, scan = false) {
7456
7515
  const { lo, hi } = keyPrefixRange(group);
7457
7516
  const start = [...lo].length + 1;
7458
7517
  const threadRoots = threadRootsSql();
7459
7518
  return {
7460
- sql: `(r."key" >= ? AND r."key" < ? AND (r."key" = ? OR (
7519
+ sql: `(${scan ? "+" : ""}r."key" >= ? AND ${scan ? "+" : ""}r."key" < ? AND (r."key" = ? OR (
7461
7520
  instr(substr(r."key", ?, length(r."key") - ?), '/') = 0 AND
7462
7521
  (${SESSION_LEAF_KINDS.map(() => 'substr(r."key", ?) GLOB ?').join(" OR ")}) AND
7463
7522
  ${threadRoots.sql} < ?
@@ -7475,9 +7534,9 @@ function groupCondition(group) {
7475
7534
  };
7476
7535
  }
7477
7536
  function noGroupCondition(userId) {
7478
- const groups = [groupCondition("shared/")];
7537
+ const groups = [groupCondition("shared/", true)];
7479
7538
  if (userId)
7480
- groups.push(groupCondition(`personal/${userId}/`));
7539
+ groups.push(groupCondition(`personal/${userId}/`, true));
7481
7540
  return {
7482
7541
  sql: `(${groups.map((g) => g.sql).join(" OR ")})`,
7483
7542
  params: groups.flatMap((g) => g.params)
@@ -7487,7 +7546,7 @@ function inboxScopeCondition(userId) {
7487
7546
  const ranges = sourceKeyRanges();
7488
7547
  const noGroup = noGroupCondition(userId);
7489
7548
  return {
7490
- sql: `(${ranges.map(() => '(r."key" >= ? AND r."key" < ?)').join(" OR ")} OR ${noGroup.sql})`,
7549
+ sql: `(${ranges.map(() => '(+r."key" >= ? AND +r."key" < ?)').join(" OR ")} OR ${noGroup.sql})`,
7491
7550
  params: [...ranges.flatMap(({ lo, hi }) => [lo, hi]), ...noGroup.params]
7492
7551
  };
7493
7552
  }
@@ -7499,7 +7558,7 @@ function effectiveSourceSql() {
7499
7558
  };
7500
7559
  }
7501
7560
  function sessionRootFilter(opts = {}) {
7502
- const conditions = ["r.parentTaskId IS NULL"];
7561
+ const conditions = [];
7503
7562
  const params = [];
7504
7563
  const add = (fragment) => {
7505
7564
  conditions.push(fragment.sql);
@@ -7529,7 +7588,8 @@ function sessionRootFilter(opts = {}) {
7529
7588
  if (opts.q?.trim()) {
7530
7589
  const like = `%${opts.q.trim().toLowerCase()}%`;
7531
7590
  add({
7532
- sql: "(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)",
7591
+ sql: `EXISTS (SELECT 1 FROM agent_tasks rt WHERE rt.id = r.id
7592
+ AND (lower(rt.task) LIKE ? OR lower(COALESCE(rt.title, '')) LIKE ?))`,
7533
7593
  params: [like, like]
7534
7594
  });
7535
7595
  }
@@ -7543,7 +7603,7 @@ function sessionRootFilter(opts = {}) {
7543
7603
  if (opts.viewer) {
7544
7604
  add(sessionViewerCondition(opts.viewer));
7545
7605
  if (opts.tree)
7546
- conditions.push("r.requestedByUserId IS NOT NULL");
7606
+ conditions.push("+r.requestedByUserId IS NOT NULL");
7547
7607
  if (opts.mine)
7548
7608
  add(sessionMineCondition(opts.viewer.userId));
7549
7609
  }
@@ -7566,7 +7626,7 @@ function sessionRootFilter(opts = {}) {
7566
7626
  const scope = inboxScopeCondition(opts.viewer?.userId);
7567
7627
  add(opts.triage === "done" && opts.viewer?.userId ? { sql: `(${marked.sql} OR ${scope.sql})`, params: [...marked.params, ...scope.params] } : marked);
7568
7628
  }
7569
- return { sql: conditions.join(" AND "), params };
7629
+ return { sql: conditions.length ? conditions.join(" AND ") : "1", params };
7570
7630
  }
7571
7631
  function excludesTriaged(opts) {
7572
7632
  return !!(opts.viewer?.userId && (opts.groupKey || opts.keyPrefix || opts.noGroup));
@@ -7574,13 +7634,8 @@ function excludesTriaged(opts) {
7574
7634
  function hasSessionChainFilter(opts) {
7575
7635
  return !!(opts.triage || opts.status || opts.withUserId || excludesTriaged(opts));
7576
7636
  }
7577
- function sessionSummaryQuery(opts = {}) {
7578
- const root = sessionRootFilter(opts);
7579
- const read = opts.viewer?.userId ? sessionReadStateSql(opts.viewer.userId, opts.now) : { sql: "NULL", params: [] };
7580
- const params = [...root.params];
7581
- if (opts.withUserId)
7582
- params.push(opts.withUserId);
7583
- params.push(opts.viewer?.userId ?? null, ...read.params, opts.viewer?.userId ?? null);
7637
+ function summaryRowFilters(opts) {
7638
+ const params = [];
7584
7639
  const filters = [];
7585
7640
  if (opts.triage === "unread")
7586
7641
  filters.push("readState = 'unread'");
@@ -7601,37 +7656,40 @@ function sessionSummaryQuery(opts = {}) {
7601
7656
  WHERE sh.rootTaskId = a.root_id AND sh.revokedAt IS NULL AND sh.userId = ?))`);
7602
7657
  params.push(opts.withUserId);
7603
7658
  }
7659
+ return { sql: filters.length ? `WHERE ${filters.join(" AND ")}` : "", params };
7660
+ }
7661
+ function sessionSummaryQuery(opts = {}) {
7662
+ const root = sessionRootFilter(opts);
7663
+ const read = opts.viewer?.userId ? sessionReadStateSql(opts.viewer.userId, opts.now, {
7664
+ lastActivityAt: "r.lastActivityAt",
7665
+ openTasks: "r.openTaskCount",
7666
+ pendingApproval: "r.pendingApprovalCount",
7667
+ reopensDone: "r.lastHumanAt > s.lastUpdatedAt"
7668
+ }) : { sql: "NULL", params: [] };
7669
+ const filters = summaryRowFilters(opts);
7670
+ const withUser = opts.withUserId ? `r.id IN (SELECT m.rootId FROM agent_tasks t JOIN session_members m ON m.taskId = t.id
7671
+ WHERE t.requestedByUserId = ?) AS withUser,` : "";
7604
7672
  return {
7605
- sql: `WITH RECURSIVE chain(root_id, id, lastUpdatedAt, status, requestedByUserId,
7606
- createdAt, source, requestedByUserIdInherited) AS (
7607
- SELECT r.id, r.id, r.lastUpdatedAt, r.status, r.requestedByUserId,
7608
- r.createdAt, r.source, r.requestedByUserIdInherited
7609
- FROM agent_tasks r WHERE ${root.sql}
7610
- UNION ALL
7611
- SELECT c.root_id, t.id, t.lastUpdatedAt, t.status, t.requestedByUserId,
7612
- t.createdAt, t.source, t.requestedByUserIdInherited
7613
- FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
7614
- ), agg AS (
7615
- SELECT chain.root_id, COUNT(*) AS chainCount,
7616
- chain.status AS latestStatus, MAX(chain.lastUpdatedAt) AS lastActivityAt,
7617
- ${opts.withUserId ? "SUM(chain.requestedByUserId = ?) AS withUser," : ""}
7618
- SUM(EXISTS (SELECT 1 FROM approval_requests ar
7619
- WHERE ar.sourceTaskId = chain.id AND ar.status = 'pending')) AS pendingApproval,
7620
- SUM(${openTaskSql}) AS openTasks,
7621
- SUM(${reopensDoneSql}) AS reopensDone
7622
- FROM chain LEFT JOIN inbox_item_state d
7623
- ON d.userId = ? AND d.itemType = 'to_read' AND d.itemId = chain.root_id AND d.status = 'done'
7624
- GROUP BY chain.root_id
7625
- ), state AS (
7626
- SELECT a.*, ${read.sql} AS readState, s.snoozeUntil
7627
- FROM agg a CROSS JOIN agent_tasks r ON r.id = a.root_id LEFT JOIN inbox_item_state s
7628
- ON s.userId = ? AND s.itemType = 'to_read' AND s.itemId = a.root_id
7673
+ sql: `WITH state AS (
7674
+ SELECT r.id AS root_id, r.createdAt AS rootCreatedAt, r."key", r.source, r.slackChannelId,
7675
+ r.chainCount, r.latestStatus, r.lastActivityAt, ${withUser}
7676
+ r.pendingApprovalCount AS pendingApproval, r.openTaskCount AS openTasks,
7677
+ ${read.sql} AS readState, s.snoozeUntil
7678
+ FROM ${SESSION_ROOTS} r LEFT JOIN inbox_item_state s
7679
+ ON s.userId = ? AND s.itemType = 'to_read' AND s.itemId = r.id
7680
+ WHERE ${root.sql}
7629
7681
  ), summary AS (
7630
7682
  SELECT *, (COALESCE(readState = 'unread' AND latestStatus = 'failed', 0) OR pendingApproval) AS needsYou
7631
7683
  FROM state
7632
7684
  )
7633
- SELECT a.* FROM summary a ${filters.length ? `WHERE ${filters.join(" AND ")}` : ""}`,
7634
- params
7685
+ SELECT a.* FROM summary a ${filters.sql}`,
7686
+ params: [
7687
+ ...opts.withUserId ? [opts.withUserId] : [],
7688
+ ...read.params,
7689
+ opts.viewer?.userId ?? null,
7690
+ ...root.params,
7691
+ ...filters.params
7692
+ ]
7635
7693
  };
7636
7694
  }
7637
7695
  async function getSessionReadState(rootId, userId, now) {
@@ -7643,7 +7701,7 @@ function sessionCountQuery(opts = {}) {
7643
7701
  const chain = hasSessionChainFilter(opts);
7644
7702
  const query = chain ? sessionSummaryQuery(opts) : sessionRootFilter(opts);
7645
7703
  return {
7646
- sql: chain ? `SELECT COUNT(*) AS count FROM (${query.sql})` : `SELECT COUNT(*) AS count FROM agent_tasks r WHERE ${query.sql}`,
7704
+ sql: chain ? `SELECT COUNT(*) AS count FROM (${query.sql})` : `SELECT COUNT(*) AS count FROM ${SESSION_ROOTS} r WHERE ${query.sql}`,
7647
7705
  params: query.params
7648
7706
  };
7649
7707
  }
@@ -7653,13 +7711,11 @@ async function sessionPageFields(roots) {
7653
7711
  return result;
7654
7712
  const ids = roots.map((r) => r.id);
7655
7713
  const [tasks, shares] = await Promise.all([
7656
- getDbClient2().query(`WITH RECURSIVE chain(root_id, id) AS (
7657
- SELECT id, id FROM agent_tasks WHERE id IN (${ids.map(() => "?").join(",")})
7658
- UNION ALL SELECT c.root_id, t.id FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
7659
- ) SELECT c.root_id, t.requestedByUserId AS id, u.name,
7714
+ getDbClient2().query(`SELECT m.rootId AS root_id, t.requestedByUserId AS id, u.name,
7660
7715
  CASE WHEN t.source = 'system' AND t.taskType = 'follow-up' THEN NULL ELSE NULLIF(trim(substr(t.output, 1, 200)), '') END AS preview
7661
- FROM chain c CROSS JOIN agent_tasks t ON t.id = c.id
7716
+ FROM session_members m CROSS JOIN agent_tasks t ON t.id = m.taskId
7662
7717
  LEFT JOIN users u ON u.id = t.requestedByUserId
7718
+ WHERE m.rootId IN (${ids.map(() => "?").join(",")})
7663
7719
  ORDER BY t.lastUpdatedAt DESC, t.createdAt DESC, t.id DESC`, ids),
7664
7720
  getDbClient2().query(`SELECT sh.rootTaskId AS root_id, sh.userId AS id, u.name, sh.access FROM session_shares sh
7665
7721
  LEFT JOIN users u ON u.id = sh.userId
@@ -7709,10 +7765,12 @@ async function getSessionTree(actor, now, opts = {}) {
7709
7765
  tree: true,
7710
7766
  mine: opts.mine
7711
7767
  });
7712
- const threadRoots = threadRootsSql();
7713
- const rows = await getDbClient2().query(`SELECT r.id, r."key", r.source, r.slackChannelId, a.lastActivityAt, a.latestStatus, a.readState, a.needsYou,
7714
- ${threadRoots.sql} AS threadRoots
7715
- FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id`, [...threadRoots.params, ...query.params]);
7768
+ const [rows, threadRoots] = await Promise.all([
7769
+ getDbClient2().query(`SELECT a.root_id, a."key", a.source, a.slackChannelId, a.lastActivityAt, a.latestStatus,
7770
+ a.readState, a.needsYou
7771
+ FROM (${query.sql}) a`, query.params),
7772
+ threadRootCounts()
7773
+ ]);
7716
7774
  const counts = () => ({ total: 0, unread: 0, running: 0, needsYou: 0 });
7717
7775
  const result = {
7718
7776
  groups: [],
@@ -7744,14 +7802,15 @@ async function getSessionTree(actor, now, opts = {}) {
7744
7802
  for (const row of rows) {
7745
7803
  const source = effectiveSource(row.key, row.source);
7746
7804
  sources.set(source, (sources.get(source) ?? 0) + 1);
7747
- const key = sessionThreadGroupKey(row.key, row.threadRoots);
7805
+ const rowThreadRoots = threadRoots.get(row.key) ?? 0;
7806
+ const key = sessionThreadGroupKey(row.key, rowThreadRoots);
7748
7807
  const sourceGroupKey = sessionGroupKey(row.key);
7749
7808
  const channelId = /^shared\/slack\/([^/]+)\/$/.exec(sourceGroupKey)?.[1];
7750
7809
  if (channelId && row.slackChannelId?.toLowerCase() === channelId) {
7751
7810
  slackChannels.add(channelId);
7752
7811
  }
7753
- if (row.threadRoots >= NESTED_THREAD_MIN_ROOTS && isSourceThreadKey(row.key)) {
7754
- threadRootIds.push(row.id);
7812
+ if (rowThreadRoots >= NESTED_THREAD_MIN_ROOTS && isSourceThreadKey(row.key)) {
7813
+ threadRootIds.push(row.root_id);
7755
7814
  sourceGroups.add(sourceGroupKey);
7756
7815
  }
7757
7816
  if (sourceOfKey(key))
@@ -7827,7 +7886,7 @@ async function triageSessionList(userId, filters, action) {
7827
7886
  ]);
7828
7887
  return result.changes;
7829
7888
  }
7830
- var AUTO_DONE_QUIET_MS, terminalSql, runningSql, openTaskSql, AGENT_TASK_SOURCES, reopensDoneSql, THREAD_OPEN = "<thread_context>", THREAD_CLOSE = "</thread_context>", THREAD_OPEN_AT, THREAD_CLOSE_AT, THREAD_LABEL_LENGTH = 300, THREAD_LABEL_TRIM_MARGIN = 100, THREAD_PROMPT_SQL, UNREAD_CURSOR = "1970-01-01T00:00:00.000Z";
7889
+ var AUTO_DONE_QUIET_MS, LEGACY_READ_STATE_COLUMNS, SESSION_ROOTS = "(SELECT rootId AS id, * FROM session_summaries)", terminalSql, runningSql, openTaskSql, AGENT_TASK_SOURCES, reopensDoneSql, THREAD_OPEN = "<thread_context>", THREAD_CLOSE = "</thread_context>", THREAD_OPEN_AT, THREAD_CLOSE_AT, THREAD_LABEL_LENGTH = 300, THREAD_LABEL_TRIM_MARGIN = 100, THREAD_PROMPT_SQL, UNREAD_CURSOR = "1970-01-01T00:00:00.000Z";
7831
7890
  var init_session_tree = __esm(() => {
7832
7891
  init_key();
7833
7892
  init_source_key();
@@ -7835,6 +7894,12 @@ var init_session_tree = __esm(() => {
7835
7894
  init_db4();
7836
7895
  init_session_visibility();
7837
7896
  AUTO_DONE_QUIET_MS = 24 * 3600000;
7897
+ LEGACY_READ_STATE_COLUMNS = {
7898
+ lastActivityAt: "a.lastActivityAt",
7899
+ openTasks: "a.openTasks",
7900
+ pendingApproval: "a.pendingApproval",
7901
+ reopensDone: "a.reopensDone > 0"
7902
+ };
7838
7903
  terminalSql = TERMINAL_TASK_STATUSES.map((s) => `'${s}'`).join(",");
7839
7904
  runningSql = `latestStatus NOT IN (${terminalSql})`;
7840
7905
  openTaskSql = `chain.status NOT IN (${terminalSql})`;
@@ -8163,8 +8228,11 @@ async function dropSessionDescendants(taskId) {
8163
8228
  UNION SELECT t.id FROM descendant d JOIN agent_tasks t ON t.parentTaskId = d.id
8164
8229
  ) DELETE FROM session_members WHERE taskId IN (SELECT id FROM descendant)`, [taskId]);
8165
8230
  }
8231
+ var OPEN_TASK_SQL;
8166
8232
  var init_session_summaries = __esm(() => {
8233
+ init_types4();
8167
8234
  init_runtime2();
8235
+ OPEN_TASK_SQL = `t.status NOT IN (${TERMINAL_TASK_STATUSES.map((s) => `'${s}'`).join(", ")})`;
8168
8236
  });
8169
8237
 
8170
8238
  // src/be/db/tasks/write.ts
@@ -8428,7 +8496,7 @@ async function completeTask2(id, output, options) {
8428
8496
  });
8429
8497
  } catch {}
8430
8498
  getDbClient2().afterCommit(() => {
8431
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
8499
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
8432
8500
  workflowEventBus.emit("task.completed", {
8433
8501
  taskId: id,
8434
8502
  output: scrubbedOutput,
@@ -8483,7 +8551,7 @@ async function failTask2(id, reason, opts = {}) {
8483
8551
  });
8484
8552
  } catch {}
8485
8553
  getDbClient2().afterCommit(() => {
8486
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
8554
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
8487
8555
  workflowEventBus.emit("task.failed", {
8488
8556
  taskId: id,
8489
8557
  failureReason: scrubbedReason,
@@ -8565,7 +8633,7 @@ async function cancelTask2(id, reason, options = {}) {
8565
8633
  });
8566
8634
  } catch {}
8567
8635
  getDbClient2().afterCommit(() => {
8568
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
8636
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
8569
8637
  workflowEventBus.emit("task.cancelled", {
8570
8638
  taskId: id,
8571
8639
  agentId: row.agentId,
@@ -8577,7 +8645,7 @@ async function cancelTask2(id, reason, options = {}) {
8577
8645
  if (row.source === "schedule" && row.taskType === "deferred" && row.parentTaskId) {
8578
8646
  getDbClient2().afterCommit(async () => {
8579
8647
  try {
8580
- const { createWorkerTaskFollowUp } = await import("./worker-follow-up-q32jh4yk.js");
8648
+ const { createWorkerTaskFollowUp } = await import("./worker-follow-up-77hvzxww.js");
8581
8649
  await createWorkerTaskFollowUp({
8582
8650
  task: rowToAgentTask(row),
8583
8651
  status: "failed",
@@ -8638,7 +8706,7 @@ async function supersedeTask2(id, args) {
8638
8706
  });
8639
8707
  } catch {}
8640
8708
  getDbClient2().afterCommit(() => {
8641
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
8709
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
8642
8710
  workflowEventBus.emit("task.superseded", {
8643
8711
  taskId: id,
8644
8712
  reason: args.reason,
@@ -8853,7 +8921,7 @@ async function updateTaskProgress2(id, progress) {
8853
8921
  });
8854
8922
  } catch {}
8855
8923
  getDbClient2().afterCommit(() => {
8856
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
8924
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
8857
8925
  workflowEventBus.emit("task.progress", {
8858
8926
  taskId: id,
8859
8927
  progress: scrubbedProgress,
@@ -9314,7 +9382,7 @@ function emitRunFinished(runId, workflowId, status) {
9314
9382
  }
9315
9383
  function emitBusEventAfterCommit(event, payload) {
9316
9384
  getDbClient2().afterCommit(() => {
9317
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
9385
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
9318
9386
  workflowEventBus.emit(event, payload);
9319
9387
  }).catch((err) => console.error(`[db] ${event} event not emitted:`, scrubSecrets(err instanceof Error ? err.message : String(err))));
9320
9388
  });
@@ -10135,6 +10203,7 @@ var init_swarm_config_guard = __esm(() => {
10135
10203
  "ADDITIVE_SLACK",
10136
10204
  "SLACK_THREAD_FOLLOWUP_REQUIRE_MENTION",
10137
10205
  "SLACK_THREAD_WAKE_ON_ANY_MESSAGE",
10206
+ "SLACK_LEAVE_THREAD_DISABLE",
10138
10207
  "RBAC_ENABLED",
10139
10208
  "SEED_AUTOMATIONS_ENABLED",
10140
10209
  "RBAC_AUDIT_DISABLED",
@@ -18841,7 +18910,7 @@ function noteEmbeddingSuccess() {
18841
18910
  const report = (what) => (err) => {
18842
18911
  console.error(`[memory] ${what} backfill after embeddings recovered failed:`, err.message);
18843
18912
  };
18844
- backfill2 = import("./embedding-space-s68v49ct.js").then(({ runEmbeddingMaintenance }) => runEmbeddingMaintenance({ backfill: true })).catch(report("Embedding")).finally(() => {
18913
+ backfill2 = import("./embedding-space-ny1e2940.js").then(({ runEmbeddingMaintenance }) => runEmbeddingMaintenance({ backfill: true })).catch(report("Embedding")).finally(() => {
18845
18914
  backfill2 = null;
18846
18915
  });
18847
18916
  }
@@ -19374,11 +19443,41 @@ class SqliteMemoryStore {
19374
19443
  async populateFtsTable() {
19375
19444
  const client = getDbClient2();
19376
19445
  const startedAt = performance.now();
19377
- const deletedExtra = await client.run(FTS_DELETE_EXTRA_SQL);
19378
- if (deletedExtra.changes > 0) {
19379
- console.warn(`[memory-fts] removed_extra_rows count=${deletedExtra.changes}`);
19446
+ const yieldLoop = () => new Promise((resolve) => setImmediate(resolve));
19447
+ const indexed = new Set;
19448
+ let removed = 0;
19449
+ for (let after = 0;; ) {
19450
+ const rows = await client.query(FTS_SCAN_BATCH_SQL, [after, FTS_SCAN_BATCH_SIZE]);
19451
+ if (rows.length === 0)
19452
+ break;
19453
+ after = rows[rows.length - 1].rowid;
19454
+ const orphans = rows.filter((row) => row.orphan).map((row) => row.rowid);
19455
+ if (orphans.length > 0) {
19456
+ await client.run(`DELETE FROM memory_fts WHERE rowid IN (${orphans.map(() => "?").join(",")})`, orphans);
19457
+ removed += orphans.length;
19458
+ }
19459
+ for (const row of rows)
19460
+ if (!row.orphan && row.memoryId)
19461
+ indexed.add(row.memoryId);
19462
+ await yieldLoop();
19463
+ }
19464
+ if (removed > 0) {
19465
+ console.warn(`[memory-fts] removed_extra_rows count=${removed}`);
19466
+ }
19467
+ const missing = [];
19468
+ for (let after = 0;; ) {
19469
+ const rows = await client.query(MEMORY_ID_BATCH_SQL, [
19470
+ after,
19471
+ FTS_SCAN_BATCH_SIZE
19472
+ ]);
19473
+ if (rows.length === 0)
19474
+ break;
19475
+ after = rows[rows.length - 1].rowid;
19476
+ for (const row of rows)
19477
+ if (!indexed.has(row.id))
19478
+ missing.push(row);
19479
+ await yieldLoop();
19380
19480
  }
19381
- const missing = await client.query(FTS_MISSING_IDS_SQL);
19382
19481
  for (let i = 0;i < missing.length; i += FTS_POPULATE_BATCH_SIZE) {
19383
19482
  const ids = missing.slice(i, i + FTS_POPULATE_BATCH_SIZE).map((row) => row.id);
19384
19483
  const placeholders = ids.map(() => "?").join(",");
@@ -20214,9 +20313,11 @@ class SqliteMemoryStore {
20214
20313
  };
20215
20314
  }
20216
20315
  }
20217
- var VECTOR_BYTES, FTS_DELETE_EXTRA_SQL = `DELETE FROM memory_fts
20218
- WHERE memory_id NOT IN (SELECT id FROM agent_memory)`, FTS_MISSING_IDS_SQL = `SELECT m.id FROM agent_memory m
20219
- WHERE m.id NOT IN (SELECT memory_id FROM memory_fts WHERE memory_id IS NOT NULL)`, FTS_POPULATE_BATCH_SIZE = 500;
20316
+ var VECTOR_BYTES, FTS_SCAN_BATCH_SQL = `SELECT rowid AS rowid, memory_id AS memoryId,
20317
+ memory_id IS NOT NULL
20318
+ AND NOT EXISTS (SELECT 1 FROM agent_memory m WHERE m.id = memory_fts.memory_id) AS orphan
20319
+ FROM memory_fts WHERE rowid > ? ORDER BY rowid LIMIT ?`, MEMORY_ID_BATCH_SQL = `SELECT rowid AS rowid, id FROM agent_memory
20320
+ WHERE rowid > ? ORDER BY rowid LIMIT ?`, FTS_SCAN_BATCH_SIZE = 1000, FTS_POPULATE_BATCH_SIZE = 500;
20220
20321
  var init_sqlite_store = __esm(() => {
20221
20322
  init_db4();
20222
20323
  init_embedding();
@@ -20903,7 +21004,7 @@ async function loadSecretRegistry() {
20903
21004
  result.failed += 1;
20904
21005
  }
20905
21006
  try {
20906
- const { loadRuntimeControllerSecrets } = await import("./db-capk2raj.js");
21007
+ const { loadRuntimeControllerSecrets } = await import("./db-3vttcbv4.js");
20907
21008
  const loaded = await loadRuntimeControllerSecrets();
20908
21009
  result.runtimeController = loaded.count;
20909
21010
  result.failed += loaded.failed;
@@ -21052,17 +21153,40 @@ async function requestSteering(args) {
21052
21153
  }
21053
21154
  const requestedMode = args.mode ?? "queue";
21054
21155
  const onUnsupported = args.onUnsupported ?? "degrade";
21055
- const provider = await providerForTask(task);
21156
+ const { dispatchPre, extensionIdForAgent } = await import("./dispatcher-tx9hd1sv.js");
21157
+ const preSteer = await dispatchPre("pre.task.steer", {
21158
+ task,
21159
+ message: args.message,
21160
+ mode: requestedMode,
21161
+ source: args.source ?? "api",
21162
+ sender: {
21163
+ kind: args.createdByKind ?? "system",
21164
+ userId: args.createdByUserId,
21165
+ agentId: args.createdByAgentId
21166
+ },
21167
+ messageTimestamps: args.messageTimestamps,
21168
+ slack: args.slack
21169
+ }, {
21170
+ skipExtensionId: extensionIdForAgent(args.createdByAgentId),
21171
+ validateModify: (data) => steeringModifySchema.safeParse(data)
21172
+ });
21173
+ if (preSteer.action === "block") {
21174
+ throw new SteeringBlockedError(preSteer.reason, preSteer.extension);
21175
+ }
21176
+ const currentTask = await getTaskById2(args.taskId);
21177
+ if (!currentTask)
21178
+ throw new SteeringRequestError("Task not found", 404);
21179
+ const provider = await providerForTask(currentTask);
21056
21180
  const supportedModes = PROVIDER_STEER_CAPABILITIES[provider];
21057
21181
  if (onUnsupported === "fail" && !supportedModes.includes(requestedMode)) {
21058
21182
  const supported = supportedModes.length > 0 ? supportedModes.join(", ") : "none";
21059
21183
  throw new SteeringRequestError(`Harness provider '${provider}' does not support steering mode '${requestedMode}' (supported modes: ${supported})`, 422);
21060
21184
  }
21061
- const activeTask = task.status === "paused" ? await resumeTask2(task.id) : task;
21185
+ const activeTask = currentTask.status === "paused" ? await resumeTask2(task.id) : currentTask;
21062
21186
  if (!activeTask) {
21063
21187
  throw new SteeringRequestError("Failed to resume paused task", 500);
21064
21188
  }
21065
- const body = scrubSecrets(args.message);
21189
+ const body = scrubSecrets(preSteer.action === "modify" ? preSteer.data.message : args.message);
21066
21190
  const preStart = activeTask.status === "unassigned" || activeTask.status === "offered" || activeTask.status === "pending";
21067
21191
  const degradedFrom = requestedMode === "steer" && supportedModes.length > 0 && (!supportedModes.includes("steer") || preStart) ? requestedMode : undefined;
21068
21192
  const effectiveMode = degradedFrom ? "queue" : requestedMode;
@@ -21094,8 +21218,9 @@ async function requestSteering(args) {
21094
21218
  degradedFrom
21095
21219
  };
21096
21220
  }
21097
- var STEERING_MOVED_ERROR = "Steering message moved to another task", SteeringRequestError, AGENT_ID_CHUNK = 500;
21221
+ var STEERING_MOVED_ERROR = "Steering message moved to another task", SteeringRequestError, SteeringBlockedError, steeringModifySchema, AGENT_ID_CHUNK = 500;
21098
21222
  var init_steering2 = __esm(() => {
21223
+ init_zod();
21099
21224
  init_types4();
21100
21225
  init_secret_scrubber();
21101
21226
  init_steering_enabled();
@@ -21108,6 +21233,19 @@ var init_steering2 = __esm(() => {
21108
21233
  this.name = "SteeringRequestError";
21109
21234
  }
21110
21235
  };
21236
+ SteeringBlockedError = class SteeringBlockedError extends SteeringRequestError {
21237
+ reason;
21238
+ extension;
21239
+ constructor(reason, extension) {
21240
+ super(`Steering blocked by extension ${extension.name}: ${reason}`, 403);
21241
+ this.reason = reason;
21242
+ this.extension = extension;
21243
+ this.name = "SteeringBlockedError";
21244
+ }
21245
+ };
21246
+ steeringModifySchema = strictObject2({
21247
+ message: string2().refine((message) => message.trim().length > 0, "Message must not be empty")
21248
+ });
21111
21249
  });
21112
21250
 
21113
21251
  // src/be/db/active-sessions.ts
@@ -21214,6 +21352,16 @@ async function getScriptRunExecutionArgs2(id) {
21214
21352
  const row = await getDbClient2().get("SELECT args FROM script_runs WHERE id = ?", [id]);
21215
21353
  return row ? openSealedJson(row.args) : undefined;
21216
21354
  }
21355
+ async function getScriptRunFollowUpGuard2(runId) {
21356
+ const row = await getDbClient2().get("SELECT followUpGuard FROM script_runs WHERE id = ?", [runId]);
21357
+ return row?.followUpGuard ?? null;
21358
+ }
21359
+ async function setScriptRunFollowUpGuard2(runId, decision) {
21360
+ await getDbClient2().run("UPDATE script_runs SET followUpGuard = ? WHERE id = ?", [
21361
+ decision,
21362
+ runId
21363
+ ]);
21364
+ }
21217
21365
  var init_script_runs = __esm(() => {
21218
21366
  init_sealed_json();
21219
21367
  init_runtime2();
@@ -21264,6 +21412,7 @@ __export(exports_db, {
21264
21412
  completeTask: () => completeTask2,
21265
21413
  computeContentHash: () => computeContentHash2,
21266
21414
  countActiveScriptRuns: () => countActiveScriptRuns2,
21415
+ countAgentDispatchesInThread: () => countAgentDispatchesInThread2,
21267
21416
  countAllMetrics: () => countAllMetrics2,
21268
21417
  countAllPages: () => countAllPages2,
21269
21418
  countKv: () => countKv2,
@@ -21338,9 +21487,10 @@ __export(exports_db, {
21338
21487
  failPendingResumeIfUnclaimed: () => failPendingResumeIfUnclaimed2,
21339
21488
  failTask: () => failTask2,
21340
21489
  findActiveTasksByVcs: () => findActiveTasksByVcs2,
21341
- findCompletedTaskInThread: () => findCompletedTaskInThread2,
21490
+ findCompletedTasksInThread: () => findCompletedTasksInThread2,
21342
21491
  findExistingLinearTrackerContextWork: () => findExistingLinearTrackerContextWork2,
21343
21492
  findRecentCancelledTaskInThread: () => findRecentCancelledTaskInThread2,
21493
+ findRecentFailedTaskInThread: () => findRecentFailedTaskInThread2,
21344
21494
  findRecentSimilarTasks: () => findRecentSimilarTasks2,
21345
21495
  findTaskByAgentMailThread: () => findTaskByAgentMailThread2,
21346
21496
  findTaskByGitHub: () => findTaskByGitHub2,
@@ -21489,6 +21639,7 @@ __export(exports_db, {
21489
21639
  getScriptRun: () => getScriptRun2,
21490
21640
  getScriptRunByIdempotencyKey: () => getScriptRunByIdempotencyKey2,
21491
21641
  getScriptRunExecutionArgs: () => getScriptRunExecutionArgs2,
21642
+ getScriptRunFollowUpGuard: () => getScriptRunFollowUpGuard2,
21492
21643
  getScriptRunJournalStep: () => getScriptRunJournalStep2,
21493
21644
  getServiceByAgentAndName: () => getServiceByAgentAndName2,
21494
21645
  getServiceById: () => getServiceById2,
@@ -21681,6 +21832,7 @@ __export(exports_db, {
21681
21832
  setApiKeyPlan: () => setApiKeyPlan2,
21682
21833
  setBudgetRefusalFollowUpTaskId: () => setBudgetRefusalFollowUpTaskId2,
21683
21834
  setFavorite: () => setFavorite2,
21835
+ setScriptRunFollowUpGuard: () => setScriptRunFollowUpGuard2,
21684
21836
  setSlackMessageTracking: () => setSlackMessageTracking2,
21685
21837
  setUserFavorite: () => setUserFavorite2,
21686
21838
  settleSupersededTaskDependents: () => settleSupersededTaskDependents2,
@@ -23243,7 +23395,7 @@ async function createTaskExtended2(task, options) {
23243
23395
  priority: row.priority
23244
23396
  }, (task) => task !== null, row.requestedByUserId);
23245
23397
  getDbClient2().afterCommit(() => {
23246
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
23398
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
23247
23399
  workflowEventBus.emit("task.created", {
23248
23400
  taskId: row.id,
23249
23401
  task: row.task,
@@ -23325,7 +23477,7 @@ async function releaseTask2(taskId, wakeSnapshot) {
23325
23477
  } catch {}
23326
23478
  if (isRuntimePoolsEnabled() && !wakeSnapshot)
23327
23479
  getDbClient2().afterCommit(() => {
23328
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
23480
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
23329
23481
  });
23330
23482
  }
23331
23483
  return row ? rowToAgentTask(row) : null;
@@ -23395,7 +23547,7 @@ async function rejectTask2(taskId, agentId, reason) {
23395
23547
  } catch {}
23396
23548
  if (isRuntimePoolsEnabled())
23397
23549
  getDbClient2().afterCommit(() => {
23398
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
23550
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
23399
23551
  });
23400
23552
  }
23401
23553
  return row ? rowToAgentTask(row) : null;
@@ -25073,7 +25225,7 @@ async function deleteScheduledTask2(id) {
25073
25225
  const parent = await getTaskById2(deferred.parentTaskId);
25074
25226
  if (!parent?.deferredAt)
25075
25227
  return;
25076
- const { createWorkerTaskFollowUp } = await import("./worker-follow-up-q32jh4yk.js");
25228
+ const { createWorkerTaskFollowUp } = await import("./worker-follow-up-77hvzxww.js");
25077
25229
  await createWorkerTaskFollowUp({
25078
25230
  task: parent,
25079
25231
  status: "failed",
@@ -28615,13 +28767,15 @@ async function getRootTaskChain2(rootTaskId) {
28615
28767
  async function listRecentSessions2(opts = {}) {
28616
28768
  const query = sessionSummaryQuery(opts);
28617
28769
  const threadRoots = threadRootsSql();
28770
+ const order = (a) => `${opts.triage === "later" ? `${a}.snoozeUntil ASC,` : ""}
28771
+ ${a}.lastActivityAt DESC, ${a}.rootCreatedAt DESC, ${a}.root_id DESC`;
28618
28772
  const rootRows = await getDbClient2().query(`SELECT r.*, a.chainCount AS __chainCount, a.lastActivityAt AS __lastActivityAt,
28619
28773
  a.latestStatus AS __latestStatus, a.readState AS __readState,
28620
28774
  a.snoozeUntil AS __snoozeUntil, a.needsYou AS __needsYou,
28621
28775
  ${threadRoots.sql} AS __threadRoots
28622
- FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id
28623
- ORDER BY ${opts.triage === "later" ? "a.snoozeUntil ASC," : ""}
28624
- a.lastActivityAt DESC, r.createdAt DESC, r.id DESC LIMIT ? OFFSET ?`, [...threadRoots.params, ...query.params, opts.limit ?? 25, opts.offset ?? 0]);
28776
+ FROM (SELECT * FROM (${query.sql}) page ORDER BY ${order("page")} LIMIT ? OFFSET ?) a
28777
+ CROSS JOIN agent_tasks r ON r.id = a.root_id
28778
+ ORDER BY ${order("a")}`, [...threadRoots.params, ...query.params, opts.limit ?? 25, opts.offset ?? 0]);
28625
28779
  const fields = await sessionPageFields(rootRows.map((row) => ({
28626
28780
  id: row.id,
28627
28781
  requestedByUserId: row.requestedByUserId ?? undefined
@@ -29087,7 +29241,8 @@ function rowToScriptRun(row) {
29087
29241
  error: row.error ?? undefined,
29088
29242
  lastHeartbeatAt: row.last_heartbeat_at ?? undefined,
29089
29243
  idempotencyKey: row.idempotencyKey ?? undefined,
29090
- requestedByUserId: row.requestedByUserId ?? undefined
29244
+ requestedByUserId: row.requestedByUserId ?? undefined,
29245
+ sourceTaskId: row.sourceTaskId ?? undefined
29091
29246
  };
29092
29247
  }
29093
29248
  function rowToScriptRunListItem(row) {
@@ -29114,8 +29269,9 @@ async function createScriptRun2(data) {
29114
29269
  return { run: rowToScriptRun(existing), existing: true };
29115
29270
  }
29116
29271
  const row = await client.get(`INSERT INTO script_runs
29117
- (id, agentId, scriptName, source, args, idempotencyKey, requestedByUserId, created_by, updated_by)
29118
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
29272
+ (id, agentId, scriptName, source, args, idempotencyKey, requestedByUserId, sourceTaskId,
29273
+ created_by, updated_by)
29274
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
29119
29275
  RETURNING *`, [
29120
29276
  data.id,
29121
29277
  data.agentId,
@@ -29124,6 +29280,7 @@ async function createScriptRun2(data) {
29124
29280
  sealJson(data.args ?? null),
29125
29281
  data.idempotencyKey ?? null,
29126
29282
  data.requestedByUserId ?? null,
29283
+ data.sourceTaskId ?? null,
29127
29284
  data.createdBy ?? null,
29128
29285
  data.updatedBy ?? data.createdBy ?? null
29129
29286
  ]);
@@ -29451,4 +29608,4 @@ var init_db4 = __esm(() => {
29451
29608
  };
29452
29609
  });
29453
29610
 
29454
- export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, bitbucketContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, sessionSourceKey, sourceOfKey, SOURCE_GROUPS_READ_ONLY, sourceMoveError, init_source_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, reportedUseCase, reportedUserFunction, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, runWithoutRequestAuth, authUserId, authUser, isOperatorAuth, getCurrentRequestUserId, init_request_auth_context, setTelemetryIngestObserver, isTelemetryEnabled, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, setTelemetryRoleResolver, setTelemetryFunctionResolver, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, isPrivateAddress, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, foldHexCopies, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates2, init_templates3, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime2, cachedUserRole, cachedUserFunction, invalidateTelemetryUserRole, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, CODEX_AUTH_FAILURE_BENCH_THRESHOLD, CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey, isCodexAuthFailureReason, init_codex_auth_failure, isEnvExportRestrictedKey, init_config_env_export, MASKED_SECRET_VALUE, init_config_secrets, HeartbeatExpiryError, init_heartbeat_expiry, isRuntimePoolsEnabled, init_runtime_pools_flag, normalizeDate, normalizeDateRequired, init_date_utils, rowToAgent, updateAgentCredentialState2, updateAgentCredentialMissing2, createAgent2, getAgentById2, EXTENSION_AGENT_ROLE2, NOT_EXTENSION_AGENT_SQL2, isExtensionAgent2, extensionAgentAssignmentError2, ReservedAgentRoleError2, reservedRoleViolation2, ExtensionAgentAssignmentError2, getAllAgents2, getAgentStatusCounts2, getLeadAgent2, updateAgentStatus2, updateAgentMaxTasks2, updateAgentProvider2, setAgentHarnessProvider2, updateAgentCredStatus2, listAgentsWithCredStatusByProvider2, getAgentHarnessProviders2, updateAgentActivity2, MAX_EMPTY_POLLS2, incrementEmptyPollCount2, resetEmptyPollCount2, shouldBlockPolling2, deleteAgent2, getActiveTaskCount2, hasCapacity2, getRemainingCapacity2, updateAgentStatusFromCapacity2, isPoolAffinityEnforcementEnabled2, buildRoutingAffinityFromAgent2, isAgentEligibleForTask2, getAgentDailyTaskCounts2, init_agents, listApprovalRequestSummaries2, getPendingApprovalVoteState2, recordApprovalVotes2, getPendingApprovalsForTasks2, approvalCancellationNotificationKey, listUndeliveredCancelledApprovalRequestIds, init_approvals, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, startTaskSearchBackfill, stopTaskSearchBackfill, init_search_index, rowToAgentTask, getTaskById2, getChildTasks2, TASK_LINEAGE_LIMITS2, getTaskLineage2, hasNonTerminalResumeChild2, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, getSupersededTasksWithoutResume2, getSupersededTasksWithUnsettledDependents2, hasNonTerminalRerouteDecisionChild2, getTasksByAgentId2, getAgentCurrentTask2, getTasksByStatus2, findTaskByVcs2, findActiveTasksByVcs2, findTaskByGitHub2, readableSessionCondition, getAllTasks2, getTasksCount2, getTaskStats2, getCompletedSlackTasks2, getPendingSlackRelayTasks2, markSlackRelayAttempted2, markSlackRelayDelivered2, markFinalizedSlackRelaysDelivered2, getPendingChatRelayTasks2, giveUpStaleChatRelays2, markChatRelayAttempted2, recordChatRelayError2, markChatRelayDelivered2, markChatRelayGivenUp2, getRecentlyFinishedWorkerTasks2, markTasksNotified2, resetTasksNotified2, getInProgressSlackTasks2, getSlackTasksMissingTree2, getInProgressTasksByContextKey2, isLinearTrackerContextKey2, findExistingLinearTrackerContextWork2, getLatestTaskByContextKey2, getLatestScriptRunStepTaskByContextKey2, getAgentWorkingOnThread2, getLatestActiveTaskInThread2, getLatestLeadTaskInThread2, getAgentWorkingOnContextKey2, getLatestActiveTaskByContextKey2, getLatestLeadTaskByContextKey2, getMostRecentTaskInThread2, findCompletedTaskInThread2, findRecentCancelledTaskInThread2, init_read, MODEL_PROFILE_CONFIG_KEY, listModelProfiles, getModelProfileByName, createModelProfile, updateModelProfile, modelProfileReferences, modelProfileRefError, deleteModelProfile, getAgentDefaultProfileName, repoModelOverrideKeys, taskProfileError, init_model_profiles, AssetKeyMovesBlockedError2, assertAssetKeyMovesAllowed2, moveTaskChainKeyInTx2, moveSessionChains, listPrefixRoots, listSharedPrefixRoots, init_session_moves, getSessionGroupKey, getSessionReadState, getSessionTree, triageSessionList, init_session_tree, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, CHAT_SDK_ADAPTER_NAMES, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, firstIssueText, isAdapterEntryEnabled, init_schema, TELEMETRY_RANKING_KEY, PUBLIC_RANKING_ENABLED_KEY, RANKING_CATEGORIES, readTelemetryRanking, rankingFormSchema, buildListing, init_telemetry_ranking, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, completedStatusIcon, init_reaction_shortcode, API_DRAINING_HEADER, API_DRAIN_MAX_MS_LIMIT, isApiDrainingResponse, init_api_drain2, parseEnabledTools, init_enabled_tools, parseTaskToolManifest, CHAT_TASK_ONLY_TOOLS, isChatSdkTask, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isApiOnlyConfigKey, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateRuntimeTokenTtlHours, validateControllerTokenTtlDays, validateControllerGraceSec, validateConfigValue, validateConfigEntry, validateExportToEnv, init_swarm_config_guard, getDefaultAuthorizationIdForProvider, getOAuthApp, getOAuthAppById, getOAuthAppIdByProvider, createOAuthApp, updateOAuthAppById, upsertOAuthApp, listAuthorizationsForApp, getAuthorizationById, upsertAuthorization, updateAuthorizationTokens, updateAuthorizationIdentity, deleteAuthorizationById, deleteAuthorizationsForApp, createOAuthPending, consumeOAuthPending, gcOAuthPending, markAuthorizationRefreshFailed, getOAuthTokens, listAuthorizationSweepRows, listKeepAliveAuthorizations, deleteOAuthTokens, acquireOAuthRefreshLock, releaseOAuthRefreshLock, init_oauth, OpenAI2, init_openai2, LEARNING_DUPLICATE_MIN_SIMILARITY, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants2, LONGTERM_ROOT, MEMORY_KEY_PATTERN, MEMORY_KEY_PATTERN_MESSAGE, MEMORY_KEY_MAX_LENGTH, isLongtermKey, longtermKeyError, isConsolidatedKey, consolidatedKeyMessage, resolveStoreKey, init_key_paths, computeScore, rerank, init_reranker, searchMemoryCandidates, init_search_candidates, rowToCandidate, init_sqlite_store, getEmbeddingProvider2, resetEmbeddingProvider2, getMemoryStore2, init_memory, embeddingProvider2, computeScriptEmbedding2, writeScriptEmbedding2, embedScript2, searchScripts2, reembedAllScripts2, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db3, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, STEERING_MOVED_ERROR, SteeringRequestError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering2, WorkflowReplayStateError, init_workflow_replay, getWorkflowRunTriggeredByAgentId, getWorkflowRunSummary, getWorkflowRunStepsSlimByRunId, WORKFLOW_RUN_TREE_MAX_DEPTH, WorkflowRunTreeError, getRunLineageBlock, getWorkflowRunTreeIds, getWorkflowRunStatus, getOpenWorkflowTreeTaskIds, getTaskIdsWithDependents, workflowRunTreeHasOpenWork, getWorkflowRunTree, cancelOpenWorkflowTreeSteps, disarmWorkflowTreeRetries, cancelLiveWorkflowTreeRuns, getChildWorkflowRunId, isParentStepAttemptCurrent, getRunningSubWorkflowSteps, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, emitRunFinished, createForeachChildSteps, createForeachAttemptSteps, init_workflow_runs, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, IdempotencyKeyTakenError, workflowRequestFingerprint, findAcceptedWorkflowOperation, assertWorkflowIdempotencyKeyUnused, recordAcceptedWorkflowOperation, init_workflow_idempotency, recordKeySeatMismatch2, recordKeyValidation2, retirePoolKeyStatus, init_api_keys, getScriptRunExecutionArgs2, literalPrefixPattern2, getSlackRenderV2ActivatedAt2, ensureSlackRenderV2Activation2, getSlackDelegationActivatedAt2, ensureSlackDelegationActivation2, isPendingSlackMessage2, isSettledSlackMessage2, recordSlackMessage2, reserveSlackMessage2, bindSlackMessageTimestamp2, updateSlackMessageRecord2, markSlackTreeRendered2, deleteSlackMessageRecord2, getSlackTreeMessage2, getSlackTreeMessageByThread2, getSlackOutcomeMessage2, getResolvableDeferralOutcomes2, markSlackDeferralResolved2, noteSlackOutcomeDeliveryFailure2, abandonSlackOutcomeDelivery2, getSlackTreeMessages2, getSlackMessageByChannelTs2, getSlackTasksInThread2, listSlackThreadsAwaitingHuman2, isSlackThreadAwaitingHuman2, markTaskSlackReplySent2, setSlackMessageTracking2, updateTaskVcs2, insertTaskAttachment2, recordTaskPullRequestAttachments2, getAssetKeyMappingByProvider2, upsertAssetKeyMapping2, getAssetKeyMapping2, listAssetSummaries2, moveAssetKey2, deleteTaskAttachment2, replaceTaskAttachment2, getTaskAttachments2, createSteeringMessage2, getSteeringMessagesForTask2, getSteeringMessageById2, getPendingSteeringForTask2, getPendingSteeringForAgent2, markSteeringDelivered2, markSteeringHandled2, markSteeringPromoted2, cancelPendingSteeringForTask2, hasPendingSteering2, getAgentWithTasks2, getAllAgentsWithTasks2, createLogEntry2, getLogsByAgentId2, getLogsByTaskId2, getLogsByTaskIdAndEventType2, getLogsByTaskIdChronological2, getLogsByEventType2, getAllLogs2, findRecentSimilarTasks2, createTaskExtended2, claimTask2, releaseTask2, acceptTask2, rejectTask2, moveTaskToBacklog2, moveTaskFromBacklog2, promoteDraftTask2, refreshDraftTaskLease2, promoteAbandonedDraftTasks2, releaseStaleReviewingTasks2, releaseStaleOfferedTasksForOfflineAgents2, getOfferedTasksForAgent2, claimOfferedTask2, getUnassignedTasksCount2, getUnassignedTaskIds2, getUnassignedTaskIdsForAgent2, checkDependencies2, getDependentTasks2, cascadeFailDependents2, updateAgentProfile2, updateAgentName2, createChannel2, getMessageById2, getChannelById2, getChannelByName2, getAllChannels2, deleteChannel2, postMessage2, getChannelMessages2, updateReadState2, getLastReadAt2, getUnreadMessages2, getMentionsForAgent2, getInboxSummary2, claimMentions2, releaseMentionProcessing2, releaseStaleMentionProcessing2, createService2, getServiceById2, getServiceByAgentAndName2, getServicesByAgentId2, getAllServices2, updateServiceStatus2, deleteService2, upsertService2, deleteServicesByAgentId2, createSessionLogs2, getSessionLogsByTaskId2, getSessionLogsBySession2, createSessionCost2, getSessionCostsByTaskId2, getSessionCostsByAgentId2, getAllSessionCosts2, getSessionCostsFiltered2, UNATTRIBUTED_USER_ID2, getSessionCostSummary2, getAttributionByPerson2, getDashboardCostSummary2, createInboxMessage2, getInboxMessageById2, getUnreadInboxMessages2, claimInboxMessages2, markInboxMessageRead2, markInboxMessageResponded2, markInboxMessageDelegated2, releaseStaleProcessingInbox2, getConcurrentContext2, getScheduledTasks2, getScheduledTaskById2, getScheduledTaskByName2, createScheduledTask2, updateScheduledTask2, deleteScheduledTask2, getDueScheduledTasks2, autoEncryptLegacyPlaintextSecrets2, maskSecrets2, getSwarmConfigs2, getInjectableGlobalConfigs2, getSwarmConfigById2, getSwarmConfigLookupById2, upsertSwarmConfig2, emitBuiltInIntegrationConnectedOnce2, deleteSwarmConfig2, deleteSwarmConfigByKey2, getResolvedConfig2, getSwarmRepos2, getSwarmRepoById2, getSwarmRepoByName2, getSwarmRepoByUrl2, createSwarmRepo2, updateSwarmRepo2, deleteSwarmRepo2, getAgentMailInboxMapping2, getAgentMailInboxMappingsByAgent2, getAllAgentMailInboxMappings2, createAgentMailInboxMapping2, deleteAgentMailInboxMapping2, findTaskByAgentMailThread2, insertActiveSession2, deleteActiveSession2, deleteActiveSessionById2, getActiveSessions2, heartbeatActiveSession2, cleanupStaleSessions2, cleanupAgentSessions2, updateActiveSessionProviderSessionId2, getActiveSessionForTask2, reassociateSessionLogs2, getStalledInProgressTasks2, getStalePinnedResumes2, failPendingResumeIfUnclaimed2, getIdleWorkersWithCapacity2, getUnassignedPoolTasks2, getStaleUnassignedAffinityTasks2, getRecentFailedTasks2, getRecentCompletedCount2, getRecentFailedCount2, createWorkflow2, getWorkflow2, listWorkflows2, updateWorkflow2, deleteWorkflow2, getWorkflowsByScheduleId2, createWorkflowRun2, getWorkflowRun2, updateWorkflowRun2, listWorkflowRuns2, countWorkflowRuns2, listWorkflowRunsPage2, createWorkflowRunStep2, getWorkflowRunStep2, updateWorkflowRunStep2, getWorkflowRunStepsByRunId2, getStuckWorkflowRuns2, getLastSuccessfulRun2, getLastRunStart2, getRetryableSteps2, getCompletedStepNodeIds2, getTaskByWorkflowRunStepId2, detachTaskFromWorkflowRunStep2, getStepByIdempotencyKey2, getStepCountForNode2, getLatestStepForNode2, getCurrentStepForNode2, createWorkflowVersion2, getWorkflowVersions2, getWorkflowVersion2, createAppVersion2, getAppVersions2, getAppVersion2, createPage2, getPage2, getPageBySlug2, getLatestPageBySlug2, listPagesByAgent2, listAllPages2, countAllPages2, countPagesByAgent2, updatePage2, deletePage2, incrementPageViewCount2, createPageVersion2, getPageVersions2, getPageVersion2, createMetric2, getMetric2, getMetricBySlug2, listMetricsByAgent2, listAllMetrics2, countAllMetrics2, countMetricsByAgent2, updateMetric2, deleteMetric2, createMetricVersion2, getMetricVersions2, getMetricVersion2, getPromptTemplates2, getPromptTemplateById2, upsertPromptTemplate2, deletePromptTemplate2, resetPromptTemplateToDefault2, getPromptTemplateHistory2, resolvePromptTemplate2, checkoutPromptTemplate2, getAllChannelActivityCursors2, getChannelActivityCursor2, upsertChannelActivityCursor2, createApprovalRequest2, getApprovalRequestById2, resolveApprovalRequest2, cancelApprovalRequestById2, cancelPendingApprovalRequestsForRun2, listCancelledApprovalRequestsForRun2, listCancelledApprovalRequestsForStep2, claimApprovalCancellationNotification2, completeApprovalCancellationNotificationClaim2, releaseApprovalCancellationNotificationClaim2, updateApprovalRequestNotifications2, listApprovalRequests2, getStuckApprovalRuns2, getApprovalRequestByStepId2, getExpiredPendingApprovals2, getStaleApprovalRequests2, createWaitState2, getWaitStateById2, getWaitStateByStepId2, getDueWaitStates2, getPendingEventWaitNames2, getPendingWaitsByEvent2, resolveWaitState2, getStuckWaitRuns2, SKILL_FILE_LIMITS2, normalizeSkillFilePath2, createSkill2, updateSkill2, listSkillFileManifest2, getSkillFiles2, getSkillFile2, upsertSkillFile2, upsertSkillFiles2, deleteSkillFile2, deleteSkill2, getSkillById2, getSkillByName2, listSkills2, searchSkills2, installSkill2, getSystemDefaultSkills2, installSystemDefaultSkillsForAgent2, uninstallSkill2, getAgentSkills2, toggleAgentSkill2, createMcpServer2, emitMcpServerConnectedTelemetry2, updateMcpServer2, deleteMcpServer2, getMcpServerById2, getMcpServerByName2, listMcpServers2, installMcpServer2, uninstallMcpServer2, getAgentMcpServers2, createContextSnapshot2, getContextSnapshotsByTaskId2, getContextSnapshotsBySessionId2, getContextSummaryByTaskId2, getAvailableKeyIndices2, recordKeyUsage2, setApiKeyPlan2, markKeyRateLimited2, recordKeyAuthFailure2, recordKeyRateLimitWindows2, setApiKeyName2, clearKeyRateLimit2, getKeyStatuses2, getKeyCostSummary2, getUserById2, getAllUsers2, createUser2, updateUser2, deleteUser2, listInboxState2, upsertInboxState2, listFavorites2, listUserFavorites2, getFavoriteItemIdSet2, setFavorite2, setUserFavorite2, withFavoriteFlags2, listTaskTemplates2, getRootTaskChain2, listRecentSessions2, countSessions2, getBudget2, getBudgets2, upsertBudget2, deleteBudget2, getAllPricingRows2, getPricingRows2, getActivePricingRow2, insertPricingRow2, deletePricingRow2, getDailySpendForAgent2, getDailySpendGlobal2, getDailySpendForUser2, recordBudgetRefusalNotification2, getBudgetRefusalNotification2, getRecentBudgetRefusalNotifications2, hasBudgetRefusalNotificationToday2, setBudgetRefusalFollowUpTaskId2, getLiveAgentCounts2, getReadyAgentCounts2, getInstanceActivity2, getSwarmMetrics2, hasFirstCompletedTask2, getKv2, sweepExpiredKv2, sweepExpiredKvPrefix2, upsertKv2, claimKv2, deleteKv2, KvTypeCollisionError2, incrKv2, kvPrefixUpperBound2, listKv2, countKv2, createScriptRun2, recordInlineScriptRun2, getScriptRun2, getScriptRunByIdempotencyKey2, listScriptRuns2, countScriptRuns2, countActiveScriptRuns2, updateScriptRun2, updateScriptRunIfNotTerminal2, updateScriptRunIfRunning2, getRunningScriptRuns2, getScriptRunJournalStep2, upsertScriptRunJournalStep2, listScriptRunJournalSteps2, countScriptRunJournalSteps2, countScriptRunJournalAgentTaskSteps2, exports_db, init_db4 };
29611
+ export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, bitbucketContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, sessionSourceKey, sourceOfKey, SOURCE_GROUPS_READ_ONLY, sourceMoveError, init_source_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, reportedUseCase, reportedUserFunction, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, runWithoutRequestAuth, authUserId, authUser, isOperatorAuth, getCurrentRequestUserId, init_request_auth_context, setTelemetryIngestObserver, isTelemetryEnabled, _resolveIntegrationType, _resolveIntegrationProvider, initTelemetry, setTelemetryRoleResolver, setTelemetryFunctionResolver, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, isPrivateAddress, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, foldHexCopies, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates2, init_templates3, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime2, cachedUserRole, cachedUserFunction, invalidateTelemetryUserRole, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, isEnvExportRestrictedKey, init_config_env_export, MASKED_SECRET_VALUE, init_config_secrets, HeartbeatExpiryError, init_heartbeat_expiry, isRuntimePoolsEnabled, init_runtime_pools_flag, normalizeDate, normalizeDateRequired, init_date_utils, rowToAgent, updateAgentCredentialState2, updateAgentCredentialMissing2, createAgent2, getAgentById2, EXTENSION_AGENT_ROLE2, NOT_EXTENSION_AGENT_SQL2, isExtensionAgent2, extensionAgentAssignmentError2, ReservedAgentRoleError2, reservedRoleViolation2, ExtensionAgentAssignmentError2, getAllAgents2, getAgentStatusCounts2, getLeadAgent2, updateAgentStatus2, updateAgentMaxTasks2, updateAgentProvider2, setAgentHarnessProvider2, updateAgentCredStatus2, listAgentsWithCredStatusByProvider2, getAgentHarnessProviders2, updateAgentActivity2, MAX_EMPTY_POLLS2, incrementEmptyPollCount2, resetEmptyPollCount2, shouldBlockPolling2, deleteAgent2, getActiveTaskCount2, hasCapacity2, getRemainingCapacity2, updateAgentStatusFromCapacity2, isPoolAffinityEnforcementEnabled2, buildRoutingAffinityFromAgent2, isAgentEligibleForTask2, getAgentDailyTaskCounts2, init_agents, listApprovalRequestSummaries2, getPendingApprovalVoteState2, recordApprovalVotes2, getPendingApprovalsForTasks2, approvalCancellationNotificationKey, listUndeliveredCancelledApprovalRequestIds, init_approvals, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, startTaskSearchBackfill, stopTaskSearchBackfill, init_search_index, rowToAgentTask, getTaskById2, getChildTasks2, TASK_LINEAGE_LIMITS2, getTaskLineage2, hasNonTerminalResumeChild2, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, getSupersededTasksWithoutResume2, getSupersededTasksWithUnsettledDependents2, hasNonTerminalRerouteDecisionChild2, getTasksByAgentId2, getAgentCurrentTask2, getTasksByStatus2, findTaskByVcs2, findActiveTasksByVcs2, findTaskByGitHub2, readableSessionCondition, getAllTasks2, getTasksCount2, getTaskStats2, getCompletedSlackTasks2, getPendingSlackRelayTasks2, markSlackRelayAttempted2, markSlackRelayDelivered2, markFinalizedSlackRelaysDelivered2, getPendingChatRelayTasks2, giveUpStaleChatRelays2, markChatRelayAttempted2, recordChatRelayError2, markChatRelayDelivered2, markChatRelayGivenUp2, getRecentlyFinishedWorkerTasks2, markTasksNotified2, resetTasksNotified2, getInProgressSlackTasks2, getSlackTasksMissingTree2, getInProgressTasksByContextKey2, isLinearTrackerContextKey2, findExistingLinearTrackerContextWork2, getLatestTaskByContextKey2, getLatestScriptRunStepTaskByContextKey2, getAgentWorkingOnThread2, getLatestActiveTaskInThread2, getLatestLeadTaskInThread2, getAgentWorkingOnContextKey2, getLatestActiveTaskByContextKey2, getLatestLeadTaskByContextKey2, getMostRecentTaskInThread2, findCompletedTasksInThread2, findRecentFailedTaskInThread2, countAgentDispatchesInThread2, findRecentCancelledTaskInThread2, init_read, MODEL_PROFILE_CONFIG_KEY, listModelProfiles, getModelProfileByName, createModelProfile, updateModelProfile, modelProfileReferences, modelProfileRefError, deleteModelProfile, getAgentDefaultProfileName, repoModelOverrideKeys, taskProfileError, init_model_profiles, AssetKeyMovesBlockedError2, assertAssetKeyMovesAllowed2, moveTaskChainKeyInTx2, moveSessionChains, listPrefixRoots, listSharedPrefixRoots, init_session_moves, getSessionGroupKey, getSessionReadState, getSessionTree, triageSessionList, init_session_tree, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, CHAT_SDK_ADAPTER_NAMES, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, firstIssueText, isAdapterEntryEnabled, init_schema, TELEMETRY_RANKING_KEY, PUBLIC_RANKING_ENABLED_KEY, RANKING_CATEGORIES, readTelemetryRanking, rankingFormSchema, buildListing, init_telemetry_ranking, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, completedStatusIcon, init_reaction_shortcode, API_DRAINING_HEADER, API_DRAIN_MAX_MS_LIMIT, isApiDrainingResponse, init_api_drain2, parseEnabledTools, init_enabled_tools, parseTaskToolManifest, CHAT_TASK_ONLY_TOOLS, isChatSdkTask, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isApiOnlyConfigKey, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateRuntimeTokenTtlHours, validateControllerTokenTtlDays, validateControllerGraceSec, validateConfigValue, validateConfigEntry, validateExportToEnv, init_swarm_config_guard, getDefaultAuthorizationIdForProvider, getOAuthApp, getOAuthAppById, getOAuthAppIdByProvider, createOAuthApp, updateOAuthAppById, upsertOAuthApp, listAuthorizationsForApp, getAuthorizationById, upsertAuthorization, updateAuthorizationTokens, updateAuthorizationIdentity, deleteAuthorizationById, deleteAuthorizationsForApp, createOAuthPending, consumeOAuthPending, gcOAuthPending, markAuthorizationRefreshFailed, getOAuthTokens, listAuthorizationSweepRows, listKeepAliveAuthorizations, deleteOAuthTokens, acquireOAuthRefreshLock, releaseOAuthRefreshLock, init_oauth, OpenAI2, init_openai2, LEARNING_DUPLICATE_MIN_SIMILARITY, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants2, LONGTERM_ROOT, MEMORY_KEY_PATTERN, MEMORY_KEY_PATTERN_MESSAGE, MEMORY_KEY_MAX_LENGTH, isLongtermKey, longtermKeyError, isConsolidatedKey, consolidatedKeyMessage, resolveStoreKey, init_key_paths, computeScore, rerank, init_reranker, searchMemoryCandidates, init_search_candidates, rowToCandidate, init_sqlite_store, getEmbeddingProvider2, resetEmbeddingProvider2, getMemoryStore2, init_memory, embeddingProvider2, computeScriptEmbedding2, writeScriptEmbedding2, embedScript2, searchScripts2, reembedAllScripts2, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db3, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, WorkflowReplayStateError, init_workflow_replay, getWorkflowRunTriggeredByAgentId, getWorkflowRunSummary, getWorkflowRunStepsSlimByRunId, WORKFLOW_RUN_TREE_MAX_DEPTH, WorkflowRunTreeError, getRunLineageBlock, getWorkflowRunTreeIds, getWorkflowRunStatus, getOpenWorkflowTreeTaskIds, getTaskIdsWithDependents, workflowRunTreeHasOpenWork, getWorkflowRunTree, cancelOpenWorkflowTreeSteps, disarmWorkflowTreeRetries, cancelLiveWorkflowTreeRuns, getChildWorkflowRunId, isParentStepAttemptCurrent, getRunningSubWorkflowSteps, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, emitRunFinished, createForeachChildSteps, createForeachAttemptSteps, init_workflow_runs, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, STEERING_MOVED_ERROR, SteeringRequestError, SteeringBlockedError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering2, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, IdempotencyKeyTakenError, workflowRequestFingerprint, findAcceptedWorkflowOperation, assertWorkflowIdempotencyKeyUnused, recordAcceptedWorkflowOperation, init_workflow_idempotency, recordKeySeatMismatch2, recordKeyValidation2, retirePoolKeyStatus, init_api_keys, getScriptRunExecutionArgs2, getScriptRunFollowUpGuard2, setScriptRunFollowUpGuard2, literalPrefixPattern2, getSlackRenderV2ActivatedAt2, ensureSlackRenderV2Activation2, getSlackDelegationActivatedAt2, ensureSlackDelegationActivation2, isPendingSlackMessage2, isSettledSlackMessage2, recordSlackMessage2, reserveSlackMessage2, bindSlackMessageTimestamp2, updateSlackMessageRecord2, markSlackTreeRendered2, deleteSlackMessageRecord2, getSlackTreeMessage2, getSlackTreeMessageByThread2, getSlackOutcomeMessage2, getResolvableDeferralOutcomes2, markSlackDeferralResolved2, noteSlackOutcomeDeliveryFailure2, abandonSlackOutcomeDelivery2, getSlackTreeMessages2, getSlackMessageByChannelTs2, getSlackTasksInThread2, listSlackThreadsAwaitingHuman2, isSlackThreadAwaitingHuman2, markTaskSlackReplySent2, setSlackMessageTracking2, updateTaskVcs2, insertTaskAttachment2, recordTaskPullRequestAttachments2, getAssetKeyMappingByProvider2, upsertAssetKeyMapping2, getAssetKeyMapping2, listAssetSummaries2, moveAssetKey2, deleteTaskAttachment2, replaceTaskAttachment2, getTaskAttachments2, createSteeringMessage2, getSteeringMessagesForTask2, getSteeringMessageById2, getPendingSteeringForTask2, getPendingSteeringForAgent2, markSteeringDelivered2, markSteeringHandled2, markSteeringPromoted2, cancelPendingSteeringForTask2, hasPendingSteering2, getAgentWithTasks2, getAllAgentsWithTasks2, createLogEntry2, getLogsByAgentId2, getLogsByTaskId2, getLogsByTaskIdAndEventType2, getLogsByTaskIdChronological2, getLogsByEventType2, getAllLogs2, findRecentSimilarTasks2, createTaskExtended2, claimTask2, releaseTask2, acceptTask2, rejectTask2, moveTaskToBacklog2, moveTaskFromBacklog2, promoteDraftTask2, refreshDraftTaskLease2, promoteAbandonedDraftTasks2, releaseStaleReviewingTasks2, releaseStaleOfferedTasksForOfflineAgents2, getOfferedTasksForAgent2, claimOfferedTask2, getUnassignedTasksCount2, getUnassignedTaskIds2, getUnassignedTaskIdsForAgent2, checkDependencies2, getDependentTasks2, cascadeFailDependents2, updateAgentProfile2, updateAgentName2, createChannel2, getMessageById2, getChannelById2, getChannelByName2, getAllChannels2, deleteChannel2, postMessage2, getChannelMessages2, updateReadState2, getLastReadAt2, getUnreadMessages2, getMentionsForAgent2, getInboxSummary2, claimMentions2, releaseMentionProcessing2, releaseStaleMentionProcessing2, createService2, getServiceById2, getServiceByAgentAndName2, getServicesByAgentId2, getAllServices2, updateServiceStatus2, deleteService2, upsertService2, deleteServicesByAgentId2, createSessionLogs2, getSessionLogsByTaskId2, getSessionLogsBySession2, createSessionCost2, getSessionCostsByTaskId2, getSessionCostsByAgentId2, getAllSessionCosts2, getSessionCostsFiltered2, UNATTRIBUTED_USER_ID2, getSessionCostSummary2, getAttributionByPerson2, getDashboardCostSummary2, createInboxMessage2, getInboxMessageById2, getUnreadInboxMessages2, claimInboxMessages2, markInboxMessageRead2, markInboxMessageResponded2, markInboxMessageDelegated2, releaseStaleProcessingInbox2, getConcurrentContext2, getScheduledTasks2, getScheduledTaskById2, getScheduledTaskByName2, createScheduledTask2, updateScheduledTask2, deleteScheduledTask2, getDueScheduledTasks2, autoEncryptLegacyPlaintextSecrets2, maskSecrets2, getSwarmConfigs2, getInjectableGlobalConfigs2, getSwarmConfigById2, getSwarmConfigLookupById2, upsertSwarmConfig2, emitBuiltInIntegrationConnectedOnce2, deleteSwarmConfig2, deleteSwarmConfigByKey2, getResolvedConfig2, getSwarmRepos2, getSwarmRepoById2, getSwarmRepoByName2, getSwarmRepoByUrl2, createSwarmRepo2, updateSwarmRepo2, deleteSwarmRepo2, getAgentMailInboxMapping2, getAgentMailInboxMappingsByAgent2, getAllAgentMailInboxMappings2, createAgentMailInboxMapping2, deleteAgentMailInboxMapping2, findTaskByAgentMailThread2, insertActiveSession2, deleteActiveSession2, deleteActiveSessionById2, getActiveSessions2, heartbeatActiveSession2, cleanupStaleSessions2, cleanupAgentSessions2, updateActiveSessionProviderSessionId2, getActiveSessionForTask2, reassociateSessionLogs2, getStalledInProgressTasks2, getStalePinnedResumes2, failPendingResumeIfUnclaimed2, getIdleWorkersWithCapacity2, getUnassignedPoolTasks2, getStaleUnassignedAffinityTasks2, getRecentFailedTasks2, getRecentCompletedCount2, getRecentFailedCount2, createWorkflow2, getWorkflow2, listWorkflows2, updateWorkflow2, deleteWorkflow2, getWorkflowsByScheduleId2, createWorkflowRun2, getWorkflowRun2, updateWorkflowRun2, listWorkflowRuns2, countWorkflowRuns2, listWorkflowRunsPage2, createWorkflowRunStep2, getWorkflowRunStep2, updateWorkflowRunStep2, getWorkflowRunStepsByRunId2, getStuckWorkflowRuns2, getLastSuccessfulRun2, getLastRunStart2, getRetryableSteps2, getCompletedStepNodeIds2, getTaskByWorkflowRunStepId2, detachTaskFromWorkflowRunStep2, getStepByIdempotencyKey2, getStepCountForNode2, getLatestStepForNode2, getCurrentStepForNode2, createWorkflowVersion2, getWorkflowVersions2, getWorkflowVersion2, createAppVersion2, getAppVersions2, getAppVersion2, createPage2, getPage2, getPageBySlug2, getLatestPageBySlug2, listPagesByAgent2, listAllPages2, countAllPages2, countPagesByAgent2, updatePage2, deletePage2, incrementPageViewCount2, createPageVersion2, getPageVersions2, getPageVersion2, createMetric2, getMetric2, getMetricBySlug2, listMetricsByAgent2, listAllMetrics2, countAllMetrics2, countMetricsByAgent2, updateMetric2, deleteMetric2, createMetricVersion2, getMetricVersions2, getMetricVersion2, getPromptTemplates2, getPromptTemplateById2, upsertPromptTemplate2, deletePromptTemplate2, resetPromptTemplateToDefault2, getPromptTemplateHistory2, resolvePromptTemplate2, checkoutPromptTemplate2, getAllChannelActivityCursors2, getChannelActivityCursor2, upsertChannelActivityCursor2, createApprovalRequest2, getApprovalRequestById2, resolveApprovalRequest2, cancelApprovalRequestById2, cancelPendingApprovalRequestsForRun2, listCancelledApprovalRequestsForRun2, listCancelledApprovalRequestsForStep2, claimApprovalCancellationNotification2, completeApprovalCancellationNotificationClaim2, releaseApprovalCancellationNotificationClaim2, updateApprovalRequestNotifications2, listApprovalRequests2, getStuckApprovalRuns2, getApprovalRequestByStepId2, getExpiredPendingApprovals2, getStaleApprovalRequests2, createWaitState2, getWaitStateById2, getWaitStateByStepId2, getDueWaitStates2, getPendingEventWaitNames2, getPendingWaitsByEvent2, resolveWaitState2, getStuckWaitRuns2, SKILL_FILE_LIMITS2, normalizeSkillFilePath2, createSkill2, updateSkill2, listSkillFileManifest2, getSkillFiles2, getSkillFile2, upsertSkillFile2, upsertSkillFiles2, deleteSkillFile2, deleteSkill2, getSkillById2, getSkillByName2, listSkills2, searchSkills2, installSkill2, getSystemDefaultSkills2, installSystemDefaultSkillsForAgent2, uninstallSkill2, getAgentSkills2, toggleAgentSkill2, createMcpServer2, emitMcpServerConnectedTelemetry2, updateMcpServer2, deleteMcpServer2, getMcpServerById2, getMcpServerByName2, listMcpServers2, installMcpServer2, uninstallMcpServer2, getAgentMcpServers2, createContextSnapshot2, getContextSnapshotsByTaskId2, getContextSnapshotsBySessionId2, getContextSummaryByTaskId2, getAvailableKeyIndices2, recordKeyUsage2, setApiKeyPlan2, markKeyRateLimited2, recordKeyAuthFailure2, recordKeyRateLimitWindows2, setApiKeyName2, clearKeyRateLimit2, getKeyStatuses2, getKeyCostSummary2, getUserById2, getAllUsers2, createUser2, updateUser2, deleteUser2, listInboxState2, upsertInboxState2, listFavorites2, listUserFavorites2, getFavoriteItemIdSet2, setFavorite2, setUserFavorite2, withFavoriteFlags2, listTaskTemplates2, getRootTaskChain2, listRecentSessions2, countSessions2, getBudget2, getBudgets2, upsertBudget2, deleteBudget2, getAllPricingRows2, getPricingRows2, getActivePricingRow2, insertPricingRow2, deletePricingRow2, getDailySpendForAgent2, getDailySpendGlobal2, getDailySpendForUser2, recordBudgetRefusalNotification2, getBudgetRefusalNotification2, getRecentBudgetRefusalNotifications2, hasBudgetRefusalNotificationToday2, setBudgetRefusalFollowUpTaskId2, getLiveAgentCounts2, getReadyAgentCounts2, getInstanceActivity2, getSwarmMetrics2, hasFirstCompletedTask2, getKv2, sweepExpiredKv2, sweepExpiredKvPrefix2, upsertKv2, claimKv2, deleteKv2, KvTypeCollisionError2, incrKv2, kvPrefixUpperBound2, listKv2, countKv2, createScriptRun2, recordInlineScriptRun2, getScriptRun2, getScriptRunByIdempotencyKey2, listScriptRuns2, countScriptRuns2, countActiveScriptRuns2, updateScriptRun2, updateScriptRunIfNotTerminal2, updateScriptRunIfRunning2, getRunningScriptRuns2, getScriptRunJournalStep2, upsertScriptRunJournalStep2, listScriptRunJournalSteps2, countScriptRunJournalSteps2, countScriptRunJournalAgentTaskSteps2, exports_db, init_db4 };