@desplega.ai/agent-swarm 1.172.0 → 2.0.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 (525) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-fpecx1g1.js → acp-adapter-sj2g0m84.js} +18 -17
  3. package/dist/{actions-pw87a1a8.js → actions-fegk44gr.js} +65 -35
  4. package/dist/{amp-adapter-8jem2bc0.js → amp-adapter-ad8ft89x.js} +8 -7
  5. package/dist/{anthropic-messages-8ee2f22q.js → anthropic-messages-r6czkjv1.js} +7 -7
  6. package/dist/{app-wmf0m843.js → app-kfvgbvzy.js} +19 -13
  7. package/dist/{assistant-emp1e108.js → assistant-z7zdy9ja.js} +65 -38
  8. package/dist/{boot-reembed-1de4f4aj.js → boot-reembed-5c2z0mbe.js} +11 -9
  9. package/dist/{boot-reembed-4ymn9atn.js → boot-reembed-j8xa181e.js} +11 -9
  10. package/dist/{boot-scrub-sweep-adhk1s8c.js → boot-scrub-sweep-hnkn3rgt.js} +12 -10
  11. package/dist/{boot-seeds-8q637aew.js → boot-seeds-kwjq4d2z.js} +15 -13
  12. package/dist/{claude-adapter-t26cv8a4.js → claude-adapter-9vmvpvgd.js} +20 -19
  13. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
  14. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
  15. package/dist/{claude-sdk-session-gsfsh662.js → claude-sdk-session-9jye6cxr.js} +12698 -11995
  16. package/dist/{cli-k46r9hmk.js → cli-03gedhng.js} +16 -14
  17. package/dist/{cli-kb4ehzx5.js → cli-1e4b6bzh.js} +7 -7
  18. package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
  19. package/dist/cli-2m1ktfzz.js +17795 -0
  20. package/dist/{cli-8vs9trd4.js → cli-3dj8k4vy.js} +1 -1
  21. package/dist/{cli-zxm9p3x4.js → cli-3fbmmawm.js} +5 -5
  22. package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
  23. package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
  24. package/dist/{cli-6jb2rf77.js → cli-5t4f29ez.js} +3 -3
  25. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  26. package/dist/cli-6cvfxs8r.js +47 -0
  27. package/dist/{cli-pj6x9qce.js → cli-6jyj59nb.js} +2 -2
  28. package/dist/{cli-388egyf6.js → cli-6razj6t4.js} +2 -2
  29. package/dist/{cli-qsztpfry.js → cli-74ahz61x.js} +2 -2
  30. package/dist/{cli-4nz8p1p5.js → cli-7x0g4sn1.js} +15474 -16082
  31. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  32. package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
  33. package/dist/cli-9traj3dn.js +638 -0
  34. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  35. package/dist/{cli-bf7485pm.js → cli-apx87jne.js} +2 -2
  36. package/dist/{cli-ztrv9y21.js → cli-bzszjf2p.js} +3689 -1081
  37. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  38. package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
  39. package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
  40. package/dist/{cli-1hgat6pa.js → cli-d5f9ed5c.js} +5 -5
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
  43. package/dist/{cli-j6kpj9az.js → cli-ee9gtz70.js} +1553 -68
  44. package/dist/{cli-e0a9sk00.js → cli-eejsgvm4.js} +4 -4
  45. package/dist/{cli-tgpfnm6r.js → cli-ef1hg1wv.js} +518 -59
  46. package/dist/cli-f527ce74.js +781 -0
  47. package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
  48. package/dist/cli-hjwmhcg1.js +10622 -0
  49. package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
  50. package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
  51. package/dist/{cli-4fnb6884.js → cli-hvqbtna4.js} +7 -1259
  52. package/dist/{cli-pstq9888.js → cli-j0pfptdp.js} +220 -103
  53. package/dist/cli-jta2eyzc.js +619 -0
  54. package/dist/{cli-esnpehf5.js → cli-k382tshb.js} +12 -13
  55. package/dist/cli-k3dp5tpf.js +263 -0
  56. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  57. package/dist/cli-kceah1eh.js +92 -0
  58. package/dist/{cli-prrt9fa0.js → cli-ke896fcf.js} +10 -10
  59. package/dist/{cli-nv4zd0b9.js → cli-kt6zqg0e.js} +6 -6
  60. package/dist/{cli-g6t9texm.js → cli-m50t4309.js} +5 -18
  61. package/dist/cli-n2wq4j7m.js +6985 -0
  62. package/dist/{cli-c2pq2rjb.js → cli-n3hzg89b.js} +46 -15
  63. package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
  64. package/dist/{cli-5rv1j9ga.js → cli-ne236afy.js} +53 -7
  65. package/dist/cli-p0sg24zp.js +16 -0
  66. package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
  67. package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
  68. package/dist/{cli-g4f5pj26.js → cli-q0ke1yww.js} +111 -25
  69. package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
  70. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  71. package/dist/{cli-gj81e47t.js → cli-r2pnvj8g.js} +2 -2
  72. package/dist/{cli-r8smj8b8.js → cli-r62a35ea.js} +19 -3
  73. package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
  74. package/dist/cli-rhs9pz33.js +294 -0
  75. package/dist/{cli-nyhb1r6x.js → cli-s2sp957d.js} +52 -29
  76. package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
  77. package/dist/{cli-xczpdp9e.js → cli-se8w6wny.js} +6 -6
  78. package/dist/cli-skxvvpap.js +10140 -0
  79. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  80. package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
  81. package/dist/{cli-cf69s3ew.js → cli-tr4sxp68.js} +3 -3
  82. package/dist/{cli-8hzfb6xz.js → cli-tsde1hdr.js} +15 -15
  83. package/dist/{cli-cceskcvt.js → cli-txqb9s38.js} +8 -8
  84. package/dist/{cli-aspcaef3.js → cli-v1yb0rqb.js} +6 -6
  85. package/dist/{cli-j1pmc07z.js → cli-vatyhshy.js} +268 -40
  86. package/dist/{cli-04emfe2q.js → cli-vdach5a9.js} +5 -5
  87. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  88. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  89. package/dist/{cli-hwwvy36w.js → cli-wayw93nt.js} +3 -3
  90. package/dist/cli-wmgrkscj.js +23254 -0
  91. package/dist/{cli-gp1rtyvk.js → cli-z5jjpaxw.js} +29 -6
  92. package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
  93. package/dist/cli.js +32 -48
  94. package/dist/{codex-adapter-m4tgdysy.js → codex-adapter-y81sssk0.js} +16 -15
  95. package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
  96. package/dist/{codex-session-runner-ymwzm6ea.js → codex-session-runner-8vx4j6a9.js} +16 -15
  97. package/dist/{commands-n0hshcvs.js → commands-kcpvpcrr.js} +21 -10
  98. package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
  99. package/dist/{controllers-connect-y07cqcvy.js → controllers-connect-kwpvj3rf.js} +45 -38
  100. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
  101. package/dist/{db-hkqvrdcb.js → db-k8ankj20.js} +13 -11
  102. package/dist/{db-4w7tmt1g.js → db-ww5d7jq3.js} +29 -9
  103. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
  104. package/dist/{dispatcher-5sd69y14.js → dispatcher-e8gq5m68.js} +41 -34
  105. package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
  106. package/dist/{dsh-adapter-2h8m4cab.js → dsh-adapter-3epjm3af.js} +7 -6
  107. package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
  108. package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
  109. package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
  110. package/dist/external-channel-h3359cwn.js +52 -0
  111. package/dist/{google-generative-ai-7pavrbv7.js → google-generative-ai-g8db7x0f.js} +5 -3
  112. package/dist/{google-vertex-3f1jk41f.js → google-vertex-r2692q0r.js} +5 -3
  113. package/dist/{grok-adapter-8m9yqzbq.js → grok-adapter-0d4x7gkx.js} +19 -18
  114. package/dist/{handlers-s20xr10r.js → handlers-an1gzv21.js} +44 -37
  115. package/dist/{heartbeat-3k31q4g2.js → heartbeat-6dakeb61.js} +46 -39
  116. package/dist/{hook-gdn6a2fn.js → hook-6v6cv6d5.js} +12 -24
  117. package/dist/{hook-ygwerrdh.js → hook-sa5xye4y.js} +13 -12
  118. package/dist/{http-jdteeg81.js → http-r7f3eky0.js} +1598 -279
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-e0snym4t.js → index-7ep4gzdk.js} +41 -34
  121. package/dist/index-9gw58n4k.js +193 -0
  122. package/dist/index-9j87mcm8.js +56305 -0
  123. package/dist/index-bsmcresk.js +79424 -0
  124. package/dist/index-mh85qhec.js +475 -0
  125. package/dist/{index-vm3bm9t7.js → index-rmpw9a8q.js} +41 -34
  126. package/dist/{index-6ksewd5y.js → index-s2wxgzr0.js} +1015 -732
  127. package/dist/{index-tsszt7g9.js → index-v1v6n7hg.js} +46 -39
  128. package/dist/index-we27kd31.js +12810 -0
  129. package/dist/{index-ffqzqgwb.js → index-zk96aq1k.js} +11 -9
  130. package/dist/{keepalive-jekc896t.js → keepalive-be9vwy5h.js} +13 -11
  131. package/dist/{lead-4k9s9szx.js → lead-0861cwrf.js} +64 -57
  132. package/dist/{maintenance-shazch4n.js → maintenance-mzzgc8bn.js} +11 -9
  133. package/dist/node-c9we95xf.js +1 -1
  134. package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
  135. package/dist/{oauth-refresh-sweep-5gb36kn8.js → oauth-refresh-sweep-cpdnfwdj.js} +12 -10
  136. package/dist/{onboard-ydrbnvww.js → onboard-fh8qs4r3.js} +11 -3
  137. package/dist/{opencode-adapter-5zh0he20.js → opencode-adapter-nm42wwj8.js} +19 -14
  138. package/dist/{otel-impl-6pf5cv86.js → otel-impl-x6c1c9g4.js} +248 -869
  139. package/dist/{pi-mono-adapter-ef9wwx9m.js → pi-mono-adapter-9n2ya240.js} +245 -107
  140. package/dist/{pricing-refresh-s52nsa5q.js → pricing-refresh-qb0rv0ap.js} +13 -11
  141. package/dist/{rbac-roles-aq3msh4e.js → rbac-roles-1gzdwbh1.js} +12 -10
  142. package/dist/{rbac-roles-q5gb5e8v.js → rbac-roles-3mraey52.js} +13 -11
  143. package/dist/{render-v2-pd1rg54q.js → render-v2-agpa45zz.js} +19 -13
  144. package/dist/{resume-gw4a2c6v.js → resume-x0ydy9s9.js} +27 -21
  145. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  146. package/dist/{setup-jda1ksdh.js → setup-as9ga0d6.js} +2 -2
  147. package/dist/{virtual-modules-b3ga2m65.js → virtual-modules-9gkxqrap.js} +7 -6
  148. package/dist/{work-objects-tb7ycye8.js → work-objects-y5g1y7ev.js} +49 -37
  149. package/dist/{worker-njjccz5d.js → worker-860c3e38.js} +64 -57
  150. package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
  151. package/openapi.json +951 -356
  152. package/package.json +12 -13
  153. package/src/apps/catalog.generated.json +1309 -53
  154. package/src/apps/page-validator.ts +93 -31
  155. package/src/azure-devops/api.ts +94 -18
  156. package/src/azure-devops/auth.ts +32 -0
  157. package/src/azure-devops/boards-sync.ts +708 -0
  158. package/src/azure-devops/handlers.ts +52 -8
  159. package/src/azure-devops/html.ts +26 -0
  160. package/src/azure-devops/index.ts +15 -0
  161. package/src/azure-devops/templates.ts +86 -0
  162. package/src/azure-devops/types.ts +65 -1
  163. package/src/be/config-refs.ts +60 -0
  164. package/src/be/db/page-versions.ts +15 -0
  165. package/src/be/db/runtime.ts +35 -8
  166. package/src/be/db/skill-name-resolution.ts +36 -0
  167. package/src/be/db/tasks/read.ts +230 -0
  168. package/src/be/db/tasks/write.ts +7 -0
  169. package/src/be/db.ts +74 -13
  170. package/src/be/migrations/213_script_connections_sql.sql +79 -0
  171. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  172. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  173. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  174. package/src/be/model-catalog-store.ts +5 -1
  175. package/src/be/model-tier-resolution.ts +12 -1
  176. package/src/be/model-validation.ts +5 -2
  177. package/src/be/models-catalog.ts +26 -1
  178. package/src/be/modelsdev-cache.json +198 -63
  179. package/src/be/modelsdev-cache.ts +9 -1
  180. package/src/be/script-connections.ts +47 -8
  181. package/src/be/script-credential-broker.ts +39 -2
  182. package/src/be/scripts/run-saved.ts +1 -0
  183. package/src/be/scripts/typecheck.ts +10 -8
  184. package/src/be/seed/runner.ts +13 -1
  185. package/src/be/seed/state-db.ts +5 -0
  186. package/src/be/seed/types.ts +6 -0
  187. package/src/be/seed-pricing.ts +19 -2
  188. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  189. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  190. package/src/be/seed-skills/bundled-files.generated.json +10 -18
  191. package/src/be/seed-skills/index.ts +107 -3
  192. package/src/be/sql-connections.ts +118 -0
  193. package/src/be/swarm-config-guard.ts +53 -0
  194. package/src/cli.tsx +0 -16
  195. package/src/commands/onboard/non-interactive.ts +4 -2
  196. package/src/commands/profile-sync.ts +5 -3
  197. package/src/commands/provider-credentials.ts +52 -6
  198. package/src/commands/runner.ts +196 -56
  199. package/src/e2b/env.ts +5 -0
  200. package/src/extensions/contract-types.generated.ts +1 -1
  201. package/src/extensions/contract.ts +45 -0
  202. package/src/extensions/dispatcher.ts +7 -0
  203. package/src/extensions/post-bridge.ts +40 -0
  204. package/src/github/handlers.ts +11 -4
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/all-routes.ts +0 -1
  208. package/src/http/config.ts +36 -17
  209. package/src/http/core.ts +4 -0
  210. package/src/http/index.ts +14 -2
  211. package/src/http/integrations.ts +88 -1
  212. package/src/http/mcp-oauth.ts +6 -13
  213. package/src/http/mcp.ts +15 -5
  214. package/src/http/page-proxy.ts +2 -4
  215. package/src/http/pages-public.ts +6 -5
  216. package/src/http/pages.ts +5 -14
  217. package/src/http/poll.ts +28 -68
  218. package/src/http/requested-by.ts +54 -0
  219. package/src/http/route-def.ts +7 -6
  220. package/src/http/script-connection-proxy.ts +51 -4
  221. package/src/http/script-connections.ts +5 -2
  222. package/src/http/scripts.ts +1 -0
  223. package/src/http/session-cost-recompute.ts +12 -2
  224. package/src/http/session-data.ts +4 -0
  225. package/src/http/stats.ts +1 -30
  226. package/src/http/tasks.ts +61 -5
  227. package/src/http/utils.ts +14 -0
  228. package/src/http/webhooks.ts +183 -2
  229. package/src/http/x.ts +1 -0
  230. package/src/integrations/chat-sdk/adapters.ts +129 -0
  231. package/src/integrations/chat-sdk/attachments.ts +232 -0
  232. package/src/integrations/chat-sdk/background.ts +36 -0
  233. package/src/integrations/chat-sdk/commands.ts +194 -0
  234. package/src/integrations/chat-sdk/config.ts +198 -0
  235. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  236. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  237. package/src/integrations/chat-sdk/handlers.ts +28 -0
  238. package/src/integrations/chat-sdk/inbound.ts +426 -0
  239. package/src/integrations/chat-sdk/limits.ts +48 -0
  240. package/src/integrations/chat-sdk/logger.ts +81 -0
  241. package/src/integrations/chat-sdk/outbound.ts +123 -0
  242. package/src/integrations/chat-sdk/relay.ts +172 -0
  243. package/src/integrations/chat-sdk/router.ts +169 -0
  244. package/src/integrations/chat-sdk/runtime.ts +351 -0
  245. package/src/integrations/chat-sdk/schema.ts +245 -0
  246. package/src/integrations/chat-sdk/state.ts +243 -0
  247. package/src/integrations/chat-sdk/status.ts +244 -0
  248. package/src/integrations/chat-sdk/steering.ts +58 -0
  249. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  250. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  251. package/src/integrations/chat-sdk/templates.ts +16 -0
  252. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  253. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  254. package/src/integrations/chat-sdk/typing.ts +65 -0
  255. package/src/jira/adf.ts +3 -1
  256. package/src/kv-reserved-namespaces.ts +2 -0
  257. package/src/oauth/mcp-wrapper.ts +10 -6
  258. package/src/otel-impl.ts +2 -1
  259. package/src/pages/version.ts +4 -5
  260. package/src/prompts/base-prompt.ts +111 -45
  261. package/src/providers/acp-target-catalog.ts +6 -0
  262. package/src/providers/acp-targets.ts +56 -3
  263. package/src/providers/amp-adapter.ts +1 -1
  264. package/src/providers/claude-adapter.ts +27 -2
  265. package/src/providers/claude-flag-settings.ts +133 -0
  266. package/src/providers/claude-managed-adapter.ts +1 -1
  267. package/src/providers/claude-sdk-session.ts +7 -0
  268. package/src/providers/claude-session-events.ts +6 -1
  269. package/src/providers/dsh-adapter.ts +1 -1
  270. package/src/providers/opencode-adapter.ts +268 -37
  271. package/src/providers/opencode-billing.ts +86 -0
  272. package/src/providers/opencode-swarm-plugin.ts +51 -0
  273. package/src/providers/pi-mono-adapter.ts +398 -153
  274. package/src/providers/pricing-sources.md +37 -3
  275. package/src/providers/reasoning-effort.ts +27 -0
  276. package/src/providers/types.ts +11 -2
  277. package/src/rbac/legacy-policy.ts +8 -2
  278. package/src/rbac/permissions.ts +21 -0
  279. package/src/scheduler/scheduler.ts +4 -2
  280. package/src/scripts-runtime/api-client.ts +15 -1
  281. package/src/scripts-runtime/api-types.ts +9 -1
  282. package/src/scripts-runtime/ctx.ts +1 -1
  283. package/src/scripts-runtime/loader.ts +19 -7
  284. package/src/scripts-runtime/mcp-client.ts +30 -19
  285. package/src/scripts-runtime/sdk-allowlist.ts +8 -6
  286. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  287. package/src/scripts-runtime/types/stdlib.d.ts +27 -15
  288. package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
  289. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
  290. package/src/server.ts +52 -18
  291. package/src/slack/actions.ts +29 -1
  292. package/src/slack/app.ts +14 -2
  293. package/src/slack/assistant.ts +36 -2
  294. package/src/slack/channel-join.ts +3 -16
  295. package/src/slack/commands.ts +9 -1
  296. package/src/slack/event-dedup.ts +1 -1
  297. package/src/slack/external-channel-egress.ts +113 -0
  298. package/src/slack/external-channel.ts +309 -0
  299. package/src/slack/handlers.ts +61 -0
  300. package/src/slack/render-v2.ts +40 -47
  301. package/src/slack/work-objects.ts +5 -0
  302. package/src/tasks/additive-buffer.ts +4 -2
  303. package/src/tasks/context-key.ts +94 -2
  304. package/src/tasks/model-pin.ts +67 -0
  305. package/src/tasks/worker-follow-up.ts +4 -31
  306. package/src/telemetry.ts +2 -1
  307. package/src/tests/acp-adapter.test.ts +42 -0
  308. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  309. package/src/tests/apps-catalog-feedback.test.ts +310 -0
  310. package/src/tests/apps-catalog-inputs.test.ts +70 -0
  311. package/src/tests/apps-catalog-table.test.ts +113 -0
  312. package/src/tests/azure-devops-boards-sync.test.ts +584 -0
  313. package/src/tests/azure-devops-html.test.ts +13 -0
  314. package/src/tests/azure-devops-webhook-malformed.test.ts +4 -0
  315. package/src/tests/base-prompt.test.ts +58 -54
  316. package/src/tests/chat-sdk-commands.test.ts +191 -0
  317. package/src/tests/chat-sdk-config.test.ts +334 -0
  318. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  319. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  320. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  321. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  322. package/src/tests/chat-sdk-harness.ts +146 -0
  323. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  324. package/src/tests/chat-sdk-relay.test.ts +470 -0
  325. package/src/tests/chat-sdk-reload.test.ts +128 -0
  326. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  327. package/src/tests/chat-sdk-slack.test.ts +268 -0
  328. package/src/tests/chat-sdk-state.test.ts +163 -0
  329. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  330. package/src/tests/chat-sdk-teams.test.ts +277 -0
  331. package/src/tests/chat-sdk-tools.test.ts +520 -0
  332. package/src/tests/chat-sdk-typing.test.ts +120 -0
  333. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  334. package/src/tests/claude-adapter-binary.test.ts +144 -0
  335. package/src/tests/claude-flag-settings.test.ts +114 -0
  336. package/src/tests/claude-managed-adapter.test.ts +1 -1
  337. package/src/tests/claude-sdk-lifecycle.test.ts +148 -1
  338. package/src/tests/claude-sdk-process.fixture.ts +7 -0
  339. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  340. package/src/tests/claude-worker-parity.test.ts +2 -7
  341. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  342. package/src/tests/config-refs.test.ts +66 -0
  343. package/src/tests/context-key.test.ts +51 -0
  344. package/src/tests/cors-allowlist.test.ts +25 -0
  345. package/src/tests/create-page-tool.test.ts +18 -0
  346. package/src/tests/credential-check.test.ts +139 -0
  347. package/src/tests/credentials.test.ts +21 -0
  348. package/src/tests/db-runtime.test.ts +61 -0
  349. package/src/tests/db-task-read-contract.test.ts +20 -0
  350. package/src/tests/db-task-write-contract.test.ts +10 -0
  351. package/src/tests/deferred-task-wake.test.ts +52 -4
  352. package/src/tests/docs-index-footprint.test.js +3 -3
  353. package/src/tests/dsh-adapter.test.ts +1 -1
  354. package/src/tests/enabled-capabilities.test.ts +20 -0
  355. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  356. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  357. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  358. package/src/tests/explicit-model-validation.test.ts +105 -1
  359. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  360. package/src/tests/extensions-post-bridge.test.ts +51 -0
  361. package/src/tests/fetch-resolved-env.test.ts +128 -0
  362. package/src/tests/fixtures/azure-boards/workitem.commented.json +89 -0
  363. package/src/tests/fixtures/azure-boards/workitem.created.json +81 -0
  364. package/src/tests/fixtures/azure-boards/workitem.deleted.json +70 -0
  365. package/src/tests/fixtures/azure-boards/workitem.restored.json +82 -0
  366. package/src/tests/fixtures/azure-boards/workitem.updated.json +130 -0
  367. package/src/tests/fixtures/catalog-feedback-definition.json.txt +860 -0
  368. package/src/tests/fixtures/catalog-inputs-definition.json.txt +910 -0
  369. package/src/tests/fixtures/catalog-table-definition.json.txt +468 -0
  370. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  371. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  372. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  373. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  374. package/src/tests/fixtures/runner-identity-refresh.ts +3 -0
  375. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  376. package/src/tests/github-handlers.test.ts +35 -0
  377. package/src/tests/harness-provider-resolution.test.ts +12 -0
  378. package/src/tests/heartbeat-checklist.test.ts +3 -2
  379. package/src/tests/hook-runtime-close.test.ts +0 -2
  380. package/src/tests/http-api-integration.test.ts +0 -25
  381. package/src/tests/migration-046-budgets.test.ts +17 -16
  382. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  383. package/src/tests/model-tier-resolution.test.ts +93 -0
  384. package/src/tests/models-catalog.test.ts +42 -1
  385. package/src/tests/node-env-runtime.test.ts +98 -0
  386. package/src/tests/openai-compatible-providers.test.ts +134 -0
  387. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  388. package/src/tests/opencode-adapter.test.ts +348 -3
  389. package/src/tests/opencode-billing.test.ts +28 -0
  390. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  391. package/src/tests/opencode-shell-env.test.ts +145 -0
  392. package/src/tests/openrouter-base-url.test.ts +101 -151
  393. package/src/tests/page-proxy.test.ts +1 -1
  394. package/src/tests/pages-browser-sdk.test.ts +76 -0
  395. package/src/tests/pages-feedback.test.ts +1 -1
  396. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  397. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  398. package/src/tests/pi-mono-adapter.test.ts +385 -5
  399. package/src/tests/pi-shell-env.test.ts +170 -0
  400. package/src/tests/prompt-template-remaining.test.ts +35 -0
  401. package/src/tests/rbac-engine.test.ts +11 -3
  402. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  403. package/src/tests/runner-identity-refresh.test.ts +3 -0
  404. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  405. package/src/tests/script-connections-sql.test.ts +675 -0
  406. package/src/tests/script-connections.test.ts +7 -1
  407. package/src/tests/scripts-http.test.ts +201 -1
  408. package/src/tests/scripts-only-gating.test.ts +2 -3
  409. package/src/tests/scripts-runtime.test.ts +58 -40
  410. package/src/tests/secret-scrubber.test.ts +86 -0
  411. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  412. package/src/tests/seed-skills-retire.test.ts +182 -0
  413. package/src/tests/send-task-requester-gate.test.ts +58 -0
  414. package/src/tests/session-cost-recompute-unit.test.ts +94 -0
  415. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  416. package/src/tests/slack-channel-join.test.ts +4 -1
  417. package/src/tests/slack-external-channel-config.test.ts +65 -0
  418. package/src/tests/slack-external-channel-egress.test.ts +237 -0
  419. package/src/tests/slack-external-channel-guard.test.ts +280 -0
  420. package/src/tests/slack-external-channel-tools.test.ts +173 -0
  421. package/src/tests/slack-external-channel.test.ts +370 -0
  422. package/src/tests/slack-render-v2.test.ts +86 -10
  423. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  424. package/src/tests/spec-base-url.test.ts +16 -1
  425. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  426. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  427. package/src/tests/swarm-diff.test.ts +1 -1
  428. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  429. package/src/tests/task-session-prompts.test.ts +132 -0
  430. package/src/tests/task-tool-manifest.test.ts +14 -0
  431. package/src/tests/task-tools-ctx.test.ts +2 -0
  432. package/src/tests/tool-annotations.test.ts +6 -6
  433. package/src/tests/ui-logs-parser.test.ts +43 -0
  434. package/src/tests/used-by-route.test.ts +6 -0
  435. package/src/tests/vendored-openapi.test.ts +16 -1
  436. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  437. package/src/tests/workflow-swarm-script.test.ts +38 -0
  438. package/src/tests/workflow-wait-filter.test.ts +5 -3
  439. package/src/tools/chat-access.ts +41 -0
  440. package/src/tools/chat-open-dm.ts +59 -0
  441. package/src/tools/chat-post.ts +74 -0
  442. package/src/tools/chat-read-thread.ts +100 -0
  443. package/src/tools/chat-reply.ts +75 -0
  444. package/src/tools/create-page.ts +3 -13
  445. package/src/tools/defer-task.ts +17 -0
  446. package/src/tools/model-catalog/index.ts +2 -1
  447. package/src/tools/register-chat-channel.ts +139 -0
  448. package/src/tools/send-task.ts +24 -0
  449. package/src/tools/skills/skill-get.ts +17 -9
  450. package/src/tools/slack-post.ts +6 -0
  451. package/src/tools/slack-read.ts +8 -0
  452. package/src/tools/slack-reply.ts +6 -0
  453. package/src/tools/slack-start-thread.ts +6 -0
  454. package/src/tools/slack-update.ts +6 -0
  455. package/src/tools/slack-upload-file.ts +6 -0
  456. package/src/tools/swarm-config/get-config.ts +2 -1
  457. package/src/tools/swarm-config/list-config.ts +2 -1
  458. package/src/tools/swarm-config/set-config.ts +16 -3
  459. package/src/tools/tool-config.ts +8 -6
  460. package/src/types.ts +12 -2
  461. package/src/utils/config-env-export.ts +74 -0
  462. package/src/utils/credentials.test.ts +92 -0
  463. package/src/utils/credentials.ts +52 -4
  464. package/src/utils/harness-provider.ts +15 -6
  465. package/src/utils/node-env.ts +24 -0
  466. package/src/utils/runtime-model-catalog.ts +11 -1
  467. package/src/utils/secret-scrubber.ts +71 -2
  468. package/src/utils/task-tool-manifest.ts +19 -2
  469. package/src/workflows/executors/swarm-script.ts +1 -0
  470. package/templates/skills/agent-browser/SKILL.md +1 -1
  471. package/templates/skills/agent-browser/content.md +1 -1
  472. package/templates/skills/apps/SKILL.md +749 -0
  473. package/templates/skills/apps/content.md +60 -22
  474. package/templates/skills/chat-sdk/config.json +14 -0
  475. package/templates/skills/chat-sdk/content.md +84 -0
  476. package/templates/skills/composio-gmail/content.md +7 -0
  477. package/templates/skills/composio-google-docs/content.md +1 -1
  478. package/templates/skills/email-domain-health/config.json +14 -0
  479. package/templates/skills/email-domain-health/content.md +131 -0
  480. package/templates/skills/kv-storage/content.md +2 -2
  481. package/templates/skills/pages/content.md +8 -10
  482. package/templates/skills/qa-loom/config.json +14 -0
  483. package/templates/skills/qa-loom/content.md +187 -0
  484. package/templates/skills/qa-loom/files/build-loom.mjs +221 -0
  485. package/templates/skills/qa-loom/files/run-qa.sh +57 -0
  486. package/templates/skills/slack-interaction/content.md +4 -0
  487. package/templates/skills/swarm-extensions/content.md +2 -0
  488. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  489. package/templates/skills/swarm-scripts/config.json +1 -1
  490. package/templates/skills/swarm-scripts/content.md +4 -2
  491. package/templates/skills/workflow-iterate/content.md +38 -0
  492. package/dist/artifact-eczsknc3.js +0 -3843
  493. package/dist/cli-9xsmdpdt.js +0 -56377
  494. package/dist/cli-bd957dgb.js +0 -153
  495. package/dist/cli-q51yprfq.js +0 -1104
  496. package/dist/cli-t1ze64h3.js +0 -811
  497. package/dist/index-9ch1n761.js +0 -1102
  498. package/src/artifact-sdk/index.ts +0 -2
  499. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  500. package/src/artifact-sdk/port.ts +0 -12
  501. package/src/artifact-sdk/server.ts +0 -183
  502. package/src/artifact-sdk/tunnel.ts +0 -19
  503. package/src/commands/artifact.ts +0 -249
  504. package/src/http/ecosystem.ts +0 -77
  505. package/src/tests/artifact-commands.test.ts +0 -92
  506. package/src/tests/artifact-sdk.test.ts +0 -793
  507. package/src/tests/register-service-security.test.ts +0 -194
  508. package/src/tools/list-services.ts +0 -107
  509. package/src/tools/register-service.ts +0 -177
  510. package/src/tools/unregister-service.ts +0 -73
  511. package/src/tools/update-service-status.ts +0 -96
  512. package/templates/skills/artifacts/config.json +0 -14
  513. package/templates/skills/artifacts/content.md +0 -344
  514. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  515. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  516. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  517. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  518. package/dist/{azure-openai-responses-ap1gwxgr.js → azure-openai-responses-ygfreq4t.js} +5 -5
  519. package/dist/{cli-5rqrj7q0.js → cli-pw7ebjdt.js} +0 -0
  520. package/dist/{openai-codex-responses-33qhkkdy.js → openai-codex-responses-3bk0grnr.js} +4 -4
  521. package/dist/{openai-completions-s88xm3ns.js → openai-completions-5d4jpakc.js} +9 -9
  522. package/dist/{openai-responses-7xd2f2e2.js → openai-responses-krb51f59.js} +5 -5
  523. package/dist/{pi-messages-xszk613n.js → pi-messages-x9gzynm1.js} +3 -3
  524. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
  525. /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ALL_TOOLS,
3
3
  init_tool_config
4
- } from "./cli-ywm1azg9.js";
4
+ } from "./cli-hnmhtzvh.js";
5
5
  import {
6
6
  AgentAvatarSchema,
7
7
  CreateTaskOptionsSchema,
@@ -22,7 +22,7 @@ import {
22
22
  normalizeAssetKey,
23
23
  parseAssetKey,
24
24
  parseModelTier
25
- } from "./cli-hsem16hb.js";
25
+ } from "./cli-cgtksawx.js";
26
26
  import {
27
27
  IdentityFieldBudgetError,
28
28
  checkIdentityFieldBudget,
@@ -36,22 +36,22 @@ import {
36
36
  init_profile_sync,
37
37
  matchesDefaultClaudeMd,
38
38
  matchesDefaultIdentityMd
39
- } from "./cli-nyhb1r6x.js";
40
- import {
41
- init_steering_enabled,
42
- isSteeringEnabled
43
- } from "./cli-7mm2r1kp.js";
39
+ } from "./cli-s2sp957d.js";
44
40
  import {
45
41
  init_config,
46
42
  isSlackConfigured
47
43
  } from "./cli-dmtrxqhg.js";
48
44
  import {
49
- init_templates
50
- } from "./cli-mvzyxwg3.js";
45
+ init_steering_enabled,
46
+ isSteeringEnabled
47
+ } from "./cli-7mm2r1kp.js";
51
48
  import {
52
49
  deriveProviderFromKeyType,
53
50
  init_credentials
54
- } from "./cli-tadfgd0t.js";
51
+ } from "./cli-5hkm7whv.js";
52
+ import {
53
+ init_templates
54
+ } from "./cli-mvzyxwg3.js";
55
55
  import {
56
56
  configureDbResolver,
57
57
  getAllTemplateDefinitions,
@@ -75,13 +75,9 @@ import {
75
75
  init_openrouter_base_url
76
76
  } from "./cli-a35hzdve.js";
77
77
  import {
78
- harnessModelMismatch,
79
78
  init_runtime_model_catalog,
80
- init_src,
81
- isAlias,
82
- parseAlias,
83
79
  runtimeHarnessSections
84
- } from "./cli-014vns2y.js";
80
+ } from "./cli-stfs0k5s.js";
85
81
  import {
86
82
  init_zod
87
83
  } from "./cli-sd0mxa3c.js";
@@ -94,10 +90,14 @@ import {
94
90
  string,
95
91
  union
96
92
  } from "./cli-w5e1d1vv.js";
93
+ import {
94
+ getNodeEnv,
95
+ init_node_env
96
+ } from "./cli-p0sg24zp.js";
97
97
  import {
98
98
  init_package,
99
99
  package_default
100
- } from "./cli-esnpehf5.js";
100
+ } from "./cli-k382tshb.js";
101
101
  import {
102
102
  init_bus,
103
103
  realtimeBus
@@ -112,7 +112,13 @@ import {
112
112
  registerVolatileSecret,
113
113
  scrubObject,
114
114
  scrubSecrets
115
- } from "./cli-d161g69q.js";
115
+ } from "./cli-p1x85d2t.js";
116
+ import {
117
+ harnessModelMismatch,
118
+ init_src,
119
+ isAlias,
120
+ parseAlias
121
+ } from "./cli-e3g5mbkz.js";
116
122
  import {
117
123
  __commonJS,
118
124
  __esm,
@@ -8290,6 +8296,26 @@ function slackContextKey(input) {
8290
8296
  const threadTs = assertSafePart(input.threadTs, "threadTs");
8291
8297
  return ["task", "slack", channelId, threadTs].join(SEPARATOR);
8292
8298
  }
8299
+ function chatSdkContextKey(threadId) {
8300
+ const raw = typeof threadId === "string" ? threadId : "";
8301
+ const separatorIndex = raw.indexOf(SEPARATOR);
8302
+ if (separatorIndex <= 0 || separatorIndex === raw.length - 1) {
8303
+ throw new Error(`context-key: chat-sdk thread id must be "<adapter>:<id>" (got ${JSON.stringify(threadId)})`);
8304
+ }
8305
+ const adapter = assertSafePart(raw.slice(0, separatorIndex), "adapter");
8306
+ const rest = encodeURIComponent(raw.slice(separatorIndex + 1));
8307
+ return ["task", "chat-sdk", adapter, rest].join(SEPARATOR);
8308
+ }
8309
+ function chatThreadOfContextKey(key) {
8310
+ if (!key)
8311
+ return null;
8312
+ try {
8313
+ const parsed = parseContextKey(key);
8314
+ return parsed.family === "chat-sdk" ? parsed.parts : null;
8315
+ } catch {
8316
+ return null;
8317
+ }
8318
+ }
8293
8319
  function agentmailContextKey(input) {
8294
8320
  const threadId = assertSafePart(input.threadId, "threadId");
8295
8321
  return ["task", "agentmail", threadId].join(SEPARATOR);
@@ -8327,6 +8353,14 @@ function azureDevOpsContextKey(input) {
8327
8353
  }
8328
8354
  return ["task", "trackers", "azure-devops", repositoryId, "pr", pullRequestId].join(SEPARATOR);
8329
8355
  }
8356
+ function azureDevOpsWorkItemContextKey(input) {
8357
+ const organization = assertSafePart(input.organization, "organization");
8358
+ const workItemId = assertSafePart(input.workItemId, "workItemId");
8359
+ if (!/^\d+$/.test(workItemId)) {
8360
+ throw new Error(`context-key: azure-devops "workItemId" must be a positive integer (got ${JSON.stringify(workItemId)})`);
8361
+ }
8362
+ return ["task", "trackers", "azure-devops", organization, "workitem", workItemId].join(SEPARATOR);
8363
+ }
8330
8364
  function linearContextKey(input) {
8331
8365
  const issueIdentifier = assertSafePart(input.issueIdentifier, "issueIdentifier");
8332
8366
  return ["task", "trackers", "linear", issueIdentifier].join(SEPARATOR);
@@ -8376,6 +8410,19 @@ function parseContextKey(key) {
8376
8410
  }
8377
8411
  return { family: "agentmail", parts: { threadId: parts[2] } };
8378
8412
  }
8413
+ case "chat-sdk": {
8414
+ if (parts.length !== 4 || !parts[2] || !parts[3]) {
8415
+ throw new Error(`context-key: malformed chat-sdk key: ${JSON.stringify(key)}`);
8416
+ }
8417
+ const adapter = parts[2];
8418
+ let rest;
8419
+ try {
8420
+ rest = decodeURIComponent(parts[3]);
8421
+ } catch {
8422
+ throw new Error(`context-key: malformed chat-sdk key: ${JSON.stringify(key)}`);
8423
+ }
8424
+ return { family: "chat-sdk", parts: { adapter, threadId: `${adapter}:${rest}` } };
8425
+ }
8379
8426
  case "schedule": {
8380
8427
  if (parts.length !== 3) {
8381
8428
  throw new Error(`context-key: malformed schedule key: ${JSON.stringify(key)}`);
@@ -8432,10 +8479,21 @@ function parseContextKey(key) {
8432
8479
  };
8433
8480
  }
8434
8481
  if (subFamily === "azure-devops") {
8435
- if (parts.length !== 6 || parts[4] !== "pr") {
8482
+ if (parts.length !== 6 || parts[4] !== "pr" && parts[4] !== "workitem") {
8436
8483
  throw new Error(`context-key: malformed azure-devops key: ${JSON.stringify(key)}`);
8437
8484
  }
8438
8485
  const idStr = parts[5];
8486
+ if (parts[4] === "workitem") {
8487
+ const workItemId = Number.parseInt(idStr, 10);
8488
+ if (!/^\d+$/.test(idStr) || !Number.isFinite(workItemId)) {
8489
+ throw new Error(`context-key: malformed azure-devops workItemId "${idStr}": ${JSON.stringify(key)}`);
8490
+ }
8491
+ return {
8492
+ family: "trackers",
8493
+ subFamily: "azure-devops",
8494
+ parts: { organization: parts[3], kind: "workitem", workItemId }
8495
+ };
8496
+ }
8439
8497
  const pullRequestId = Number.parseInt(idStr, 10);
8440
8498
  if (!Number.isFinite(pullRequestId)) {
8441
8499
  throw new Error(`context-key: malformed azure-devops pullRequestId "${idStr}": ${JSON.stringify(key)}`);
@@ -10463,8 +10521,8 @@ function getTelemetryEnvironment() {
10463
10521
  const explicit = process.env.DESPLEGA_TELEMETRY_ENV?.trim();
10464
10522
  if (explicit)
10465
10523
  return explicit;
10466
- if (false)
10467
- ;
10524
+ if (getNodeEnv() === "test")
10525
+ return "test";
10468
10526
  return "production";
10469
10527
  }
10470
10528
  function track(options) {
@@ -10557,6 +10615,7 @@ var init_telemetry = __esm(() => {
10557
10615
  init_config();
10558
10616
  init_telemetry_context();
10559
10617
  init_env_flag();
10618
+ init_node_env();
10560
10619
  init_org_website();
10561
10620
  init_request_auth_context();
10562
10621
  CLOUD_HOST_EXACT = new Set([
@@ -12198,7 +12257,20 @@ function initDb(dbPath = "./agent-swarm-db.sqlite") {
12198
12257
  }
12199
12258
  db = new Database(dbPath, { create: true });
12200
12259
  console.log(`Database initialized at ${dbPath}`);
12201
- const database = db;
12260
+ const opened = db;
12261
+ try {
12262
+ return bootOpenedDb(opened, dbPath, resolvePromptTemplate, autoEncryptLegacyPlaintextSecrets);
12263
+ } catch (error2) {
12264
+ if (db === opened) {
12265
+ db = null;
12266
+ try {
12267
+ opened.close();
12268
+ } catch {}
12269
+ }
12270
+ throw error2;
12271
+ }
12272
+ }
12273
+ function bootOpenedDb(database, dbPath, resolvePromptTemplate, autoEncryptLegacyPlaintextSecrets) {
12202
12274
  database.run("PRAGMA journal_mode = WAL;");
12203
12275
  database.run("PRAGMA busy_timeout = 5000;");
12204
12276
  database.run("PRAGMA foreign_keys = ON;");
@@ -12220,20 +12292,20 @@ function initDb(dbPath = "./agent-swarm-db.sqlite") {
12220
12292
  }
12221
12293
  ensureAgentProfileColumns(database);
12222
12294
  try {
12223
- const taskSchemaInfo = db.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'agent_tasks'").get();
12295
+ const taskSchemaInfo = database.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'agent_tasks'").get();
12224
12296
  const schemaSql = taskSchemaInfo?.sql ?? "";
12225
12297
  const hasStatusCheck = /status\s+TEXT\b[^,]*\bCHECK\s*\(\s*status\s+IN\s*\(/i.test(schemaSql);
12226
12298
  const statusAllowsCancelled = /status\s+IN\s*\([^)]*'cancelled'/i.test(schemaSql);
12227
12299
  const needsStatusMigration = hasStatusCheck && !statusAllowsCancelled;
12228
12300
  if (needsStatusMigration) {
12229
12301
  console.log("[Migration] Removing restrictive CHECK constraint on agent_tasks.status");
12230
- db.run("PRAGMA foreign_keys=off");
12302
+ database.run("PRAGMA foreign_keys=off");
12231
12303
  const rebuiltSchemaSql = schemaSql.replace(/^(CREATE TABLE\s+(?:IF NOT EXISTS\s+)?)(?:"agent_tasks"|agent_tasks)/i, "$1agent_tasks_new").replace(/\s+CHECK\s*\(\s*status\s+IN\s*\([^)]*\)\s*\)/i, "");
12232
12304
  if (rebuiltSchemaSql === schemaSql || !/agent_tasks_new/i.test(rebuiltSchemaSql)) {
12233
12305
  throw new Error("Could not derive agent_tasks schema without legacy status CHECK");
12234
12306
  }
12235
- const columns = db.prepare('PRAGMA table_info("agent_tasks")').all().map((column) => `"${column.name.replaceAll('"', '""')}"`).join(", ");
12236
- const schemaObjects = db.prepare(`SELECT sql FROM sqlite_master
12307
+ const columns = database.prepare('PRAGMA table_info("agent_tasks")').all().map((column) => `"${column.name.replaceAll('"', '""')}"`).join(", ");
12308
+ const schemaObjects = database.prepare(`SELECT sql FROM sqlite_master
12237
12309
  WHERE tbl_name = 'agent_tasks'
12238
12310
  AND type IN ('index', 'trigger')
12239
12311
  AND sql IS NOT NULL
@@ -12247,13 +12319,13 @@ function initDb(dbPath = "./agent-swarm-db.sqlite") {
12247
12319
  for (const sql of schemaObjects)
12248
12320
  database.run(sql);
12249
12321
  })();
12250
- db.run("PRAGMA foreign_keys=on");
12322
+ database.run("PRAGMA foreign_keys=on");
12251
12323
  console.log("[Migration] Successfully removed CHECK constraint on agent_tasks.status");
12252
12324
  }
12253
12325
  } catch (e) {
12254
12326
  console.error("[Migration] Failed to update agent_tasks CHECK constraint:", e);
12255
12327
  try {
12256
- db.run("PRAGMA foreign_keys=on");
12328
+ database.run("PRAGMA foreign_keys=on");
12257
12329
  } catch (cleanupError) {
12258
12330
  console.error("[Migration] Failed to re-enable SQLite foreign_keys pragma:", cleanupError);
12259
12331
  }
@@ -12294,7 +12366,7 @@ function initDb(dbPath = "./agent-swarm-db.sqlite") {
12294
12366
  console.error(`[credential-bindings] FATAL: failed to migrate legacy credential binding blob: ${err.message}`);
12295
12367
  throw err;
12296
12368
  }
12297
- return db;
12369
+ return database;
12298
12370
  }
12299
12371
  function getDb(path3) {
12300
12372
  if (!db) {
@@ -12370,7 +12442,7 @@ var init_runtime = __esm(() => {
12370
12442
  // src/telemetry-identity.ts
12371
12443
  async function loadUserRole(userId) {
12372
12444
  try {
12373
- const { getUserGrant } = await import("./rbac-roles-q5gb5e8v.js");
12445
+ const { getUserGrant } = await import("./rbac-roles-3mraey52.js");
12374
12446
  const grant = await getUserGrant(userId);
12375
12447
  const role = grant.grantsAll ? "admin" : "member";
12376
12448
  if (roleCache.size >= ROLE_CACHE_LIMIT) {
@@ -12530,6 +12602,47 @@ var init_codex_auth_failure = __esm(() => {
12530
12602
  ];
12531
12603
  });
12532
12604
 
12605
+ // src/utils/config-env-export.ts
12606
+ function isEnvExportRestrictedKey(key) {
12607
+ return ENV_EXPORT_RESTRICTED_KEYS.has(key.toUpperCase()) || CONNECTION_SECRET_KEY.test(key);
12608
+ }
12609
+ function defaultExportToEnv(key) {
12610
+ const upper = key.toUpperCase();
12611
+ return !isEnvExportRestrictedKey(key) && !ENV_EXPORT_DEFAULT_OFF_KEYS.has(upper) && !ENV_EXPORT_DEFAULT_OFF_PREFIXES.some((prefix) => upper.startsWith(prefix));
12612
+ }
12613
+ function envExportRestrictedError(key) {
12614
+ return `Key '${key}' is read only by the API server and can never be exported to agent env; store it with exportToEnv: false.`;
12615
+ }
12616
+ function effectiveExportToEnv(key, stored) {
12617
+ return stored && !isEnvExportRestrictedKey(key);
12618
+ }
12619
+ var ENV_EXPORT_RESTRICTED_KEYS, ENV_EXPORT_DEFAULT_OFF_KEYS, CONNECTION_SECRET_KEY, ENV_EXPORT_DEFAULT_OFF_PREFIXES;
12620
+ var init_config_env_export = __esm(() => {
12621
+ ENV_EXPORT_RESTRICTED_KEYS = new Set([
12622
+ "SLACK_APP_TOKEN",
12623
+ "SLACK_SIGNING_SECRET",
12624
+ "GITHUB_APP_PRIVATE_KEY",
12625
+ "GITHUB_WEBHOOK_SECRET",
12626
+ "GITLAB_WEBHOOK_SECRET",
12627
+ "LINEAR_CLIENT_SECRET",
12628
+ "LINEAR_SIGNING_SECRET",
12629
+ "JIRA_CLIENT_SECRET",
12630
+ "JIRA_WEBHOOK_TOKEN",
12631
+ "AZURE_DEVOPS_WEBHOOK_SECRET",
12632
+ "AGENTMAIL_WEBHOOK_SECRET",
12633
+ "API_AGENT_FS_API_KEY"
12634
+ ]);
12635
+ ENV_EXPORT_DEFAULT_OFF_KEYS = new Set([
12636
+ "KAPSO_WEBHOOK_HMAC_SECRET",
12637
+ "SENTRY_TEST_APP_WEBHOOK_SECRET",
12638
+ "TELEMETRY_CH_AUTH",
12639
+ "HACK_AGENT_FS_ADMIN_KEY",
12640
+ "X_CLIENT_SECRET"
12641
+ ]);
12642
+ CONNECTION_SECRET_KEY = /^connection\..+\.secret$/;
12643
+ ENV_EXPORT_DEFAULT_OFF_PREFIXES = ["CHAT_SDK_"];
12644
+ });
12645
+
12533
12646
  // src/utils/config-secrets.ts
12534
12647
  var MASKED_SECRET_VALUE = "********";
12535
12648
  var init_config_secrets = () => {};
@@ -13412,6 +13525,7 @@ function rowToAgentTask(row) {
13412
13525
  modelSource: row.modelSource ?? undefined,
13413
13526
  modelAlias: row.modelAlias ?? undefined,
13414
13527
  effort: ReasoningEffortSchema.safeParse(row.effort).success ? row.effort : undefined,
13528
+ resolvedEffort: ReasoningEffortSchema.safeParse(row.resolvedEffort).success ? row.resolvedEffort : undefined,
13415
13529
  scheduleId: row.scheduleId ?? undefined,
13416
13530
  workflowRunId: row.workflowRunId ?? undefined,
13417
13531
  workflowRunStepId: row.workflowRunStepId ?? undefined,
@@ -13468,6 +13582,7 @@ function rowToAgentTaskSummary(row) {
13468
13582
  modelSource: row.modelSource ?? undefined,
13469
13583
  modelAlias: row.modelAlias ?? undefined,
13470
13584
  effort: ReasoningEffortSchema.safeParse(row.effort).success ? row.effort : undefined,
13585
+ resolvedEffort: ReasoningEffortSchema.safeParse(row.resolvedEffort).success ? row.resolvedEffort : undefined,
13471
13586
  provider: row.provider ?? undefined,
13472
13587
  requestedByUserId: row.requestedByUserId ?? undefined,
13473
13588
  progress: row.progress ?? undefined,
@@ -13840,6 +13955,78 @@ async function markFinalizedSlackRelaysDelivered() {
13840
13955
  )`, [now, now]);
13841
13956
  return result.changes;
13842
13957
  }
13958
+ async function getPendingChatRelayTasks(now = Date.now(), limit2 = 200, adapters = []) {
13959
+ if (adapters.length === 0)
13960
+ return [];
13961
+ for (const adapter of adapters) {
13962
+ if (!/^[a-z]+$/.test(adapter))
13963
+ throw new Error(`invalid chat adapter name: ${adapter}`);
13964
+ }
13965
+ const adapterFilter = adapters.map(() => "task.contextKey GLOB ?").join(" OR ");
13966
+ const rows = await getDbClient().query(`SELECT task.*,
13967
+ obligation.created_at AS relay_created_at,
13968
+ obligation.last_error AS relay_last_error
13969
+ FROM chat_relay_obligations obligation
13970
+ JOIN agent_tasks task ON task.id = obligation.task_id
13971
+ WHERE obligation.delivered_at IS NULL
13972
+ AND obligation.given_up_at IS NULL
13973
+ AND task.status IN ('completed', 'failed', 'cancelled')
13974
+ AND (${adapterFilter})
13975
+ AND ${CHAT_RELAY_ELIGIBLE_SQL}
13976
+ ORDER BY obligation.last_attempt_at IS NOT NULL,
13977
+ obligation.last_attempt_at ASC,
13978
+ obligation.created_at ASC
13979
+ LIMIT ?`, [
13980
+ ...adapters.map((adapter) => `task:chat-sdk:${adapter}:*`),
13981
+ new Date(now).toISOString(),
13982
+ limit2
13983
+ ]);
13984
+ return rows.map((row) => ({
13985
+ task: rowToAgentTask(row),
13986
+ createdAt: row.relay_created_at,
13987
+ lastError: row.relay_last_error
13988
+ }));
13989
+ }
13990
+ async function giveUpStaleChatRelays(now, olderThanMs) {
13991
+ const at = new Date(now).toISOString();
13992
+ const cutoff = new Date(now - olderThanMs).toISOString();
13993
+ const result = await getDbClient().run(`UPDATE chat_relay_obligations
13994
+ SET given_up_at = ?, last_error = 'gave up: older than 24h', updated_at = ?
13995
+ WHERE delivered_at IS NULL AND given_up_at IS NULL AND created_at < ?`, [at, at, cutoff]);
13996
+ return result.changes;
13997
+ }
13998
+ async function markChatRelayAttempted(taskId, now = Date.now()) {
13999
+ const at = new Date(now).toISOString();
14000
+ const result = await getDbClient().run(`UPDATE chat_relay_obligations AS obligation
14001
+ SET attempt_count = attempt_count + 1,
14002
+ last_attempt_at = ?,
14003
+ updated_at = ?
14004
+ WHERE task_id = ?
14005
+ AND delivered_at IS NULL
14006
+ AND given_up_at IS NULL
14007
+ AND ${CHAT_RELAY_ELIGIBLE_SQL}`, [at, at, taskId, at]);
14008
+ return result.changes > 0;
14009
+ }
14010
+ async function recordChatRelayError(taskId, error2, now = Date.now()) {
14011
+ const result = await getDbClient().run(`UPDATE chat_relay_obligations
14012
+ SET last_error = ?, updated_at = ?
14013
+ WHERE task_id = ? AND delivered_at IS NULL`, [scrubSecrets(error2), new Date(now).toISOString(), taskId]);
14014
+ return result.changes > 0;
14015
+ }
14016
+ async function markChatRelayDelivered(taskId, now = Date.now()) {
14017
+ const at = new Date(now).toISOString();
14018
+ const result = await getDbClient().run(`UPDATE chat_relay_obligations
14019
+ SET delivered_at = ?, updated_at = ?
14020
+ WHERE task_id = ? AND delivered_at IS NULL`, [at, at, taskId]);
14021
+ return result.changes > 0;
14022
+ }
14023
+ async function markChatRelayGivenUp(taskId, error2, now = Date.now()) {
14024
+ const at = new Date(now).toISOString();
14025
+ const result = await getDbClient().run(`UPDATE chat_relay_obligations
14026
+ SET given_up_at = ?, last_error = ?, updated_at = ?
14027
+ WHERE task_id = ? AND delivered_at IS NULL AND given_up_at IS NULL`, [at, scrubSecrets(error2), at, taskId]);
14028
+ return result.changes > 0;
14029
+ }
13843
14030
  async function getRecentlyFinishedWorkerTasks() {
13844
14031
  const rows = await getDbClient().query(`SELECT t.* FROM agent_tasks t
13845
14032
  LEFT JOIN agents a ON t.agentId = a.id
@@ -14011,6 +14198,36 @@ async function getLatestLeadTaskInThread(channelId, threadTs) {
14011
14198
  LIMIT 1`, [channelId, threadTs]);
14012
14199
  return row ? rowToAgentTask(row) : null;
14013
14200
  }
14201
+ async function getAgentWorkingOnContextKey(contextKey, source2) {
14202
+ const taskRow = await getDbClient().get(`SELECT agentId FROM agent_tasks
14203
+ WHERE contextKey = ?
14204
+ AND (? IS NULL OR source = ?)
14205
+ ORDER BY createdAt DESC, rowid DESC
14206
+ LIMIT 1`, [contextKey, source2 ?? null, source2 ?? null]);
14207
+ if (taskRow?.agentId)
14208
+ return getAgentById(taskRow.agentId);
14209
+ return null;
14210
+ }
14211
+ async function getLatestActiveTaskByContextKey(contextKey, source2) {
14212
+ const row = await getDbClient().get(`SELECT * FROM agent_tasks
14213
+ WHERE contextKey = ?
14214
+ AND (? IS NULL OR source = ?)
14215
+ AND status IN ('in_progress', 'pending')
14216
+ ORDER BY createdAt DESC, rowid DESC
14217
+ LIMIT 1`, [contextKey, source2 ?? null, source2 ?? null]);
14218
+ return row ? rowToAgentTask(row) : null;
14219
+ }
14220
+ async function getLatestLeadTaskByContextKey(contextKey, source2) {
14221
+ const row = await getDbClient().get(`SELECT t.*
14222
+ FROM agent_tasks t
14223
+ JOIN agents a ON a.id = t.agentId
14224
+ WHERE t.contextKey = ?
14225
+ AND (? IS NULL OR t.source = ?)
14226
+ AND a.isLead = 1
14227
+ ORDER BY t.createdAt DESC, t.rowid DESC
14228
+ LIMIT 1`, [contextKey, source2 ?? null, source2 ?? null]);
14229
+ return row ? rowToAgentTask(row) : null;
14230
+ }
14014
14231
  async function getMostRecentTaskInThread(channelId, threadTs) {
14015
14232
  const row = await getDbClient().get(`SELECT * FROM agent_tasks
14016
14233
  WHERE slackChannelId = ?
@@ -14052,11 +14269,15 @@ async function findRecentCancelledTaskInThread(channelId, threadTs, windowMinute
14052
14269
  LIMIT 1`, [channelId, threadTs, since]);
14053
14270
  return row ? rowToAgentTask(row) : null;
14054
14271
  }
14055
- var dependencies2, TASK_PREVIEW_LENGTH = 300, TASK_PREVIEW_BYTES, TASK_PREVIEW_SQL, taskPreviewDecoder, LIST_COLUMNS, NEVER_STARTED_TASK_STATUSES, findTaskByGitHub, LINEAR_TRACKER_CONTEXT_KEY_PREFIX = "task:trackers:linear:";
14272
+ var dependencies2, TASK_PREVIEW_LENGTH = 300, TASK_PREVIEW_BYTES, TASK_PREVIEW_SQL, taskPreviewDecoder, LIST_COLUMNS, NEVER_STARTED_TASK_STATUSES, findTaskByGitHub, CHAT_RELAY_ELIGIBLE_SQL = `(obligation.last_attempt_at IS NULL
14273
+ OR (julianday(?) - julianday(obligation.last_attempt_at)) * 86400000.0 >=
14274
+ CASE WHEN obligation.attempt_count >= 8 THEN 600000
14275
+ ELSE 3000 * (1 << obligation.attempt_count) END)`, LINEAR_TRACKER_CONTEXT_KEY_PREFIX = "task:trackers:linear:";
14056
14276
  var init_read = __esm(() => {
14057
14277
  init_key();
14058
14278
  init_types();
14059
14279
  init_provider_metadata();
14280
+ init_secret_scrubber();
14060
14281
  init_agents();
14061
14282
  init_runtime();
14062
14283
  TASK_PREVIEW_BYTES = 4 * (TASK_PREVIEW_LENGTH + 1);
@@ -14070,6 +14291,7 @@ var init_read = __esm(() => {
14070
14291
  agent_tasks.offeredTo, agent_tasks.acceptedAt, agent_tasks.parentTaskId,
14071
14292
  agent_tasks.scheduleId, agent_tasks.model, agent_tasks.modelTier,
14072
14293
  agent_tasks.resolvedModel, agent_tasks.modelSource, agent_tasks.modelAlias, agent_tasks.effort,
14294
+ agent_tasks.resolvedEffort,
14073
14295
  agent_tasks.provider, agent_tasks.requestedByUserId, agent_tasks.progress,
14074
14296
  agent_tasks.createdAt, agent_tasks.lastUpdatedAt, agent_tasks.finishedAt,
14075
14297
  agent_tasks.peakContextPercent`,
@@ -14310,7 +14532,7 @@ async function startTask(taskId) {
14310
14532
  }
14311
14533
  return result;
14312
14534
  }
14313
- async function updateTaskClaudeSessionId(taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta) {
14535
+ async function updateTaskClaudeSessionId(taskId, claudeSessionId, provider, providerMeta, model, harnessVariant, harnessVariantMeta, resolvedEffort) {
14314
14536
  const setClauses = ["claudeSessionId = ?", "lastUpdatedAt = ?"];
14315
14537
  const params = [claudeSessionId, new Date().toISOString()];
14316
14538
  if (provider !== undefined) {
@@ -14333,6 +14555,10 @@ async function updateTaskClaudeSessionId(taskId, claudeSessionId, provider, prov
14333
14555
  setClauses.push("harnessVariantMeta = ?");
14334
14556
  params.push(JSON.stringify(harnessVariantMeta));
14335
14557
  }
14558
+ if (resolvedEffort !== undefined) {
14559
+ setClauses.push("resolvedEffort = ?");
14560
+ params.push(resolvedEffort);
14561
+ }
14336
14562
  params.push(taskId);
14337
14563
  const row = await getDbClient().get(`UPDATE agent_tasks SET ${setClauses.join(", ")} WHERE id = ? RETURNING *`, params);
14338
14564
  return row ? rowToAgentTask(row) : null;
@@ -14406,7 +14632,7 @@ async function completeTask(id, output, options) {
14406
14632
  });
14407
14633
  } catch {}
14408
14634
  getDbClient().afterCommit(() => {
14409
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
14635
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14410
14636
  workflowEventBus.emit("task.completed", {
14411
14637
  taskId: id,
14412
14638
  output: scrubbedOutput,
@@ -14461,7 +14687,7 @@ async function failTask(id, reason, opts = {}) {
14461
14687
  });
14462
14688
  } catch {}
14463
14689
  getDbClient().afterCommit(() => {
14464
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
14690
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14465
14691
  workflowEventBus.emit("task.failed", {
14466
14692
  taskId: id,
14467
14693
  failureReason: scrubbedReason,
@@ -14543,7 +14769,7 @@ async function cancelTask(id, reason) {
14543
14769
  });
14544
14770
  } catch {}
14545
14771
  getDbClient().afterCommit(() => {
14546
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
14772
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14547
14773
  workflowEventBus.emit("task.cancelled", {
14548
14774
  taskId: id,
14549
14775
  agentId: row.agentId,
@@ -14600,7 +14826,7 @@ async function supersedeTask(id, args) {
14600
14826
  });
14601
14827
  } catch {}
14602
14828
  getDbClient().afterCommit(() => {
14603
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
14829
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14604
14830
  workflowEventBus.emit("task.superseded", {
14605
14831
  taskId: id,
14606
14832
  reason: args.reason,
@@ -14812,7 +15038,7 @@ async function updateTaskProgress(id, progress) {
14812
15038
  });
14813
15039
  } catch {}
14814
15040
  getDbClient().afterCommit(() => {
14815
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
15041
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14816
15042
  workflowEventBus.emit("task.progress", {
14817
15043
  taskId: id,
14818
15044
  progress: scrubbedProgress,
@@ -14883,7 +15109,7 @@ function emitChildRunFinished(childRunId, parentStepId, status) {
14883
15109
  }
14884
15110
  function emitAfterCommit(childRunId, parentStepId) {
14885
15111
  getDbClient().afterCommit(() => {
14886
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
15112
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
14887
15113
  workflowEventBus.emit("workflow.child.finished", { childRunId, parentStepId });
14888
15114
  }).catch((err) => console.error("[db] workflow.child.finished event not emitted:", scrubSecrets(err instanceof Error ? err.message : String(err))));
14889
15115
  });
@@ -14900,6 +15126,164 @@ var init_workflow_runs = __esm(() => {
14900
15126
  ]);
14901
15127
  });
14902
15128
 
15129
+ // src/integrations/chat-sdk/schema.ts
15130
+ function forbiddenKeyIssues(value, ctx) {
15131
+ for (const key of FORBIDDEN_ADAPTER_KEYS) {
15132
+ if (key in value) {
15133
+ ctx.addIssue({
15134
+ code: "custom",
15135
+ path: [key],
15136
+ message: `${key} is not allowed in CHAT_SDK_ADAPTERS`
15137
+ });
15138
+ }
15139
+ }
15140
+ }
15141
+ function adapterSchema(shape) {
15142
+ return exports_external.looseObject({ ...shape, ...COMMON_SHAPE }).superRefine(forbiddenKeyIssues);
15143
+ }
15144
+ function draftShape(shape) {
15145
+ return Object.fromEntries(Object.entries(shape).map(([key, field]) => [key, field.optional()]));
15146
+ }
15147
+ function discordPublicKeyIssue(value, ctx) {
15148
+ if (typeof value.publicKey === "string" && !DISCORD_PUBLIC_KEY_PATTERN.test(value.publicKey)) {
15149
+ ctx.addIssue({
15150
+ code: "custom",
15151
+ path: ["publicKey"],
15152
+ message: "publicKey must be 64 hex characters (the application's Ed25519 public key)"
15153
+ });
15154
+ }
15155
+ }
15156
+ function valueAt(input, path3) {
15157
+ let current = input;
15158
+ for (const key of path3) {
15159
+ if (current === null || typeof current !== "object")
15160
+ return;
15161
+ current = current[key];
15162
+ }
15163
+ return current;
15164
+ }
15165
+ function firstIssueText(error2, prefix = "CHAT_SDK_ADAPTERS", input) {
15166
+ const issue = error2.issues[0];
15167
+ if (!issue)
15168
+ return `${prefix} is invalid`;
15169
+ const path3 = issue.path.length > 0 ? issue.path.join(".") : "(root)";
15170
+ const missing = input !== undefined && issue.path.length > 0 && valueAt(input, issue.path) === undefined;
15171
+ return `${prefix}.${path3}: ${missing ? "required" : issue.message}`;
15172
+ }
15173
+ function formFields(shape) {
15174
+ return Object.keys(shape).filter((key) => key !== "enabled");
15175
+ }
15176
+ function isAdapterEntryEnabled(entry) {
15177
+ return entry !== undefined && entry.enabled !== false;
15178
+ }
15179
+ function validateChatSdkAdaptersValue(value) {
15180
+ if (typeof value !== "string")
15181
+ return "CHAT_SDK_ADAPTERS must be a JSON string";
15182
+ let parsed;
15183
+ try {
15184
+ parsed = JSON.parse(value);
15185
+ } catch (error2) {
15186
+ return `CHAT_SDK_ADAPTERS is not valid JSON: ${error2 instanceof Error ? error2.message : String(error2)}`;
15187
+ }
15188
+ const result = ChatSdkAdaptersDraftSchema.safeParse(parsed);
15189
+ return result.success ? null : firstIssueText(result.error);
15190
+ }
15191
+ var CHAT_SDK_ADAPTER_NAMES, ConfigRefSchema, Str, FORBIDDEN_ADAPTER_KEYS, COMMON_SHAPE, TELEGRAM_SHAPE, SLACK_SHAPE, TelegramAdapterSchema, SlackAdapterSchema, DISCORD_PUBLIC_KEY_PATTERN, DISCORD_SHAPE, DiscordAdapterSchema, TEAMS_SHAPE, TeamsAdapterSchema, ChatSdkAdaptersSchema, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, CHAT_SDK_ADAPTER_FIELDS;
15192
+ var init_schema = __esm(() => {
15193
+ init_zod();
15194
+ CHAT_SDK_ADAPTER_NAMES = ["telegram", "slack", "discord", "teams"];
15195
+ ConfigRefSchema = exports_external.strictObject({ $config: exports_external.string().min(1) });
15196
+ Str = exports_external.union([exports_external.string().trim().min(1), ConfigRefSchema]);
15197
+ FORBIDDEN_ADAPTER_KEYS = [
15198
+ "apiUrl",
15199
+ "apiBaseUrl",
15200
+ "webhookVerifier",
15201
+ "allowUnverifiedWebhooks"
15202
+ ];
15203
+ COMMON_SHAPE = {
15204
+ userName: exports_external.string().min(1).optional(),
15205
+ enabled: exports_external.boolean().optional()
15206
+ };
15207
+ TELEGRAM_SHAPE = {
15208
+ botToken: Str,
15209
+ secretToken: Str.optional(),
15210
+ mode: exports_external.enum(["webhook", "polling"]).default("webhook"),
15211
+ allowedUserIds: exports_external.array(exports_external.union([exports_external.string(), exports_external.number()])).optional()
15212
+ };
15213
+ SLACK_SHAPE = {
15214
+ botToken: Str,
15215
+ signingSecret: Str.optional(),
15216
+ appToken: Str.optional(),
15217
+ mode: exports_external.enum(["webhook", "socket"]).default("webhook")
15218
+ };
15219
+ TelegramAdapterSchema = adapterSchema(TELEGRAM_SHAPE);
15220
+ SlackAdapterSchema = adapterSchema(SLACK_SHAPE).superRefine((value, ctx) => {
15221
+ if (value.mode === "webhook" && value.signingSecret === undefined) {
15222
+ ctx.addIssue({
15223
+ code: "custom",
15224
+ path: ["signingSecret"],
15225
+ message: "signingSecret is required in webhook mode"
15226
+ });
15227
+ }
15228
+ if (value.mode === "socket" && value.appToken === undefined) {
15229
+ ctx.addIssue({
15230
+ code: "custom",
15231
+ path: ["appToken"],
15232
+ message: "appToken is required in socket mode"
15233
+ });
15234
+ }
15235
+ });
15236
+ DISCORD_PUBLIC_KEY_PATTERN = /^[0-9a-fA-F]{64}$/;
15237
+ DISCORD_SHAPE = {
15238
+ botToken: Str,
15239
+ publicKey: Str,
15240
+ applicationId: Str,
15241
+ respondToChannelIds: exports_external.array(exports_external.string()).optional(),
15242
+ respondToGlobalMentions: exports_external.boolean().optional(),
15243
+ mentionRoleIds: exports_external.array(exports_external.string()).optional()
15244
+ };
15245
+ DiscordAdapterSchema = adapterSchema(DISCORD_SHAPE).superRefine(discordPublicKeyIssue);
15246
+ TEAMS_SHAPE = {
15247
+ appId: Str,
15248
+ appPassword: Str,
15249
+ appTenantId: Str.optional(),
15250
+ appType: exports_external.enum(["MultiTenant", "SingleTenant"]).default("MultiTenant")
15251
+ };
15252
+ TeamsAdapterSchema = adapterSchema(TEAMS_SHAPE).superRefine((value, ctx) => {
15253
+ if (value.appType === "SingleTenant" && value.appTenantId === undefined) {
15254
+ ctx.addIssue({
15255
+ code: "custom",
15256
+ path: ["appTenantId"],
15257
+ message: "appTenantId is required for a SingleTenant app"
15258
+ });
15259
+ }
15260
+ });
15261
+ ChatSdkAdaptersSchema = exports_external.strictObject({
15262
+ telegram: TelegramAdapterSchema,
15263
+ slack: SlackAdapterSchema,
15264
+ discord: DiscordAdapterSchema,
15265
+ teams: TeamsAdapterSchema
15266
+ }).partial();
15267
+ CHAT_SDK_ADAPTER_SCHEMAS = {
15268
+ telegram: TelegramAdapterSchema,
15269
+ slack: SlackAdapterSchema,
15270
+ discord: DiscordAdapterSchema,
15271
+ teams: TeamsAdapterSchema
15272
+ };
15273
+ ChatSdkAdaptersDraftSchema = exports_external.strictObject({
15274
+ telegram: adapterSchema(draftShape(TELEGRAM_SHAPE)),
15275
+ slack: adapterSchema(draftShape(SLACK_SHAPE)),
15276
+ discord: adapterSchema(draftShape(DISCORD_SHAPE)).superRefine(discordPublicKeyIssue),
15277
+ teams: adapterSchema(draftShape(TEAMS_SHAPE))
15278
+ }).partial();
15279
+ CHAT_SDK_ADAPTER_FIELDS = {
15280
+ telegram: formFields(TelegramAdapterSchema.shape),
15281
+ slack: formFields(SlackAdapterSchema.shape),
15282
+ discord: formFields(DiscordAdapterSchema.shape),
15283
+ teams: formFields(TeamsAdapterSchema.shape)
15284
+ };
15285
+ });
15286
+
14903
15287
  // src/scripts-runtime/executors/quickjs-pool-config.ts
14904
15288
  function validateQuickJSPoolSize(value) {
14905
15289
  const error2 = `Invalid SCRIPT_QUICKJS_POOL_SIZE (must be an integer between 1 and ${MAX_QUICKJS_POOL_SIZE})`;
@@ -14991,20 +15375,26 @@ var init_enabled_tools = () => {};
14991
15375
  function parseTaskToolManifest(value) {
14992
15376
  return taskToolManifestSchema.parse(JSON.parse(value));
14993
15377
  }
15378
+ function isChatSdkTask(task) {
15379
+ return chatThreadOfContextKey(task.contextKey) !== null;
15380
+ }
14994
15381
  function selectTaskTools(manifest, task) {
14995
15382
  const fromSchedule = task.scheduleId && Object.hasOwn(manifest.schedules ?? {}, task.scheduleId) ? manifest.schedules?.[task.scheduleId] : undefined;
14996
15383
  const fromType = task.taskType && Object.hasOwn(manifest.taskTypes ?? {}, task.taskType) ? manifest.taskTypes?.[task.taskType] : undefined;
14997
- return [...new Set(fromSchedule ?? fromType ?? [])].filter((name) => !name.startsWith("slack-") || Boolean(task.slackChannelId));
15384
+ const chatTask = isChatSdkTask(task);
15385
+ return [...new Set(fromSchedule ?? fromType ?? [])].filter((name) => (!name.startsWith("slack-") || Boolean(task.slackChannelId)) && (chatTask || !CHAT_TASK_ONLY_TOOLS.includes(name)));
14998
15386
  }
14999
- var toolNames, taskToolManifestSchema;
15387
+ var toolNames, taskToolManifestSchema, CHAT_TASK_ONLY_TOOLS;
15000
15388
  var init_task_tool_manifest = __esm(() => {
15001
15389
  init_zod();
15390
+ init_context_key();
15002
15391
  init_tool_config();
15003
15392
  toolNames = exports_external.array(exports_external.string().refine((name) => ALL_TOOLS.has(name), "Unknown swarm tool")).max(16);
15004
15393
  taskToolManifestSchema = exports_external.strictObject({
15005
15394
  taskTypes: exports_external.record(exports_external.string().min(1).max(50), toolNames).optional(),
15006
15395
  schedules: exports_external.record(exports_external.uuid(), toolNames).optional()
15007
15396
  });
15397
+ CHAT_TASK_ONLY_TOOLS = ["chat-reply"];
15008
15398
  });
15009
15399
 
15010
15400
  // src/be/model-tier-keys.ts
@@ -15044,6 +15434,12 @@ var init_model_tier_keys = __esm(() => {
15044
15434
  });
15045
15435
 
15046
15436
  // src/be/swarm-config-guard.ts
15437
+ function teamsSdkEnvKeysSql() {
15438
+ return TEAMS_SDK_ENV_KEYS.map((key) => `'${key}'`).join(", ");
15439
+ }
15440
+ function isApiOnlyConfigKey(key) {
15441
+ return API_ONLY_CONFIG_KEYS.has(key);
15442
+ }
15047
15443
  function isInternalConfigKey(key) {
15048
15444
  return INTERNAL_CONFIG_KEYS.has(key.toLowerCase());
15049
15445
  }
@@ -15151,22 +15547,37 @@ function validateConfigValue(key, value) {
15151
15547
  const validator = VALIDATED_KEYS[key.toUpperCase()];
15152
15548
  return validator ? validator(value) : null;
15153
15549
  }
15154
- var RESERVED_KEYS, INTERNAL_CONFIG_KEYS, BOOLEAN_LITERALS, MAX_DB_RETENTION_DAYS = 1e6, DB_RETENTION_TUNING_BOUNDS, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
15550
+ function validateExportToEnv(key, exportToEnv) {
15551
+ return exportToEnv === true && isEnvExportRestrictedKey(key) ? envExportRestrictedError(key) : null;
15552
+ }
15553
+ 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, validateControllerTokenTtlDays, validateControllerGraceSec, VALIDATED_KEYS;
15155
15554
  var init_swarm_config_guard = __esm(() => {
15555
+ init_schema();
15156
15556
  init_quickjs_pool_config();
15157
15557
  init_reaction_shortcode();
15158
15558
  init_types();
15159
15559
  init_api_drain();
15560
+ init_config_env_export();
15160
15561
  init_enabled_tools();
15161
15562
  init_org_website();
15162
15563
  init_task_tool_manifest();
15163
15564
  init_model_tier_keys();
15565
+ TEAMS_SDK_ENV_KEYS = [
15566
+ "SERVICE_URL",
15567
+ "TENANT_ID",
15568
+ "CLIENT_ID",
15569
+ "CLIENT_SECRET",
15570
+ "MANAGED_IDENTITY_CLIENT_ID",
15571
+ "CLOUD"
15572
+ ];
15164
15573
  RESERVED_KEYS = new Set([
15165
15574
  "API_KEY",
15166
15575
  "SECRETS_ENCRYPTION_KEY",
15167
15576
  "CORS_ALLOW_ANY_ORIGIN",
15168
- "EXTENSION_ALLOW_LEAD_ACTIVATION"
15577
+ "EXTENSION_ALLOW_LEAD_ACTIVATION",
15578
+ "CHAT_SDK_API_URL_OVERRIDES"
15169
15579
  ]);
15580
+ API_ONLY_CONFIG_KEYS = new Set(["API_AGENT_FS_API_KEY", "SLACK_SIGNING_SECRET"]);
15170
15581
  INTERNAL_CONFIG_KEYS = new Set(["onboarding_state", "runtime_owner_id"]);
15171
15582
  BOOLEAN_LITERALS = ["true", "false", "1", "0"];
15172
15583
  DB_RETENTION_TUNING_BOUNDS = {
@@ -15198,6 +15609,7 @@ var init_swarm_config_guard = __esm(() => {
15198
15609
  ], 1),
15199
15610
  ...integerValidators(["RUNTIME_SOCKET_GRACE_SEC"], 0),
15200
15611
  ...integerValidators(["RUNTIME_WAKE_GRACE_SEC", "RUNTIME_WAKE_REROUTE_SEC", "RUNTIME_ROUTING_INTERVAL_MS"], 0),
15612
+ CHAT_SDK_ADAPTERS: validateChatSdkAdaptersValue,
15201
15613
  TASK_TOOL_MANIFESTS: (value) => {
15202
15614
  try {
15203
15615
  if (typeof value !== "string")
@@ -15295,8 +15707,10 @@ var init_swarm_config_guard = __esm(() => {
15295
15707
  "OPENROUTER_APP_ATTRIBUTION",
15296
15708
  "CURSOR_NATIVE_SYSTEM_PROMPT",
15297
15709
  "SLACK_DISABLE",
15710
+ "CHAT_SDK_ENABLED",
15298
15711
  "SLACK_RENDER_V2",
15299
15712
  "SLACK_RENDER_V2_DELEGATION",
15713
+ "SLACK_BLOCK_EXTERNAL_CHANNELS",
15300
15714
  "GITHUB_DISABLE",
15301
15715
  "GITLAB_DISABLE",
15302
15716
  "AZURE_DEVOPS_DISABLE",
@@ -15368,6 +15782,7 @@ var init_swarm_config_guard = __esm(() => {
15368
15782
  ...integerValidators(["MODEL_LATEST_SOAK_DAYS"], 0),
15369
15783
  ...integerValidators(["APPROVAL_REQUEST_AUTO_CANCELLATION_DAYS"], 0),
15370
15784
  ...boundedIntegerValidators(["API_DRAIN_MAX_MS"], 0, API_DRAIN_MAX_MS_LIMIT),
15785
+ ...boundedIntegerValidators(["CHAT_SDK_BUFFER_MS"], 1, 600000),
15371
15786
  ...boundedIntegerValidators(["CONTEXT_PREAMBLE_MAX_TOKENS"], 100, 20000),
15372
15787
  MEMORY_MIN_SIMILARITY: (value) => validateFloatRange("MEMORY_MIN_SIMILARITY", value, 0, 1, "between 0 and 1 inclusive"),
15373
15788
  MEMORY_ACCESS_BOOST_MAX: (value) => validateFloatRange("MEMORY_ACCESS_BOOST_MAX", value, 1, Number.POSITIVE_INFINITY, "a number >= 1")
@@ -16580,7 +16995,7 @@ async function loadSecretRegistry() {
16580
16995
  result.failed += 1;
16581
16996
  }
16582
16997
  try {
16583
- const { loadRuntimeControllerSecrets } = await import("./db-hkqvrdcb.js");
16998
+ const { loadRuntimeControllerSecrets } = await import("./db-k8ankj20.js");
16584
16999
  const loaded = await loadRuntimeControllerSecrets();
16585
17000
  result.runtimeController = loaded.count;
16586
17001
  result.failed += loaded.failed;
@@ -17003,6 +17418,7 @@ __export(exports_db, {
17003
17418
  getAgentSkills: () => getAgentSkills,
17004
17419
  getAgentStatusCounts: () => getAgentStatusCounts,
17005
17420
  getAgentWithTasks: () => getAgentWithTasks,
17421
+ getAgentWorkingOnContextKey: () => getAgentWorkingOnContextKey,
17006
17422
  getAgentWorkingOnThread: () => getAgentWorkingOnThread,
17007
17423
  getAllAgentMailInboxMappings: () => getAllAgentMailInboxMappings,
17008
17424
  getAllAgents: () => getAllAgents,
@@ -17064,8 +17480,10 @@ __export(exports_db, {
17064
17480
  getLastReadAt: () => getLastReadAt,
17065
17481
  getLastRunStart: () => getLastRunStart,
17066
17482
  getLastSuccessfulRun: () => getLastSuccessfulRun,
17483
+ getLatestActiveTaskByContextKey: () => getLatestActiveTaskByContextKey,
17067
17484
  getLatestActiveTaskInThread: () => getLatestActiveTaskInThread,
17068
17485
  getLatestContextVersion: () => getLatestContextVersion,
17486
+ getLatestLeadTaskByContextKey: () => getLatestLeadTaskByContextKey,
17069
17487
  getLatestLeadTaskInThread: () => getLatestLeadTaskInThread,
17070
17488
  getLatestPageBySlug: () => getLatestPageBySlug,
17071
17489
  getLatestScriptRunStepTaskByContextKey: () => getLatestScriptRunStepTaskByContextKey,
@@ -17095,6 +17513,7 @@ __export(exports_db, {
17095
17513
  getPageVersions: () => getPageVersions,
17096
17514
  getPausedTasksForAgent: () => getPausedTasksForAgent,
17097
17515
  getPendingApprovalVoteState: () => getPendingApprovalVoteState,
17516
+ getPendingChatRelayTasks: () => getPendingChatRelayTasks,
17098
17517
  getPendingEventWaitNames: () => getPendingEventWaitNames,
17099
17518
  getPendingSlackRelayTasks: () => getPendingSlackRelayTasks,
17100
17519
  getPendingSteeringForAgent: () => getPendingSteeringForAgent,
@@ -17192,6 +17611,7 @@ __export(exports_db, {
17192
17611
  getWorkflowVersion: () => getWorkflowVersion,
17193
17612
  getWorkflowVersions: () => getWorkflowVersions,
17194
17613
  getWorkflowsByScheduleId: () => getWorkflowsByScheduleId,
17614
+ giveUpStaleChatRelays: () => giveUpStaleChatRelays,
17195
17615
  hasBudgetRefusalNotificationToday: () => hasBudgetRefusalNotificationToday,
17196
17616
  hasCapacity: () => hasCapacity,
17197
17617
  hasFirstCompletedTask: () => hasFirstCompletedTask,
@@ -17243,6 +17663,9 @@ __export(exports_db, {
17243
17663
  listWorkflowRuns: () => listWorkflowRuns,
17244
17664
  listWorkflowRunsPage: () => listWorkflowRunsPage,
17245
17665
  listWorkflows: () => listWorkflows,
17666
+ markChatRelayAttempted: () => markChatRelayAttempted,
17667
+ markChatRelayDelivered: () => markChatRelayDelivered,
17668
+ markChatRelayGivenUp: () => markChatRelayGivenUp,
17246
17669
  markFinalizedSlackRelaysDelivered: () => markFinalizedSlackRelaysDelivered,
17247
17670
  markInboxMessageDelegated: () => markInboxMessageDelegated,
17248
17671
  markInboxMessageRead: () => markInboxMessageRead,
@@ -17271,6 +17694,7 @@ __export(exports_db, {
17271
17694
  reassociateSessionLogs: () => reassociateSessionLogs,
17272
17695
  recordApprovalVotes: () => recordApprovalVotes,
17273
17696
  recordBudgetRefusalNotification: () => recordBudgetRefusalNotification,
17697
+ recordChatRelayError: () => recordChatRelayError,
17274
17698
  recordInlineScriptRun: () => recordInlineScriptRun,
17275
17699
  recordKeyAuthFailure: () => recordKeyAuthFailure,
17276
17700
  recordKeyRateLimitWindows: () => recordKeyRateLimitWindows,
@@ -17582,15 +18006,30 @@ async function getSlackOutcomeMessage(taskId) {
17582
18006
  return row ? rowToSlackMessage(row) : null;
17583
18007
  }
17584
18008
  async function getResolvableDeferralOutcomes(limit2 = 50) {
17585
- const rows = await getDbClient().query(`SELECT card.*, wake.id AS wake_task_id
17586
- FROM slack_messages card
17587
- JOIN agent_tasks deferred ON deferred.id = card.task_id
17588
- JOIN agent_tasks wake ON wake.parentTaskId = deferred.id AND wake.taskType = 'deferred'
18009
+ const rows = await getDbClient().query(`WITH RECURSIVE chain(card_id, task_id) AS (
18010
+ SELECT card.id, deferred.id FROM slack_messages card
18011
+ JOIN agent_tasks deferred ON deferred.id = card.task_id
18012
+ WHERE card.kind = 'outcome' AND deferred.deferredAt IS NOT NULL
18013
+ AND card.deferral_resolved_at IS NULL AND card.finalized_at IS NOT NULL
18014
+ AND card.ts NOT LIKE 'pending:%'
18015
+ UNION
18016
+ SELECT chain.card_id, wake.id FROM chain
18017
+ JOIN agent_tasks parent ON parent.id = chain.task_id AND parent.deferredAt IS NOT NULL
18018
+ JOIN agent_tasks wake ON wake.parentTaskId = parent.id AND wake.taskType = 'deferred'
18019
+ )
18020
+ SELECT card.*, wake.id AS wake_task_id
18021
+ FROM chain
18022
+ JOIN slack_messages card ON card.id = chain.card_id
18023
+ JOIN agent_tasks wake ON wake.id = chain.task_id AND wake.id != card.task_id
17589
18024
  WHERE card.kind = 'outcome'
17590
18025
  AND card.finalized_at IS NOT NULL
17591
18026
  AND card.deferral_resolved_at IS NULL
17592
18027
  AND card.ts NOT LIKE 'pending:%'
17593
- AND deferred.deferredAt IS NOT NULL
18028
+ AND NOT EXISTS (
18029
+ SELECT 1 FROM agent_tasks child
18030
+ WHERE child.parentTaskId = wake.id AND child.taskType = 'deferred'
18031
+ )
18032
+ AND (wake.deferredAt IS NULL OR wake.finishedAt > card.updated_at)
17594
18033
  AND wake.status IN ('completed', 'failed', 'cancelled')
17595
18034
  ORDER BY wake.finishedAt ASC
17596
18035
  LIMIT ?`, [limit2]);
@@ -18863,7 +19302,7 @@ async function createTaskExtended(task, options) {
18863
19302
  priority: row.priority
18864
19303
  }, (task2) => task2 !== null, row.requestedByUserId);
18865
19304
  getDbClient().afterCommit(() => {
18866
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => {
19305
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => {
18867
19306
  workflowEventBus.emit("task.created", {
18868
19307
  taskId: row.id,
18869
19308
  task: row.task,
@@ -18945,7 +19384,7 @@ async function releaseTask(taskId, wakeSnapshot) {
18945
19384
  } catch {}
18946
19385
  if (isRuntimePoolsEnabled() && !wakeSnapshot)
18947
19386
  getDbClient().afterCommit(() => {
18948
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error2) => console.error("[db] Routing event failed:", scrubSecrets(String(error2))));
19387
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error2) => console.error("[db] Routing event failed:", scrubSecrets(String(error2))));
18949
19388
  });
18950
19389
  }
18951
19390
  return row ? rowToAgentTask(row) : null;
@@ -19015,7 +19454,7 @@ async function rejectTask(taskId, agentId, reason) {
19015
19454
  } catch {}
19016
19455
  if (isRuntimePoolsEnabled())
19017
19456
  getDbClient().afterCommit(() => {
19018
- import("./event-bus-vjtv82gm.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error2) => console.error("[db] Routing event failed:", scrubSecrets(String(error2))));
19457
+ import("./event-bus-6axnngdj.js").then(({ workflowEventBus }) => workflowEventBus.emit("task.unassigned", { taskId })).catch((error2) => console.error("[db] Routing event failed:", scrubSecrets(String(error2))));
19019
19458
  });
19020
19459
  }
19021
19460
  return row ? rowToAgentTask(row) : null;
@@ -20693,7 +21132,8 @@ function rowToSwarmConfig(row) {
20693
21132
  description: row.description ?? null,
20694
21133
  createdAt: row.createdAt,
20695
21134
  lastUpdatedAt: row.lastUpdatedAt,
20696
- encrypted: isEncrypted
21135
+ encrypted: isEncrypted,
21136
+ exportToEnv: effectiveExportToEnv(row.key, row.exportToEnv !== 0)
20697
21137
  };
20698
21138
  }
20699
21139
  let value = row.value;
@@ -20715,7 +21155,8 @@ function rowToSwarmConfig(row) {
20715
21155
  description: row.description ?? null,
20716
21156
  createdAt: row.createdAt,
20717
21157
  lastUpdatedAt: row.lastUpdatedAt,
20718
- encrypted: isEncrypted
21158
+ encrypted: isEncrypted,
21159
+ exportToEnv: effectiveExportToEnv(row.key, row.exportToEnv !== 0)
20719
21160
  };
20720
21161
  }
20721
21162
  function autoEncryptLegacyPlaintextSecrets(database, dbPath, options = {}) {
@@ -20816,7 +21257,7 @@ async function getSwarmConfigs(filters) {
20816
21257
  async function getInjectableGlobalConfigs() {
20817
21258
  const rows = await getDbClient().query(`SELECT * FROM swarm_config
20818
21259
  WHERE scope = 'global'
20819
- AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN', 'EXTENSION_ALLOW_LEAD_ACTIVATION')
21260
+ AND UPPER(key) NOT IN ('API_KEY', 'SECRETS_ENCRYPTION_KEY', 'CORS_ALLOW_ANY_ORIGIN', 'EXTENSION_ALLOW_LEAD_ACTIVATION', 'CHAT_SDK_API_URL_OVERRIDES', ${teamsSdkEnvKeysSql()})
20820
21261
  ORDER BY key ASC`);
20821
21262
  return rows.filter((row) => !isInternalConfigKey(row.key)).map(rowToSwarmConfig);
20822
21263
  }
@@ -20843,6 +21284,10 @@ async function upsertSwarmConfig(data) {
20843
21284
  if (isReservedConfigKey(data.key)) {
20844
21285
  throw reservedKeyError(data.key);
20845
21286
  }
21287
+ if (data.exportToEnv === true && isEnvExportRestrictedKey(data.key)) {
21288
+ throw new Error(envExportRestrictedError(data.key));
21289
+ }
21290
+ const restricted = isEnvExportRestrictedKey(data.key);
20846
21291
  const now = new Date().toISOString();
20847
21292
  const scopeId = data.scope === "global" ? null : data.scopeId ?? null;
20848
21293
  const isSecret = data.isSecret ? 1 : 0;
@@ -20853,12 +21298,24 @@ async function upsertSwarmConfig(data) {
20853
21298
  const row = await getDbClient().transaction(async () => {
20854
21299
  const existing = scopeId === null ? await getDbClient().get("SELECT id FROM swarm_config WHERE scope = ? AND scopeId IS NULL AND key = ?", [data.scope, data.key]) : await getDbClient().get("SELECT id FROM swarm_config WHERE scope = ? AND scopeId = ? AND key = ?", [data.scope, scopeId, data.key]);
20855
21300
  if (existing) {
20856
- return await getDbClient().get(`UPDATE swarm_config SET value = ?, isSecret = ?, envPath = ?, description = ?, encrypted = ?, lastUpdatedAt = ?
20857
- WHERE id = ? RETURNING *`, [storedValue, isSecret, envPath, description, encryptedFlag, now, existing.id]);
21301
+ return await getDbClient().get(`UPDATE swarm_config SET value = ?, isSecret = ?, envPath = ?, description = ?, encrypted = ?, lastUpdatedAt = ?,
21302
+ exportToEnv = CASE WHEN ? THEN 0 ELSE COALESCE(?, exportToEnv) END
21303
+ WHERE id = ? RETURNING *`, [
21304
+ storedValue,
21305
+ isSecret,
21306
+ envPath,
21307
+ description,
21308
+ encryptedFlag,
21309
+ now,
21310
+ restricted ? 1 : 0,
21311
+ data.exportToEnv === undefined ? null : data.exportToEnv ? 1 : 0,
21312
+ existing.id
21313
+ ]);
20858
21314
  }
20859
21315
  const id = crypto.randomUUID();
20860
- return await getDbClient().get(`INSERT INTO swarm_config (id, scope, scopeId, key, value, isSecret, envPath, description, createdAt, lastUpdatedAt, encrypted)
20861
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
21316
+ const exportToEnv = restricted ? 0 : data.exportToEnv ?? defaultExportToEnv(data.key) ? 1 : 0;
21317
+ return await getDbClient().get(`INSERT INTO swarm_config (id, scope, scopeId, key, value, isSecret, envPath, description, createdAt, lastUpdatedAt, encrypted, exportToEnv)
21318
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
20862
21319
  id,
20863
21320
  data.scope,
20864
21321
  scopeId,
@@ -20869,7 +21326,8 @@ async function upsertSwarmConfig(data) {
20869
21326
  description,
20870
21327
  now,
20871
21328
  now,
20872
- encryptedFlag
21329
+ encryptedFlag,
21330
+ exportToEnv
20873
21331
  ]);
20874
21332
  });
20875
21333
  if (!row)
@@ -24942,6 +25400,7 @@ var init_db2 = __esm(() => {
24942
25400
  init_telemetry_trigger();
24943
25401
  init_types();
24944
25402
  init_codex_auth_failure();
25403
+ init_config_env_export();
24945
25404
  init_config_secrets();
24946
25405
  init_credentials();
24947
25406
  init_github_pull_request();
@@ -26151,4 +26610,4 @@ function getMemoryStore() {
26151
26610
  var embeddingProvider2 = null, memoryStore = null;
26152
26611
  var init_memory = () => {};
26153
26612
 
26154
- export { slackContextKey, agentmailContextKey, githubContextKey, gitlabContextKey, azureDevOpsContextKey, linearContextKey, buildJiraContextKey, scheduleContextKey, workflowContextKey, agentContextKey, pageContextKey, init_context_key, checkSlackRoutingCoherence, init_slack_routing, init_catalog, catalog_default, 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, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, 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_templates2 as init_templates, init_templates3 as init_templates1, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, init_runtime, cachedUserRole, configureOrgDomainPersistence, recomputeOrgDomain, scheduleOrgDomainRecompute, init_telemetry_identity, resolveTriggerSurface, emitTaskTelemetry, init_telemetry_trigger, CODEX_AUTH_WATCH_NAMESPACE, codexAuthBenchMarkerKey, isCodexAuthFailureReason, init_codex_auth_failure, MASKED_SECRET_VALUE, init_config_secrets, HeartbeatExpiryError, init_heartbeat_expiry, isRuntimePoolsEnabled, init_runtime_pools_flag, normalizeDate, normalizeDateRequired, init_date_utils, rowToAgent, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, EXTENSION_AGENT_ROLE, NOT_EXTENSION_AGENT_SQL, isExtensionAgent, extensionAgentAssignmentError, ReservedAgentRoleError, reservedRoleViolation, ExtensionAgentAssignmentError, getAllAgents, getAgentStatusCounts, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, getAgentDailyTaskCounts, init_agents, listApprovalRequestSummaries, getPendingApprovalVoteState, recordApprovalVotes, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, rowToAgentTask, getTaskById, getChildTasks, hasNonTerminalResumeChild, getSupersededTasksWithoutResume, getSupersededTasksWithUnsettledDependents, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, isLinearTrackerContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, init_read, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, recordTaskProviderIfUnset, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, settleSupersededTaskDependents, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, init_workflow_runs, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, init_reaction_shortcode, API_DRAINING_HEADER, API_DRAIN_MAX_MS_LIMIT, isApiDrainingResponse, init_api_drain, parseEnabledTools, init_enabled_tools, parseTaskToolManifest, selectTaskTools, init_task_tool_manifest, tierConfigKey, init_model_tier_keys, isInternalConfigKey, internalConfigKeyError, isReservedConfigKey, reservedKeyError, MAX_DB_RETENTION_DAYS, DB_RETENTION_TUNING_BOUNDS, validateRuntimeTokenTtlHours, validateControllerTokenTtlDays, validateControllerGraceSec, validateConfigValue, 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, OpenAI, 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, getEmbeddingProvider, resetEmbeddingProvider, getMemoryStore, init_memory, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings2 as init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS, refreshActiveSessionOnActivity, recordKeySeatMismatch, getScriptRunExecutionArgs, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, isSettledSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getResolvableDeferralOutcomes, markSlackDeferralResolved, noteSlackOutcomeDeliveryFailure, abandonSlackOutcomeDelivery, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, listSlackThreadsAwaitingHuman, isSlackThreadAwaitingHuman, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdAndEventType, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, getCurrentStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelApprovalRequestById, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, getStaleApprovalRequests, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, setApiKeyPlan, markKeyRateLimited, recordKeyAuthFailure, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getReadyAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, kvPrefixUpperBound, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db2 as init_db1 };
26613
+ 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, 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, isTelemetryReady, track, trackRelayed, telemetry, emitIntegrationConnected, init_telemetry, auditAssetKeys, init_asset_key_audit, CredentialBindingSchema, placeholderForConfigKey, CredentialBroker, DEFAULT_CREDENTIAL_BINDINGS, 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_templates2 as init_templates, init_templates3 as init_templates1, isSqliteVecAvailable, resolveSqliteVecExtensionPath, __resetSqliteVecExtensionPathCacheForTests, initDb, getDb, closeDb, getDbClient, init_runtime, cachedUserRole, 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, updateAgentCredentialState, updateAgentCredentialMissing, createAgent, getAgentById, EXTENSION_AGENT_ROLE, NOT_EXTENSION_AGENT_SQL, isExtensionAgent, extensionAgentAssignmentError, ReservedAgentRoleError, reservedRoleViolation, ExtensionAgentAssignmentError, getAllAgents, getAgentStatusCounts, getLeadAgent, updateAgentStatus, updateAgentMaxTasks, updateAgentProvider, setAgentHarnessProvider, updateAgentCredStatus, listAgentsWithCredStatusByProvider, getAgentHarnessProviders, updateAgentActivity, MAX_EMPTY_POLLS, incrementEmptyPollCount, resetEmptyPollCount, shouldBlockPolling, deleteAgent, getActiveTaskCount, hasCapacity, getRemainingCapacity, updateAgentStatusFromCapacity, isPoolAffinityEnforcementEnabled, buildRoutingAffinityFromAgent, isAgentEligibleForTask, getAgentDailyTaskCounts, init_agents, listApprovalRequestSummaries, getPendingApprovalVoteState, recordApprovalVotes, computeContentHash, createContextVersion, getLatestContextVersion, getContextVersion, getContextVersionHistory, setHumanFreeQueueListener, drainHumanFreeReclassifyQueue, init_human_free, rowToAgentTask, getTaskById, getChildTasks, hasNonTerminalResumeChild, getSupersededTasksWithoutResume, getSupersededTasksWithUnsettledDependents, hasNonTerminalRerouteDecisionChild, getTasksByAgentId, getAgentCurrentTask, getTasksByStatus, findTaskByVcs, findTaskByGitHub, getAllTasks, getTasksCount, getTaskStats, getCompletedSlackTasks, getPendingSlackRelayTasks, markSlackRelayAttempted, markSlackRelayDelivered, markFinalizedSlackRelaysDelivered, getPendingChatRelayTasks, giveUpStaleChatRelays, markChatRelayAttempted, recordChatRelayError, markChatRelayDelivered, markChatRelayGivenUp, getRecentlyFinishedWorkerTasks, markTasksNotified, resetTasksNotified, getInProgressSlackTasks, getSlackTasksMissingTree, getInProgressTasksByContextKey, isLinearTrackerContextKey, findExistingLinearTrackerContextWork, getLatestTaskByContextKey, getLatestScriptRunStepTaskByContextKey, getAgentWorkingOnThread, getLatestActiveTaskInThread, getLatestLeadTaskInThread, getAgentWorkingOnContextKey, getLatestActiveTaskByContextKey, getLatestLeadTaskByContextKey, getMostRecentTaskInThread, findCompletedTaskInThread, findRecentCancelledTaskInThread, init_read, onTaskStarted, init_task_lifecycle_events, channelTopic, addWorkerSubscription, removeWorkerSubscription, listSubscribedWorkerAgents, init_channels, publishWorkerNudge, init_worker_nudges, createTask, getPendingTaskForAgent, assignUnassignedTaskPending, startTask, updateTaskClaudeSessionId, recordTaskProviderIfUnset, updateTaskTitle, completeTask, failTask, overwriteTerminalTaskResultText, cancelTask, supersedeTask, settleSupersededTaskDependents, backfillSupersedeTaskResumeTaskId, pauseTask, resumeTask, getPausedTasksForAgent, getOrphanedInProgressTasksForAgent, resetOrphanedInProgressTasksForAgent, getRecentlyCancelledTasksForAgent, deleteTask, updateTaskProgress, getChildWorkflowRunId, getWorkflowRunParent, getWorkflowRunLineage, getSettledChildRunParentSteps, init_workflow_runs, CHAT_SDK_ADAPTER_NAMES, CHAT_SDK_ADAPTER_SCHEMAS, ChatSdkAdaptersDraftSchema, firstIssueText, isAdapterEntryEnabled, init_schema, resolveQuickJSPoolSize, init_quickjs_pool_config, SLACK_REACTION_DEFAULTS, SLACK_REACTION_CONFIG_KEYS, reactionName, 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, 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, OpenAI, 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, getEmbeddingProvider, resetEmbeddingProvider, getMemoryStore, init_memory, embeddingProvider, embedScript, searchScripts, reembedAllScripts, init_embeddings2 as init_embeddings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, init_db, oauthSecretName, registerStoredSecret, loadSecretRegistry, init_secret_registry, SteeringRequestError, isSteeringEnabled2 as isSteeringEnabled, getTaskSteeringFields, getTaskSteeringFieldsForTasks, promotePendingSteeringForTask, markSteeringUndeliverable, requestSteering, init_steering, WorkflowReplayStateError, init_workflow_replay, SESSION_ACTIVITY_REFRESH_MIN_INTERVAL_MS, refreshActiveSessionOnActivity, recordKeySeatMismatch, getScriptRunExecutionArgs, getSlackRenderV2ActivatedAt, ensureSlackRenderV2Activation, getSlackDelegationActivatedAt, ensureSlackDelegationActivation, isPendingSlackMessage, isSettledSlackMessage, recordSlackMessage, reserveSlackMessage, bindSlackMessageTimestamp, updateSlackMessageRecord, markSlackTreeRendered, deleteSlackMessageRecord, getSlackTreeMessage, getSlackTreeMessageByThread, getSlackOutcomeMessage, getResolvableDeferralOutcomes, markSlackDeferralResolved, noteSlackOutcomeDeliveryFailure, abandonSlackOutcomeDelivery, getSlackTreeMessages, getSlackMessageByChannelTs, getSlackTasksInThread, listSlackThreadsAwaitingHuman, isSlackThreadAwaitingHuman, markTaskSlackReplySent, setSlackMessageTracking, updateTaskVcs, insertTaskAttachment, recordTaskPullRequestAttachments, getAssetKeyMappingByProvider, upsertAssetKeyMapping, getAssetKeyMapping, listAssetSummaries, moveAssetKey, deleteTaskAttachment, replaceTaskAttachment, getTaskAttachments, createSteeringMessage, getSteeringMessagesForTask, getSteeringMessageById, getPendingSteeringForTask, getPendingSteeringForAgent, markSteeringDelivered, markSteeringHandled, markSteeringPromoted, cancelPendingSteeringForTask, hasPendingSteering, getAgentWithTasks, getAllAgentsWithTasks, createLogEntry, getLogsByAgentId, getLogsByTaskId, getLogsByTaskIdAndEventType, getLogsByTaskIdChronological, getLogsByEventType, getAllLogs, findRecentSimilarTasks, createTaskExtended, claimTask, releaseTask, acceptTask, rejectTask, moveTaskToBacklog, moveTaskFromBacklog, promoteDraftTask, refreshDraftTaskLease, promoteAbandonedDraftTasks, releaseStaleReviewingTasks, releaseStaleOfferedTasksForOfflineAgents, getOfferedTasksForAgent, claimOfferedTask, getUnassignedTasksCount, getUnassignedTaskIds, getUnassignedTaskIdsForAgent, checkDependencies, getDependentTasks, cascadeFailDependents, updateAgentProfile, updateAgentName, createChannel, getMessageById, getChannelById, getChannelByName, getAllChannels, deleteChannel, postMessage, getChannelMessages, updateReadState, getLastReadAt, getUnreadMessages, getMentionsForAgent, getInboxSummary, claimMentions, releaseMentionProcessing, releaseStaleMentionProcessing, createService, getServiceById, getServiceByAgentAndName, getServicesByAgentId, getAllServices, updateServiceStatus, deleteService, upsertService, deleteServicesByAgentId, createSessionLogs, getSessionLogsByTaskId, getSessionLogsBySession, createSessionCost, getSessionCostsByTaskId, getSessionCostsByAgentId, getAllSessionCosts, getSessionCostsFiltered, UNATTRIBUTED_USER_ID, getSessionCostSummary, getAttributionByPerson, getDashboardCostSummary, createInboxMessage, getInboxMessageById, getUnreadInboxMessages, claimInboxMessages, markInboxMessageRead, markInboxMessageResponded, markInboxMessageDelegated, releaseStaleProcessingInbox, getConcurrentContext, getScheduledTasks, getScheduledTaskById, getScheduledTaskByName, createScheduledTask, updateScheduledTask, deleteScheduledTask, getDueScheduledTasks, autoEncryptLegacyPlaintextSecrets, maskSecrets, getSwarmConfigs, getInjectableGlobalConfigs, getSwarmConfigById, getSwarmConfigLookupById, upsertSwarmConfig, emitBuiltInIntegrationConnectedOnce, deleteSwarmConfig, deleteSwarmConfigByKey, getResolvedConfig, getSwarmRepos, getSwarmRepoById, getSwarmRepoByName, getSwarmRepoByUrl, createSwarmRepo, updateSwarmRepo, deleteSwarmRepo, getAgentMailInboxMapping, getAgentMailInboxMappingsByAgent, getAllAgentMailInboxMappings, createAgentMailInboxMapping, deleteAgentMailInboxMapping, findTaskByAgentMailThread, insertActiveSession, deleteActiveSession, deleteActiveSessionById, getActiveSessions, heartbeatActiveSession, cleanupStaleSessions, cleanupAgentSessions, updateActiveSessionProviderSessionId, getActiveSessionForTask, reassociateSessionLogs, getStalledInProgressTasks, getStalePinnedResumes, failPendingResumeIfUnclaimed, getIdleWorkersWithCapacity, getUnassignedPoolTasks, getStaleUnassignedAffinityTasks, getRecentFailedTasks, getRecentCompletedCount, getRecentFailedCount, createWorkflow, getWorkflow, listWorkflows, updateWorkflow, deleteWorkflow, getWorkflowsByScheduleId, createWorkflowRun, getWorkflowRun, updateWorkflowRun, listWorkflowRuns, countWorkflowRuns, listWorkflowRunsPage, createWorkflowRunStep, getWorkflowRunStep, updateWorkflowRunStep, getWorkflowRunStepsByRunId, getStuckWorkflowRuns, getLastSuccessfulRun, getLastRunStart, getRetryableSteps, getCompletedStepNodeIds, getTaskByWorkflowRunStepId, detachTaskFromWorkflowRunStep, getStepByIdempotencyKey, getStepCountForNode, getLatestStepForNode, getCurrentStepForNode, createWorkflowVersion, getWorkflowVersions, getWorkflowVersion, createAppVersion, getAppVersions, getAppVersion, createPage, getPage, getPageBySlug, getLatestPageBySlug, listPagesByAgent, listAllPages, countAllPages, countPagesByAgent, updatePage, deletePage, incrementPageViewCount, createPageVersion, getPageVersions, getPageVersion, createMetric, getMetric, getMetricBySlug, listMetricsByAgent, listAllMetrics, countAllMetrics, countMetricsByAgent, updateMetric, deleteMetric, createMetricVersion, getMetricVersions, getMetricVersion, getPromptTemplates, getPromptTemplateById, upsertPromptTemplate, deletePromptTemplate, resetPromptTemplateToDefault, getPromptTemplateHistory, resolvePromptTemplate, checkoutPromptTemplate, getAllChannelActivityCursors, getChannelActivityCursor, upsertChannelActivityCursor, createApprovalRequest, getApprovalRequestById, resolveApprovalRequest, cancelApprovalRequestById, cancelPendingApprovalRequestsForRun, listCancelledApprovalRequestsForRun, listCancelledApprovalRequestsForStep, claimApprovalCancellationNotification, completeApprovalCancellationNotificationClaim, releaseApprovalCancellationNotificationClaim, updateApprovalRequestNotifications, listApprovalRequests, getStuckApprovalRuns, getApprovalRequestByStepId, getExpiredPendingApprovals, getStaleApprovalRequests, createWaitState, getWaitStateById, getWaitStateByStepId, getDueWaitStates, getPendingEventWaitNames, getPendingWaitsByEvent, resolveWaitState, getStuckWaitRuns, SKILL_FILE_LIMITS, normalizeSkillFilePath, createSkill, updateSkill, listSkillFileManifest, getSkillFiles, getSkillFile, upsertSkillFile, upsertSkillFiles, deleteSkillFile, deleteSkill, getSkillById, getSkillByName, listSkills, searchSkills, installSkill, getSystemDefaultSkills, installSystemDefaultSkillsForAgent, uninstallSkill, getAgentSkills, toggleAgentSkill, createMcpServer, emitMcpServerConnectedTelemetry, updateMcpServer, deleteMcpServer, getMcpServerById, getMcpServerByName, listMcpServers, installMcpServer, uninstallMcpServer, getAgentMcpServers, createContextSnapshot, getContextSnapshotsByTaskId, getContextSnapshotsBySessionId, getContextSummaryByTaskId, getAvailableKeyIndices, recordKeyUsage, setApiKeyPlan, markKeyRateLimited, recordKeyAuthFailure, recordKeyRateLimitWindows, setApiKeyName, clearKeyRateLimit, getKeyStatuses, getKeyCostSummary, getUserById, getAllUsers, createUser, updateUser, deleteUser, listInboxState, upsertInboxState, listFavorites, listUserFavorites, getFavoriteItemIdSet, setFavorite, setUserFavorite, withFavoriteFlags, listTaskTemplates, getRootTaskChain, listRecentSessions, countSessions, getBudget, getBudgets, upsertBudget, deleteBudget, getAllPricingRows, getPricingRows, getActivePricingRow, insertPricingRow, deletePricingRow, getDailySpendForAgent, getDailySpendGlobal, getDailySpendForUser, recordBudgetRefusalNotification, getBudgetRefusalNotification, getRecentBudgetRefusalNotifications, hasBudgetRefusalNotificationToday, setBudgetRefusalFollowUpTaskId, getLiveAgentCounts, getReadyAgentCounts, getInstanceActivity, getSwarmMetrics, hasFirstCompletedTask, getKv, sweepExpiredKv, sweepExpiredKvPrefix, upsertKv, claimKv, deleteKv, KvTypeCollisionError, incrKv, kvPrefixUpperBound, listKv, countKv, createScriptRun, recordInlineScriptRun, getScriptRun, getScriptRunByIdempotencyKey, listScriptRuns, countScriptRuns, countActiveScriptRuns, updateScriptRun, updateScriptRunIfNotTerminal, updateScriptRunIfRunning, getRunningScriptRuns, getScriptRunJournalStep, upsertScriptRunJournalStep, listScriptRunJournalSteps, countScriptRunJournalSteps, countScriptRunJournalAgentTaskSteps, exports_db, init_db2 as init_db1 };