@desplega.ai/agent-swarm 2.7.4 → 2.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/README.md +1 -1
  2. package/dist/acp-adapter-bp91d37f.js +15 -0
  3. package/dist/{actions-gfrr9vb7.js → actions-yj0eeaqh.js} +19 -18
  4. package/dist/{amp-adapter-0s58gm46.js → amp-adapter-4pg9h34q.js} +3 -3
  5. package/dist/{app-stvq692g.js → app-909e97cr.js} +3 -3
  6. package/dist/{assistant-5s37fr9n.js → assistant-qdyb5fyy.js} +32 -23
  7. package/dist/{boot-reembed-yzy1841n.js → boot-reembed-fk0s9z18.js} +1 -1
  8. package/dist/{boot-reembed-cv82gz7y.js → boot-reembed-gs1rzrnh.js} +1 -1
  9. package/dist/{boot-scrub-sweep-8k4q95ap.js → boot-scrub-sweep-4qfd4kfx.js} +4 -4
  10. package/dist/{boot-seeds-ftt9htah.js → boot-seeds-yr00k13d.js} +4 -4
  11. package/dist/{boxd-515v1t8z.js → boxd-vdmfssd9.js} +5 -5
  12. package/dist/{claude-adapter-t00wrzeh.js → claude-adapter-qta1f1xn.js} +7 -7
  13. package/dist/{claude-managed-adapter-g6vmjccb.js → claude-managed-adapter-dvs2xw5n.js} +2 -2
  14. package/dist/{claude-managed-setup-afpa82f7.js → claude-managed-setup-sc6j4dm0.js} +3 -3
  15. package/dist/{claude-sdk-session-vj0c2azx.js → claude-sdk-session-zgrz6yvc.js} +9175 -9076
  16. package/dist/{cli-gjr2y2xk.js → cli-0agcv1v5.js} +4 -1
  17. package/dist/{cli-edmm9d9y.js → cli-0at8w34w.js} +7 -7
  18. package/dist/{cli-a81qevyg.js → cli-0qatpy8q.js} +20 -36
  19. package/dist/{cli-bcz074zx.js → cli-0yv5z2pg.js} +1 -1
  20. package/dist/{cli-a4btqqft.js → cli-1b7btd38.js} +1 -1
  21. package/dist/{cli-a2jw6ee5.js → cli-1p89xny0.js} +1 -1
  22. package/dist/{cli-v726afdm.js → cli-2pnswgh8.js} +1 -1
  23. package/dist/{cli-jkt52mgt.js → cli-386tyxxg.js} +2 -2
  24. package/dist/{cli-az0bpf8p.js → cli-3ypk9vk1.js} +3 -3
  25. package/dist/{cli-wk9md5px.js → cli-436532ck.js} +4 -4
  26. package/dist/{cli-7n5sbw0z.js → cli-4necwtsv.js} +5 -5
  27. package/dist/cli-54t00gt8.js +151 -0
  28. package/dist/{cli-655xm9ms.js → cli-583frbyr.js} +1 -1
  29. package/dist/{cli-4r12t6w6.js → cli-5c4hjzne.js} +101 -4
  30. package/dist/{cli-hf6zt5m6.js → cli-69szn7w7.js} +17 -1
  31. package/dist/{cli-rtk9g7av.js → cli-73jzwksr.js} +6 -2
  32. package/dist/{cli-jg0nfda6.js → cli-75gkpjvw.js} +52 -21
  33. package/dist/{cli-wcmnan2g.js → cli-89knwags.js} +5 -5
  34. package/dist/{cli-pwyevs29.js → cli-8bc1w0tw.js} +22 -21
  35. package/dist/{cli-t282jgab.js → cli-8snvgs5r.js} +41 -16
  36. package/dist/{cli-vqgnyh76.js → cli-98rw5dt5.js} +15 -3
  37. package/dist/{cli-9cctx1tn.js → cli-a22h291q.js} +1 -1
  38. package/dist/{cli-ycm6180s.js → cli-a7v854rf.js} +5 -3
  39. package/dist/{cli-98pke4vk.js → cli-ae7mrdf9.js} +2 -2
  40. package/dist/{cli-je8yeyc5.js → cli-bjb3z51z.js} +5 -5
  41. package/dist/{cli-mc97xy2s.js → cli-c60vetmm.js} +16 -4
  42. package/dist/{cli-j4kw3rsx.js → cli-cm5yqn35.js} +18 -0
  43. package/dist/{cli-wndv9p7g.js → cli-decfb6v8.js} +6 -6
  44. package/dist/{cli-h55y2bjc.js → cli-dhar9qay.js} +2 -2
  45. package/dist/{cli-8yy525ad.js → cli-drr5v6av.js} +2 -2
  46. package/dist/{cli-5gr1g711.js → cli-dxae2yg7.js} +2 -2
  47. package/dist/{cli-pe09p6dv.js → cli-e3r2neck.js} +8 -7
  48. package/dist/{cli-13jvmew3.js → cli-ekwks2vs.js} +7 -7
  49. package/dist/{cli-jg4p5t36.js → cli-es6va8jk.js} +121 -51
  50. package/dist/{cli-j4kt1mpb.js → cli-faxe6thg.js} +3 -3
  51. package/dist/{cli-tzrpv5sc.js → cli-ftyxyspd.js} +1 -1
  52. package/dist/cli-fw2w0kva.js +47 -0
  53. package/dist/{cli-2dfbv8qr.js → cli-fy6x31ps.js} +1 -0
  54. package/dist/{cli-aq58fk5m.js → cli-g83s9ewh.js} +7 -1
  55. package/dist/cli-gdhpcbhf.js +55 -0
  56. package/dist/{cli-82jg7fp9.js → cli-he5nxaa8.js} +1 -1
  57. package/dist/{cli-8veytvbh.js → cli-he9wchme.js} +1 -1
  58. package/dist/{cli-k76tgq03.js → cli-hgaazk69.js} +2 -2
  59. package/dist/{cli-d2pzqej1.js → cli-hr2e2fft.js} +741 -7
  60. package/dist/{cli-dae4sbgy.js → cli-jm2vfpfd.js} +2 -2
  61. package/dist/{cli-1s1dqn1j.js → cli-k2gzwsj2.js} +297 -140
  62. package/dist/{cli-b1afgtj3.js → cli-kqdg1bsb.js} +3 -3
  63. package/dist/cli-m2z8jagn.js +12078 -0
  64. package/dist/{cli-mvckssyq.js → cli-m48g6p95.js} +5 -5
  65. package/dist/{cli-bwty35gx.js → cli-mthwvjre.js} +1 -1
  66. package/dist/{cli-41z8xwj0.js → cli-nhrvpaj7.js} +34 -8
  67. package/dist/{cli-ahd90bwt.js → cli-nwj0ee2w.js} +6 -6
  68. package/dist/{cli-kvtc7aez.js → cli-p5gp8pcx.js} +44 -14
  69. package/dist/{cli-avgcz4ra.js → cli-pd7vagab.js} +436 -171
  70. package/dist/{cli-zn15c46z.js → cli-q0k1w5zd.js} +1 -1
  71. package/dist/{cli-bq2pcphn.js → cli-rmmmrjkd.js} +1 -1
  72. package/dist/{cli-2qpvmmkw.js → cli-s0qnd4wv.js} +1 -1
  73. package/dist/{cli-kg8hchyg.js → cli-sa02jsqt.js} +1 -1
  74. package/dist/{cli-1yekbyqm.js → cli-shpbx5ee.js} +283 -82
  75. package/dist/{cli-9y354g3j.js → cli-srye3vdt.js} +1 -1
  76. package/dist/{cli-byqfbnjw.js → cli-svj5090z.js} +9 -9
  77. package/dist/{cli-gcbdjt47.js → cli-vfym7wmz.js} +6 -6
  78. package/dist/{cli-v1yw3wha.js → cli-vvpx3gsx.js} +4 -4
  79. package/dist/{cli-a1fhj4n9.js → cli-w6dt9ged.js} +2 -2
  80. package/dist/{cli-1gm8jcyr.js → cli-waqbxg08.js} +5232 -68
  81. package/dist/{cli-5hjced2v.js → cli-wp9sp1qb.js} +6 -6
  82. package/dist/{cli-eny54typ.js → cli-wx3rhnm0.js} +1 -1
  83. package/dist/{cli-s0exq74r.js → cli-xbbndvjy.js} +3 -3
  84. package/dist/{cli-f255yaqn.js → cli-xds5f77d.js} +3 -3
  85. package/dist/{cli-0sbkss7h.js → cli-xnqgpshy.js} +2 -2
  86. package/dist/{cli-0fgr1w9b.js → cli-xnrwazav.js} +20 -3
  87. package/dist/{cli-gf5hbmdr.js → cli-yjdgea32.js} +3 -3
  88. package/dist/{cli-cq1pf336.js → cli-yn4kxs06.js} +124 -11
  89. package/dist/{cli-224epwwf.js → cli-yx4kfngt.js} +3 -3
  90. package/dist/{cli-eqx6k993.js → cli-yy3rhsdw.js} +47 -13
  91. package/dist/{cli-36g23z21.js → cli-zbbwez0r.js} +4 -4
  92. package/dist/{cli-ktmvb20s.js → cli-zm72anhg.js} +12 -12
  93. package/dist/cli.js +26 -25
  94. package/dist/{codex-adapter-g0gctw29.js → codex-adapter-ayd1fb6h.js} +5 -5
  95. package/dist/{codex-hook-vrzz2xhr.js → codex-hook-9efm2x1m.js} +1 -1
  96. package/dist/{codex-login-0gg46ygn.js → codex-login-y0pmff1c.js} +1 -1
  97. package/dist/{codex-session-runner-dr2cxe1c.js → codex-session-runner-jesa32xc.js} +6 -6
  98. package/dist/{commands-1p07cvff.js → commands-hanewgf2.js} +9 -3
  99. package/dist/{controller-z0s7sv6r.js → controller-dt1n3c1q.js} +9 -4
  100. package/dist/{controllers-connect-x9kvvhyk.js → controllers-connect-xx8x64n5.js} +22 -21
  101. package/dist/{cursor-adapter-m5b98pvk.js → cursor-adapter-9s4dwwdw.js} +2 -2
  102. package/dist/{db-capk2raj.js → db-3vttcbv4.js} +3 -3
  103. package/dist/{db-rsh04kh3.js → db-9dv0g1ab.js} +12 -4
  104. package/dist/{devin-adapter-yxm87fe9.js → devin-adapter-r9phbnc9.js} +1 -1
  105. package/dist/{devtools-82fzqra8.js → devtools-qxfgbsqz.js} +1 -1
  106. package/dist/{dispatcher-304q6fwa.js → dispatcher-tx9hd1sv.js} +18 -17
  107. package/dist/{docker-7rxt0rry.js → docker-c1a3gqmf.js} +91 -24
  108. package/dist/{dsh-adapter-btewem0y.js → dsh-adapter-007y4ejs.js} +2 -2
  109. package/dist/{e2b-renc0k8q.js → e2b-a19d28rz.js} +4 -4
  110. package/dist/{e2b-7fc9b9bd.js → e2b-we6hs6q5.js} +6 -6
  111. package/dist/{easter-egg-3d-fm1p3n4d.js → easter-egg-3d-rgbrqb8s.js} +1 -1
  112. package/dist/{embedding-space-s68v49ct.js → embedding-space-ny1e2940.js} +6 -6
  113. package/dist/{embeddings-4ms3604w.js → embeddings-2t386t13.js} +1 -1
  114. package/dist/{event-bus-dfjx2qdh.js → event-bus-g0ka3pbw.js} +1 -1
  115. package/dist/{execute-mcdgccjs.js → execute-pksh0ceh.js} +1 -1
  116. package/dist/{external-channel-9dxwfztn.js → external-channel-phgmhmd7.js} +2 -2
  117. package/dist/fx-adapter-fy8rr921.js +18 -0
  118. package/dist/{google-generative-ai-yvmdxyxa.js → google-generative-ai-8y3m3k4b.js} +1 -1
  119. package/dist/{google-vertex-jrtdh9gs.js → google-vertex-w3v98n7b.js} +1 -1
  120. package/dist/{grok-adapter-05ecv4h0.js → grok-adapter-q0abvpaj.js} +8 -8
  121. package/dist/handlers-by3sfxyx.js +32 -0
  122. package/dist/{heartbeat-3n94heh3.js → heartbeat-kadyek8p.js} +21 -20
  123. package/dist/{hook-aadrn69x.js → hook-5zs3msf6.js} +6 -6
  124. package/dist/{hook-zxwje86c.js → hook-9k551xnj.js} +4 -4
  125. package/dist/{http-xzxk9mst.js → http-mhz9vw1f.js} +272 -103
  126. package/dist/index-4f2pvxae.js +37 -0
  127. package/dist/index-98gz7tmp.js +30 -0
  128. package/dist/{index-5rk6rfzr.js → index-fvzke5kx.js} +1 -1
  129. package/dist/index-k08z2cak.js +33 -0
  130. package/dist/{index-yqhz88yy.js → index-pxn30mse.js} +8 -8
  131. package/dist/{index-d34f6r87.js → index-q361cg2f.js} +1 -1
  132. package/dist/{index-9j4zwcht.js → index-rvr00sg7.js} +168 -675
  133. package/dist/{index-qeb82z37.js → index-vdygbq10.js} +1 -1
  134. package/dist/{keepalive-w4aakbyk.js → keepalive-w56f32cg.js} +4 -4
  135. package/dist/lead-enq35nqp.js +70 -0
  136. package/dist/{maintenance-hbptpk6p.js → maintenance-7mdgxcea.js} +1 -1
  137. package/dist/{oauth-refresh-sweep-217semrv.js → oauth-refresh-sweep-29txy9vk.js} +3 -3
  138. package/dist/{onboard-vz2s5df3.js → onboard-kpsrkarj.js} +5 -5
  139. package/dist/{opencode-adapter-gtfd7d7v.js → opencode-adapter-j25vm3rr.js} +5 -5
  140. package/dist/{otel-impl-aefave37.js → otel-impl-6kkct7a8.js} +2 -2
  141. package/dist/{pi-mono-adapter-f8h5yseh.js → pi-mono-adapter-exhkzhn2.js} +117 -23
  142. package/dist/{pricing-refresh-m1yhh9ya.js → pricing-refresh-n2x7jh6k.js} +3 -3
  143. package/dist/{rbac-roles-rrw8twdz.js → rbac-roles-81ypx6es.js} +1 -1
  144. package/dist/{rbac-roles-svj72cdf.js → rbac-roles-b5htkjby.js} +2 -2
  145. package/dist/{render-v2-amwbnfxh.js → render-v2-qn6jmpk4.js} +3 -3
  146. package/dist/{resume-9cd6wf6z.js → resume-wd30wx23.js} +7 -7
  147. package/dist/{runtime-fp4vrx7m.js → runtime-4hsg7h60.js} +1 -1
  148. package/dist/{session-access-21t6yjyg.js → session-access-5qvfevhk.js} +4 -4
  149. package/dist/{session-source-backfill-pxbzcsc6.js → session-source-backfill-n1czavbr.js} +3 -3
  150. package/dist/{setup-4592tqz4.js → setup-dnb56qy5.js} +3 -3
  151. package/dist/{virtual-modules-gzfnpmnz.js → virtual-modules-76xxv9fs.js} +2 -2
  152. package/dist/{work-objects-t9tcf174.js → work-objects-4n21tfkm.js} +21 -20
  153. package/dist/{worker-follow-up-q32jh4yk.js → worker-follow-up-77hvzxww.js} +18 -17
  154. package/dist/worker-gg1576j3.js +70 -0
  155. package/dist/{x-b6wxntdt.js → x-vmmye1kb.js} +2 -2
  156. package/openapi.json +189 -32
  157. package/package.json +8 -7
  158. package/src/be/db/script-runs.ts +23 -0
  159. package/src/be/db/session-summaries.ts +8 -2
  160. package/src/be/db/session-tree.ts +174 -61
  161. package/src/be/db/session-visibility.ts +5 -4
  162. package/src/be/db/tasks/read.ts +122 -3
  163. package/src/be/db-client.ts +8 -5
  164. package/src/be/db.ts +23 -8
  165. package/src/be/memory/providers/sqlite-store.ts +49 -12
  166. package/src/be/migrations/259_session_summaries_open_tasks.sql +111 -0
  167. package/src/be/migrations/260_runtime_pool_cache.sql +20 -0
  168. package/src/be/migrations/262_session_visibility_indexes.sql +18 -0
  169. package/src/be/migrations/263_task_list_filter_index.sql +11 -0
  170. package/src/be/migrations/264_slack_thread_cover_index.sql +9 -0
  171. package/src/be/migrations/266_script_runs_source_task.sql +11 -0
  172. package/src/be/model-validation.ts +5 -1
  173. package/src/be/pricing-normalize.ts +7 -2
  174. package/src/be/runtime-pools/cache-cleanup.ts +109 -0
  175. package/src/be/runtime-pools/db.ts +65 -6
  176. package/src/be/runtime-pools/remote-controller.ts +5 -0
  177. package/src/be/runtime-pools/supervisor.ts +33 -2
  178. package/src/be/scripts/typecheck.ts +23 -0
  179. package/src/be/seed/schedules-seeder.ts +135 -9
  180. package/src/be/seed/workflows-seeder.ts +65 -1
  181. package/src/be/seed-pricing.ts +23 -0
  182. package/src/be/seed-scripts/catalog/task-failure-audit.ts +5 -1
  183. package/src/be/steering.ts +50 -3
  184. package/src/be/swarm-config-guard.ts +1 -0
  185. package/src/commands/controller.ts +4 -0
  186. package/src/commands/entrypoint-api-readiness.ts +74 -0
  187. package/src/commands/provider-credentials.ts +29 -2
  188. package/src/commands/runner.ts +86 -5
  189. package/src/extensions/contract-types.generated.ts +1 -1
  190. package/src/extensions/contract.ts +27 -1
  191. package/src/extensions/dispatcher.ts +4 -0
  192. package/src/http/agents.ts +1 -0
  193. package/src/http/index.ts +1 -1
  194. package/src/http/list-total-cache.ts +14 -7
  195. package/src/http/mcp-bridge.ts +4 -0
  196. package/src/http/memory.ts +38 -9
  197. package/src/http/script-runs.ts +174 -5
  198. package/src/http/status.ts +10 -2
  199. package/src/http/tasks.ts +4 -2
  200. package/src/integrations/chat-sdk/inbound.ts +15 -5
  201. package/src/integrations/chat-sdk/steering.ts +3 -1
  202. package/src/kv-reserved-namespaces.ts +2 -0
  203. package/src/prompts/base-prompt.ts +4 -1
  204. package/src/prompts/session-templates.ts +26 -0
  205. package/src/providers/acp-adapter.ts +190 -26
  206. package/src/providers/acp-targets.ts +306 -6
  207. package/src/providers/amp-adapter.ts +1 -1
  208. package/src/providers/codex-adapter.ts +9 -44
  209. package/src/providers/codex-oauth/flow.ts +24 -3
  210. package/src/providers/codex-oauth/storage.ts +56 -17
  211. package/src/providers/codex-oauth/subscription.ts +67 -0
  212. package/src/providers/fx-adapter.ts +211 -0
  213. package/src/providers/index.ts +5 -1
  214. package/src/providers/mcp-loopback-proxy.ts +94 -0
  215. package/src/providers/pi-mono-adapter.ts +98 -13
  216. package/src/providers/pricing-sources.md +8 -0
  217. package/src/providers/reasoning-effort.ts +17 -1
  218. package/src/providers/types.ts +2 -1
  219. package/src/runtime-providers/controller-protocol.ts +14 -1
  220. package/src/runtime-providers/controller.ts +5 -0
  221. package/src/runtime-providers/docker.ts +108 -23
  222. package/src/runtime-providers/types.ts +16 -0
  223. package/src/scheduler/scheduler.ts +36 -3
  224. package/src/script-workflows/workflow-ctx.ts +8 -0
  225. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  226. package/src/scripts-runtime/types/stdlib.d.ts +27 -0
  227. package/src/scripts-runtime/types/swarm-extension.d.ts +33 -0
  228. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -0
  229. package/src/server-user.ts +1 -0
  230. package/src/server.ts +7 -0
  231. package/src/slack/assistant.ts +17 -1
  232. package/src/slack/commands.ts +5 -1
  233. package/src/slack/handlers.ts +53 -5
  234. package/src/slack/left-threads.ts +88 -0
  235. package/src/slack/steering.ts +3 -0
  236. package/src/slack/thread-buffer.ts +40 -16
  237. package/src/tasks/follow-up-redelegation-guard.ts +155 -0
  238. package/src/tests/acp-adapter.test.ts +79 -0
  239. package/src/tests/base-prompt.test.ts +12 -0
  240. package/src/tests/chat-sdk-inbound.test.ts +30 -0
  241. package/src/tests/chatgpt-subscription-model-groups.test.ts +62 -0
  242. package/src/tests/chatgpt-subscription-pi.test.ts +170 -0
  243. package/src/tests/chatgpt-subscription-session-bench.test.ts +198 -0
  244. package/src/tests/claude-artifacts-read-script.test.ts +209 -0
  245. package/src/tests/codex-oauth-credential-info.test.ts +40 -0
  246. package/src/tests/codex-oauth-refresh-egress.test.ts +194 -0
  247. package/src/tests/context-window.test.ts +7 -0
  248. package/src/tests/db-client.test.ts +21 -0
  249. package/src/tests/db-task-read-contract.test.ts +8 -2
  250. package/src/tests/db-task-write-contract.test.ts +5 -1
  251. package/src/tests/entrypoint-api-readiness.test.ts +416 -210
  252. package/src/tests/explicit-model-validation.test.ts +113 -8
  253. package/src/tests/extensions-run-context.test.ts +11 -0
  254. package/src/tests/extensions-steering.test.ts +353 -0
  255. package/src/tests/extensions-validate.test.ts +5 -0
  256. package/src/tests/fixtures/extensions/steering-policy/hooks.ts +39 -0
  257. package/src/tests/fixtures/extensions/steering-policy/manifest.json +7 -0
  258. package/src/tests/fixtures/fake-fx.ts +167 -0
  259. package/src/tests/fixtures/fx/acp-responses-recorded.json +157 -0
  260. package/src/tests/fixtures/fx/acp-updates-recorded.jsonl +15 -0
  261. package/src/tests/follow-up-redelivery-guard.test.ts +432 -202
  262. package/src/tests/fx-adapter.test.ts +771 -0
  263. package/src/tests/grok-adapter.test.ts +36 -0
  264. package/src/tests/list-total-cache.test.ts +27 -2
  265. package/src/tests/mcp-loopback-proxy.test.ts +193 -0
  266. package/src/tests/memory-fts-populate.test.ts +11 -9
  267. package/src/tests/memory-retrieval-purge.test.ts +80 -0
  268. package/src/tests/migration-260-runtime-pool-cache.test.ts +118 -0
  269. package/src/tests/model-tier-resolution.test.ts +3 -3
  270. package/src/tests/pricing-refresh.test.ts +5 -5
  271. package/src/tests/prompt-template-session.test.ts +5 -3
  272. package/src/tests/provider-registration.test.ts +2 -1
  273. package/src/tests/query-audit-plans.test.ts +30 -2
  274. package/src/tests/runtime-cache-cleanup.test.ts +367 -0
  275. package/src/tests/runtime-e2b-pools.test.ts +41 -0
  276. package/src/tests/runtime-pools-db.test.ts +98 -0
  277. package/src/tests/runtime-pools-http.test.ts +29 -0
  278. package/src/tests/runtime-providers-docker.test.ts +253 -0
  279. package/src/tests/runtime-remote-controller.test.ts +66 -2
  280. package/src/tests/runtime-supervisor.test.ts +66 -2
  281. package/src/tests/script-connections.test.ts +13 -0
  282. package/src/tests/script-runs-http.test.ts +684 -2
  283. package/src/tests/seed-model-profiles.test.ts +2 -2
  284. package/src/tests/seed-schedules.test.ts +138 -0
  285. package/src/tests/seed-scripts.test.ts +26 -0
  286. package/src/tests/session-cost-recompute-unit.test.ts +39 -0
  287. package/src/tests/session-costs-golden.test.ts +26 -0
  288. package/src/tests/session-summaries-plans.test.ts +120 -0
  289. package/src/tests/session-summaries.test.ts +72 -12
  290. package/src/tests/sessions-tree.test.ts +11 -3
  291. package/src/tests/slack-leave-thread.test.ts +571 -0
  292. package/src/tests/slack-render-v2-query-plans.test.ts +24 -2
  293. package/src/tests/status.test.ts +11 -0
  294. package/src/tests/tasks-readable-row.test.ts +155 -0
  295. package/src/tests/tool-annotations.test.ts +2 -1
  296. package/src/tests/workflow-engine-v2.test.ts +42 -0
  297. package/src/tests/workflow-script-principal.test.ts +207 -7
  298. package/src/tools/send-task.ts +35 -47
  299. package/src/tools/slack-leave-thread.ts +104 -0
  300. package/src/tools/steer-task.ts +3 -2
  301. package/src/tools/task-dedup.ts +45 -21
  302. package/src/tools/tool-config.ts +2 -1
  303. package/src/types.ts +57 -0
  304. package/src/utils/codex-auth-failure.ts +30 -0
  305. package/src/utils/context-window.ts +4 -1
  306. package/src/utils/credentials.ts +7 -0
  307. package/src/utils/fx-models.ts +43 -0
  308. package/src/workflows/cooldown.ts +3 -2
  309. package/src/workflows/engine.ts +24 -9
  310. package/templates/schedules/dreaming-daily/config.json +1 -1
  311. package/templates/schedules/dreaming-daily/content.md +6 -14
  312. package/templates/skills/composio-google-docs/content.md +10 -0
  313. package/templates/skills/script-workflows/content.md +19 -1
  314. package/templates/skills/swarm-docs/content.md +2 -0
  315. package/templates/skills/swarm-scripts/SKILL.md +2 -0
  316. package/templates/skills/swarm-scripts/content.md +2 -0
  317. package/templates/workflows/dreaming/content.md +5 -1
  318. package/dist/acp-adapter-96dc64m2.js +0 -15
  319. package/dist/cli-dznrgaep.js +0 -30
  320. package/dist/cli-w3hcrxht.js +0 -6985
  321. package/dist/handlers-jg7v74ty.js +0 -31
  322. package/dist/index-8c1zbz59.js +0 -29
  323. package/dist/index-8k8tmfxd.js +0 -32
  324. package/dist/index-hq617xdj.js +0 -36
  325. package/dist/lead-567kw7x3.js +0 -68
  326. package/dist/worker-fjdqra6q.js +0 -68
@@ -91,7 +91,9 @@ import {
91
91
  getAgentWorkingOnContextKey2,
92
92
  getLatestActiveTaskByContextKey2,
93
93
  getLatestLeadTaskByContextKey2,
94
- findCompletedTaskInThread2,
94
+ findCompletedTasksInThread2,
95
+ findRecentFailedTaskInThread2,
96
+ countAgentDispatchesInThread2,
95
97
  findRecentCancelledTaskInThread2,
96
98
  init_read,
97
99
  listModelProfiles,
@@ -165,11 +167,6 @@ import {
165
167
  touchScratchScriptLastUsed,
166
168
  restoreScratchScriptLastUsedIfUnchanged,
167
169
  init_db3,
168
- SteeringRequestError,
169
- isSteeringEnabled,
170
- carryUnhandledSteering,
171
- requestSteering,
172
- init_steering2,
173
170
  getWorkflowRunTriggeredByAgentId,
174
171
  getWorkflowRunSummary,
175
172
  getWorkflowRunStepsSlimByRunId,
@@ -179,6 +176,12 @@ import {
179
176
  getRunningSubWorkflowSteps,
180
177
  getSettledChildRunParentSteps,
181
178
  init_workflow_runs,
179
+ SteeringRequestError,
180
+ SteeringBlockedError,
181
+ isSteeringEnabled,
182
+ carryUnhandledSteering,
183
+ requestSteering,
184
+ init_steering2,
182
185
  getPendingTaskForAgent2,
183
186
  startTask2,
184
187
  updateTaskClaudeSessionId2,
@@ -348,17 +351,17 @@ import {
348
351
  recordInlineScriptRun2,
349
352
  exports_db,
350
353
  init_db4
351
- } from "./cli-1s1dqn1j.js";
354
+ } from "./cli-k2gzwsj2.js";
352
355
  import {
353
356
  getUserGrant2,
354
357
  init_rbac_roles
355
- } from "./cli-bq2pcphn.js";
358
+ } from "./cli-rmmmrjkd.js";
356
359
  import {
357
360
  ensurePricingSeeded2,
358
361
  ensureRbacSeeded2,
359
362
  ensureModelProfilesSeeded2,
360
363
  init_boot_seeds
361
- } from "./cli-36g23z21.js";
364
+ } from "./cli-zbbwez0r.js";
362
365
  import {
363
366
  buildCatalogEntries,
364
367
  listModelCatalog,
@@ -370,11 +373,11 @@ import {
370
373
  requestModelCatalogRefresh2,
371
374
  startPricingRefreshLoop2,
372
375
  init_pricing_refresh
373
- } from "./cli-wcmnan2g.js";
376
+ } from "./cli-89knwags.js";
374
377
  import {
375
378
  workflowEventBus2,
376
379
  init_event_bus
377
- } from "./cli-eny54typ.js";
380
+ } from "./cli-wx3rhnm0.js";
378
381
  import {
379
382
  slackCode,
380
383
  slackMissingScopeMessage,
@@ -383,7 +386,7 @@ import {
383
386
  externalChannelToolError2,
384
387
  getChannelBlockReason2,
385
388
  init_external_channel
386
- } from "./cli-a1fhj4n9.js";
389
+ } from "./cli-w6dt9ged.js";
387
390
  import {
388
391
  noteSlackInboundSideEffect,
389
392
  init_inbound_dispatch,
@@ -418,7 +421,7 @@ import {
418
421
  startSlackApp2,
419
422
  stopSlackApp2,
420
423
  init_app3
421
- } from "./cli-1gm8jcyr.js";
424
+ } from "./cli-waqbxg08.js";
422
425
  import {
423
426
  shapeApprovalResolution,
424
427
  init_approval_resolution,
@@ -442,7 +445,7 @@ import {
442
445
  resumeFromChildRun2,
443
446
  initWaitBusSubscriptions2,
444
447
  init_resume
445
- } from "./cli-mvckssyq.js";
448
+ } from "./cli-m48g6p95.js";
446
449
  import {
447
450
  FilesError,
448
451
  providerPath,
@@ -456,7 +459,7 @@ import {
456
459
  import {
457
460
  getRuntimePool2,
458
461
  init_db2
459
- } from "./cli-cq1pf336.js";
462
+ } from "./cli-yn4kxs06.js";
460
463
  import {
461
464
  duplicateGuardedQueryKey,
462
465
  parseQueryParams,
@@ -489,19 +492,19 @@ import {
489
492
  findRoute,
490
493
  route,
491
494
  init_route_def
492
- } from "./cli-7n5sbw0z.js";
495
+ } from "./cli-4necwtsv.js";
493
496
  import {
494
497
  COMPOSIO_HTTP_METHODS,
495
498
  executeComposioRequest,
496
499
  composioArgsFromParts,
497
500
  init_composio
498
- } from "./cli-2qpvmmkw.js";
501
+ } from "./cli-s0qnd4wv.js";
499
502
  import {
500
503
  ampPinProviderError,
501
504
  ampPinCatalogError,
502
505
  ampModelError,
503
506
  init_amp_models
504
- } from "./cli-zn15c46z.js";
507
+ } from "./cli-q0k1w5zd.js";
505
508
  import {
506
509
  object,
507
510
  init_v4_mini
@@ -522,7 +525,7 @@ import {
522
525
  import {
523
526
  loadModelsDevCache,
524
527
  init_modelsdev_cache
525
- } from "./cli-mc97xy2s.js";
528
+ } from "./cli-c60vetmm.js";
526
529
  import {
527
530
  require_dist2,
528
531
  ConnectionAuthInputSchema,
@@ -562,6 +565,8 @@ import {
562
565
  init_import_allowlist,
563
566
  runScriptWithRunCredential,
564
567
  init_run_credential,
568
+ seededWorkflowState,
569
+ init_workflows_seeder,
565
570
  extractScriptSignature,
566
571
  init_extract_signature,
567
572
  extractArgsJsonSchema,
@@ -599,7 +604,7 @@ import {
599
604
  init_typecheck,
600
605
  parseSkillContent,
601
606
  init_skill_parser
602
- } from "./cli-d2pzqej1.js";
607
+ } from "./cli-hr2e2fft.js";
603
608
  import {
604
609
  detachedProcessGroup,
605
610
  registerProcessGroup,
@@ -614,7 +619,7 @@ import {
614
619
  ensureToken,
615
620
  ensureTokenOrThrow,
616
621
  init_ensure_token
617
- } from "./cli-0sbkss7h.js";
622
+ } from "./cli-xnqgpshy.js";
618
623
  import {
619
624
  require_fast_deep_equal
620
625
  } from "./cli-bhp11egn.js";
@@ -709,7 +714,7 @@ import {
709
714
  validateDefinition,
710
715
  applyDefinitionPatch,
711
716
  init_definition2
712
- } from "./cli-pwyevs29.js";
717
+ } from "./cli-8bc1w0tw.js";
713
718
  import {
714
719
  isMultiRuntimeEnabled,
715
720
  init_multi_runtime2
@@ -725,14 +730,20 @@ import {
725
730
  import {
726
731
  require_dist3
727
732
  } from "./cli-k28wkapa.js";
733
+ import {
734
+ SLACK_LEAVE_THREAD_DISABLE,
735
+ isSlackLeaveThreadDisabled,
736
+ leaveSlackThread,
737
+ init_left_threads
738
+ } from "./cli-gdhpcbhf.js";
728
739
  import {
729
740
  publicEndpointSsrfOptions,
730
741
  init_mcp_wrapper
731
- } from "./cli-k76tgq03.js";
742
+ } from "./cli-hgaazk69.js";
732
743
  import {
733
744
  canProvisionKind,
734
745
  init_runtime_providers
735
- } from "./cli-b1afgtj3.js";
746
+ } from "./cli-kqdg1bsb.js";
736
747
  import {
737
748
  findUserById,
738
749
  findUserByExternalId,
@@ -747,7 +758,7 @@ import {
747
758
  resolveSessionToken,
748
759
  fingerprintApiKey,
749
760
  init_users
750
- } from "./cli-8yy525ad.js";
761
+ } from "./cli-drr5v6av.js";
751
762
  import {
752
763
  isRbacEnabled,
753
764
  decideAdmission,
@@ -818,7 +829,7 @@ import {
818
829
  KvNamespaceSchema,
819
830
  KvKeySchema,
820
831
  init_types4
821
- } from "./cli-41z8xwj0.js";
832
+ } from "./cli-nhrvpaj7.js";
822
833
  import {
823
834
  generateDefaultClaudeMd2,
824
835
  generateDefaultSoulMd2,
@@ -829,7 +840,7 @@ import {
829
840
  init_task_attachment_links,
830
841
  contentSha256,
831
842
  init_profile_sync
832
- } from "./cli-ycm6180s.js";
843
+ } from "./cli-a7v854rf.js";
833
844
  import {
834
845
  getSlackConfiguration,
835
846
  init_config4
@@ -841,7 +852,7 @@ import {
841
852
  import {
842
853
  selectCredential,
843
854
  init_credentials2
844
- } from "./cli-aq58fk5m.js";
855
+ } from "./cli-g83s9ewh.js";
845
856
  import {
846
857
  findInterpolationTokens,
847
858
  interpolate,
@@ -851,7 +862,7 @@ import {
851
862
  init_registry3,
852
863
  resolveTemplate,
853
864
  init_resolver
854
- } from "./cli-j4kw3rsx.js";
865
+ } from "./cli-cm5yqn35.js";
855
866
  import {
856
867
  init_zod
857
868
  } from "./cli-k5671be5.js";
@@ -890,7 +901,7 @@ import {
890
901
  import {
891
902
  init_package,
892
903
  package_default
893
- } from "./cli-pe09p6dv.js";
904
+ } from "./cli-e3r2neck.js";
894
905
  import {
895
906
  realtimeBus,
896
907
  init_bus
@@ -925,8 +936,9 @@ import {
925
936
  registerVolatileSecret,
926
937
  registerSensitiveKeyName,
927
938
  init_secret_scrubber
928
- } from "./cli-a4btqqft.js";
939
+ } from "./cli-1b7btd38.js";
929
940
  import {
941
+ chatgptSubscriptionModelId,
930
942
  isAlias,
931
943
  parseAlias,
932
944
  resolveAlias,
@@ -939,7 +951,7 @@ import {
939
951
  openAICompatibleProviderIds,
940
952
  claudeCatalogModelId,
941
953
  init_src2
942
- } from "./cli-4r12t6w6.js";
954
+ } from "./cli-5c4hjzne.js";
943
955
  import {
944
956
  __toESM,
945
957
  __commonJS,
@@ -20308,6 +20320,9 @@ function isKnownCatalogModel(model, catalog) {
20308
20320
  const id = model.trim().replace(CONTEXT_SUFFIX_RE, "");
20309
20321
  if (!id)
20310
20322
  return false;
20323
+ const subscriptionId = chatgptSubscriptionModelId(id);
20324
+ if (subscriptionId)
20325
+ return hasModel(catalog, "openai", subscriptionId);
20311
20326
  const slash = id.indexOf("/");
20312
20327
  if (slash > 0) {
20313
20328
  const provider = id.slice(0, slash);
@@ -20864,7 +20879,7 @@ function startRetryPoller(registry, intervalMs = 5000) {
20864
20879
  if (!waiting)
20865
20880
  continue;
20866
20881
  if (result.waitFor === "workflow.child.finished") {
20867
- const { resumeFromChildRun } = await import("./resume-9cd6wf6z.js");
20882
+ const { resumeFromChildRun } = await import("./resume-wd30wx23.js");
20868
20883
  await resumeFromChildRun(step.id, registry);
20869
20884
  }
20870
20885
  } else {
@@ -21577,7 +21592,7 @@ var init_notify = __esm(() => {
21577
21592
  }
21578
21593
  }
21579
21594
  case "slack": {
21580
- const { getSlackApp } = await import("./app-stvq692g.js");
21595
+ const { getSlackApp } = await import("./app-909e97cr.js");
21581
21596
  const app = getSlackApp();
21582
21597
  if (!app) {
21583
21598
  return {
@@ -22886,7 +22901,7 @@ async function dispatchScheduleTarget(schedule, extraTags = []) {
22886
22901
  };
22887
22902
  const runId = await startWorkflowExecution2(workflow, triggerData, registry, {
22888
22903
  triggerType: "schedule",
22889
- triggeredByAgentId: schedule.createdByAgentId,
22904
+ triggeredByAgentId: await scheduledWorkflowPrincipal(schedule, workflow),
22890
22905
  requestedByUserId: schedule.createdBy
22891
22906
  });
22892
22907
  await throwIfWorkflowNeedsSetup(schedule.id, [runId]);
@@ -22919,6 +22934,23 @@ async function dispatchScheduleTarget(schedule, extraTags = []) {
22919
22934
  }
22920
22935
  }
22921
22936
  }
22937
+ async function scheduledWorkflowPrincipal(schedule, workflow) {
22938
+ if (schedule.createdByAgentId)
22939
+ return schedule.createdByAgentId;
22940
+ if (workflow.createdByAgentId)
22941
+ return;
22942
+ const seeded = await seededWorkflowState(workflow);
22943
+ if (seeded === "unseeded")
22944
+ return;
22945
+ if (seeded === "edited") {
22946
+ throw new Error(`Schedule "${schedule.name}" has no creator and the nodes or params of seeded workflow "${workflow.name}" were edited, so it will not run as the lead. Re-create the schedule as the agent it should run as.`);
22947
+ }
22948
+ const lead = await getLeadAgent2();
22949
+ if (!lead) {
22950
+ throw new Error(`Schedule "${schedule.name}" has no creator and the swarm has no lead to run its workflow as`);
22951
+ }
22952
+ return lead.id;
22953
+ }
22922
22954
  async function throwIfWorkflowNeedsSetup(scheduleId, runIds) {
22923
22955
  for (const runId of runIds) {
22924
22956
  const run = await getWorkflowRun2(runId);
@@ -23164,6 +23196,7 @@ var init_scheduler = __esm(() => {
23164
23196
  init_script_credential_broker();
23165
23197
  init_db3();
23166
23198
  init_run_credential();
23199
+ init_workflows_seeder();
23167
23200
  init_telemetry();
23168
23201
  init_workflows();
23169
23202
  init_engine();
@@ -24240,6 +24273,7 @@ var init_sdk_allowlist = __esm(() => {
24240
24273
  slack_downloadFile: "slack-download-file",
24241
24274
  slack_delete: "slack-delete",
24242
24275
  slack_update: "slack-update",
24276
+ slack_leaveThread: "slack-leave-thread",
24243
24277
  chat_reply: "chat-reply",
24244
24278
  chat_post: "chat-post",
24245
24279
  chat_openDm: "chat-open-dm",
@@ -24882,7 +24916,7 @@ function setPreloadedTools(server, names) {
24882
24916
  async function applyPreToolCall(name, args, requestInfo, inputSchema) {
24883
24917
  if (requestInfo.callOrigin !== "mcp")
24884
24918
  return { args };
24885
- const dispatcher = await import("./dispatcher-304q6fwa.js");
24919
+ const dispatcher = await import("./dispatcher-tx9hd1sv.js");
24886
24920
  const result = await dispatcher.dispatchPre("pre.tool.call", { tool: name, args, requestInfo }, inputSchema ? {
24887
24921
  validateModify: async (data) => {
24888
24922
  const schema = normalizeObjectSchema(inputSchema) ?? inputSchema;
@@ -26946,6 +26980,10 @@ function runContext2(event, payload) {
26946
26980
  agentId = stringField(payload, "workerAgentId");
26947
26981
  subject = `task ${stringField(payload, "completedTask", "id") ?? "?"} ${stringField(payload, "status") ?? ""}`.trim();
26948
26982
  break;
26983
+ case "pre.task.steer":
26984
+ agentId = stringField(payload, "sender", "agentId");
26985
+ subject = `${stringField(payload, "source") ?? "?"}: task ${stringField(payload, "task", "id") ?? "?"}`;
26986
+ break;
26949
26987
  case "pre.slack.route":
26950
26988
  case "post.slack.message":
26951
26989
  subject = `channel ${stringField(payload, "channelId") ?? "?"}: ${snippet(field(payload, "text"), 60)}`;
@@ -32356,7 +32394,7 @@ async function loadAdapter(name, config, logger) {
32356
32394
  });
32357
32395
  }
32358
32396
  case "slack": {
32359
- const { createSlackAdapter } = await import("./index-yqhz88yy.js");
32397
+ const { createSlackAdapter } = await import("./index-pxn30mse.js");
32360
32398
  return createSlackAdapter({
32361
32399
  ...base,
32362
32400
  signingSecret: config.signingSecret ?? "",
@@ -32375,7 +32413,7 @@ async function loadAdapter(name, config, logger) {
32375
32413
  });
32376
32414
  }
32377
32415
  case "teams": {
32378
- const { createTeamsAdapter } = await import("./index-5rk6rfzr.js");
32416
+ const { createTeamsAdapter } = await import("./index-fvzke5kx.js");
32379
32417
  const { teamsWebhookVerifier, teamsToken } = getChatSdkTestHooks();
32380
32418
  return createTeamsAdapter({
32381
32419
  ...base,
@@ -33980,6 +34018,8 @@ async function requestChatThreadSteering(args) {
33980
34018
  });
33981
34019
  return { task, result };
33982
34020
  } catch (error) {
34021
+ if (error instanceof SteeringBlockedError)
34022
+ throw error;
33983
34023
  const detail = error instanceof Error ? error.message : String(error);
33984
34024
  const what = error instanceof SteeringRequestError ? "was refused" : "failed";
33985
34025
  console.warn(scrubSecrets(`[chat-sdk] Steering task ${task.id} ${what} (${detail}); creating a follow-up task`));
@@ -34141,11 +34181,21 @@ async function handleChatInbound(thread, message, kind) {
34141
34181
  addressed = unaddressed;
34142
34182
  }
34143
34183
  if (!immediate && attachments.length === 0 && text && !isChatThreadBuffered(thread.id)) {
34144
- const steering = await requestChatThreadSteering({
34145
- contextKey: chatSdkContextKey(thread.id),
34146
- message: text,
34147
- resolveSender: () => resolveChatSender(adapter, message.author.userId)
34148
- });
34184
+ let steering;
34185
+ try {
34186
+ steering = await requestChatThreadSteering({
34187
+ contextKey: chatSdkContextKey(thread.id),
34188
+ message: text,
34189
+ resolveSender: () => resolveChatSender(adapter, message.author.userId)
34190
+ });
34191
+ } catch (error) {
34192
+ if (!(error instanceof SteeringBlockedError))
34193
+ throw error;
34194
+ console.info(`[chat-sdk] ${thread.id}: steering blocked: ${error.reason}`);
34195
+ stopTypingKeepalive(thread.id);
34196
+ await setChatMessageReaction(adapter, thread.id, message.id, "failed");
34197
+ return;
34198
+ }
34149
34199
  if (steering) {
34150
34200
  console.log(`[chat-sdk] ${adapter} message steered task ${steering.task.id} (${steering.result.outcome})`);
34151
34201
  await setChatMessageReaction(adapter, thread.id, message.id, "steered");
@@ -34488,6 +34538,7 @@ var init_inbound = __esm(() => {
34488
34538
  init_db4();
34489
34539
  init_session_labels();
34490
34540
  init_identity();
34541
+ init_steering2();
34491
34542
  init_unmapped_identities();
34492
34543
  init_dispatcher();
34493
34544
  init_resolver();
@@ -35830,7 +35881,7 @@ async function notifySlack(text) {
35830
35881
  return;
35831
35882
  }
35832
35883
  try {
35833
- const { getSlackApp } = await import("./app-stvq692g.js");
35884
+ const { getSlackApp } = await import("./app-909e97cr.js");
35834
35885
  const app = getSlackApp();
35835
35886
  if (!app) {
35836
35887
  console.warn("[Jira webhook keepalive] Slack not available, cannot send notification");
@@ -35901,7 +35952,7 @@ async function deleteJiraWebhook(webhookId) {
35901
35952
  console.log(`[Jira webhook keepalive] Deleted webhook id=${webhookId}`);
35902
35953
  }
35903
35954
  async function overwriteWebhookIds(next) {
35904
- const { getDbClient } = await import("./db-rsh04kh3.js");
35955
+ const { getDbClient } = await import("./db-9dv0g1ab.js");
35905
35956
  await getDbClient().transaction(async (tx) => {
35906
35957
  const row = await tx.get("SELECT metadata FROM oauth_apps WHERE provider = 'jira'");
35907
35958
  if (!row) {
@@ -109374,7 +109425,7 @@ async function reloadGlobalConfigsAndIntegrations() {
109374
109425
  return runWithoutRequestAuth(() => reloadGlobalConfigsAndIntegrationsInner());
109375
109426
  }
109376
109427
  async function reloadGlobalConfigsAndIntegrationsInner() {
109377
- const { getEmbeddingProvider, resetEmbeddingProvider } = await import("./index-qeb82z37.js");
109428
+ const { getEmbeddingProvider, resetEmbeddingProvider } = await import("./index-vdygbq10.js");
109378
109429
  const wasEmbeddingsConfigured = getEmbeddingProvider().isConfigured();
109379
109430
  const updated = await loadGlobalConfigsIntoEnv(true);
109380
109431
  await syncTelemetryEnabled("settings").catch((err) => {
@@ -109390,7 +109441,7 @@ async function reloadGlobalConfigsAndIntegrationsInner() {
109390
109441
  integrations.push("embeddings");
109391
109442
  }
109392
109443
  if (isEmbeddingsConfigured) {
109393
- import("./embedding-space-s68v49ct.js").then(({ runEmbeddingMaintenance }) => runEmbeddingMaintenance({ backfill: !wasEmbeddingsConfigured })).catch((err) => {
109444
+ import("./embedding-space-ny1e2940.js").then(({ runEmbeddingMaintenance }) => runEmbeddingMaintenance({ backfill: !wasEmbeddingsConfigured })).catch((err) => {
109394
109445
  console.error("[config-reload] embedding maintenance failed (non-fatal):", err);
109395
109446
  });
109396
109447
  }
@@ -119739,6 +119790,7 @@ var init_kv_reserved_namespaces = __esm(() => {
119739
119790
  ["heartbeat-checklist", "namespace is reserved for heartbeat checklist receipts"],
119740
119791
  ["worker", "namespace is reserved for worker nudges"],
119741
119792
  ["slack-external-alert", "namespace is reserved for Slack external channel alerts"],
119793
+ ["slack-left-thread", "namespace is reserved for left Slack threads; use slack-leave-thread"],
119742
119794
  [
119743
119795
  "session-labels",
119744
119796
  "namespace is reserved for session source labels; GET /api/session-tree returns them"
@@ -132687,10 +132739,27 @@ function jaccardSimilarity(a, b) {
132687
132739
  const union = new Set([...wordsA, ...wordsB]).size;
132688
132740
  return intersection / union;
132689
132741
  }
132742
+ function matchSimilarTask(existing, opts) {
132743
+ const similarity = jaccardSimilarity(existing.task, opts.taskDescription);
132744
+ if (similarity > HIGH_SIMILARITY_THRESHOLD) {
132745
+ return {
132746
+ task: existing,
132747
+ reason: `similar task description (${(similarity * 100).toFixed(0)}% match)`
132748
+ };
132749
+ }
132750
+ if (opts.targetAgentId && existing.agentId === opts.targetAgentId && similarity > SAME_AGENT_SIMILARITY_THRESHOLD) {
132751
+ return {
132752
+ task: existing,
132753
+ reason: `similar task to same agent (${(similarity * 100).toFixed(0)}% match)`
132754
+ };
132755
+ }
132756
+ return null;
132757
+ }
132690
132758
  async function findDuplicateTask(opts) {
132691
132759
  const recentTasks = await findRecentSimilarTasks2({
132692
132760
  creatorAgentId: opts.creatorAgentId,
132693
- windowMinutes: opts.windowMinutes ?? 10
132761
+ windowMinutes: opts.windowMinutes ?? 10,
132762
+ limit: DEDUP_SCAN_LIMIT
132694
132763
  });
132695
132764
  for (const existing of recentTasks) {
132696
132765
  if (opts.slackChannelId && opts.slackThreadTs && existing.slackChannelId === opts.slackChannelId && existing.slackThreadTs === opts.slackThreadTs) {
@@ -132699,25 +132768,77 @@ async function findDuplicateTask(opts) {
132699
132768
  reason: `same Slack thread (${opts.slackChannelId}/${opts.slackThreadTs})`
132700
132769
  };
132701
132770
  }
132702
- const similarity = jaccardSimilarity(existing.task, opts.taskDescription);
132703
- if (similarity > HIGH_SIMILARITY_THRESHOLD) {
132704
- return {
132705
- task: existing,
132706
- reason: `similar task description (${(similarity * 100).toFixed(0)}% match)`
132707
- };
132708
- }
132709
- if (opts.targetAgentId && existing.agentId === opts.targetAgentId && similarity > SAME_AGENT_SIMILARITY_THRESHOLD) {
132771
+ const match = matchSimilarTask(existing, opts);
132772
+ if (match)
132773
+ return match;
132774
+ }
132775
+ return null;
132776
+ }
132777
+ var HIGH_SIMILARITY_THRESHOLD = 0.8, SAME_AGENT_SIMILARITY_THRESHOLD = 0.6, DEDUP_SCAN_LIMIT = 500;
132778
+ var init_task_dedup = __esm(() => {
132779
+ init_db4();
132780
+ });
132781
+
132782
+ // src/tasks/follow-up-redelegation-guard.ts
132783
+ async function followUpThreadForSourceTask(sourceTaskId) {
132784
+ if (!sourceTaskId)
132785
+ return null;
132786
+ const sourceTask = await getTaskById2(sourceTaskId);
132787
+ if (sourceTask?.taskType !== "follow-up" || !sourceTask.slackChannelId || !sourceTask.slackThreadTs) {
132788
+ return null;
132789
+ }
132790
+ return {
132791
+ channelId: sourceTask.slackChannelId,
132792
+ threadTs: sourceTask.slackThreadTs,
132793
+ userId: sourceTask.slackUserId
132794
+ };
132795
+ }
132796
+ async function findMatchingCompletedWork(args) {
132797
+ let before;
132798
+ for (;; ) {
132799
+ const page = await findCompletedTasksInThread2(args.channelId, args.threadTs, FOLLOW_UP_SAME_WORK_WINDOW_MINUTES, FOLLOW_UP_SAME_WORK_PAGE_SIZE, before);
132800
+ for (const existing of page) {
132801
+ const match = matchSimilarTask(existing, args);
132802
+ if (match)
132803
+ return match;
132804
+ }
132805
+ const last = page.at(-1);
132806
+ if (!last || page.length < FOLLOW_UP_SAME_WORK_PAGE_SIZE)
132807
+ return null;
132808
+ before = { lastUpdatedAt: last.lastUpdatedAt, id: last.id };
132809
+ }
132810
+ }
132811
+ async function evaluateFollowUpRedelegation(args) {
132812
+ const { channelId, threadTs } = args;
132813
+ const match = await findMatchingCompletedWork(args);
132814
+ if (match) {
132815
+ const existing = match.task;
132816
+ const [cancelled, failed] = await Promise.all([
132817
+ findRecentCancelledTaskInThread2(channelId, threadTs, FOLLOW_UP_SAME_WORK_WINDOW_MINUTES),
132818
+ findRecentFailedTaskInThread2(channelId, threadTs, FOLLOW_UP_SAME_WORK_WINDOW_MINUTES)
132819
+ ]);
132820
+ const completedAt = new Date(existing.lastUpdatedAt).getTime();
132821
+ const interruptedLater = [cancelled, failed].some((t) => t && new Date(t.lastUpdatedAt).getTime() > completedAt);
132822
+ if (!interruptedLater) {
132710
132823
  return {
132711
- task: existing,
132712
- reason: `similar task to same agent (${(similarity * 100).toFixed(0)}% match)`
132824
+ rule: "same-work",
132825
+ message: `Blocked by the follow-up re-delegation guard (same-work rule): this task matches completed task ${existing.id.slice(0, 8)} in this Slack thread (${match.reason}), so the work was already done. If it must run again, pass allowRedelegation: true.`
132713
132826
  };
132714
132827
  }
132715
132828
  }
132829
+ const dispatched = await countAgentDispatchesInThread2(channelId, threadTs, args.creatorAgentId, FOLLOW_UP_DISPATCH_WINDOW_MINUTES);
132830
+ if (dispatched >= FOLLOW_UP_DISPATCH_CAP) {
132831
+ return {
132832
+ rule: "loop-cap",
132833
+ message: `Blocked by the follow-up re-delegation guard (loop-cap rule): you already dispatched ${dispatched} times into this Slack thread in the last ${FOLLOW_UP_DISPATCH_WINDOW_MINUTES / 60} hours (cap ${FOLLOW_UP_DISPATCH_CAP}; a durable script run counts once). If this is a deliberate next step and not a re-delegation loop, pass allowRedelegation: true.`
132834
+ };
132835
+ }
132716
132836
  return null;
132717
132837
  }
132718
- var HIGH_SIMILARITY_THRESHOLD = 0.8, SAME_AGENT_SIMILARITY_THRESHOLD = 0.6;
132719
- var init_task_dedup = __esm(() => {
132838
+ var FOLLOW_UP_SAME_WORK_WINDOW_MINUTES = 2880, FOLLOW_UP_DISPATCH_CAP = 10, FOLLOW_UP_DISPATCH_WINDOW_MINUTES = 360, FOLLOW_UP_SAME_WORK_PAGE_SIZE = 200;
132839
+ var init_follow_up_redelegation_guard = __esm(() => {
132720
132840
  init_db4();
132841
+ init_task_dedup();
132721
132842
  });
132722
132843
 
132723
132844
  // src/tools/send-task.ts
@@ -132761,6 +132882,7 @@ async function sendTaskHandler(ctx, {
132761
132882
  effort,
132762
132883
  profile,
132763
132884
  allowDuplicate,
132885
+ allowRedelegation,
132764
132886
  slackChannelId,
132765
132887
  slackThreadTs,
132766
132888
  slackUserId,
@@ -132780,6 +132902,7 @@ async function sendTaskHandler(ctx, {
132780
132902
  const requestedLeadOnly = ctx.kind === "user" ? false : leadOnly;
132781
132903
  const requestedCapabilities = ctx.kind === "user" ? undefined : requiredCapabilities;
132782
132904
  const requestedAllowDuplicate = ctx.kind === "user" ? false : allowDuplicate;
132905
+ const requestedAllowRedelegation = ctx.kind === "user" ? false : allowRedelegation;
132783
132906
  const requestedOverrideSlackContext = ctx.kind === "user" ? false : overrideSlackContext;
132784
132907
  if (requestedAgentId !== undefined && requestedRoutingReason === undefined) {
132785
132908
  return toolErr("routingReason is required when agentId is supplied.");
@@ -132944,7 +133067,7 @@ async function sendTaskHandler(ctx, {
132944
133067
  if (ctx.kind === "user" && (taskOptions.agentId !== userLead.id || taskOptions.offeredTo !== undefined)) {
132945
133068
  return toolErr("A pre.task.create extension cannot change the user task's Lead assignment.");
132946
133069
  }
132947
- const evaluateDedupGuards = async () => {
133070
+ const evaluateDedupGuards = async (logOverride) => {
132948
133071
  const existingTrackerWork = await findExistingLinearTrackerContextWork2(effectiveParentTask?.contextKey, effectiveParentTask?.id);
132949
133072
  if (existingTrackerWork) {
132950
133073
  const msg = `Skipped: Linear tracker contextKey ${effectiveParentTask?.contextKey} already has ${existingTrackerWork.reason === "active_task" ? "active task" : "linked open PR"} ${existingTrackerWork.task.id.slice(0, 8)}.`;
@@ -132964,25 +133087,24 @@ async function sendTaskHandler(ctx, {
132964
133087
  };
132965
133088
  }
132966
133089
  }
132967
- if (sourceTaskId) {
132968
- const sourceTask = await getTaskById2(sourceTaskId);
132969
- if (sourceTask?.taskType === "follow-up" && sourceTask.slackThreadTs && sourceTask.slackChannelId) {
132970
- const recentCompleted = await findCompletedTaskInThread2(sourceTask.slackChannelId, sourceTask.slackThreadTs, 2880);
132971
- if (recentCompleted) {
132972
- const recentCancelled = await findRecentCancelledTaskInThread2(sourceTask.slackChannelId, sourceTask.slackThreadTs, 2880);
132973
- const cancelledMoreRecent = recentCancelled && new Date(recentCancelled.lastUpdatedAt).getTime() > new Date(recentCompleted.lastUpdatedAt).getTime();
132974
- if (!cancelledMoreRecent) {
132975
- return {
132976
- ok: false,
132977
- message: `Blocked: re-delegation from follow-up task in a thread that already has completed work (task ${recentCompleted.id.slice(0, 8)}). The original request was already handled.`
132978
- };
132979
- }
132980
- }
133090
+ const followUpThread = creatorAgentId ? await followUpThreadForSourceTask(sourceTaskId) : null;
133091
+ if (followUpThread && creatorAgentId) {
133092
+ const blocked = await evaluateFollowUpRedelegation({
133093
+ ...followUpThread,
133094
+ creatorAgentId,
133095
+ taskDescription,
133096
+ targetAgentId: taskOptions.agentId ?? taskOptions.offeredTo
133097
+ });
133098
+ if (blocked && !requestedAllowRedelegation) {
133099
+ return { ok: false, message: blocked.message };
133100
+ }
133101
+ if (blocked && logOverride) {
133102
+ console.log(`[send-task] follow-up re-delegation override: rule=${blocked.rule} creatorAgentId=${creatorAgentId} sourceTaskId=${sourceTaskId} thread=${followUpThread.channelId}/${followUpThread.threadTs}`);
132981
133103
  }
132982
133104
  }
132983
133105
  return null;
132984
133106
  };
132985
- const guard = await evaluateDedupGuards();
133107
+ const guard = await evaluateDedupGuards(true);
132986
133108
  if (guard) {
132987
133109
  const guardData = {
132988
133110
  yourAgentId: creatorAgentId,
@@ -132991,7 +133113,7 @@ async function sendTaskHandler(ctx, {
132991
133113
  return guard.ok ? toolOk(guard.message, { data: guardData }) : toolErr(guard.message, { data: guardData });
132992
133114
  }
132993
133115
  const created = getDbClient2().transaction(async () => {
132994
- const raced = await evaluateDedupGuards();
133116
+ const raced = await evaluateDedupGuards(false);
132995
133117
  if (raced)
132996
133118
  return { success: raced.ok, message: raced.message, task: raced.task };
132997
133119
  if (isLinearTrackerContextKey2(effectiveParentTask?.contextKey)) {
@@ -133096,6 +133218,7 @@ var init_send_task = __esm(() => {
133096
133218
  init_model_validation();
133097
133219
  init_apply_task_create();
133098
133220
  init_rbac();
133221
+ init_follow_up_redelegation_guard();
133099
133222
  init_slack_routing();
133100
133223
  init_task_dedup();
133101
133224
  init_task_tool_ctx();
@@ -133125,7 +133248,8 @@ var init_send_task = __esm(() => {
133125
133248
  allowCustomModel: boolean().optional().describe("Accept a `model` the model catalog does not list. Without it an unknown model id is rejected. Only for ids the catalog cannot know yet (a fresh launch, a private deployment)."),
133126
133249
  effort: ReasoningEffortSchema.optional().describe("Reasoning effort for this task: 'off', 'low', 'medium', 'high', 'xhigh', or 'max'. If omitted, the assignee's REASONING_EFFORT_OVERRIDE/default applies."),
133127
133250
  profile: string2().trim().min(1).optional().describe("Model profile name (see list-model-profiles): a named harness + model + effort, applied when the task is claimed. Must run on the assignee's harness. Exclusive with model and modelTier. A set `effort` still wins over the profile's."),
133128
- allowDuplicate: boolean().default(false).describe("If true, skip duplicate detection and create the task even if a similar one exists."),
133251
+ allowDuplicate: boolean().default(false).describe("If true, skip duplicate detection and create the task even if a similar one exists. Does not bypass the follow-up re-delegation guard; see allowRedelegation."),
133252
+ allowRedelegation: boolean().default(false).describe("Only matters when you call send-task from a follow-up task in a Slack thread. Such a dispatch is blocked when it repeats a task already completed in that thread (same-work rule, unless a task there was cancelled or failed after that completion), or when you already dispatched 10 tasks into the thread in the last 6 hours (loop-cap rule). Set true to dispatch anyway; the override is logged. Use it only for deliberate re-runs or long chains, never to retry a block you have not read."),
133129
133253
  slackChannelId: string2().optional().describe("Slack channel ID to post progress updates to. Use this to propagate Slack context when delegating from a Slack thread."),
133130
133254
  slackThreadTs: string2().optional().describe("Slack thread timestamp. Required with slackChannelId for thread-level updates."),
133131
133255
  slackUserId: string2().optional().describe("Slack user ID of the original requester."),
@@ -135057,6 +135181,78 @@ var init_slack_invite_to_channel = __esm(() => {
135057
135181
  init_utils();
135058
135182
  });
135059
135183
 
135184
+ // src/tools/slack-leave-thread.ts
135185
+ var registerSlackLeaveThreadTool = (server) => {
135186
+ createToolRegistrar(server)("slack-leave-thread", {
135187
+ title: "Leave a Slack thread",
135188
+ description: "Stop following a Slack thread until someone @mentions the bot there again. Messages in the thread that do not @mention the bot are then ignored, with no task and no reply. Posts nothing to Slack. Pass taskId for the thread of your Slack-originated task, or (lead only) channelId and threadTs.",
135189
+ annotations: { openWorldHint: true, idempotentHint: true },
135190
+ inputSchema: object2({
135191
+ taskId: uuid().optional().describe("A task whose Slack thread to leave."),
135192
+ channelId: string2().min(1).optional().describe("The Slack channel ID of the thread."),
135193
+ threadTs: string2().min(1).optional().describe("Timestamp of the thread root (dotted, 'p' deep-link, or full permalink URL).")
135194
+ }),
135195
+ outputSchema: swarmToolOutputSchema({
135196
+ channelId: string2().optional(),
135197
+ threadTs: string2().optional()
135198
+ })
135199
+ }, async ({ taskId, channelId, threadTs }, requestInfo, _meta) => {
135200
+ if (isSlackLeaveThreadDisabled()) {
135201
+ return toolErr(`slack-leave-thread is disabled by ${SLACK_LEAVE_THREAD_DISABLE}.`);
135202
+ }
135203
+ if (!requestInfo.agentId) {
135204
+ return toolErr("Agent ID not found.");
135205
+ }
135206
+ const agent = await getAgentById2(requestInfo.agentId);
135207
+ if (!agent) {
135208
+ return toolErr("Agent not found.");
135209
+ }
135210
+ const mayLeaveAnyThread = can({
135211
+ principal: { kind: "agent", agentId: agent.id, isLead: agent.isLead },
135212
+ verb: "integration.slack.post",
135213
+ resource: { kind: "none" },
135214
+ source: "mcp"
135215
+ }).allow;
135216
+ let slackChannelId;
135217
+ let slackThreadTs;
135218
+ if (taskId) {
135219
+ if (channelId || threadTs) {
135220
+ return toolErr("Provide either taskId or channelId and threadTs, not both.");
135221
+ }
135222
+ const task = await getTaskById2(taskId);
135223
+ if (!task) {
135224
+ return toolErr("Task not found.");
135225
+ }
135226
+ if (!mayLeaveAnyThread && (task.agentId !== agent.id || task.source !== "slack" || !task.slackTriggerMessageTs)) {
135227
+ return toolErr("Only a lead or the agent assigned a Slack-originated task can leave its thread.");
135228
+ }
135229
+ slackChannelId = task.slackChannelId;
135230
+ slackThreadTs = task.slackThreadTs;
135231
+ } else if (channelId && threadTs) {
135232
+ if (!mayLeaveAnyThread) {
135233
+ return toolErr("Leaving a thread by channelId and threadTs requires lead privileges.");
135234
+ }
135235
+ slackChannelId = channelId;
135236
+ slackThreadTs = parseSlackTs(threadTs);
135237
+ } else {
135238
+ return toolErr("Must provide taskId, or both channelId and threadTs.");
135239
+ }
135240
+ if (!slackChannelId || !slackThreadTs) {
135241
+ return toolErr("No Slack thread context available.");
135242
+ }
135243
+ await leaveSlackThread(slackChannelId, slackThreadTs, { agentId: agent.id });
135244
+ return toolOk(`Left Slack thread ${slackChannelId}/${slackThreadTs}. Messages there are ignored until someone @mentions the bot.`, { data: { channelId: slackChannelId, threadTs: slackThreadTs } });
135245
+ });
135246
+ };
135247
+ var init_slack_leave_thread = __esm(() => {
135248
+ init_zod();
135249
+ init_db4();
135250
+ init_rbac();
135251
+ init_left_threads();
135252
+ init_message_text();
135253
+ init_utils();
135254
+ });
135255
+
135060
135256
  // src/tools/slack-list-channels.ts
135061
135257
  var SlackChannelSchema, registerSlackListChannelsTool = (server) => {
135062
135258
  createToolRegistrar(server)("slack-list-channels", {
@@ -136116,7 +136312,7 @@ async function steerTaskHandler(ctx, { taskId, message, mode = "queue", onUnsupp
136116
136312
  message,
136117
136313
  mode,
136118
136314
  onUnsupported,
136119
- source: "mcp",
136315
+ source: ctx.kind === "owner" && ctx.requestInfo?.callOrigin === "script-sdk" ? "script" : "mcp",
136120
136316
  createdByKind: ctx.kind === "owner" ? "agent" : "user",
136121
136317
  createdByAgentId: ctx.kind === "owner" ? ctx.agentId : undefined,
136122
136318
  createdByUserId: ctx.kind === "user" ? ctx.userId : undefined
@@ -136135,7 +136331,7 @@ async function steerTaskHandler(ctx, { taskId, message, mode = "queue", onUnsupp
136135
136331
  var steerTaskInputSchema, steerTaskUserInputSchema, steerTaskOutputSchema, registerSteerTaskTool = (server) => {
136136
136332
  createToolRegistrar(server)("steer-task", {
136137
136333
  title: "Steer Task",
136138
- description: 'Send a message to a task that is already running. `mode:"steer"` is honored on pi, claude-managed, codex and cursor; claude, devin, opencode and amp support queue only (amp delivery lands at the next tool result). Pass `onUnsupported:"fail"` to get an error instead of a downgrade.',
136334
+ description: 'Send a message to a task that is already running. `mode:"steer"` is honored on pi, claude-managed, codex, cursor and fx (fx supports steer only); claude, devin, opencode and amp support queue only (amp delivery lands at the next tool result). Pass `onUnsupported:"fail"` to get an error instead of a downgrade.',
136139
136335
  annotations: { destructiveHint: true },
136140
136336
  inputSchema: steerTaskInputSchema,
136141
136337
  outputSchema: steerTaskOutputSchema
@@ -137371,7 +137567,7 @@ async function emitBudgetRefusalSideEffects(ctx, inserted) {
137371
137567
  console.warn(`[budget-refusal-notify] Failed to create follow-up task for budget refusal (task=${ctx.task.id.slice(0, 8)}): ${err}`);
137372
137568
  }
137373
137569
  }
137374
- import("./event-bus-dfjx2qdh.js").then(({ workflowEventBus }) => {
137570
+ import("./event-bus-g0ka3pbw.js").then(({ workflowEventBus }) => {
137375
137571
  workflowEventBus.emit("task.budget_refused", {
137376
137572
  taskId: ctx.task.id,
137377
137573
  agentId: ctx.agentId,
@@ -139660,6 +139856,9 @@ async function createServer(opts = {}) {
139660
139856
  registerSlackDownloadFileTool(server);
139661
139857
  registerSlackDeleteTool(server);
139662
139858
  registerSlackUpdateTool(server);
139859
+ if (opts.fullSurface === true || !isSlackLeaveThreadDisabled()) {
139860
+ registerSlackLeaveThreadTool(server);
139861
+ }
139663
139862
  }
139664
139863
  if (hasCapability("prompt-templates")) {
139665
139864
  registerListPromptTemplatesTool(server);
@@ -139717,6 +139916,7 @@ var init_server = __esm(() => {
139717
139916
  init_resolver();
139718
139917
  init_rbac();
139719
139918
  init_config4();
139919
+ init_left_threads();
139720
139920
  init_accept_steer();
139721
139921
  init_app_action_run();
139722
139922
  init_app_diff();
@@ -139805,6 +140005,7 @@ var init_server = __esm(() => {
139805
140005
  init_slack_delete();
139806
140006
  init_slack_download_file();
139807
140007
  init_slack_invite_to_channel();
140008
+ init_slack_leave_thread();
139808
140009
  init_slack_list_channels();
139809
140010
  init_slack_post();
139810
140011
  init_slack_read();
@@ -139871,4 +140072,4 @@ var init_server = __esm(() => {
139871
140072
  loggedToolAllowlistWarnings = new Set;
139872
140073
  });
139873
140074
 
139874
- export { DEFAULT_NEGOTIATED_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, isJSONRPCRequest, isJSONRPCResultResponse, isJSONRPCErrorResponse, JSONRPCMessageSchema, isInitializeRequest, init_types, McpServer, init_mcp, repointTrackerSyncBySwarmId, init_tracker, isRuntimePoolWakeable, isAgentReachable, init_reachability, referencedBundlePaths, skillDirs, init_manifest_format, TaskCreationBlockedError, init_errors2, resolveIdentity, renderIdentity, init_identity, recordUnmappedIdentity, init_unmapped_identities, MAX_TASK_ATTACHMENT_BYTES, recordTaskAttachmentUpload, scopeFromAttachment, backingProviderId, init_task_attachment_store, taskModelPin, resumedTaskModelSelection, init_model_pin, listHarnessModelSupport, recordHarnessModelSupport, agentRanModel, getAgentHarnessCliVersion, setAgentHarnessCliVersion, init_harness_model_support, sanitizeModelTierOverrides, parseModelTierOverridesHeader, setAgentModelTierOverrides, previewModelTiers, recordClaimModelResolution, init_model_tier_resolution, harnessModelErrorFor, poolTaskRunsOnHarness, explicitModelError, explicitModelErrorForAgent, init_model_validation, stripSiblingBlock, init_sibling_block, createTaskWithSiblingAwareness, init_sibling_awareness, transcribeAudioNotes, init_transcription, init_templates, buildEffectiveText, bufferedFileFailures, fetchSlackFiles, createSlackTaskWithFiles, notifySlackFileFailures, init_inbound_files, isAddressedToOtherUser, broadcastMatches, routeMessage, extractTaskFromMessage, init_router, extractSlackMessageText, slackInboundMessageText, collectSlackMessageFiles, init_message_text, createAdditiveBuffer, init_additive_buffer, recoverIncompleteRuns, init_recovery, handleWebhookTrigger, verifyHmacSignature, WebhookError, init_triggers, snapshotAndUpdateWorkflow, init_version, RawLlmConfigSchema, RawLlmOutputSchema, executeRawLlm, init_raw_llm, getExecutorRegistry2, initWorkflows2, init_workflows, dispatchScheduleTarget, calculateNextRun2, startScheduler2, stopScheduler2, runScheduleNow2, init_scheduler, ExtensionAssetConflictError, init_assets, ExtensionOwnershipError, getExtensionFiles, getExtensionById, getExtensionByName, listExtensions, listExtensionVersions, updateExtensionMeta, listExtensionRuns, init_db, SDK_ALLOWLIST, mcpToolNameForSdkMethod, init_sdk_allowlist, MCP_OVERFLOW_NAMESPACE, mcpOverflowAuthError, init_kv_overflow, hasKvViewArgs, resolveKvView, init_kv_view, toolErr, createToolRegistrar, init_utils, handleMcpBridge, init_mcp_bridge, Redacted, init_redacted, SCRIPT_SDK_RESPONSE_LIMIT_BYTES, readScriptSdkJsonResponse, init_response_limit, ExtensionConfigError, init_loader, ExtensionLifecycleError, setExtensionLoopbackBaseUrl, enableExtension, disableExtension, activateVersion, ExtensionAssetsInvalidError, installExtensionWithAssets, uninstallExtension, reloadExtension, loadEnabledExtensions, stopExtensionRuntime, init_lifecycle, ExtensionAbortedError2, isRegistered2, isExtensionAgentId2, getExtensionBridgeToken2, resolveBridgeCallOrigin2, extensionIdForAgent2, runContext2, registerLoaded2, unregister2, listRegistered2, dispatchPre2, dispatchPost2, init_dispatcher, REBOOT_RETRY_PIN_TAG2, getPinCandidateAgent2, resolveLeadOnlyRecoveryAssignment2, getResumeGeneration2, getNextResumeGeneration2, inheritedModelSelection2, createWorkerTaskFollowUp2, createResumeFollowUp2, createRerouteDecisionTask2, createPoolStarvationDecisionTask2, init_worker_follow_up, isGitHubEnabled, initGitHub, verifyWebhookSignature, isAgentMailEnabled, initAgentMail, verifyAgentMailWebhook, isInboxAllowed, isSenderAllowed, handleMessageReceived, init_agentmail, isAzureDevOpsEnabled, initAzureDevOps, verifyAzureDevOpsWebhook, isAzureDevOpsUrl, canonicalAzureDevOpsRepoUrl, parseAzureDevOpsRepoUrl, init_azure_devops, createdPullRequestOf, commentedPayloadOf, handlePullRequestCreated, handlePullRequestCommented, handleWorkItemCreated, handleWorkItemUpdated, handleWorkItemCommented, handleWorkItemDeleted, handleWorkItemRestored, initAzureDevOpsOutbound, init_azure_devops2, enqueueAuditRow, enqueueAdmissionRow, flushAuditBuffer, startAuditWriter, stopAuditWriter, startAuditGc, stopAuditGc, init_rbac_audit, getTelemetryIngestAnchor, init_telemetry_ingest_anchor, initApiTelemetry, syncTelemetryEnabled, init_telemetry_enable, isBitbucketEnabled, initBitbucket, verifyBitbucketWebhook, isDuplicateDelivery, markDeliveryProcessed, pullRequestEventOf, pullRequestCommentEventOf, handlePullRequestCreated2, handlePullRequestCommentCreated, handlePullRequestClosed, init_bitbucket, handlePullRequest, handleIssue, handleComment, handlePullRequestReview, handleCheckRun, handleCheckSuite, handleWorkflowRun, init_github, isGitLabEnabled, initGitLab, verifyGitLabWebhook, handleMergeRequest, handleIssue2, handleNote, handlePipeline, init_gitlab, isChatSdkEnabled, getChatSdkConfig, init_config, errorMessage, init_logger, resolveAdapterApiUrl, init_adapters, trackBackground, init_background, TelegramBotApiError, callTelegramBotApi, init_telegram_api, isTrustedTeamsServiceUrl, init_teams_origin, getSessionLabels, rememberSessionLabel, init_session_labels, isChatSdkStopping, startChatSdk, getChatInstance, isChatAdapterConfigured, getChatSdkHealth, stopChatSdk, init_runtime, getJiraMetadata, updateJiraMetadata, clearJiraMetadata, init_metadata, registerJiraWebhook, deleteJiraWebhook, init_webhook_lifecycle, isJiraEnabled, initJira, init_app, handleJiraWebhook, init_webhook, init_jira, handleAgentSessionEvent, handleIssueUpdate, handleIssueDelete, handleAgentSessionPrompted, init_sync, isLinearEnabled, initLinear, init_app2, init_linear, init_slack, isCookieSafePageId, extractPageSession, extractLegacyPageSession, extractAndVerifyCookie, pageSessionSetCookies, init_page_session, resolveHttpRequestAuth, init_auth, getDeploymentEnvValue, loadGlobalConfigsIntoEnv, reloadGlobalConfigsAndIntegrations, scheduleIntegrationsReload, handleCore, init_core, MCP_MAX_TOOL_INPUT_ELEMENTS, MCP_MAX_REQUEST_BODY_BYTES, init_mcp_limits, userCtx, init_task_tool_ctx, requestPrincipal, agentFirstPrincipal, requireAuthKind, rejectGuest, init_request_principal, handleApps, init_apps, cancelApprovalRequest, cancelApprovalRequestAndRun, init_approval_cancel, getUserCommsPrefs, init_requester_comms, getTaskDetailsInputSchema, getTaskDetailsOutputSchema, getTaskDetailsHandler, init_get_task_details, cancelTaskInputSchema, cancelTaskOutputSchema, cancelTaskHandler, init_cancel_task, executeReadOnlyQuery, assertSelectOnlyQuery, handleDbQuery, init_db_query, snapshotMetric, init_version2, AssetKeyAuthorizationError, authorizeAssetKeyWrite, init_asset_key_auth, getPageEditCounter, init_page_versions, snapshotPage, init_version3, assertOAuthAppUrlsSafe, assertOAuthEgressUrlSafe, init_app_validation, listOAuthPresets, listOAuthPresetIds, getOAuthPreset, hydrateOAuthAppFromPreset, init_presets, scopedResourceScopeIdSchema, resolveScopedResourceId, init_scoped_resource, MemoryKeyError, init_key_guard, refreshLinks, init_link_resolver, indexMemoryContent, init_index_content, dedupeMemoryDocumentIds, recordMemoryAccesses, recordRetrievals, init_retrieval, ExplicitSelfDuplicateError, applyRating, init_store, shouldPersistAutomaticTaskMemory, init_automatic_task_gate, guardTerminalTaskResultWrite, init_terminal_result_guard, getTasksInputSchema, getTasksOutputSchema, getTasksHandler, init_get_tasks, reservedNamespaceError, privateNamespaceError, reservedRoomKeyError, init_kv_reserved_namespaces, updateMcpServerChecked, init_mcp_server_checked_update, updateTouchesStdioExecution, init_mcp_server_stdio_gate, canReadMemory, init_access, getLinksForMemory, init_links_store, expandCandidatesWithGraph, init_graph_expansion, isApiDraining, drainApi, init_api_drain, markKapsoMessageRead, sendKapsoReaction, init_client, getKapsoConfig, getKapsoNumberMapping, markKapsoMessageSeen, init_config2, changesAllowMerge, init_repo_merge_policy, updateSwarmRepoChecked, init_repo_checked_update, getCombConfig, init_config3, resolveRoomNamespace, roomRequestInfo, authorizeRoomNamespace, sessionAccessTopic, sessionPresenceRoot, init_auth2, RoomOperationSchema, init_document, removeAwarenessStates, init_awareness, roomTopic, decodeRoomSnapshot, roomView, getRoom, changeRoom, applyRoomUpdate, resetRoom, sweepRooms, closeRooms, removeNamespaceRooms, init_rooms, init_scheduler2, MEMORY_KEYS_DEFAULT_PREFIX, MEMORY_KEYS_MAX_LIMIT, estimateTokens, posteriorMean, listMemoryKeys, checkChunkIntegrity, getMemoryChunks, getPosteriorsByIds, init_key_browser, createEvent, createEventsBatch, getEventCountsFiltered, getEventsFiltered, init_events, mergeScheduleTiming, validateRecurringTiming, init_validate, checkOutputSchemaShape, sendTaskOutputSchema, sendTaskHandler, init_send_task, steerTaskUserInputSchema, steerTaskOutputSchema, steerTaskHandler, init_steer_task, canClaim, init_budget_admission, emitBudgetRefusalSideEffects, init_budget_refusal_notify, workflowModelErrors, init_model_validation2, patchWorkflowDefinition, init_patch_definition, idempotencyKeyHeader, readIdempotencyKey, replayAcceptedOperation, init_idempotency_key, resolveScriptsOnlyMode, init_scripts_only_mode, ALL_CAPABILITIES, hasCapability, getEnabledCapabilities, createServer, init_server };
140075
+ export { DEFAULT_NEGOTIATED_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, isJSONRPCRequest, isJSONRPCResultResponse, isJSONRPCErrorResponse, JSONRPCMessageSchema, isInitializeRequest, init_types, McpServer, init_mcp, repointTrackerSyncBySwarmId, init_tracker, isRuntimePoolWakeable, isAgentReachable, init_reachability, referencedBundlePaths, skillDirs, init_manifest_format, TaskCreationBlockedError, init_errors2, resolveIdentity, renderIdentity, init_identity, recordUnmappedIdentity, init_unmapped_identities, MAX_TASK_ATTACHMENT_BYTES, recordTaskAttachmentUpload, scopeFromAttachment, backingProviderId, init_task_attachment_store, taskModelPin, resumedTaskModelSelection, init_model_pin, listHarnessModelSupport, recordHarnessModelSupport, agentRanModel, getAgentHarnessCliVersion, setAgentHarnessCliVersion, init_harness_model_support, sanitizeModelTierOverrides, parseModelTierOverridesHeader, setAgentModelTierOverrides, previewModelTiers, recordClaimModelResolution, init_model_tier_resolution, harnessModelErrorFor, poolTaskRunsOnHarness, explicitModelError, explicitModelErrorForAgent, init_model_validation, stripSiblingBlock, init_sibling_block, createTaskWithSiblingAwareness, init_sibling_awareness, transcribeAudioNotes, init_transcription, init_templates, buildEffectiveText, bufferedFileFailures, fetchSlackFiles, createSlackTaskWithFiles, notifySlackFileFailures, init_inbound_files, isAddressedToOtherUser, broadcastMatches, routeMessage, extractTaskFromMessage, init_router, extractSlackMessageText, slackInboundMessageText, collectSlackMessageFiles, init_message_text, createAdditiveBuffer, init_additive_buffer, recoverIncompleteRuns, init_recovery, handleWebhookTrigger, verifyHmacSignature, WebhookError, init_triggers, snapshotAndUpdateWorkflow, init_version, RawLlmConfigSchema, RawLlmOutputSchema, executeRawLlm, init_raw_llm, getExecutorRegistry2, initWorkflows2, init_workflows, dispatchScheduleTarget, calculateNextRun2, startScheduler2, stopScheduler2, runScheduleNow2, init_scheduler, ExtensionAssetConflictError, init_assets, ExtensionOwnershipError, getExtensionFiles, getExtensionById, getExtensionByName, listExtensions, listExtensionVersions, updateExtensionMeta, listExtensionRuns, init_db, SDK_ALLOWLIST, mcpToolNameForSdkMethod, init_sdk_allowlist, MCP_OVERFLOW_NAMESPACE, mcpOverflowAuthError, init_kv_overflow, hasKvViewArgs, resolveKvView, init_kv_view, toolErr, createToolRegistrar, init_utils, handleMcpBridge, init_mcp_bridge, Redacted, init_redacted, SCRIPT_SDK_RESPONSE_LIMIT_BYTES, readScriptSdkJsonResponse, init_response_limit, ExtensionConfigError, init_loader, ExtensionLifecycleError, setExtensionLoopbackBaseUrl, enableExtension, disableExtension, activateVersion, ExtensionAssetsInvalidError, installExtensionWithAssets, uninstallExtension, reloadExtension, loadEnabledExtensions, stopExtensionRuntime, init_lifecycle, ExtensionAbortedError2, isRegistered2, isExtensionAgentId2, getExtensionBridgeToken2, resolveBridgeCallOrigin2, extensionIdForAgent2, runContext2, registerLoaded2, unregister2, listRegistered2, dispatchPre2, dispatchPost2, init_dispatcher, REBOOT_RETRY_PIN_TAG2, getPinCandidateAgent2, resolveLeadOnlyRecoveryAssignment2, getResumeGeneration2, getNextResumeGeneration2, inheritedModelSelection2, createWorkerTaskFollowUp2, createResumeFollowUp2, createRerouteDecisionTask2, createPoolStarvationDecisionTask2, init_worker_follow_up, isGitHubEnabled, initGitHub, verifyWebhookSignature, isAgentMailEnabled, initAgentMail, verifyAgentMailWebhook, isInboxAllowed, isSenderAllowed, handleMessageReceived, init_agentmail, isAzureDevOpsEnabled, initAzureDevOps, verifyAzureDevOpsWebhook, isAzureDevOpsUrl, canonicalAzureDevOpsRepoUrl, parseAzureDevOpsRepoUrl, init_azure_devops, createdPullRequestOf, commentedPayloadOf, handlePullRequestCreated, handlePullRequestCommented, handleWorkItemCreated, handleWorkItemUpdated, handleWorkItemCommented, handleWorkItemDeleted, handleWorkItemRestored, initAzureDevOpsOutbound, init_azure_devops2, enqueueAuditRow, enqueueAdmissionRow, flushAuditBuffer, startAuditWriter, stopAuditWriter, startAuditGc, stopAuditGc, init_rbac_audit, getTelemetryIngestAnchor, init_telemetry_ingest_anchor, initApiTelemetry, syncTelemetryEnabled, init_telemetry_enable, isBitbucketEnabled, initBitbucket, verifyBitbucketWebhook, isDuplicateDelivery, markDeliveryProcessed, pullRequestEventOf, pullRequestCommentEventOf, handlePullRequestCreated2, handlePullRequestCommentCreated, handlePullRequestClosed, init_bitbucket, handlePullRequest, handleIssue, handleComment, handlePullRequestReview, handleCheckRun, handleCheckSuite, handleWorkflowRun, init_github, isGitLabEnabled, initGitLab, verifyGitLabWebhook, handleMergeRequest, handleIssue2, handleNote, handlePipeline, init_gitlab, isChatSdkEnabled, getChatSdkConfig, init_config, errorMessage, init_logger, resolveAdapterApiUrl, init_adapters, trackBackground, init_background, TelegramBotApiError, callTelegramBotApi, init_telegram_api, isTrustedTeamsServiceUrl, init_teams_origin, getSessionLabels, rememberSessionLabel, init_session_labels, isChatSdkStopping, startChatSdk, getChatInstance, isChatAdapterConfigured, getChatSdkHealth, stopChatSdk, init_runtime, getJiraMetadata, updateJiraMetadata, clearJiraMetadata, init_metadata, registerJiraWebhook, deleteJiraWebhook, init_webhook_lifecycle, isJiraEnabled, initJira, init_app, handleJiraWebhook, init_webhook, init_jira, handleAgentSessionEvent, handleIssueUpdate, handleIssueDelete, handleAgentSessionPrompted, init_sync, isLinearEnabled, initLinear, init_app2, init_linear, init_slack, isCookieSafePageId, extractPageSession, extractLegacyPageSession, extractAndVerifyCookie, pageSessionSetCookies, init_page_session, resolveHttpRequestAuth, init_auth, getDeploymentEnvValue, loadGlobalConfigsIntoEnv, reloadGlobalConfigsAndIntegrations, scheduleIntegrationsReload, handleCore, init_core, MCP_MAX_TOOL_INPUT_ELEMENTS, MCP_MAX_REQUEST_BODY_BYTES, init_mcp_limits, userCtx, init_task_tool_ctx, requestPrincipal, agentFirstPrincipal, requireAuthKind, rejectGuest, init_request_principal, handleApps, init_apps, cancelApprovalRequest, cancelApprovalRequestAndRun, init_approval_cancel, getUserCommsPrefs, init_requester_comms, getTaskDetailsInputSchema, getTaskDetailsOutputSchema, getTaskDetailsHandler, init_get_task_details, cancelTaskInputSchema, cancelTaskOutputSchema, cancelTaskHandler, init_cancel_task, executeReadOnlyQuery, assertSelectOnlyQuery, handleDbQuery, init_db_query, snapshotMetric, init_version2, AssetKeyAuthorizationError, authorizeAssetKeyWrite, init_asset_key_auth, getPageEditCounter, init_page_versions, snapshotPage, init_version3, assertOAuthAppUrlsSafe, assertOAuthEgressUrlSafe, init_app_validation, listOAuthPresets, listOAuthPresetIds, getOAuthPreset, hydrateOAuthAppFromPreset, init_presets, scopedResourceScopeIdSchema, resolveScopedResourceId, init_scoped_resource, MemoryKeyError, init_key_guard, refreshLinks, init_link_resolver, indexMemoryContent, init_index_content, dedupeMemoryDocumentIds, recordMemoryAccesses, recordRetrievals, init_retrieval, ExplicitSelfDuplicateError, applyRating, init_store, shouldPersistAutomaticTaskMemory, init_automatic_task_gate, guardTerminalTaskResultWrite, init_terminal_result_guard, getTasksInputSchema, getTasksOutputSchema, getTasksHandler, init_get_tasks, reservedNamespaceError, privateNamespaceError, reservedRoomKeyError, init_kv_reserved_namespaces, updateMcpServerChecked, init_mcp_server_checked_update, updateTouchesStdioExecution, init_mcp_server_stdio_gate, canReadMemory, init_access, getLinksForMemory, init_links_store, expandCandidatesWithGraph, init_graph_expansion, isApiDraining, drainApi, init_api_drain, markKapsoMessageRead, sendKapsoReaction, init_client, getKapsoConfig, getKapsoNumberMapping, markKapsoMessageSeen, init_config2, changesAllowMerge, init_repo_merge_policy, updateSwarmRepoChecked, init_repo_checked_update, getCombConfig, init_config3, resolveRoomNamespace, roomRequestInfo, authorizeRoomNamespace, sessionAccessTopic, sessionPresenceRoot, init_auth2, RoomOperationSchema, init_document, removeAwarenessStates, init_awareness, roomTopic, decodeRoomSnapshot, roomView, getRoom, changeRoom, applyRoomUpdate, resetRoom, sweepRooms, closeRooms, removeNamespaceRooms, init_rooms, init_scheduler2, MEMORY_KEYS_DEFAULT_PREFIX, MEMORY_KEYS_MAX_LIMIT, estimateTokens, posteriorMean, listMemoryKeys, checkChunkIntegrity, getMemoryChunks, getPosteriorsByIds, init_key_browser, createEvent, createEventsBatch, getEventCountsFiltered, getEventsFiltered, init_events, mergeScheduleTiming, validateRecurringTiming, init_validate, followUpThreadForSourceTask, evaluateFollowUpRedelegation, init_follow_up_redelegation_guard, checkOutputSchemaShape, sendTaskOutputSchema, sendTaskHandler, init_send_task, steerTaskUserInputSchema, steerTaskOutputSchema, steerTaskHandler, init_steer_task, canClaim, init_budget_admission, emitBudgetRefusalSideEffects, init_budget_refusal_notify, workflowModelErrors, init_model_validation2, patchWorkflowDefinition, init_patch_definition, idempotencyKeyHeader, readIdempotencyKey, replayAcceptedOperation, init_idempotency_key, resolveScriptsOnlyMode, init_scripts_only_mode, ALL_CAPABILITIES, hasCapability, getEnabledCapabilities, createServer, init_server };