@desplega.ai/agent-swarm 2.4.4 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +4 -2
  2. package/dist/{acp-adapter-thq04adh.js → acp-adapter-11gp67nr.js} +8 -6
  3. package/dist/{actions-j6ywh6x5.js → actions-8p2kze8j.js} +24 -22
  4. package/dist/{amp-adapter-k8b5xmj8.js → amp-adapter-z4qvhacj.js} +2 -2
  5. package/dist/{anthropic-messages-g6pqmqk4.js → anthropic-messages-txs190dd.js} +17 -20
  6. package/dist/{app-rb7vc02s.js → app-0qp0a2gk.js} +3 -3
  7. package/dist/{assistant-ftta1zjf.js → assistant-jedd3ktm.js} +27 -25
  8. package/dist/{azure-openai-responses-9dbmj346.js → azure-openai-responses-9kfwhmn7.js} +18 -13
  9. package/dist/{boot-reembed-xns7h5h9.js → boot-reembed-4xwq5tg0.js} +1 -1
  10. package/dist/{boot-reembed-srp6v6af.js → boot-reembed-n4wq5dd2.js} +1 -1
  11. package/dist/{boot-scrub-sweep-3qqrh2mz.js → boot-scrub-sweep-69h90xcq.js} +4 -4
  12. package/dist/{boot-seeds-9ks8hce7.js → boot-seeds-3vn0m9sg.js} +4 -4
  13. package/dist/{claude-adapter-k5ksyres.js → claude-adapter-221mvad5.js} +8 -6
  14. package/dist/{claude-managed-adapter-h2y889ge.js → claude-managed-adapter-gt6pa35d.js} +2 -2
  15. package/dist/{claude-managed-setup-n5a5eqks.js → claude-managed-setup-c3hp36ph.js} +4 -4
  16. package/dist/{claude-sdk-session-2j3j4kwn.js → claude-sdk-session-8thjsk5e.js} +9729 -9628
  17. package/dist/{cli-b9fcxxev.js → cli-007cnhm1.js} +50 -4
  18. package/dist/{cli-j4rqdf2n.js → cli-03vpq45j.js} +2 -2
  19. package/dist/{cli-amyhm3gj.js → cli-0y6f0ckq.js} +1 -1
  20. package/dist/{cli-4dg55wsk.js → cli-0z3vjrpm.js} +1 -1
  21. package/dist/{cli-pccfmtb5.js → cli-179xcyky.js} +11 -11
  22. package/dist/{cli-3r8samv3.js → cli-1f0gp9vz.js} +3 -2
  23. package/dist/{cli-hj3debgw.js → cli-1pr672hz.js} +3 -3
  24. package/dist/{cli-0bqteszy.js → cli-2nf3b08t.js} +328 -25
  25. package/dist/{cli-t7cyef5g.js → cli-36j4jnk3.js} +4 -4
  26. package/dist/{cli-er83cjbn.js → cli-3qv8naq8.js} +527 -231
  27. package/dist/cli-3zwye9sn.js +1193 -0
  28. package/dist/{cli-60cgh1rv.js → cli-459fk97x.js} +7 -7
  29. package/dist/{cli-xj0re5tm.js → cli-4w24f7z3.js} +1 -1
  30. package/dist/{cli-v3yr2gbg.js → cli-5kzk3472.js} +2198 -968
  31. package/dist/{cli-h7gc0b4r.js → cli-5m84zd2k.js} +55 -18
  32. package/dist/{cli-w6nadkh4.js → cli-5rvg1ddk.js} +5 -5
  33. package/dist/{cli-dvkmp9bt.js → cli-6ctwrf1z.js} +20 -10
  34. package/dist/{cli-9qtjfd60.js → cli-6rg2jn2y.js} +3 -2
  35. package/dist/{cli-2v045xyf.js → cli-7bwtc6yx.js} +3 -3
  36. package/dist/{cli-3cgngyd8.js → cli-7g40g8hq.js} +35 -17
  37. package/dist/{cli-q6r7t299.js → cli-92mqenkc.js} +2379 -154
  38. package/dist/{cli-cynvc9fj.js → cli-9ce2xw98.js} +8 -8
  39. package/dist/{cli-gqvh8d8a.js → cli-bgdtv62r.js} +36 -22
  40. package/dist/{cli-wxbn3yfx.js → cli-cz5nmdxt.js} +2 -2
  41. package/dist/{cli-wt645v7q.js → cli-dabehxhp.js} +1 -1
  42. package/dist/{cli-vfha21c9.js → cli-e5bxnjps.js} +2 -2
  43. package/dist/{cli-p20r8w42.js → cli-fcc5qe3f.js} +763 -268
  44. package/dist/{cli-1ephgwnq.js → cli-fes51ya2.js} +3 -3
  45. package/dist/{cli-1d70crsy.js → cli-ftmq4nvk.js} +2 -2
  46. package/dist/{cli-qkhc5aqy.js → cli-fy1jyyym.js} +13 -13
  47. package/dist/{cli-s95dknxh.js → cli-g1cw7xtt.js} +1 -1
  48. package/dist/{cli-qje9k2nh.js → cli-g9ypd5en.js} +12 -2
  49. package/dist/{cli-74c1wpm0.js → cli-gpv60278.js} +1 -1
  50. package/dist/{cli-pemywhfq.js → cli-ha9rmwgq.js} +2 -1
  51. package/dist/{cli-bnz0r3kc.js → cli-j1eghqfm.js} +5 -5
  52. package/dist/{cli-2zqpkvtt.js → cli-jpxsrxcb.js} +1 -1
  53. package/dist/{cli-ejs3m1sx.js → cli-kxpfx2xr.js} +1 -1
  54. package/dist/{cli-37yb7307.js → cli-mbfj11fq.js} +1 -1
  55. package/dist/{cli-pnp2j5zg.js → cli-mmhj8vd7.js} +2 -2
  56. package/dist/{cli-xf234ws8.js → cli-n4c8e3s5.js} +2 -0
  57. package/dist/{cli-a0kcty51.js → cli-n6kmqngw.js} +2 -2
  58. package/dist/{cli-te6b5wvg.js → cli-nnvjb17s.js} +3 -3
  59. package/dist/{cli-1dmcq2eh.js → cli-nzfnt2gs.js} +1 -1
  60. package/dist/{cli-625tb7aq.js → cli-p859hcc8.js} +2 -2
  61. package/dist/{cli-smvcw9z5.js → cli-pasyvjmm.js} +1 -1
  62. package/dist/cli-pkaqk57w.js +128 -0
  63. package/dist/{cli-8nyhf7za.js → cli-qqzmjxkf.js} +129 -105
  64. package/dist/{cli-zrwpctp4.js → cli-r25qpaxt.js} +161 -63
  65. package/dist/{cli-nc35pxb7.js → cli-rh5smt8t.js} +19 -4
  66. package/dist/{cli-qwkcwjdn.js → cli-rycdaj0a.js} +1 -1
  67. package/dist/{cli-esxerzg7.js → cli-s4sntwt4.js} +2 -2
  68. package/dist/{cli-b8k7epj1.js → cli-segs7hx9.js} +8 -8
  69. package/dist/{cli-36ckw0wx.js → cli-stxdrqs2.js} +2 -2
  70. package/dist/{cli-vdm20wej.js → cli-sy8f9705.js} +4 -4
  71. package/dist/{cli-1m17dc9d.js → cli-ta8bd7th.js} +2 -2
  72. package/dist/{cli-2y91wnbh.js → cli-we0ra057.js} +222 -10
  73. package/dist/{cli-55qmbp6z.js → cli-x21dqn18.js} +5 -5
  74. package/dist/{cli-dqb4n629.js → cli-x6vf4sad.js} +11 -11
  75. package/dist/{cli-d2mb5s8a.js → cli-x77gen2p.js} +680 -440
  76. package/dist/{cli-vq97g1jq.js → cli-xawhpgc9.js} +95 -195
  77. package/dist/{cli-82d3nkc3.js → cli-xd4eqtr2.js} +2 -2
  78. package/dist/{cli-9fhkkpj5.js → cli-xt768r5m.js} +2 -2
  79. package/dist/{cli-zrk6jxv8.js → cli-y4x8ww6s.js} +2 -2
  80. package/dist/{cli-xc27fwzg.js → cli-y9jvxfhk.js} +3 -3
  81. package/dist/{cli-44159k28.js → cli-z63a269p.js} +2 -2
  82. package/dist/{cli-sm8rses9.js → cli-zfdp01hn.js} +8 -5
  83. package/dist/cli.js +31 -29
  84. package/dist/{cloudflare-workers-ai-system-one-ch2wxfcp.js → cloudflare-workers-ai-system-one-43v9qkjk.js} +7 -2
  85. package/dist/{codex-adapter-968xwfy7.js → codex-adapter-tcg1q3jk.js} +6 -4
  86. package/dist/{codex-login-m819c41r.js → codex-login-rn7c5gxt.js} +1 -1
  87. package/dist/{codex-session-runner-ht4z99fa.js → codex-session-runner-xfx4wd9x.js} +7 -5
  88. package/dist/{commands-pcymaeg9.js → commands-ew83nj70.js} +2 -2
  89. package/dist/{controller-fpjyk46r.js → controller-gnq1k1mf.js} +4 -4
  90. package/dist/{controllers-connect-mwzx1fh6.js → controllers-connect-tw1dan9r.js} +26 -24
  91. package/dist/{cursor-adapter-cp4s2e2f.js → cursor-adapter-yq5xgfcg.js} +1 -1
  92. package/dist/{db-xsjg9jqq.js → db-7gbc53fd.js} +14 -2
  93. package/dist/{db-sgd12bt9.js → db-t86xrnes.js} +3 -3
  94. package/dist/{devin-adapter-zgqadvnm.js → devin-adapter-4ycy4vrf.js} +1 -1
  95. package/dist/{dispatcher-x0jfw2c9.js → dispatcher-64bdyhps.js} +23 -21
  96. package/dist/{docker-fkgtr75t.js → docker-nfy2gc8t.js} +2 -2
  97. package/dist/{dsh-adapter-jrq7ma7h.js → dsh-adapter-tvhc4k2d.js} +1 -1
  98. package/dist/{e2b-16d6ch39.js → e2b-9gkdhm3c.js} +2 -2
  99. package/dist/{e2b-zn0b4w5w.js → e2b-cjtf8k1z.js} +2 -2
  100. package/dist/{easter-egg-3d-5cgynaja.js → easter-egg-3d-e4qv8dxj.js} +1 -1
  101. package/dist/{event-bus-9vpk8gmq.js → event-bus-3z78ep5n.js} +1 -1
  102. package/dist/{execute-t4e6m3rw.js → execute-0xpz8950.js} +85 -23
  103. package/dist/{external-channel-8njj4h3b.js → external-channel-e9nw24zv.js} +2 -2
  104. package/dist/{google-generative-ai-bmq8gkf3.js → google-generative-ai-mk9vcpe1.js} +15 -15
  105. package/dist/{google-vertex-b1rvp52s.js → google-vertex-q580kz8k.js} +20 -20
  106. package/dist/{grok-adapter-kkr97v2f.js → grok-adapter-v82srhrx.js} +9 -7
  107. package/dist/handlers-c9ajzhbn.js +41 -0
  108. package/dist/{heartbeat-wd03zhn0.js → heartbeat-2vqs1319.js} +26 -24
  109. package/dist/{hook-xzj2ts2p.js → hook-01nk13wx.js} +7 -5
  110. package/dist/{hook-f0vghj42.js → hook-jzpheegg.js} +9 -7
  111. package/dist/{http-4hwxv62p.js → http-fc1k6ec8.js} +859 -252
  112. package/dist/index-07ef7nkm.js +42 -0
  113. package/dist/{index-g6tbb6ve.js → index-31ceyf42.js} +1 -1
  114. package/dist/index-7yts8n9s.js +43 -0
  115. package/dist/{index-c4ykd0f1.js → index-dr94zbnh.js} +13348 -11611
  116. package/dist/index-q3t40ryv.js +46 -0
  117. package/dist/{index-ww2vznkp.js → index-sepja052.js} +1 -1
  118. package/dist/{index-97q4xn03.js → index-zdycv3ja.js} +135 -79
  119. package/dist/{index-g216q6jr.js → index-zsyx51ap.js} +1 -4
  120. package/dist/{keepalive-hrh7xnr9.js → keepalive-5nh2rhmr.js} +4 -4
  121. package/dist/lead-aayq64jn.js +79 -0
  122. package/dist/{llama-cpp-classify-vv43gswy.js → llama-cpp-classify-ee7vmd7q.js} +4 -1
  123. package/dist/{maintenance-e8wnwnqx.js → maintenance-hjhzdt3k.js} +1 -1
  124. package/dist/{mistral-conversations-1medfwv7.js → mistral-conversations-sd0xf1tn.js} +13 -13
  125. package/dist/{node-3v3f08f7.js → node-jzjj7r9x.js} +10 -9
  126. package/dist/{oauth-refresh-sweep-zm0yj4sj.js → oauth-refresh-sweep-y3n1knmd.js} +3 -3
  127. package/dist/{onboard-dtwcq603.js → onboard-1zq3m7db.js} +2 -2
  128. package/dist/{openai-codex-responses-de9pvs4d.js → openai-codex-responses-79s8xnbh.js} +29 -23
  129. package/dist/{openai-completions-mtqge3nf.js → openai-completions-tdbyts0x.js} +21 -20
  130. package/dist/{openai-decisions-ygk4kkxd.js → openai-decisions-bqhnjyfz.js} +2 -1
  131. package/dist/{openai-responses-dkyng71g.js → openai-responses-dm3t5vqp.js} +26 -17
  132. package/dist/{opencode-adapter-x4tqzhkh.js → opencode-adapter-e56086m1.js} +7 -5
  133. package/dist/{openrouter-images-wvv7camj.js → openrouter-images-ssttr1y4.js} +6 -3
  134. package/dist/{otel-impl-w3fbhpn0.js → otel-impl-h9yyza47.js} +2 -2
  135. package/dist/{pi-messages-nhh1pkz2.js → pi-messages-3nf8bq1a.js} +6 -4
  136. package/dist/{pi-mono-adapter-mcfkn9vf.js → pi-mono-adapter-tzps8f38.js} +9 -37
  137. package/dist/{pricing-refresh-j38dehfs.js → pricing-refresh-nevhat8h.js} +3 -3
  138. package/dist/{rbac-roles-ae8yttq4.js → rbac-roles-4y6ngvzq.js} +1 -1
  139. package/dist/{rbac-roles-ejxx9b35.js → rbac-roles-exbg8xb6.js} +2 -2
  140. package/dist/{registry-rxw10xzg.js → registry-ajhexe44.js} +1 -1
  141. package/dist/{render-v2-n16n0phe.js → render-v2-cfsh13z3.js} +3 -3
  142. package/dist/{resume-z0fgjc38.js → resume-5s2t0dbs.js} +10 -8
  143. package/dist/{runtime-xe3aqy4x.js → runtime-bt5pkpm1.js} +1 -1
  144. package/dist/{session-access-cv3mq6mc.js → session-access-dnbyp3cn.js} +6 -4
  145. package/dist/{setup-mafhj3yt.js → setup-1wj1y77j.js} +1 -1
  146. package/dist/{typesafe-system-one-2hgpayzy.js → typesafe-system-one-bre38hvs.js} +4 -2
  147. package/dist/{virtual-modules-4r3zkc20.js → virtual-modules-mnfbh5mr.js} +8 -2
  148. package/dist/{work-objects-8b86mgjp.js → work-objects-7mg6216g.js} +26 -24
  149. package/dist/worker-nwb789mg.js +79 -0
  150. package/dist/{x-y45mthwn.js → x-pbpezr0s.js} +2 -2
  151. package/openapi.json +793 -6
  152. package/package.json +11 -11
  153. package/src/apps/catalog.generated.json +206 -4
  154. package/src/apps/page-validator.ts +13 -1
  155. package/src/assets/key.ts +17 -0
  156. package/src/azure-devops/handlers.ts +1 -1
  157. package/src/be/chunking.ts +42 -9
  158. package/src/be/db/approvals.ts +18 -0
  159. package/src/be/db/session-moves.ts +164 -0
  160. package/src/be/db/session-tree.ts +384 -0
  161. package/src/be/db/tasks/draft-text.ts +15 -0
  162. package/src/be/db/tasks/read.ts +54 -5
  163. package/src/be/db/workflow-runs.ts +96 -0
  164. package/src/be/db.ts +85 -237
  165. package/src/be/memory/index-content.ts +36 -17
  166. package/src/be/memory/providers/openai-embedding.ts +115 -61
  167. package/src/be/memory/providers/sqlite-store.ts +69 -23
  168. package/src/be/memory/reranker.ts +31 -1
  169. package/src/be/memory/search-candidates.ts +47 -0
  170. package/src/be/memory/types.ts +14 -0
  171. package/src/be/onboarding.ts +3 -0
  172. package/src/be/scripts/typecheck.ts +2 -0
  173. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +106 -54
  174. package/src/be/seed-scripts/index.ts +2 -2
  175. package/src/be/skill-sync.ts +43 -2
  176. package/src/be/swarm-config-guard.ts +25 -1
  177. package/src/be/task-attachment-store.ts +30 -0
  178. package/src/bitbucket/api.ts +81 -0
  179. package/src/bitbucket/auth.ts +64 -0
  180. package/src/bitbucket/handlers.ts +434 -0
  181. package/src/bitbucket/index.ts +28 -0
  182. package/src/bitbucket/templates.ts +134 -0
  183. package/src/bitbucket/types.ts +65 -0
  184. package/src/commands/runner.ts +55 -3
  185. package/src/e2b/env.ts +1 -0
  186. package/src/extensions/catalog.generated.json +4 -4
  187. package/src/extensions/contract-types.generated.ts +1 -1
  188. package/src/extensions/contract.ts +9 -2
  189. package/src/extensions/post-bridge.ts +1 -0
  190. package/src/fs/provider.ts +13 -1
  191. package/src/github/handlers.ts +6 -6
  192. package/src/gitlab/handlers.ts +5 -5
  193. package/src/heartbeat/heartbeat.ts +31 -11
  194. package/src/http/assets.ts +14 -2
  195. package/src/http/core.ts +12 -0
  196. package/src/http/fs.ts +54 -34
  197. package/src/http/index.ts +4 -0
  198. package/src/http/mcp-body.ts +37 -0
  199. package/src/http/mcp-user.ts +3 -5
  200. package/src/http/mcp.ts +6 -7
  201. package/src/http/memory.ts +26 -15
  202. package/src/http/onboarding.ts +1 -0
  203. package/src/http/page-proxy.ts +61 -5
  204. package/src/http/pages-public.ts +27 -44
  205. package/src/http/pages.ts +4 -4
  206. package/src/http/script-runs.ts +2 -0
  207. package/src/http/sessions.ts +366 -12
  208. package/src/http/skills.ts +48 -1
  209. package/src/http/tasks.ts +1 -1
  210. package/src/http/users.ts +13 -1
  211. package/src/http/webhooks.ts +141 -0
  212. package/src/integrations/chat-sdk/adapters.ts +24 -4
  213. package/src/integrations/chat-sdk/attachments.ts +90 -12
  214. package/src/integrations/chat-sdk/facts.ts +138 -0
  215. package/src/integrations/chat-sdk/inbound.ts +156 -8
  216. package/src/integrations/chat-sdk/limits.ts +24 -0
  217. package/src/integrations/chat-sdk/outbound-files.ts +186 -0
  218. package/src/integrations/chat-sdk/outbound.ts +272 -5
  219. package/src/integrations/chat-sdk/relay.ts +4 -1
  220. package/src/integrations/chat-sdk/router.ts +28 -2
  221. package/src/integrations/chat-sdk/steering.ts +9 -0
  222. package/src/integrations/chat-sdk/templates.ts +14 -0
  223. package/src/integrations/chat-sdk/thread-buffer.ts +4 -0
  224. package/src/mcp-limits.ts +20 -0
  225. package/src/pages/browser-sdk.ts +8 -3
  226. package/src/pages/feedback-overlay.ts +1 -1
  227. package/src/providers/acp-targets.ts +1 -1
  228. package/src/providers/amp-adapter.ts +1 -1
  229. package/src/providers/codex-adapter.ts +106 -119
  230. package/src/providers/codex-agents-md.ts +35 -229
  231. package/src/providers/cursor-adapter.ts +1 -1
  232. package/src/providers/pi-mono-adapter.ts +5 -53
  233. package/src/realtime/transport.ts +1 -2
  234. package/src/script-workflows/workflow-ctx.ts +1 -0
  235. package/src/scripts-runtime/types/stdlib.d.ts +2 -0
  236. package/src/scripts-runtime/types/swarm-extension.d.ts +14 -4
  237. package/src/scripts-runtime/types/swarm-sdk.d.ts +2 -0
  238. package/src/server-user.ts +2 -0
  239. package/src/server.ts +2 -0
  240. package/src/slack/assistant.ts +2 -2
  241. package/src/slack/files.ts +2 -0
  242. package/src/slack/handlers.test.ts +158 -0
  243. package/src/slack/handlers.ts +23 -32
  244. package/src/slack/inbound-files.ts +39 -6
  245. package/src/slack/thread-buffer.ts +2 -1
  246. package/src/tasks/context-key.ts +61 -1
  247. package/src/tasks/task-terminal-effects.ts +21 -17
  248. package/src/tests/apps-card-grid.test.ts +197 -0
  249. package/src/tests/apps-catalog-additions.test.ts +120 -0
  250. package/src/tests/apps-tree.test.ts +129 -0
  251. package/src/tests/bitbucket-auth.test.ts +156 -0
  252. package/src/tests/bitbucket-handlers.test.ts +425 -0
  253. package/src/tests/bitbucket-webhook.test.ts +220 -0
  254. package/src/tests/chat-sdk-attachments-reply.test.ts +52 -0
  255. package/src/tests/chat-sdk-config.test.ts +11 -0
  256. package/src/tests/chat-sdk-facts.test.ts +23 -0
  257. package/src/tests/chat-sdk-inbound.test.ts +597 -4
  258. package/src/tests/chat-sdk-outbound-files.test.ts +652 -0
  259. package/src/tests/chat-sdk-telegram-markdown.test.ts +92 -0
  260. package/src/tests/codex-adapter.test.ts +167 -242
  261. package/src/tests/config-api-only-keys.test.ts +9 -0
  262. package/src/tests/context-key.test.ts +50 -0
  263. package/src/tests/core-auth.test.ts +5 -0
  264. package/src/tests/cors-allowlist.test.ts +1 -1
  265. package/src/tests/db-task-read-contract.test.ts +7 -0
  266. package/src/tests/db-task-write-contract.test.ts +6 -0
  267. package/src/tests/docs-index-footprint.test.js +3 -3
  268. package/src/tests/extensions-example-slack-reply-gate.test.ts +262 -91
  269. package/src/tests/fixtures/bitbucket/pullrequest-comment-created-inline.json +174 -0
  270. package/src/tests/fixtures/bitbucket/pullrequest-comment-created.json +170 -0
  271. package/src/tests/fixtures/bitbucket/pullrequest-created-mention.json +132 -0
  272. package/src/tests/fixtures/bitbucket/pullrequest-created-reviewer.json +140 -0
  273. package/src/tests/fixtures/bitbucket/pullrequest-fulfilled.json +134 -0
  274. package/src/tests/fixtures/bitbucket/pullrequest-rejected.json +133 -0
  275. package/src/tests/generate-mcp-docs.test.ts +101 -0
  276. package/src/tests/gitlab-handlers.test.ts +3 -3
  277. package/src/tests/gitlab-vcs-db.test.ts +4 -4
  278. package/src/tests/heartbeat-checklist.test.ts +33 -0
  279. package/src/tests/heartbeat-jev-gate-credentials.test.ts +44 -0
  280. package/src/tests/heartbeat-jev-gate.test.ts +242 -1
  281. package/src/tests/integration-disable-flags.test.ts +36 -0
  282. package/src/tests/kv-page-proxy.test.ts +91 -5
  283. package/src/tests/launch-password-rejection.test.ts +2 -2
  284. package/src/tests/mcp-input-caps.test.ts +294 -0
  285. package/src/tests/mcp-tools.test.ts +1 -1
  286. package/src/tests/memory-chunked-search-starvation.test.ts +200 -0
  287. package/src/tests/memory-embedding-input-cap.test.ts +114 -0
  288. package/src/tests/memory.test.ts +14 -0
  289. package/src/tests/onboarding.test.ts +12 -0
  290. package/src/tests/page-guest-session.test.ts +19 -8
  291. package/src/tests/page-proxy-authed.test.ts +1 -1
  292. package/src/tests/page-proxy.test.ts +17 -10
  293. package/src/tests/page-session.test.ts +102 -1
  294. package/src/tests/pages-authed-mode.test.ts +82 -12
  295. package/src/tests/pages-password-mode.test.ts +5 -5
  296. package/src/tests/pi-codemode.test.ts +8 -2
  297. package/src/tests/preload-env.test.ts +57 -0
  298. package/src/tests/preload.ts +21 -0
  299. package/src/tests/prompt-template-remaining.test.ts +38 -0
  300. package/src/tests/realtime-transport.test.ts +13 -7
  301. package/src/tests/run-root-coverage.test.ts +39 -0
  302. package/src/tests/runner-bitbucket-vcs.test.ts +191 -0
  303. package/src/tests/runner-skills-refresh.test.ts +58 -0
  304. package/src/tests/script-runs-http.test.ts +84 -0
  305. package/src/tests/scripts-http.test.ts +10 -1
  306. package/src/tests/secret-scrubber.test.ts +15 -0
  307. package/src/tests/sessions-move.test.ts +576 -0
  308. package/src/tests/sessions-tree.test.ts +493 -0
  309. package/src/tests/skill-files-http.test.ts +50 -0
  310. package/src/tests/skills-bundle.test.ts +99 -0
  311. package/src/tests/swarm-config-export-to-env.test.ts +23 -3
  312. package/src/tests/task-audio-transcription.test.ts +299 -0
  313. package/src/tests/task-completion-memory-chunking.test.ts +434 -0
  314. package/src/tests/task-terminal-secret-scrub.test.ts +6 -1
  315. package/src/tests/transcription.test.ts +299 -0
  316. package/src/tests/vcs-bitbucket.test.ts +91 -0
  317. package/src/tests/vcs-provider-isolation.test.ts +123 -0
  318. package/src/tests/vcs-provider.test.ts +16 -1
  319. package/src/tests/vcs-tracking.test.ts +3 -3
  320. package/src/tests/workflow-foreach-bodies.test.ts +637 -0
  321. package/src/tests/workflow-foreach-concurrency.test.ts +342 -0
  322. package/src/tests/workflow-foreach-retry.test.ts +537 -0
  323. package/src/tests/workflow-foreach.test.ts +44 -23
  324. package/src/tests/workflow-step-claims.test.ts +6 -6
  325. package/src/tests/workflow-system-one-decision-providers.test.ts +98 -1
  326. package/src/tests/workflow-system-one-decision.test.ts +2 -1
  327. package/src/tests/workflow-tla-races.test.ts +2 -2
  328. package/src/tools/chat-access.ts +10 -0
  329. package/src/tools/chat-post.ts +31 -11
  330. package/src/tools/chat-reply.ts +32 -10
  331. package/src/tools/memory-search.ts +3 -1
  332. package/src/tools/script-delete.ts +1 -1
  333. package/src/tools/system-one-decide.ts +17 -4
  334. package/src/tools/workflows/create-workflow.ts +5 -3
  335. package/src/types.ts +9 -2
  336. package/src/utils/config-env-export.ts +4 -1
  337. package/src/utils/page-session.ts +133 -20
  338. package/src/utils/secret-scrubber.ts +4 -0
  339. package/src/utils/skills-refresh.ts +83 -43
  340. package/src/utils/transcription.ts +246 -0
  341. package/src/vcs/bitbucket.ts +58 -0
  342. package/src/vcs/index.ts +2 -0
  343. package/src/vcs/types.ts +2 -2
  344. package/src/workflows/approval-resolution.ts +4 -1
  345. package/src/workflows/checkpoint.ts +9 -1
  346. package/src/workflows/constants.ts +3 -0
  347. package/src/workflows/definition.ts +48 -17
  348. package/src/workflows/engine.ts +25 -15
  349. package/src/workflows/executors/foreach.ts +45 -99
  350. package/src/workflows/executors/system-one-decision.ts +28 -7
  351. package/src/workflows/executors/system-one-providers.ts +39 -4
  352. package/src/workflows/foreach-body.ts +146 -0
  353. package/src/workflows/foreach-driver.ts +552 -0
  354. package/src/workflows/foreach-join.ts +206 -7
  355. package/src/workflows/node-timeout.ts +21 -0
  356. package/src/workflows/recovery.ts +68 -3
  357. package/src/workflows/resume.ts +221 -43
  358. package/src/workflows/retry-poller.ts +39 -24
  359. package/src/workflows/step-input.ts +59 -0
  360. package/src/workflows/task-step-routing.ts +114 -56
  361. package/templates/extensions/slack-reply-gate/README.md +24 -22
  362. package/templates/extensions/slack-reply-gate/hooks.ts +146 -95
  363. package/templates/extensions/slack-reply-gate/manifest.json +2 -2
  364. package/templates/skills/apps/SKILL.md +28 -6
  365. package/templates/skills/apps/content.md +28 -6
  366. package/templates/skills/chat-sdk/content.md +6 -2
  367. package/templates/skills/code-quality/content.md +2 -1
  368. package/templates/skills/heartbeat-runbook/content.md +5 -5
  369. package/templates/skills/pages/content.md +6 -4
  370. package/templates/skills/slack-interaction/content.md +5 -0
  371. package/templates/skills/swarm-scripts/SKILL.md +2 -2
  372. package/templates/skills/swarm-scripts/content.md +2 -2
  373. package/templates/skills/work-on-task/SKILL.md +1 -1
  374. package/templates/skills/work-on-task/content.md +1 -1
  375. package/dist/cli-51y09c6p.js +0 -2657
  376. package/dist/cli-yw91rnmw.js +0 -13
  377. package/dist/handlers-0pvee9nw.js +0 -39
  378. package/dist/index-gdh8jrdm.js +0 -43
  379. package/dist/index-hg0x2cdv.js +0 -40
  380. package/dist/index-thm0y6a8.js +0 -41
  381. package/dist/lead-ee8vazz2.js +0 -77
  382. package/dist/worker-16s75hm5.js +0 -77
@@ -1,3 +1,10 @@
1
+ import {
2
+ getSystemMessageText,
3
+ renderSystemMessageUpdate,
4
+ resolveTranscript,
5
+ resolveTranscriptTools,
6
+ calculateCost
7
+ } from "./cli-2nf3b08t.js";
1
8
  import {
2
9
  parseToolCallArguments,
3
10
  parseStreamingJson
@@ -12,17 +19,10 @@ import {
12
19
  resolveJsonSchemaStrictSampling,
13
20
  resolveGrammarConstrainedSampling,
14
21
  transformMessages
15
- } from "./cli-3r8samv3.js";
22
+ } from "./cli-1f0gp9vz.js";
16
23
  import {
17
24
  sanitizeSurrogates
18
25
  } from "./cli-xs8nzjqf.js";
19
- import {
20
- getSystemMessageText,
21
- renderSystemMessageUpdate,
22
- resolveTranscript,
23
- resolveTranscriptTools,
24
- calculateCost
25
- } from "./cli-0bqteszy.js";
26
26
 
27
27
  // node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js
28
28
  function encodeTextSignatureV1(id, phase) {
@@ -51,7 +51,7 @@ function convertToolResultOutput(model, content) {
51
51
  const textResult = content.filter((c) => c.type === "text").map((c) => c.text).join(`
52
52
  `);
53
53
  const images = content.filter((c) => c.type === "image");
54
- const hasText = textResult.length > 0;
54
+ const hasText = textResult.trim().length > 0;
55
55
  if (images.length === 0 || !model.input.includes("image")) {
56
56
  return sanitizeSurrogates(hasText ? textResult : images.length > 0 ? "(see attached image)" : "(no tool output)");
57
57
  }
@@ -68,6 +68,21 @@ function convertToolResultOutput(model, content) {
68
68
  }
69
69
  return output;
70
70
  }
71
+ function getResponsesToolSupport(options) {
72
+ if (options.supportsMidConvoSystemMessages && options.supportsAdditionalTools)
73
+ return "changes";
74
+ return options.supportsToolSearch ? "additions" : "none";
75
+ }
76
+ function renderIncrementalToolsNotice(unavailable) {
77
+ const notice = "This is an incremental tools update. Previously declared tools remain available unless explicitly marked unavailable. A tool declared again here is available again, and its latest definition replaces the earlier one.";
78
+ return unavailable.size > 0 ? `${notice}
79
+ Still unavailable: ${[...unavailable].join(", ")}.` : notice;
80
+ }
81
+ function renderToolRemovalNotice(names) {
82
+ return `The following tools are no longer available. Do not call them:
83
+ ${names.map((name) => `- ${name}`).join(`
84
+ `)}`;
85
+ }
71
86
  function convertResponsesMessages(model, context, allowedToolCallProviders, options) {
72
87
  const normalizedContext = resolveTranscript(context, options?.supportsMidConvoSystemMessages);
73
88
  const messages = [];
@@ -95,20 +110,29 @@ function convertResponsesMessages(model, context, allowedToolCallProviders, opti
95
110
  return `${normalizedCallId}|${normalizedItemId}`;
96
111
  };
97
112
  const transformedMessages = transformMessages(normalizedContext.messages, model, normalizeToolCallId);
98
- const transcriptTools = resolveTranscriptTools(normalizedContext.messages, (options?.supportsAdditionalTools ?? false) || (options?.supportsToolSearch ?? false));
113
+ const toolSupport = getResponsesToolSupport(options ?? {});
114
+ const transcriptTools = resolveTranscriptTools(normalizedContext.messages, toolSupport);
115
+ let declaredAdditionalTools = false;
116
+ const unavailableTools = new Set;
99
117
  const appendSystemToolAdditions = (message, seed) => {
100
- const tools = transcriptTools.anchorsAdditions ? message.toolsAdded ?? [] : [];
118
+ const tools = message.toolsAdded ?? [];
119
+ for (const tool of tools)
120
+ unavailableTools.delete(tool.name);
101
121
  if (tools.length === 0)
102
122
  return;
103
- if (options?.supportsAdditionalTools) {
123
+ if (toolSupport === "changes") {
124
+ if (declaredAdditionalTools) {
125
+ messages.push({ role: instructionRole, content: renderIncrementalToolsNotice(unavailableTools) });
126
+ }
127
+ declaredAdditionalTools = true;
104
128
  messages.push({
105
129
  type: "additional_tools",
106
130
  role: "developer",
107
- tools: convertResponsesTools(tools, options.toolOptions)
131
+ tools: convertResponsesTools(tools, options?.toolOptions)
108
132
  });
109
133
  return;
110
134
  }
111
- if (!options?.supportsToolSearch)
135
+ if (toolSupport !== "additions")
112
136
  return;
113
137
  const names = tools.map((tool) => tool.name);
114
138
  const callId = `pi_tool_load_${shortHash(`${seed}:${names.join(",")}`)}`;
@@ -124,7 +148,7 @@ function convertResponsesMessages(model, context, allowedToolCallProviders, opti
124
148
  call_id: callId,
125
149
  execution: "client",
126
150
  status: "completed",
127
- tools: convertResponsesTools(tools, { ...options.toolOptions, toolSearchResult: true })
151
+ tools: convertResponsesTools(tools, { ...options?.toolOptions, toolSearchResult: true })
128
152
  });
129
153
  };
130
154
  const includeInitialSystemMessage = options?.includeSystemPrompt ?? true;
@@ -138,13 +162,26 @@ function convertResponsesMessages(model, context, allowedToolCallProviders, opti
138
162
  const instructionRole = model.reasoning && compat?.supportsDeveloperRole !== false ? "developer" : "system";
139
163
  let msgIndex = 0;
140
164
  let sourceIndex = 0;
165
+ let systemIndex = 0;
141
166
  for (const msg of transformedMessages) {
142
167
  const isLeadingSystemMessage = sourceIndex++ === 0 && msg.role === "system";
143
168
  if (msg.role === "system") {
144
- if (!isLeadingSystemMessage)
169
+ const anchorsToolChanges = systemIndex++ >= transcriptTools.foldedSystemMessages;
170
+ if (anchorsToolChanges)
145
171
  appendSystemToolAdditions(msg, `system:${msgIndex}`);
146
172
  if (!isLeadingSystemMessage || includeInitialSystemMessage) {
147
- const text = isLeadingSystemMessage ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg);
173
+ const parts = [isLeadingSystemMessage ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg)];
174
+ if (anchorsToolChanges) {
175
+ const added = new Set((msg.toolsAdded ?? []).map((tool) => tool.name));
176
+ const removed = (msg.toolsRemoved ?? []).map((tool) => tool.name).filter((name) => !added.has(name));
177
+ if (removed.length > 0)
178
+ parts.push(renderToolRemovalNotice(removed));
179
+ for (const name of removed)
180
+ unavailableTools.add(name);
181
+ }
182
+ const text = parts.filter((part) => part.length > 0).join(`
183
+
184
+ `);
148
185
  if (text.length > 0) {
149
186
  messages.push({ role: instructionRole, content: sanitizeSurrogates(text) });
150
187
  }
@@ -669,4 +706,4 @@ function mapStopReason(status, incompleteReason) {
669
706
  }
670
707
  }
671
708
 
672
- export { convertResponsesMessages, convertResponsesTools, processResponsesStream };
709
+ export { getResponsesToolSupport, convertResponsesMessages, convertResponsesTools, processResponsesStream };
@@ -15,17 +15,17 @@ import {
15
15
  init_secret_registry,
16
16
  upsertSwarmConfig2,
17
17
  init_db3
18
- } from "./cli-p20r8w42.js";
18
+ } from "./cli-fcc5qe3f.js";
19
19
  import {
20
20
  createRuntimeProvider,
21
21
  init_runtime_providers
22
- } from "./cli-625tb7aq.js";
22
+ } from "./cli-p859hcc8.js";
23
23
  import {
24
24
  closeSessionTokenConnections,
25
25
  init_session_token_connections,
26
26
  insertSessionToken,
27
27
  init_users
28
- } from "./cli-9fhkkpj5.js";
28
+ } from "./cli-xt768r5m.js";
29
29
  import {
30
30
  RuntimeControllerCreateSchema,
31
31
  RuntimeControllerUpdateSchema,
@@ -33,13 +33,13 @@ import {
33
33
  RuntimePoolUpdateSchema,
34
34
  RuntimePoolCreateAgentSchema,
35
35
  init_types
36
- } from "./cli-nc35pxb7.js";
36
+ } from "./cli-rh5smt8t.js";
37
37
  import {
38
38
  scrubSecrets,
39
39
  registerVolatileSecret,
40
40
  unregisterVolatileSecret,
41
41
  init_secret_scrubber
42
- } from "./cli-xf234ws8.js";
42
+ } from "./cli-n4c8e3s5.js";
43
43
  import {
44
44
  __esm
45
45
  } from "./cli-242037k3.js";
@@ -16,6 +16,14 @@ import {
16
16
  require_sso_oidc,
17
17
  require_dist_cjs3
18
18
  } from "./cli-v41kn3cd.js";
19
+ import {
20
+ getSystemMessageText,
21
+ getInitialSystemMessage,
22
+ withoutInitialSystemMessage,
23
+ getCurrentTools,
24
+ collapseSystemMessages,
25
+ calculateCost
26
+ } from "./cli-2nf3b08t.js";
19
27
  import {
20
28
  parseToolCallArguments,
21
29
  parseStreamingJson
@@ -38,25 +46,20 @@ import {
38
46
  adjustMaxTokensForThinking,
39
47
  splitErrorToolResultImages,
40
48
  transformMessages
41
- } from "./cli-3r8samv3.js";
49
+ } from "./cli-1f0gp9vz.js";
42
50
  import {
43
51
  sanitizeSurrogates
44
52
  } from "./cli-xs8nzjqf.js";
45
53
  import {
46
54
  providerHeadersToRecord
47
55
  } from "./cli-hf1b007k.js";
48
- import {
49
- getSystemMessageText,
50
- getInitialSystemMessage,
51
- withoutInitialSystemMessage,
52
- getCurrentTools,
53
- collapseSystemMessages,
54
- calculateCost
55
- } from "./cli-0bqteszy.js";
56
56
  import {
57
57
  AssistantMessageEventStream,
58
58
  appendAssistantMessageDiagnostic
59
59
  } from "./cli-m6m1bvtp.js";
60
+ import {
61
+ getClientVersion
62
+ } from "./cli-pkaqk57w.js";
60
63
  import {
61
64
  require_src3
62
65
  } from "./cli-qe909n63.js";
@@ -4828,7 +4831,8 @@ var stream = (model, context, options = {}) => {
4828
4831
  const blocks = output.content;
4829
4832
  const optionsProfile = options.profile || options.env?.AWS_PROFILE;
4830
4833
  const config = {
4831
- profile: optionsProfile || getProviderEnvValue("AWS_PROFILE", options.env)
4834
+ profile: optionsProfile || getProviderEnvValue("AWS_PROFILE", options.env),
4835
+ customUserAgent: bedrockUserAgent(options.identity)
4832
4836
  };
4833
4837
  const configuredRegion = getConfiguredBedrockRegion(options);
4834
4838
  const hasAmbientConfiguredProfile = Boolean(getProviderEnvValue("AWS_PROFILE"));
@@ -5035,6 +5039,12 @@ function isReservedHeader(key) {
5035
5039
  const lower = key.toLowerCase();
5036
5040
  return lower.startsWith("x-amz-") || RESERVED_HEADER_EXACT.has(lower);
5037
5041
  }
5042
+ function bedrockUserAgent(identity) {
5043
+ const mode = identity?.userAgent ?? "detailed";
5044
+ if (typeof mode === "object")
5045
+ return mode.custom;
5046
+ return mode === "short" ? [["pi"]] : [["pi", getClientVersion(identity)]];
5047
+ }
5038
5048
  function addCustomHeadersMiddleware(client, headers) {
5039
5049
  const middleware = (next) => async (args) => {
5040
5050
  const request = args.request;
@@ -195,6 +195,7 @@ var validatePositiveInteger = (name, n) => {
195
195
  }
196
196
  return n;
197
197
  };
198
+ var CREDENTIAL_OPTIONS = ["apiKey", "authToken", "credentials", "config", "profile"];
198
199
  var safeJSON = (text) => {
199
200
  try {
200
201
  return JSON.parse(text);
@@ -320,7 +321,7 @@ var formatRequestDetails = (details) => {
320
321
  if (details.headers) {
321
322
  details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [
322
323
  name,
323
- name.toLowerCase() === "authorization" || name.toLowerCase() === "proxy-authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value
324
+ name.toLowerCase() === "authorization" || name.toLowerCase() === "proxy-authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "x-amz-security-token" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value
324
325
  ]));
325
326
  }
326
327
  if ("retryOfRequestLogID" in details) {
@@ -389,4 +390,4 @@ function promiseWithResolvers() {
389
390
  return { promise, resolve, reject };
390
391
  }
391
392
 
392
- export { __classPrivateFieldSet, __classPrivateFieldGet, isAbortError, castToError, AnthropicError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, RetryableError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, isAbsoluteURL, isArray, isReadonlyArray, maybeObj, isEmptyObj, isObj, validatePositiveInteger, safeJSON, checkNever, concatBytes, encodeUTF8, decodeUTF8, readEnv, defaultLogLevel, parseLogLevel, loggerFor, defaultLogger, debugLogRequestDetails, isStatus, isFatal4xx, backoff, jitter, applyJitter, ToolError, DEFAULT_MEMORY_SYNC_INTERVAL_MS, checkMemorySyncInterval, promiseWithResolvers };
393
+ export { __classPrivateFieldSet, __classPrivateFieldGet, isAbortError, castToError, AnthropicError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, RetryableError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, isAbsoluteURL, isArray, isReadonlyArray, maybeObj, isEmptyObj, isObj, validatePositiveInteger, CREDENTIAL_OPTIONS, safeJSON, checkNever, concatBytes, encodeUTF8, decodeUTF8, readEnv, defaultLogLevel, parseLogLevel, loggerFor, defaultLogger, debugLogRequestDetails, isStatus, isFatal4xx, backoff, jitter, applyJitter, ToolError, DEFAULT_MEMORY_SYNC_INTERVAL_MS, checkMemorySyncInterval, promiseWithResolvers };
@@ -2,17 +2,17 @@ import {
2
2
  getKv2,
3
3
  upsertKv2,
4
4
  init_db3
5
- } from "./cli-p20r8w42.js";
5
+ } from "./cli-fcc5qe3f.js";
6
6
  import {
7
7
  resolveIdentity,
8
8
  recordUnmappedIdentity
9
- } from "./cli-v3yr2gbg.js";
9
+ } from "./cli-5kzk3472.js";
10
10
  import {
11
11
  findUserByExternalId,
12
12
  findOrCreateUserByEmail,
13
13
  linkIdentity,
14
14
  init_users
15
- } from "./cli-9fhkkpj5.js";
15
+ } from "./cli-xt768r5m.js";
16
16
 
17
17
  // src/slack/enrich.ts
18
18
  init_db3();
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  workflowEventBus2,
6
6
  init_event_bus
7
- } from "./cli-wt645v7q.js";
7
+ } from "./cli-dabehxhp.js";
8
8
  import {
9
9
  getDbClient2,
10
10
  isRuntimePoolsEnabled,
@@ -66,7 +66,7 @@ import {
66
66
  getStaleApprovalRequests2,
67
67
  upsertKv2,
68
68
  init_db3
69
- } from "./cli-p20r8w42.js";
69
+ } from "./cli-fcc5qe3f.js";
70
70
  import {
71
71
  poolTaskRunsOnHarness,
72
72
  isRuntimePoolWakeable,
@@ -91,29 +91,29 @@ import {
91
91
  createRerouteDecisionTask,
92
92
  createPoolStarvationDecisionTask,
93
93
  canClaim
94
- } from "./cli-v3yr2gbg.js";
94
+ } from "./cli-5kzk3472.js";
95
95
  import {
96
96
  listRuntimePools2,
97
97
  init_db
98
- } from "./cli-w6nadkh4.js";
98
+ } from "./cli-5rvg1ddk.js";
99
99
  import {
100
100
  createApprovalFollowUpTask
101
- } from "./cli-q6r7t299.js";
101
+ } from "./cli-92mqenkc.js";
102
102
  import {
103
103
  remediateStalledRuntime
104
- } from "./cli-dqb4n629.js";
104
+ } from "./cli-x6vf4sad.js";
105
105
  import {
106
106
  runSavedScriptAsAgent
107
- } from "./cli-2y91wnbh.js";
107
+ } from "./cli-we0ra057.js";
108
108
  import {
109
109
  mintToken,
110
110
  init_users
111
- } from "./cli-9fhkkpj5.js";
111
+ } from "./cli-xt768r5m.js";
112
112
  import {
113
113
  TERMINAL_TASK_STATUSES,
114
114
  SUPERSEDED_WORKFLOW_TASK_REASON,
115
115
  init_types
116
- } from "./cli-nc35pxb7.js";
116
+ } from "./cli-rh5smt8t.js";
117
117
  import {
118
118
  registerTemplate,
119
119
  init_registry,
@@ -128,7 +128,7 @@ import {
128
128
  import {
129
129
  init_package,
130
130
  package_default
131
- } from "./cli-pccfmtb5.js";
131
+ } from "./cli-179xcyky.js";
132
132
  import {
133
133
  isEnvFlagEnabled,
134
134
  init_env_flag
@@ -136,7 +136,7 @@ import {
136
136
  import {
137
137
  scrubSecrets,
138
138
  init_secret_scrubber
139
- } from "./cli-xf234ws8.js";
139
+ } from "./cli-n4c8e3s5.js";
140
140
 
141
141
  // src/be/runtime-pools/routing.ts
142
142
  init_runtime_pools_flag();
@@ -649,18 +649,36 @@ async function heartbeatChecklistGateScript() {
649
649
  }
650
650
  async function hasJevGateKey() {
651
651
  const pref = process.env.HEARTBEAT_JEV_GATE_PROVIDER?.trim().toLowerCase() || "auto";
652
- const keys = [];
653
- if (pref !== "openrouter")
654
- keys.push("TYPESAFE_API_KEY");
655
- if (pref !== "typesafe" && getOpenRouterBaseUrl() === DEFAULT_OPENROUTER_BASE_URL) {
656
- keys.push("OPENROUTER_API_KEY");
652
+ const auto = pref !== "typesafe" && pref !== "openrouter" && pref !== "cloudflare";
653
+ const providers = [];
654
+ if (auto || pref === "typesafe")
655
+ providers.push([["TYPESAFE_API_KEY"]]);
656
+ if ((auto || pref === "openrouter") && getOpenRouterBaseUrl() === DEFAULT_OPENROUTER_BASE_URL) {
657
+ providers.push([["OPENROUTER_API_KEY"]]);
657
658
  }
658
- try {
659
+ if (auto || pref === "cloudflare") {
660
+ providers.push([["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_API_KEY"], ["CLOUDFLARE_ACCOUNT_ID"]]);
661
+ }
662
+ const anySet = async (keys) => {
659
663
  for (const key of keys) {
660
664
  const rows = await getSwarmConfigs2({ scope: "global", key });
661
665
  if (rows.some((row) => row.value.trim() !== ""))
662
666
  return true;
663
667
  }
668
+ return false;
669
+ };
670
+ try {
671
+ for (const groups of providers) {
672
+ let usable = true;
673
+ for (const group of groups) {
674
+ if (!await anySet(group)) {
675
+ usable = false;
676
+ break;
677
+ }
678
+ }
679
+ if (usable)
680
+ return true;
681
+ }
664
682
  } catch {}
665
683
  return false;
666
684
  }