@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
@@ -5,7 +5,7 @@ import {
5
5
  authJsonToCredentialSelection,
6
6
  credentialsToAuthJson,
7
7
  loadAllCodexOAuthSlots
8
- } from "./cli-ejs3m1sx.js";
8
+ } from "./cli-kxpfx2xr.js";
9
9
  import {
10
10
  effectiveReasoningEffort
11
11
  } from "./cli-bn0rewsy.js";
@@ -20,7 +20,7 @@ import {
20
20
  renderMemoriesPrompt,
21
21
  isUnknownModelError,
22
22
  writeSkillsToFilesystem
23
- } from "./cli-xj0re5tm.js";
23
+ } from "./cli-4w24f7z3.js";
24
24
  import {
25
25
  isPollTracingEnabled,
26
26
  initOtel,
@@ -30,7 +30,7 @@ import {
30
30
  injectTraceContext2,
31
31
  initialize,
32
32
  ensure
33
- } from "./cli-qkhc5aqy.js";
33
+ } from "./cli-fy1jyyym.js";
34
34
  import {
35
35
  getContextWindowSize
36
36
  } from "./cli-a5ebc95n.js";
@@ -51,7 +51,7 @@ import {
51
51
  canonicalAzureDevOpsRepoUrl,
52
52
  parseAzureDevOpsRepoUrl,
53
53
  resolveScriptsOnlyMode
54
- } from "./cli-v3yr2gbg.js";
54
+ } from "./cli-5kzk3472.js";
55
55
  import {
56
56
  ACP_TARGET_IDS,
57
57
  isAcpTarget
@@ -59,32 +59,32 @@ import {
59
59
  import {
60
60
  checkAmpCredentials2,
61
61
  liveTestAmpCredentials2
62
- } from "./cli-1ephgwnq.js";
62
+ } from "./cli-fes51ya2.js";
63
63
  import {
64
64
  checkClaudeCredentials2
65
- } from "./cli-vdm20wej.js";
65
+ } from "./cli-sy8f9705.js";
66
66
  import {
67
67
  checkClaudeManagedCredentials2
68
- } from "./cli-a0kcty51.js";
68
+ } from "./cli-n6kmqngw.js";
69
69
  import {
70
70
  codexUserHome,
71
71
  checkCodexCredentials2
72
- } from "./cli-vq97g1jq.js";
72
+ } from "./cli-xawhpgc9.js";
73
73
  import {
74
74
  checkCursorCredentials2
75
- } from "./cli-bnz0r3kc.js";
75
+ } from "./cli-j1eghqfm.js";
76
76
  import {
77
77
  checkDevinCredentials2
78
- } from "./cli-s95dknxh.js";
78
+ } from "./cli-g1cw7xtt.js";
79
79
  import {
80
80
  checkDshCredentials2
81
- } from "./cli-44159k28.js";
81
+ } from "./cli-z63a269p.js";
82
82
  import {
83
83
  checkOpencodeCredentials2
84
- } from "./cli-36ckw0wx.js";
84
+ } from "./cli-stxdrqs2.js";
85
85
  import {
86
86
  checkGrokCredentials2
87
- } from "./cli-zrk6jxv8.js";
87
+ } from "./cli-y4x8ww6s.js";
88
88
  import {
89
89
  CODEX_OAUTH_POOL_SLOTS_ENV,
90
90
  isCodexOAuthConfigKey,
@@ -93,7 +93,7 @@ import {
93
93
  } from "./cli-j4bwnpkm.js";
94
94
  import {
95
95
  validateJsonSchema
96
- } from "./cli-51y09c6p.js";
96
+ } from "./cli-92mqenkc.js";
97
97
  import {
98
98
  mapTriggerSurface,
99
99
  init_telemetry_context,
@@ -111,7 +111,7 @@ import {
111
111
  init_vcs_repo_match,
112
112
  isApiDrainingResponse,
113
113
  init_api_drain
114
- } from "./cli-p20r8w42.js";
114
+ } from "./cli-fcc5qe3f.js";
115
115
  import {
116
116
  parseWorkerModelTierOverrides,
117
117
  resolveTaskModelSelection,
@@ -119,7 +119,7 @@ import {
119
119
  ProviderNameSchema,
120
120
  WorkerNudgeSchema,
121
121
  init_types
122
- } from "./cli-nc35pxb7.js";
122
+ } from "./cli-rh5smt8t.js";
123
123
  import {
124
124
  generateDefaultClaudeMd2,
125
125
  generateDefaultSoulMd2,
@@ -143,7 +143,7 @@ import {
143
143
  resolveClaudeMdPath,
144
144
  syncProfileFilesToServer,
145
145
  init_profile_sync
146
- } from "./cli-74c1wpm0.js";
146
+ } from "./cli-gpv60278.js";
147
147
  import {
148
148
  isSteeringEnabled2,
149
149
  init_steering_enabled
@@ -204,7 +204,7 @@ import {
204
204
  registerEnvSecrets,
205
205
  registerSensitiveKeyName,
206
206
  init_secret_scrubber
207
- } from "./cli-xf234ws8.js";
207
+ } from "./cli-n4c8e3s5.js";
208
208
  import {
209
209
  harnessModelMismatch,
210
210
  openAICompatibleProviders,
@@ -246,47 +246,47 @@ async function materializeCodexAuthJson(_slot, creds, deps = {}) {
246
246
  async function createProviderAdapter(provider) {
247
247
  switch (provider) {
248
248
  case "claude": {
249
- const { ClaudeAdapter } = await import("./claude-adapter-k5ksyres.js");
249
+ const { ClaudeAdapter } = await import("./claude-adapter-221mvad5.js");
250
250
  return new ClaudeAdapter;
251
251
  }
252
252
  case "pi": {
253
- const { PiMonoAdapter } = await import("./pi-mono-adapter-mcfkn9vf.js");
253
+ const { PiMonoAdapter } = await import("./pi-mono-adapter-tzps8f38.js");
254
254
  return new PiMonoAdapter;
255
255
  }
256
256
  case "codex": {
257
- const { CodexAdapter } = await import("./codex-adapter-968xwfy7.js");
257
+ const { CodexAdapter } = await import("./codex-adapter-tcg1q3jk.js");
258
258
  return new CodexAdapter;
259
259
  }
260
260
  case "claude-managed": {
261
- const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-h2y889ge.js");
261
+ const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-gt6pa35d.js");
262
262
  return new ClaudeManagedAdapter;
263
263
  }
264
264
  case "devin": {
265
- const { DevinAdapter } = await import("./devin-adapter-zgqadvnm.js");
265
+ const { DevinAdapter } = await import("./devin-adapter-4ycy4vrf.js");
266
266
  return new DevinAdapter;
267
267
  }
268
268
  case "opencode": {
269
- const { OpencodeAdapter } = await import("./opencode-adapter-x4tqzhkh.js");
269
+ const { OpencodeAdapter } = await import("./opencode-adapter-e56086m1.js");
270
270
  return new OpencodeAdapter;
271
271
  }
272
272
  case "dsh": {
273
- const { DshAdapter } = await import("./dsh-adapter-jrq7ma7h.js");
273
+ const { DshAdapter } = await import("./dsh-adapter-tvhc4k2d.js");
274
274
  return new DshAdapter;
275
275
  }
276
276
  case "amp": {
277
- const { AmpAdapter } = await import("./amp-adapter-k8b5xmj8.js");
277
+ const { AmpAdapter } = await import("./amp-adapter-z4qvhacj.js");
278
278
  return new AmpAdapter;
279
279
  }
280
280
  case "cursor": {
281
- const { CursorAdapter } = await import("./cursor-adapter-cp4s2e2f.js");
281
+ const { CursorAdapter } = await import("./cursor-adapter-yq5xgfcg.js");
282
282
  return new CursorAdapter;
283
283
  }
284
284
  case "grok": {
285
- const { GrokAdapter } = await import("./grok-adapter-kkr97v2f.js");
285
+ const { GrokAdapter } = await import("./grok-adapter-v82srhrx.js");
286
286
  return new GrokAdapter;
287
287
  }
288
288
  case "acp": {
289
- const { ACPAdapter } = await import("./acp-adapter-thq04adh.js");
289
+ const { ACPAdapter } = await import("./acp-adapter-11gp67nr.js");
290
290
  return new ACPAdapter;
291
291
  }
292
292
  default:
@@ -832,21 +832,38 @@ async function refreshSkillsIfChanged(ctx, lastHashRef, homeOverride) {
832
832
  return { changed: false };
833
833
  }
834
834
  let skillRows = [];
835
+ let bundledFiles = null;
835
836
  let newHash = null;
836
837
  let listFetchOk = false;
837
838
  try {
838
- const skillsResp = await fetch(`${apiUrl}/api/agents/${agentId}/skills`, {
839
+ const bundleResp = await fetch(`${apiUrl}/api/agents/${agentId}/skills/bundle`, {
839
840
  headers: authHeaders
840
841
  });
841
- if (skillsResp.ok) {
842
- const skillsData = await skillsResp.json();
843
- skillRows = skillsData.skills;
844
- if (typeof skillsData.signature === "string") {
845
- newHash = skillsData.signature;
842
+ if (bundleResp.ok) {
843
+ const bundle = await bundleResp.json();
844
+ skillRows = bundle.skills;
845
+ bundledFiles = new Map(bundle.skills.map((skill) => [skill.id, skill.files ?? []]));
846
+ if (typeof bundle.signature === "string") {
847
+ newHash = bundle.signature;
846
848
  }
847
849
  listFetchOk = true;
848
850
  }
849
851
  } catch {}
852
+ if (!listFetchOk) {
853
+ try {
854
+ const skillsResp = await fetch(`${apiUrl}/api/agents/${agentId}/skills`, {
855
+ headers: authHeaders
856
+ });
857
+ if (skillsResp.ok) {
858
+ const skillsData = await skillsResp.json();
859
+ skillRows = skillsData.skills;
860
+ if (typeof skillsData.signature === "string") {
861
+ newHash = skillsData.signature;
862
+ }
863
+ listFetchOk = true;
864
+ }
865
+ } catch {}
866
+ }
850
867
  if (!listFetchOk) {
851
868
  return { changed: false };
852
869
  }
@@ -859,32 +876,37 @@ async function refreshSkillsIfChanged(ctx, lastHashRef, homeOverride) {
859
876
  continue;
860
877
  const files = [];
861
878
  if (skill.isComplex) {
862
- try {
863
- const manifestResp = await fetch(`${apiUrl}/api/skills/${skill.id}/files`, {
864
- headers: authHeaders
865
- });
866
- if (manifestResp.ok) {
867
- const manifestData = await manifestResp.json();
868
- for (const manifestEntry of manifestData.files) {
869
- if (manifestEntry.isBinary) {
870
- files.push({ path: manifestEntry.path, content: "", isBinary: true });
871
- continue;
872
- }
873
- try {
874
- const encodedPath = manifestEntry.path.split("/").map(encodeURIComponent).join("/");
875
- const fileResp = await fetch(`${apiUrl}/api/skills/${skill.id}/files/${encodedPath}`, { headers: authHeaders });
876
- if (fileResp.ok) {
877
- const fileData = await fileResp.json();
878
- files.push({
879
- path: fileData.file.path,
880
- content: fileData.file.content,
881
- isBinary: fileData.file.isBinary
882
- });
879
+ const bundled = bundledFiles?.get(skill.id);
880
+ if (bundled) {
881
+ files.push(...bundled);
882
+ } else {
883
+ try {
884
+ const manifestResp = await fetch(`${apiUrl}/api/skills/${skill.id}/files`, {
885
+ headers: authHeaders
886
+ });
887
+ if (manifestResp.ok) {
888
+ const manifestData = await manifestResp.json();
889
+ for (const manifestEntry of manifestData.files) {
890
+ if (manifestEntry.isBinary) {
891
+ files.push({ path: manifestEntry.path, content: "", isBinary: true });
892
+ continue;
883
893
  }
884
- } catch {}
894
+ try {
895
+ const encodedPath = manifestEntry.path.split("/").map(encodeURIComponent).join("/");
896
+ const fileResp = await fetch(`${apiUrl}/api/skills/${skill.id}/files/${encodedPath}`, { headers: authHeaders });
897
+ if (fileResp.ok) {
898
+ const fileData = await fileResp.json();
899
+ files.push({
900
+ path: fileData.file.path,
901
+ content: fileData.file.content,
902
+ isBinary: fileData.file.isBinary
903
+ });
904
+ }
905
+ } catch {}
906
+ }
885
907
  }
886
- }
887
- } catch {}
908
+ } catch {}
909
+ }
888
910
  }
889
911
  entries.push({
890
912
  id: skill.id,
@@ -941,10 +963,50 @@ init_steering_enabled();
941
963
  init_template();
942
964
  init_vcs_repo_match();
943
965
 
966
+ // src/vcs/bitbucket.ts
967
+ function isBitbucketUrl(url) {
968
+ const trimmed = url.trim();
969
+ const scp = trimmed.match(/^[^@/\s:]+@([^:/\s]+):/);
970
+ if (scp)
971
+ return scp[1].toLowerCase() === "bitbucket.org";
972
+ try {
973
+ return new URL(trimmed).hostname.toLowerCase() === "bitbucket.org";
974
+ } catch {
975
+ return /^bitbucket\.org(\/|$)/i.test(trimmed);
976
+ }
977
+ }
978
+ function parseBitbucketRepoUrl(url) {
979
+ const trimmed = url.trim();
980
+ if (!isBitbucketUrl(trimmed))
981
+ return null;
982
+ const scp = trimmed.match(/^[^@/\s]+@bitbucket\.org:([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);
983
+ if (scp)
984
+ return { workspace: scp[1], repoSlug: scp[2] };
985
+ let parsed;
986
+ try {
987
+ parsed = new URL(trimmed);
988
+ } catch {
989
+ return null;
990
+ }
991
+ if (parsed.hostname.toLowerCase() !== "bitbucket.org")
992
+ return null;
993
+ const parts = parsed.pathname.replace(/\.git\/?$/, "").split("/").filter(Boolean);
994
+ const [workspace, repoSlug] = parts;
995
+ if (!workspace || !repoSlug)
996
+ return null;
997
+ return { workspace: decodeURIComponent(workspace), repoSlug: decodeURIComponent(repoSlug) };
998
+ }
999
+ function bitbucketFullName(url) {
1000
+ const parsed = parseBitbucketRepoUrl(url);
1001
+ return parsed ? `${parsed.workspace}/${parsed.repoSlug}` : null;
1002
+ }
1003
+
944
1004
  // src/vcs/index.ts
945
1005
  function detectVcsProvider(url) {
946
1006
  if (isAzureDevOpsUrl(url))
947
1007
  return "azure-devops";
1008
+ if (isBitbucketUrl(url))
1009
+ return "bitbucket";
948
1010
  if (url.includes("gitlab.com") || url.includes("gitlab."))
949
1011
  return "gitlab";
950
1012
  if (url.includes("github.com") || /^[\w.-]+\/[\w.-]+$/.test(url))
@@ -1205,7 +1267,7 @@ var CREDENTIAL_PROVIDER_CHECKERS = {
1205
1267
  devin: (env) => checkDevinCredentials2(env),
1206
1268
  opencode: (env, opts) => checkOpencodeCredentials2(env, opts),
1207
1269
  pi: async (env, opts) => {
1208
- const { checkPiMonoCredentials, listPiOpencodeGoModelIds } = await import("./pi-mono-adapter-mcfkn9vf.js");
1270
+ const { checkPiMonoCredentials, listPiOpencodeGoModelIds } = await import("./pi-mono-adapter-tzps8f38.js");
1209
1271
  return {
1210
1272
  ...await checkPiMonoCredentials(env, opts),
1211
1273
  opencodeGoModels: listPiOpencodeGoModelIds()
@@ -1477,7 +1539,7 @@ async function validateProviderCredentials(provider, env = process.env, presence
1477
1539
  latency_ms: Date.now() - startedAt
1478
1540
  };
1479
1541
  }
1480
- const { liveTestCursorKey } = await import("./cursor-adapter-cp4s2e2f.js");
1542
+ const { liveTestCursorKey } = await import("./cursor-adapter-yq5xgfcg.js");
1481
1543
  const result = await liveTestCursorKey(apiKey);
1482
1544
  return result.ok ? { ok: true, latency_ms: Date.now() - startedAt } : { ok: false, error: result.error, latency_ms: Date.now() - startedAt };
1483
1545
  }
@@ -2064,7 +2126,8 @@ var CONTINUATION_TASK_TYPES = new Set([
2064
2126
  "github-review",
2065
2127
  "gitlab-comment",
2066
2128
  "gitlab-ci",
2067
- "azure-devops-comment"
2129
+ "azure-devops-comment",
2130
+ "bitbucket-comment"
2068
2131
  ]);
2069
2132
  var ACTIVE_PARENT_STATUSES = new Set(["pending", "in_progress", "offered", "paused"]);
2070
2133
  async function isFirstKickoffTask(task, fetchParentTaskStatus) {
@@ -3436,6 +3499,33 @@ async function updateHarnessVariantMeta(apiUrl, apiKey, taskId, claudeSessionId,
3436
3499
  var vcsDetectedTasks = new Set;
3437
3500
  var vcsCheckTimestamps = new Map;
3438
3501
  var VCS_CHECK_INTERVAL = 60000;
3502
+ async function findBitbucketOpenPullRequest(remoteUrl, branch, opts = {}) {
3503
+ const token = opts.token ?? process.env.BITBUCKET_TOKEN;
3504
+ if (!token)
3505
+ return null;
3506
+ const repo = parseBitbucketRepoUrl(remoteUrl);
3507
+ if (!repo)
3508
+ return null;
3509
+ const query = `source.branch.name="${branch.replace(/["\\]/g, "\\$&")}" AND state="OPEN"`;
3510
+ const url = `https://api.bitbucket.org/2.0/repositories/${encodeURIComponent(repo.workspace)}` + `/${encodeURIComponent(repo.repoSlug)}/pullrequests?q=${encodeURIComponent(query)}&pagelen=1`;
3511
+ try {
3512
+ const res = await (opts.fetchImpl ?? fetch)(url, {
3513
+ headers: { Authorization: `Bearer ${token}`, Accept: "application/json" },
3514
+ signal: AbortSignal.timeout(15000)
3515
+ });
3516
+ if (!res.ok)
3517
+ return null;
3518
+ const body = await res.json();
3519
+ const pr = body.values?.[0];
3520
+ const href = pr?.links?.html?.href;
3521
+ if (typeof pr?.id !== "number" || pr.id <= 0 || typeof href !== "string" || !href) {
3522
+ return null;
3523
+ }
3524
+ return { number: pr.id, url: href };
3525
+ } catch {
3526
+ return null;
3527
+ }
3528
+ }
3439
3529
  async function detectVcsForTask(apiUrl, apiKey, taskId, workingDir) {
3440
3530
  try {
3441
3531
  const isGit = await Bun.$`git -C ${workingDir} rev-parse --is-inside-work-tree`.quiet().text();
@@ -3448,6 +3538,7 @@ async function detectVcsForTask(apiUrl, apiKey, taskId, workingDir) {
3448
3538
  let vcsProvider;
3449
3539
  let prJson;
3450
3540
  let azureRepo = null;
3541
+ let bitbucketRepo = null;
3451
3542
  if (isAzureDevOpsUrl(remoteUrl)) {
3452
3543
  const parsed = parseAzureDevOpsRepoUrl(remoteUrl);
3453
3544
  if (!parsed)
@@ -3459,6 +3550,13 @@ async function detectVcsForTask(apiUrl, apiKey, taskId, workingDir) {
3459
3550
  number: pr.pullRequestId,
3460
3551
  url: `${azureRepo}/pullrequest/${pr.pullRequestId}`
3461
3552
  })));
3553
+ } else if (isBitbucketUrl(remoteUrl)) {
3554
+ bitbucketRepo = bitbucketFullName(remoteUrl);
3555
+ if (!bitbucketRepo)
3556
+ return;
3557
+ vcsProvider = "bitbucket";
3558
+ const pr = await findBitbucketOpenPullRequest(remoteUrl, branch);
3559
+ prJson = JSON.stringify(pr ? [pr] : []);
3462
3560
  } else if (remoteUrl.includes("github.com") || remoteUrl.includes("github")) {
3463
3561
  vcsProvider = "github";
3464
3562
  prJson = (await Bun.$`gh pr list --head ${branch} --json number,url --limit 1`.quiet().text()).trim();
@@ -3477,7 +3575,7 @@ async function detectVcsForTask(apiUrl, apiKey, taskId, workingDir) {
3477
3575
  if (!vcsNumber || !vcsUrl)
3478
3576
  return;
3479
3577
  const repoMatch = remoteUrl.match(/[:/]([^/]+\/[^/.]+?)(?:\.git)?$/);
3480
- const vcsRepo = azureRepo ?? repoMatch?.[1];
3578
+ const vcsRepo = azureRepo ?? bitbucketRepo ?? repoMatch?.[1];
3481
3579
  if (!vcsRepo)
3482
3580
  return;
3483
3581
  const headers = { "Content-Type": "application/json" };
@@ -63,6 +63,17 @@ function defaultAssetKey(resource, id) {
63
63
  throw new AssetKeyError("Asset key resource ID cannot be empty");
64
64
  return normalizeAssetKey(`shared/${resource}:${id}/`);
65
65
  }
66
+ function keyPrefixRange(prefix) {
67
+ const lo = normalizeAssetKey(prefix);
68
+ return { lo, hi: `${lo.slice(0, -1)}${String.fromCharCode(lo.charCodeAt(lo.length - 1) + 1)}` };
69
+ }
70
+ function sessionGroupKey(key) {
71
+ const normalized = normalizeAssetKey(key);
72
+ const namespace = parseAssetKey(normalized);
73
+ if (namespace.relativeSegments.length === 0)
74
+ return normalized;
75
+ return normalized.replace(sessionLeafPattern, "/");
76
+ }
66
77
  function parseAssetKey(input) {
67
78
  const key = normalizeAssetKey(input);
68
79
  const segments = key.slice(0, -1).split("/");
@@ -93,7 +104,7 @@ function canWriteAssetKey(input, trustedUserId) {
93
104
  const parsed = parseAssetKey(input);
94
105
  return parsed.root === "shared" || !!trustedUserId && parsed.userId === trustedUserId;
95
106
  }
96
- var ASSET_KEY_MAX_LENGTH = 255, AssetKeyError;
107
+ var ASSET_KEY_MAX_LENGTH = 255, AssetKeyError, SESSION_LEAF_KINDS, sessionLeafPattern;
97
108
  var init_key = __esm(() => {
98
109
  AssetKeyError = class AssetKeyError extends Error {
99
110
  constructor(message) {
@@ -101,6 +112,8 @@ var init_key = __esm(() => {
101
112
  this.name = "AssetKeyError";
102
113
  }
103
114
  };
115
+ SESSION_LEAF_KINDS = ["task", "thread", "schedule", "workflow"];
116
+ sessionLeafPattern = new RegExp(`/(?:${SESSION_LEAF_KINDS.join("|")}):[^/]+/$`);
104
117
  });
105
118
 
106
119
  // src/extensions/bundle-path.ts
@@ -1812,6 +1825,7 @@ var init_types = __esm(() => {
1812
1825
  "github",
1813
1826
  "gitlab",
1814
1827
  "azure-devops",
1828
+ "bitbucket",
1815
1829
  "agentmail",
1816
1830
  "system",
1817
1831
  "schedule",
@@ -1962,7 +1976,7 @@ var init_types = __esm(() => {
1962
1976
  slackReplySent: boolean().default(false),
1963
1977
  slackProgressMessageTs: string2().optional(),
1964
1978
  slackTreeRootMessageTs: string2().optional(),
1965
- vcsProvider: _enum2(["github", "gitlab", "azure-devops"]).optional(),
1979
+ vcsProvider: _enum2(["github", "gitlab", "azure-devops", "bitbucket"]).optional(),
1966
1980
  vcsRepo: string2().optional(),
1967
1981
  vcsEventType: string2().optional(),
1968
1982
  vcsNumber: number2().int().optional(),
@@ -2031,7 +2045,7 @@ var init_types = __esm(() => {
2031
2045
  slackTriggerMessageTs: string2().optional(),
2032
2046
  slackUserId: string2().optional(),
2033
2047
  overrideSlackContext: boolean().optional(),
2034
- vcsProvider: _enum2(["github", "gitlab", "azure-devops"]).optional(),
2048
+ vcsProvider: _enum2(["github", "gitlab", "azure-devops", "bitbucket"]).optional(),
2035
2049
  vcsRepo: string2().optional(),
2036
2050
  vcsEventType: string2().optional(),
2037
2051
  vcsNumber: number2().int().optional(),
@@ -2057,6 +2071,7 @@ var init_types = __esm(() => {
2057
2071
  sourceTaskId: string2().optional(),
2058
2072
  outputSchema: record2(string2(), unknown()).optional(),
2059
2073
  inheritParentOutputSchema: boolean().optional(),
2074
+ inheritParentRequester: boolean().optional(),
2060
2075
  inheritParentRoutingAffinity: boolean().optional(),
2061
2076
  inheritParentFollowUpConfig: boolean().optional(),
2062
2077
  followUpConfig: FollowUpConfigSchema.optional(),
@@ -3648,4 +3663,4 @@ var init_types = __esm(() => {
3648
3663
  }).openapi("KvEntry");
3649
3664
  });
3650
3665
 
3651
- export { normalizeAssetKey, defaultAssetKey, parseAssetKey, isCanonicalAssetKey, canWriteAssetKey, init_key, isSafeBundlePath, init_bundle_path, $OpenAPIRegistry, $OpenApiGeneratorV31, init_dist, init_zod_openapi, AssetKeySchema, AssetEntityTypeSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, DEFAULT_MODEL_TIER_MAP, parseModelTier, splitLegacyModelAlias, parseWorkerModelTierOverrides, resolveTaskModelSelection, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, isTerminalTaskStatus, AgentTaskSourceSchema, RoutingReasonSchema, ProviderNameSchema, ModelProfileNameSchema, ModelProfileSchema, SessionAccessSchema, SessionOwnerSchema, SessionSharesSchema, SessionSharesUpdateSchema, SteerModeSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, SteerResultSchema, PROVIDER_STEER_CAPABILITIES, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, CreateTaskOptionsSchema, SERVER_GENERATED_ATTACHMENT_CAPABILITY, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, UserCommsPrefsSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentLatestModelSchema, AgentAcpStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, VersionableFieldSchema, ChannelTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostModelBreakdownSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, AutomationIntegrationIdSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesInputSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, WorkerNudgeSchema, RuntimeProviderKindSchema, DeliveryModeSchema, RuntimeControllerCreateSchema, RuntimeControllerUpdateSchema, RuntimeControllerSchema, RuntimePoolCreateSchema, RuntimePoolUpdateSchema, RuntimePoolSchema, RuntimePoolCreateAgentSchema, RuntimeInstanceSchema, RetryPolicySchema, SUPERSEDED_WORKFLOW_TASK_REASON, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSchema, PageVersionSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, WorkflowRunParentSchema, WorkflowRunSummarySchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ExtensionWorkflowFileSchema, ExtensionManifestSchema, ExtensionSchema, ExtensionVersionSchema, ExtensionRunSchema, checkExtensionInstallSource, ExtensionInstallBodySchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KvNamespaceSchema, KvKeySchema, KvEntrySchema, init_types };
3666
+ export { ASSET_KEY_MAX_LENGTH, normalizeAssetKey, defaultAssetKey, keyPrefixRange, SESSION_LEAF_KINDS, sessionGroupKey, parseAssetKey, isCanonicalAssetKey, canWriteAssetKey, init_key, isSafeBundlePath, init_bundle_path, $OpenAPIRegistry, $OpenApiGeneratorV31, init_dist, init_zod_openapi, AssetKeySchema, AssetEntityTypeSchema, AssetKeyMappingSchema, AssetSummarySchema, ModelTierSchema, MODEL_TIERS, ReasoningEffortSchema, DEFAULT_MODEL_TIER_MAP, parseModelTier, splitLegacyModelAlias, parseWorkerModelTierOverrides, resolveTaskModelSelection, AgentTaskStatusSchema, TERMINAL_TASK_STATUSES, isTerminalTaskStatus, AgentTaskSourceSchema, RoutingReasonSchema, ProviderNameSchema, ModelProfileNameSchema, ModelProfileSchema, SessionAccessSchema, SessionOwnerSchema, SessionSharesSchema, SessionSharesUpdateSchema, SteerModeSchema, SteeringSourceSchema, SteeringMessageSchema, SteerOutcomeSchema, OnUnsupportedSchema, SteerResultSchema, PROVIDER_STEER_CAPABILITIES, FollowUpConfigSchema, RoutingAffinitySchema, AgentTaskSchema, CreateTaskOptionsSchema, SERVER_GENERATED_ATTACHMENT_CAPABILITY, AttachmentInputSchema, TaskAttachmentSchema, UserSchema, UserCommsPrefsSchema, InboxItemTypeSchema, InboxItemStatusSchema, InboxItemStateSchema, FavoriteItemTypeSchema, UserFavoriteSchema, TaskTemplateKindSchema, TaskTemplateSchema, AgentStatusSchema, AgentAvatarSchema, AgentSchema, AgentLatestModelSchema, AgentAcpStatusSchema, AgentCredStatusSchema, AgentWithTasksSchema, VersionableFieldSchema, ChannelTypeSchema, ResumeReasonSchema, AgentLogSchema, SessionLogSchema, SessionCostModelBreakdownSchema, SessionCostSchema, EventCategorySchema, EventStatusSchema, EventSourceSchema, EventNameSchema, SwarmEventSchema, AutomationIntegrationIdSchema, ScheduledTaskTargetTypeSchema, ScheduledTaskSchema, SwarmConfigScopeSchema, SwarmConfigSchema, RepoGuidelinesInputSchema, RepoHooksSchema, SwarmRepoSchema, AgentMemoryScopeSchema, AgentMemorySourceSchema, AgentMemorySchema, ActiveSessionSchema, WorkerNudgeSchema, RuntimeProviderKindSchema, DeliveryModeSchema, RuntimeControllerCreateSchema, RuntimeControllerUpdateSchema, RuntimeControllerSchema, RuntimePoolCreateSchema, RuntimePoolUpdateSchema, RuntimePoolSchema, RuntimePoolCreateAgentSchema, RuntimeInstanceSchema, RetryPolicySchema, SUPERSEDED_WORKFLOW_TASK_REASON, WorkflowEdgeSchema, WorkflowDefinitionSchema, WorkflowNodePatchSchema, WorkflowPatchSchema, TriggerConfigSchema, CooldownConfigSchema, InputValueSchema, WorkflowSchema, WorkflowVersionSchema, PageContentTypeSchema, PageAuthModeSchema, PageSchema, PageVersionSchema, MetricWidgetSchema, MetricDefinitionSchema, MetricSchema, MetricVersionSchema, WorkflowRunStatusSchema, WorkflowRunSchema, WorkflowRunParentSchema, WorkflowRunSummarySchema, ScriptRunStatusSchema, TERMINAL_SCRIPT_RUN_STATUSES, ScriptRunSchema, ScriptRunListItemSchema, ScriptRunJournalEntrySchema, WorkflowRunStepSchema, PromptTemplateScopeSchema, PromptTemplateStateSchema, PromptTemplateSchema, PromptTemplateHistorySchema, ScriptScopeSchema, ScriptFsModeSchema, ScriptRecordSchema, ScriptVersionRecordSchema, ExtensionWorkflowFileSchema, ExtensionManifestSchema, ExtensionSchema, ExtensionVersionSchema, ExtensionRunSchema, checkExtensionInstallSource, ExtensionInstallBodySchema, ScriptApiAuthModeSchema, ScriptApiRecordSchema, SkillSchema, AgentSkillSchema, SkillWithInstallInfoSchema, SkillFileSchema, McpAuthMethodSchema, McpServerSchema, AgentMcpServerSchema, McpServerWithInstallInfoSchema, ContextSnapshotEventTypeSchema, ContextFormulaSchema, ContextSnapshotSchema, BudgetScopeSchema, BudgetSchema, PricingProviderSchema, PricingTokenClassSchema, PricingRowSchema, BudgetRefusalCauseSchema, BudgetRefusalNotificationSchema, BudgetRefusedTriggerSchema, KvValueTypeSchema, KvNamespaceSchema, KvKeySchema, KvEntrySchema, init_types };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lazyApi
3
- } from "./cli-0bqteszy.js";
3
+ } from "./cli-2nf3b08t.js";
4
4
 
5
5
  // node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js
6
6
  var __rewriteRelativeImportExtension = function(path, preserveJsx) {
@@ -9,12 +9,12 @@ import {
9
9
  acquireOAuthRefreshLock,
10
10
  releaseOAuthRefreshLock,
11
11
  init_oauth
12
- } from "./cli-p20r8w42.js";
12
+ } from "./cli-fcc5qe3f.js";
13
13
  import {
14
14
  scrubSecrets,
15
15
  registerVolatileSecret,
16
16
  init_secret_scrubber
17
- } from "./cli-xf234ws8.js";
17
+ } from "./cli-n4c8e3s5.js";
18
18
 
19
19
  // node_modules/oauth4webapi/build/index.js
20
20
  var USER_AGENT;
@@ -10,7 +10,7 @@ import {
10
10
  init_steering,
11
11
  createLogEntry2,
12
12
  init_db3
13
- } from "./cli-p20r8w42.js";
13
+ } from "./cli-fcc5qe3f.js";
14
14
  import {
15
15
  ackSlackMessage,
16
16
  buildBufferFlushBlocks,
@@ -20,7 +20,7 @@ import {
20
20
  ensureSlackThreadTree2,
21
21
  registerTreeMessage,
22
22
  getSlackApp2
23
- } from "./cli-qkhc5aqy.js";
23
+ } from "./cli-fy1jyyym.js";
24
24
  import {
25
25
  createAdditiveBuffer,
26
26
  TaskCreationBlockedError,
@@ -30,15 +30,15 @@ import {
30
30
  createSlackTaskWithFiles,
31
31
  notifySlackFileFailures,
32
32
  extractSlackMessageText
33
- } from "./cli-v3yr2gbg.js";
33
+ } from "./cli-5kzk3472.js";
34
34
  import {
35
35
  resolveSlackUserId,
36
36
  rewriteSlackMentions
37
- } from "./cli-2v045xyf.js";
37
+ } from "./cli-7bwtc6yx.js";
38
38
  import {
39
39
  findUserByExternalId,
40
40
  init_users
41
- } from "./cli-9fhkkpj5.js";
41
+ } from "./cli-xt768r5m.js";
42
42
  import {
43
43
  isSteeringEnabled2,
44
44
  init_steering_enabled
@@ -46,7 +46,7 @@ import {
46
46
  import {
47
47
  scrubSecrets,
48
48
  init_secret_scrubber
49
- } from "./cli-xf234ws8.js";
49
+ } from "./cli-n4c8e3s5.js";
50
50
  import {
51
51
  __using,
52
52
  __callDispose
@@ -230,14 +230,14 @@ async function slackFlush(items, key, immediate) {
230
230
  console.log(`[Slack] Flushing buffer: ${key} (${items.length} messages, immediate=${immediate})`);
231
231
  const app = getSlackApp2();
232
232
  const files = items.flatMap((item) => item.files ?? []);
233
- const inbound = __using(__stack, app ? await fetchSlackFiles(app.client, files) : {
233
+ const inbound = __using(__stack, app ? await fetchSlackFiles(app.client, files, { transcribe: true }) : {
234
234
  files,
235
235
  fetched: [],
236
236
  failed: bufferedFileFailures(files),
237
237
  async[Symbol.asyncDispose]() {}
238
238
  }, 1);
239
239
  const resolvedFiles = new Map(inbound.files.map((file) => [file.id, file]));
240
- const combinedText = await rewriteSlackMentions(items.map((item) => buildEffectiveText(item.text, item.files?.map((file) => resolvedFiles.get(file.id) ?? file), inbound.failed)).join(`
240
+ const combinedText = await rewriteSlackMentions(items.map((item) => buildEffectiveText(item.text, item.files?.map((file) => resolvedFiles.get(file.id) ?? file), inbound.failed, inbound.notes)).join(`
241
241
  ---
242
242
  `), botUserId);
243
243
  const description = `[Thread follow-up — ${items.length} message(s) buffered]
@@ -23,7 +23,7 @@ import {
23
23
  autoIndexMemoryFile,
24
24
  fetchConcurrentContext,
25
25
  summarizeTranscript
26
- } from "./cli-vfha21c9.js";
26
+ } from "./cli-e5bxnjps.js";
27
27
  import {
28
28
  applyReasoningEffort
29
29
  } from "./cli-bn0rewsy.js";
@@ -51,7 +51,7 @@ import {
51
51
  scrubSecrets,
52
52
  registerVolatileSecret,
53
53
  init_secret_scrubber
54
- } from "./cli-xf234ws8.js";
54
+ } from "./cli-n4c8e3s5.js";
55
55
  import {
56
56
  openAICompatibleProviders,
57
57
  providerKeyVars,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runStopHookSessionSummarySubprocess
3
- } from "./cli-55qmbp6z.js";
3
+ } from "./cli-x21dqn18.js";
4
4
  import {
5
5
  CONTEXT_FORMULA,
6
6
  getContextWindowSize,
@@ -47,7 +47,7 @@ import {
47
47
  import {
48
48
  withFileLock,
49
49
  init_file_lock
50
- } from "./cli-74c1wpm0.js";
50
+ } from "./cli-gpv60278.js";
51
51
  import {
52
52
  CLAUDE_CREDENTIALS_HINT,
53
53
  validateClaudeCredentials,
@@ -70,7 +70,7 @@ import {
70
70
  import {
71
71
  scrubSecrets,
72
72
  init_secret_scrubber
73
- } from "./cli-xf234ws8.js";
73
+ } from "./cli-n4c8e3s5.js";
74
74
  import {
75
75
  __toESM
76
76
  } from "./cli-242037k3.js";
@@ -1236,7 +1236,7 @@ class ClaudeAdapter2 {
1236
1236
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
1237
1237
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
1238
1238
  }
1239
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-2j3j4kwn.js") : undefined;
1239
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-8thjsk5e.js") : undefined;
1240
1240
  claudeSdk?.validateClaudeSdkAdditionalArgs([
1241
1241
  ...claudeBinaryArgv.slice(1),
1242
1242
  ...config.additionalArgs ?? []
@@ -13,11 +13,11 @@ import {
13
13
  claudeMdLineageOf,
14
14
  planClaudeMdSync,
15
15
  init_profile_sync
16
- } from "./cli-74c1wpm0.js";
16
+ } from "./cli-gpv60278.js";
17
17
  import {
18
18
  scrubSecrets,
19
19
  init_secret_scrubber
20
- } from "./cli-xf234ws8.js";
20
+ } from "./cli-n4c8e3s5.js";
21
21
 
22
22
  // src/commands/claude-md-session.ts
23
23
  init_file_lock();