@desplega.ai/agent-swarm 1.173.0 → 2.0.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 (432) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ccm9xrep.js → acp-adapter-sj2g0m84.js} +17 -16
  3. package/dist/{actions-sgeyv08k.js → actions-fegk44gr.js} +39 -34
  4. package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-ad8ft89x.js} +8 -7
  5. package/dist/{app-km9qnv2f.js → app-kfvgbvzy.js} +18 -14
  6. package/dist/{assistant-5r8tcvvd.js → assistant-z7zdy9ja.js} +40 -35
  7. package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-5c2z0mbe.js} +10 -9
  8. package/dist/{boot-reembed-16rv9843.js → boot-reembed-j8xa181e.js} +10 -9
  9. package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-hnkn3rgt.js} +11 -10
  10. package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-kwjq4d2z.js} +14 -13
  11. package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-9vmvpvgd.js} +19 -18
  12. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
  13. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
  14. package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-9jye6cxr.js} +11881 -11472
  15. package/dist/{cli-94b48jhk.js → cli-03gedhng.js} +16 -14
  16. package/dist/{cli-1w0vj3gw.js → cli-1e4b6bzh.js} +7 -7
  17. package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
  18. package/dist/cli-2m1ktfzz.js +17795 -0
  19. package/dist/{cli-x119kdba.js → cli-3dj8k4vy.js} +1 -1
  20. package/dist/{cli-srqq3gc5.js → cli-3fbmmawm.js} +5 -5
  21. package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
  22. package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
  23. package/dist/{cli-42qhyvwx.js → cli-5t4f29ez.js} +3 -3
  24. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  25. package/dist/cli-6cvfxs8r.js +47 -0
  26. package/dist/{cli-0kxf81jj.js → cli-6jyj59nb.js} +2 -2
  27. package/dist/{cli-w1apjecb.js → cli-6razj6t4.js} +2 -2
  28. package/dist/{cli-anzdk0z4.js → cli-74ahz61x.js} +2 -2
  29. package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
  30. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  31. package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
  32. package/dist/cli-9traj3dn.js +638 -0
  33. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  34. package/dist/{cli-na2pxe4f.js → cli-apx87jne.js} +2 -2
  35. package/dist/{cli-rfz2ve55.js → cli-bzszjf2p.js} +2855 -862
  36. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  37. package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
  38. package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
  39. package/dist/{cli-rfs4vddv.js → cli-d5f9ed5c.js} +5 -5
  40. package/dist/cli-e3g5mbkz.js +776 -0
  41. package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
  42. package/dist/{cli-7a93cv8c.js → cli-ee9gtz70.js} +98 -23
  43. package/dist/{cli-3nxdmjrc.js → cli-eejsgvm4.js} +4 -4
  44. package/dist/{cli-fmhj1ehj.js → cli-ef1hg1wv.js} +470 -51
  45. package/dist/cli-f527ce74.js +781 -0
  46. package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
  47. package/dist/cli-hjwmhcg1.js +10622 -0
  48. package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
  49. package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
  50. package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
  51. package/dist/{cli-s8z6x4b4.js → cli-j0pfptdp.js} +218 -102
  52. package/dist/cli-jta2eyzc.js +619 -0
  53. package/dist/{cli-5er5gjbm.js → cli-k382tshb.js} +10 -11
  54. package/dist/{cli-v3zhnxsb.js → cli-k3dp5tpf.js} +2 -2
  55. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  56. package/dist/cli-kceah1eh.js +92 -0
  57. package/dist/{cli-ne7smj1b.js → cli-ke896fcf.js} +10 -10
  58. package/dist/{cli-xc7p7s3g.js → cli-kt6zqg0e.js} +6 -6
  59. package/dist/{cli-wrh08zjd.js → cli-m50t4309.js} +5 -18
  60. package/dist/cli-n2wq4j7m.js +6985 -0
  61. package/dist/{cli-bv2etw2y.js → cli-n3hzg89b.js} +46 -15
  62. package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
  63. package/dist/{cli-qm1448f9.js → cli-ne236afy.js} +8 -8
  64. package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
  65. package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
  66. package/dist/{cli-0a7mm3zp.js → cli-q0ke1yww.js} +25 -21
  67. package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
  68. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  69. package/dist/{cli-phcqp1b9.js → cli-r2pnvj8g.js} +2 -2
  70. package/dist/{cli-jpc4r224.js → cli-r62a35ea.js} +19 -3
  71. package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
  72. package/dist/cli-rhs9pz33.js +294 -0
  73. package/dist/{cli-r4fqfpwf.js → cli-s2sp957d.js} +50 -27
  74. package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
  75. package/dist/{cli-6thk4jz3.js → cli-se8w6wny.js} +6 -6
  76. package/dist/cli-skxvvpap.js +10140 -0
  77. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  78. package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
  79. package/dist/{cli-nwrdx840.js → cli-tr4sxp68.js} +3 -3
  80. package/dist/{cli-r0byd61h.js → cli-tsde1hdr.js} +15 -15
  81. package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
  82. package/dist/{cli-6r2f7edk.js → cli-v1yb0rqb.js} +6 -6
  83. package/dist/{cli-saqyage0.js → cli-vatyhshy.js} +179 -27
  84. package/dist/{cli-5wpw4rab.js → cli-vdach5a9.js} +5 -5
  85. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  86. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  87. package/dist/{cli-c3rk1v0x.js → cli-wayw93nt.js} +3 -3
  88. package/dist/cli-wmgrkscj.js +23254 -0
  89. package/dist/{cli-9xf7fdtp.js → cli-z5jjpaxw.js} +29 -6
  90. package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
  91. package/dist/cli.js +29 -45
  92. package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-y81sssk0.js} +15 -14
  93. package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
  94. package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-8vx4j6a9.js} +15 -14
  95. package/dist/{commands-z8fq9qna.js → commands-kcpvpcrr.js} +11 -10
  96. package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
  97. package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-kwpvj3rf.js} +42 -37
  98. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
  99. package/dist/{db-yyhqqrbf.js → db-k8ankj20.js} +12 -11
  100. package/dist/{db-qfpq4bt7.js → db-ww5d7jq3.js} +28 -9
  101. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
  102. package/dist/{dispatcher-x0x7qfcq.js → dispatcher-e8gq5m68.js} +38 -33
  103. package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
  104. package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-3epjm3af.js} +7 -6
  105. package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
  106. package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
  107. package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
  108. package/dist/{external-channel-h1fjecwe.js → external-channel-h3359cwn.js} +11 -10
  109. package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
  110. package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
  111. package/dist/{grok-adapter-e7mr287e.js → grok-adapter-0d4x7gkx.js} +18 -17
  112. package/dist/{handlers-znb9n7d4.js → handlers-an1gzv21.js} +41 -36
  113. package/dist/{heartbeat-bm4qkn8d.js → heartbeat-6dakeb61.js} +43 -38
  114. package/dist/{hook-254r4mza.js → hook-6v6cv6d5.js} +11 -23
  115. package/dist/{hook-xaa3q80s.js → hook-sa5xye4y.js} +12 -11
  116. package/dist/{http-3dgrgp8y.js → http-r7f3eky0.js} +1499 -251
  117. package/dist/index-52j1aja4.js +3465 -0
  118. package/dist/{index-fx3jqq1e.js → index-7ep4gzdk.js} +38 -33
  119. package/dist/index-9gw58n4k.js +193 -0
  120. package/dist/index-9j87mcm8.js +56305 -0
  121. package/dist/index-bsmcresk.js +79424 -0
  122. package/dist/index-mh85qhec.js +475 -0
  123. package/dist/{index-g2byveez.js → index-rmpw9a8q.js} +38 -33
  124. package/dist/{index-2ybk7khy.js → index-s2wxgzr0.js} +468 -683
  125. package/dist/{index-bdsqa799.js → index-v1v6n7hg.js} +43 -38
  126. package/dist/index-we27kd31.js +12810 -0
  127. package/dist/{index-jd7sejm2.js → index-zk96aq1k.js} +10 -9
  128. package/dist/{keepalive-6ywhpja1.js → keepalive-be9vwy5h.js} +12 -11
  129. package/dist/{lead-cw45n21s.js → lead-0861cwrf.js} +61 -56
  130. package/dist/{maintenance-ss1a1ge9.js → maintenance-mzzgc8bn.js} +10 -9
  131. package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
  132. package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-cpdnfwdj.js} +11 -10
  133. package/dist/{onboard-8hzdhc1k.js → onboard-fh8qs4r3.js} +11 -3
  134. package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-nm42wwj8.js} +18 -13
  135. package/dist/{otel-impl-e6mnvc4v.js → otel-impl-x6c1c9g4.js} +242 -868
  136. package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-9n2ya240.js} +244 -106
  137. package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-qb0rv0ap.js} +12 -11
  138. package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-1gzdwbh1.js} +11 -10
  139. package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-3mraey52.js} +12 -11
  140. package/dist/{render-v2-907cy6sa.js → render-v2-agpa45zz.js} +18 -14
  141. package/dist/{resume-42stcaz0.js → resume-x0ydy9s9.js} +25 -21
  142. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  143. package/dist/{setup-adbc1c10.js → setup-as9ga0d6.js} +2 -2
  144. package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
  145. package/dist/{work-objects-wpj8ck95.js → work-objects-y5g1y7ev.js} +41 -36
  146. package/dist/{worker-bzdra9rf.js → worker-860c3e38.js} +61 -56
  147. package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
  148. package/openapi.json +523 -344
  149. package/package.json +10 -11
  150. package/src/be/config-refs.ts +60 -0
  151. package/src/be/db/page-versions.ts +15 -0
  152. package/src/be/db/runtime.ts +35 -8
  153. package/src/be/db/skill-name-resolution.ts +36 -0
  154. package/src/be/db/tasks/read.ts +230 -0
  155. package/src/be/db/tasks/write.ts +7 -0
  156. package/src/be/db.ts +52 -7
  157. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  158. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  159. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  160. package/src/be/model-catalog-store.ts +5 -1
  161. package/src/be/model-tier-resolution.ts +12 -1
  162. package/src/be/model-validation.ts +5 -2
  163. package/src/be/models-catalog.ts +26 -1
  164. package/src/be/modelsdev-cache.json +198 -63
  165. package/src/be/modelsdev-cache.ts +9 -1
  166. package/src/be/script-credential-broker.ts +39 -2
  167. package/src/be/scripts/run-saved.ts +1 -0
  168. package/src/be/scripts/typecheck.ts +10 -8
  169. package/src/be/seed/runner.ts +13 -1
  170. package/src/be/seed/state-db.ts +5 -0
  171. package/src/be/seed/types.ts +6 -0
  172. package/src/be/seed-pricing.ts +19 -2
  173. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  174. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  175. package/src/be/seed-skills/bundled-files.generated.json +0 -18
  176. package/src/be/seed-skills/index.ts +104 -3
  177. package/src/be/swarm-config-guard.ts +52 -0
  178. package/src/cli.tsx +0 -16
  179. package/src/commands/onboard/non-interactive.ts +4 -2
  180. package/src/commands/provider-credentials.ts +52 -6
  181. package/src/commands/runner.ts +190 -54
  182. package/src/e2b/env.ts +5 -0
  183. package/src/extensions/contract-types.generated.ts +1 -1
  184. package/src/extensions/contract.ts +45 -0
  185. package/src/extensions/dispatcher.ts +7 -0
  186. package/src/extensions/post-bridge.ts +40 -0
  187. package/src/github/handlers.ts +11 -4
  188. package/src/heartbeat/templates.ts +8 -5
  189. package/src/hooks/hook.ts +0 -26
  190. package/src/http/all-routes.ts +0 -1
  191. package/src/http/config.ts +36 -17
  192. package/src/http/core.ts +4 -0
  193. package/src/http/index.ts +14 -2
  194. package/src/http/integrations.ts +88 -1
  195. package/src/http/mcp.ts +15 -5
  196. package/src/http/page-proxy.ts +2 -4
  197. package/src/http/pages-public.ts +3 -3
  198. package/src/http/pages.ts +3 -13
  199. package/src/http/poll.ts +28 -68
  200. package/src/http/requested-by.ts +54 -0
  201. package/src/http/scripts.ts +1 -0
  202. package/src/http/stats.ts +1 -30
  203. package/src/http/tasks.ts +61 -5
  204. package/src/http/utils.ts +14 -0
  205. package/src/http/webhooks.ts +159 -1
  206. package/src/http/x.ts +1 -0
  207. package/src/integrations/chat-sdk/adapters.ts +129 -0
  208. package/src/integrations/chat-sdk/attachments.ts +232 -0
  209. package/src/integrations/chat-sdk/background.ts +36 -0
  210. package/src/integrations/chat-sdk/commands.ts +194 -0
  211. package/src/integrations/chat-sdk/config.ts +198 -0
  212. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  213. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  214. package/src/integrations/chat-sdk/handlers.ts +28 -0
  215. package/src/integrations/chat-sdk/inbound.ts +426 -0
  216. package/src/integrations/chat-sdk/limits.ts +48 -0
  217. package/src/integrations/chat-sdk/logger.ts +81 -0
  218. package/src/integrations/chat-sdk/outbound.ts +123 -0
  219. package/src/integrations/chat-sdk/relay.ts +172 -0
  220. package/src/integrations/chat-sdk/router.ts +169 -0
  221. package/src/integrations/chat-sdk/runtime.ts +351 -0
  222. package/src/integrations/chat-sdk/schema.ts +245 -0
  223. package/src/integrations/chat-sdk/state.ts +243 -0
  224. package/src/integrations/chat-sdk/status.ts +244 -0
  225. package/src/integrations/chat-sdk/steering.ts +58 -0
  226. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  227. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  228. package/src/integrations/chat-sdk/templates.ts +16 -0
  229. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  230. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  231. package/src/integrations/chat-sdk/typing.ts +65 -0
  232. package/src/pages/version.ts +4 -5
  233. package/src/prompts/base-prompt.ts +111 -45
  234. package/src/providers/acp-target-catalog.ts +6 -0
  235. package/src/providers/acp-targets.ts +55 -2
  236. package/src/providers/amp-adapter.ts +1 -1
  237. package/src/providers/claude-adapter.ts +1 -1
  238. package/src/providers/claude-flag-settings.ts +17 -5
  239. package/src/providers/claude-managed-adapter.ts +1 -1
  240. package/src/providers/claude-session-events.ts +6 -1
  241. package/src/providers/dsh-adapter.ts +1 -1
  242. package/src/providers/opencode-adapter.ts +243 -26
  243. package/src/providers/opencode-swarm-plugin.ts +31 -0
  244. package/src/providers/pi-mono-adapter.ts +398 -153
  245. package/src/providers/pricing-sources.md +33 -2
  246. package/src/providers/reasoning-effort.ts +27 -0
  247. package/src/providers/types.ts +6 -2
  248. package/src/rbac/legacy-policy.ts +8 -2
  249. package/src/rbac/permissions.ts +21 -0
  250. package/src/scheduler/scheduler.ts +4 -2
  251. package/src/scripts-runtime/loader.ts +19 -7
  252. package/src/scripts-runtime/sdk-allowlist.ts +8 -6
  253. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  254. package/src/scripts-runtime/types/stdlib.d.ts +27 -15
  255. package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
  256. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
  257. package/src/server.ts +52 -18
  258. package/src/slack/event-dedup.ts +1 -1
  259. package/src/tasks/additive-buffer.ts +4 -2
  260. package/src/tasks/context-key.ts +60 -1
  261. package/src/tasks/model-pin.ts +67 -0
  262. package/src/tasks/worker-follow-up.ts +4 -31
  263. package/src/tests/acp-adapter.test.ts +42 -0
  264. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  265. package/src/tests/base-prompt.test.ts +58 -54
  266. package/src/tests/chat-sdk-commands.test.ts +191 -0
  267. package/src/tests/chat-sdk-config.test.ts +334 -0
  268. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  269. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  270. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  271. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  272. package/src/tests/chat-sdk-harness.ts +146 -0
  273. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  274. package/src/tests/chat-sdk-relay.test.ts +470 -0
  275. package/src/tests/chat-sdk-reload.test.ts +128 -0
  276. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  277. package/src/tests/chat-sdk-slack.test.ts +268 -0
  278. package/src/tests/chat-sdk-state.test.ts +163 -0
  279. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  280. package/src/tests/chat-sdk-teams.test.ts +277 -0
  281. package/src/tests/chat-sdk-tools.test.ts +520 -0
  282. package/src/tests/chat-sdk-typing.test.ts +120 -0
  283. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  284. package/src/tests/claude-adapter-binary.test.ts +9 -4
  285. package/src/tests/claude-flag-settings.test.ts +11 -3
  286. package/src/tests/claude-managed-adapter.test.ts +1 -1
  287. package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
  288. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  289. package/src/tests/claude-worker-parity.test.ts +2 -7
  290. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  291. package/src/tests/config-refs.test.ts +66 -0
  292. package/src/tests/context-key.test.ts +19 -0
  293. package/src/tests/cors-allowlist.test.ts +25 -0
  294. package/src/tests/create-page-tool.test.ts +18 -0
  295. package/src/tests/credential-check.test.ts +139 -0
  296. package/src/tests/credentials.test.ts +21 -0
  297. package/src/tests/db-runtime.test.ts +61 -0
  298. package/src/tests/db-task-read-contract.test.ts +20 -0
  299. package/src/tests/db-task-write-contract.test.ts +10 -0
  300. package/src/tests/docs-index-footprint.test.js +3 -3
  301. package/src/tests/dsh-adapter.test.ts +1 -1
  302. package/src/tests/enabled-capabilities.test.ts +20 -0
  303. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  304. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  305. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  306. package/src/tests/explicit-model-validation.test.ts +105 -1
  307. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  308. package/src/tests/extensions-post-bridge.test.ts +51 -0
  309. package/src/tests/fetch-resolved-env.test.ts +128 -0
  310. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  311. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  312. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  313. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  314. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  315. package/src/tests/github-handlers.test.ts +35 -0
  316. package/src/tests/harness-provider-resolution.test.ts +12 -0
  317. package/src/tests/heartbeat-checklist.test.ts +3 -2
  318. package/src/tests/hook-runtime-close.test.ts +0 -2
  319. package/src/tests/http-api-integration.test.ts +0 -25
  320. package/src/tests/migration-046-budgets.test.ts +17 -16
  321. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  322. package/src/tests/model-tier-resolution.test.ts +93 -0
  323. package/src/tests/models-catalog.test.ts +42 -1
  324. package/src/tests/openai-compatible-providers.test.ts +134 -0
  325. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  326. package/src/tests/opencode-adapter.test.ts +216 -2
  327. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  328. package/src/tests/opencode-shell-env.test.ts +145 -0
  329. package/src/tests/openrouter-base-url.test.ts +101 -151
  330. package/src/tests/page-proxy.test.ts +1 -1
  331. package/src/tests/pages-browser-sdk.test.ts +76 -0
  332. package/src/tests/pages-feedback.test.ts +1 -1
  333. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  334. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  335. package/src/tests/pi-mono-adapter.test.ts +385 -5
  336. package/src/tests/pi-shell-env.test.ts +170 -0
  337. package/src/tests/prompt-template-remaining.test.ts +35 -0
  338. package/src/tests/rbac-engine.test.ts +11 -3
  339. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  340. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  341. package/src/tests/script-connections.test.ts +2 -0
  342. package/src/tests/scripts-http.test.ts +201 -1
  343. package/src/tests/scripts-only-gating.test.ts +2 -3
  344. package/src/tests/scripts-runtime.test.ts +58 -40
  345. package/src/tests/secret-scrubber.test.ts +86 -0
  346. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  347. package/src/tests/seed-skills-retire.test.ts +182 -0
  348. package/src/tests/send-task-requester-gate.test.ts +58 -0
  349. package/src/tests/session-cost-recompute-unit.test.ts +46 -0
  350. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  351. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  352. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  353. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  354. package/src/tests/swarm-diff.test.ts +1 -1
  355. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  356. package/src/tests/task-session-prompts.test.ts +132 -0
  357. package/src/tests/task-tool-manifest.test.ts +14 -0
  358. package/src/tests/task-tools-ctx.test.ts +2 -0
  359. package/src/tests/tool-annotations.test.ts +6 -6
  360. package/src/tests/ui-logs-parser.test.ts +43 -0
  361. package/src/tests/used-by-route.test.ts +6 -0
  362. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  363. package/src/tests/workflow-swarm-script.test.ts +38 -0
  364. package/src/tests/workflow-wait-filter.test.ts +5 -3
  365. package/src/tools/chat-access.ts +41 -0
  366. package/src/tools/chat-open-dm.ts +59 -0
  367. package/src/tools/chat-post.ts +74 -0
  368. package/src/tools/chat-read-thread.ts +100 -0
  369. package/src/tools/chat-reply.ts +75 -0
  370. package/src/tools/create-page.ts +3 -13
  371. package/src/tools/model-catalog/index.ts +2 -1
  372. package/src/tools/register-chat-channel.ts +139 -0
  373. package/src/tools/send-task.ts +24 -0
  374. package/src/tools/skills/skill-get.ts +17 -9
  375. package/src/tools/swarm-config/get-config.ts +2 -1
  376. package/src/tools/swarm-config/list-config.ts +2 -1
  377. package/src/tools/swarm-config/set-config.ts +16 -3
  378. package/src/tools/tool-config.ts +8 -6
  379. package/src/types.ts +12 -2
  380. package/src/utils/config-env-export.ts +74 -0
  381. package/src/utils/credentials.test.ts +92 -0
  382. package/src/utils/credentials.ts +52 -4
  383. package/src/utils/harness-provider.ts +15 -6
  384. package/src/utils/runtime-model-catalog.ts +11 -1
  385. package/src/utils/secret-scrubber.ts +71 -2
  386. package/src/utils/task-tool-manifest.ts +19 -2
  387. package/src/workflows/executors/swarm-script.ts +1 -0
  388. package/templates/skills/agent-browser/SKILL.md +1 -1
  389. package/templates/skills/agent-browser/content.md +1 -1
  390. package/templates/skills/apps/SKILL.md +8 -1
  391. package/templates/skills/apps/content.md +8 -1
  392. package/templates/skills/chat-sdk/config.json +14 -0
  393. package/templates/skills/chat-sdk/content.md +84 -0
  394. package/templates/skills/composio-gmail/content.md +7 -0
  395. package/templates/skills/composio-google-docs/content.md +1 -1
  396. package/templates/skills/email-domain-health/config.json +14 -0
  397. package/templates/skills/email-domain-health/content.md +131 -0
  398. package/templates/skills/kv-storage/content.md +2 -2
  399. package/templates/skills/pages/content.md +8 -10
  400. package/templates/skills/swarm-extensions/content.md +2 -0
  401. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  402. package/templates/skills/swarm-scripts/config.json +1 -1
  403. package/templates/skills/swarm-scripts/content.md +4 -2
  404. package/templates/skills/workflow-iterate/content.md +38 -0
  405. package/dist/artifact-eczsknc3.js +0 -3843
  406. package/dist/cli-bd957dgb.js +0 -153
  407. package/dist/cli-q51yprfq.js +0 -1104
  408. package/dist/cli-t1ze64h3.js +0 -811
  409. package/dist/cli-tcc4wd5d.js +0 -56471
  410. package/dist/index-9ch1n761.js +0 -1102
  411. package/src/artifact-sdk/index.ts +0 -2
  412. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  413. package/src/artifact-sdk/port.ts +0 -12
  414. package/src/artifact-sdk/server.ts +0 -183
  415. package/src/artifact-sdk/tunnel.ts +0 -19
  416. package/src/commands/artifact.ts +0 -249
  417. package/src/http/ecosystem.ts +0 -77
  418. package/src/tests/artifact-commands.test.ts +0 -92
  419. package/src/tests/artifact-sdk.test.ts +0 -793
  420. package/src/tests/register-service-security.test.ts +0 -194
  421. package/src/tools/list-services.ts +0 -107
  422. package/src/tools/register-service.ts +0 -177
  423. package/src/tools/unregister-service.ts +0 -73
  424. package/src/tools/update-service-status.ts +0 -96
  425. package/templates/skills/artifacts/config.json +0 -14
  426. package/templates/skills/artifacts/content.md +0 -344
  427. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  428. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  429. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  430. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  431. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
  432. /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
@@ -0,0 +1,638 @@
1
+ import {
2
+ cardChildToFallbackText2,
3
+ convertEmojiPlaceholders,
4
+ isCardElement2,
5
+ tableElementToAscii
6
+ } from "./cli-2m1ktfzz.js";
7
+
8
+ // node_modules/@chat-adapter/shared/dist/index.js
9
+ import crypto from "crypto";
10
+ import { lookup as resolve } from "dns/promises";
11
+ import { request as secure } from "https";
12
+ import { BlockList, isIP } from "net";
13
+ import { pipeline } from "stream";
14
+ import { createBrotliDecompress, createGunzip, createInflate } from "zlib";
15
+ function extractCard(message) {
16
+ if (isCardElement2(message)) {
17
+ return message;
18
+ }
19
+ if (typeof message === "object" && message !== null && "card" in message) {
20
+ return message.card;
21
+ }
22
+ return null;
23
+ }
24
+ function extractFiles(message) {
25
+ if (typeof message === "object" && message !== null && "files" in message) {
26
+ return message.files ?? [];
27
+ }
28
+ return [];
29
+ }
30
+ function extractPostableAttachments(message) {
31
+ if (typeof message === "object" && message !== null && "attachments" in message) {
32
+ return message.attachments ?? [];
33
+ }
34
+ return [];
35
+ }
36
+ var AdapterError = class extends Error {
37
+ adapter;
38
+ code;
39
+ constructor(message, adapter, code) {
40
+ super(message);
41
+ this.name = "AdapterError";
42
+ this.adapter = adapter;
43
+ this.code = code;
44
+ }
45
+ };
46
+ var AdapterRateLimitError = class extends AdapterError {
47
+ retryAfter;
48
+ constructor(adapter, retryAfter) {
49
+ super(`Rate limited by ${adapter}${retryAfter ? `, retry after ${retryAfter}s` : ""}`, adapter, "RATE_LIMITED");
50
+ this.name = "AdapterRateLimitError";
51
+ this.retryAfter = retryAfter;
52
+ }
53
+ };
54
+ var AuthenticationError = class extends AdapterError {
55
+ constructor(adapter, message) {
56
+ super(message || `Authentication failed for ${adapter}`, adapter, "AUTH_FAILED");
57
+ this.name = "AuthenticationError";
58
+ }
59
+ };
60
+ var ResourceNotFoundError = class extends AdapterError {
61
+ resourceType;
62
+ resourceId;
63
+ constructor(adapter, resourceType, resourceId) {
64
+ const idPart = resourceId ? ` '${resourceId}'` : "";
65
+ super(`${resourceType}${idPart} not found in ${adapter}`, adapter, "NOT_FOUND");
66
+ this.name = "ResourceNotFoundError";
67
+ this.resourceType = resourceType;
68
+ this.resourceId = resourceId;
69
+ }
70
+ };
71
+ var PermissionError = class extends AdapterError {
72
+ action;
73
+ requiredScope;
74
+ constructor(adapter, action, requiredScope) {
75
+ const scopePart = requiredScope ? ` (requires: ${requiredScope})` : "";
76
+ super(`Permission denied: cannot ${action} in ${adapter}${scopePart}`, adapter, "PERMISSION_DENIED");
77
+ this.name = "PermissionError";
78
+ this.action = action;
79
+ this.requiredScope = requiredScope;
80
+ }
81
+ };
82
+ var ValidationError = class extends AdapterError {
83
+ constructor(adapter, message) {
84
+ super(message, adapter, "VALIDATION_ERROR");
85
+ this.name = "ValidationError";
86
+ }
87
+ };
88
+ var NetworkError = class extends AdapterError {
89
+ originalError;
90
+ constructor(adapter, message, originalError) {
91
+ super(message || `Network error communicating with ${adapter}`, adapter, "NETWORK_ERROR");
92
+ this.name = "NetworkError";
93
+ this.originalError = originalError;
94
+ }
95
+ };
96
+ async function toBuffer(data, options) {
97
+ const { platform, throwOnUnsupported = true } = options;
98
+ if (Buffer.isBuffer(data)) {
99
+ return data;
100
+ }
101
+ if (data instanceof ArrayBuffer) {
102
+ return Buffer.from(data);
103
+ }
104
+ if (data instanceof Blob) {
105
+ const arrayBuffer = await data.arrayBuffer();
106
+ return Buffer.from(arrayBuffer);
107
+ }
108
+ if (throwOnUnsupported) {
109
+ throw new ValidationError(platform, "Unsupported file data type");
110
+ }
111
+ return null;
112
+ }
113
+ function bufferToDataUri(buffer, mimeType = "application/octet-stream") {
114
+ const base64 = buffer.toString("base64");
115
+ return `data:${mimeType};base64,${base64}`;
116
+ }
117
+ var BUTTON_STYLE_MAPPINGS = {
118
+ slack: { primary: "primary", danger: "danger" },
119
+ gchat: { primary: "primary", danger: "danger" },
120
+ teams: { primary: "positive", danger: "destructive" },
121
+ discord: { primary: "primary", danger: "danger" }
122
+ };
123
+ function createEmojiConverter(platform) {
124
+ return (text) => convertEmojiPlaceholders(text, platform);
125
+ }
126
+ function mapButtonStyle(style, platform) {
127
+ if (!style) {
128
+ return;
129
+ }
130
+ return BUTTON_STYLE_MAPPINGS[platform][style];
131
+ }
132
+ function cardToFallbackText(card, options = {}) {
133
+ const { boldFormat = "*", lineBreak = `
134
+ `, platform } = options;
135
+ const convertText = platform ? createEmojiConverter(platform) : (t) => t;
136
+ const parts = [];
137
+ if (card.title) {
138
+ parts.push(`${boldFormat}${convertText(card.title)}${boldFormat}`);
139
+ }
140
+ if (card.subtitle) {
141
+ parts.push(convertText(card.subtitle));
142
+ }
143
+ for (const child of card.children) {
144
+ const text = childToFallbackText(child, convertText);
145
+ if (text) {
146
+ parts.push(text);
147
+ }
148
+ }
149
+ return parts.join(lineBreak);
150
+ }
151
+ function childToFallbackText(child, convertText) {
152
+ switch (child.type) {
153
+ case "text":
154
+ return convertText(child.content);
155
+ case "link":
156
+ return `${convertText(child.label)} (${child.url})`;
157
+ case "fields":
158
+ return child.children.map((f) => `${convertText(f.label)}: ${convertText(f.value)}`).join(`
159
+ `);
160
+ case "actions":
161
+ return null;
162
+ case "section":
163
+ return child.children.map((c) => childToFallbackText(c, convertText)).filter(Boolean).join(`
164
+ `);
165
+ case "table":
166
+ return tableElementToAscii(child.headers, child.rows);
167
+ case "divider":
168
+ return "---";
169
+ default:
170
+ return cardChildToFallbackText2(child);
171
+ }
172
+ }
173
+ function escapeTableCell(value) {
174
+ return value.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\n/g, " ");
175
+ }
176
+ function renderGfmTable(table) {
177
+ const headers = table.headers.map(escapeTableCell);
178
+ const lines = [];
179
+ lines.push(`| ${headers.join(" | ")} |`);
180
+ lines.push(`| ${headers.map(() => "---").join(" | ")} |`);
181
+ for (const row of table.rows) {
182
+ const cells = row.map(escapeTableCell);
183
+ lines.push(`| ${cells.join(" | ")} |`);
184
+ }
185
+ return lines;
186
+ }
187
+ var ALGORITHM = "aes-256-gcm";
188
+ var IV_LENGTH = 12;
189
+ var AUTH_TAG_LENGTH = 16;
190
+ var HEX_KEY_PATTERN = /^[0-9a-fA-F]{64}$/;
191
+ function encryptToken(plaintext, key) {
192
+ const iv = crypto.randomBytes(IV_LENGTH);
193
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv, {
194
+ authTagLength: AUTH_TAG_LENGTH
195
+ });
196
+ const ciphertext = Buffer.concat([
197
+ cipher.update(plaintext, "utf8"),
198
+ cipher.final()
199
+ ]);
200
+ const tag = cipher.getAuthTag();
201
+ return {
202
+ iv: iv.toString("base64"),
203
+ data: ciphertext.toString("base64"),
204
+ tag: tag.toString("base64")
205
+ };
206
+ }
207
+ function decryptToken(encrypted, key) {
208
+ const iv = Buffer.from(encrypted.iv, "base64");
209
+ const ciphertext = Buffer.from(encrypted.data, "base64");
210
+ const tag = Buffer.from(encrypted.tag, "base64");
211
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv, {
212
+ authTagLength: AUTH_TAG_LENGTH
213
+ });
214
+ decipher.setAuthTag(tag);
215
+ return Buffer.concat([
216
+ decipher.update(ciphertext),
217
+ decipher.final()
218
+ ]).toString("utf8");
219
+ }
220
+ function isEncryptedTokenData(value) {
221
+ if (!value || typeof value !== "object") {
222
+ return false;
223
+ }
224
+ const obj = value;
225
+ return typeof obj.iv === "string" && typeof obj.data === "string" && typeof obj.tag === "string";
226
+ }
227
+ function decodeKey(rawKey) {
228
+ const trimmed = rawKey.trim();
229
+ const isHex = HEX_KEY_PATTERN.test(trimmed);
230
+ const key = Buffer.from(trimmed, isHex ? "hex" : "base64");
231
+ if (key.length !== 32) {
232
+ throw new Error(`Encryption key must decode to exactly 32 bytes (received ${key.length}). Use a 64-char hex string or 44-char base64 string.`);
233
+ }
234
+ return key;
235
+ }
236
+ var LIMIT = 25 * 1024 * 1024;
237
+ var REDIRECTS = 5;
238
+ var TIMEOUT = 30000;
239
+ var STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
240
+ var BRACKETS = /^\[|\]$/g;
241
+ var IPV4 = [
242
+ ["0.0.0.0", 8],
243
+ ["10.0.0.0", 8],
244
+ ["100.64.0.0", 10],
245
+ ["127.0.0.0", 8],
246
+ ["169.254.0.0", 16],
247
+ ["172.16.0.0", 12],
248
+ ["192.0.0.0", 24],
249
+ ["192.0.2.0", 24],
250
+ ["192.88.99.0", 24],
251
+ ["192.168.0.0", 16],
252
+ ["198.18.0.0", 15],
253
+ ["198.51.100.0", 24],
254
+ ["203.0.113.0", 24],
255
+ ["224.0.0.0", 4],
256
+ ["240.0.0.0", 4]
257
+ ];
258
+ var IPV6 = [
259
+ ["::", 3],
260
+ ["2001::", 23],
261
+ ["2001:db8::", 32],
262
+ ["2002::", 16],
263
+ ["3fff::", 20],
264
+ ["4000::", 2],
265
+ ["8000::", 1]
266
+ ];
267
+ var DECODERS = {
268
+ br: createBrotliDecompress,
269
+ deflate: createInflate,
270
+ gzip: createGunzip,
271
+ "x-gzip": createGunzip
272
+ };
273
+ function blocklist(ranges, family) {
274
+ const list = new BlockList;
275
+ for (const [address, prefix] of ranges) {
276
+ list.addSubnet(address, prefix, family);
277
+ }
278
+ return list;
279
+ }
280
+ var BLOCKED4 = blocklist(IPV4, "ipv4");
281
+ var BLOCKED6 = blocklist(IPV6, "ipv6");
282
+ function blocked(address, family) {
283
+ if (family !== 4 && family !== 6) {
284
+ return true;
285
+ }
286
+ return family === 6 ? BLOCKED6.check(address, "ipv6") : BLOCKED4.check(address, "ipv4");
287
+ }
288
+ function refusal(adapter) {
289
+ return new NetworkError(adapter, "Refusing to fetch an internal attachment URL");
290
+ }
291
+ function createResolver(adapter, query = resolve) {
292
+ return (hostname, options, callback) => {
293
+ query(hostname, { ...options, all: true }).then((addresses) => {
294
+ if (addresses.length === 0) {
295
+ callback(new NetworkError(adapter, "Could not resolve the attachment host"), "", 0);
296
+ return;
297
+ }
298
+ if (addresses.some(({ address: address2, family }) => blocked(address2, family))) {
299
+ callback(refusal(adapter), "", 0);
300
+ return;
301
+ }
302
+ if (options.all) {
303
+ callback(null, addresses);
304
+ return;
305
+ }
306
+ const [address] = addresses;
307
+ callback(null, address.address, address.family);
308
+ }, (error) => {
309
+ callback(error instanceof Error ? error : new Error(String(error)), "", 0);
310
+ });
311
+ };
312
+ }
313
+ function validateAttachmentUrl(value, adapter, hosts) {
314
+ const url = value instanceof URL ? value : new URL(value);
315
+ const hostname = url.hostname.replace(BRACKETS, "");
316
+ const family = isIP(hostname);
317
+ if (family && blocked(hostname, family)) {
318
+ throw refusal(adapter);
319
+ }
320
+ if (url.protocol !== "https:" || hosts && !hosts.some((host) => {
321
+ const allowed = host.toLowerCase();
322
+ return hostname === allowed || hostname.endsWith(`.${allowed}`);
323
+ })) {
324
+ throw new NetworkError(adapter, "Refusing to fetch an untrusted attachment URL");
325
+ }
326
+ return url;
327
+ }
328
+ function createTransport(adapter) {
329
+ const lookup = createResolver(adapter);
330
+ return (url, signal, headers) => new Promise((fulfill, reject) => {
331
+ const request = secure(url, {
332
+ agent: false,
333
+ headers,
334
+ lookup,
335
+ signal
336
+ }, fulfill);
337
+ request.on("error", reject);
338
+ request.end();
339
+ });
340
+ }
341
+ async function readAttachmentBody(response, adapter, limit = LIMIT, signal) {
342
+ if (signal?.aborted) {
343
+ response.destroy();
344
+ throw new NetworkError(adapter, "Timed out fetching the attachment");
345
+ }
346
+ const abort = () => response.destroy(signalError(signal));
347
+ signal?.addEventListener("abort", abort, { once: true });
348
+ try {
349
+ return await readBody(response, adapter, limit);
350
+ } finally {
351
+ signal?.removeEventListener("abort", abort);
352
+ }
353
+ }
354
+ function signalError(signal) {
355
+ const reason = signal?.reason;
356
+ return reason instanceof Error ? reason : new Error(String(reason));
357
+ }
358
+ function awaitResponse(pending, signal, adapter) {
359
+ return new Promise((fulfill, reject) => {
360
+ const abort = () => reject(new NetworkError(adapter, "Timed out fetching the attachment"));
361
+ if (signal.aborted) {
362
+ abort();
363
+ } else {
364
+ signal.addEventListener("abort", abort, { once: true });
365
+ }
366
+ pending.then((response) => {
367
+ signal.removeEventListener("abort", abort);
368
+ if (signal.aborted) {
369
+ response.destroy();
370
+ }
371
+ fulfill(response);
372
+ }, (error) => {
373
+ signal.removeEventListener("abort", abort);
374
+ reject(error);
375
+ });
376
+ });
377
+ }
378
+ async function readBody(response, adapter, limit) {
379
+ const header = response.headers["content-encoding"]?.trim().toLowerCase() || "identity";
380
+ const decode = header === "identity" ? undefined : DECODERS[header];
381
+ if (header !== "identity" && !decode) {
382
+ response.destroy();
383
+ throw new NetworkError(adapter, `Unsupported attachment encoding: ${header}`);
384
+ }
385
+ const declared = decode ? Number.NaN : Number(response.headers["content-length"]);
386
+ if (Number.isFinite(declared) && declared > limit) {
387
+ response.destroy();
388
+ throw new NetworkError(adapter, "Attachment exceeds the download limit");
389
+ }
390
+ const source = decode ? pipeline(response, decode(), () => {
391
+ return;
392
+ }) : response;
393
+ if (Number.isFinite(declared)) {
394
+ const body = Buffer.allocUnsafe(declared);
395
+ let offset = 0;
396
+ for await (const chunk of source) {
397
+ const piece = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
398
+ if (offset + piece.length > declared) {
399
+ response.destroy();
400
+ throw new NetworkError(adapter, "Attachment body exceeds its declared length");
401
+ }
402
+ piece.copy(body, offset);
403
+ offset += piece.length;
404
+ }
405
+ return offset === declared ? body : body.subarray(0, offset);
406
+ }
407
+ const chunks = [];
408
+ let size = 0;
409
+ for await (const chunk of source) {
410
+ const piece = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
411
+ size += piece.length;
412
+ if (size > limit) {
413
+ response.destroy();
414
+ throw new NetworkError(adapter, "Attachment exceeds the download limit");
415
+ }
416
+ chunks.push(piece);
417
+ }
418
+ return Buffer.concat(chunks, size);
419
+ }
420
+ async function downloadAttachment(value, options) {
421
+ const {
422
+ adapter,
423
+ headers,
424
+ hosts,
425
+ limit = LIMIT,
426
+ onResponse,
427
+ redirects = REDIRECTS,
428
+ timeoutMs = TIMEOUT,
429
+ transport
430
+ } = options;
431
+ const send = transport ?? createTransport(adapter);
432
+ const signal = AbortSignal.timeout(timeoutMs);
433
+ let url = validateAttachmentUrl(value, adapter, hosts);
434
+ try {
435
+ for (let hop = 0;hop <= redirects; hop += 1) {
436
+ const response = await awaitResponse(send(url, signal, {
437
+ "accept-encoding": "gzip, deflate, br",
438
+ "user-agent": "Vercel.ChatSDK",
439
+ ...typeof headers === "function" ? headers(url) : headers
440
+ }), signal, adapter);
441
+ const status = response.statusCode ?? 0;
442
+ if (STATUSES.has(status)) {
443
+ const location = response.headers.location;
444
+ response.destroy();
445
+ if (!location) {
446
+ throw new NetworkError(adapter, "Attachment redirect has no location");
447
+ }
448
+ if (hop === redirects) {
449
+ throw new NetworkError(adapter, "Too many attachment redirects");
450
+ }
451
+ url = validateAttachmentUrl(new URL(location, url), adapter, hosts);
452
+ continue;
453
+ }
454
+ if (status < 200 || status >= 300) {
455
+ response.destroy();
456
+ throw new NetworkError(adapter, `Failed to fetch file: ${status} ${response.statusMessage ?? ""}`.trim());
457
+ }
458
+ if (onResponse) {
459
+ try {
460
+ onResponse(response);
461
+ } catch (error) {
462
+ response.destroy();
463
+ throw error;
464
+ }
465
+ }
466
+ return await readAttachmentBody(response, adapter, limit, signal);
467
+ }
468
+ throw new NetworkError(adapter, "Too many attachment redirects");
469
+ } catch (error) {
470
+ if (signal.aborted && !(error instanceof NetworkError)) {
471
+ throw new NetworkError(adapter, "Timed out fetching the attachment", error instanceof Error ? error : undefined);
472
+ }
473
+ throw error;
474
+ }
475
+ }
476
+ var HTTP = "http://";
477
+ var HTTPS = "https://";
478
+ function isLetter(char) {
479
+ const code = char.charCodeAt(0);
480
+ return code >= 65 && code <= 90 || code >= 97 && code <= 122;
481
+ }
482
+ function isNumber(char) {
483
+ const code = char.charCodeAt(0);
484
+ return code >= 48 && code <= 57;
485
+ }
486
+ function isWord(char) {
487
+ return char !== undefined && (isLetter(char) || isNumber(char) || char === "_");
488
+ }
489
+ function isHost(char) {
490
+ return isLetter(char) || isNumber(char) || char === "." || char === "-";
491
+ }
492
+ function isBoundary(char) {
493
+ return char === "<" || char === ">" || char.trim() === "";
494
+ }
495
+ function startsWith(text, index, value) {
496
+ return text.slice(index, index + value.length).toLowerCase() === value;
497
+ }
498
+ function findUrlEnd(text, index, end) {
499
+ let prefix = 0;
500
+ if (startsWith(text, index, HTTPS)) {
501
+ prefix = HTTPS.length;
502
+ } else if (startsWith(text, index, HTTP)) {
503
+ prefix = HTTP.length;
504
+ }
505
+ if (prefix === 0 || index + prefix >= end) {
506
+ return index;
507
+ }
508
+ let cursor = index + prefix;
509
+ while (cursor < end && !isBoundary(text[cursor])) {
510
+ cursor += 1;
511
+ }
512
+ return cursor;
513
+ }
514
+ function findHostEnd(text, index, end) {
515
+ if (!(isLetter(text[index]) || isNumber(text[index]))) {
516
+ return index;
517
+ }
518
+ if (index > 0 && isHost(text[index - 1])) {
519
+ return index;
520
+ }
521
+ let cursor = index;
522
+ while (cursor < end && isHost(text[cursor])) {
523
+ cursor += 1;
524
+ }
525
+ const separator = text[cursor];
526
+ if (separator !== "/" && separator !== "?" && separator !== "#") {
527
+ return index;
528
+ }
529
+ const host = text.slice(index, cursor);
530
+ const dot = host.lastIndexOf(".");
531
+ const suffix = host.slice(dot + 1);
532
+ if (dot <= 0 || suffix.length < 2) {
533
+ return index;
534
+ }
535
+ for (const char of suffix) {
536
+ if (!isLetter(char)) {
537
+ return index;
538
+ }
539
+ }
540
+ cursor += 1;
541
+ while (cursor < end && !isBoundary(text[cursor])) {
542
+ cursor += 1;
543
+ }
544
+ return cursor;
545
+ }
546
+ function findCodeEnd(text, index, end) {
547
+ if (text[index] !== "`") {
548
+ return index;
549
+ }
550
+ const fence = text.startsWith("```", index);
551
+ const marker = fence ? "```" : "`";
552
+ const start = index + marker.length;
553
+ const close = text.indexOf(marker, start);
554
+ if (close === -1 || close >= end) {
555
+ return index;
556
+ }
557
+ if (!fence) {
558
+ const newline = text.indexOf(`
559
+ `, start);
560
+ if (newline !== -1 && newline < close) {
561
+ return index;
562
+ }
563
+ }
564
+ return close + marker.length;
565
+ }
566
+ function replaceRange(text, start, end, replacer, angles) {
567
+ let result = "";
568
+ let index = start;
569
+ while (index < end) {
570
+ const codeEnd = findCodeEnd(text, index, end);
571
+ if (codeEnd > index) {
572
+ result += text.slice(index, codeEnd);
573
+ index = codeEnd;
574
+ continue;
575
+ }
576
+ if (angles && text[index] === "<") {
577
+ let cursor = index + 1;
578
+ while (cursor < end && text[cursor] !== ">" && text[cursor] !== `
579
+ ` && text[cursor] !== "\r") {
580
+ cursor += 1;
581
+ }
582
+ if (text[cursor] === ">") {
583
+ result += text.slice(index, cursor + 1);
584
+ index = cursor + 1;
585
+ continue;
586
+ }
587
+ result += replaceRange(text, index, cursor, replacer, false);
588
+ index = cursor;
589
+ continue;
590
+ }
591
+ const urlEnd = findUrlEnd(text, index, end);
592
+ if (urlEnd > index) {
593
+ result += text.slice(index, urlEnd);
594
+ index = urlEnd;
595
+ continue;
596
+ }
597
+ const hostEnd = findHostEnd(text, index, end);
598
+ if (hostEnd > index) {
599
+ result += text.slice(index, hostEnd);
600
+ index = hostEnd;
601
+ continue;
602
+ }
603
+ if (text[index] === "@" && text[index - 1] !== "<" && !isWord(text[index - 1]) && isWord(text[index + 1])) {
604
+ let cursor = index + 2;
605
+ while (cursor < end && isWord(text[cursor])) {
606
+ cursor += 1;
607
+ }
608
+ const mention = text.slice(index, cursor);
609
+ result += replacer(mention, mention.slice(1));
610
+ index = cursor;
611
+ continue;
612
+ }
613
+ result += text[index];
614
+ index += 1;
615
+ }
616
+ return result;
617
+ }
618
+ function replaceBareMentions(text, replacer) {
619
+ return replaceRange(text, 0, text.length, replacer, true);
620
+ }
621
+ function maskCodeSpans(text, replacement = " ") {
622
+ let result = "";
623
+ let index = 0;
624
+ const end = text.length;
625
+ while (index < end) {
626
+ const codeEnd = findCodeEnd(text, index, end);
627
+ if (codeEnd > index) {
628
+ result += replacement;
629
+ index = codeEnd;
630
+ continue;
631
+ }
632
+ result += text[index];
633
+ index += 1;
634
+ }
635
+ return result;
636
+ }
637
+
638
+ export { extractCard, extractFiles, extractPostableAttachments, AdapterRateLimitError, AuthenticationError, ResourceNotFoundError, PermissionError, ValidationError, NetworkError, toBuffer, bufferToDataUri, createEmojiConverter, mapButtonStyle, cardToFallbackText, escapeTableCell, renderGfmTable, encryptToken, decryptToken, isEncryptedTokenData, decodeKey, downloadAttachment, replaceBareMentions, maskCodeSpans };
@@ -1,10 +1,3 @@
1
- import {
2
- ProjectTrustStore,
3
- addMcpServerConfig,
4
- loadMcpConfig,
5
- openBrowser,
6
- removeMcpServerConfig
7
- } from "./cli-c5km5znr.js";
8
1
  import {
9
2
  McpOAuthCredentialStore,
10
3
  McpServerConnection,
@@ -12,11 +5,18 @@ import {
12
5
  McpSignInCancelledError,
13
6
  createDefaultTransport,
14
7
  signInMcpServer
15
- } from "./cli-rcp5aqdw.js";
8
+ } from "./cli-w7m81tb7.js";
9
+ import {
10
+ ProjectTrustStore,
11
+ addMcpServerConfig,
12
+ loadMcpConfig,
13
+ openBrowser,
14
+ removeMcpServerConfig
15
+ } from "./cli-c8r3kzzb.js";
16
16
  import {
17
17
  getMcpToolExposure,
18
18
  validateMcpServerConfig
19
- } from "./cli-r44t9wqc.js";
19
+ } from "./cli-r106725k.js";
20
20
  import"./cli-ev91t6xp.js";
21
21
  import {
22
22
  source_default
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  summarizeSession
3
- } from "./cli-nwrdx840.js";
3
+ } from "./cli-tr4sxp68.js";
4
4
  import {
5
5
  checkToolLoop,
6
6
  clearToolHistory
@@ -24,7 +24,7 @@ import {
24
24
  import {
25
25
  init_secret_scrubber,
26
26
  scrubSecrets
27
- } from "./cli-d161g69q.js";
27
+ } from "./cli-p1x85d2t.js";
28
28
 
29
29
  // src/prompts/goal-reminder.ts
30
30
  init_session_templates();