@desplega.ai/agent-swarm 1.149.0 → 1.150.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 (385) hide show
  1. package/README.md +7 -3
  2. package/dist/{acp-adapter-4jncb126.js → acp-adapter-d5mzggyk.js} +1 -1
  3. package/dist/{actions-31vp3ae7.js → actions-wn6ew0p7.js} +11 -10
  4. package/dist/{anthropic-messages-vs2rabzp.js → anthropic-messages-ec35ktvx.js} +4 -4
  5. package/dist/{app-1hh67x8w.js → app-dty7p9hg.js} +7 -7
  6. package/dist/{artifact-gj9arwrr.js → artifact-td4q4dch.js} +1 -1
  7. package/dist/{assistant-z66dmz6p.js → assistant-q4vhgjtx.js} +16 -17
  8. package/dist/{boot-reembed-wxa8ya0s.js → boot-reembed-92292pgf.js} +9 -9
  9. package/dist/{boot-reembed-fqzxxzjh.js → boot-reembed-n15q6s9x.js} +8 -8
  10. package/dist/{boot-scrub-logs-jnyndh79.js → boot-scrub-logs-44pc955m.js} +5 -5
  11. package/dist/{claude-adapter-3qpa9w0j.js → claude-adapter-cjegjbje.js} +14 -14
  12. package/dist/{claude-managed-adapter-qvsmh6mv.js → claude-managed-adapter-p3ts5m9m.js} +2 -2
  13. package/dist/{claude-sdk-session-2yxgjs5d.js → claude-sdk-session-7ywbn12v.js} +14 -14
  14. package/dist/{cli-cr12paw2.js → cli-111ey3ra.js} +5 -5
  15. package/dist/{cli-4wtq5jjv.js → cli-1mx65de9.js} +1 -1
  16. package/dist/{cli-9d8ntetj.js → cli-2658f6at.js} +1 -1
  17. package/dist/{cli-n3dz2942.js → cli-3ckzxdt1.js} +10 -6
  18. package/dist/{cli-yb9qhqam.js → cli-3mh119qv.js} +184 -67
  19. package/dist/{cli-ykxrnd1q.js → cli-72xdszyx.js} +2 -2
  20. package/dist/{cli-xm87hzbw.js → cli-7fesa1ky.js} +1 -1
  21. package/dist/{cli-3q5ejx9p.js → cli-7kwmt3r5.js} +2 -2
  22. package/dist/{cli-2qts1hys.js → cli-8chp8xab.js} +2 -2
  23. package/dist/{cli-qaacms9y.js → cli-9gqddmxs.js} +122 -97
  24. package/dist/{cli-zvz62chv.js → cli-a45d5v9b.js} +4 -4
  25. package/dist/{cli-9xvdm3bx.js → cli-asvrh7kj.js} +1 -1
  26. package/dist/{cli-kgz4np97.js → cli-b8x19vbh.js} +4 -4
  27. package/dist/{cli-9fy6nk6g.js → cli-ceb5y160.js} +1 -1
  28. package/dist/{cli-k0cr4kat.js → cli-ck1vqzdj.js} +1 -1
  29. package/dist/{cli-e29gmdmw.js → cli-dv6cdjs2.js} +2 -1
  30. package/dist/{cli-jecc01cb.js → cli-dyx0237s.js} +1 -1
  31. package/dist/{cli-kjwt6hdf.js → cli-gm0fhz13.js} +3 -3
  32. package/dist/{cli-sd5pv3b1.js → cli-h505yhex.js} +2 -2
  33. package/dist/{handlers-nbzdzn9k.js → cli-hbagregr.js} +15 -38
  34. package/dist/{cli-08b07b4r.js → cli-hmyynq9b.js} +1 -1
  35. package/dist/{cli-d8ftsp62.js → cli-kt7wevqh.js} +20 -13
  36. package/dist/{cli-gjhjfeeg.js → cli-kyysm7m3.js} +1 -1
  37. package/dist/{cli-1ebpar1q.js → cli-mzb0n642.js} +6 -6
  38. package/dist/{cli-q50ef8g0.js → cli-n1yj5fd5.js} +1 -1
  39. package/dist/{cli-3apbzgyk.js → cli-n75jt793.js} +13 -9
  40. package/dist/{cli-19f354qr.js → cli-q04q68be.js} +2 -2
  41. package/dist/{cli-yab68w40.js → cli-qp69dd5d.js} +29 -14
  42. package/dist/{cli-6pqcb4q0.js → cli-rnsr8asm.js} +12 -11
  43. package/dist/{cli-ygweqcn4.js → cli-rwp3ksm7.js} +91 -108
  44. package/dist/{cli-phsxnkp6.js → cli-ryz8q8p1.js} +74 -58
  45. package/dist/{cli-e95cx1eb.js → cli-taym3dmg.js} +10 -10
  46. package/dist/{cli-nye12xk5.js → cli-ttje5a4z.js} +7 -4
  47. package/dist/{cli-9hspd3dp.js → cli-vr6qj104.js} +1 -1
  48. package/dist/{cli-mnmsfd1w.js → cli-xjb9wghj.js} +7 -3
  49. package/dist/{cli-gv88e1vf.js → cli-ydk0wjj8.js} +1 -1
  50. package/dist/{cli-aae6hz6a.js → cli-zd21jrrc.js} +3 -3
  51. package/dist/{cli-7smrsr25.js → cli-zthatyrx.js} +23 -11
  52. package/dist/cli.js +19 -19
  53. package/dist/{codex-adapter-8meawydj.js → codex-adapter-rn3aq7jm.js} +7 -7
  54. package/dist/{codex-hook-hfrt9shr.js → codex-hook-gthcmm0g.js} +3 -3
  55. package/dist/{codex-session-runner-gjgxyp5j.js → codex-session-runner-bge0cbsw.js} +7 -7
  56. package/dist/{commands-hz3nb95f.js → commands-26phw0pc.js} +5 -5
  57. package/dist/{db-ggz97zbm.js → db-jxjx6s1b.js} +6 -6
  58. package/dist/{e2b-p04vmtx0.js → e2b-413b8t4v.js} +1 -1
  59. package/dist/handlers-vr1djg4n.js +41 -0
  60. package/dist/{hook-bks2q1f6.js → hook-jw0ztn96.js} +9 -9
  61. package/dist/{hook-kq9wp0ep.js → hook-t6fqsggw.js} +10 -10
  62. package/dist/{http-hrf77v87.js → http-hyc7s57s.js} +80 -71
  63. package/dist/{index-n28pw1zt.js → index-1d9r6a74.js} +18 -18
  64. package/dist/{index-cqtebbhb.js → index-bcyx5djw.js} +17 -17
  65. package/dist/{index-6nsbg88z.js → index-sfhaq59d.js} +408 -74
  66. package/dist/{index-8hmeg8j1.js → index-wtwpthe1.js} +17 -17
  67. package/dist/{keepalive-dxc12gvg.js → keepalive-fbsak4ya.js} +7 -7
  68. package/dist/{lead-yckfn18d.js → lead-rdzdm627.js} +39 -39
  69. package/dist/{maintenance-6kfb2m5e.js → maintenance-25z1c1vf.js} +9 -9
  70. package/dist/{node-x1g4v0pq.js → node-209sxmg3.js} +9 -9
  71. package/dist/{oauth-refresh-sweep-1x1ac722.js → oauth-refresh-sweep-j3d7gtse.js} +6 -6
  72. package/dist/{onboard-dcyt1609.js → onboard-dkcwrc75.js} +2 -2
  73. package/dist/{otel-impl-tbk3e5dr.js → otel-impl-8rgyy3j8.js} +1 -1
  74. package/dist/{pi-mono-adapter-zvshk5cj.js → pi-mono-adapter-4s2bbkgq.js} +8 -8
  75. package/dist/{pricing-refresh-kaqg567e.js → pricing-refresh-9cek71nq.js} +7 -7
  76. package/dist/{rbac-roles-cf97v1vd.js → rbac-roles-vk8mqp9v.js} +6 -6
  77. package/dist/{rbac-roles-ammq6rd2.js → rbac-roles-z98s2ypy.js} +5 -5
  78. package/dist/{render-v2-80w603vy.js → render-v2-3j26g0qh.js} +7 -7
  79. package/dist/{seed-pricing-zbrn83xv.js → seed-pricing-7rxhcnzm.js} +6 -6
  80. package/dist/{setup-fe66kczs.js → setup-e2t7vz0c.js} +2 -2
  81. package/dist/work-objects-8d3nd3x2.js +141 -0
  82. package/dist/{worker-qmb2d1e2.js → worker-0x9fn7nq.js} +39 -39
  83. package/openapi.json +15 -4
  84. package/package.json +3 -3
  85. package/src/agentmail/handlers.ts +5 -0
  86. package/src/be/budget-refusal-notify.ts +1 -0
  87. package/src/be/db/tasks/read.ts +3 -0
  88. package/src/be/db/tasks/write.ts +13 -1
  89. package/src/be/db.ts +4 -2
  90. package/src/be/migrations/153_deferred_task_wait_members.sql +25 -0
  91. package/src/be/migrations/154_routing_source.sql +3 -0
  92. package/src/be/scripts/typecheck.ts +7 -3
  93. package/src/be/seed/automation-toggle.ts +69 -0
  94. package/src/be/seed/schedules-seeder.ts +53 -8
  95. package/src/be/seed/workflows-seeder.ts +35 -6
  96. package/src/be/seed-scripts/catalog/delegate.ts +3 -1
  97. package/src/be/seed-skills/bundled-files.generated.json +1 -1
  98. package/src/be/steering.ts +1 -0
  99. package/src/be/swarm-config-guard.ts +1 -0
  100. package/src/commands/credential-refresh.ts +70 -0
  101. package/src/commands/provider-credentials.ts +2 -25
  102. package/src/commands/runner.ts +23 -56
  103. package/src/github/handlers.ts +9 -0
  104. package/src/gitlab/handlers.ts +4 -0
  105. package/src/heartbeat/heartbeat.ts +3 -0
  106. package/src/http/approval-requests.ts +1 -0
  107. package/src/http/apps.ts +1 -0
  108. package/src/http/config.ts +4 -1
  109. package/src/http/core.ts +4 -2
  110. package/src/http/index.ts +16 -3
  111. package/src/http/script-runs.ts +5 -0
  112. package/src/http/tasks.ts +5 -0
  113. package/src/integrations/kapso/inbound.ts +1 -0
  114. package/src/jira/sync.ts +2 -0
  115. package/src/linear/sync.ts +2 -0
  116. package/src/prompts/session-templates.ts +13 -9
  117. package/src/providers/claude-adapter.ts +21 -8
  118. package/src/scheduler/deferred-task-waits.ts +34 -5
  119. package/src/scheduler/schedule-task.ts +5 -1
  120. package/src/scheduler/scheduler.ts +104 -123
  121. package/src/scripts-runtime/types/stdlib.d.ts +7 -3
  122. package/src/scripts-runtime/types/swarm-sdk.d.ts +7 -3
  123. package/src/slack/HEURISTICS.md +2 -0
  124. package/src/slack/actions.ts +1 -0
  125. package/src/slack/app.ts +2 -0
  126. package/src/slack/assistant.ts +4 -12
  127. package/src/slack/handlers.ts +9 -14
  128. package/src/slack/inbound-files.ts +3 -3
  129. package/src/slack/render-v2.ts +17 -3
  130. package/src/slack/thread-buffer.ts +66 -23
  131. package/src/slack/work-objects.test.ts +252 -0
  132. package/src/slack/work-objects.ts +118 -0
  133. package/src/tasks/worker-follow-up.ts +4 -0
  134. package/src/tests/acp-adapter.test.ts +10 -10
  135. package/src/tests/agent-fs-live-url.test.ts +40 -0
  136. package/src/tests/agent-fs-provision-seeder.test.ts +12 -12
  137. package/src/tests/api-key-tracking.test.ts +18 -18
  138. package/src/tests/api-key.test.ts +4 -2
  139. package/src/tests/apps-rbac.test.ts +1 -1
  140. package/src/tests/apps-spike5.test.ts +1 -1
  141. package/src/tests/apps-sync-engine.test.ts +8 -8
  142. package/src/tests/apps-user-config.test.ts +1 -1
  143. package/src/tests/artifact-sdk.test.ts +8 -8
  144. package/src/tests/asset-key-mcp.test.ts +2 -0
  145. package/src/tests/automation-preflight-alert.test.ts +1 -1
  146. package/src/tests/base-prompt.test.ts +6 -6
  147. package/src/tests/budget-user-scope.test.ts +1 -1
  148. package/src/tests/budgets-routes.test.ts +1 -1
  149. package/src/tests/claude-adapter-binary.test.ts +22 -40
  150. package/src/tests/claude-adapter-otel.test.ts +13 -7
  151. package/src/tests/claude-adapter.test.ts +8 -6
  152. package/src/tests/claude-hook-credentials.test.ts +3 -3
  153. package/src/tests/claude-managed-adapter.test.ts +4 -4
  154. package/src/tests/claude-managed-setup.test.ts +3 -3
  155. package/src/tests/claude-sdk-lifecycle.test.ts +1 -1
  156. package/src/tests/claude-sdk-transport.test.ts +6 -6
  157. package/src/tests/claude-stop-hook.test.ts +8 -8
  158. package/src/tests/claude-worker-parity.test.ts +3 -3
  159. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +5 -5
  160. package/src/tests/codex-adapter.test.ts +7 -5
  161. package/src/tests/codex-app-server.test.ts +2 -2
  162. package/src/tests/codex-login.test.ts +15 -15
  163. package/src/tests/codex-oauth-credential-info.test.ts +4 -4
  164. package/src/tests/codex-oauth-keep-warm.test.ts +4 -4
  165. package/src/tests/codex-oauth-refresh-lock.test.ts +1 -1
  166. package/src/tests/codex-oauth-storage.test.ts +7 -7
  167. package/src/tests/codex-pool.test.ts +1 -1
  168. package/src/tests/codex-steering-hook.test.ts +1 -1
  169. package/src/tests/codex-swarm-events.test.ts +1 -1
  170. package/src/tests/config-api-only-keys.test.ts +1 -1
  171. package/src/tests/config-session-auth.test.ts +2 -2
  172. package/src/tests/connection-embedded-auth.test.ts +20 -18
  173. package/src/tests/core-auth.test.ts +1 -1
  174. package/src/tests/create-page-tool.test.ts +3 -3
  175. package/src/tests/credential-refresh.test.ts +115 -0
  176. package/src/tests/credential-wait.test.ts +2 -2
  177. package/src/tests/credentials.test.ts +6 -4
  178. package/src/tests/db-queries-oauth.test.ts +40 -40
  179. package/src/tests/defer-task.test.ts +73 -8
  180. package/src/tests/deferred-task-wait-migration.test.ts +64 -0
  181. package/src/tests/deferred-task-wake.test.ts +190 -1
  182. package/src/tests/devin-adapter.test.ts +1 -1
  183. package/src/tests/devin-api.test.ts +1 -1
  184. package/src/tests/e2b-dispatch.test.ts +21 -19
  185. package/src/tests/e2e-claude-transport.test.ts +3 -3
  186. package/src/tests/e2e-redact.test.ts +6 -6
  187. package/src/tests/ensure-token.test.ts +68 -68
  188. package/src/tests/entrypoint-api-readiness.test.ts +1 -1
  189. package/src/tests/entrypoint-codex-oauth-seed.test.ts +13 -13
  190. package/src/tests/events-http.test.ts +1 -1
  191. package/src/tests/fs-routes.test.ts +1 -1
  192. package/src/tests/gitlab-auth.test.ts +10 -10
  193. package/src/tests/harness-provider-resolution.test.ts +8 -5
  194. package/src/tests/heartbeat-reroute-decision.test.ts +1 -0
  195. package/src/tests/helper-credentials.test.ts +137 -0
  196. package/src/tests/http/context-routes.test.ts +2 -2
  197. package/src/tests/http-api-integration.test.ts +5 -2
  198. package/src/tests/http-users.test.ts +1 -1
  199. package/src/tests/identity-refresh.test.ts +2 -2
  200. package/src/tests/internal-ai/complete-structured.test.ts +2 -2
  201. package/src/tests/internal-ai/credentials.test.ts +19 -17
  202. package/src/tests/jira-metadata.test.ts +1 -1
  203. package/src/tests/jira-oauth.test.ts +5 -5
  204. package/src/tests/jira-sync.test.ts +1 -1
  205. package/src/tests/jira-webhook-lifecycle.test.ts +3 -3
  206. package/src/tests/jira-webhook.test.ts +2 -2
  207. package/src/tests/kapso-inbound.test.ts +2 -2
  208. package/src/tests/kv-http.test.ts +1 -1
  209. package/src/tests/kv-namespace-resolution.test.ts +1 -1
  210. package/src/tests/kv-page-proxy.test.ts +2 -2
  211. package/src/tests/launch-password-rejection.test.ts +2 -2
  212. package/src/tests/linear-webhook.test.ts +1 -1
  213. package/src/tests/mcp-oauth-dcr-reuse.test.ts +6 -6
  214. package/src/tests/mcp-oauth-ensure-token.test.ts +28 -22
  215. package/src/tests/mcp-oauth-manual-client.test.ts +16 -12
  216. package/src/tests/mcp-oauth-queries.test.ts +35 -32
  217. package/src/tests/mcp-oauth-resolve-secrets.test.ts +8 -8
  218. package/src/tests/mcp-oauth-wrapper.test.ts +20 -20
  219. package/src/tests/mcp-user-route.test.ts +1 -1
  220. package/src/tests/memory-edges.test.ts +1 -1
  221. package/src/tests/memory-rate-endpoint.test.ts +1 -1
  222. package/src/tests/memory-rate-tool.test.ts +2 -2
  223. package/src/tests/memory-rater-e2e.test.ts +1 -1
  224. package/src/tests/memory-rater-llm-summarizer.test.ts +3 -3
  225. package/src/tests/memory-rater-llm.test.ts +1 -1
  226. package/src/tests/model-control.test.ts +3 -0
  227. package/src/tests/multi-runtime-registration.test.ts +97 -3
  228. package/src/tests/oauth-access-token-tool.test.ts +18 -18
  229. package/src/tests/oauth-callback-flow.test.ts +8 -8
  230. package/src/tests/oauth-credential-bindings.test.ts +29 -27
  231. package/src/tests/oauth-keepalive.test.ts +10 -10
  232. package/src/tests/oauth-presets.test.ts +13 -5
  233. package/src/tests/oauth-refresh-failure.test.ts +9 -9
  234. package/src/tests/oauth-refresh-sweep.test.ts +20 -13
  235. package/src/tests/oauth-wrapper.test.ts +1 -1
  236. package/src/tests/onboard-compose.test.ts +3 -3
  237. package/src/tests/onboard-env.test.ts +26 -26
  238. package/src/tests/onboard-non-interactive.test.ts +4 -4
  239. package/src/tests/opencode-adapter.test.ts +1 -1
  240. package/src/tests/opencode-plugin.test.ts +2 -2
  241. package/src/tests/otel-session-cost-metrics.test.ts +1 -1
  242. package/src/tests/page-proxy-authed.test.ts +2 -2
  243. package/src/tests/page-proxy.test.ts +2 -2
  244. package/src/tests/page-session.test.ts +7 -7
  245. package/src/tests/page-viewer-auth.test.ts +2 -2
  246. package/src/tests/pages-authed-mode.test.ts +1 -1
  247. package/src/tests/pages-http.test.ts +1 -1
  248. package/src/tests/pages-password-mode.test.ts +1 -1
  249. package/src/tests/pages-public-authed-401.test.ts +1 -1
  250. package/src/tests/pages-public-html.test.ts +2 -2
  251. package/src/tests/pages-view-count.test.ts +1 -1
  252. package/src/tests/pi-mono-adapter.test.ts +10 -10
  253. package/src/tests/pi-mono-extension.test.ts +2 -2
  254. package/src/tests/pricing-routes.test.ts +1 -1
  255. package/src/tests/profile-sync-warning.test.ts +8 -8
  256. package/src/tests/profile-sync.test.ts +8 -8
  257. package/src/tests/prompt-template-session.test.ts +36 -5
  258. package/src/tests/provider-process-group.test.ts +95 -4
  259. package/src/tests/providers/pi-cost.test.ts +1 -1
  260. package/src/tests/queue-stall-alarm.test.ts +1 -1
  261. package/src/tests/rbac-admission.test.ts +1 -1
  262. package/src/tests/rbac-charact-http.test.ts +1 -1
  263. package/src/tests/rbac-e2e-helpers.ts +1 -1
  264. package/src/tests/realtime-room-surfaces.test.ts +1 -1
  265. package/src/tests/reload-config.test.ts +1 -1
  266. package/src/tests/routing-reason-contract.test.ts +76 -3
  267. package/src/tests/routing-reason-inventory.test.ts +11 -6
  268. package/src/tests/routing-source.test.ts +53 -0
  269. package/src/tests/runner-agent-fs-provision-retry.test.ts +1 -1
  270. package/src/tests/runner-context-preamble.test.ts +1 -1
  271. package/src/tests/runner-deployment-resume.test.ts +1 -1
  272. package/src/tests/runner-fallback-output.test.ts +1 -1
  273. package/src/tests/runner-identity-refresh.test.ts +1 -1
  274. package/src/tests/runner-skills-refresh.test.ts +1 -1
  275. package/src/tests/schedule-target-type.test.ts +3 -3
  276. package/src/tests/scheduled-tasks.test.ts +14 -5
  277. package/src/tests/scheduler-occurrence.test.ts +347 -0
  278. package/src/tests/script-apis-mcp.test.ts +1 -1
  279. package/src/tests/script-connections-http.test.ts +61 -58
  280. package/src/tests/script-connections-mcp.test.ts +1 -1
  281. package/src/tests/script-connections.test.ts +1 -1
  282. package/src/tests/script-runs-http.test.ts +15 -7
  283. package/src/tests/script-workflows-runtime-e2e.test.ts +1 -1
  284. package/src/tests/scripts-external-api.test.ts +1 -1
  285. package/src/tests/scripts-http.test.ts +1 -1
  286. package/src/tests/scripts-mcp-e2e.test.ts +1 -1
  287. package/src/tests/scripts-only-gating.test.ts +2 -2
  288. package/src/tests/scripts-retention.test.ts +1 -1
  289. package/src/tests/scripts-runtime-identity.test.ts +1 -1
  290. package/src/tests/scripts-runtime-secret-egress.test.ts +1 -1
  291. package/src/tests/scripts-runtime.test.ts +6 -4
  292. package/src/tests/scripts-typecheck.test.ts +21 -0
  293. package/src/tests/sdk-allowlist.test.ts +1 -1
  294. package/src/tests/secret-scrubber.test.ts +38 -31
  295. package/src/tests/seed-registry.test.ts +46 -8
  296. package/src/tests/seed-schedules.test.ts +139 -8
  297. package/src/tests/seed-workflows.test.ts +93 -7
  298. package/src/tests/send-task-output-schema.test.ts +9 -1
  299. package/src/tests/send-task-requested-by.test.ts +1 -0
  300. package/src/tests/send-task-slack-routing-guard.test.ts +2 -0
  301. package/src/tests/session-costs-codex-recompute.test.ts +1 -1
  302. package/src/tests/session-costs-golden.test.ts +2 -2
  303. package/src/tests/session-costs-model-key-normalize.test.ts +2 -2
  304. package/src/tests/session-costs-recompute-all-providers.test.ts +1 -1
  305. package/src/tests/session-tokens.test.ts +1 -1
  306. package/src/tests/shutdown-error-scrubbing.test.ts +1 -1
  307. package/src/tests/slack-file-tools-attachments.test.ts +1 -1
  308. package/src/tests/slack-inbound-files.test.ts +222 -86
  309. package/src/tests/slack-reaction-config.test.ts +5 -4
  310. package/src/tests/slack-read-boundaries.test.ts +1 -1
  311. package/src/tests/slack-render-v2.test.ts +120 -1
  312. package/src/tests/status.test.ts +7 -7
  313. package/src/tests/steering-core.test.ts +1 -1
  314. package/src/tests/steering-transport.test.ts +4 -4
  315. package/src/tests/store-progress-output-guidance.test.ts +34 -0
  316. package/src/tests/swarm-tool-result-gate.test.ts +11 -11
  317. package/src/tests/swarm-x-tool.test.ts +7 -5
  318. package/src/tests/sync-ai-toolbox-skills.test.ts +19 -0
  319. package/src/tests/task-supersede-resume.test.ts +1 -1
  320. package/src/tests/task-tools-ctx.test.ts +2 -0
  321. package/src/tests/tasks-requested-by-filter.test.ts +2 -2
  322. package/src/tests/telemetry-init.test.ts +11 -3
  323. package/src/tests/tool-output-agent-id.test.ts +1 -0
  324. package/src/tests/tracker-fold.test.ts +7 -7
  325. package/src/tests/tracker-tools.test.ts +3 -3
  326. package/src/tests/ui-followup-lead-delegation.test.ts +1 -0
  327. package/src/tests/unified-oauth-migration.test.ts +5 -5
  328. package/src/tests/user-token-rest-auth.test.ts +1 -1
  329. package/src/tests/user-token-routes.test.ts +1 -1
  330. package/src/tests/whoami-route.test.ts +1 -1
  331. package/src/tests/workflow-agent-task.test.ts +15 -13
  332. package/src/tests/workflow-ctx.test.ts +1 -1
  333. package/src/tests/workflow-e2e.test.ts +1 -1
  334. package/src/tests/workflow-engine-v2.test.ts +3 -1
  335. package/src/tests/workflow-executors.test.ts +2 -2
  336. package/src/tests/workflow-http-v2.test.ts +8 -6
  337. package/src/tests/workflow-input-redaction.test.ts +7 -5
  338. package/src/tests/workflow-integration-io.test.ts +2 -2
  339. package/src/tests/workflow-llm.test.ts +5 -5
  340. package/src/tests/workflow-registry.test.ts +1 -1
  341. package/src/tests/workflow-swarm-script.test.ts +1 -1
  342. package/src/tests/workflow-triggers-v2.test.ts +23 -21
  343. package/src/tests/x-composio.test.ts +9 -7
  344. package/src/tests/x402-client.test.ts +1 -1
  345. package/src/tests/x402-config.test.ts +28 -41
  346. package/src/tools/defer-task.ts +156 -24
  347. package/src/tools/send-task.ts +21 -1
  348. package/src/tools/skills/skill-publish.ts +1 -0
  349. package/src/tools/store-progress.ts +1 -1
  350. package/src/tools/templates.ts +2 -1
  351. package/src/types.ts +11 -0
  352. package/src/utils/constants.ts +7 -1
  353. package/src/utils/credentials.test.ts +16 -16
  354. package/src/workflows/executors/agent-task.ts +5 -0
  355. package/templates/ai-toolbox.manifest.json +7 -1
  356. package/templates/schedules/daily-blocker-digest/config.json +6 -1
  357. package/templates/schedules/daily-compounding-reflection/config.json +1 -0
  358. package/templates/schedules/daily-hn-briefing/config.json +1 -1
  359. package/templates/schedules/daily-status-report/config.json +6 -1
  360. package/templates/schedules/daily-swarm-update-check/config.json +19 -0
  361. package/templates/schedules/daily-swarm-update-check/content.md +49 -0
  362. package/templates/schedules/daily-workflow-health-audit/config.json +6 -1
  363. package/templates/schedules/gtm-weekly-review/config.json +1 -1
  364. package/templates/schedules/weekly-code-health-reports/config.json +1 -1
  365. package/templates/schedules/weekly-dependabot-triage/config.json +1 -1
  366. package/templates/schedules/weekly-dora-metrics/config.json +1 -1
  367. package/templates/schedules/weekly-harness-upgrade-check/config.json +1 -1
  368. package/templates/skills/delegate-work/files/scripts/codex-exec.sh +1 -1
  369. package/templates/skills/serply-search/SKILL.md +95 -0
  370. package/templates/skills/serply-search/config.json +13 -0
  371. package/templates/skills/serply-search/content.md +90 -0
  372. package/templates/skills/swarm-scripts/SKILL.md +2 -2
  373. package/templates/skills/swarm-scripts/content.md +2 -2
  374. package/templates/workflows/claude-code-changelog-watch/config.json +1 -1
  375. package/templates/workflows/gsc-topic-miner/config.json +1 -1
  376. package/templates/workflows/linear-drain-loop/config.json +1 -1
  377. package/templates/workflows/llm-safe-release-context/config.json +1 -1
  378. package/templates/workflows/ralph-loop/config.json +1 -1
  379. package/dist/{azure-openai-responses-cqar64rc.js → azure-openai-responses-g85jv7m8.js} +8 -8
  380. package/dist/{cli-4xz3pmrq.js → cli-8qx7jnrk.js} +5 -5
  381. package/dist/{cli-6664w7y4.js → cli-wk0gjrn3.js} +3 -3
  382. package/dist/{google-vertex-ppw8ydpa.js → google-vertex-pkhpkbq9.js} +3 -3
  383. package/dist/{openai-codex-responses-g7w48y30.js → openai-codex-responses-pm5gnyfa.js} +4 -4
  384. package/dist/{openai-completions-0bqmsajw.js → openai-completions-qdcmkfnr.js} +12 -12
  385. package/dist/{openai-responses-nmeyptke.js → openai-responses-vwvk1taj.js} +13 -13
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  init_task_attachment_links,
6
6
  taskAttachmentDisplayUrl
7
- } from "./cli-9d8ntetj.js";
7
+ } from "./cli-2658f6at.js";
8
8
  import {
9
9
  require_jws,
10
10
  require_p_retry
@@ -49,11 +49,11 @@ import {
49
49
  setSlackMessageTracking,
50
50
  slackContextKey,
51
51
  updateSlackMessageRecord
52
- } from "./cli-yab68w40.js";
52
+ } from "./cli-qp69dd5d.js";
53
53
  import {
54
54
  getAppUrl,
55
55
  init_constants
56
- } from "./cli-e29gmdmw.js";
56
+ } from "./cli-dv6cdjs2.js";
57
57
  import {
58
58
  init_env_flag,
59
59
  isEnvFlagEnabled
@@ -54475,7 +54475,7 @@ async function initOtel(serviceRole = process.env.AGENT_ROLE || "api") {
54475
54475
  return;
54476
54476
  initialized = true;
54477
54477
  try {
54478
- const impl = await import("./otel-impl-tbk3e5dr.js");
54478
+ const impl = await import("./otel-impl-8rgyy3j8.js");
54479
54479
  await impl.boot(serviceRole);
54480
54480
  realWithSpan = impl.withSpan;
54481
54481
  realStartSpan = impl.startSpan;
@@ -55793,13 +55793,15 @@ async function initSlackApp() {
55793
55793
  logLevel: import_bolt.LogLevel.DEBUG,
55794
55794
  ...slackApiUrl ? { clientOptions: { slackApiUrl } } : {}
55795
55795
  });
55796
- const { registerMessageHandler } = await import("./handlers-nbzdzn9k.js");
55797
- const { registerCommandHandler } = await import("./commands-hz3nb95f.js");
55798
- const { registerActionHandlers } = await import("./actions-31vp3ae7.js");
55796
+ const { registerMessageHandler } = await import("./handlers-vr1djg4n.js");
55797
+ const { registerCommandHandler } = await import("./commands-26phw0pc.js");
55798
+ const { registerActionHandlers } = await import("./actions-wn6ew0p7.js");
55799
+ const { registerWorkObjectHandlers } = await import("./work-objects-8d3nd3x2.js");
55799
55800
  registerMessageHandler(app);
55800
55801
  registerCommandHandler(app);
55801
55802
  registerActionHandlers(app);
55802
- const { createAssistant } = await import("./assistant-z66dmz6p.js");
55803
+ registerWorkObjectHandlers(app);
55804
+ const { createAssistant } = await import("./assistant-q4vhgjtx.js");
55803
55805
  app.assistant(createAssistant());
55804
55806
  return app;
55805
55807
  }
@@ -55808,7 +55810,7 @@ async function startSlackApp() {
55808
55810
  await initSlackApp();
55809
55811
  }
55810
55812
  if (app) {
55811
- const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-80w603vy.js");
55813
+ const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-3j26g0qh.js");
55812
55814
  if (isSlackRenderV2Enabled2())
55813
55815
  await ensureSlackRenderV2Activation();
55814
55816
  await app.start();
@@ -56449,7 +56451,8 @@ ${outcomeText(task.failureReason, "Task failed.")}`;
56449
56451
 
56450
56452
  ${outcomeText(task.failureReason, "Task was cancelled.")}`;
56451
56453
  }
56452
- if (slackReplySent && task.status === "completed") {
56454
+ const isDeferred = task.tags?.includes("deferred");
56455
+ if (slackReplySent && task.status === "completed" && !isDeferred) {
56453
56456
  const agentName = task.agentId ? (await getAgentById(task.agentId))?.name ?? "Agent" : "Agent";
56454
56457
  return `✅ ${agentName} completed`;
56455
56458
  }
@@ -56467,7 +56470,7 @@ async function childOutcomeContent(task, slackReplySent) {
56467
56470
 
56468
56471
  ${outcomeText(task.failureReason, "Task failed.")}`;
56469
56472
  }
56470
- if (slackReplySent) {
56473
+ if (slackReplySent && !task.tags?.includes("deferred")) {
56471
56474
  return `↳ ✅ ${agentName} completed`;
56472
56475
  }
56473
56476
  return `↳ ✅ ${agentName} — result
@@ -56564,7 +56567,11 @@ function attachmentLine(attachments) {
56564
56567
  if (!attachment)
56565
56568
  return;
56566
56569
  const url = taskAttachmentDisplayUrl(attachment);
56567
- return /^https?:\/\//.test(url) ? `\uD83D\uDCCE [${attachment.name}](${url})` : undefined;
56570
+ if (!/^https?:\/\//.test(url))
56571
+ return;
56572
+ const label = attachment.name.replace(/\s+/g, " ").trim().replace(/[\\[\]()]/g, "\\$&");
56573
+ const destination = url.replace(/[\s\\<>]/g, encodeURIComponent).replace(/\(/g, "%28").replace(/\)/g, "%29");
56574
+ return `\uD83D\uDCCE [${label}](${destination})`;
56568
56575
  }
56569
56576
  function fenceAt(line) {
56570
56577
  const match = line.match(/^[ \t]{0,3}(`{3,}|~{3,})/);
@@ -56958,4 +56965,4 @@ function _resetSlackRenderV2ForTests() {
56958
56965
  cachedTeamId = undefined;
56959
56966
  }
56960
56967
 
56961
- export { initialize, ensure, require_dist7 as require_dist, isPollTracingEnabled, initOtel, withSpan, startSpan, withSpanContext, withRemoteContext, injectTraceContext, recordSessionCost, recordDbRetentionSweep, recordDbRetentionStatement, ackSlackMessage, getTaskLink, markdownToSlack, buildCancelledBlocks, buildBufferFlushBlocks, buildTreeBlocks, getAgentDisplayName, getAgentEmoji, isSlackRenderV2Enabled, isSlackDelegationEnabled, callSlackWithRetry, formatV2Duration, renderThreadTree, ensureSlackThreadTree, childOutcomeContent, streamOutcomeCard, processSlackRenderV2, _resetSlackRenderV2ForTests, registerTreeMessage, getSlackApp, initSlackApp, startSlackApp, stopSlackApp };
56968
+ export { initialize, ensure, require_dist7 as require_dist, isPollTracingEnabled, initOtel, withSpan, startSpan, withSpanContext, withRemoteContext, injectTraceContext, recordSessionCost, recordDbRetentionSweep, recordDbRetentionStatement, ackSlackMessage, getTaskLink, getTaskUrl, markdownToSlack, buildCancelledBlocks, buildBufferFlushBlocks, buildTreeBlocks, getAgentDisplayName, getAgentEmoji, isSlackRenderV2Enabled, isSlackDelegationEnabled, callSlackWithRetry, formatV2Duration, renderThreadTree, ensureSlackThreadTree, childOutcomeContent, streamOutcomeCard, processSlackRenderV2, _resetSlackRenderV2ForTests, registerTreeMessage, getSlackApp, initSlackApp, startSlackApp, stopSlackApp };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-kjwt6hdf.js";
4
+ } from "./cli-gm0fhz13.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
@@ -5592,7 +5592,7 @@ function amazonBedrockProvider() {
5592
5592
  }
5593
5593
 
5594
5594
  // node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js
5595
- var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-0bqmsajw.js"));
5595
+ var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-qdcmkfnr.js"));
5596
5596
 
5597
5597
  // node_modules/@earendil-works/pi-ai/dist/auth/helpers.js
5598
5598
  function envApiKeyAuth(name, envVars) {
@@ -5648,7 +5648,7 @@ function antLingProvider() {
5648
5648
  }
5649
5649
 
5650
5650
  // node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js
5651
- var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-vs2rabzp.js"));
5651
+ var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-ec35ktvx.js"));
5652
5652
 
5653
5653
  // node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js
5654
5654
  var __rewriteRelativeImportExtension = function(path, preserveJsx) {
@@ -5886,7 +5886,7 @@ function anthropicProvider() {
5886
5886
  }
5887
5887
 
5888
5888
  // node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.lazy.js
5889
- var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-cqar64rc.js"));
5889
+ var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-g85jv7m8.js"));
5890
5890
 
5891
5891
  // node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js
5892
5892
  function azureOpenAIResponsesProvider() {
@@ -5924,7 +5924,7 @@ function cerebrasProvider() {
5924
5924
  }
5925
5925
 
5926
5926
  // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.lazy.js
5927
- var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-nmeyptke.js"));
5927
+ var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-vwvk1taj.js"));
5928
5928
 
5929
5929
  // node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.js
5930
5930
  var CLOUDFLARE_API_KEY = "CLOUDFLARE_API_KEY";
@@ -6127,7 +6127,7 @@ function googleProvider() {
6127
6127
  }
6128
6128
 
6129
6129
  // node_modules/@earendil-works/pi-ai/dist/api/google-vertex.lazy.js
6130
- var googleVertexApi = () => lazyApi(() => import("./google-vertex-ppw8ydpa.js"));
6130
+ var googleVertexApi = () => lazyApi(() => import("./google-vertex-pkhpkbq9.js"));
6131
6131
 
6132
6132
  // node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js
6133
6133
  var VERTEX_ADC_PATH = "~/.config/gcloud/application_default_credentials.json";
@@ -6344,7 +6344,7 @@ function openaiProvider() {
6344
6344
  }
6345
6345
 
6346
6346
  // node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.lazy.js
6347
- var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-g7w48y30.js"));
6347
+ var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-pm5gnyfa.js"));
6348
6348
 
6349
6349
  // node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js
6350
6350
  function openaiCodexProvider() {
@@ -3,7 +3,7 @@ import {
3
3
  getAgentById,
4
4
  getInProgressTasksByContextKey,
5
5
  init_db
6
- } from "./cli-yab68w40.js";
6
+ } from "./cli-qp69dd5d.js";
7
7
 
8
8
  // src/tasks/sibling-awareness.ts
9
9
  init_db();
@@ -268,8 +268,9 @@ Choose the path by the shape of the work:
268
268
  - Everything else: tools, directly.
269
269
 
270
270
  Store progress with \`store-progress\` at each milestone. A milestone is a result the lead could act on.
271
- The task is done when \`store-progress\` carries status \`completed\` and an \`output\` that names the result and every artifact link. On failure, status \`failed\` and a \`failureReason\` that names what you tried.
272
- When the task carries an \`outputSchema\`, \`output\` is JSON that matches it.
271
+ Complete with \`store-progress\`: status \`completed\`, and \`output\` naming the result and every artifact link. On failure: status \`failed\`, with \`failureReason\` naming what you tried.
272
+ Free-text \`output\`: under 120 words by default, with the exceptions in How you write. Link documents instead of inlining them; omit process narration.
273
+ For a task with \`outputSchema\`, return matching JSON in \`output\`.
273
274
  When you are blocked after real effort, store the blocker with \`store-progress\` and keep working on what you can.
274
275
  The task has four endings. When you are done: \`completed\`. When the answer needs time (a build, a deploy, a reply): \`defer-task\` with a summary of what you did, when to wake up, and what to check. It completes the task now; the wake-up task continues it. When a person must decide: \`request-human-input\`. When nothing else is possible: \`failed\` with the blocker.
275
276
  `,
@@ -285,7 +286,7 @@ The task has four endings. When you are done: \`completed\`. When the answer nee
285
286
  Your output is delegation and review. Workers implement, research, analyze, and write. Data gathering, even a quick query, goes to a worker. You answer simple factual questions yourself.
286
287
 
287
288
  \`get-swarm\` is the roster. Route by capability and load.
288
- \`send-task\`: include \`routingReason\` with \`agentId\`. Read results via \`get-task-details\`.
289
+ \`send-task\`: include \`routingReason\` and \`routingNote\` (at least 10 characters after trim, maximum 200) with \`agentId\`. Read results via \`get-task-details\`.
289
290
  A task states the goal, the repo URL when there is one, and the constraints. Workers know git, the skills, and \`store-progress\`.
290
291
  Delegate by the shape of the work: a workflow for multi-step or fan-out work, a schedule for recurring work, a script for bulk data, an inline \`script-run\` for a one-off bulk job you can run yourself. The \`workflow-iterate\`, \`scheduling\`, and \`swarm-scripts\` skills build them.
291
292
  Research or exploration: tell the worker to use the \`researching\` skill. A large feature: a task for the \`planning\` skill first, then a task for the \`implementing\` skill with \`parentTaskId\`. A small fix: direct implementation.
@@ -310,6 +311,7 @@ Your heartbeat runbook is the \`heartbeatMd\` profile field. Edit it with \`upda
310
311
  The lead assigns your tasks and reviews your output. Your task is in your first message, with memories from past sessions.
311
312
 
312
313
  Your final message is the task output. It names the result, every link (a PR, a file, a page), and, on failure, what you tried and what blocked you.
314
+ Free-text task output: under 120 words by default, with the exceptions in How you write. Link documents instead of inlining them; omit process narration.
313
315
  `,
314
316
  variables: [],
315
317
  category: "system"
@@ -399,14 +401,14 @@ Link env: \`APP_URL\` for pages, \`MCP_BASE_URL\` for the API. Report missing va
399
401
  defaultBody: `
400
402
  ## How you write
401
403
 
402
- For human-facing replies and artifacts: lead with the result. Use plain words, active voice, one idea per sentence, and sentence case headings.
404
+ For replies, task output (\`output\` or a remote final message), and artifacts: lead with the result. Use plain words, active voice, one idea per sentence, and sentence case headings.
403
405
  State blockers and reasons. Preserve meaningful uncertainty.
404
406
  Omit em dashes, filler, sign-offs, praise, repetition, step narration, and generic offers to elaborate.
405
407
 
406
- Simple replies: one to three sentences. Routine replies: under 120 words, using short paragraphs or up to three bullets.
407
- Use more detail for requested depth or essential evidence, caveats, or instructions.
408
- Include context only when it changes understanding or action. Link extensive supporting material when useful, but make the reply self-contained.
409
- Do not shorten investigation, required artifacts, or schema-defined output to meet reply limits.
408
+ Simple replies: one to three sentences. Routine replies and free-text task output: under 120 words by default, in short paragraphs or up to three bullets.
409
+ Exceed for requested depth, enumerated results, essential evidence, caveats, instructions, or longer output required by the task's \`outputSchema\`.
410
+ Keep replies and task output self-contained; link documents instead of inlining them.
411
+ Preserve investigation and required artifacts. Schema exemptions apply to \`outputSchema\`-constrained completions; free-text \`output\` follows the target.
410
412
 
411
413
  Follow the current request and Requester Profile for language, tone, depth, and format. Correctness wins over style.
412
414
  Use the \`comms\` skill when available for requested simplification or clarity rewrites. Ordinary replies need no skill invocation.
@@ -437,6 +439,7 @@ Read a config value inside a script with \`ctx.swarm.config.get\`.
437
439
  ## Slack
438
440
 
439
441
  The engine posts the thread tree and the outcome card. You post at most one message per task, and only when you have something the card will not carry. Progress, receipts, and relayed worker output stay out of Slack.
442
+ The outcome card publishes your \`output\` verbatim. Keep free-text \`output\` under 120 words by default, with the exceptions in How you write.
440
443
  A Slack task from an unknown user: register them with \`manage-user\` first.
441
444
  You MUST use the \`slack-interaction\` skill before you post to Slack.
442
445
  `,
@@ -533,7 +536,7 @@ This swarm runs in **scripts-only mode**. The ONLY swarm MCP tools available are
533
536
  The script authoring contract in the \`swarm-scripts\` skill (entry signature, \`ctx\` shape, secret handling) applies here unchanged. The full SDK is \`ctx.swarm.*\`: task lifecycle (\`task_get\`, \`task_send\`, \`task_storeProgress\`, \`task_action\`, \`task_list\`), Slack (\`slack_reply\`, \`slack_post\`, \`slack_read\`), memory, kv, swarm info (\`swarm_get\`, \`agent_info\`), and more. Responses are usually wrapped; prefer \`res?.data ?? res\`.
534
537
 
535
538
  **Built-in coordination scripts, USE THESE FIRST (\`script-run\` with \`name\` + \`args\`):**
536
- - \`delegate\` {agentName, task, routingReason, parentTaskId?} → subtask for an agent by name; returns {taskId}
539
+ - \`delegate\` {agentName, task, routingReason, routingNote, parentTaskId?} → subtask for an agent by name; returns {taskId}
537
540
  - \`wait-for-task\` {taskId} → waits up to ~25s for a terminal state; returns {done, status, output}; only for a child expected to finish within about a minute whose result the answer requires. Bound all calls to about a minute total; if still done=false, use \`defer-task\` with a wake-up to collect the result.
538
541
  - \`get-child-outputs\` {parentTaskId} → all children with status+output
539
542
  - \`complete-task\` {taskId, output} → THE way to finish your assigned task
@@ -558,6 +561,7 @@ Rules of the road:
558
561
  ## Slack (scripts-only)
559
562
 
560
563
  This task originated from Slack (channel: \`{{slackChannelId}}\`). The engine maintains the thread tree and publishes the top-level outcome card. Post at most one distinct agent-authored message per task, concrete, sized to what the user asked for. Progress, start, completion, failure, acknowledgment messages, and relayed raw task output stay out of Slack. Named Slack tools are not exposed in scripts-only mode, so use \`script-run\` with inline source calling \`ctx.swarm.slack_reply({ taskId, message })\` (your taskId carries the thread context).
564
+ The outcome card publishes your \`output\` verbatim. Keep free-text \`output\` under 120 words by default, with the exceptions in How you write.
561
565
  `,
562
566
  variables: [
563
567
  { name: "slackChannelId", description: "The Slack channel ID for the originating thread" },
@@ -7,14 +7,14 @@ import {
7
7
  restoreScratchScriptLastUsedIfUnchanged,
8
8
  runScript,
9
9
  touchScratchScriptLastUsed
10
- } from "./cli-aae6hz6a.js";
10
+ } from "./cli-zd21jrrc.js";
11
11
  import {
12
12
  defaultAssetKey,
13
13
  getDbClient,
14
14
  getLeadAgent,
15
15
  init_db,
16
16
  init_key
17
- } from "./cli-yab68w40.js";
17
+ } from "./cli-qp69dd5d.js";
18
18
  import {
19
19
  init_zod
20
20
  } from "./cli-sd0mxa3c.js";
@@ -1,3 +1,7 @@
1
+ import {
2
+ deriveProviderFromKeyType,
3
+ init_credentials
4
+ } from "./cli-c2mk1kgf.js";
1
5
  import {
2
6
  IdentityFieldBudgetError,
3
7
  checkIdentityFieldBudget,
@@ -10,7 +14,7 @@ import {
10
14
  init_templates,
11
15
  matchesDefaultClaudeMd,
12
16
  matchesDefaultIdentityMd
13
- } from "./cli-08b07b4r.js";
17
+ } from "./cli-hmyynq9b.js";
14
18
  import {
15
19
  configureDbResolver,
16
20
  getAllTemplateDefinitions,
@@ -20,15 +24,11 @@ import {
20
24
  init_steering_enabled,
21
25
  isSteeringEnabled,
22
26
  registerTemplate
23
- } from "./cli-3apbzgyk.js";
27
+ } from "./cli-n75jt793.js";
24
28
  import {
25
29
  MAX_PROFILE_FILE_LENGTH,
26
30
  init_constants
27
- } from "./cli-e29gmdmw.js";
28
- import {
29
- deriveProviderFromKeyType,
30
- init_credentials
31
- } from "./cli-c2mk1kgf.js";
31
+ } from "./cli-dv6cdjs2.js";
32
32
  import {
33
33
  init_env_flag,
34
34
  isEnvFlagEnabled
@@ -49,7 +49,7 @@ import {
49
49
  import {
50
50
  init_package,
51
51
  package_default
52
- } from "./cli-kjwt6hdf.js";
52
+ } from "./cli-gm0fhz13.js";
53
53
  import {
54
54
  init_secret_scrubber,
55
55
  registerVolatileSecret,
@@ -2187,7 +2187,7 @@ function resolveTaskModelSelection(opts) {
2187
2187
  function isTerminalTaskStatus(status) {
2188
2188
  return TERMINAL_TASK_STATUSES.includes(status);
2189
2189
  }
2190
- var AssetKeySchema, AssetEntityTypeSchema, AssetProviderRefSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, LEGACY_MODEL_TO_TIER, DEFAULT_MODEL_TIER_MAP, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, InboxMessageStatusSchema, InboxMessageSchema, AgentTaskSourceSchema, RoutingReasonSchema, ProviderNameSchema, SteerModeSchema, SteeringStatusSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, SteerResultSchema, PROVIDER_STEER_CAPABILITIES, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, CreateTaskOptionsSchema, TaskAttachmentKindSchema, SERVER_GENERATED_ATTACHMENT_CAPABILITY = "_agentSwarmGeneratedBy", attachmentCapabilitiesSchema, attachmentCommonFields, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, UserCommsPrefsSchema, IdentityEventTypeSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentCredStatusLiveTestSchema, AgentLatestModelSchema, AgentBedrockStatusSchema, AcpSessionConfigSelectValueSchema, AcpSessionConfigSelectGroupSchema, AcpSessionConfigOptionSchema, AgentAcpStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, ChangeSourceSchema, VersionableFieldSchema, ContextVersionSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, AgentLogEventTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostSourceSchema, SessionCostModelBreakdownSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, AutomationIntegrationIdSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, REPO_GUIDELINES_MAX_ENTRIES = 50, RepoGuidelinesInputSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, RuntimeInstanceStatusSchema, RuntimeInstanceSchema, RetryPolicySchema, ExecutorMetaSchema, ValidationResultSchema, StepValidationConfigSchema, SwarmScriptNodeConfigSchema, WorkflowNodeSchema, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, WebhookVerificationSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowTemplateSchema, WorkflowSnapshotSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSnapshotSchema, PageSchema, PageVersionSchema, MetricParamSchema, MetricVariableTypeSchema, MetricFormatSchema, MetricVisualizationSchema, MetricQuerySchema, MetricVariableSchema, MetricVizConfigSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSnapshotSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunKindSchema, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepStatusSchema, WorkflowRunStepSchema, WaitModeSchema, WaitStateStatusSchema, WaitStateRowSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillTypeSchema, SkillScopeSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpServerTransportSchema, McpServerScopeSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KV_NAME_REGEX, KvNamespaceSchema, KvKeySchema, KvEntrySchema;
2190
+ var AssetKeySchema, AssetEntityTypeSchema, AssetProviderRefSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, LEGACY_MODEL_TO_TIER, DEFAULT_MODEL_TIER_MAP, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, InboxMessageStatusSchema, InboxMessageSchema, AgentTaskSourceSchema, RoutingReasonSchema, RoutingSourceSchema, ProviderNameSchema, SteerModeSchema, SteeringStatusSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, SteerResultSchema, PROVIDER_STEER_CAPABILITIES, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, CreateTaskOptionsSchema, TaskAttachmentKindSchema, SERVER_GENERATED_ATTACHMENT_CAPABILITY = "_agentSwarmGeneratedBy", attachmentCapabilitiesSchema, attachmentCommonFields, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, UserCommsPrefsSchema, IdentityEventTypeSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentCredStatusLiveTestSchema, AgentLatestModelSchema, AgentBedrockStatusSchema, AcpSessionConfigSelectValueSchema, AcpSessionConfigSelectGroupSchema, AcpSessionConfigOptionSchema, AgentAcpStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, ChangeSourceSchema, VersionableFieldSchema, ContextVersionSchema, ChannelTypeSchema, ChannelSchema, ChannelMessageSchema, ServiceStatusSchema, ServiceSchema, AgentLogEventTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostSourceSchema, SessionCostModelBreakdownSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, AutomationIntegrationIdSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesSchema, REPO_GUIDELINES_MAX_ENTRIES = 50, RepoGuidelinesInputSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, RuntimeInstanceStatusSchema, RuntimeInstanceSchema, RetryPolicySchema, ExecutorMetaSchema, ValidationResultSchema, StepValidationConfigSchema, SwarmScriptNodeConfigSchema, WorkflowNodeSchema, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, WebhookVerificationSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowTemplateSchema, WorkflowSnapshotSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSnapshotSchema, PageSchema, PageVersionSchema, MetricParamSchema, MetricVariableTypeSchema, MetricFormatSchema, MetricVisualizationSchema, MetricQuerySchema, MetricVariableSchema, MetricVizConfigSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSnapshotSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunKindSchema, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepStatusSchema, WorkflowRunStepSchema, WaitModeSchema, WaitStateStatusSchema, WaitStateRowSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillTypeSchema, SkillScopeSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpServerTransportSchema, McpServerScopeSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KV_NAME_REGEX, KvNamespaceSchema, KvKeySchema, KvEntrySchema;
2191
2191
  var init_types = __esm(() => {
2192
2192
  init_key();
2193
2193
  init_constants();
@@ -2350,6 +2350,7 @@ var init_types = __esm(() => {
2350
2350
  "human_pinned",
2351
2351
  "reroute_fault"
2352
2352
  ]);
2353
+ RoutingSourceSchema = exports_zod.enum(["declared", "engine_default"]);
2353
2354
  ProviderNameSchema = exports_zod.enum([
2354
2355
  "claude",
2355
2356
  "codex",
@@ -2425,6 +2426,7 @@ var init_types = __esm(() => {
2425
2426
  status: AgentTaskStatusSchema,
2426
2427
  source: AgentTaskSourceSchema.default("mcp"),
2427
2428
  routingReason: RoutingReasonSchema.optional(),
2429
+ routingSource: RoutingSourceSchema.optional().describe("Origin of the routing reason: declared by the caller or chosen by the engine. Absent for unknown historical provenance or no reason."),
2428
2430
  routingNote: exports_zod.string().max(200).optional(),
2429
2431
  taskType: exports_zod.string().max(50).optional(),
2430
2432
  tags: exports_zod.array(exports_zod.string()).default([]),
@@ -2497,6 +2499,7 @@ var init_types = __esm(() => {
2497
2499
  creatorAgentId: exports_zod.string().optional(),
2498
2500
  source: AgentTaskSourceSchema.optional(),
2499
2501
  routingReason: RoutingReasonSchema.optional(),
2502
+ routingSource: RoutingSourceSchema.optional(),
2500
2503
  routingNote: exports_zod.string().max(200).optional(),
2501
2504
  taskType: exports_zod.string().max(50).optional(),
2502
2505
  tags: exports_zod.array(exports_zod.string()).optional(),
@@ -2643,7 +2646,8 @@ var init_types = __esm(() => {
2643
2646
  "credential_missing",
2644
2647
  "broken_task",
2645
2648
  "to_read",
2646
- "to_start_template"
2649
+ "to_start_template",
2650
+ "notification"
2647
2651
  ]);
2648
2652
  InboxItemStatusSchema = exports_zod.enum(["open", "snoozed", "dismissed", "done"]);
2649
2653
  InboxItemStateSchema = exports_zod.object({
@@ -5197,6 +5201,7 @@ Use the crashed agent's identity above as context for who was on it and what kin
5197
5201
  Dispatch via \`send-task\` with ALL of:
5198
5202
  - an explicit \`agentId\` (the chosen worker) — REQUIRED. If you omit it, \`send-task\` auto-routes to the original task's agent, which is the dead worker, and the work re-strands.
5199
5203
  - \`routingReason: "reroute_fault"\`
5204
+ - \`routingNote\`: explain why this worker is the right recovery target (at least 10 characters after trim, maximum 200)
5200
5205
  - \`taskType: "resume"\`
5201
5206
  - the tag \`resume-generation:{{generation_next}}\`
5202
5207
  - \`parentTaskId: {{original_task_id}}\`
@@ -5238,7 +5243,7 @@ Required capabilities: {{required_capabilities}}{{artifacts_block}}
5238
5243
 
5239
5244
  This task has been sitting unassigned because no currently-registered agent matches its required role/capabilities. Pick an agent to take this work over and RE-DELEGATE it — do NOT execute it yourself.
5240
5245
 
5241
- Dispatch via \`send-task\` with an explicit \`agentId\` (REQUIRED — omitting it re-pools the work under the same affinity tag and it will starve again), \`routingReason: "overflow"\`, and \`parentTaskId: {{original_task_id}}\`.
5246
+ Dispatch via \`send-task\` with an explicit \`agentId\` (REQUIRED — omitting it re-pools the work under the same affinity tag and it will starve again), \`routingReason: "overflow"\`, a \`routingNote\` explaining the worker choice (at least 10 characters after trim, maximum 200), and \`parentTaskId: {{original_task_id}}\`.
5242
5247
 
5243
5248
  This work will NOT fall back to the unassigned pool — you are the only re-delegation path.`,
5244
5249
  variables: [
@@ -5910,6 +5915,7 @@ function rowToAgentTask(row) {
5910
5915
  status: row.status,
5911
5916
  source: row.source,
5912
5917
  routingReason: row.routing_reason ?? undefined,
5918
+ routingSource: row.routing_source ?? undefined,
5913
5919
  routingNote: row.routing_note ?? undefined,
5914
5920
  taskType: row.taskType ?? undefined,
5915
5921
  tags: row.tags ? JSON.parse(row.tags) : [],
@@ -6709,7 +6715,7 @@ async function updateTaskTitle(taskId, title2) {
6709
6715
  const row = await getDbClient().get("UPDATE agent_tasks SET title = ? WHERE id = ? RETURNING *", [normalized, taskId]);
6710
6716
  return row ? rowToAgentTask(row) : null;
6711
6717
  }
6712
- async function completeTask(id, output) {
6718
+ async function completeTask(id, output, options) {
6713
6719
  const oldTask = await getTaskById(id);
6714
6720
  if (!oldTask)
6715
6721
  return null;
@@ -6725,6 +6731,11 @@ async function completeTask(id, output) {
6725
6731
  if (output) {
6726
6732
  completed = await getDbClient().get("UPDATE agent_tasks SET output = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *", [scrubSecrets(output), id]);
6727
6733
  }
6734
+ if (completed && options?.addTags?.length) {
6735
+ const existingTags = completed.tags ? JSON.parse(completed.tags) : [];
6736
+ const nextTags = Array.from(new Set([...existingTags, ...options.addTags]));
6737
+ completed = await getDbClient().get("UPDATE agent_tasks SET tags = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *", [JSON.stringify(nextTags), id]);
6738
+ }
6728
6739
  if (completed) {
6729
6740
  await dependencies3.reconcileTaskPullRequestAttachments(id, completed.agentId, [
6730
6741
  completed.output,
@@ -7146,6 +7157,7 @@ async function promoteSteeringToTask(task, message) {
7146
7157
  return await createTaskExtended(message.body, {
7147
7158
  agentId: task.agentId,
7148
7159
  routingReason: task.agentId ? "continuity" : undefined,
7160
+ routingSource: task.agentId ? "engine_default" : undefined,
7149
7161
  creatorAgentId: message.createdByAgentId,
7150
7162
  source: message.source === "script" ? "api" : message.source,
7151
7163
  taskType: "follow-up",
@@ -7664,6 +7676,7 @@ var init_swarm_config_guard = __esm(() => {
7664
7676
  "ADDITIVE_SLACK",
7665
7677
  "SLACK_THREAD_FOLLOWUP_REQUIRE_MENTION",
7666
7678
  "RBAC_ENABLED",
7679
+ "SEED_AUTOMATIONS_ENABLED",
7667
7680
  "RBAC_AUDIT_DISABLED",
7668
7681
  "BUDGET_ADMISSION_DISABLED",
7669
7682
  "MCP_OAUTH_ALLOW_PRIVATE_HOSTS",
@@ -9464,7 +9477,7 @@ async function createTaskExtended(task, options) {
9464
9477
  logRoutingDecisionFailure(id, "capture", error);
9465
9478
  }
9466
9479
  const inserted = await getDbClient().get(`INSERT INTO agent_tasks (
9467
- id, "key", agentId, creatorAgentId, task, status, source, routing_reason, routing_note,
9480
+ id, "key", agentId, creatorAgentId, task, status, source, routing_reason, routing_source, routing_note,
9468
9481
  taskType, tags, priority, dependsOn, offeredTo, offeredAt,
9469
9482
  slackChannelId, slackThreadTs, slackTriggerMessageTs, slackUserId,
9470
9483
  vcsProvider, vcsRepo, vcsEventType, vcsNumber, vcsCommentId, vcsAuthor, vcsUrl,
@@ -9472,7 +9485,7 @@ async function createTaskExtended(task, options) {
9472
9485
  agentmailInboxId, agentmailMessageId, agentmailThreadId,
9473
9486
  mentionMessageId, mentionChannelId, dir, parentTaskId, model, modelTier, effort, scheduleId,
9474
9487
  workflowRunId, workflowRunStepId, outputSchema, followUpConfig, requestedByUserId, requestedByUserIdInherited, contextKey, routingAffinity, swarmVersion, createdAt, lastUpdatedAt, created_by, updated_by
9475
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
9488
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING *`, [
9476
9489
  id,
9477
9490
  assetKey,
9478
9491
  options?.agentId ?? null,
@@ -9481,6 +9494,7 @@ async function createTaskExtended(task, options) {
9481
9494
  status,
9482
9495
  options?.source ?? "mcp",
9483
9496
  options?.routingReason ?? null,
9497
+ options?.routingSource ?? null,
9484
9498
  options?.routingNote ?? null,
9485
9499
  options?.taskType ?? null,
9486
9500
  JSON.stringify(options?.tags ?? []),
@@ -10164,6 +10178,7 @@ async function postMessage(channelId, agentId, content, options) {
10164
10178
  const task = await createTaskExtended(taskDescription, {
10165
10179
  agentId: mentionedAgentId,
10166
10180
  routingReason: "human_pinned",
10181
+ routingSource: "engine_default",
10167
10182
  creatorAgentId: agentId ?? undefined,
10168
10183
  source: "mcp",
10169
10184
  taskType: "task",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_MODEL,
3
3
  resolveCredential
4
- } from "./cli-1ebpar1q.js";
4
+ } from "./cli-mzb0n642.js";
5
5
  import {
6
6
  getOpenRouterBaseUrl
7
7
  } from "./cli-3dpj7atn.js";
@@ -25,7 +25,7 @@ import {
25
25
  sandboxSpawnEnv,
26
26
  snapshotCapped,
27
27
  touchScratchScriptLastUsed
28
- } from "./cli-aae6hz6a.js";
28
+ } from "./cli-zd21jrrc.js";
29
29
  import {
30
30
  detachedProcessGroup,
31
31
  registerProcessGroup,
@@ -34,13 +34,13 @@ import {
34
34
  import {
35
35
  getOAuthApp,
36
36
  getOAuthTokens
37
- } from "./cli-9hspd3dp.js";
37
+ } from "./cli-vr6qj104.js";
38
38
  import {
39
39
  withSiblingAwareness
40
- } from "./cli-q50ef8g0.js";
40
+ } from "./cli-n1yj5fd5.js";
41
41
  import {
42
42
  getSlackApp
43
- } from "./cli-d8ftsp62.js";
43
+ } from "./cli-kt7wevqh.js";
44
44
  import {
45
45
  FollowUpConfigSchema,
46
46
  ModelTierSchema,
@@ -92,18 +92,18 @@ import {
92
92
  updateWorkflowRun,
93
93
  updateWorkflowRunStep,
94
94
  workflowContextKey
95
- } from "./cli-yab68w40.js";
95
+ } from "./cli-qp69dd5d.js";
96
96
  import {
97
97
  deepInterpolate,
98
98
  findInterpolationTokens,
99
99
  init_template,
100
100
  interpolate
101
- } from "./cli-3apbzgyk.js";
101
+ } from "./cli-n75jt793.js";
102
102
  import {
103
103
  getAppUrl,
104
104
  getMcpBaseUrl,
105
105
  init_constants
106
- } from "./cli-e29gmdmw.js";
106
+ } from "./cli-dv6cdjs2.js";
107
107
  import {
108
108
  init_zod
109
109
  } from "./cli-sd0mxa3c.js";
@@ -132,7 +132,7 @@ async function notifyAutomationPreflightFailure(preflight) {
132
132
  return;
133
133
  }
134
134
  try {
135
- const { getSlackApp: getSlackApp2 } = await import("./app-1hh67x8w.js");
135
+ const { getSlackApp: getSlackApp2 } = await import("./app-dty7p9hg.js");
136
136
  const app = getSlackApp2();
137
137
  if (!app) {
138
138
  console.warn("[Automation Preflight] Slack not available, cannot send notification");
@@ -2981,6 +2981,7 @@ class AgentTaskExecutor extends BaseExecutor {
2981
2981
  agentId: config.agentId ?? null,
2982
2982
  routingReason: config.routingReason ?? (config.agentId ? "human_pinned" : undefined),
2983
2983
  routingNote: config.routingNote,
2984
+ routingSource: config.routingReason ? "declared" : config.agentId ? "engine_default" : undefined,
2984
2985
  source: "workflow",
2985
2986
  tags: config.tags,
2986
2987
  priority: config.priority,
@@ -3375,7 +3376,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
3375
3376
  }
3376
3377
  if (notification.channel === "slack") {
3377
3378
  try {
3378
- const { getSlackApp: getSlackApp2 } = await import("./app-1hh67x8w.js");
3379
+ const { getSlackApp: getSlackApp2 } = await import("./app-dty7p9hg.js");
3379
3380
  const slackApp = getSlackApp2();
3380
3381
  if (!slackApp) {
3381
3382
  console.warn("[HITL] Slack not initialized — cannot send notification");
@@ -3495,7 +3496,7 @@ class NotifyExecutor extends BaseExecutor {
3495
3496
  }
3496
3497
  }
3497
3498
  case "slack": {
3498
- const { getSlackApp: getSlackApp2 } = await import("./app-1hh67x8w.js");
3499
+ const { getSlackApp: getSlackApp2 } = await import("./app-dty7p9hg.js");
3499
3500
  const app = getSlackApp2();
3500
3501
  if (!app) {
3501
3502
  return {