@desplega.ai/agent-swarm 1.152.2 → 1.154.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 (284) hide show
  1. package/README.md +2 -2
  2. package/dist/{acp-adapter-pfeje2v5.js → acp-adapter-eb2aj8xy.js} +4 -4
  3. package/dist/{actions-0sttc7f5.js → actions-kpnwp1kz.js} +31 -27
  4. package/dist/{anthropic-messages-2y8nktar.js → anthropic-messages-9vqsbznt.js} +112 -84
  5. package/dist/{app-p8teva95.js → app-zk1apkf6.js} +10 -7
  6. package/dist/{assistant-r45jnsrt.js → assistant-kwq4y50q.js} +32 -28
  7. package/dist/{azure-openai-responses-f38x2avq.js → azure-openai-responses-04qwdwfq.js} +27 -13
  8. package/dist/{boot-reembed-je26h5y7.js → boot-reembed-22hd3jjn.js} +9 -7
  9. package/dist/{boot-reembed-1qmybsd4.js → boot-reembed-qe168424.js} +10 -8
  10. package/dist/{boot-scrub-logs-gte3h1mm.js → boot-scrub-logs-pkdpsrjd.js} +7 -5
  11. package/dist/{claude-adapter-csc1mzka.js → claude-adapter-3fx90nww.js} +18 -16
  12. package/dist/{claude-managed-adapter-dsmkcrjy.js → claude-managed-adapter-ea2aga6w.js} +3 -3
  13. package/dist/{claude-sdk-session-fcd6f078.js → claude-sdk-session-z7fahf1k.js} +18 -16
  14. package/dist/{cli-r2fpe7cx.js → cli-00w2c66p.js} +61 -55
  15. package/dist/{cli-wbyk465z.js → cli-09y3tjxz.js} +1 -1
  16. package/dist/{cli-ht5rs63n.js → cli-0e31nm4n.js} +16 -7
  17. package/dist/cli-0x5qzvkg.js +4279 -0
  18. package/dist/{cli-d3p82erb.js → cli-18amys3y.js} +9 -9
  19. package/dist/{cli-4ahpr4sw.js → cli-1jpjafw4.js} +5 -5
  20. package/dist/{cli-jbmc0r7r.js → cli-243tzws8.js} +1 -1
  21. package/dist/{cli-ch38q5z4.js → cli-24k806sc.js} +6789 -2542
  22. package/dist/cli-3bkz2p7j.js +2828 -0
  23. package/dist/cli-3er6gcsn.js +1849 -0
  24. package/dist/cli-4k7jazkq.js +3339 -0
  25. package/dist/{cli-c4eeb5q2.js → cli-5b6b62tz.js} +1 -1
  26. package/dist/{cli-qd65dvr6.js → cli-5vs0nh43.js} +65 -44
  27. package/dist/{cli-z3wkng35.js → cli-6r3cgpk2.js} +224 -156
  28. package/dist/{cli-pgj4a5fb.js → cli-71cj99hx.js} +4 -3
  29. package/dist/cli-8sea27q4.js +14075 -0
  30. package/dist/{cli-jvy9qgjs.js → cli-913yakhv.js} +22 -7
  31. package/dist/{cli-pf9q3696.js → cli-927erqqt.js} +5 -2
  32. package/dist/cli-95jnpnqg.js +230 -0
  33. package/dist/{cli-wpv5rgg2.js → cli-abp3g4ax.js} +15 -2
  34. package/dist/{cli-ckz5t2hb.js → cli-acy6bfhr.js} +10 -7
  35. package/dist/{cli-4yc5d8fk.js → cli-avkd6mqv.js} +50 -0
  36. package/dist/{cli-8wrympd7.js → cli-bzr0ftht.js} +26 -7
  37. package/dist/{cli-qn042eh7.js → cli-c1v10xb2.js} +194 -1913
  38. package/dist/cli-cgj4hc12.js +18902 -0
  39. package/dist/{cli-2nnd56zt.js → cli-e0pg4zeh.js} +3 -2
  40. package/dist/{cli-r84ctdxn.js → cli-e31ehqwy.js} +2 -2
  41. package/dist/{cli-gphgnvpf.js → cli-e3229na9.js} +3 -3
  42. package/dist/{cli-gpqcs935.js → cli-e3cyf59d.js} +2 -2
  43. package/dist/{cli-s25avqg9.js → cli-e781c6f9.js} +1 -0
  44. package/dist/{cli-s2qjdd6z.js → cli-eetrvv91.js} +1 -1
  45. package/dist/{cli-j4nv2wqy.js → cli-fdzg6jhf.js} +10 -4
  46. package/dist/{cli-fm4ytsdk.js → cli-g2h29qar.js} +2 -2
  47. package/dist/{cli-zvgj5zg8.js → cli-ge67p080.js} +302 -3497
  48. package/dist/cli-h38x0qhg.js +6912 -0
  49. package/dist/{cli-9xvdm3bx.js → cli-h60qfasa.js} +742 -278
  50. package/dist/{cli-jew3jda5.js → cli-hws0vn86.js} +2 -2
  51. package/dist/{cli-j8dggbcr.js → cli-k0g1sjzm.js} +23 -31
  52. package/dist/{cli-xw7vak96.js → cli-kp3qs53m.js} +5 -5
  53. package/dist/{cli-rgvp6r2x.js → cli-mcnhgnn1.js} +193 -4
  54. package/dist/{cli-zvkq5csn.js → cli-myaxtgh8.js} +7 -6
  55. package/dist/{cli-56h18ng2.js → cli-n62atwh9.js} +1 -1
  56. package/dist/cli-n7h1kqpf.js +29 -0
  57. package/dist/{cli-fmy65jdn.js → cli-pf1v8xhb.js} +7 -5
  58. package/dist/{cli-xy1cchaf.js → cli-q85qhckh.js} +238 -11
  59. package/dist/{cli-3bpzj8me.js → cli-r1d3dzt6.js} +2 -2
  60. package/dist/{pi-mono-adapter-jcqt71cg.js → cli-rxkqvngf.js} +67343 -101083
  61. package/dist/{cli-kj76p1ez.js → cli-scwq51gn.js} +13 -7
  62. package/dist/{cli-b9dd0h3k.js → cli-stwsmd6k.js} +3 -2
  63. package/dist/{cli-c2mk1kgf.js → cli-v4en75c5.js} +8 -1
  64. package/dist/{cli-z61ykvam.js → cli-wg04s9kr.js} +4 -3
  65. package/dist/cli-yn0a417a.js +4069 -0
  66. package/dist/{cli-zfzznn7c.js → cli-ytxs7mn1.js} +26 -2
  67. package/dist/{cli-4j8k1m4w.js → cli-zt1227k1.js} +1162 -192
  68. package/dist/cli.js +28 -35
  69. package/dist/{codex-adapter-fxmpsabw.js → codex-adapter-ttdm995v.js} +12 -11
  70. package/dist/{codex-hook-8jexc34x.js → codex-hook-8gx7bcz0.js} +3 -3
  71. package/dist/{codex-session-runner-rr1e47ea.js → codex-session-runner-3v8nh4c8.js} +12 -11
  72. package/dist/{commands-0f5rxz51.js → commands-1cxwbhhq.js} +7 -5
  73. package/dist/{db-r3jxf3wy.js → db-y9zwsr79.js} +25 -5
  74. package/dist/{dispatcher-06vph6q4.js → dispatcher-9m9zss36.js} +30 -26
  75. package/dist/dsh-adapter-gsb2qqf9.js +19 -0
  76. package/dist/{e2b-413b8t4v.js → e2b-93x1k0j5.js} +6 -7
  77. package/dist/{google-generative-ai-ndjmj5fa.js → google-generative-ai-gwwrnzqn.js} +33 -73
  78. package/dist/{google-vertex-fr665tqs.js → google-vertex-5wfawpwz.js} +38 -68
  79. package/dist/{handlers-0hgtc910.js → handlers-36fm1bwn.js} +33 -29
  80. package/dist/{hook-9kvrv1er.js → hook-pntw4r8h.js} +12 -10
  81. package/dist/{hook-fbfhkat3.js → hook-vwq8y26p.js} +13 -11
  82. package/dist/{http-xbyx8k5j.js → http-20jesakk.js} +357 -261
  83. package/dist/{index-jsw3aynb.js → index-6artrehg.js} +30 -26
  84. package/dist/{cli-pdz9qde4.js → index-9ch1n761.js} +10 -11
  85. package/dist/{index-rnyahfn5.js → index-9n5z2492.js} +30 -26
  86. package/dist/{index-66xz5e9j.js → index-h5gs261z.js} +521 -9
  87. package/dist/{index-tfsdxyv6.js → index-j5wrf1yw.js} +40 -25
  88. package/dist/{index-2sp0384z.js → index-kkeftv5h.js} +738 -21
  89. package/dist/{index-sgk50mbg.js → index-m2xqpz5r.js} +31 -27
  90. package/dist/{index-gpfn1741.js → index-m9ks8a7t.js} +9 -7
  91. package/dist/index-w097eg0x.js +5 -0
  92. package/dist/jiti-loader-b4837mtm.js +34 -0
  93. package/dist/jiti-static-loader-q2g5ds0y.js +31267 -0
  94. package/dist/{keepalive-s3xpr7sw.js → keepalive-pwxvxd2c.js} +9 -7
  95. package/dist/{lead-rq4n5r16.js → lead-m789wqa3.js} +46 -41
  96. package/dist/{maintenance-f0atj1ab.js → maintenance-bvg6w7e2.js} +10 -8
  97. package/dist/{mistral-conversations-qhr84ph3.js → mistral-conversations-zx0kn554.js} +24 -18
  98. package/dist/{node-x1g4v0pq.js → node-5qtycf6a.js} +16 -11
  99. package/dist/{oauth-refresh-sweep-q0t3bxre.js → oauth-refresh-sweep-6v4bd737.js} +8 -6
  100. package/dist/{onboard-br5j1kch.js → onboard-snckpcj1.js} +115 -35
  101. package/dist/{openai-codex-responses-wy6a43wd.js → openai-codex-responses-4vjqzvjp.js} +33 -27
  102. package/dist/{openai-completions-32rdwmze.js → openai-completions-pxsmym7g.js} +52 -64
  103. package/dist/{openai-responses-6xwf7bzg.js → openai-responses-tmn0rqp0.js} +23 -24
  104. package/dist/{opencode-adapter-28axqa09.js → opencode-adapter-qbmv4tpy.js} +6 -6
  105. package/dist/{otel-impl-vdqge2nt.js → otel-impl-e0ytens5.js} +4 -4
  106. package/dist/{pi-messages-b1mbr6gp.js → pi-messages-txpjj39q.js} +3 -3
  107. package/dist/pi-mono-adapter-c4ggemhz.js +1316 -0
  108. package/dist/{pricing-refresh-hb3691fd.js → pricing-refresh-52g2ywrw.js} +9 -7
  109. package/dist/{rbac-roles-t78xt39b.js → rbac-roles-5455kfdn.js} +8 -6
  110. package/dist/{rbac-roles-jh280k9g.js → rbac-roles-hbf0xa52.js} +9 -7
  111. package/dist/{render-v2-7p8r2ymg.js → render-v2-npm8xdzh.js} +16 -9
  112. package/dist/{seed-pricing-hf889enh.js → seed-pricing-650wbr1n.js} +8 -6
  113. package/dist/{setup-w6mb03jv.js → setup-k1mew5rf.js} +4 -5
  114. package/dist/virtual-modules-2q5b2pk4.js +54 -0
  115. package/dist/{work-objects-nt8gy1kj.js → work-objects-2ea3kvwg.js} +33 -29
  116. package/dist/{worker-dwy617t0.js → worker-ec6hvc4m.js} +46 -41
  117. package/openapi.json +109 -16
  118. package/package.json +7 -6
  119. package/plugin/opencode-plugins/lib/memory-raters.ts +7 -0
  120. package/src/be/automation-preflight.ts +6 -4
  121. package/src/be/db/agents.ts +75 -2
  122. package/src/be/db/tasks/read.ts +2 -0
  123. package/src/be/db/tasks/write.ts +7 -1
  124. package/src/be/db.ts +140 -18
  125. package/src/be/extensions/db.ts +35 -4
  126. package/src/be/memory/raters/llm.ts +2 -6
  127. package/src/be/memory/raters/noop.ts +2 -3
  128. package/src/be/memory/raters/registry.ts +4 -10
  129. package/src/be/migrations/157_defer_provenance_and_marker.sql +27 -0
  130. package/src/be/models-catalog.ts +2 -0
  131. package/src/be/modelsdev-cache.json +213 -0
  132. package/src/be/rbac-audit.ts +2 -0
  133. package/src/be/seed/agent-fs-provision.ts +23 -0
  134. package/src/be/seed-pricing.ts +3 -1
  135. package/src/be/swarm-config-guard.ts +1 -0
  136. package/src/commands/onboard/compose-generator.ts +16 -1
  137. package/src/commands/onboard/env-generator.ts +14 -1
  138. package/src/commands/onboard/manifest.ts +1 -0
  139. package/src/commands/onboard/steps/integration-slack.tsx +56 -16
  140. package/src/commands/onboard/steps/review.tsx +5 -0
  141. package/src/commands/onboard/types.ts +6 -0
  142. package/src/commands/onboard.tsx +5 -1
  143. package/src/commands/provider-credentials.ts +14 -2
  144. package/src/commands/runner.ts +18 -2
  145. package/src/extensions/identity.ts +15 -7
  146. package/src/extensions/lifecycle.ts +15 -21
  147. package/src/hooks/codex-hook.ts +7 -1
  148. package/src/http/agents.ts +12 -4
  149. package/src/http/config.ts +1 -1
  150. package/src/http/core.ts +5 -3
  151. package/src/http/extensions.ts +108 -34
  152. package/src/http/poll.ts +7 -0
  153. package/src/http/schedules.ts +10 -0
  154. package/src/http/script-runs.ts +35 -26
  155. package/src/http/status.ts +24 -11
  156. package/src/http/tasks.ts +6 -1
  157. package/src/prompts/base-prompt.ts +15 -7
  158. package/src/prompts/memories.ts +5 -7
  159. package/src/prompts/session-templates.ts +3 -2
  160. package/src/prompts/steering-delivery.ts +2 -0
  161. package/src/providers/claude-managed-models.ts +8 -0
  162. package/src/providers/codex-adapter.ts +3 -6
  163. package/src/providers/codex-models.ts +15 -1
  164. package/src/providers/dsh-adapter.ts +248 -0
  165. package/src/providers/index.ts +5 -1
  166. package/src/providers/modelsdev-reasoning.json +50 -0
  167. package/src/providers/pi-mono-extension.ts +2 -5
  168. package/src/rbac/legacy-policy.ts +15 -1
  169. package/src/rbac/types.ts +2 -0
  170. package/src/server.ts +7 -1
  171. package/src/slack/ack.ts +43 -8
  172. package/src/slack/app.ts +32 -10
  173. package/src/slack/config.ts +29 -0
  174. package/src/slack/handlers.ts +7 -1
  175. package/src/slack/render-v2.ts +186 -17
  176. package/src/slack/responses.ts +1 -3
  177. package/src/slack/task-output.ts +66 -8
  178. package/src/slack/thread-buffer.ts +27 -3
  179. package/src/telemetry.ts +2 -3
  180. package/src/tests/agent-fs-provision-seeder.test.ts +56 -2
  181. package/src/tests/agents-harness-provider.test.ts +19 -0
  182. package/src/tests/agents-list-model-display.test.ts +60 -1
  183. package/src/tests/base-prompt.test.ts +25 -0
  184. package/src/tests/claude-managed-adapter.test.ts +6 -0
  185. package/src/tests/codex-gpt6-release.test.ts +97 -0
  186. package/src/tests/codex-steering-hook.test.ts +2 -2
  187. package/src/tests/config-api-only-keys.test.ts +9 -0
  188. package/src/tests/context-window.test.ts +1 -0
  189. package/src/tests/db-task-read-contract.test.ts +9 -0
  190. package/src/tests/db-task-write-contract.test.ts +9 -0
  191. package/src/tests/defer-task.test.ts +115 -16
  192. package/src/tests/dsh-adapter.test.ts +276 -0
  193. package/src/tests/e2e-nightly-report.test.ts +3 -3
  194. package/src/tests/e2e-redact.test.ts +2 -0
  195. package/src/tests/env-flag.test.ts +6 -0
  196. package/src/tests/extension-agent-visibility.test.ts +474 -0
  197. package/src/tests/extensions-db.test.ts +41 -0
  198. package/src/tests/extensions-http.test.ts +148 -4
  199. package/src/tests/extensions-lifecycle.test.ts +21 -1
  200. package/src/tests/extensions-mcp-tools.test.ts +9 -5
  201. package/src/tests/fetch-resolved-env.test.ts +43 -0
  202. package/src/tests/internal-ai/complete-structured.test.ts +32 -9
  203. package/src/tests/internal-ai/credentials.test.ts +4 -4
  204. package/src/tests/internal-ai/models.test.ts +20 -0
  205. package/src/tests/memory-rate-tool.test.ts +7 -10
  206. package/src/tests/memory-rater-defaults.test.ts +23 -0
  207. package/src/tests/memory-rater-e2e.test.ts +2 -3
  208. package/src/tests/migration-046-budgets.test.ts +2 -0
  209. package/src/tests/model-control.test.ts +2 -2
  210. package/src/tests/onboard-compose.test.ts +14 -0
  211. package/src/tests/onboard-env.test.ts +17 -0
  212. package/src/tests/onboard-manifest.test.ts +12 -0
  213. package/src/tests/opus-5-5-registry.test.ts +48 -0
  214. package/src/tests/pricing-refresh.test.ts +1 -1
  215. package/src/tests/pricing-routes.test.ts +15 -3
  216. package/src/tests/provider-registration.test.ts +5 -2
  217. package/src/tests/rbac-admission-e2e.test.ts +54 -0
  218. package/src/tests/rbac-e2e-helpers.ts +2 -0
  219. package/src/tests/rbac-engine.test.ts +32 -0
  220. package/src/tests/rbac-wire-e2e.test.ts +33 -0
  221. package/src/tests/reasoning-effort.test.ts +8 -0
  222. package/src/tests/reload-config.test.ts +33 -0
  223. package/src/tests/script-connections.test.ts +3 -0
  224. package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
  225. package/src/tests/slack-config.test.ts +136 -0
  226. package/src/tests/slack-mode-lifecycle.test.ts +69 -0
  227. package/src/tests/slack-render-v2.test.ts +446 -16
  228. package/src/tests/slack-steering.test.ts +69 -1
  229. package/src/tests/slack-task-output.test.ts +33 -12
  230. package/src/tests/status.test.ts +22 -2
  231. package/src/tests/steering-core.test.ts +35 -0
  232. package/src/tests/steering-delivery.test.ts +39 -0
  233. package/src/tests/steering-transport.test.ts +2 -2
  234. package/src/tests/task-tool-preload-mcp.test.ts +3 -1
  235. package/src/tests/telemetry-init.test.ts +18 -0
  236. package/src/tests/workflow-live-recovery.test.ts +126 -0
  237. package/src/tests/workflow-llm.test.ts +3 -3
  238. package/src/tools/defer-task.ts +64 -26
  239. package/src/tools/extension-common.ts +4 -0
  240. package/src/tools/extension-install.ts +1 -1
  241. package/src/tools/extension-list.ts +4 -3
  242. package/src/tools/join-swarm.ts +1 -1
  243. package/src/tools/schedules/create-schedule.ts +11 -1
  244. package/src/tools/schedules/patch-schedule.ts +5 -0
  245. package/src/tools/schedules/update-schedule.ts +5 -0
  246. package/src/tools/send-task.ts +6 -0
  247. package/src/tools/utils.ts +1 -1
  248. package/src/types.ts +30 -8
  249. package/src/utils/context-window.ts +1 -0
  250. package/src/utils/credentials.ts +8 -0
  251. package/src/utils/internal-ai/complete-structured.ts +8 -0
  252. package/src/utils/internal-ai/models.ts +5 -5
  253. package/src/utils/memory-raters.ts +3 -0
  254. package/src/workflows/engine.ts +28 -0
  255. package/src/workflows/recovery.ts +7 -4
  256. package/templates/schedules/daily-status-report/content.md +25 -12
  257. package/templates/schedules/daily-workflow-health-audit/content.md +1 -1
  258. package/templates/skills/swarm-extensions/content.md +9 -5
  259. package/dist/cli-4wppfkcm.js +0 -16384
  260. package/dist/cli-55qrx3q8.js +0 -6041
  261. package/dist/cli-cg4vnyh4.js +0 -305
  262. package/dist/cli-jyetr64j.js +0 -52
  263. package/dist/cli-pp9ax9pa.js +0 -520
  264. package/dist/cli-qa66qaf0.js +0 -6076
  265. package/dist/cli-qghpvca2.js +0 -590
  266. package/dist/cli-rembwgt8.js +0 -861
  267. package/dist/cli-tcvj7j2r.js +0 -1971
  268. package/dist/cli-vfcth11k.js +0 -36
  269. package/dist/cli-w1d1bgkk.js +0 -1422
  270. package/dist/cli-y6x0gqtg.js +0 -5977
  271. package/dist/es5-tj3tn4jj.js +0 -844
  272. package/dist/index-1kq5hw2p.js +0 -467
  273. package/dist/index-1p8wdstt.js +0 -7
  274. package/dist/index-8fdjzb2f.js +0 -100
  275. package/dist/index-bxmwzbgw.js +0 -365
  276. package/dist/index-nzerxd5z.js +0 -7
  277. package/dist/index-pyymnzat.js +0 -1168
  278. package/dist/index-qv6atbab.js +0 -619
  279. package/dist/index-rja32qa7.js +0 -801
  280. package/dist/index-tzg5srfp.js +0 -211
  281. package/dist/index-vhncw983.js +0 -90
  282. package/dist/index-xk036zsk.js +0 -859
  283. package/dist/index-zyazbzcb.js +0 -6
  284. package/dist/{claude-managed-setup-48dwg9bv.js → claude-managed-setup-f5pmsyrp.js} +3 -3
@@ -5,12 +5,12 @@ import {
5
5
  import {
6
6
  clampOpenAIPromptCacheKey
7
7
  } from "./cli-mrptpp86.js";
8
- import {
9
- shortHash
10
- } from "./cli-5m9j2spm.js";
11
8
  import {
12
9
  retryProviderRequest
13
10
  } from "./cli-s8s499xy.js";
11
+ import {
12
+ shortHash
13
+ } from "./cli-5m9j2spm.js";
14
14
  import {
15
15
  getPiUserAgent
16
16
  } from "./cli-et1bbwqf.js";
@@ -33,26 +33,31 @@ import {
33
33
  resolveJsonSchemaStrictSampling,
34
34
  thinkingBudgetForLevel,
35
35
  transformMessages
36
- } from "./cli-j8dggbcr.js";
36
+ } from "./cli-k0g1sjzm.js";
37
37
  import {
38
38
  sanitizeSurrogates
39
39
  } from "./cli-y2apkfe2.js";
40
40
  import {
41
41
  headersToRecord
42
42
  } from "./cli-vapyk8sw.js";
43
- import {
44
- calculateCost,
45
- clampThinkingLevel
46
- } from "./cli-rgvp6r2x.js";
47
43
  import {
48
44
  getProviderEnvValue
49
45
  } from "./cli-btbzvq95.js";
50
46
  import {
51
47
  parseStreamingJson
52
48
  } from "./cli-1m2e086m.js";
49
+ import {
50
+ calculateCost,
51
+ clampThinkingLevel,
52
+ getDeclaredTools,
53
+ getSystemMessageText,
54
+ renderSystemMessageUpdate,
55
+ resolveTranscript,
56
+ resolveTranscriptTools
57
+ } from "./cli-mcnhgnn1.js";
53
58
  import {
54
59
  AssistantMessageEventStream
55
- } from "./cli-8wrympd7.js";
60
+ } from "./cli-bzr0ftht.js";
56
61
  import"./cli-bc05qbss.js";
57
62
 
58
63
  // node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js
@@ -87,23 +92,6 @@ function hasToolHistory(messages) {
87
92
  }
88
93
  return false;
89
94
  }
90
- function getDeferredToolNames(messages) {
91
- const names = new Set;
92
- for (const message of messages) {
93
- if (message.role === "toolResult") {
94
- for (const name of message.addedToolNames ?? []) {
95
- names.add(name);
96
- }
97
- }
98
- }
99
- return names;
100
- }
101
- function getToolsByName(tools, names) {
102
- if (!tools)
103
- return [];
104
- const toolsByName = new Map(tools.map((tool) => [tool.name, tool]));
105
- return Array.from(names).map((name) => toolsByName.get(name)).filter((tool) => tool !== undefined);
106
- }
107
95
  function isTextContentBlock(block) {
108
96
  return block.type === "text";
109
97
  }
@@ -192,6 +180,7 @@ function resolveCacheRetention(cacheRetention, env) {
192
180
  }
193
181
  var stream = (model, context, options) => {
194
182
  const stream2 = new AssistantMessageEventStream;
183
+ const normalizedContext = resolveTranscript(context, getCompat(model).supportsMidConvoSystemMessages);
195
184
  (async () => {
196
185
  const output = {
197
186
  role: "assistant",
@@ -219,11 +208,11 @@ var stream = (model, context, options) => {
219
208
  try {
220
209
  const apiKey = getClientApiKey(model.provider, options?.apiKey, options?.headers);
221
210
  const compat = getCompat(model);
222
- const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools);
211
+ const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools);
223
212
  const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);
224
213
  const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
225
- const client = createClient(model, context, apiKey, options?.headers, options?.fetch, cacheSessionId, compat);
226
- let params = buildParams(model, context, options, compat, cacheRetention, grammarToolInputProperties);
214
+ const client = createClient(model, normalizedContext, apiKey, options?.headers, options?.fetch, cacheSessionId, compat);
215
+ let params = buildParams(model, normalizedContext, options, compat, cacheRetention, grammarToolInputProperties);
227
216
  const nextParams = await options?.onPayload?.(params, model);
228
217
  if (nextParams !== undefined) {
229
218
  params = nextParams;
@@ -569,8 +558,11 @@ function createClient(model, context, apiKey, optionsHeaders, fetch, sessionId,
569
558
  defaultHeaders: headers
570
559
  });
571
560
  }
572
- function buildParams(model, context, options, compat = getCompat(model), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools)) {
573
- const messages = convertMessages(model, context, compat, { grammarToolInputProperties });
561
+ function buildParams(model, context, options, compat = getCompat(model), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) {
562
+ const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true);
563
+ const messages = convertMessages(model, context, compat, {
564
+ grammarToolInputProperties
565
+ });
574
566
  const cacheControl = getCompatCacheControl(compat, cacheRetention);
575
567
  const params = {
576
568
  model: model.id,
@@ -595,10 +587,8 @@ function buildParams(model, context, options, compat = getCompat(model), cacheRe
595
587
  if (options?.temperature !== undefined) {
596
588
  params.temperature = options.temperature;
597
589
  }
598
- const deferredToolNames = compat.deferredToolsMode === "kimi" ? getDeferredToolNames(context.messages) : new Set;
599
- const activeTools = context.tools?.filter((tool) => !deferredToolNames.has(tool.name));
600
- if (activeTools && activeTools.length > 0) {
601
- params.tools = convertTools(activeTools, compat);
590
+ if (transcriptTools.requestTools.length > 0) {
591
+ params.tools = convertTools(transcriptTools.requestTools, compat);
602
592
  if (compat.zaiToolStream) {
603
593
  params.tool_stream = true;
604
594
  }
@@ -840,6 +830,7 @@ function addCacheControlToTextContent(message, cacheControl) {
840
830
  return false;
841
831
  }
842
832
  function convertMessages(model, context, compat, options) {
833
+ const normalizedContext = resolveTranscript(context, compat.supportsMidConvoSystemMessages);
843
834
  const params = [];
844
835
  const normalizeToolCallId = (id) => {
845
836
  if (id.includes("|")) {
@@ -858,12 +849,9 @@ function convertMessages(model, context, compat, options) {
858
849
  return id.length > 40 ? id.slice(0, 40) : id;
859
850
  return id;
860
851
  };
861
- const transformedMessages = transformMessages(context.messages, model, (id) => normalizeToolCallId(id));
862
- if (context.systemPrompt) {
863
- const useDeveloperRole = model.reasoning && compat.supportsDeveloperRole;
864
- const role = useDeveloperRole ? "developer" : "system";
865
- params.push({ role, content: sanitizeSurrogates(context.systemPrompt) });
866
- }
852
+ const transformedMessages = transformMessages(normalizedContext.messages, model, (id) => normalizeToolCallId(id));
853
+ const transcriptTools = resolveTranscriptTools(normalizedContext.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true);
854
+ const instructionRole = model.reasoning && compat.supportsDeveloperRole ? "developer" : "system";
867
855
  let lastRole = null;
868
856
  for (let i = 0;i < transformedMessages.length; i++) {
869
857
  const msg = transformedMessages[i];
@@ -873,14 +861,27 @@ function convertMessages(model, context, compat, options) {
873
861
  content: "I have processed the tool results."
874
862
  });
875
863
  }
876
- if (msg.role === "user") {
864
+ if (msg.role === "system") {
865
+ const addedTools = i > 0 && transcriptTools.anchorsAdditions ? msg.toolsAdded ?? [] : [];
866
+ if (addedTools.length > 0) {
867
+ const kimiToolMessage = {
868
+ role: "system",
869
+ tools: convertTools(addedTools, compat)
870
+ };
871
+ params.push(kimiToolMessage);
872
+ }
873
+ const text = i === 0 ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg);
874
+ if (text.length > 0) {
875
+ params.push({ role: instructionRole, content: sanitizeSurrogates(text) });
876
+ }
877
+ } else if (msg.role === "user") {
877
878
  if (typeof msg.content === "string") {
878
879
  params.push({
879
880
  role: "user",
880
881
  content: sanitizeSurrogates(msg.content)
881
882
  });
882
883
  } else {
883
- const content = msg.content.map((item) => {
884
+ const content = msg.content.filter((item) => item.type !== "text" || item.text.length > 0).map((item) => {
884
885
  if (item.type === "text") {
885
886
  return {
886
887
  type: "text",
@@ -979,7 +980,6 @@ function convertMessages(model, context, compat, options) {
979
980
  params.push(assistantMsg);
980
981
  } else if (msg.role === "toolResult") {
981
982
  const imageBlocks = [];
982
- const deferredToolNames = new Set;
983
983
  let j = i;
984
984
  for (;j < transformedMessages.length && transformedMessages[j].role === "toolResult"; j++) {
985
985
  const toolMsg = transformedMessages[j];
@@ -997,11 +997,6 @@ function convertMessages(model, context, compat, options) {
997
997
  toolResultMsg.name = toolMsg.toolName;
998
998
  }
999
999
  params.push(toolResultMsg);
1000
- if (compat.deferredToolsMode === "kimi") {
1001
- for (const name of toolMsg.addedToolNames ?? []) {
1002
- deferredToolNames.add(name);
1003
- }
1004
- }
1005
1000
  if (hasImages && model.input.includes("image")) {
1006
1001
  for (const block of toolMsg.content) {
1007
1002
  if (isImageContentBlock(block)) {
@@ -1037,16 +1032,6 @@ function convertMessages(model, context, compat, options) {
1037
1032
  } else {
1038
1033
  lastRole = "toolResult";
1039
1034
  }
1040
- if (deferredToolNames.size > 0) {
1041
- const deferredTools = getToolsByName(context.tools, deferredToolNames);
1042
- if (deferredTools.length > 0) {
1043
- const kimiToolMessage = {
1044
- role: "system",
1045
- tools: convertTools(deferredTools, compat)
1046
- };
1047
- params.push(kimiToolMessage);
1048
- }
1049
- }
1050
1035
  continue;
1051
1036
  }
1052
1037
  lastRole = msg.role;
@@ -1136,8 +1121,9 @@ function detectCompat(model) {
1136
1121
  const isCloudflareAiGateway = provider === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com");
1137
1122
  const isNvidia = provider === "nvidia" || baseUrl.includes("integrate.api.nvidia.com");
1138
1123
  const isAntLing = provider === "ant-ling" || baseUrl.includes("api.ant-ling.com");
1124
+ const isCerebras = provider === "cerebras" || baseUrl.includes("cerebras.ai");
1139
1125
  const isDeepSeek = provider === "deepseek" || baseUrl.toLowerCase().includes("deepseek.com");
1140
- const isNonStandard = isNvidia || provider === "cerebras" || baseUrl.includes("cerebras.ai") || provider === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing;
1126
+ const isNonStandard = isNvidia || isCerebras || provider === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing;
1141
1127
  const useMaxTokens = baseUrl.includes("chutes.ai") || isDeepSeek || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing || isZai;
1142
1128
  const isGrok = provider === "xai" || baseUrl.includes("api.x.ai");
1143
1129
  const isOpenRouterDeveloperRoleModel = isOpenRouter && (model.id.startsWith("anthropic/") || model.id.startsWith("openai/"));
@@ -1161,11 +1147,12 @@ function detectCompat(model) {
1161
1147
  zaiToolStream: false,
1162
1148
  supportsThinkingTokenBudget: false,
1163
1149
  thinkingTokenBudgetField: undefined,
1164
- supportsStrictMode: !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia,
1150
+ supportsStrictMode: false,
1165
1151
  supportsOpenAIGrammarTools: false,
1152
+ supportsMidConvoSystemMessages: false,
1153
+ supportsMidConvoToolAdditions: false,
1166
1154
  cacheControlFormat,
1167
- sendSessionAffinityHeaders: false,
1168
- deferredToolsMode: undefined,
1155
+ sendSessionAffinityHeaders: isOpenRouter,
1169
1156
  sessionAffinityFormat: isOpenRouter ? "openrouter" : "openai",
1170
1157
  supportsLongCacheRetention: !(isTogether || isCloudflareWorkersAI || isCloudflareAiGateway || isNvidia || isAntLing)
1171
1158
  };
@@ -1195,9 +1182,10 @@ function getCompat(model) {
1195
1182
  thinkingTokenBudgetField: model.compat.thinkingTokenBudgetField ?? detected.thinkingTokenBudgetField,
1196
1183
  supportsStrictMode: model.compat.supportsStrictMode ?? detected.supportsStrictMode,
1197
1184
  supportsOpenAIGrammarTools: model.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools,
1185
+ supportsMidConvoSystemMessages: model.compat.supportsMidConvoSystemMessages ?? detected.supportsMidConvoSystemMessages,
1186
+ supportsMidConvoToolAdditions: model.compat.supportsMidConvoToolAdditions ?? detected.supportsMidConvoToolAdditions,
1198
1187
  cacheControlFormat: model.compat.cacheControlFormat ?? detected.cacheControlFormat,
1199
1188
  sendSessionAffinityHeaders: model.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders,
1200
- deferredToolsMode: model.compat.deferredToolsMode ?? detected.deferredToolsMode,
1201
1189
  sessionAffinityFormat: model.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat,
1202
1190
  supportsLongCacheRetention: model.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention,
1203
1191
  vllmPriority: model.compat.vllmPriority
@@ -1,6 +1,3 @@
1
- import {
2
- splitDeferredTools
3
- } from "./cli-vfcth11k.js";
4
1
  import {
5
2
  buildCopilotDynamicHeaders,
6
3
  hasCopilotVisionInput
@@ -9,14 +6,14 @@ import {
9
6
  convertResponsesMessages,
10
7
  convertResponsesTools,
11
8
  processResponsesStream
12
- } from "./cli-r2fpe7cx.js";
9
+ } from "./cli-00w2c66p.js";
13
10
  import {
14
11
  clampOpenAIPromptCacheKey
15
12
  } from "./cli-mrptpp86.js";
16
- import"./cli-5m9j2spm.js";
17
13
  import {
18
14
  retryProviderRequest
19
15
  } from "./cli-s8s499xy.js";
16
+ import"./cli-5m9j2spm.js";
20
17
  import {
21
18
  getPiUserAgent
22
19
  } from "./cli-et1bbwqf.js";
@@ -31,21 +28,24 @@ import {
31
28
  import {
32
29
  buildBaseOptions,
33
30
  createGrammarToolInputProperties
34
- } from "./cli-j8dggbcr.js";
31
+ } from "./cli-k0g1sjzm.js";
35
32
  import"./cli-y2apkfe2.js";
36
33
  import {
37
34
  headersToRecord
38
35
  } from "./cli-vapyk8sw.js";
39
- import {
40
- clampThinkingLevel
41
- } from "./cli-rgvp6r2x.js";
42
36
  import {
43
37
  getProviderEnvValue
44
38
  } from "./cli-btbzvq95.js";
45
39
  import"./cli-1m2e086m.js";
40
+ import {
41
+ clampThinkingLevel,
42
+ getDeclaredTools,
43
+ resolveTranscript,
44
+ resolveTranscriptTools
45
+ } from "./cli-mcnhgnn1.js";
46
46
  import {
47
47
  AssistantMessageEventStream
48
- } from "./cli-8wrympd7.js";
48
+ } from "./cli-bzr0ftht.js";
49
49
  import"./cli-bc05qbss.js";
50
50
 
51
51
  // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js
@@ -84,6 +84,7 @@ function resolveCacheRetention(cacheRetention, env) {
84
84
  function getCompat(model) {
85
85
  return {
86
86
  supportsDeveloperRole: model.compat?.supportsDeveloperRole ?? true,
87
+ supportsMidConvoSystemMessages: model.compat?.supportsMidConvoSystemMessages ?? false,
87
88
  sessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),
88
89
  supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,
89
90
  supportsStrictMode: model.compat?.supportsStrictMode ?? false,
@@ -106,11 +107,9 @@ function getPromptCacheOptions(compat, cacheRetention) {
106
107
  return { ttl: "30m" };
107
108
  return;
108
109
  }
109
- function formatOpenAIResponsesError(error) {
110
- return formatProviderError(normalizeProviderError(error), "OpenAI API error");
111
- }
112
110
  var stream = (model, context, options) => {
113
111
  const stream2 = new AssistantMessageEventStream;
112
+ const normalizedContext = resolveTranscript(context, getCompat(model).supportsMidConvoSystemMessages);
114
113
  (async () => {
115
114
  const output = {
116
115
  role: "assistant",
@@ -134,9 +133,9 @@ var stream = (model, context, options) => {
134
133
  const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);
135
134
  const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
136
135
  const compat = getCompat(model);
137
- const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools);
138
- const client = createClient(model, context, apiKey, options?.headers, options?.fetch, cacheSessionId);
139
- let params = buildParams(model, context, options, compat, grammarToolInputProperties);
136
+ const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools);
137
+ const client = createClient(model, normalizedContext, apiKey, options?.headers, options?.fetch, cacheSessionId);
138
+ let params = buildParams(model, normalizedContext, options, compat, grammarToolInputProperties);
140
139
  const nextParams = await options?.onPayload?.(params, model);
141
140
  if (nextParams !== undefined) {
142
141
  params = nextParams;
@@ -176,7 +175,7 @@ var stream = (model, context, options) => {
176
175
  delete block.customInput;
177
176
  }
178
177
  output.stopReason = options?.signal?.aborted ? "aborted" : "error";
179
- output.errorMessage = formatOpenAIResponsesError(error);
178
+ output.errorMessage = formatProviderError(normalizeProviderError(error), `${model.provider === "openai" ? "OpenAI" : model.provider} API error`);
180
179
  stream2.push({ type: "error", reason: output.stopReason, error: output });
181
180
  stream2.end();
182
181
  }
@@ -228,13 +227,13 @@ function createClient(model, context, apiKey, optionsHeaders, fetch, sessionId)
228
227
  defaultHeaders: headers
229
228
  });
230
229
  }
231
- function buildParams(model, context, options, compat = getCompat(model), grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools)) {
232
- const deferredToolsMode = compat.supportsAdditionalTools ? "additional-tools" : compat.supportsToolSearch ? "tool-search" : undefined;
233
- const toolPlacement = splitDeferredTools(context, deferredToolsMode !== undefined);
230
+ function buildParams(model, context, options, compat = getCompat(model), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) {
231
+ const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsAdditionalTools || compat.supportsToolSearch);
234
232
  const messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {
235
233
  grammarToolInputProperties,
236
- deferredTools: toolPlacement.deferred,
237
- deferredToolsMode,
234
+ supportsMidConvoSystemMessages: compat.supportsMidConvoSystemMessages,
235
+ supportsAdditionalTools: compat.supportsAdditionalTools,
236
+ supportsToolSearch: compat.supportsToolSearch,
238
237
  toolOptions: {
239
238
  supportsStrictMode: compat.supportsStrictMode,
240
239
  supportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools
@@ -259,8 +258,8 @@ function buildParams(model, context, options, compat = getCompat(model), grammar
259
258
  if (options?.serviceTier !== undefined) {
260
259
  params.service_tier = options.serviceTier;
261
260
  }
262
- if (toolPlacement.immediate.length > 0) {
263
- params.tools = convertResponsesTools(toolPlacement.immediate, {
261
+ if (transcriptTools.requestTools.length > 0) {
262
+ params.tools = convertResponsesTools(transcriptTools.requestTools, {
264
263
  supportsStrictMode: compat.supportsStrictMode,
265
264
  supportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools
266
265
  });
@@ -5,17 +5,17 @@ import {
5
5
  applyOpenRouterBaseUrlOverride,
6
6
  checkOpencodeCredentials,
7
7
  resolveContextModePluginPath
8
- } from "./cli-d3p82erb.js";
9
- import"./cli-tng3131n.js";
8
+ } from "./cli-18amys3y.js";
10
9
  import"./cli-5bfdm1ah.js";
11
10
  import"./cli-r94z9p1z.js";
12
- import"./cli-zm7njwzd.js";
13
- import"./cli-s25avqg9.js";
14
11
  import"./cli-2djtr51b.js";
15
- import"./cli-4yc5d8fk.js";
12
+ import"./cli-tng3131n.js";
13
+ import"./cli-zm7njwzd.js";
14
+ import"./cli-e781c6f9.js";
15
+ import"./cli-avkd6mqv.js";
16
16
  import"./cli-re8z5p8p.js";
17
17
  import"./cli-3dpj7atn.js";
18
- import"./cli-c2mk1kgf.js";
18
+ import"./cli-v4en75c5.js";
19
19
  import"./cli-ej6gbxfb.js";
20
20
  import"./cli-r2ap2czm.js";
21
21
  import"./cli-bc05qbss.js";
@@ -4,18 +4,18 @@ import {
4
4
  import {
5
5
  init_package,
6
6
  package_default
7
- } from "./cli-zvkq5csn.js";
7
+ } from "./cli-myaxtgh8.js";
8
8
  import {
9
9
  init_secret_scrubber,
10
10
  scrubSecrets
11
11
  } from "./cli-r2ap2czm.js";
12
- import {
13
- require_src
14
- } from "./cli-knd276ed.js";
15
12
  import {
16
13
  exports_supports_color,
17
14
  init_supports_color
18
15
  } from "./cli-bd957dgb.js";
16
+ import {
17
+ require_src
18
+ } from "./cli-knd276ed.js";
19
19
  import {
20
20
  __commonJS,
21
21
  __require,
@@ -12,7 +12,7 @@ import {
12
12
  AssistantMessageEventStream,
13
13
  appendAssistantMessageDiagnostic,
14
14
  createAssistantMessageDiagnostic
15
- } from "./cli-8wrympd7.js";
15
+ } from "./cli-bzr0ftht.js";
16
16
  import"./cli-bc05qbss.js";
17
17
 
18
18
  // node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js
@@ -56,8 +56,8 @@ function createPiMessagesResponseError(model, url, response, body) {
56
56
  url: url.toString(),
57
57
  status: response.status,
58
58
  statusText: response.statusText,
59
- error: errorBody?.error,
60
- body: errorBody ? undefined : truncateDiagnosticString(body),
59
+ ...errorBody?.error === undefined ? {} : { error: errorBody.error },
60
+ ...errorBody ? {} : { body: truncateDiagnosticString(body) },
61
61
  timestampMs: Date.now()
62
62
  });
63
63
  }