@desplega.ai/agent-swarm 2.4.4 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +4 -2
  2. package/dist/{acp-adapter-thq04adh.js → acp-adapter-11gp67nr.js} +8 -6
  3. package/dist/{actions-j6ywh6x5.js → actions-8p2kze8j.js} +24 -22
  4. package/dist/{amp-adapter-k8b5xmj8.js → amp-adapter-z4qvhacj.js} +2 -2
  5. package/dist/{anthropic-messages-g6pqmqk4.js → anthropic-messages-txs190dd.js} +17 -20
  6. package/dist/{app-rb7vc02s.js → app-0qp0a2gk.js} +3 -3
  7. package/dist/{assistant-ftta1zjf.js → assistant-jedd3ktm.js} +27 -25
  8. package/dist/{azure-openai-responses-9dbmj346.js → azure-openai-responses-9kfwhmn7.js} +18 -13
  9. package/dist/{boot-reembed-xns7h5h9.js → boot-reembed-4xwq5tg0.js} +1 -1
  10. package/dist/{boot-reembed-srp6v6af.js → boot-reembed-n4wq5dd2.js} +1 -1
  11. package/dist/{boot-scrub-sweep-3qqrh2mz.js → boot-scrub-sweep-69h90xcq.js} +4 -4
  12. package/dist/{boot-seeds-9ks8hce7.js → boot-seeds-3vn0m9sg.js} +4 -4
  13. package/dist/{claude-adapter-k5ksyres.js → claude-adapter-221mvad5.js} +8 -6
  14. package/dist/{claude-managed-adapter-h2y889ge.js → claude-managed-adapter-gt6pa35d.js} +2 -2
  15. package/dist/{claude-managed-setup-n5a5eqks.js → claude-managed-setup-c3hp36ph.js} +4 -4
  16. package/dist/{claude-sdk-session-2j3j4kwn.js → claude-sdk-session-8thjsk5e.js} +9729 -9628
  17. package/dist/{cli-b9fcxxev.js → cli-007cnhm1.js} +50 -4
  18. package/dist/{cli-j4rqdf2n.js → cli-03vpq45j.js} +2 -2
  19. package/dist/{cli-amyhm3gj.js → cli-0y6f0ckq.js} +1 -1
  20. package/dist/{cli-4dg55wsk.js → cli-0z3vjrpm.js} +1 -1
  21. package/dist/{cli-pccfmtb5.js → cli-179xcyky.js} +11 -11
  22. package/dist/{cli-3r8samv3.js → cli-1f0gp9vz.js} +3 -2
  23. package/dist/{cli-hj3debgw.js → cli-1pr672hz.js} +3 -3
  24. package/dist/{cli-0bqteszy.js → cli-2nf3b08t.js} +328 -25
  25. package/dist/{cli-t7cyef5g.js → cli-36j4jnk3.js} +4 -4
  26. package/dist/{cli-er83cjbn.js → cli-3qv8naq8.js} +527 -231
  27. package/dist/cli-3zwye9sn.js +1193 -0
  28. package/dist/{cli-60cgh1rv.js → cli-459fk97x.js} +7 -7
  29. package/dist/{cli-xj0re5tm.js → cli-4w24f7z3.js} +1 -1
  30. package/dist/{cli-v3yr2gbg.js → cli-5kzk3472.js} +2198 -968
  31. package/dist/{cli-h7gc0b4r.js → cli-5m84zd2k.js} +55 -18
  32. package/dist/{cli-w6nadkh4.js → cli-5rvg1ddk.js} +5 -5
  33. package/dist/{cli-dvkmp9bt.js → cli-6ctwrf1z.js} +20 -10
  34. package/dist/{cli-9qtjfd60.js → cli-6rg2jn2y.js} +3 -2
  35. package/dist/{cli-2v045xyf.js → cli-7bwtc6yx.js} +3 -3
  36. package/dist/{cli-3cgngyd8.js → cli-7g40g8hq.js} +35 -17
  37. package/dist/{cli-q6r7t299.js → cli-92mqenkc.js} +2379 -154
  38. package/dist/{cli-cynvc9fj.js → cli-9ce2xw98.js} +8 -8
  39. package/dist/{cli-gqvh8d8a.js → cli-bgdtv62r.js} +36 -22
  40. package/dist/{cli-wxbn3yfx.js → cli-cz5nmdxt.js} +2 -2
  41. package/dist/{cli-wt645v7q.js → cli-dabehxhp.js} +1 -1
  42. package/dist/{cli-vfha21c9.js → cli-e5bxnjps.js} +2 -2
  43. package/dist/{cli-p20r8w42.js → cli-fcc5qe3f.js} +763 -268
  44. package/dist/{cli-1ephgwnq.js → cli-fes51ya2.js} +3 -3
  45. package/dist/{cli-1d70crsy.js → cli-ftmq4nvk.js} +2 -2
  46. package/dist/{cli-qkhc5aqy.js → cli-fy1jyyym.js} +13 -13
  47. package/dist/{cli-s95dknxh.js → cli-g1cw7xtt.js} +1 -1
  48. package/dist/{cli-qje9k2nh.js → cli-g9ypd5en.js} +12 -2
  49. package/dist/{cli-74c1wpm0.js → cli-gpv60278.js} +1 -1
  50. package/dist/{cli-pemywhfq.js → cli-ha9rmwgq.js} +2 -1
  51. package/dist/{cli-bnz0r3kc.js → cli-j1eghqfm.js} +5 -5
  52. package/dist/{cli-2zqpkvtt.js → cli-jpxsrxcb.js} +1 -1
  53. package/dist/{cli-ejs3m1sx.js → cli-kxpfx2xr.js} +1 -1
  54. package/dist/{cli-37yb7307.js → cli-mbfj11fq.js} +1 -1
  55. package/dist/{cli-pnp2j5zg.js → cli-mmhj8vd7.js} +2 -2
  56. package/dist/{cli-xf234ws8.js → cli-n4c8e3s5.js} +2 -0
  57. package/dist/{cli-a0kcty51.js → cli-n6kmqngw.js} +2 -2
  58. package/dist/{cli-te6b5wvg.js → cli-nnvjb17s.js} +3 -3
  59. package/dist/{cli-1dmcq2eh.js → cli-nzfnt2gs.js} +1 -1
  60. package/dist/{cli-625tb7aq.js → cli-p859hcc8.js} +2 -2
  61. package/dist/{cli-smvcw9z5.js → cli-pasyvjmm.js} +1 -1
  62. package/dist/cli-pkaqk57w.js +128 -0
  63. package/dist/{cli-8nyhf7za.js → cli-qqzmjxkf.js} +129 -105
  64. package/dist/{cli-zrwpctp4.js → cli-r25qpaxt.js} +161 -63
  65. package/dist/{cli-nc35pxb7.js → cli-rh5smt8t.js} +19 -4
  66. package/dist/{cli-qwkcwjdn.js → cli-rycdaj0a.js} +1 -1
  67. package/dist/{cli-esxerzg7.js → cli-s4sntwt4.js} +2 -2
  68. package/dist/{cli-b8k7epj1.js → cli-segs7hx9.js} +8 -8
  69. package/dist/{cli-36ckw0wx.js → cli-stxdrqs2.js} +2 -2
  70. package/dist/{cli-vdm20wej.js → cli-sy8f9705.js} +4 -4
  71. package/dist/{cli-1m17dc9d.js → cli-ta8bd7th.js} +2 -2
  72. package/dist/{cli-2y91wnbh.js → cli-we0ra057.js} +222 -10
  73. package/dist/{cli-55qmbp6z.js → cli-x21dqn18.js} +5 -5
  74. package/dist/{cli-dqb4n629.js → cli-x6vf4sad.js} +11 -11
  75. package/dist/{cli-d2mb5s8a.js → cli-x77gen2p.js} +680 -440
  76. package/dist/{cli-vq97g1jq.js → cli-xawhpgc9.js} +95 -195
  77. package/dist/{cli-82d3nkc3.js → cli-xd4eqtr2.js} +2 -2
  78. package/dist/{cli-9fhkkpj5.js → cli-xt768r5m.js} +2 -2
  79. package/dist/{cli-zrk6jxv8.js → cli-y4x8ww6s.js} +2 -2
  80. package/dist/{cli-xc27fwzg.js → cli-y9jvxfhk.js} +3 -3
  81. package/dist/{cli-44159k28.js → cli-z63a269p.js} +2 -2
  82. package/dist/{cli-sm8rses9.js → cli-zfdp01hn.js} +8 -5
  83. package/dist/cli.js +31 -29
  84. package/dist/{cloudflare-workers-ai-system-one-ch2wxfcp.js → cloudflare-workers-ai-system-one-43v9qkjk.js} +7 -2
  85. package/dist/{codex-adapter-968xwfy7.js → codex-adapter-tcg1q3jk.js} +6 -4
  86. package/dist/{codex-login-m819c41r.js → codex-login-rn7c5gxt.js} +1 -1
  87. package/dist/{codex-session-runner-ht4z99fa.js → codex-session-runner-xfx4wd9x.js} +7 -5
  88. package/dist/{commands-pcymaeg9.js → commands-ew83nj70.js} +2 -2
  89. package/dist/{controller-fpjyk46r.js → controller-gnq1k1mf.js} +4 -4
  90. package/dist/{controllers-connect-mwzx1fh6.js → controllers-connect-tw1dan9r.js} +26 -24
  91. package/dist/{cursor-adapter-cp4s2e2f.js → cursor-adapter-yq5xgfcg.js} +1 -1
  92. package/dist/{db-xsjg9jqq.js → db-7gbc53fd.js} +14 -2
  93. package/dist/{db-sgd12bt9.js → db-t86xrnes.js} +3 -3
  94. package/dist/{devin-adapter-zgqadvnm.js → devin-adapter-4ycy4vrf.js} +1 -1
  95. package/dist/{dispatcher-x0jfw2c9.js → dispatcher-64bdyhps.js} +23 -21
  96. package/dist/{docker-fkgtr75t.js → docker-nfy2gc8t.js} +2 -2
  97. package/dist/{dsh-adapter-jrq7ma7h.js → dsh-adapter-tvhc4k2d.js} +1 -1
  98. package/dist/{e2b-16d6ch39.js → e2b-9gkdhm3c.js} +2 -2
  99. package/dist/{e2b-zn0b4w5w.js → e2b-cjtf8k1z.js} +2 -2
  100. package/dist/{easter-egg-3d-5cgynaja.js → easter-egg-3d-e4qv8dxj.js} +1 -1
  101. package/dist/{event-bus-9vpk8gmq.js → event-bus-3z78ep5n.js} +1 -1
  102. package/dist/{execute-t4e6m3rw.js → execute-0xpz8950.js} +85 -23
  103. package/dist/{external-channel-8njj4h3b.js → external-channel-e9nw24zv.js} +2 -2
  104. package/dist/{google-generative-ai-bmq8gkf3.js → google-generative-ai-mk9vcpe1.js} +15 -15
  105. package/dist/{google-vertex-b1rvp52s.js → google-vertex-q580kz8k.js} +20 -20
  106. package/dist/{grok-adapter-kkr97v2f.js → grok-adapter-v82srhrx.js} +9 -7
  107. package/dist/handlers-c9ajzhbn.js +41 -0
  108. package/dist/{heartbeat-wd03zhn0.js → heartbeat-2vqs1319.js} +26 -24
  109. package/dist/{hook-xzj2ts2p.js → hook-01nk13wx.js} +7 -5
  110. package/dist/{hook-f0vghj42.js → hook-jzpheegg.js} +9 -7
  111. package/dist/{http-4hwxv62p.js → http-fc1k6ec8.js} +859 -252
  112. package/dist/index-07ef7nkm.js +42 -0
  113. package/dist/{index-g6tbb6ve.js → index-31ceyf42.js} +1 -1
  114. package/dist/index-7yts8n9s.js +43 -0
  115. package/dist/{index-c4ykd0f1.js → index-dr94zbnh.js} +13348 -11611
  116. package/dist/index-q3t40ryv.js +46 -0
  117. package/dist/{index-ww2vznkp.js → index-sepja052.js} +1 -1
  118. package/dist/{index-97q4xn03.js → index-zdycv3ja.js} +135 -79
  119. package/dist/{index-g216q6jr.js → index-zsyx51ap.js} +1 -4
  120. package/dist/{keepalive-hrh7xnr9.js → keepalive-5nh2rhmr.js} +4 -4
  121. package/dist/lead-aayq64jn.js +79 -0
  122. package/dist/{llama-cpp-classify-vv43gswy.js → llama-cpp-classify-ee7vmd7q.js} +4 -1
  123. package/dist/{maintenance-e8wnwnqx.js → maintenance-hjhzdt3k.js} +1 -1
  124. package/dist/{mistral-conversations-1medfwv7.js → mistral-conversations-sd0xf1tn.js} +13 -13
  125. package/dist/{node-3v3f08f7.js → node-jzjj7r9x.js} +10 -9
  126. package/dist/{oauth-refresh-sweep-zm0yj4sj.js → oauth-refresh-sweep-y3n1knmd.js} +3 -3
  127. package/dist/{onboard-dtwcq603.js → onboard-1zq3m7db.js} +2 -2
  128. package/dist/{openai-codex-responses-de9pvs4d.js → openai-codex-responses-79s8xnbh.js} +29 -23
  129. package/dist/{openai-completions-mtqge3nf.js → openai-completions-tdbyts0x.js} +21 -20
  130. package/dist/{openai-decisions-ygk4kkxd.js → openai-decisions-bqhnjyfz.js} +2 -1
  131. package/dist/{openai-responses-dkyng71g.js → openai-responses-dm3t5vqp.js} +26 -17
  132. package/dist/{opencode-adapter-x4tqzhkh.js → opencode-adapter-e56086m1.js} +7 -5
  133. package/dist/{openrouter-images-wvv7camj.js → openrouter-images-ssttr1y4.js} +6 -3
  134. package/dist/{otel-impl-w3fbhpn0.js → otel-impl-h9yyza47.js} +2 -2
  135. package/dist/{pi-messages-nhh1pkz2.js → pi-messages-3nf8bq1a.js} +6 -4
  136. package/dist/{pi-mono-adapter-mcfkn9vf.js → pi-mono-adapter-tzps8f38.js} +9 -37
  137. package/dist/{pricing-refresh-j38dehfs.js → pricing-refresh-nevhat8h.js} +3 -3
  138. package/dist/{rbac-roles-ae8yttq4.js → rbac-roles-4y6ngvzq.js} +1 -1
  139. package/dist/{rbac-roles-ejxx9b35.js → rbac-roles-exbg8xb6.js} +2 -2
  140. package/dist/{registry-rxw10xzg.js → registry-ajhexe44.js} +1 -1
  141. package/dist/{render-v2-n16n0phe.js → render-v2-cfsh13z3.js} +3 -3
  142. package/dist/{resume-z0fgjc38.js → resume-5s2t0dbs.js} +10 -8
  143. package/dist/{runtime-xe3aqy4x.js → runtime-bt5pkpm1.js} +1 -1
  144. package/dist/{session-access-cv3mq6mc.js → session-access-dnbyp3cn.js} +6 -4
  145. package/dist/{setup-mafhj3yt.js → setup-1wj1y77j.js} +1 -1
  146. package/dist/{typesafe-system-one-2hgpayzy.js → typesafe-system-one-bre38hvs.js} +4 -2
  147. package/dist/{virtual-modules-4r3zkc20.js → virtual-modules-mnfbh5mr.js} +8 -2
  148. package/dist/{work-objects-8b86mgjp.js → work-objects-7mg6216g.js} +26 -24
  149. package/dist/worker-nwb789mg.js +79 -0
  150. package/dist/{x-y45mthwn.js → x-pbpezr0s.js} +2 -2
  151. package/openapi.json +793 -6
  152. package/package.json +11 -11
  153. package/src/apps/catalog.generated.json +206 -4
  154. package/src/apps/page-validator.ts +13 -1
  155. package/src/assets/key.ts +17 -0
  156. package/src/azure-devops/handlers.ts +1 -1
  157. package/src/be/chunking.ts +42 -9
  158. package/src/be/db/approvals.ts +18 -0
  159. package/src/be/db/session-moves.ts +164 -0
  160. package/src/be/db/session-tree.ts +384 -0
  161. package/src/be/db/tasks/draft-text.ts +15 -0
  162. package/src/be/db/tasks/read.ts +54 -5
  163. package/src/be/db/workflow-runs.ts +96 -0
  164. package/src/be/db.ts +85 -237
  165. package/src/be/memory/index-content.ts +36 -17
  166. package/src/be/memory/providers/openai-embedding.ts +115 -61
  167. package/src/be/memory/providers/sqlite-store.ts +69 -23
  168. package/src/be/memory/reranker.ts +31 -1
  169. package/src/be/memory/search-candidates.ts +47 -0
  170. package/src/be/memory/types.ts +14 -0
  171. package/src/be/onboarding.ts +3 -0
  172. package/src/be/scripts/typecheck.ts +2 -0
  173. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +106 -54
  174. package/src/be/seed-scripts/index.ts +2 -2
  175. package/src/be/skill-sync.ts +43 -2
  176. package/src/be/swarm-config-guard.ts +25 -1
  177. package/src/be/task-attachment-store.ts +30 -0
  178. package/src/bitbucket/api.ts +81 -0
  179. package/src/bitbucket/auth.ts +64 -0
  180. package/src/bitbucket/handlers.ts +434 -0
  181. package/src/bitbucket/index.ts +28 -0
  182. package/src/bitbucket/templates.ts +134 -0
  183. package/src/bitbucket/types.ts +65 -0
  184. package/src/commands/runner.ts +55 -3
  185. package/src/e2b/env.ts +1 -0
  186. package/src/extensions/catalog.generated.json +4 -4
  187. package/src/extensions/contract-types.generated.ts +1 -1
  188. package/src/extensions/contract.ts +9 -2
  189. package/src/extensions/post-bridge.ts +1 -0
  190. package/src/fs/provider.ts +13 -1
  191. package/src/github/handlers.ts +6 -6
  192. package/src/gitlab/handlers.ts +5 -5
  193. package/src/heartbeat/heartbeat.ts +31 -11
  194. package/src/http/assets.ts +14 -2
  195. package/src/http/core.ts +12 -0
  196. package/src/http/fs.ts +54 -34
  197. package/src/http/index.ts +4 -0
  198. package/src/http/mcp-body.ts +37 -0
  199. package/src/http/mcp-user.ts +3 -5
  200. package/src/http/mcp.ts +6 -7
  201. package/src/http/memory.ts +26 -15
  202. package/src/http/onboarding.ts +1 -0
  203. package/src/http/page-proxy.ts +61 -5
  204. package/src/http/pages-public.ts +27 -44
  205. package/src/http/pages.ts +4 -4
  206. package/src/http/script-runs.ts +2 -0
  207. package/src/http/sessions.ts +366 -12
  208. package/src/http/skills.ts +48 -1
  209. package/src/http/tasks.ts +1 -1
  210. package/src/http/users.ts +13 -1
  211. package/src/http/webhooks.ts +141 -0
  212. package/src/integrations/chat-sdk/adapters.ts +24 -4
  213. package/src/integrations/chat-sdk/attachments.ts +90 -12
  214. package/src/integrations/chat-sdk/facts.ts +138 -0
  215. package/src/integrations/chat-sdk/inbound.ts +156 -8
  216. package/src/integrations/chat-sdk/limits.ts +24 -0
  217. package/src/integrations/chat-sdk/outbound-files.ts +186 -0
  218. package/src/integrations/chat-sdk/outbound.ts +272 -5
  219. package/src/integrations/chat-sdk/relay.ts +4 -1
  220. package/src/integrations/chat-sdk/router.ts +28 -2
  221. package/src/integrations/chat-sdk/steering.ts +9 -0
  222. package/src/integrations/chat-sdk/templates.ts +14 -0
  223. package/src/integrations/chat-sdk/thread-buffer.ts +4 -0
  224. package/src/mcp-limits.ts +20 -0
  225. package/src/pages/browser-sdk.ts +8 -3
  226. package/src/pages/feedback-overlay.ts +1 -1
  227. package/src/providers/acp-targets.ts +1 -1
  228. package/src/providers/amp-adapter.ts +1 -1
  229. package/src/providers/codex-adapter.ts +106 -119
  230. package/src/providers/codex-agents-md.ts +35 -229
  231. package/src/providers/cursor-adapter.ts +1 -1
  232. package/src/providers/pi-mono-adapter.ts +5 -53
  233. package/src/realtime/transport.ts +1 -2
  234. package/src/script-workflows/workflow-ctx.ts +1 -0
  235. package/src/scripts-runtime/types/stdlib.d.ts +2 -0
  236. package/src/scripts-runtime/types/swarm-extension.d.ts +14 -4
  237. package/src/scripts-runtime/types/swarm-sdk.d.ts +2 -0
  238. package/src/server-user.ts +2 -0
  239. package/src/server.ts +2 -0
  240. package/src/slack/assistant.ts +2 -2
  241. package/src/slack/files.ts +2 -0
  242. package/src/slack/handlers.test.ts +158 -0
  243. package/src/slack/handlers.ts +23 -32
  244. package/src/slack/inbound-files.ts +39 -6
  245. package/src/slack/thread-buffer.ts +2 -1
  246. package/src/tasks/context-key.ts +61 -1
  247. package/src/tasks/task-terminal-effects.ts +21 -17
  248. package/src/tests/apps-card-grid.test.ts +197 -0
  249. package/src/tests/apps-catalog-additions.test.ts +120 -0
  250. package/src/tests/apps-tree.test.ts +129 -0
  251. package/src/tests/bitbucket-auth.test.ts +156 -0
  252. package/src/tests/bitbucket-handlers.test.ts +425 -0
  253. package/src/tests/bitbucket-webhook.test.ts +220 -0
  254. package/src/tests/chat-sdk-attachments-reply.test.ts +52 -0
  255. package/src/tests/chat-sdk-config.test.ts +11 -0
  256. package/src/tests/chat-sdk-facts.test.ts +23 -0
  257. package/src/tests/chat-sdk-inbound.test.ts +597 -4
  258. package/src/tests/chat-sdk-outbound-files.test.ts +652 -0
  259. package/src/tests/chat-sdk-telegram-markdown.test.ts +92 -0
  260. package/src/tests/codex-adapter.test.ts +167 -242
  261. package/src/tests/config-api-only-keys.test.ts +9 -0
  262. package/src/tests/context-key.test.ts +50 -0
  263. package/src/tests/core-auth.test.ts +5 -0
  264. package/src/tests/cors-allowlist.test.ts +1 -1
  265. package/src/tests/db-task-read-contract.test.ts +7 -0
  266. package/src/tests/db-task-write-contract.test.ts +6 -0
  267. package/src/tests/docs-index-footprint.test.js +3 -3
  268. package/src/tests/extensions-example-slack-reply-gate.test.ts +262 -91
  269. package/src/tests/fixtures/bitbucket/pullrequest-comment-created-inline.json +174 -0
  270. package/src/tests/fixtures/bitbucket/pullrequest-comment-created.json +170 -0
  271. package/src/tests/fixtures/bitbucket/pullrequest-created-mention.json +132 -0
  272. package/src/tests/fixtures/bitbucket/pullrequest-created-reviewer.json +140 -0
  273. package/src/tests/fixtures/bitbucket/pullrequest-fulfilled.json +134 -0
  274. package/src/tests/fixtures/bitbucket/pullrequest-rejected.json +133 -0
  275. package/src/tests/generate-mcp-docs.test.ts +101 -0
  276. package/src/tests/gitlab-handlers.test.ts +3 -3
  277. package/src/tests/gitlab-vcs-db.test.ts +4 -4
  278. package/src/tests/heartbeat-checklist.test.ts +33 -0
  279. package/src/tests/heartbeat-jev-gate-credentials.test.ts +44 -0
  280. package/src/tests/heartbeat-jev-gate.test.ts +242 -1
  281. package/src/tests/integration-disable-flags.test.ts +36 -0
  282. package/src/tests/kv-page-proxy.test.ts +91 -5
  283. package/src/tests/launch-password-rejection.test.ts +2 -2
  284. package/src/tests/mcp-input-caps.test.ts +294 -0
  285. package/src/tests/mcp-tools.test.ts +1 -1
  286. package/src/tests/memory-chunked-search-starvation.test.ts +200 -0
  287. package/src/tests/memory-embedding-input-cap.test.ts +114 -0
  288. package/src/tests/memory.test.ts +14 -0
  289. package/src/tests/onboarding.test.ts +12 -0
  290. package/src/tests/page-guest-session.test.ts +19 -8
  291. package/src/tests/page-proxy-authed.test.ts +1 -1
  292. package/src/tests/page-proxy.test.ts +17 -10
  293. package/src/tests/page-session.test.ts +102 -1
  294. package/src/tests/pages-authed-mode.test.ts +82 -12
  295. package/src/tests/pages-password-mode.test.ts +5 -5
  296. package/src/tests/pi-codemode.test.ts +8 -2
  297. package/src/tests/preload-env.test.ts +57 -0
  298. package/src/tests/preload.ts +21 -0
  299. package/src/tests/prompt-template-remaining.test.ts +38 -0
  300. package/src/tests/realtime-transport.test.ts +13 -7
  301. package/src/tests/run-root-coverage.test.ts +39 -0
  302. package/src/tests/runner-bitbucket-vcs.test.ts +191 -0
  303. package/src/tests/runner-skills-refresh.test.ts +58 -0
  304. package/src/tests/script-runs-http.test.ts +84 -0
  305. package/src/tests/scripts-http.test.ts +10 -1
  306. package/src/tests/secret-scrubber.test.ts +15 -0
  307. package/src/tests/sessions-move.test.ts +576 -0
  308. package/src/tests/sessions-tree.test.ts +493 -0
  309. package/src/tests/skill-files-http.test.ts +50 -0
  310. package/src/tests/skills-bundle.test.ts +99 -0
  311. package/src/tests/swarm-config-export-to-env.test.ts +23 -3
  312. package/src/tests/task-audio-transcription.test.ts +299 -0
  313. package/src/tests/task-completion-memory-chunking.test.ts +434 -0
  314. package/src/tests/task-terminal-secret-scrub.test.ts +6 -1
  315. package/src/tests/transcription.test.ts +299 -0
  316. package/src/tests/vcs-bitbucket.test.ts +91 -0
  317. package/src/tests/vcs-provider-isolation.test.ts +123 -0
  318. package/src/tests/vcs-provider.test.ts +16 -1
  319. package/src/tests/vcs-tracking.test.ts +3 -3
  320. package/src/tests/workflow-foreach-bodies.test.ts +637 -0
  321. package/src/tests/workflow-foreach-concurrency.test.ts +342 -0
  322. package/src/tests/workflow-foreach-retry.test.ts +537 -0
  323. package/src/tests/workflow-foreach.test.ts +44 -23
  324. package/src/tests/workflow-step-claims.test.ts +6 -6
  325. package/src/tests/workflow-system-one-decision-providers.test.ts +98 -1
  326. package/src/tests/workflow-system-one-decision.test.ts +2 -1
  327. package/src/tests/workflow-tla-races.test.ts +2 -2
  328. package/src/tools/chat-access.ts +10 -0
  329. package/src/tools/chat-post.ts +31 -11
  330. package/src/tools/chat-reply.ts +32 -10
  331. package/src/tools/memory-search.ts +3 -1
  332. package/src/tools/script-delete.ts +1 -1
  333. package/src/tools/system-one-decide.ts +17 -4
  334. package/src/tools/workflows/create-workflow.ts +5 -3
  335. package/src/types.ts +9 -2
  336. package/src/utils/config-env-export.ts +4 -1
  337. package/src/utils/page-session.ts +133 -20
  338. package/src/utils/secret-scrubber.ts +4 -0
  339. package/src/utils/skills-refresh.ts +83 -43
  340. package/src/utils/transcription.ts +246 -0
  341. package/src/vcs/bitbucket.ts +58 -0
  342. package/src/vcs/index.ts +2 -0
  343. package/src/vcs/types.ts +2 -2
  344. package/src/workflows/approval-resolution.ts +4 -1
  345. package/src/workflows/checkpoint.ts +9 -1
  346. package/src/workflows/constants.ts +3 -0
  347. package/src/workflows/definition.ts +48 -17
  348. package/src/workflows/engine.ts +25 -15
  349. package/src/workflows/executors/foreach.ts +45 -99
  350. package/src/workflows/executors/system-one-decision.ts +28 -7
  351. package/src/workflows/executors/system-one-providers.ts +39 -4
  352. package/src/workflows/foreach-body.ts +146 -0
  353. package/src/workflows/foreach-driver.ts +552 -0
  354. package/src/workflows/foreach-join.ts +206 -7
  355. package/src/workflows/node-timeout.ts +21 -0
  356. package/src/workflows/recovery.ts +68 -3
  357. package/src/workflows/resume.ts +221 -43
  358. package/src/workflows/retry-poller.ts +39 -24
  359. package/src/workflows/step-input.ts +59 -0
  360. package/src/workflows/task-step-routing.ts +114 -56
  361. package/templates/extensions/slack-reply-gate/README.md +24 -22
  362. package/templates/extensions/slack-reply-gate/hooks.ts +146 -95
  363. package/templates/extensions/slack-reply-gate/manifest.json +2 -2
  364. package/templates/skills/apps/SKILL.md +28 -6
  365. package/templates/skills/apps/content.md +28 -6
  366. package/templates/skills/chat-sdk/content.md +6 -2
  367. package/templates/skills/code-quality/content.md +2 -1
  368. package/templates/skills/heartbeat-runbook/content.md +5 -5
  369. package/templates/skills/pages/content.md +6 -4
  370. package/templates/skills/slack-interaction/content.md +5 -0
  371. package/templates/skills/swarm-scripts/SKILL.md +2 -2
  372. package/templates/skills/swarm-scripts/content.md +2 -2
  373. package/templates/skills/work-on-task/SKILL.md +1 -1
  374. package/templates/skills/work-on-task/content.md +1 -1
  375. package/dist/cli-51y09c6p.js +0 -2657
  376. package/dist/cli-yw91rnmw.js +0 -13
  377. package/dist/handlers-0pvee9nw.js +0 -39
  378. package/dist/index-gdh8jrdm.js +0 -43
  379. package/dist/index-hg0x2cdv.js +0 -40
  380. package/dist/index-thm0y6a8.js +0 -41
  381. package/dist/lead-ee8vazz2.js +0 -77
  382. package/dist/worker-16s75hm5.js +0 -77
@@ -5,12 +5,16 @@ import {
5
5
  import {
6
6
  normalizeAssetKey,
7
7
  defaultAssetKey,
8
+ keyPrefixRange,
9
+ SESSION_LEAF_KINDS,
10
+ sessionGroupKey,
8
11
  parseAssetKey,
9
12
  isCanonicalAssetKey,
10
13
  init_key,
11
14
  MODEL_TIERS,
12
15
  ReasoningEffortSchema,
13
16
  parseModelTier,
17
+ TERMINAL_TASK_STATUSES,
14
18
  isTerminalTaskStatus,
15
19
  ProviderNameSchema,
16
20
  PROVIDER_STEER_CAPABILITIES,
@@ -22,7 +26,7 @@ import {
22
26
  VersionableFieldSchema,
23
27
  SessionCostModelBreakdownSchema,
24
28
  init_types
25
- } from "./cli-nc35pxb7.js";
29
+ } from "./cli-rh5smt8t.js";
26
30
  import {
27
31
  generateDefaultClaudeMd2,
28
32
  generateDefaultSoulMd2,
@@ -36,7 +40,7 @@ import {
36
40
  init_identity_field_budget,
37
41
  contentSha256,
38
42
  init_profile_sync
39
- } from "./cli-74c1wpm0.js";
43
+ } from "./cli-gpv60278.js";
40
44
  import {
41
45
  isSlackConfigured,
42
46
  init_config
@@ -105,7 +109,7 @@ import {
105
109
  import {
106
110
  init_package,
107
111
  package_default
108
- } from "./cli-pccfmtb5.js";
112
+ } from "./cli-179xcyky.js";
109
113
  import {
110
114
  realtimeBus,
111
115
  init_bus
@@ -120,7 +124,7 @@ import {
120
124
  registerVolatileSecret,
121
125
  registerSensitiveKeyName,
122
126
  init_secret_scrubber
123
- } from "./cli-xf234ws8.js";
127
+ } from "./cli-n4c8e3s5.js";
124
128
  import {
125
129
  isAlias,
126
130
  parseAlias,
@@ -219,6 +223,21 @@ function azureDevOpsWorkItemContextKey(input) {
219
223
  }
220
224
  return ["task", "trackers", "azure-devops", organization, "workitem", workItemId].join(SEPARATOR);
221
225
  }
226
+ function bitbucketContextKey({
227
+ repoUuid,
228
+ pullRequestId
229
+ }) {
230
+ const rawUuid = typeof repoUuid === "string" ? repoUuid.trim().replace(/^\{|\}$/g, "") : repoUuid;
231
+ const uuid = assertSafePart(rawUuid, "repoUuid").toLowerCase();
232
+ if (/[{}]/.test(uuid)) {
233
+ throw new Error(`context-key: bitbucket "repoUuid" has unbalanced braces (got ${JSON.stringify(repoUuid)})`);
234
+ }
235
+ const id = assertSafePart(pullRequestId, "pullRequestId");
236
+ if (!/^\d+$/.test(id)) {
237
+ throw new Error(`context-key: bitbucket "pullRequestId" must be a positive integer (got ${JSON.stringify(id)})`);
238
+ }
239
+ return ["task", "trackers", "bitbucket", uuid, "pr", id].join(SEPARATOR);
240
+ }
222
241
  function linearContextKey(input) {
223
242
  const issueIdentifier = assertSafePart(input.issueIdentifier, "issueIdentifier");
224
243
  return ["task", "trackers", "linear", issueIdentifier].join(SEPARATOR);
@@ -362,6 +381,21 @@ function parseContextKey(key) {
362
381
  parts: { repositoryId: parts[3], kind: "pr", pullRequestId }
363
382
  };
364
383
  }
384
+ if (subFamily === "bitbucket") {
385
+ if (parts.length !== 6 || parts[4] !== "pr" || !parts[3]) {
386
+ throw new Error(`context-key: malformed bitbucket key: ${JSON.stringify(key)}`);
387
+ }
388
+ const idStr = parts[5];
389
+ const pullRequestId = Number.parseInt(idStr, 10);
390
+ if (!/^\d+$/.test(idStr) || !Number.isFinite(pullRequestId)) {
391
+ throw new Error(`context-key: malformed bitbucket pullRequestId "${idStr}": ${JSON.stringify(key)}`);
392
+ }
393
+ return {
394
+ family: "trackers",
395
+ subFamily: "bitbucket",
396
+ parts: { repoUuid: parts[3], kind: "pr", pullRequestId }
397
+ };
398
+ }
365
399
  if (subFamily === "linear") {
366
400
  if (parts.length !== 4) {
367
401
  throw new Error(`context-key: malformed linear key: ${JSON.stringify(key)}`);
@@ -4837,7 +4871,7 @@ var init_runtime = __esm(() => {
4837
4871
  // src/telemetry-identity.ts
4838
4872
  async function loadUserRole(userId) {
4839
4873
  try {
4840
- const { getUserGrant } = await import("./rbac-roles-ejxx9b35.js");
4874
+ const { getUserGrant } = await import("./rbac-roles-exbg8xb6.js");
4841
4875
  const grant = await getUserGrant(userId);
4842
4876
  const role = grant.grantsAll ? "admin" : "member";
4843
4877
  const user = await getDbClient2().get("SELECT json_extract(metadata, '$.jobFunction') AS jobFunction FROM users WHERE id = ? AND json_valid(metadata)", [userId]);
@@ -5047,8 +5081,10 @@ var init_config_env_export = __esm(() => {
5047
5081
  "JIRA_CLIENT_SECRET",
5048
5082
  "JIRA_WEBHOOK_TOKEN",
5049
5083
  "AZURE_DEVOPS_WEBHOOK_SECRET",
5084
+ "BITBUCKET_WEBHOOK_SECRET",
5050
5085
  "AGENTMAIL_WEBHOOK_SECRET",
5051
- "API_AGENT_FS_API_KEY"
5086
+ "API_AGENT_FS_API_KEY",
5087
+ "TRANSCRIPTION_API_KEY"
5052
5088
  ]);
5053
5089
  ENV_EXPORT_DEFAULT_OFF_KEYS = new Set([
5054
5090
  "KAPSO_WEBHOOK_HMAC_SECRET",
@@ -5582,6 +5618,13 @@ function scrubApprovalVotesJson(approvals) {
5582
5618
  return scrubbed;
5583
5619
  return JSON.stringify(scrubObject(approvals));
5584
5620
  }
5621
+ async function getPendingApprovalsForTasks2(taskIds) {
5622
+ if (!taskIds.length)
5623
+ return [];
5624
+ return getDbClient2().query(`SELECT id, status, sourceTaskId, title FROM approval_requests
5625
+ WHERE sourceTaskId IN (${taskIds.map(() => "?").join(",")}) AND status = 'pending'
5626
+ ORDER BY createdAt, id`, taskIds);
5627
+ }
5585
5628
  var init_approvals = __esm(() => {
5586
5629
  init_secret_scrubber();
5587
5630
  init_date_utils();
@@ -5976,14 +6019,23 @@ async function getTasksByStatus2(status) {
5976
6019
  const rows = await getDbClient2().query("SELECT * FROM agent_tasks WHERE status = ? ORDER BY createdAt DESC", [status]);
5977
6020
  return rows.map(rowToAgentTask);
5978
6021
  }
5979
- async function findTaskByVcs2(vcsRepo, vcsNumber) {
6022
+ async function findTaskByVcs2(vcsRepo, vcsNumber, vcsProvider) {
6023
+ const providerClause = vcsProvider === "github" ? "(vcsProvider = ? OR vcsProvider IS NULL)" : "vcsProvider = ?";
5980
6024
  const row = await getDbClient2().get(`SELECT * FROM agent_tasks
5981
- WHERE vcsRepo = ? AND vcsNumber = ?
6025
+ WHERE vcsRepo = ? AND vcsNumber = ? AND ${providerClause}
5982
6026
  AND status NOT IN ('completed', 'failed', 'cancelled', 'superseded')
5983
6027
  ORDER BY createdAt DESC
5984
- LIMIT 1`, [vcsRepo, vcsNumber]);
6028
+ LIMIT 1`, [vcsRepo, vcsNumber, vcsProvider]);
5985
6029
  return row ? rowToAgentTask(row) : null;
5986
6030
  }
6031
+ async function findActiveTasksByVcs2(vcsRepo, vcsNumber, vcsProvider) {
6032
+ const providerClause = vcsProvider === "github" ? "(vcsProvider = ? OR vcsProvider IS NULL)" : "vcsProvider = ?";
6033
+ const rows = await getDbClient2().query(`SELECT * FROM agent_tasks
6034
+ WHERE vcsRepo = ? AND vcsNumber = ? AND ${providerClause}
6035
+ AND status NOT IN ('completed', 'failed', 'cancelled', 'superseded')
6036
+ ORDER BY createdAt DESC`, [vcsRepo, vcsNumber, vcsProvider]);
6037
+ return rows.map(rowToAgentTask);
6038
+ }
5987
6039
  function readableSessionCondition(userId, taskIdColumn = "agent_tasks.id", opts = {}) {
5988
6040
  const otherOwner = userId ? "r.requestedByUserId IS NOT NULL AND r.requestedByUserId != ?" : "r.requestedByUserId IS NOT NULL";
5989
6041
  const shareMatch = userId ? "(s.userId IS NULL OR s.userId = ?)" : "s.userId IS NULL";
@@ -6531,12 +6583,22 @@ async function getLatestLeadTaskInThread2(channelId, threadTs) {
6531
6583
  LIMIT 1`, [channelId, threadTs]);
6532
6584
  return row ? rowToAgentTask(row) : null;
6533
6585
  }
6534
- async function getAgentWorkingOnContextKey2(contextKey, source) {
6586
+ async function getAgentWorkingOnContextKey2(contextKey, source, endedSince) {
6535
6587
  const taskRow = await getDbClient2().get(`SELECT agentId FROM agent_tasks
6536
6588
  WHERE contextKey = ?
6537
6589
  AND (? IS NULL OR source = ?)
6590
+ AND (? IS NULL
6591
+ OR status NOT IN (${TERMINAL_TASK_STATUSES.map(() => "?").join(", ")})
6592
+ OR finishedAt >= ?)
6538
6593
  ORDER BY createdAt DESC, rowid DESC
6539
- LIMIT 1`, [contextKey, source ?? null, source ?? null]);
6594
+ LIMIT 1`, [
6595
+ contextKey,
6596
+ source ?? null,
6597
+ source ?? null,
6598
+ endedSince ?? null,
6599
+ ...TERMINAL_TASK_STATUSES,
6600
+ endedSince ?? null
6601
+ ]);
6540
6602
  if (taskRow?.agentId)
6541
6603
  return getAgentById2(taskRow.agentId);
6542
6604
  return null;
@@ -6823,6 +6885,385 @@ function sessionViewerCondition(viewer) {
6823
6885
  }
6824
6886
  var init_session_visibility = () => {};
6825
6887
 
6888
+ // src/be/db/session-moves.ts
6889
+ function configureSessionMoveDependencies(value) {
6890
+ insertAssetKeyHistory = value.insertAssetKeyHistory;
6891
+ auditAssetKeys2 = value.auditAssetKeys;
6892
+ }
6893
+ async function assertAssetKeyMovesAllowed2() {
6894
+ const audit = await getDbClient2().transaction(async () => auditAssetKeys2(), {
6895
+ readOnly: true
6896
+ });
6897
+ if (!audit.ok) {
6898
+ throw new AssetKeyMovesBlockedError2;
6899
+ }
6900
+ }
6901
+ async function moveTaskChainKeyInTx2(rootId, taskIds, key, changedBy) {
6902
+ if (!isInTransaction()) {
6903
+ throw new Error("moveTaskChainKeyInTx requires an active transaction");
6904
+ }
6905
+ const client = getDbClient2();
6906
+ const now = new Date().toISOString();
6907
+ const root = await getTaskById2(rootId);
6908
+ if (!root)
6909
+ return false;
6910
+ const tasks = [root];
6911
+ for (const id of taskIds) {
6912
+ const task = id === root.id ? null : await getTaskById2(id);
6913
+ if (task)
6914
+ tasks.push(task);
6915
+ }
6916
+ const movedTaskIds = [];
6917
+ for (const task of tasks) {
6918
+ if (task.key === key)
6919
+ continue;
6920
+ const mappedFiles = await client.query(`SELECT DISTINCT m.id, m."key" AS key
6921
+ FROM asset_key_mappings m
6922
+ JOIN task_attachments a
6923
+ ON m.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
6924
+ AND m.provider_org_id = COALESCE(a.agent_fs_org_id, '')
6925
+ AND m.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
6926
+ AND m.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
6927
+ WHERE a.task_id = ?
6928
+ AND (m.source_entity_type IS NOT 'task-attachment'
6929
+ OR m.source_entity_id IN (SELECT id FROM task_attachments WHERE task_id = ?))`, [task.id, task.id]);
6930
+ await client.run('UPDATE agent_tasks SET "key" = ?, updated_by = ? WHERE id = ?', [
6931
+ key,
6932
+ changedBy ?? null,
6933
+ task.id
6934
+ ]);
6935
+ for (const mapping of mappedFiles) {
6936
+ if (mapping.key === key)
6937
+ continue;
6938
+ await client.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, changedBy ?? null, mapping.id]);
6939
+ await insertAssetKeyHistory({
6940
+ entityType: "file",
6941
+ entityId: mapping.id,
6942
+ previousKey: mapping.key,
6943
+ newKey: key,
6944
+ changedBy
6945
+ });
6946
+ }
6947
+ await insertAssetKeyHistory({
6948
+ entityType: "task",
6949
+ entityId: task.id,
6950
+ previousKey: task.key,
6951
+ newKey: key,
6952
+ changedBy
6953
+ });
6954
+ movedTaskIds.push(task.id);
6955
+ }
6956
+ return movedTaskIds;
6957
+ }
6958
+ async function moveSessionChains(input) {
6959
+ const moved = [];
6960
+ for (const move of input.moves) {
6961
+ const taskIds = await getDbClient2().transaction(async () => moveTaskChainKeyInTx2(move.rootId, move.taskIds, move.key, input.changedBy));
6962
+ if (taskIds && taskIds.length > 0)
6963
+ moved.push(move.rootId);
6964
+ }
6965
+ return moved;
6966
+ }
6967
+ async function listPrefixRoots(input) {
6968
+ const { lo, hi } = keyPrefixRange(input.from);
6969
+ return getDbClient2().query(`SELECT r.id, r."key" FROM agent_tasks r
6970
+ WHERE r.parentTaskId IS NULL AND r."key" >= ? AND r."key" < ?
6971
+ ${input.userId !== undefined ? "AND r.requestedByUserId = ?" : ""}
6972
+ ORDER BY r.id LIMIT ? OFFSET ?`, [lo, hi, ...input.userId !== undefined ? [input.userId] : [], input.limit, input.offset ?? 0]);
6973
+ }
6974
+ async function listSharedPrefixRoots(input) {
6975
+ const { lo, hi } = keyPrefixRange(input.from);
6976
+ const visibility = sessionViewerCondition({ userId: input.userId, scope: "shared" });
6977
+ return getDbClient2().query(`SELECT r.id FROM agent_tasks r
6978
+ WHERE r.parentTaskId IS NULL AND r."key" >= ? AND r."key" < ?
6979
+ AND ${visibility.sql} ORDER BY r.id`, [lo, hi, ...visibility.params]);
6980
+ }
6981
+ var insertAssetKeyHistory, auditAssetKeys2, AssetKeyMovesBlockedError2;
6982
+ var init_session_moves = __esm(() => {
6983
+ init_key();
6984
+ init_db_client();
6985
+ init_runtime();
6986
+ init_session_visibility();
6987
+ init_read();
6988
+ AssetKeyMovesBlockedError2 = class AssetKeyMovesBlockedError2 extends Error {
6989
+ constructor() {
6990
+ super("Asset namespace moves are blocked until structural errors, unknown personal users, or provider mapping drift are repaired.");
6991
+ this.name = "AssetKeyMovesBlockedError";
6992
+ }
6993
+ };
6994
+ });
6995
+
6996
+ // src/be/db/session-tree.ts
6997
+ function sessionReadStateSql(now = new Date().toISOString()) {
6998
+ return {
6999
+ sql: `CASE
7000
+ WHEN s.id IS NULL THEN CASE WHEN a.lastActivityAt > ? THEN 'unread' ELSE 'read' END
7001
+ WHEN s.status = 'dismissed' THEN 'done'
7002
+ WHEN s.status = 'done' THEN CASE WHEN a.lastActivityAt > s.lastUpdatedAt THEN 'unread' ELSE 'done' END
7003
+ WHEN s.status = 'snoozed' THEN CASE WHEN s.snoozeUntil > ? THEN 'later' ELSE 'unread' END
7004
+ WHEN a.lastActivityAt > COALESCE(s.lastReadAt, s.lastUpdatedAt) THEN 'unread'
7005
+ ELSE 'read'
7006
+ END`,
7007
+ params: [new Date(Date.parse(now) - 7 * 86400000).toISOString(), now]
7008
+ };
7009
+ }
7010
+ function groupCondition(group) {
7011
+ const { lo, hi } = keyPrefixRange(group);
7012
+ const start = [...lo].length + 1;
7013
+ return {
7014
+ sql: `(r."key" >= ? AND r."key" < ? AND (r."key" = ? OR (
7015
+ instr(substr(r."key", ?, length(r."key") - ?), '/') = 0 AND
7016
+ (${SESSION_LEAF_KINDS.map(() => 'substr(r."key", ?) GLOB ?').join(" OR ")})
7017
+ )))`,
7018
+ params: [
7019
+ lo,
7020
+ hi,
7021
+ lo,
7022
+ start,
7023
+ start,
7024
+ ...SESSION_LEAF_KINDS.flatMap((kind) => [start, `${kind}:?*/`])
7025
+ ]
7026
+ };
7027
+ }
7028
+ function sessionRootFilter(opts = {}) {
7029
+ const conditions = ["r.parentTaskId IS NULL"];
7030
+ const params = [];
7031
+ const add = (fragment) => {
7032
+ conditions.push(fragment.sql);
7033
+ params.push(...fragment.params);
7034
+ };
7035
+ if (opts.rootId)
7036
+ add({ sql: "r.id = ?", params: [opts.rootId] });
7037
+ const sources = opts.source?.filter(Boolean) ?? [];
7038
+ if (sources.length)
7039
+ add({ sql: `r.source IN (${sources.map(() => "?").join(",")})`, params: sources });
7040
+ if (opts.q?.trim()) {
7041
+ const like = `%${opts.q.trim().toLowerCase()}%`;
7042
+ add({
7043
+ sql: "(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)",
7044
+ params: [like, like]
7045
+ });
7046
+ }
7047
+ if (opts.requestedByUserId?.trim())
7048
+ add({ sql: "r.requestedByUserId = ?", params: [opts.requestedByUserId.trim()] });
7049
+ if (opts.contextKeyPrefix)
7050
+ add({
7051
+ sql: "r.contextKey LIKE ? ESCAPE '\\'",
7052
+ params: [literalPrefixPattern2(opts.contextKeyPrefix)]
7053
+ });
7054
+ if (opts.viewer) {
7055
+ add(sessionViewerCondition(opts.viewer));
7056
+ if (opts.tree)
7057
+ conditions.push("r.requestedByUserId IS NOT NULL");
7058
+ }
7059
+ if (opts.keyPrefix) {
7060
+ const { lo, hi } = keyPrefixRange(opts.keyPrefix);
7061
+ add({ sql: 'r."key" >= ? AND r."key" < ?', params: [lo, hi] });
7062
+ }
7063
+ if (opts.groupKey)
7064
+ add(groupCondition(normalizeAssetKey(opts.groupKey)));
7065
+ if (opts.noGroup) {
7066
+ const groups = [groupCondition("shared/")];
7067
+ if (opts.viewer?.userId)
7068
+ groups.push(groupCondition(`personal/${opts.viewer.userId}/`));
7069
+ add({
7070
+ sql: `(${groups.map((g) => g.sql).join(" OR ")})`,
7071
+ params: groups.flatMap((g) => g.params)
7072
+ });
7073
+ }
7074
+ if (opts.triage === "later" || opts.triage === "done") {
7075
+ add({
7076
+ sql: `r.id IN (SELECT itemId FROM inbox_item_state
7077
+ WHERE userId = ? AND itemType = 'to_read' AND status IN (${opts.triage === "later" ? "'snoozed'" : "'done','dismissed'"}))`,
7078
+ params: [opts.viewer?.userId ?? null]
7079
+ });
7080
+ }
7081
+ return { sql: conditions.join(" AND "), params };
7082
+ }
7083
+ function excludesTriaged(opts) {
7084
+ return !!(opts.viewer?.userId && (opts.groupKey || opts.keyPrefix || opts.noGroup));
7085
+ }
7086
+ function hasSessionChainFilter(opts) {
7087
+ return !!(opts.triage || opts.status || opts.withUserId || excludesTriaged(opts));
7088
+ }
7089
+ function sessionSummaryQuery(opts = {}) {
7090
+ const root = sessionRootFilter(opts);
7091
+ const read = opts.viewer?.userId ? sessionReadStateSql(opts.now) : { sql: "NULL", params: [] };
7092
+ const params = [...root.params];
7093
+ if (opts.withUserId)
7094
+ params.push(opts.withUserId);
7095
+ params.push(...read.params, opts.viewer?.userId ?? null);
7096
+ const filters = [];
7097
+ if (opts.triage === "unread")
7098
+ filters.push("readState = 'unread'");
7099
+ else if (opts.triage === "later" || opts.triage === "done") {
7100
+ filters.push("readState = ?");
7101
+ params.push(opts.triage);
7102
+ } else if (opts.triage === "inbox" || excludesTriaged(opts)) {
7103
+ filters.push("(readState IS NULL OR readState IN ('read','unread'))");
7104
+ }
7105
+ if (opts.status === "running")
7106
+ filters.push(runningSql);
7107
+ if (opts.status === "failed")
7108
+ filters.push("latestStatus = 'failed'");
7109
+ if (opts.status === "needs")
7110
+ filters.push("needsYou = 1");
7111
+ if (opts.withUserId) {
7112
+ filters.push(`(a.withUser > 0 OR EXISTS (SELECT 1 FROM session_shares sh
7113
+ WHERE sh.rootTaskId = a.root_id AND sh.revokedAt IS NULL AND sh.userId = ?))`);
7114
+ params.push(opts.withUserId);
7115
+ }
7116
+ return {
7117
+ sql: `WITH RECURSIVE chain(root_id, id, lastUpdatedAt, status, requestedByUserId) AS (
7118
+ SELECT r.id, r.id, r.lastUpdatedAt, r.status, r.requestedByUserId
7119
+ FROM agent_tasks r WHERE ${root.sql}
7120
+ UNION ALL
7121
+ SELECT c.root_id, t.id, t.lastUpdatedAt, t.status, t.requestedByUserId
7122
+ FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
7123
+ ), agg AS (
7124
+ SELECT root_id, COUNT(*) AS chainCount,
7125
+ status AS latestStatus, MAX(lastUpdatedAt) AS lastActivityAt,
7126
+ ${opts.withUserId ? "SUM(requestedByUserId = ?) AS withUser," : ""}
7127
+ SUM(EXISTS (SELECT 1 FROM approval_requests ar
7128
+ WHERE ar.sourceTaskId = chain.id AND ar.status = 'pending')) AS pendingApproval
7129
+ FROM chain GROUP BY root_id
7130
+ ), state AS (
7131
+ SELECT a.*, ${read.sql} AS readState, s.snoozeUntil
7132
+ FROM agg a LEFT JOIN inbox_item_state s
7133
+ ON s.userId = ? AND s.itemType = 'to_read' AND s.itemId = a.root_id
7134
+ ), summary AS (
7135
+ SELECT *, (COALESCE(readState = 'unread' AND latestStatus = 'failed', 0) OR pendingApproval) AS needsYou
7136
+ FROM state
7137
+ )
7138
+ SELECT a.* FROM summary a ${filters.length ? `WHERE ${filters.join(" AND ")}` : ""}`,
7139
+ params
7140
+ };
7141
+ }
7142
+ async function getSessionReadState(rootId, userId, now) {
7143
+ const query = sessionSummaryQuery({ rootId, viewer: { userId, scope: "all" }, now });
7144
+ const row = await getDbClient2().get(`SELECT readState, lastActivityAt FROM (${query.sql})`, query.params);
7145
+ return row?.readState ? { readState: row.readState, lastActivityAt: row.lastActivityAt } : null;
7146
+ }
7147
+ function sessionCountQuery(opts = {}) {
7148
+ const chain = hasSessionChainFilter(opts);
7149
+ const query = chain ? sessionSummaryQuery(opts) : sessionRootFilter(opts);
7150
+ return {
7151
+ sql: chain ? `SELECT COUNT(*) AS count FROM (${query.sql})` : `SELECT COUNT(*) AS count FROM agent_tasks r WHERE ${query.sql}`,
7152
+ params: query.params
7153
+ };
7154
+ }
7155
+ async function sessionPageFields(roots) {
7156
+ const result = new Map;
7157
+ if (!roots.length)
7158
+ return result;
7159
+ const ids = roots.map((r) => r.id);
7160
+ const [tasks, shares] = await Promise.all([
7161
+ getDbClient2().query(`WITH RECURSIVE chain(root_id, id) AS (
7162
+ SELECT id, id FROM agent_tasks WHERE id IN (${ids.map(() => "?").join(",")})
7163
+ UNION ALL SELECT c.root_id, t.id FROM chain c JOIN agent_tasks t ON t.parentTaskId = c.id
7164
+ ) SELECT c.root_id, t.requestedByUserId AS id, u.name,
7165
+ CASE WHEN t.source = 'system' AND t.taskType = 'follow-up' THEN NULL ELSE NULLIF(trim(substr(t.output, 1, 200)), '') END AS preview
7166
+ FROM chain c CROSS JOIN agent_tasks t ON t.id = c.id
7167
+ LEFT JOIN users u ON u.id = t.requestedByUserId
7168
+ ORDER BY t.lastUpdatedAt DESC, t.createdAt DESC, t.id DESC`, ids),
7169
+ getDbClient2().query(`SELECT sh.rootTaskId AS root_id, sh.userId AS id, u.name, sh.access FROM session_shares sh
7170
+ LEFT JOIN users u ON u.id = sh.userId
7171
+ WHERE sh.revokedAt IS NULL AND sh.rootTaskId IN (${ids.map(() => "?").join(",")})
7172
+ ORDER BY sh.createdAt, sh.id`, ids)
7173
+ ]);
7174
+ const people = new Map;
7175
+ for (const root of roots) {
7176
+ result.set(root.id, { shared: false, preview: null, shares: [] });
7177
+ people.set(root.id, new Map);
7178
+ }
7179
+ for (const root of roots) {
7180
+ if (!root.requestedByUserId)
7181
+ continue;
7182
+ people.get(root.id).set(root.requestedByUserId, root.requestedByUserId);
7183
+ }
7184
+ for (const task of tasks) {
7185
+ if (task.id)
7186
+ people.get(task.root_id).set(task.id, task.name ?? task.id);
7187
+ const fields = result.get(task.root_id);
7188
+ if (fields.preview === null && task.preview !== null)
7189
+ fields.preview = task.preview;
7190
+ }
7191
+ for (const share of shares) {
7192
+ const fields = result.get(share.root_id);
7193
+ fields.shared = true;
7194
+ fields.shares.push({ userId: share.id, name: share.name, access: share.access });
7195
+ if (share.id)
7196
+ people.get(share.root_id).set(share.id, share.name ?? share.id);
7197
+ }
7198
+ for (const [id, members] of people) {
7199
+ Object.assign(result.get(id), {
7200
+ people: [...members].slice(0, 8).map(([id, name]) => ({ id, name })),
7201
+ peopleCount: members.size
7202
+ });
7203
+ }
7204
+ return result;
7205
+ }
7206
+ async function getSessionTree(actor, now) {
7207
+ const query = sessionSummaryQuery({
7208
+ ...actor.kind === "user" ? { viewer: { userId: actor.userId, scope: "all" } } : {},
7209
+ now,
7210
+ tree: true
7211
+ });
7212
+ const rows = await getDbClient2().query(`SELECT r."key", a.lastActivityAt, a.latestStatus, a.readState, a.needsYou
7213
+ FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id`, query.params);
7214
+ const counts = () => ({ total: 0, unread: 0, running: 0, needsYou: 0 });
7215
+ const result = {
7216
+ groups: [],
7217
+ inbox: counts(),
7218
+ later: counts(),
7219
+ done: counts(),
7220
+ noGroup: counts()
7221
+ };
7222
+ const groups = new Map;
7223
+ const add = (section, row) => {
7224
+ section.total++;
7225
+ if (row.readState === "unread")
7226
+ section.unread++;
7227
+ if (!isTerminalTaskStatus(row.latestStatus))
7228
+ section.running++;
7229
+ if (row.needsYou)
7230
+ section.needsYou++;
7231
+ };
7232
+ for (const row of rows) {
7233
+ const key = sessionGroupKey(row.key);
7234
+ const noGroup = key === "shared/" || actor.kind === "user" && key === `personal/${actor.userId}/`;
7235
+ let group;
7236
+ if (!noGroup) {
7237
+ group = groups.get(key);
7238
+ if (!group) {
7239
+ group = { key, ...counts(), lastActivityAt: row.lastActivityAt };
7240
+ groups.set(key, group);
7241
+ }
7242
+ if (row.lastActivityAt > group.lastActivityAt)
7243
+ group.lastActivityAt = row.lastActivityAt;
7244
+ }
7245
+ if (row.readState === "later" || row.readState === "done")
7246
+ add(result[row.readState], row);
7247
+ else {
7248
+ add(result.inbox, row);
7249
+ if (noGroup)
7250
+ add(result.noGroup, row);
7251
+ else if (group)
7252
+ add(group, row);
7253
+ }
7254
+ }
7255
+ result.groups = [...groups.values()].sort((a, b) => a.key.localeCompare(b.key));
7256
+ return result;
7257
+ }
7258
+ var runningSql;
7259
+ var init_session_tree = __esm(() => {
7260
+ init_key();
7261
+ init_types();
7262
+ init_db3();
7263
+ init_session_visibility();
7264
+ runningSql = `latestStatus NOT IN (${TERMINAL_TASK_STATUSES.map((s) => `'${s}'`).join(",")})`;
7265
+ });
7266
+
6826
7267
  // src/be/db/tasks/human-free.ts
6827
7268
  function humanFreeCase(parentFlag) {
6828
7269
  return `CASE
@@ -7338,7 +7779,7 @@ async function completeTask2(id, output, options) {
7338
7779
  });
7339
7780
  } catch {}
7340
7781
  getDbClient2().afterCommit(() => {
7341
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
7782
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7342
7783
  workflowEventBus.emit("task.completed", {
7343
7784
  taskId: id,
7344
7785
  output: scrubbedOutput,
@@ -7393,7 +7834,7 @@ async function failTask2(id, reason, opts = {}) {
7393
7834
  });
7394
7835
  } catch {}
7395
7836
  getDbClient2().afterCommit(() => {
7396
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
7837
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7397
7838
  workflowEventBus.emit("task.failed", {
7398
7839
  taskId: id,
7399
7840
  failureReason: scrubbedReason,
@@ -7475,7 +7916,7 @@ async function cancelTask2(id, reason) {
7475
7916
  });
7476
7917
  } catch {}
7477
7918
  getDbClient2().afterCommit(() => {
7478
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
7919
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7479
7920
  workflowEventBus.emit("task.cancelled", {
7480
7921
  taskId: id,
7481
7922
  agentId: row.agentId,
@@ -7532,7 +7973,7 @@ async function supersedeTask2(id, args) {
7532
7973
  });
7533
7974
  } catch {}
7534
7975
  getDbClient2().afterCommit(() => {
7535
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
7976
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7536
7977
  workflowEventBus.emit("task.superseded", {
7537
7978
  taskId: id,
7538
7979
  reason: args.reason,
@@ -7746,7 +8187,7 @@ async function updateTaskProgress2(id, progress) {
7746
8187
  });
7747
8188
  } catch {}
7748
8189
  getDbClient2().afterCommit(() => {
7749
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
8190
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7750
8191
  workflowEventBus.emit("task.progress", {
7751
8192
  taskId: id,
7752
8193
  progress: scrubbedProgress,
@@ -7817,14 +8258,70 @@ function emitChildRunFinished(childRunId, parentStepId, status) {
7817
8258
  }
7818
8259
  function emitAfterCommit(childRunId, parentStepId) {
7819
8260
  getDbClient2().afterCommit(() => {
7820
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
8261
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
7821
8262
  workflowEventBus.emit("workflow.child.finished", { childRunId, parentStepId });
7822
8263
  }).catch((err) => console.error("[db] workflow.child.finished event not emitted:", scrubSecrets(err instanceof Error ? err.message : String(err))));
7823
8264
  });
7824
8265
  }
8266
+ async function createForeachChildSteps(runId, parentNodeId, rows) {
8267
+ if (rows.length === 0)
8268
+ return 0;
8269
+ const prefix = `${parentNodeId}#`;
8270
+ return getDbClient2().transaction(async (tx) => {
8271
+ const existing = await tx.query("SELECT DISTINCT nodeId FROM workflow_run_steps WHERE runId = ? AND substr(nodeId, 1, ?) = ?", [runId, prefix.length, prefix]);
8272
+ const existingNodeIds = new Set(existing.map((row) => row.nodeId));
8273
+ const now = new Date().toISOString();
8274
+ let created = 0;
8275
+ for (const row of rows) {
8276
+ if (existingNodeIds.has(row.nodeId))
8277
+ continue;
8278
+ await tx.run(`INSERT INTO workflow_run_steps (id, runId, nodeId, nodeType, status, startedAt, input, idempotencyKey)
8279
+ VALUES (?, ?, ?, ?, 'pending', ?, ?, ?)`, [
8280
+ row.id,
8281
+ runId,
8282
+ row.nodeId,
8283
+ row.nodeType,
8284
+ now,
8285
+ scrubJsonValue(row.input),
8286
+ row.idempotencyKey
8287
+ ]);
8288
+ existingNodeIds.add(row.nodeId);
8289
+ created++;
8290
+ }
8291
+ return created;
8292
+ });
8293
+ }
8294
+ async function createForeachAttemptSteps(runId, rows) {
8295
+ if (rows.length === 0)
8296
+ return 0;
8297
+ return getDbClient2().transaction(async (tx) => {
8298
+ const now = new Date().toISOString();
8299
+ let created = 0;
8300
+ for (const row of rows) {
8301
+ const count = await tx.get("SELECT COUNT(*) AS n FROM workflow_run_steps WHERE runId = ? AND nodeId = ?", [runId, row.nodeId]);
8302
+ const attempt = count?.n ?? 0;
8303
+ const inserted = await tx.get(`INSERT INTO workflow_run_steps (id, runId, nodeId, nodeType, status, startedAt, input, idempotencyKey)
8304
+ VALUES (?, ?, ?, ?, 'pending', ?, ?, ?)
8305
+ ON CONFLICT(idempotencyKey) DO NOTHING
8306
+ RETURNING id`, [
8307
+ crypto.randomUUID(),
8308
+ runId,
8309
+ row.nodeId,
8310
+ row.nodeType,
8311
+ now,
8312
+ scrubJsonValue({ itemKey: row.itemKey, index: row.index, attempt }),
8313
+ `${runId}:${row.nodeId}:${attempt}`
8314
+ ]);
8315
+ if (inserted)
8316
+ created++;
8317
+ }
8318
+ return created;
8319
+ });
8320
+ }
7825
8321
  var TERMINAL_STATUSES;
7826
8322
  var init_workflow_runs = __esm(() => {
7827
8323
  init_secret_scrubber();
8324
+ init_scrub_json();
7828
8325
  init_runtime();
7829
8326
  TERMINAL_STATUSES = new Set([
7830
8327
  "completed",
@@ -8345,7 +8842,7 @@ function validateConfigValue(key, value) {
8345
8842
  function validateExportToEnv(key, exportToEnv) {
8346
8843
  return exportToEnv === true && isEnvExportRestrictedKey(key) ? envExportRestrictedError(key) : null;
8347
8844
  }
8348
- var TEAMS_SDK_ENV_KEYS, RESERVED_KEYS, API_ONLY_CONFIG_KEYS, INTERNAL_CONFIG_KEYS, BOOLEAN_LITERALS, MAX_DB_RETENTION_DAYS = 1e6, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
8845
+ var TEAMS_SDK_ENV_KEYS, RESERVED_KEYS, API_ONLY_CONFIG_KEYS, INTERNAL_CONFIG_KEYS, BOOLEAN_LITERALS, MAX_DB_RETENTION_DAYS = 1e6, DB_RETENTION_TUNING_BOUNDS, APPS_JSON_COLUMN_MAX_BYTES_BOUNDS, CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS, SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
8349
8846
  var init_swarm_config_guard = __esm(() => {
8350
8847
  init_schema();
8351
8848
  init_telemetry_ranking();
@@ -8375,7 +8872,11 @@ var init_swarm_config_guard = __esm(() => {
8375
8872
  "EXTENSION_ALLOW_LEAD_ACTIVATION",
8376
8873
  "CHAT_SDK_API_URL_OVERRIDES"
8377
8874
  ]);
8378
- API_ONLY_CONFIG_KEYS = new Set(["API_AGENT_FS_API_KEY", "SLACK_SIGNING_SECRET"]);
8875
+ API_ONLY_CONFIG_KEYS = new Set([
8876
+ "API_AGENT_FS_API_KEY",
8877
+ "SLACK_SIGNING_SECRET",
8878
+ "TRANSCRIPTION_API_KEY"
8879
+ ]);
8379
8880
  INTERNAL_CONFIG_KEYS = new Set([
8380
8881
  "onboarding_state",
8381
8882
  "runtime_owner_id",
@@ -8389,6 +8890,13 @@ var init_swarm_config_guard = __esm(() => {
8389
8890
  };
8390
8891
  APPS_JSON_COLUMN_MAX_BYTES_BOUNDS = { min: 1024, max: 16777216 };
8391
8892
  CODEX_OAUTH_KEEP_WARM_MAX_AGE_HOURS_BOUNDS = { min: 1, max: 216 };
8893
+ SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS = [
8894
+ "typesafe",
8895
+ "openrouter",
8896
+ "laya",
8897
+ "openai",
8898
+ "cloudflare"
8899
+ ];
8392
8900
  validateControllerTokenTtlDays = boundedIntegerValidators(["RUNTIME_CONTROLLER_TOKEN_TTL_DAYS"], 1, 3650).RUNTIME_CONTROLLER_TOKEN_TTL_DAYS;
8393
8901
  validateControllerGraceSec = boundedIntegerValidators(["RUNTIME_CONTROLLER_GRACE_SEC"], 0, 86400).RUNTIME_CONTROLLER_GRACE_SEC;
8394
8902
  VALIDATED_KEYS = {
@@ -8468,11 +8976,13 @@ var init_swarm_config_guard = __esm(() => {
8468
8976
  },
8469
8977
  ...enumValidator("CLAUDE_TRANSPORT", ["cli", "sdk"]),
8470
8978
  ...enumValidator("SCRIPT_EXECUTOR", ["native", "quickjs"]),
8979
+ ...enumValidator("TRANSCRIPTION_PROVIDER", ["openai", "elevenlabs", "groq"]),
8471
8980
  SCRIPT_QUICKJS_POOL_SIZE: validateQuickJSPoolSize,
8472
8981
  ...booleanValidators(["SCRIPT_EGRESS_ALLOW_PRIVATE"]),
8473
8982
  SCRIPT_EGRESS_ALLOWLIST: (value) => typeof value === "string" ? validateEgressAllowlist(value) : "Invalid SCRIPT_EGRESS_ALLOWLIST",
8474
8983
  ...enumValidator("MODEL_WINDOW_EXHAUSTED_POLICY", ["fail", "fallback"]),
8475
8984
  ...enumValidator("HEARTBEAT_CHECKLIST_GATE_MODE", ["shadow", "enforce"]),
8985
+ ...enumValidator("SYSTEM_ONE_DEFAULT_PROVIDER", [...SYSTEM_ONE_DEFAULT_PROVIDER_OPTIONS]),
8476
8986
  CODEX_CREDITS_EXHAUSTED_COOLDOWN_MS: (value) => {
8477
8987
  const str = String(value).trim();
8478
8988
  if (!/^\d+$/.test(str) || Number(str) <= 0) {
@@ -8534,6 +9044,7 @@ var init_swarm_config_guard = __esm(() => {
8534
9044
  "GITHUB_DISABLE",
8535
9045
  "GITLAB_DISABLE",
8536
9046
  "AZURE_DEVOPS_DISABLE",
9047
+ "BITBUCKET_DISABLE",
8537
9048
  "LINEAR_DISABLE",
8538
9049
  "JIRA_DISABLE",
8539
9050
  "AGENTMAIL_DISABLE",
@@ -8606,6 +9117,7 @@ var init_swarm_config_guard = __esm(() => {
8606
9117
  ...integerValidators(["APPROVAL_REQUEST_AUTO_CANCELLATION_DAYS"], 0),
8607
9118
  ...boundedIntegerValidators(["API_DRAIN_MAX_MS"], 0, API_DRAIN_MAX_MS_LIMIT),
8608
9119
  ...boundedIntegerValidators(["CHAT_SDK_BUFFER_MS"], 1, 600000),
9120
+ ...boundedIntegerValidators(["CHAT_SDK_OWNER_WINDOW_MIN"], 0, 1440),
8609
9121
  ...boundedIntegerValidators(["CONTEXT_PREAMBLE_MAX_TOKENS"], 100, 20000),
8610
9122
  MEMORY_MIN_SIMILARITY: (value) => validateFloatRange("MEMORY_MIN_SIMILARITY", value, 0, 1, "between 0 and 1 inclusive"),
8611
9123
  MEMORY_ACCESS_BOOST_MAX: (value) => validateFloatRange("MEMORY_ACCESS_BOOST_MAX", value, 1, Number.POSITIVE_INFINITY, "a number >= 1")
@@ -17235,6 +17747,15 @@ var exports_openai_embedding = {};
17235
17747
  __export(exports_openai_embedding, {
17236
17748
  OpenAIEmbeddingProvider: () => OpenAIEmbeddingProvider
17237
17749
  });
17750
+ function cleanInput(text) {
17751
+ return text.replace(/[\n\r]/g, " ").trim().slice(0, MAX_EMBEDDING_INPUT_CHARS);
17752
+ }
17753
+ function isInputRejection(err) {
17754
+ return err instanceof OpenAI2.APIError && err.status === 400;
17755
+ }
17756
+ function isInputTooLong(err) {
17757
+ return isInputRejection(err) && /maximum (context|input) length/i.test(err.message ?? "");
17758
+ }
17238
17759
 
17239
17760
  class OpenAIEmbeddingProvider {
17240
17761
  name;
@@ -17264,73 +17785,98 @@ class OpenAIEmbeddingProvider {
17264
17785
  }
17265
17786
  return this.client;
17266
17787
  }
17788
+ async request(client, input) {
17789
+ return client.embeddings.create({
17790
+ model: this.model,
17791
+ input,
17792
+ dimensions: this.dimensions,
17793
+ encoding_format: "float"
17794
+ });
17795
+ }
17796
+ toVector(values, label) {
17797
+ if (!values)
17798
+ return null;
17799
+ if (values.length !== this.dimensions) {
17800
+ console.error(`[memory] ${label} dimension mismatch: expected=${this.dimensions} got=${values.length}. Provider may not support the 'dimensions' parameter.`);
17801
+ return null;
17802
+ }
17803
+ return new Float32Array(values);
17804
+ }
17805
+ async embedOne(client, cleaned) {
17806
+ let input = cleaned;
17807
+ while (true) {
17808
+ try {
17809
+ const response = await this.request(client, input);
17810
+ return this.toVector(response.data[0]?.embedding, "Embedding");
17811
+ } catch (err) {
17812
+ const message = err.message;
17813
+ if (isInputTooLong(err) && input.length > MIN_EMBEDDING_INPUT_CHARS) {
17814
+ const next = Math.max(MIN_EMBEDDING_INPUT_CHARS, Math.floor(input.length / 2));
17815
+ console.warn(`[memory] Embedding input over the token cap at ${input.length} chars, retrying at ${next}: ${message}`);
17816
+ input = input.slice(0, next);
17817
+ continue;
17818
+ }
17819
+ console.error("[memory] Embedding failed:", message);
17820
+ return null;
17821
+ }
17822
+ }
17823
+ }
17267
17824
  async embed(text) {
17268
17825
  const client = this.getClient();
17269
17826
  if (!client)
17270
17827
  return null;
17271
- try {
17272
- const cleaned = text.replace(/[\n\r]/g, " ").trim();
17273
- if (!cleaned)
17274
- return null;
17275
- const response = await client.embeddings.create({
17276
- model: this.model,
17277
- input: cleaned,
17278
- dimensions: this.dimensions,
17279
- encoding_format: "float"
17280
- });
17281
- const values = response.data[0]?.embedding;
17282
- if (!values)
17283
- return null;
17284
- if (values.length !== this.dimensions) {
17285
- console.error(`[memory] Embedding dimension mismatch: expected=${this.dimensions} got=${values.length}. Provider may not support the 'dimensions' parameter.`);
17286
- return null;
17287
- }
17288
- return new Float32Array(values);
17289
- } catch (err) {
17290
- console.error("[memory] Embedding failed:", err.message);
17828
+ const cleaned = cleanInput(text);
17829
+ if (!cleaned)
17291
17830
  return null;
17292
- }
17831
+ return this.embedOne(client, cleaned);
17293
17832
  }
17294
17833
  async embedBatch(texts) {
17834
+ const results = texts.map(() => null);
17295
17835
  const client = this.getClient();
17296
17836
  if (!client)
17297
- return texts.map(() => null);
17298
- const cleaned = texts.map((t) => t.replace(/[\n\r]/g, " ").trim());
17299
- const nonEmptyIndices = [];
17300
- const nonEmptyTexts = [];
17837
+ return results;
17838
+ const cleaned = texts.map(cleanInput);
17839
+ const groups = [];
17840
+ let group = [];
17841
+ let groupChars = 0;
17301
17842
  for (let i = 0;i < cleaned.length; i++) {
17302
- if (cleaned[i]) {
17303
- nonEmptyIndices.push(i);
17304
- nonEmptyTexts.push(cleaned[i]);
17843
+ const length = cleaned[i].length;
17844
+ if (length === 0)
17845
+ continue;
17846
+ if (group.length > 0 && groupChars + length > MAX_BATCH_REQUEST_CHARS) {
17847
+ groups.push(group);
17848
+ group = [];
17849
+ groupChars = 0;
17305
17850
  }
17851
+ group.push(i);
17852
+ groupChars += length;
17306
17853
  }
17307
- if (nonEmptyTexts.length === 0)
17308
- return texts.map(() => null);
17309
- try {
17310
- const response = await client.embeddings.create({
17311
- model: this.model,
17312
- input: nonEmptyTexts,
17313
- dimensions: this.dimensions,
17314
- encoding_format: "float"
17315
- });
17316
- const results = texts.map(() => null);
17317
- for (const item of response.data) {
17318
- const originalIndex = nonEmptyIndices[item.index];
17319
- if (originalIndex !== undefined && item.embedding) {
17320
- if (item.embedding.length !== this.dimensions) {
17321
- console.error(`[memory] Batch embedding dimension mismatch: expected=${this.dimensions} got=${item.embedding.length}. Provider may not support the 'dimensions' parameter.`);
17854
+ if (group.length > 0)
17855
+ groups.push(group);
17856
+ for (const indices of groups) {
17857
+ try {
17858
+ const response = await this.request(client, indices.map((i) => cleaned[i]));
17859
+ for (const item of response.data) {
17860
+ const originalIndex = indices[item.index];
17861
+ if (originalIndex === undefined)
17322
17862
  continue;
17323
- }
17324
- results[originalIndex] = new Float32Array(item.embedding);
17863
+ results[originalIndex] = this.toVector(item.embedding, "Batch embedding");
17864
+ }
17865
+ } catch (err) {
17866
+ if (!isInputRejection(err)) {
17867
+ console.error("[memory] Batch embedding failed:", err.message);
17868
+ continue;
17869
+ }
17870
+ console.warn(`[memory] Batch embedding rejected, embedding ${indices.length} inputs one by one: ${err.message}`);
17871
+ for (const i of indices) {
17872
+ results[i] = await this.embedOne(client, cleaned[i]);
17325
17873
  }
17326
17874
  }
17327
- return results;
17328
- } catch (err) {
17329
- console.error("[memory] Batch embedding failed:", err.message);
17330
- return texts.map(() => null);
17331
17875
  }
17876
+ return results;
17332
17877
  }
17333
17878
  }
17879
+ var MAX_EMBEDDING_INPUT_CHARS = 24000, MIN_EMBEDDING_INPUT_CHARS = 1000, MAX_BATCH_REQUEST_CHARS = 200000;
17334
17880
  var init_openai_embedding = __esm(() => {
17335
17881
  init_openai();
17336
17882
  init_openrouter_base_url();
@@ -17472,7 +18018,25 @@ function rerank(candidates, options) {
17472
18018
  };
17473
18019
  });
17474
18020
  scored.sort((a, b) => b.similarity - a.similarity || b.rawSimilarity - a.rawSimilarity);
17475
- return scored.slice(0, limit);
18021
+ return collapseTaskCompletionChunks(scored).slice(0, limit);
18022
+ }
18023
+ function collapsedDocumentKey(candidate) {
18024
+ if (candidate.source !== "task_completion" || candidate.totalChunks <= 1 || !candidate.key) {
18025
+ return null;
18026
+ }
18027
+ return JSON.stringify([candidate.agentId, candidate.scope, candidate.key]);
18028
+ }
18029
+ function collapseTaskCompletionChunks(ranked) {
18030
+ const seen = new Set;
18031
+ return ranked.filter((candidate) => {
18032
+ const document = collapsedDocumentKey(candidate);
18033
+ if (document === null)
18034
+ return true;
18035
+ if (seen.has(document))
18036
+ return false;
18037
+ seen.add(document);
18038
+ return true;
18039
+ });
17476
18040
  }
17477
18041
  var MS_PER_DAY, MS_PER_HOUR;
17478
18042
  var init_reranker = __esm(() => {
@@ -17482,12 +18046,49 @@ var init_reranker = __esm(() => {
17482
18046
  MS_PER_HOUR = 1000 * 60 * 60;
17483
18047
  });
17484
18048
 
18049
+ // src/be/memory/search-candidates.ts
18050
+ function countCandidateDocuments(candidates) {
18051
+ const documents = new Set;
18052
+ let standalone = 0;
18053
+ for (const candidate of candidates) {
18054
+ const document = collapsedDocumentKey(candidate);
18055
+ if (document === null)
18056
+ standalone++;
18057
+ else
18058
+ documents.add(document);
18059
+ }
18060
+ return standalone + documents.size;
18061
+ }
18062
+ async function searchMemoryCandidates(store, embedding, agentId, options) {
18063
+ let fetchLimit = options.limit;
18064
+ let rows = await store.search(embedding, agentId, { ...options, limit: fetchLimit });
18065
+ while (fetchLimit < MAX_CANDIDATE_FETCH) {
18066
+ const documents = countCandidateDocuments(rows);
18067
+ if (documents >= options.limit || documents === rows.length)
18068
+ break;
18069
+ const nextLimit = Math.min(fetchLimit * WIDEN_FACTOR, MAX_CANDIDATE_FETCH);
18070
+ const wider = await store.search(embedding, agentId, { ...options, limit: nextLimit });
18071
+ if (wider.length <= rows.length)
18072
+ break;
18073
+ rows = wider;
18074
+ fetchLimit = nextLimit;
18075
+ }
18076
+ return rows;
18077
+ }
18078
+ var MAX_CANDIDATE_FETCH = 4096, WIDEN_FACTOR = 4;
18079
+ var init_search_candidates = __esm(() => {
18080
+ init_reranker();
18081
+ });
18082
+
17485
18083
  // src/be/memory/providers/sqlite-store.ts
17486
18084
  var exports_sqlite_store = {};
17487
18085
  __export(exports_sqlite_store, {
17488
18086
  SqliteMemoryStore: () => SqliteMemoryStore,
17489
18087
  rowToCandidate: () => rowToCandidate
17490
18088
  });
18089
+ function armFetchLimit(limit) {
18090
+ return Math.min(Math.max(Math.min(limit * 4, 100), limit), MAX_CANDIDATE_FETCH);
18091
+ }
17491
18092
  function rowToAgentMemory(row) {
17492
18093
  return {
17493
18094
  id: row.id,
@@ -17811,6 +18412,23 @@ class SqliteMemoryStore {
17811
18412
  });
17812
18413
  return results;
17813
18414
  }
18415
+ async replaceDocument(document, inputs) {
18416
+ const results = [];
18417
+ await getDbClient2().transaction(async (tx) => {
18418
+ const rows = await tx.query(`SELECT id FROM agent_memory
18419
+ WHERE key = ? AND scope = ? AND COALESCE(agentId, '') = COALESCE(?, '') AND source = ?`, [document.key, document.scope, document.agentId ?? null, document.source]);
18420
+ const ids = rows.map((row) => row.id);
18421
+ if (ids.length > 0) {
18422
+ await this.purgeByIds(ids);
18423
+ const placeholders = ids.map(() => "?").join(",");
18424
+ await tx.run(`DELETE FROM agent_memory WHERE id IN (${placeholders})`, ids);
18425
+ }
18426
+ for (const input of inputs) {
18427
+ results.push(await this.store(input));
18428
+ }
18429
+ });
18430
+ return results;
18431
+ }
17814
18432
  async get(id) {
17815
18433
  const db = getDbClient2();
17816
18434
  const row = await db.get("SELECT * FROM agent_memory WHERE id = ?", [id]);
@@ -17881,7 +18499,7 @@ class SqliteMemoryStore {
17881
18499
  });
17882
18500
  }
17883
18501
  async searchHybrid(queryEmbedding, queryText, agentId, options) {
17884
- const overfetchLimit = Math.min(Math.max(options.limit * 4, options.limit), 100);
18502
+ const overfetchLimit = armFetchLimit(options.limit);
17885
18503
  const vectorCandidates = await this.searchWithVec(queryEmbedding, agentId, {
17886
18504
  ...options,
17887
18505
  limit: overfetchLimit
@@ -17949,7 +18567,7 @@ class SqliteMemoryStore {
17949
18567
  conditions.push("(m.expiresAt IS NULL OR m.expiresAt > datetime('now'))");
17950
18568
  }
17951
18569
  try {
17952
- const sqlLimit = Math.min(Math.max(limit * 4, limit), 100);
18570
+ const sqlLimit = armFetchLimit(limit);
17953
18571
  const rows = await getDbClient2().query(`SELECT m.*, bm25(memory_fts) AS rank
17954
18572
  FROM memory_fts
17955
18573
  JOIN agent_memory m ON m.id = memory_fts.memory_id
@@ -18286,26 +18904,28 @@ class SqliteMemoryStore {
18286
18904
  return result.changes;
18287
18905
  }
18288
18906
  async updateEmbedding(id, embedding, model) {
18289
- const db = getDbClient2();
18290
18907
  const buffer = serializeEmbedding(embedding);
18291
- await db.run("UPDATE agent_memory SET embedding = ?, embeddingModel = ? WHERE id = ?", [
18292
- buffer,
18293
- model,
18294
- id
18295
- ]);
18296
- if (this.vecInitialized && this.getVecTableSchema()) {
18297
- const vecBuffer = this.toVecBuffer(embedding);
18298
- if (!vecBuffer) {
18299
- console.warn(`[memory-vec] update skipped memory_id=${id} reason=invalid_dimensions dimensions=${embedding.length} expected=${EMBEDDING_DIMENSIONS}`);
18908
+ await getDbClient2().transaction(async (tx) => {
18909
+ const updated = await tx.run("UPDATE agent_memory SET embedding = ?, embeddingModel = ? WHERE id = ?", [buffer, model, id]);
18910
+ if (updated.changes === 0)
18300
18911
  return;
18912
+ if (this.vecInitialized && this.getVecTableSchema()) {
18913
+ const vecBuffer = this.toVecBuffer(embedding);
18914
+ if (!vecBuffer) {
18915
+ console.warn(`[memory-vec] update skipped memory_id=${id} reason=invalid_dimensions dimensions=${embedding.length} expected=${EMBEDDING_DIMENSIONS}`);
18916
+ return;
18917
+ }
18918
+ try {
18919
+ await tx.run("DELETE FROM memory_vec WHERE memory_id = ?", [id]);
18920
+ await tx.run("INSERT INTO memory_vec(memory_id, embedding) VALUES (?, ?)", [
18921
+ id,
18922
+ vecBuffer
18923
+ ]);
18924
+ } catch (err) {
18925
+ console.error(`[memory-vec] update failed memory_id=${id}: ${err.message}`);
18926
+ }
18301
18927
  }
18302
- try {
18303
- await db.run("DELETE FROM memory_vec WHERE memory_id = ?", [id]);
18304
- await db.run("INSERT INTO memory_vec(memory_id, embedding) VALUES (?, ?)", [id, vecBuffer]);
18305
- } catch (err) {
18306
- console.error(`[memory-vec] update failed memory_id=${id}: ${err.message}`);
18307
- }
18308
- }
18928
+ });
18309
18929
  }
18310
18930
  async rewriteForScrub(id, before, after) {
18311
18931
  const contentChanged = after.content !== before.content;
@@ -18428,6 +19048,7 @@ var init_sqlite_store = __esm(() => {
18428
19048
  init_constants();
18429
19049
  init_key_paths();
18430
19050
  init_reranker();
19051
+ init_search_candidates();
18431
19052
  VECTOR_BYTES = EMBEDDING_DIMENSIONS * Float32Array.BYTES_PER_ELEMENT;
18432
19053
  });
18433
19054
 
@@ -19087,7 +19708,7 @@ async function loadSecretRegistry() {
19087
19708
  result.failed += 1;
19088
19709
  }
19089
19710
  try {
19090
- const { loadRuntimeControllerSecrets } = await import("./db-sgd12bt9.js");
19711
+ const { loadRuntimeControllerSecrets } = await import("./db-t86xrnes.js");
19091
19712
  const loaded = await loadRuntimeControllerSecrets();
19092
19713
  result.runtimeController = loaded.count;
19093
19714
  result.failed += loaded.failed;
@@ -19402,6 +20023,7 @@ var init_script_runs = __esm(() => {
19402
20023
  // src/be/db.ts
19403
20024
  var exports_db = {};
19404
20025
  __export(exports_db, {
20026
+ AssetKeyMovesBlockedError: () => AssetKeyMovesBlockedError2,
19405
20027
  EXTENSION_AGENT_ROLE: () => EXTENSION_AGENT_ROLE2,
19406
20028
  ExtensionAgentAssignmentError: () => ExtensionAgentAssignmentError2,
19407
20029
  KvTypeCollisionError: () => KvTypeCollisionError2,
@@ -19416,6 +20038,7 @@ __export(exports_db, {
19416
20038
  __resetSqliteVecExtensionPathCacheForTests: () => __resetSqliteVecExtensionPathCacheForTests2,
19417
20039
  abandonSlackOutcomeDelivery: () => abandonSlackOutcomeDelivery2,
19418
20040
  acceptTask: () => acceptTask2,
20041
+ assertAssetKeyMovesAllowed: () => assertAssetKeyMovesAllowed2,
19419
20042
  assignUnassignedTaskPending: () => assignUnassignedTaskPending2,
19420
20043
  autoEncryptLegacyPlaintextSecrets: () => autoEncryptLegacyPlaintextSecrets2,
19421
20044
  backfillSupersedeTaskResumeTaskId: () => backfillSupersedeTaskResumeTaskId2,
@@ -19515,6 +20138,7 @@ __export(exports_db, {
19515
20138
  extensionAgentAssignmentError: () => extensionAgentAssignmentError2,
19516
20139
  failPendingResumeIfUnclaimed: () => failPendingResumeIfUnclaimed2,
19517
20140
  failTask: () => failTask2,
20141
+ findActiveTasksByVcs: () => findActiveTasksByVcs2,
19518
20142
  findCompletedTaskInThread: () => findCompletedTaskInThread2,
19519
20143
  findExistingLinearTrackerContextWork: () => findExistingLinearTrackerContextWork2,
19520
20144
  findRecentCancelledTaskInThread: () => findRecentCancelledTaskInThread2,
@@ -19635,6 +20259,7 @@ __export(exports_db, {
19635
20259
  getPageVersions: () => getPageVersions2,
19636
20260
  getPausedTasksForAgent: () => getPausedTasksForAgent2,
19637
20261
  getPendingApprovalVoteState: () => getPendingApprovalVoteState2,
20262
+ getPendingApprovalsForTasks: () => getPendingApprovalsForTasks2,
19638
20263
  getPendingChatRelayTasks: () => getPendingChatRelayTasks2,
19639
20264
  getPendingEventWaitNames: () => getPendingEventWaitNames2,
19640
20265
  getPendingSlackRelayTasks: () => getPendingSlackRelayTasks2,
@@ -19786,6 +20411,7 @@ __export(exports_db, {
19786
20411
  listWorkflowRuns: () => listWorkflowRuns2,
19787
20412
  listWorkflowRunsPage: () => listWorkflowRunsPage2,
19788
20413
  listWorkflows: () => listWorkflows2,
20414
+ literalPrefixPattern: () => literalPrefixPattern2,
19789
20415
  markChatRelayAttempted: () => markChatRelayAttempted2,
19790
20416
  markChatRelayDelivered: () => markChatRelayDelivered2,
19791
20417
  markChatRelayGivenUp: () => markChatRelayGivenUp2,
@@ -19805,6 +20431,7 @@ __export(exports_db, {
19805
20431
  markTasksNotified: () => markTasksNotified2,
19806
20432
  maskSecrets: () => maskSecrets2,
19807
20433
  moveAssetKey: () => moveAssetKey2,
20434
+ moveTaskChainKeyInTx: () => moveTaskChainKeyInTx2,
19808
20435
  moveTaskFromBacklog: () => moveTaskFromBacklog2,
19809
20436
  moveTaskToBacklog: () => moveTaskToBacklog2,
19810
20437
  normalizeSkillFilePath: () => normalizeSkillFilePath2,
@@ -19910,11 +20537,11 @@ __export(exports_db, {
19910
20537
  upsertSwarmConfig: () => upsertSwarmConfig2,
19911
20538
  withFavoriteFlags: () => withFavoriteFlags2
19912
20539
  });
19913
- function literalPrefixPattern(prefix) {
20540
+ function literalPrefixPattern2(prefix) {
19914
20541
  return `${prefix.replace(/[\\%_]/g, "\\$&")}%`;
19915
20542
  }
19916
20543
  function assetKeyPrefixPattern(input) {
19917
- return literalPrefixPattern(normalizeAssetKey(input));
20544
+ return literalPrefixPattern2(normalizeAssetKey(input));
19918
20545
  }
19919
20546
  function emitTaskLifecycleTelemetryAfterCommit(event, props, verify, actorUserId) {
19920
20547
  getDbClient2().afterCommit(() => {
@@ -20496,7 +21123,7 @@ function rowToAssetKeyMapping(row) {
20496
21123
  updatedBy: row.updated_by ?? undefined
20497
21124
  };
20498
21125
  }
20499
- async function insertAssetKeyHistory(input) {
21126
+ async function insertAssetKeyHistory2(input) {
20500
21127
  await getDbClient2().run(`INSERT INTO asset_key_history
20501
21128
  (id, entity_type, entity_id, previous_key, new_key, changed_by)
20502
21129
  VALUES (?, ?, ?, ?, ?, ?)`, [
@@ -20538,7 +21165,7 @@ async function upsertAssetKeyMapping2(input) {
20538
21165
  if (!row)
20539
21166
  throw new Error("Failed to update asset key mapping");
20540
21167
  if (existing.key !== key) {
20541
- await insertAssetKeyHistory({
21168
+ await insertAssetKeyHistory2({
20542
21169
  entityType: "file",
20543
21170
  entityId: existing.id,
20544
21171
  previousKey: existing.key,
@@ -20570,7 +21197,7 @@ async function upsertAssetKeyMapping2(input) {
20570
21197
  ]);
20571
21198
  if (!row)
20572
21199
  throw new Error("Failed to create asset key mapping");
20573
- await insertAssetKeyHistory({
21200
+ await insertAssetKeyHistory2({
20574
21201
  entityType: "file",
20575
21202
  entityId: id,
20576
21203
  newKey: key,
@@ -20694,12 +21321,7 @@ async function currentAssetKey(entityType, id) {
20694
21321
  }
20695
21322
  async function moveAssetKey2(input) {
20696
21323
  const key = normalizeAssetKey(input.key);
20697
- const audit = await getDbClient2().transaction(async () => auditAssetKeys(getDb2()), {
20698
- readOnly: true
20699
- });
20700
- if (!audit.ok) {
20701
- throw new Error("Asset namespace moves are blocked until structural errors, unknown personal users, or provider mapping drift are repaired.");
20702
- }
21324
+ await assertAssetKeyMovesAllowed2();
20703
21325
  const previousKey = await currentAssetKey(input.entityType, input.id);
20704
21326
  if (!previousKey)
20705
21327
  return false;
@@ -20715,55 +21337,9 @@ async function moveAssetKey2(input) {
20715
21337
  return getDbClient2().transaction(async (tx) => {
20716
21338
  switch (input.entityType) {
20717
21339
  case "task": {
20718
- const root = await getTaskById2(input.id);
20719
- if (!root)
21340
+ const movedTaskIds = await moveTaskChainKeyInTx2(input.id, input.descendantTaskIds ?? [], key, input.changedBy);
21341
+ if (movedTaskIds === false)
20720
21342
  return false;
20721
- const tasks = [root];
20722
- for (const id of input.descendantTaskIds ?? []) {
20723
- const task = id === root.id ? null : await getTaskById2(id);
20724
- if (task)
20725
- tasks.push(task);
20726
- }
20727
- const movedTaskIds = [];
20728
- for (const task of tasks) {
20729
- if (task.key === key)
20730
- continue;
20731
- const mappedFiles = await tx.query(`SELECT DISTINCT m.id, m."key" AS key
20732
- FROM asset_key_mappings m
20733
- JOIN task_attachments a
20734
- ON m.provider_id = COALESCE(NULLIF(a.provider_id, ''), 'agent-fs')
20735
- AND m.provider_org_id = COALESCE(a.agent_fs_org_id, '')
20736
- AND m.provider_drive_id = COALESCE(a.agent_fs_drive_id, '')
20737
- AND m.provider_key = COALESCE(NULLIF(a.provider_key, ''), a.path)
20738
- WHERE a.task_id = ?
20739
- AND (m.source_entity_type IS NOT 'task-attachment'
20740
- OR m.source_entity_id IN (SELECT id FROM task_attachments WHERE task_id = ?))`, [task.id, task.id]);
20741
- await tx.run('UPDATE agent_tasks SET "key" = ?, updated_by = ? WHERE id = ?', [
20742
- key,
20743
- input.changedBy ?? null,
20744
- task.id
20745
- ]);
20746
- for (const mapping of mappedFiles) {
20747
- if (mapping.key === key)
20748
- continue;
20749
- await tx.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, mapping.id]);
20750
- await insertAssetKeyHistory({
20751
- entityType: "file",
20752
- entityId: mapping.id,
20753
- previousKey: mapping.key,
20754
- newKey: key,
20755
- changedBy: input.changedBy
20756
- });
20757
- }
20758
- await insertAssetKeyHistory({
20759
- entityType: "task",
20760
- entityId: task.id,
20761
- previousKey: task.key,
20762
- newKey: key,
20763
- changedBy: input.changedBy
20764
- });
20765
- movedTaskIds.push(task.id);
20766
- }
20767
21343
  return { movedTaskIds };
20768
21344
  }
20769
21345
  case "workflow":
@@ -20799,7 +21375,7 @@ async function moveAssetKey2(input) {
20799
21375
  await tx.run('UPDATE asset_key_mappings SET "key" = ?, updated_at = ?, updated_by = ? WHERE id = ?', [key, now, input.changedBy ?? null, input.id]);
20800
21376
  break;
20801
21377
  }
20802
- await insertAssetKeyHistory({
21378
+ await insertAssetKeyHistory2({
20803
21379
  entityType: input.entityType,
20804
21380
  entityId: input.id,
20805
21381
  previousKey,
@@ -21213,7 +21789,7 @@ async function createTaskExtended2(task, options) {
21213
21789
  if (parent.outputSchema && !options.outputSchema && options.inheritParentOutputSchema !== false) {
21214
21790
  options.outputSchema = parent.outputSchema;
21215
21791
  }
21216
- if (parent.requestedByUserId && !options.requestedByUserId) {
21792
+ if (parent.requestedByUserId && !options.requestedByUserId && options.inheritParentRequester !== false) {
21217
21793
  options.requestedByUserId = parent.requestedByUserId;
21218
21794
  requestedByUserIdInherited = true;
21219
21795
  }
@@ -21449,7 +22025,7 @@ async function createTaskExtended2(task, options) {
21449
22025
  priority: row.priority
21450
22026
  }, (task) => task !== null, row.requestedByUserId);
21451
22027
  getDbClient2().afterCommit(() => {
21452
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => {
22028
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => {
21453
22029
  workflowEventBus.emit("task.created", {
21454
22030
  taskId: row.id,
21455
22031
  task: row.task,
@@ -21531,7 +22107,7 @@ async function releaseTask2(taskId, wakeSnapshot) {
21531
22107
  } catch {}
21532
22108
  if (isRuntimePoolsEnabled() && !wakeSnapshot)
21533
22109
  getDbClient2().afterCommit(() => {
21534
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
22110
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
21535
22111
  });
21536
22112
  }
21537
22113
  return row ? rowToAgentTask(row) : null;
@@ -21601,7 +22177,7 @@ async function rejectTask2(taskId, agentId, reason) {
21601
22177
  } catch {}
21602
22178
  if (isRuntimePoolsEnabled())
21603
22179
  getDbClient2().afterCommit(() => {
21604
- import("./event-bus-9vpk8gmq.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
22180
+ import("./event-bus-3z78ep5n.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error) => console.error("[db] Routing event failed:", scrubSecrets(String(error))));
21605
22181
  });
21606
22182
  }
21607
22183
  return row ? rowToAgentTask(row) : null;
@@ -26762,120 +27338,33 @@ async function getRootTaskChain2(rootTaskId) {
26762
27338
  ORDER BY t.createdAt, t.rowid`, [rootTaskId]);
26763
27339
  return rows.map(rowToAgentTask);
26764
27340
  }
26765
- async function listRecentSessions2(opts) {
26766
- const limit = opts?.limit ?? 25;
26767
- const offset = opts?.offset ?? 0;
26768
- const sources = opts?.source?.filter((s) => s.length > 0) ?? [];
26769
- const q = opts?.q?.trim();
26770
- const requestedByUserId = opts?.requestedByUserId?.trim() || undefined;
26771
- const conditions = ["r.parentTaskId IS NULL"];
26772
- const params = [];
26773
- if (sources.length > 0) {
26774
- conditions.push(`r.source IN (${sources.map(() => "?").join(", ")})`);
26775
- params.push(...sources);
26776
- }
26777
- if (q && q.length > 0) {
26778
- conditions.push("(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)");
26779
- const like = `%${q.toLowerCase()}%`;
26780
- params.push(like, like);
26781
- }
26782
- if (requestedByUserId) {
26783
- conditions.push("r.requestedByUserId = ?");
26784
- params.push(requestedByUserId);
26785
- }
26786
- if (opts?.contextKeyPrefix) {
26787
- conditions.push(`r.contextKey LIKE ? ESCAPE '\\'`);
26788
- params.push(literalPrefixPattern(opts.contextKeyPrefix));
26789
- }
26790
- if (opts?.viewer) {
26791
- const viewer = sessionViewerCondition(opts.viewer);
26792
- conditions.push(viewer.sql);
26793
- params.push(...viewer.params);
26794
- }
26795
- params.push(limit, offset);
26796
- const rootRows = await getDbClient2().query(`WITH RECURSIVE chain(root_id, id, lastUpdatedAt, status) AS (
26797
- SELECT r.id, r.id, r.lastUpdatedAt, r.status
26798
- FROM agent_tasks r
26799
- WHERE ${conditions.join(" AND ")}
26800
- UNION ALL
26801
- SELECT c.root_id, t.id, t.lastUpdatedAt, t.status
26802
- FROM agent_tasks t
26803
- JOIN chain c ON t.parentTaskId = c.id
26804
- ),
26805
- agg AS (
26806
- SELECT
26807
- root_id,
26808
- COUNT(*) AS chainCount,
26809
- MAX(lastUpdatedAt) AS lastActivityAt
26810
- FROM chain
26811
- GROUP BY root_id
26812
- ),
26813
- latest_status AS (
26814
- SELECT c.root_id, c.status AS latestStatus
26815
- FROM chain c
26816
- JOIN agg a ON c.root_id = a.root_id AND c.lastUpdatedAt = a.lastActivityAt
26817
- GROUP BY c.root_id
26818
- )
26819
- SELECT
26820
- r.*,
26821
- a.chainCount AS __chainCount,
26822
- a.lastActivityAt AS __lastActivityAt,
26823
- COALESCE(ls.latestStatus, r.status) AS __latestStatus
26824
- FROM agent_tasks r
26825
- JOIN agg a ON a.root_id = r.id
26826
- LEFT JOIN latest_status ls ON ls.root_id = r.id
26827
- ORDER BY a.lastActivityAt DESC, r.createdAt DESC, r.id DESC
26828
- LIMIT ? OFFSET ?`, params);
26829
- if (opts?.slim) {
26830
- return rootRows.map((row) => {
26831
- const { __chainCount, __lastActivityAt, __latestStatus, ...taskRow } = row;
26832
- return {
26833
- root: rowToAgentTaskSummary(taskRow),
26834
- chainTaskCount: __chainCount,
26835
- lastActivityAt: __lastActivityAt ?? row.lastUpdatedAt,
26836
- latestStatus: __latestStatus ?? row.status
26837
- };
26838
- });
26839
- }
26840
- return rootRows.map((row) => {
26841
- const { __chainCount, __lastActivityAt, __latestStatus, ...taskRow } = row;
26842
- return {
26843
- root: rowToAgentTask(taskRow),
26844
- chainTaskCount: __chainCount,
26845
- lastActivityAt: __lastActivityAt ?? row.lastUpdatedAt,
26846
- latestStatus: __latestStatus ?? row.status
26847
- };
26848
- });
27341
+ async function listRecentSessions2(opts = {}) {
27342
+ const query = sessionSummaryQuery(opts);
27343
+ const rootRows = await getDbClient2().query(`SELECT r.*, a.chainCount AS __chainCount, a.lastActivityAt AS __lastActivityAt,
27344
+ a.latestStatus AS __latestStatus, a.readState AS __readState,
27345
+ a.snoozeUntil AS __snoozeUntil, a.needsYou AS __needsYou
27346
+ FROM (${query.sql}) a CROSS JOIN agent_tasks r ON r.id = a.root_id
27347
+ ORDER BY ${opts.triage === "later" ? "a.snoozeUntil ASC," : ""}
27348
+ a.lastActivityAt DESC, r.createdAt DESC, r.id DESC LIMIT ? OFFSET ?`, [...query.params, opts.limit ?? 25, opts.offset ?? 0]);
27349
+ const fields = await sessionPageFields(rootRows.map((row) => ({
27350
+ id: row.id,
27351
+ requestedByUserId: row.requestedByUserId ?? undefined
27352
+ })));
27353
+ return rootRows.map((row) => ({
27354
+ root: opts.slim ? rowToAgentTaskSummary(row) : rowToAgentTask(row),
27355
+ chainTaskCount: row.__chainCount,
27356
+ lastActivityAt: row.__lastActivityAt,
27357
+ latestStatus: row.__latestStatus,
27358
+ ...row.__readState ? { readState: row.__readState } : {},
27359
+ snoozeUntil: row.__snoozeUntil,
27360
+ needsYou: !!row.__needsYou,
27361
+ groupKey: sessionGroupKey(row.key),
27362
+ ...fields.get(row.id)
27363
+ }));
26849
27364
  }
26850
- async function countSessions2(opts) {
26851
- const sources = opts?.source?.filter((s) => s.length > 0) ?? [];
26852
- const q = opts?.q?.trim();
26853
- const requestedByUserId = opts?.requestedByUserId?.trim() || undefined;
26854
- const conditions = ["r.parentTaskId IS NULL"];
26855
- const params = [];
26856
- if (sources.length > 0) {
26857
- conditions.push(`r.source IN (${sources.map(() => "?").join(", ")})`);
26858
- params.push(...sources);
26859
- }
26860
- if (q && q.length > 0) {
26861
- conditions.push("(lower(r.task) LIKE ? OR lower(COALESCE(r.title, '')) LIKE ?)");
26862
- const like = `%${q.toLowerCase()}%`;
26863
- params.push(like, like);
26864
- }
26865
- if (requestedByUserId) {
26866
- conditions.push("r.requestedByUserId = ?");
26867
- params.push(requestedByUserId);
26868
- }
26869
- if (opts?.contextKeyPrefix) {
26870
- conditions.push(`r.contextKey LIKE ? ESCAPE '\\'`);
26871
- params.push(literalPrefixPattern(opts.contextKeyPrefix));
26872
- }
26873
- if (opts?.viewer) {
26874
- const viewer = sessionViewerCondition(opts.viewer);
26875
- conditions.push(viewer.sql);
26876
- params.push(...viewer.params);
26877
- }
26878
- const row = await getDbClient2().get(`SELECT COUNT(*) AS count FROM agent_tasks r WHERE ${conditions.join(" AND ")}`, params);
27365
+ async function countSessions2(opts = {}) {
27366
+ const query = sessionCountQuery(opts);
27367
+ const row = await getDbClient2().get(query.sql, query.params);
26879
27368
  return row?.count ?? 0;
26880
27369
  }
26881
27370
  function rowToBudget(row) {
@@ -27604,7 +28093,8 @@ var init_db3 = __esm(() => {
27604
28093
  init_context_versions();
27605
28094
  init_model_profiles();
27606
28095
  init_runtime();
27607
- init_session_visibility();
28096
+ init_session_moves();
28097
+ init_session_tree();
27608
28098
  init_human_free();
27609
28099
  init_read();
27610
28100
  init_write();
@@ -27623,6 +28113,7 @@ var init_db3 = __esm(() => {
27623
28113
  init_approvals();
27624
28114
  init_context_versions();
27625
28115
  init_script_runs();
28116
+ init_session_moves();
27626
28117
  init_runtime();
27627
28118
  init_read();
27628
28119
  init_write();
@@ -27640,6 +28131,10 @@ var init_db3 = __esm(() => {
27640
28131
  promotePendingSteeringForTask: (...args) => promotePendingSteeringForTask(...args),
27641
28132
  cascadeFailDependents: (...args) => cascadeFailDependents2(...args)
27642
28133
  });
28134
+ configureSessionMoveDependencies({
28135
+ auditAssetKeys: () => auditAssetKeys(getDb2()),
28136
+ insertAssetKeyHistory: (...args) => insertAssetKeyHistory2(...args)
28137
+ });
27643
28138
  configureTaskReadDependencies({
27644
28139
  checkDependencies: (taskId) => checkDependencies2(taskId),
27645
28140
  assetKeyPrefixPattern: (input) => assetKeyPrefixPattern(input),
@@ -27677,4 +28172,4 @@ var init_db3 = __esm(() => {
27677
28172
  };
27678
28173
  });
27679
28174
 
27680
- export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, 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, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates, init_templates2, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime, cachedUserRole, cachedUserFunction, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, 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, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, rowToAgentTask, getTaskById2, getChildTasks2, TASK_LINEAGE_LIMITS2, getTaskLineage2, hasNonTerminalResumeChild2, SUPERSEDED_RESUME_REPAIR_WINDOW_MS2, getSupersededTasksWithoutResume2, getSupersededTasksWithUnsettledDependents2, hasNonTerminalRerouteDecisionChild2, getTasksByAgentId2, getAgentCurrentTask2, getTasksByStatus2, findTaskByVcs2, 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, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, init_workflow_runs, 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_drain, 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, 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_openai, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants, 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, rowToCandidate, init_sqlite_store, getEmbeddingProvider2, resetEmbeddingProvider2, getMemoryStore2, init_memory, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db2, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, STEERING_MOVED_ERROR, SteeringRequestError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, recordKeySeatMismatch2, getScriptRunExecutionArgs2, 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_db3 };
28175
+ export { slackContextKey, chatSdkContextKey, chatThreadOfContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, azureDevOpsWorkItemContextKey, bitbucketContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, COMPANY_TEAM_SIZES, COMPANY_USE_CASES, USER_FUNCTIONS, init_company_profile, mapTriggerSurface, init_telemetry_context, TELEMETRY_PROXY_ORIGIN, normalizeOrgWebsite, orgLogoUrl, isFilledOrgLogoUrl, init_org_website, beginRequestAuthScope, setRequestAuth, getRequestAuth, getCurrentRequestAuth, runWithoutRequestAuth, 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, assertUrlSafe, parseEgressAllowlist, init_egress_guard, init_credential_broker, encryptSecret, decryptSecret, getEncryptionKey, init_crypto, isInTransaction, init_db_client, breaksJsonValidity, scrubJsonValue, init_scrub_json, sealJson, init_sealed_json, getPromptTemplateDefaultDrift, init_default_drift, init_templates, init_templates2, isSqliteVecAvailable2, resolveSqliteVecExtensionPath2, __resetSqliteVecExtensionPathCacheForTests2, initDb2, getDb2, closeDb2, getDbClient2, init_runtime, cachedUserRole, cachedUserFunction, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, 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, computeContentHash2, createContextVersion2, getLatestContextVersion2, getContextVersion2, getContextVersionHistory2, vcsRepoName, vcsRepoUrlMatches, init_vcs_repo_match, 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, getSessionReadState, getSessionTree, init_session_tree, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask2, getPendingTaskForAgent2, assignUnassignedTaskPending2, startTask2, updateTaskClaudeSessionId2, recordTaskProviderIfUnset2, updateTaskTitle2, completeTask2, failTask2, overwriteTerminalTaskResultText2, cancelTask2, supersedeTask2, settleSupersededTaskDependents2, backfillSupersedeTaskResumeTaskId2, pauseTask2, resumeTask2, getPausedTasksForAgent2, getOrphanedInProgressTasksForAgent2, resetOrphanedInProgressTasksForAgent2, getRecentlyCancelledTasksForAgent2, deleteTask2, updateTaskProgress2, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, createForeachChildSteps, createForeachAttemptSteps, init_workflow_runs, 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_drain, 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, 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_openai, CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants, 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, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db2, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, STEERING_MOVED_ERROR, SteeringRequestError, isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, carryUnhandledSteering, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS2, refreshActiveSessionOnActivity2, getActiveSessionById, init_active_sessions, recordKeySeatMismatch2, 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_db3 };