@desplega.ai/agent-swarm 1.158.0 → 1.160.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 (378) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-xaq4n6pc.js → acp-adapter-2mjwcsfh.js} +124 -27
  3. package/dist/{actions-p9hz5yat.js → actions-e43rxskr.js} +35 -30
  4. package/dist/{anthropic-messages-51pz26qe.js → anthropic-messages-5qx80j9k.js} +106 -16
  5. package/dist/{app-g26wdcz6.js → app-mc7xfagn.js} +12 -10
  6. package/dist/{assistant-wydfqkb3.js → assistant-sedkzv3b.js} +42 -31
  7. package/dist/{azure-openai-responses-8gksqtmz.js → azure-openai-responses-nfb21z9a.js} +13 -14
  8. package/dist/{boot-reembed-se8zmdcp.js → boot-reembed-cqz9swn5.js} +13 -12
  9. package/dist/{boot-reembed-g5ckg9yb.js → boot-reembed-m3656j2n.js} +14 -13
  10. package/dist/{boot-scrub-logs-wfxqan61.js → boot-scrub-logs-xbxf5d7w.js} +11 -9
  11. package/dist/boot-seeds-gsetbs5y.js +28 -0
  12. package/dist/{claude-adapter-tv2x4f36.js → claude-adapter-dc6289mc.js} +28 -23
  13. package/dist/{claude-managed-adapter-41b2s7fd.js → claude-managed-adapter-naaw51me.js} +4 -3
  14. package/dist/{claude-managed-setup-60g8aazx.js → claude-managed-setup-eacvchx0.js} +12 -3
  15. package/dist/claude-sdk-session-bqp2xvym.js +29722 -0
  16. package/dist/{cli-987hg0aa.js → cli-0jwe9034.js} +2 -2
  17. package/dist/{cli-vj6h9kc2.js → cli-0m7wct0d.js} +59 -1
  18. package/dist/{cli-c07r9a2m.js → cli-0q3avq3s.js} +12 -11
  19. package/dist/{cli-19jenss3.js → cli-0wgxmwf6.js} +31 -10
  20. package/dist/cli-0x01kwrd.js +491 -0
  21. package/dist/cli-0xqde53b.js +176 -0
  22. package/dist/cli-10nhj6xq.js +8355 -0
  23. package/dist/{cli-tt9k8r35.js → cli-12tszpk9.js} +479 -910
  24. package/dist/{cli-5b6b62tz.js → cli-13hw4z91.js} +1 -1
  25. package/dist/{cli-cqt19wg6.js → cli-1a2j50m0.js} +11 -2
  26. package/dist/{cli-xberxa1r.js → cli-25fcq4b4.js} +2 -2
  27. package/dist/{cli-npssxgaz.js → cli-2pdaysab.js} +52 -2
  28. package/dist/cli-3qhyh31j.js +166 -0
  29. package/dist/cli-447dt1h3.js +3828 -0
  30. package/dist/cli-4derpgyk.js +115 -0
  31. package/dist/{cli-00w2c66p.js → cli-523679eh.js} +13 -2
  32. package/dist/{cli-y95wp3tg.js → cli-58e8yr0d.js} +1 -1
  33. package/dist/{cli-24k806sc.js → cli-5nbmpy8w.js} +3 -3
  34. package/dist/{cli-53sz8gkz.js → cli-6cs6wzxt.js} +1 -1
  35. package/dist/cli-741yb0xx.js +1027 -0
  36. package/dist/cli-74h9hscv.js +69 -0
  37. package/dist/cli-7cxw8b60.js +14910 -0
  38. package/dist/{cli-xhaeg2nc.js → cli-7e398j1h.js} +1 -1
  39. package/dist/cli-7kyk9jr3.js +22 -0
  40. package/dist/cli-89s4ngw3.js +183 -0
  41. package/dist/{cli-9b13ggd1.js → cli-89v6kyq7.js} +1 -0
  42. package/dist/{cli-ftfvggzx.js → cli-9hsgwz4w.js} +1045 -581
  43. package/dist/{cli-rqz8qbw7.js → cli-a8dvhzrt.js} +59 -20
  44. package/dist/{cli-j57qkrpq.js → cli-azhgzetg.js} +395 -56
  45. package/dist/cli-br0qdrnp.js +2150 -0
  46. package/dist/{cli-rj19hc34.js → cli-btfv8y88.js} +1 -1
  47. package/dist/{cli-8qmme6vd.js → cli-c8a36vcc.js} +2 -2
  48. package/dist/cli-cpvsaqsw.js +333 -0
  49. package/dist/cli-d5czme6m.js +17805 -0
  50. package/dist/{cli-h38x0qhg.js → cli-et8m9xsv.js} +4 -3
  51. package/dist/{cli-x24pshtq.js → cli-evvtk35y.js} +6 -6
  52. package/dist/{cli-7s3syk22.js → cli-f8gy6r2r.js} +5 -5
  53. package/dist/{cli-zt1227k1.js → cli-fkqhbg8g.js} +5 -3
  54. package/dist/{cli-9httdpyq.js → cli-g2whhdrf.js} +1 -1
  55. package/dist/cli-gt4hxb8p.js +99 -0
  56. package/dist/{cli-s8eet254.js → cli-jajnsm8q.js} +37184 -53838
  57. package/dist/{cli-7gtvvpbh.js → cli-jayjpjmb.js} +21 -12
  58. package/dist/{cli-68w09sjw.js → cli-jyk0ynw2.js} +27 -89
  59. package/dist/{cli-aehm1rbq.js → cli-jz4w45qt.js} +1152 -61
  60. package/dist/cli-kmcpfwn2.js +333856 -0
  61. package/dist/{cli-4198qc9v.js → cli-ktmyrtpn.js} +19 -3
  62. package/dist/{cli-j55n64b6.js → cli-mfe5btp9.js} +505 -189
  63. package/dist/{cli-q67y4wzm.js → cli-phsaj4xq.js} +24 -2
  64. package/dist/{cli-1hkrch3k.js → cli-pm1rst0h.js} +46 -7
  65. package/dist/{cli-pw9rj5t9.js → cli-pqetb83f.js} +1 -176
  66. package/dist/{cli-ggm92wcn.js → cli-ptr8h7kp.js} +20 -1
  67. package/dist/{cli-s8s499xy.js → cli-qbksc292.js} +3 -2
  68. package/dist/{cli-47m6dkd3.js → cli-qydf22qq.js} +597 -346
  69. package/dist/{cli-3gmcwfyx.js → cli-r1mxd1xh.js} +13 -6
  70. package/dist/cli-rb9m6rpe.js +4980 -0
  71. package/dist/cli-rykfmgwg.js +102 -0
  72. package/dist/{cli-5d10vd2m.js → cli-shkxm1vn.js} +6 -5
  73. package/dist/{cli-eetrvv91.js → cli-t3p77qk1.js} +1 -1
  74. package/dist/cli-tfky2838.js +756 -0
  75. package/dist/{cli-g8djp6qe.js → cli-tmqt7dpj.js} +40 -0
  76. package/dist/{cli-fgqxwrpv.js → cli-tpq83z89.js} +1631 -127
  77. package/dist/cli-trc24wk2.js +143 -0
  78. package/dist/{cli-aky8tctm.js → cli-tzx2ke1v.js} +3 -3
  79. package/dist/cli-v7fn5gms.js +1425 -0
  80. package/dist/{cli-wscdvcqz.js → cli-vctdqs5h.js} +1 -1
  81. package/dist/{cli-cw9zck8j.js → cli-xjcywfsf.js} +8 -4
  82. package/dist/{cli-k0g1sjzm.js → cli-ybgv4kw2.js} +18 -11
  83. package/dist/{cli-rjehvrts.js → cli-ydmcgve1.js} +8 -8
  84. package/dist/{cli-vhjwh6cz.js → cli-ygwm91nt.js} +1 -1
  85. package/dist/{cli-mcnhgnn1.js → cli-ykk5jaax.js} +184 -26
  86. package/dist/{cli-de1396j2.js → cli-ywybs5as.js} +7 -1
  87. package/dist/cli-zpep9q5e.js +491 -0
  88. package/dist/cli.js +41 -32
  89. package/dist/cloudflare-workers-ai-system-one-k6fbxw9d.js +46 -0
  90. package/dist/{codex-adapter-cnm8wk11.js → codex-adapter-nmxcatww.js} +26 -17
  91. package/dist/{codex-hook-9hptmdhj.js → codex-hook-20me6byw.js} +2 -2
  92. package/dist/{codex-login-x3jk4etn.js → codex-login-w6fz4xbz.js} +50 -5
  93. package/dist/{codex-session-runner-gfg547zj.js → codex-session-runner-90aa80ev.js} +24 -17
  94. package/dist/{commands-e3bn0p75.js → commands-8wcq1kn7.js} +11 -9
  95. package/dist/{db-03v9kzr2.js → db-j40kc4se.js} +25 -11
  96. package/dist/{devin-adapter-8vgkwh29.js → devin-adapter-dpsv6hd9.js} +1 -1
  97. package/dist/{dispatcher-nrmg8yht.js → dispatcher-4zqy768d.js} +34 -29
  98. package/dist/{dsh-adapter-k03nfqa6.js → dsh-adapter-mpnzgztj.js} +3 -3
  99. package/dist/{e2b-93x1k0j5.js → e2b-ez07znam.js} +4 -3
  100. package/dist/execute-6e7qeyk4.js +1017 -0
  101. package/dist/{google-generative-ai-bxmv50nc.js → google-generative-ai-k6n5nbpp.js} +6 -5
  102. package/dist/{google-vertex-809af514.js → google-vertex-44xxtcvp.js} +6 -5
  103. package/dist/{handlers-aqcedbyb.js → handlers-kjdce1w5.js} +37 -32
  104. package/dist/{hook-ybvmrmhq.js → hook-czx13n12.js} +19 -15
  105. package/dist/{hook-7vkskkre.js → hook-r2t4bqfg.js} +18 -14
  106. package/dist/{http-2eqa8t24.js → http-3bbb19be.js} +900 -145
  107. package/dist/{index-f6cryxwe.js → index-4a5njnm1.js} +2 -59
  108. package/dist/{index-x71bvq0p.js → index-668me3f0.js} +35 -30
  109. package/dist/{index-c6zsv1bd.js → index-7aj368tw.js} +13 -12
  110. package/dist/{index-1yks3qcr.js → index-fg0dsp6c.js} +34 -29
  111. package/dist/{index-chgdkq36.js → index-kkv84jq9.js} +34 -29
  112. package/dist/{index-a3vn96n8.js → index-zg7vp46x.js} +198 -54
  113. package/dist/{keepalive-vtkf5n99.js → keepalive-yra8dy57.js} +13 -11
  114. package/dist/{lead-h3sp357x.js → lead-va0pad2c.js} +54 -49
  115. package/dist/llama-cpp-classify-tgj35k8d.js +335 -0
  116. package/dist/{maintenance-jzeqtk3q.js → maintenance-hqewtmyg.js} +14 -13
  117. package/dist/{mistral-conversations-zx0kn554.js → mistral-conversations-pc3ntnxt.js} +14 -17
  118. package/dist/{oauth-refresh-sweep-qp3dzmdp.js → oauth-refresh-sweep-7rdt1m9n.js} +12 -10
  119. package/dist/{onboard-tmsp0qbz.js → onboard-j6ms6d0x.js} +6 -5
  120. package/dist/{openai-codex-responses-4vjqzvjp.js → openai-codex-responses-bbancrr0.js} +21 -8
  121. package/dist/{openai-completions-9hjrqbw8.js → openai-completions-jpaj5g2b.js} +9 -12
  122. package/dist/{openai-responses-7b1pn0xt.js → openai-responses-200k1wx4.js} +23 -18
  123. package/dist/{opencode-adapter-x6x2da1z.js → opencode-adapter-89rabkw2.js} +8 -7
  124. package/dist/{openrouter-images-9f9ek4rw.js → openrouter-images-8yx3487g.js} +5 -7
  125. package/dist/{otel-impl-9mz73q65.js → otel-impl-a792rjz0.js} +1 -1
  126. package/dist/{pi-messages-txpjj39q.js → pi-messages-vxdt8v7j.js} +2 -1
  127. package/dist/{pi-mono-adapter-m6dvv0dz.js → pi-mono-adapter-g7qzvr3v.js} +295 -70
  128. package/dist/pricing-refresh-wx0tp7cb.js +39 -0
  129. package/dist/quickjs-r1pq2107.wasm +0 -0
  130. package/dist/{rbac-roles-c9wqz83x.js → rbac-roles-8tzawacv.js} +12 -10
  131. package/dist/{render-v2-gryrh9h8.js → render-v2-mm7zswb8.js} +12 -10
  132. package/dist/runtime-zyssgse0.js +24 -0
  133. package/dist/{setup-q9720bt6.js → setup-8y70ys6t.js} +6 -5
  134. package/dist/typesafe-system-one-2ef30pec.js +27 -0
  135. package/dist/{virtual-modules-3htpgn8x.js → virtual-modules-6nmk7h3n.js} +22 -13
  136. package/dist/{work-objects-b76x7deb.js → work-objects-fg6xkb0n.js} +37 -32
  137. package/dist/{worker-6vrxbv41.js → worker-wmwhxsph.js} +54 -49
  138. package/openapi.json +1314 -91
  139. package/package.json +12 -11
  140. package/src/be/db/agents.ts +20 -0
  141. package/src/be/db/api-keys.ts +70 -0
  142. package/src/be/db/tasks/human-free.ts +442 -0
  143. package/src/be/db/tasks/read.ts +56 -1
  144. package/src/be/db/tasks/write.ts +107 -11
  145. package/src/be/db.ts +274 -188
  146. package/src/be/harness-model-support.ts +182 -0
  147. package/src/be/human-free-drain.ts +67 -0
  148. package/src/be/memory/providers/sqlite-store.ts +51 -15
  149. package/src/be/migrations/182_task_human_free_flag.sql +63 -0
  150. package/src/be/migrations/183_human_free_reclassify_queue.sql +25 -0
  151. package/src/be/migrations/184_model_catalog.sql +120 -0
  152. package/src/be/migrations/185_api_key_auth_failures.sql +6 -0
  153. package/src/be/migrations/186_api_key_seat_mismatch.sql +8 -0
  154. package/src/be/model-catalog-store.ts +644 -0
  155. package/src/be/model-tier-keys.ts +46 -0
  156. package/src/be/model-tier-resolution.ts +534 -0
  157. package/src/be/model-validation.ts +188 -0
  158. package/src/be/models-catalog.ts +61 -7
  159. package/src/be/modelsdev-cache.json +82 -0
  160. package/src/be/modelsdev-cache.ts +2 -0
  161. package/src/be/pricing-refresh.ts +154 -12
  162. package/src/be/scripts/typecheck.ts +15 -0
  163. package/src/be/seed/runner.ts +18 -12
  164. package/src/be/seed/types.ts +1 -0
  165. package/src/be/seed-scripts/catalog/task-failure-audit.ts +61 -9
  166. package/src/be/swarm-config-guard.ts +8 -0
  167. package/src/cli.tsx +10 -0
  168. package/src/commands/claude-managed-setup.ts +3 -1
  169. package/src/commands/codex-login.ts +67 -0
  170. package/src/commands/credential-outcome-report.ts +191 -0
  171. package/src/commands/rate-limit-outcome.ts +34 -4
  172. package/src/commands/runner.ts +357 -186
  173. package/src/commands/seat-mismatch-report.ts +46 -0
  174. package/src/extensions/apply-task-create.ts +27 -1
  175. package/src/extensions/contract-types.generated.ts +1 -1
  176. package/src/heartbeat/heartbeat.ts +79 -17
  177. package/src/heartbeat/templates.ts +2 -2
  178. package/src/http/agents.ts +62 -1
  179. package/src/http/api-keys.ts +140 -2
  180. package/src/http/codex-oauth-keep-warm.ts +3 -5
  181. package/src/http/index.ts +8 -0
  182. package/src/http/memory.ts +12 -5
  183. package/src/http/models-catalog.ts +357 -8
  184. package/src/http/poll.ts +54 -3
  185. package/src/http/schedules.ts +51 -6
  186. package/src/http/script-runs.ts +12 -0
  187. package/src/http/session-data.ts +2 -5
  188. package/src/http/stats.ts +6 -8
  189. package/src/http/status.ts +15 -1
  190. package/src/http/tasks.ts +90 -7
  191. package/src/http/usage-cache.ts +56 -15
  192. package/src/http/workflows.ts +46 -8
  193. package/src/mcp-client/http-client.ts +5 -0
  194. package/src/memory/recall-query.ts +74 -0
  195. package/src/prompts/base-prompt.ts +15 -4
  196. package/src/prompts/session-templates.ts +23 -1
  197. package/src/providers/acp-adapter.ts +1 -0
  198. package/src/providers/claude-adapter.ts +14 -5
  199. package/src/providers/claude-managed-adapter.ts +1 -0
  200. package/src/providers/claude-managed-models.ts +47 -161
  201. package/src/providers/claude-sdk-session.ts +3 -1
  202. package/src/providers/codex-adapter.ts +14 -14
  203. package/src/providers/codex-models.ts +65 -198
  204. package/src/providers/devin-adapter.ts +1 -0
  205. package/src/providers/dsh-adapter.ts +2 -1
  206. package/src/providers/harness-version.ts +83 -7
  207. package/src/providers/opencode-adapter.ts +53 -1
  208. package/src/providers/pi-binary-root/src/extensions/codemode/worker.ts +11 -0
  209. package/src/providers/pi-codemode-runtime.ts +17 -0
  210. package/src/providers/pi-mono-adapter.ts +361 -83
  211. package/src/providers/pi-mono-extension.ts +16 -1
  212. package/src/providers/reasoning-effort.ts +44 -140
  213. package/src/providers/types.ts +8 -0
  214. package/src/rbac/legacy-policy.ts +43 -0
  215. package/src/rbac/permissions.ts +15 -0
  216. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  217. package/src/scripts-runtime/types/stdlib.d.ts +15 -0
  218. package/src/scripts-runtime/types/swarm-extension.d.ts +3 -0
  219. package/src/scripts-runtime/types/swarm-sdk.d.ts +15 -0
  220. package/src/server.ts +6 -0
  221. package/src/slack/assistant.ts +13 -0
  222. package/src/slack/message-text.ts +56 -2
  223. package/src/slack/render-v2.ts +87 -37
  224. package/src/slack/session-status.ts +541 -0
  225. package/src/slack/thread-buffer.ts +10 -2
  226. package/src/tasks/sibling-awareness.ts +3 -2
  227. package/src/telemetry.ts +5 -4
  228. package/src/templates.d.ts +6 -0
  229. package/src/tests/agents-list-model-display.test.ts +4 -6
  230. package/src/tests/api-key-auth-failure-route.test.ts +142 -0
  231. package/src/tests/api-key-tracking.test.ts +368 -1
  232. package/src/tests/base-prompt.test.ts +43 -2
  233. package/src/tests/claude-adapter.test.ts +68 -0
  234. package/src/tests/claude-managed-adapter.test.ts +12 -18
  235. package/src/tests/codex-adapter.test.ts +2 -1
  236. package/src/tests/codex-auth-failure.test.ts +52 -0
  237. package/src/tests/codex-gpt6-release.test.ts +66 -5
  238. package/src/tests/codex-login.test.ts +116 -0
  239. package/src/tests/context-window.test.ts +7 -5
  240. package/src/tests/credential-exhaustion-policy.test.ts +118 -3
  241. package/src/tests/credential-outcome-report.test.ts +171 -0
  242. package/src/tests/credential-status-api.test.ts +103 -2
  243. package/src/tests/db-extraction-contract.test.ts +1 -0
  244. package/src/tests/db-task-read-contract.test.ts +10 -1
  245. package/src/tests/db-task-write-contract.test.ts +535 -2
  246. package/src/tests/docs-index-footprint.test.js +3 -3
  247. package/src/tests/dokploy-deploy.test.ts +315 -0
  248. package/src/tests/dsh-adapter.test.ts +1 -1
  249. package/src/tests/explicit-model-validation.test.ts +583 -0
  250. package/src/tests/extensions-pre-task.test.ts +73 -0
  251. package/src/tests/fetch-resolved-env.test.ts +46 -0
  252. package/src/tests/hang-watchdog-worker.ts +47 -0
  253. package/src/tests/hang-watchdog.test.ts +45 -0
  254. package/src/tests/hang-watchdog.ts +30 -0
  255. package/src/tests/harness-model-guard.test.ts +123 -0
  256. package/src/tests/harness-model-support.test.ts +374 -0
  257. package/src/tests/harness-version.test.ts +70 -3
  258. package/src/tests/heartbeat-checklist-config.test.ts +71 -0
  259. package/src/tests/heartbeat-checklist.test.ts +4 -2
  260. package/src/tests/heartbeat-orphan-resume.test.ts +48 -0
  261. package/src/tests/http-task-write-ownership.test.ts +172 -0
  262. package/src/tests/human-free-flag.test.ts +279 -0
  263. package/src/tests/human-free-oracle.ts +57 -0
  264. package/src/tests/human-free-reclassify.test.ts +669 -0
  265. package/src/tests/memory-fts-populate.test.ts +139 -0
  266. package/src/tests/memory-http-recall-gating.test.ts +125 -1
  267. package/src/tests/migration-046-budgets.test.ts +3 -3
  268. package/src/tests/model-catalog-migration.test.ts +134 -0
  269. package/src/tests/model-catalog-table.test.ts +249 -0
  270. package/src/tests/model-catalog-write-access.test.ts +387 -0
  271. package/src/tests/model-rate-limit-windows.test.ts +19 -0
  272. package/src/tests/model-tier-resolution.test.ts +611 -0
  273. package/src/tests/models-catalog.test.ts +1 -1
  274. package/src/tests/multi-runtime-enabled-stats.test.ts +65 -1
  275. package/src/tests/opencode-adapter.test.ts +157 -2
  276. package/src/tests/package-publish.test.ts +137 -36
  277. package/src/tests/pi-codemode.test.ts +246 -0
  278. package/src/tests/pi-mono-adapter.test.ts +3 -0
  279. package/src/tests/pi-native-mcp.test.ts +193 -0
  280. package/src/tests/pi-tool-exposure.test.ts +374 -0
  281. package/src/tests/preload.ts +3 -0
  282. package/src/tests/pricing-routes.test.ts +2 -2
  283. package/src/tests/prompt-template-session.test.ts +5 -3
  284. package/src/tests/rate-limit-event.test.ts +65 -0
  285. package/src/tests/rate-limit-outcome.test.ts +90 -0
  286. package/src/tests/rbac-engine.test.ts +77 -3
  287. package/src/tests/reasoning-effort.test.ts +109 -0
  288. package/src/tests/refresh-modelsdev-carryforward.test.ts +5 -5
  289. package/src/tests/runner-key-completion-outcome.test.ts +112 -0
  290. package/src/tests/runner-key-outcome-late-reset.test.ts +224 -0
  291. package/src/tests/runner-registration-retry.test.ts +149 -0
  292. package/src/tests/runtime-model-catalog.test.ts +86 -0
  293. package/src/tests/script-connections.test.ts +9 -0
  294. package/src/tests/seat-mismatch-report.test.ts +85 -0
  295. package/src/tests/seed-scripts.test.ts +138 -0
  296. package/src/tests/seed.test.ts +25 -0
  297. package/src/tests/session-costs.test.ts +14 -11
  298. package/src/tests/slack-message-text.test.ts +101 -0
  299. package/src/tests/slack-render-v2.test.ts +96 -0
  300. package/src/tests/slack-session-status.test.ts +626 -0
  301. package/src/tests/slack-thread-buffer-context.test.ts +93 -0
  302. package/src/tests/status.test.ts +29 -0
  303. package/src/tests/steering-promotion.test.ts +51 -0
  304. package/src/tests/store-progress-ownership.test.ts +136 -0
  305. package/src/tests/subscription-plans.test.ts +28 -0
  306. package/src/tests/task-cascade-fail.test.ts +148 -2
  307. package/src/tests/task-citations.test.ts +3 -2
  308. package/src/tests/tool-annotations.test.ts +1 -1
  309. package/src/tests/usage-cache.test.ts +166 -0
  310. package/src/tests/workflow-agent-task.test.ts +30 -0
  311. package/src/tests/workflow-executors.test.ts +5 -2
  312. package/src/tests/workflow-system-one-decision-review.test.ts +1021 -0
  313. package/src/tests/workflow-system-one-decision-save-warnings.test.ts +365 -0
  314. package/src/tests/workflow-system-one-decision.test.ts +2063 -0
  315. package/src/tests/workflow-triggers-v2.test.ts +320 -0
  316. package/src/tools/model-catalog/index.ts +137 -0
  317. package/src/tools/schedules/create-schedule.ts +17 -2
  318. package/src/tools/schedules/patch-schedule.ts +31 -1
  319. package/src/tools/schedules/update-schedule.ts +31 -1
  320. package/src/tools/send-task.ts +18 -1
  321. package/src/tools/store-progress.ts +49 -4
  322. package/src/tools/task-action.ts +14 -1
  323. package/src/tools/tool-config.ts +3 -1
  324. package/src/tools/workflows/create-workflow.ts +17 -4
  325. package/src/tools/workflows/patch-workflow-node.ts +17 -7
  326. package/src/tools/workflows/patch-workflow.ts +9 -2
  327. package/src/tools/workflows/update-workflow.ts +17 -4
  328. package/src/types.ts +41 -1
  329. package/src/utils/codex-auth-failure.ts +34 -0
  330. package/src/utils/context-window.ts +47 -53
  331. package/src/utils/credentials.ts +72 -30
  332. package/src/utils/error-tracker.ts +80 -0
  333. package/src/utils/harness-cli-version.ts +115 -0
  334. package/src/utils/harness-model-error.ts +33 -0
  335. package/src/utils/model-rate-limit-windows.ts +12 -0
  336. package/src/utils/runtime-model-catalog.ts +152 -0
  337. package/src/utils/spawn-model-guard.ts +43 -0
  338. package/src/utils/subscription-plans.ts +22 -0
  339. package/src/workflows/approval-resolution.ts +39 -0
  340. package/src/workflows/definition.ts +7 -0
  341. package/src/workflows/engine.ts +69 -1
  342. package/src/workflows/executors/agent-task.ts +16 -6
  343. package/src/workflows/executors/base.ts +53 -0
  344. package/src/workflows/executors/human-in-the-loop.ts +8 -8
  345. package/src/workflows/executors/index.ts +1 -0
  346. package/src/workflows/executors/registry.ts +2 -0
  347. package/src/workflows/executors/system-one-decision.ts +1232 -0
  348. package/src/workflows/executors/system-one-providers.ts +301 -0
  349. package/src/workflows/executors/workflow-llm.ts +13 -1
  350. package/src/workflows/model-validation.ts +45 -0
  351. package/src/workflows/patch-definition.ts +5 -0
  352. package/src/workflows/readiness.ts +86 -0
  353. package/src/workflows/recovery.ts +12 -12
  354. package/src/workflows/resume.ts +23 -9
  355. package/src/workflows/triggers.ts +85 -0
  356. package/templates/schedules/daily-blocker-digest/content.md +4 -5
  357. package/templates/skills/agent-browser/SKILL.md +6 -5
  358. package/templates/skills/agent-browser/content.md +6 -5
  359. package/templates/skills/heartbeat-runbook/config.json +1 -1
  360. package/templates/skills/heartbeat-runbook/content.md +2 -2
  361. package/templates/skills/swarm-scripts/SKILL.md +1 -1
  362. package/templates/skills/swarm-scripts/content.md +1 -1
  363. package/templates/skills/workflow-iterate/content.md +82 -1
  364. package/templates/workflows/claude-code-changelog-watch/content.md +2 -0
  365. package/templates/workflows/pr-review-status-sweep/content.md +2 -0
  366. package/dist/boot-seeds-s3q01xj3.js +0 -26
  367. package/dist/claude-sdk-session-t442qz6f.js +0 -39108
  368. package/dist/cli-0xjkj1j7.js +0 -61
  369. package/dist/cli-20cj37vt.js +0 -335561
  370. package/dist/cli-2djtr51b.js +0 -48
  371. package/dist/cli-65hjmev5.js +0 -1141
  372. package/dist/cli-aw1jwp1r.js +0 -14075
  373. package/dist/cli-h967nb6r.js +0 -6603
  374. package/dist/cli-vapyk8sw.js +0 -20
  375. package/dist/cli-ws6rqycm.js +0 -247
  376. package/dist/pricing-refresh-v1cbr9te.js +0 -27
  377. package/src/providers/modelsdev-reasoning.json +0 -6453
  378. package/dist/{index-f24115ge.js → index-2wsdsnmm.js} +3 -3
@@ -0,0 +1,491 @@
1
+ import {
2
+ ProjectTrustStore,
3
+ addMcpServerConfig,
4
+ getMcpToolExposure,
5
+ loadMcpConfig,
6
+ openBrowser,
7
+ removeMcpServerConfig,
8
+ validateMcpServerConfig
9
+ } from "./cli-0x01kwrd.js";
10
+ import {
11
+ McpOAuthCredentialStore,
12
+ McpServerConnection,
13
+ McpServerLog,
14
+ McpSignInCancelledError,
15
+ createDefaultTransport,
16
+ signInMcpServer
17
+ } from "./cli-v7fn5gms.js";
18
+ import"./cli-447dt1h3.js";
19
+ import {
20
+ APP_NAME,
21
+ CONFIG_DIR_NAME,
22
+ source_default
23
+ } from "./cli-d5czme6m.js";
24
+ import"./cli-5bfdm1ah.js";
25
+ import"./cli-0m7wct0d.js";
26
+ import"./cli-rykfmgwg.js";
27
+ import"./cli-0xqde53b.js";
28
+ import"./cli-pqetb83f.js";
29
+ import"./cli-bc05qbss.js";
30
+
31
+ // node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/cli.js
32
+ import { existsSync } from "node:fs";
33
+ import { join } from "node:path";
34
+ import { createInterface } from "node:readline/promises";
35
+ var HELP = `${source_default.bold("Usage:")}
36
+ ${APP_NAME} mcp add <server> [options] -- <command> [args...]
37
+ ${APP_NAME} mcp add <server> [options] --url <url>
38
+ ${APP_NAME} mcp remove <server> [-l]
39
+ ${APP_NAME} mcp list [--json]
40
+ ${APP_NAME} mcp login <server> [--timeout <seconds>]
41
+ ${APP_NAME} mcp logout <server>
42
+
43
+ Configure and check MCP servers and sign in to OAuth servers without starting a session.
44
+ Reads ~/${CONFIG_DIR_NAME}/agent/mcp.json and, in trusted projects, ${CONFIG_DIR_NAME}/mcp.json.
45
+
46
+ Commands:
47
+ add <server> Add or replace a server in mcp.json
48
+ remove <server> Remove a server from mcp.json
49
+ list Show state, tools, and errors (exits 1 on failure)
50
+ login <server> Sign in through the browser
51
+ logout <server> Delete the stored OAuth credentials
52
+
53
+ Options for add and remove:
54
+ -l, --local Use ${CONFIG_DIR_NAME}/mcp.json in the current project instead of the global file
55
+
56
+ Options for add:
57
+ --url <url> Streamable HTTP server URL (instead of a command)
58
+ --env <KEY=VALUE> Environment variable for a stdio server (repeatable)
59
+ --cwd <dir> Working directory for a stdio server
60
+ --header <KEY=VALUE> HTTP header (repeatable)
61
+ --bearer-token-env-var <NAME>
62
+ Send "Authorization: Bearer \${NAME}"
63
+ --oauth-client-id <id> Pre-registered OAuth client id
64
+ --oauth-client-secret <secret>
65
+ OAuth client secret (may be \${NAME} or !command)
66
+ --oauth-callback-port <port>
67
+ Fixed OAuth callback port
68
+ --oauth-client-name <name>
69
+ Client name sent when registering with the OAuth server
70
+ --exposure <mode> codemode (default), deferred, direct, or hidden
71
+ --description <text> What the server offers, shown in the system prompt
72
+
73
+ Other options:
74
+ --json Print the list as JSON
75
+ --timeout <seconds> How long login waits for the browser (default: 300)`;
76
+ var HELP_HINT = source_default.dim(`Use "${APP_NAME} mcp --help" for usage.`);
77
+ var DEFAULT_LOGIN_TIMEOUT_SECONDS = 300;
78
+ function errorMessage(error) {
79
+ return error instanceof Error ? error.message : String(error);
80
+ }
81
+ function describeTransport(entry) {
82
+ const { config } = entry;
83
+ return "url" in config ? config.url : [config.command, ...config.args ?? []].join(" ");
84
+ }
85
+ function createConnection(entry, options, credentials) {
86
+ return new McpServerConnection({
87
+ entry,
88
+ cwd: options.cwd,
89
+ createTransport: createDefaultTransport,
90
+ credentials,
91
+ log: new McpServerLog(join(options.agentDir, "mcp.log")),
92
+ onTools: () => {}
93
+ });
94
+ }
95
+ var OPTION_ALIASES = new Map([["-l", "--local"]]);
96
+ function parseOptions(args, known, error, maxPositionals = Number.POSITIVE_INFINITY) {
97
+ const positional = [];
98
+ const values = new Map;
99
+ const lists = new Map;
100
+ for (let index = 0;index < args.length; index++) {
101
+ const arg = OPTION_ALIASES.get(args[index]) ?? args[index];
102
+ if (arg === "--" || positional.length >= maxPositionals) {
103
+ positional.push(...args.slice(arg === "--" ? index + 1 : index));
104
+ break;
105
+ }
106
+ if (!arg.startsWith("--")) {
107
+ positional.push(arg);
108
+ continue;
109
+ }
110
+ const name = arg.slice(2);
111
+ const kind = known[name];
112
+ if (!kind) {
113
+ error(`Unknown option ${arg}.
114
+ ${HELP_HINT}`);
115
+ return;
116
+ }
117
+ if (kind === "flag") {
118
+ values.set(name, true);
119
+ continue;
120
+ }
121
+ const value = args[++index];
122
+ if (value === undefined) {
123
+ error(`${arg} needs a value.`);
124
+ return;
125
+ }
126
+ if (kind === "list")
127
+ lists.set(name, [...lists.get(name) ?? [], value]);
128
+ else
129
+ values.set(name, value);
130
+ }
131
+ return { positional, values, lists };
132
+ }
133
+ async function runMcpCommand(args, options) {
134
+ const log = options.log ?? ((line) => console.log(line));
135
+ const error = options.error ?? ((line) => console.error(line));
136
+ const [command, ...rest] = args;
137
+ if (command === undefined || command === "help" || args.includes("--help") || args.includes("-h")) {
138
+ log(HELP);
139
+ return 0;
140
+ }
141
+ const projectConfig = join(options.cwd, CONFIG_DIR_NAME, "mcp.json");
142
+ if (command === "add" || command === "remove") {
143
+ return command === "add" ? add(rest, projectConfig, options, log, error) : remove(rest, projectConfig, options, log, error);
144
+ }
145
+ const projectTrusted = new ProjectTrustStore(options.agentDir).get(options.cwd) === true;
146
+ const loaded = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted });
147
+ const untrustedNote = !projectTrusted && existsSync(projectConfig) ? `${projectConfig} is ignored because the project is not trusted. Start ${APP_NAME} in the project to trust it.` : undefined;
148
+ const credentials = options.credentials ?? new McpOAuthCredentialStore;
149
+ switch (command) {
150
+ case "list": {
151
+ const parsed = parseOptions(rest, { json: "flag" }, error);
152
+ if (!parsed)
153
+ return 1;
154
+ if (parsed.positional.length > 0) {
155
+ error(`Usage: ${APP_NAME} mcp list [--json]
156
+ ${HELP_HINT}`);
157
+ return 1;
158
+ }
159
+ return list(loaded, parsed.values.has("json"), untrustedNote, options, credentials, log);
160
+ }
161
+ case "login":
162
+ case "logout": {
163
+ const parsed = parseOptions(rest, command === "login" ? { timeout: "value" } : {}, error);
164
+ if (!parsed)
165
+ return 1;
166
+ const [name, ...extra] = parsed.positional;
167
+ if (!name || extra.length > 0) {
168
+ error(`Usage: ${APP_NAME} mcp ${command} <server>
169
+ ${HELP_HINT}`);
170
+ return 1;
171
+ }
172
+ const entry = loaded.servers.find((server) => server.name === name);
173
+ if (!entry) {
174
+ error(`No MCP server named "${name}".${untrustedNote ? ` ${untrustedNote}` : ""} Configured: ${loaded.servers.map((server) => server.name).join(", ") || "none"}.`);
175
+ return 1;
176
+ }
177
+ const connection = createConnection(entry, options, credentials);
178
+ const url = connection.oauthUrl;
179
+ if (!url) {
180
+ error(`MCP server "${name}" does not use OAuth. Only HTTP servers without an Authorization header do.`);
181
+ return 1;
182
+ }
183
+ if (command === "logout") {
184
+ const removed = credentials.remove(url);
185
+ log(removed ? `Signed out of MCP server "${name}".` : `No stored credentials for MCP server "${name}".`);
186
+ return 0;
187
+ }
188
+ const timeout = Number(parsed.values.get("timeout") ?? DEFAULT_LOGIN_TIMEOUT_SECONDS);
189
+ if (!Number.isFinite(timeout) || timeout <= 0) {
190
+ error("--timeout must be a positive number of seconds.");
191
+ return 1;
192
+ }
193
+ try {
194
+ return await login(entry, connection, url, timeout * 1000, options, credentials, log, error);
195
+ } finally {
196
+ await connection.close();
197
+ }
198
+ }
199
+ default:
200
+ error(`Unknown mcp command "${command}".
201
+ ${HELP_HINT}`);
202
+ return 1;
203
+ }
204
+ }
205
+ function parsePairs(option, pairs, error) {
206
+ if (!pairs)
207
+ return {};
208
+ const record = {};
209
+ for (const pair of pairs) {
210
+ const separator = pair.indexOf("=");
211
+ if (separator <= 0) {
212
+ error(`--${option} expects KEY=VALUE, got "${pair}".`);
213
+ return;
214
+ }
215
+ record[pair.slice(0, separator)] = pair.slice(separator + 1);
216
+ }
217
+ return record;
218
+ }
219
+ function add(args, projectConfig, options, log, error) {
220
+ const usage = `Usage: ${APP_NAME} mcp add <server> [options] (--url <url> | -- <command> [args...])
221
+ ${HELP_HINT}`;
222
+ const parsed = parseOptions(args, {
223
+ local: "flag",
224
+ url: "value",
225
+ env: "list",
226
+ cwd: "value",
227
+ header: "list",
228
+ "bearer-token-env-var": "value",
229
+ "oauth-client-id": "value",
230
+ "oauth-client-secret": "value",
231
+ "oauth-callback-port": "value",
232
+ "oauth-client-name": "value",
233
+ exposure: "value",
234
+ description: "value"
235
+ }, error, 2);
236
+ if (!parsed)
237
+ return 1;
238
+ const { positional, values, lists } = parsed;
239
+ const [name, ...command] = positional;
240
+ const url = values.get("url");
241
+ if (!name || url === undefined === (command.length === 0)) {
242
+ error(usage);
243
+ return 1;
244
+ }
245
+ const value = (option) => {
246
+ const found = values.get(option);
247
+ return typeof found === "string" ? found : undefined;
248
+ };
249
+ const exposure = value("exposure");
250
+ const httpOnly = [
251
+ "header",
252
+ "bearer-token-env-var",
253
+ "oauth-client-id",
254
+ "oauth-client-secret",
255
+ "oauth-callback-port",
256
+ "oauth-client-name"
257
+ ];
258
+ const stdioOnly = ["env", "cwd"];
259
+ const misplaced = (url === undefined ? httpOnly : stdioOnly).find((option) => values.has(option) || lists.has(option));
260
+ if (misplaced) {
261
+ error(`--${misplaced} only applies to ${url === undefined ? "HTTP servers (--url)" : "stdio servers"}.`);
262
+ return 1;
263
+ }
264
+ let config;
265
+ if (typeof url === "string") {
266
+ const headers = parsePairs("header", lists.get("header"), error);
267
+ if (!headers)
268
+ return 1;
269
+ const bearer = value("bearer-token-env-var");
270
+ if (bearer !== undefined)
271
+ headers.Authorization = `Bearer \${${bearer}}`;
272
+ const port = value("oauth-callback-port");
273
+ const oauth = {
274
+ ...value("oauth-client-id") === undefined ? {} : { clientId: value("oauth-client-id") },
275
+ ...value("oauth-client-secret") === undefined ? {} : { clientSecret: value("oauth-client-secret") },
276
+ ...port === undefined ? {} : { callbackPort: Number(port) },
277
+ ...value("oauth-client-name") === undefined ? {} : { clientName: value("oauth-client-name") }
278
+ };
279
+ config = {
280
+ url,
281
+ ...Object.keys(headers).length > 0 ? { headers } : {},
282
+ ...Object.keys(oauth).length > 0 ? { oauth } : {}
283
+ };
284
+ } else {
285
+ const env = parsePairs("env", lists.get("env"), error);
286
+ if (!env)
287
+ return 1;
288
+ const [executable, ...commandArgs] = command;
289
+ config = {
290
+ command: executable,
291
+ ...commandArgs.length > 0 ? { args: commandArgs } : {},
292
+ ...Object.keys(env).length > 0 ? { env } : {},
293
+ ...value("cwd") === undefined ? {} : { cwd: value("cwd") }
294
+ };
295
+ }
296
+ if (exposure !== undefined)
297
+ config.exposure = exposure;
298
+ const description = value("description");
299
+ if (description !== undefined)
300
+ config.description = description;
301
+ const validated = validateMcpServerConfig(name, config);
302
+ if (typeof validated === "string") {
303
+ error(validated);
304
+ return 1;
305
+ }
306
+ const project = values.has("local");
307
+ const path = project ? projectConfig : join(options.agentDir, "mcp.json");
308
+ const scope = project ? "project" : "global";
309
+ let replaced;
310
+ try {
311
+ replaced = addMcpServerConfig(path, name, validated);
312
+ } catch (addError) {
313
+ error(`Could not update ${path}: ${errorMessage(addError)}`);
314
+ return 1;
315
+ }
316
+ log(`${replaced ? "Replaced" : "Added"} ${scope} MCP server "${name}" in ${path}.`);
317
+ if (project && new ProjectTrustStore(options.agentDir).get(options.cwd) !== true) {
318
+ log(`The project is not trusted, so ${path} is ignored until you start ${APP_NAME} in the project and trust it.`);
319
+ }
320
+ const mayNeedSignIn = "url" in validated && !Object.keys(validated.headers ?? {}).some((header) => header.toLowerCase() === "authorization");
321
+ log(`Check it with: ${APP_NAME} mcp list${mayNeedSignIn ? `. If it requires sign-in: ${APP_NAME} mcp login ${name}` : ""}`);
322
+ return 0;
323
+ }
324
+ function remove(args, projectConfig, options, log, error) {
325
+ const parsed = parseOptions(args, { local: "flag" }, error);
326
+ if (!parsed)
327
+ return 1;
328
+ const [name, ...extra] = parsed.positional;
329
+ if (!name || extra.length > 0) {
330
+ error(`Usage: ${APP_NAME} mcp remove <server> [-l]
331
+ ${HELP_HINT}`);
332
+ return 1;
333
+ }
334
+ const project = parsed.values.has("local");
335
+ const globalConfig = join(options.agentDir, "mcp.json");
336
+ const path = project ? projectConfig : globalConfig;
337
+ const scope = project ? "project" : "global";
338
+ let removed;
339
+ try {
340
+ removed = removeMcpServerConfig(path, name);
341
+ } catch (removeError) {
342
+ error(`Could not update ${path}: ${errorMessage(removeError)}`);
343
+ return 1;
344
+ }
345
+ if (removed) {
346
+ log(`Removed ${scope} MCP server "${name}" from ${path}.`);
347
+ return 0;
348
+ }
349
+ const other = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted: true }).servers.find((server) => server.name === name && server.scope !== scope);
350
+ error(`No ${scope} MCP server named "${name}" in ${path}.${other ? ` It is defined in ${other.source}${other.scope === "project" ? "; use --local" : "; omit --local"}.` : ""}`);
351
+ return 1;
352
+ }
353
+ async function list(loaded, json, untrustedNote, options, credentials, log) {
354
+ const reports = await Promise.all(loaded.servers.map(async (entry) => {
355
+ const report = {
356
+ name: entry.name,
357
+ scope: entry.scope ?? "global",
358
+ source: entry.source,
359
+ enabled: entry.config.enabled !== false,
360
+ exposure: entry.config.exposure ?? "codemode",
361
+ transport: describeTransport(entry),
362
+ state: "disabled",
363
+ tools: []
364
+ };
365
+ if (!report.enabled)
366
+ return report;
367
+ const connection = createConnection(entry, options, credentials);
368
+ try {
369
+ await connection.getClient();
370
+ } catch {}
371
+ report.state = connection.state;
372
+ report.tools = connection.tools.map((tool) => tool.name);
373
+ const overrides = connection.tools.flatMap((tool) => {
374
+ const exposure = getMcpToolExposure(entry.config, tool.name);
375
+ return exposure === report.exposure ? [] : [[tool.name, exposure]];
376
+ });
377
+ if (overrides.length > 0)
378
+ report.toolExposure = Object.fromEntries(overrides);
379
+ if (connection.hasResources) {
380
+ report.resources = connection.resources.length;
381
+ report.resourceTemplates = connection.resourceTemplates.length;
382
+ }
383
+ if (connection.state !== "connected" && connection.error)
384
+ report.error = connection.error;
385
+ await connection.close();
386
+ return report;
387
+ }));
388
+ const failed = loaded.errors.length > 0 || reports.some((report) => report.enabled && report.state !== "connected");
389
+ if (json) {
390
+ log(JSON.stringify({ servers: reports, errors: loaded.errors, ...untrustedNote ? { note: untrustedNote } : {} }, null, 2));
391
+ return failed ? 1 : 0;
392
+ }
393
+ if (reports.length === 0 && loaded.errors.length === 0) {
394
+ log(`No MCP servers configured. Add them to ${join(options.agentDir, "mcp.json")} or .pi/mcp.json.`);
395
+ }
396
+ for (const report of reports) {
397
+ const state = report.state === "connected" ? `connected, ${report.tools.length} tool${report.tools.length === 1 ? "" : "s"}` : report.state === "needs-auth" ? "needs sign-in" : report.state;
398
+ log(`${report.name}: ${state} (${report.exposure}, ${report.scope})`);
399
+ log(` ${report.transport}`);
400
+ if (report.state === "needs-auth")
401
+ log(` sign in with: ${APP_NAME} mcp login ${report.name}`);
402
+ if (report.tools.length > 0) {
403
+ const tools = report.tools.map((tool) => {
404
+ const exposure = report.toolExposure?.[tool];
405
+ return exposure ? `${tool} [${exposure}]` : tool;
406
+ });
407
+ log(` tools: ${tools.join(", ")}`);
408
+ }
409
+ if (report.resources !== undefined) {
410
+ log(` resources: ${report.resources}, URI templates: ${report.resourceTemplates ?? 0}`);
411
+ }
412
+ if (report.error)
413
+ log(` ${report.error.split(`
414
+ `).join(`
415
+ `)}`);
416
+ }
417
+ for (const configError of loaded.errors)
418
+ log(`config error: ${configError}`);
419
+ if (untrustedNote)
420
+ log(untrustedNote);
421
+ return failed ? 1 : 0;
422
+ }
423
+ async function login(entry, connection, url, timeoutMs, options, credentials, log, error) {
424
+ const { name } = entry;
425
+ try {
426
+ await connection.getClient();
427
+ log(`Already signed in to MCP server "${name}" (${connection.tools.length} tools).`);
428
+ return 0;
429
+ } catch {
430
+ if (connection.state !== "needs-auth") {
431
+ error(`MCP server "${name}" failed to connect: ${connection.error ?? "unknown error"}`);
432
+ return 1;
433
+ }
434
+ }
435
+ const openUrl = options.openUrl ?? openBrowser;
436
+ const interactive = process.stdin.isTTY === true && options.openUrl === undefined;
437
+ try {
438
+ await signInMcpServer({
439
+ serverUrl: url,
440
+ store: credentials.forServer(url),
441
+ settings: connection.oauthSettings(),
442
+ challenge: connection.challenge,
443
+ prompt: {
444
+ showAuthorizationUrl: (authorizationUrl) => {
445
+ log(`Sign in to MCP server "${name}" in your browser:
446
+ ${authorizationUrl.href}`);
447
+ openUrl(authorizationUrl.href);
448
+ },
449
+ promptForRedirectUrl: (signal) => waitForRedirectUrl(signal, timeoutMs, interactive)
450
+ }
451
+ });
452
+ } catch (signInError) {
453
+ error(signInError instanceof McpSignInCancelledError ? `Sign-in to MCP server "${name}" was cancelled or not completed within ${Math.round(timeoutMs / 1000)} seconds.` : `Sign-in to MCP server "${name}" failed: ${errorMessage(signInError)}`);
454
+ return 1;
455
+ }
456
+ connection.challenge = undefined;
457
+ try {
458
+ await connection.reconnect();
459
+ } catch (connectError) {
460
+ error(`Signed in, but ${errorMessage(connectError)}`);
461
+ return 1;
462
+ }
463
+ log(`Signed in to MCP server "${name}" (${connection.tools.length} tools).`);
464
+ return 0;
465
+ }
466
+ async function waitForRedirectUrl(signal, timeoutMs, interactive) {
467
+ const controller = new AbortController;
468
+ const abort = () => controller.abort();
469
+ signal.addEventListener("abort", abort, { once: true });
470
+ const timer = setTimeout(abort, timeoutMs);
471
+ try {
472
+ if (!interactive) {
473
+ await new Promise((resolve) => controller.signal.addEventListener("abort", () => resolve(), { once: true }));
474
+ return;
475
+ }
476
+ const readline = createInterface({ input: process.stdin, output: process.stderr });
477
+ try {
478
+ return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ", { signal: controller.signal });
479
+ } catch {
480
+ return;
481
+ } finally {
482
+ readline.close();
483
+ }
484
+ } finally {
485
+ clearTimeout(timer);
486
+ signal.removeEventListener("abort", abort);
487
+ }
488
+ }
489
+ export {
490
+ runMcpCommand
491
+ };
package/dist/cli.js CHANGED
@@ -8,24 +8,25 @@ import {
8
8
  require_react_development,
9
9
  require_react_jsx_dev_runtime_development,
10
10
  use_app_default
11
- } from "./cli-zt1227k1.js";
12
- import"./cli-pw9rj5t9.js";
11
+ } from "./cli-fkqhbg8g.js";
12
+ import"./cli-0xqde53b.js";
13
+ import"./cli-pqetb83f.js";
13
14
  import {
14
15
  bedrockProviderModule
15
- } from "./cli-h38x0qhg.js";
16
+ } from "./cli-et8m9xsv.js";
16
17
  import"./cli-yn0a417a.js";
17
18
  import"./cli-cgj4hc12.js";
18
19
  import"./cli-txgcknmy.js";
19
20
  import"./cli-6map995v.js";
20
- import"./cli-k0g1sjzm.js";
21
+ import"./cli-ybgv4kw2.js";
21
22
  import"./cli-y2apkfe2.js";
22
- import"./cli-vapyk8sw.js";
23
+ import"./cli-7kyk9jr3.js";
23
24
  import {
24
25
  setBedrockProviderModule
25
- } from "./cli-5b6b62tz.js";
26
+ } from "./cli-13hw4z91.js";
26
27
  import"./cli-btbzvq95.js";
27
28
  import"./cli-1m2e086m.js";
28
- import"./cli-mcnhgnn1.js";
29
+ import"./cli-ykk5jaax.js";
29
30
  import"./cli-bzr0ftht.js";
30
31
  import"./cli-bd957dgb.js";
31
32
  import {
@@ -57,7 +58,7 @@ var import_react = __toESM(require_react(), 1);
57
58
  // package.json
58
59
  var package_default = {
59
60
  name: "@desplega.ai/agent-swarm",
60
- version: "1.158.0",
61
+ version: "1.160.0",
61
62
  description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
62
63
  keywords: [
63
64
  "agent-swarm.dev",
@@ -196,8 +197,8 @@ var package_default = {
196
197
  lint: "biome check src apps/evals packages/ui-e2e",
197
198
  "lint:fix": "biome check --write src apps/evals packages/ui-e2e",
198
199
  format: "biome format --write src",
199
- "build:binary": "bun build ./src/cli.tsx --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-x64 --outfile ./dist/agent-swarm",
200
- "build:binary:arm64": "bun build ./src/cli.tsx --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-arm64 --outfile ./dist/agent-swarm",
200
+ "build:binary": "bun build ./src/cli.tsx ./src/providers/pi-binary-root/src/extensions/codemode/worker.ts --root ./src/providers/pi-binary-root --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-x64 --outfile ./dist/agent-swarm",
201
+ "build:binary:arm64": "bun build ./src/cli.tsx ./src/providers/pi-binary-root/src/extensions/codemode/worker.ts --root ./src/providers/pi-binary-root --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-arm64 --outfile ./dist/agent-swarm",
201
202
  "docker:build:api": "docker build -f Dockerfile -t agent-swarm-api:latest .",
202
203
  "docker:build:worker": "docker build -f Dockerfile.worker -t agent-swarm-worker:latest .",
203
204
  "docker:build:worker:slim": "docker build -f Dockerfile.worker --target worker-slim -t agent-swarm-worker:slim .",
@@ -226,8 +227,9 @@ var package_default = {
226
227
  devDependencies: {
227
228
  "@biomejs/biome": "^2.3.10",
228
229
  "@desplega.ai/slack-mock": "^0.4.0",
230
+ "@desplega/model-catalog": "workspace:*",
229
231
  "@faker-js/faker": "^10.4.0",
230
- "@opencode-ai/plugin": "1.17.4",
232
+ "@opencode-ai/plugin": "1.18.34",
231
233
  "@types/bun": "latest",
232
234
  "dependency-cruiser": "^18.0.0",
233
235
  konsistent: "1.0.0-beta.1",
@@ -242,22 +244,22 @@ var package_default = {
242
244
  bun: ">=1.3.12"
243
245
  },
244
246
  dependencies: {
245
- "@agentclientprotocol/sdk": "1.4.0",
247
+ "@agentclientprotocol/sdk": "1.5.1",
246
248
  "@ai-sdk/openai": "^3.0.41",
247
- "@anthropic-ai/claude-agent-sdk": "0.3.266",
249
+ "@anthropic-ai/claude-agent-sdk": "0.3.286",
248
250
  "@anthropic-ai/sdk": "^0.93.0",
249
251
  "@asteasolutions/zod-to-openapi": "^8.0.0",
250
252
  "@aws-sdk/client-bedrock": "3.1048.0",
251
253
  "@desplega.ai/business-use": "^0.4.2",
252
254
  "@desplega.ai/localtunnel": "^2.2.0",
253
- "@earendil-works/pi-agent-core": "^0.87.1",
254
- "@earendil-works/pi-ai": "^0.87.1",
255
- "@earendil-works/pi-coding-agent": "^0.87.1",
255
+ "@earendil-works/pi-agent-core": "^0.99.2",
256
+ "@earendil-works/pi-ai": "^0.99.2",
257
+ "@earendil-works/pi-coding-agent": "^0.99.2",
256
258
  "@inkjs/ui": "^2.0.0",
257
259
  "@linear/sdk": "^77.0.0",
258
260
  "@modelcontextprotocol/sdk": "1.29.0",
259
- "@openai/codex": "0.157.1",
260
- "@opencode-ai/sdk": "^1.18.32",
261
+ "@openai/codex": "0.159.3",
262
+ "@opencode-ai/sdk": "^1.18.34",
261
263
  "@openfort/openfort-node": "^0.9.1",
262
264
  "@opentelemetry/api": "^1.9.1",
263
265
  "@opentelemetry/api-logs": "^0.218.0",
@@ -751,7 +753,7 @@ function McpServer({ port, apiKey, dbPath }) {
751
753
  if (dbPath) {
752
754
  process.env.DATABASE_PATH = dbPath;
753
755
  }
754
- import("./http-2eqa8t24.js").then(() => {
756
+ import("./http-3bbb19be.js").then(() => {
755
757
  setStatus("running");
756
758
  }).catch((err) => {
757
759
  setStatus("error");
@@ -837,7 +839,7 @@ function WorkerRunner({
837
839
  }) {
838
840
  const { exit } = use_app_default();
839
841
  import_react.useEffect(() => {
840
- import("./worker-6vrxbv41.js").then(({ runWorker }) => runWorker({
842
+ import("./worker-wmwhxsph.js").then(({ runWorker }) => runWorker({
841
843
  prompt: prompt || undefined,
842
844
  yolo,
843
845
  systemPrompt: systemPrompt || undefined,
@@ -854,7 +856,7 @@ function WorkerRunner({
854
856
  function LeadRunner({ prompt, yolo, systemPrompt, systemPromptFile, additionalArgs }) {
855
857
  const { exit } = use_app_default();
856
858
  import_react.useEffect(() => {
857
- import("./lead-h3sp357x.js").then(({ runLead }) => runLead({
859
+ import("./lead-va0pad2c.js").then(({ runLead }) => runLead({
858
860
  prompt: prompt || undefined,
859
861
  yolo,
860
862
  systemPrompt: systemPrompt || undefined,
@@ -894,8 +896,8 @@ function LazyComponent({
894
896
  }
895
897
  return import_react.createElement(Component, props);
896
898
  }
897
- var loadOnboard = () => import("./onboard-tmsp0qbz.js").then(({ Onboard }) => Onboard);
898
- var loadConnect = () => import("./setup-q9720bt6.js").then(({ Setup }) => Setup);
899
+ var loadOnboard = () => import("./onboard-j6ms6d0x.js").then(({ Onboard }) => Onboard);
900
+ var loadConnect = () => import("./setup-8y70ys6t.js").then(({ Setup }) => Setup);
899
901
  function UnknownCommand({ command }) {
900
902
  const { exit } = use_app_default();
901
903
  import_react.useEffect(() => {
@@ -1001,6 +1003,13 @@ if (args.showHelp || args.command === "help" || args.command === undefined) {
1001
1003
  } else if (args.command === "version") {
1002
1004
  console.log(`${binName} v${package_default.version}`);
1003
1005
  process.exit(0);
1006
+ } else if (args.command === "onboard" && !process.versions.bun) {
1007
+ const { spawnSync } = await import("child_process");
1008
+ const result = spawnSync("bun", process.argv.slice(1), { stdio: "inherit" });
1009
+ if (result.error) {
1010
+ console.error("Onboarding requires Bun. Install Bun from https://bun.sh, then retry this command.");
1011
+ }
1012
+ process.exit(result.status ?? 1);
1004
1013
  } else if (args.command === "docs") {
1005
1014
  const docsUrl = "https://docs.agent-swarm.dev";
1006
1015
  console.log(`
@@ -1018,14 +1027,14 @@ ${binName} docs \u2014 v${package_default.version}
1018
1027
  }
1019
1028
  process.exit(0);
1020
1029
  } else if (args.command === "hook") {
1021
- const { runHook } = await import("./hook-ybvmrmhq.js");
1030
+ const { runHook } = await import("./hook-czx13n12.js");
1022
1031
  await runHook();
1023
1032
  } else if (args.command === "codex-hook") {
1024
- const { handleCodexHook } = await import("./codex-hook-9hptmdhj.js");
1033
+ const { handleCodexHook } = await import("./codex-hook-20me6byw.js");
1025
1034
  await handleCodexHook();
1026
1035
  process.exit(0);
1027
1036
  } else if (args.command === "session-summary-stdin") {
1028
- const { runSessionSummaryFromStdin } = await import("./hook-7vkskkre.js");
1037
+ const { runSessionSummaryFromStdin } = await import("./hook-r2t4bqfg.js");
1029
1038
  await runSessionSummaryFromStdin();
1030
1039
  process.exit(process.exitCode ?? 0);
1031
1040
  } else if (args.command === "artifact") {
@@ -1046,7 +1055,7 @@ ${binName} docs \u2014 v${package_default.version}
1046
1055
  printHelp("scripts");
1047
1056
  process.exit(scriptsArgs[0] === "reembed" || args.showHelp ? 0 : 1);
1048
1057
  }
1049
- const { runScriptsMaintenanceCommand } = await import("./maintenance-jzeqtk3q.js");
1058
+ const { runScriptsMaintenanceCommand } = await import("./maintenance-hqewtmyg.js");
1050
1059
  await runScriptsMaintenanceCommand(scriptsArgs);
1051
1060
  console.log("Scripts re-embedded.");
1052
1061
  } else if (args.command === "rbac") {
@@ -1056,21 +1065,21 @@ ${binName} docs \u2014 v${package_default.version}
1056
1065
  printHelp("rbac");
1057
1066
  process.exit(args.showHelp ? 0 : 1);
1058
1067
  }
1059
- const { runRbacCliCommand } = await import("./rbac-roles-c9wqz83x.js");
1068
+ const { runRbacCliCommand } = await import("./rbac-roles-8tzawacv.js");
1060
1069
  await runRbacCliCommand(rbacArgs);
1061
1070
  } else if (args.command === "codex-login") {
1062
- const { runCodexLogin } = await import("./codex-login-x3jk4etn.js");
1071
+ const { runCodexLogin } = await import("./codex-login-w6fz4xbz.js");
1063
1072
  const codexLoginArgs = process.argv.slice(process.argv.indexOf("codex-login") + 1);
1064
1073
  await runCodexLogin(codexLoginArgs);
1065
1074
  } else if (args.command === "codex-session-runner") {
1066
- const { runCodexSessionRunner } = await import("./codex-session-runner-gfg547zj.js");
1075
+ const { runCodexSessionRunner } = await import("./codex-session-runner-90aa80ev.js");
1067
1076
  await runCodexSessionRunner();
1068
1077
  } else if (args.command === "claude-managed-setup") {
1069
- const { runClaudeManagedSetup } = await import("./claude-managed-setup-60g8aazx.js");
1078
+ const { runClaudeManagedSetup } = await import("./claude-managed-setup-eacvchx0.js");
1070
1079
  const setupArgs = process.argv.slice(process.argv.indexOf("claude-managed-setup") + 1);
1071
1080
  await runClaudeManagedSetup(setupArgs);
1072
1081
  } else if (args.command === "e2b") {
1073
- const { runE2BCommand } = await import("./e2b-93x1k0j5.js");
1082
+ const { runE2BCommand } = await import("./e2b-ez07znam.js");
1074
1083
  const e2bArgs = process.argv.slice(process.argv.indexOf("e2b") + 1);
1075
1084
  await runE2BCommand(e2bArgs);
1076
1085
  } else {