@desplega.ai/agent-swarm 1.152.2 → 1.153.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 (224) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-pfeje2v5.js → acp-adapter-ahmjxhek.js} +4 -4
  3. package/dist/{actions-0sttc7f5.js → actions-jzrfpkmn.js} +30 -26
  4. package/dist/{anthropic-messages-2y8nktar.js → anthropic-messages-9vqsbznt.js} +112 -84
  5. package/dist/{app-p8teva95.js → app-03na2vwb.js} +9 -6
  6. package/dist/{assistant-r45jnsrt.js → assistant-hfkxvhgt.js} +31 -27
  7. package/dist/{azure-openai-responses-f38x2avq.js → azure-openai-responses-04qwdwfq.js} +27 -13
  8. package/dist/{boot-reembed-je26h5y7.js → boot-reembed-c98xrad3.js} +8 -6
  9. package/dist/{boot-reembed-1qmybsd4.js → boot-reembed-zt3qm9xn.js} +9 -7
  10. package/dist/{boot-scrub-logs-gte3h1mm.js → boot-scrub-logs-jcqd8ksj.js} +6 -4
  11. package/dist/{claude-adapter-csc1mzka.js → claude-adapter-mgryg8g3.js} +17 -15
  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-jjf4zss1.js} +17 -15
  14. package/dist/{cli-r2fpe7cx.js → cli-00w2c66p.js} +61 -55
  15. package/dist/{cli-fm4ytsdk.js → cli-0d9nbqxf.js} +1 -1
  16. package/dist/cli-0x5qzvkg.js +4279 -0
  17. package/dist/{cli-d3p82erb.js → cli-18amys3y.js} +9 -9
  18. package/dist/{cli-wbyk465z.js → cli-1hwnb4hc.js} +1 -1
  19. package/dist/{cli-xw7vak96.js → cli-3bcmp015.js} +5 -5
  20. package/dist/cli-3er6gcsn.js +1849 -0
  21. package/dist/{cli-c4eeb5q2.js → cli-5b6b62tz.js} +1 -1
  22. package/dist/{cli-4ahpr4sw.js → cli-5mbmvxnn.js} +5 -5
  23. package/dist/{cli-xy1cchaf.js → cli-5taqtpze.js} +235 -8
  24. package/dist/{cli-fmy65jdn.js → cli-6ks9xf1n.js} +7 -5
  25. package/dist/cli-7g9s78jf.js +2827 -0
  26. package/dist/{cli-jew3jda5.js → cli-7pnz2v6s.js} +2 -2
  27. package/dist/{cli-r84ctdxn.js → cli-83wkg402.js} +2 -2
  28. package/dist/{cli-jvy9qgjs.js → cli-a9scg8sv.js} +4 -4
  29. package/dist/{cli-4yc5d8fk.js → cli-avkd6mqv.js} +50 -0
  30. package/dist/{cli-ht5rs63n.js → cli-b2g6mzjc.js} +15 -6
  31. package/dist/{cli-jbmc0r7r.js → cli-bw0dfwkr.js} +1 -1
  32. package/dist/{cli-8wrympd7.js → cli-bzr0ftht.js} +26 -7
  33. package/dist/{cli-wpv5rgg2.js → cli-cdq08v3r.js} +2 -2
  34. package/dist/cli-cgj4hc12.js +18902 -0
  35. package/dist/cli-d6hk10xx.js +14075 -0
  36. package/dist/{cli-zvgj5zg8.js → cli-djvxhnc4.js} +31 -3324
  37. package/dist/{cli-s25avqg9.js → cli-e781c6f9.js} +1 -0
  38. package/dist/{cli-3bpzj8me.js → cli-eazstkad.js} +2 -2
  39. package/dist/{cli-s2qjdd6z.js → cli-eetrvv91.js} +1 -1
  40. package/dist/cli-h38x0qhg.js +6912 -0
  41. package/dist/{cli-9xvdm3bx.js → cli-h60qfasa.js} +742 -278
  42. package/dist/{pi-mono-adapter-jcqt71cg.js → cli-ja7mrygn.js} +67343 -101083
  43. package/dist/{cli-j8dggbcr.js → cli-k0g1sjzm.js} +23 -31
  44. package/dist/{cli-gphgnvpf.js → cli-m04pt18h.js} +2 -2
  45. package/dist/{cli-rgvp6r2x.js → cli-mcnhgnn1.js} +193 -4
  46. package/dist/{cli-j4nv2wqy.js → cli-mzgyhxbe.js} +10 -4
  47. package/dist/{cli-qn042eh7.js → cli-n0q9b7j4.js} +46 -1870
  48. package/dist/cli-n7h1kqpf.js +29 -0
  49. package/dist/{cli-ckz5t2hb.js → cli-nq0kgyxe.js} +5 -5
  50. package/dist/{cli-z3wkng35.js → cli-qrqhc31j.js} +151 -125
  51. package/dist/{cli-56h18ng2.js → cli-r8tdds6s.js} +1 -1
  52. package/dist/{cli-ch38q5z4.js → cli-rj7de4b2.js} +6788 -2541
  53. package/dist/{cli-qd65dvr6.js → cli-s5s1f2yn.js} +56 -40
  54. package/dist/{cli-kj76p1ez.js → cli-scwq51gn.js} +13 -7
  55. package/dist/{cli-2nnd56zt.js → cli-tdh4hjr2.js} +3 -2
  56. package/dist/{cli-c2mk1kgf.js → cli-v4en75c5.js} +8 -1
  57. package/dist/{cli-b9dd0h3k.js → cli-vw03hg5t.js} +3 -2
  58. package/dist/{cli-zvkq5csn.js → cli-ybpp1srm.js} +6 -6
  59. package/dist/cli-yn0a417a.js +4069 -0
  60. package/dist/{cli-gpqcs935.js → cli-ysc1kbet.js} +2 -2
  61. package/dist/{cli-zfzznn7c.js → cli-ytxs7mn1.js} +26 -2
  62. package/dist/cli-zcsyfw2z.js +3335 -0
  63. package/dist/{cli-4j8k1m4w.js → cli-zt1227k1.js} +1162 -192
  64. package/dist/cli-zy5w9gpt.js +230 -0
  65. package/dist/cli.js +26 -34
  66. package/dist/{codex-adapter-fxmpsabw.js → codex-adapter-8548daap.js} +12 -11
  67. package/dist/{codex-session-runner-rr1e47ea.js → codex-session-runner-2dad8p4x.js} +12 -11
  68. package/dist/{commands-0f5rxz51.js → commands-355dbpa8.js} +6 -4
  69. package/dist/{db-r3jxf3wy.js → db-4jjvwz1s.js} +6 -4
  70. package/dist/{dispatcher-06vph6q4.js → dispatcher-ca590nkz.js} +29 -25
  71. package/dist/dsh-adapter-rgvj6ykp.js +19 -0
  72. package/dist/{e2b-413b8t4v.js → e2b-93x1k0j5.js} +6 -7
  73. package/dist/{google-generative-ai-ndjmj5fa.js → google-generative-ai-xtw7tggr.js} +33 -73
  74. package/dist/{google-vertex-fr665tqs.js → google-vertex-zdqpms6n.js} +38 -68
  75. package/dist/{handlers-0hgtc910.js → handlers-2y6dqpvf.js} +32 -28
  76. package/dist/{hook-9kvrv1er.js → hook-0s8knepr.js} +11 -9
  77. package/dist/{hook-fbfhkat3.js → hook-k0gec254.js} +12 -10
  78. package/dist/{http-xbyx8k5j.js → http-jp2nb4zw.js} +300 -237
  79. package/dist/{index-tfsdxyv6.js → index-0wzg3sp3.js} +39 -24
  80. package/dist/{index-rnyahfn5.js → index-3mq6ce93.js} +29 -25
  81. package/dist/{index-jsw3aynb.js → index-42s7eezq.js} +29 -25
  82. package/dist/{cli-pdz9qde4.js → index-9ch1n761.js} +10 -11
  83. package/dist/{index-gpfn1741.js → index-b56xkbc7.js} +8 -6
  84. package/dist/{index-66xz5e9j.js → index-h5gs261z.js} +521 -9
  85. package/dist/{index-2sp0384z.js → index-kkeftv5h.js} +738 -21
  86. package/dist/{index-sgk50mbg.js → index-s37dbevy.js} +30 -26
  87. package/dist/index-w097eg0x.js +5 -0
  88. package/dist/jiti-loader-b4837mtm.js +34 -0
  89. package/dist/jiti-static-loader-q2g5ds0y.js +31267 -0
  90. package/dist/{keepalive-s3xpr7sw.js → keepalive-9pfw7t02.js} +8 -6
  91. package/dist/{lead-rq4n5r16.js → lead-7vcmcdq4.js} +44 -39
  92. package/dist/{maintenance-f0atj1ab.js → maintenance-x277jbpd.js} +9 -7
  93. package/dist/{mistral-conversations-qhr84ph3.js → mistral-conversations-zx0kn554.js} +24 -18
  94. package/dist/{node-x1g4v0pq.js → node-5qtycf6a.js} +16 -11
  95. package/dist/{oauth-refresh-sweep-q0t3bxre.js → oauth-refresh-sweep-5fwa7th2.js} +7 -5
  96. package/dist/{onboard-br5j1kch.js → onboard-17sv0f51.js} +103 -35
  97. package/dist/{openai-codex-responses-wy6a43wd.js → openai-codex-responses-4vjqzvjp.js} +33 -27
  98. package/dist/{openai-completions-32rdwmze.js → openai-completions-pxsmym7g.js} +52 -64
  99. package/dist/{openai-responses-6xwf7bzg.js → openai-responses-tmn0rqp0.js} +23 -24
  100. package/dist/{opencode-adapter-28axqa09.js → opencode-adapter-qbmv4tpy.js} +6 -6
  101. package/dist/{otel-impl-vdqge2nt.js → otel-impl-srjy4be4.js} +4 -4
  102. package/dist/{pi-messages-b1mbr6gp.js → pi-messages-txpjj39q.js} +3 -3
  103. package/dist/pi-mono-adapter-946a0sdd.js +1316 -0
  104. package/dist/{pricing-refresh-hb3691fd.js → pricing-refresh-vetcm563.js} +8 -6
  105. package/dist/{rbac-roles-jh280k9g.js → rbac-roles-cfzgr6r1.js} +8 -6
  106. package/dist/{rbac-roles-t78xt39b.js → rbac-roles-cmxaddmy.js} +7 -5
  107. package/dist/{render-v2-7p8r2ymg.js → render-v2-f9hzff72.js} +9 -6
  108. package/dist/{seed-pricing-hf889enh.js → seed-pricing-jggk6rsy.js} +7 -5
  109. package/dist/{setup-w6mb03jv.js → setup-8mfceb9t.js} +4 -5
  110. package/dist/virtual-modules-ax661xp0.js +54 -0
  111. package/dist/{work-objects-nt8gy1kj.js → work-objects-vdsdcczj.js} +32 -28
  112. package/dist/{worker-dwy617t0.js → worker-cd0nhyv1.js} +44 -39
  113. package/openapi.json +36 -14
  114. package/package.json +6 -6
  115. package/src/be/automation-preflight.ts +6 -4
  116. package/src/be/extensions/db.ts +35 -4
  117. package/src/be/models-catalog.ts +2 -0
  118. package/src/be/modelsdev-cache.json +213 -0
  119. package/src/be/rbac-audit.ts +2 -0
  120. package/src/be/seed-pricing.ts +3 -1
  121. package/src/be/swarm-config-guard.ts +1 -0
  122. package/src/commands/onboard/compose-generator.ts +6 -1
  123. package/src/commands/onboard/env-generator.ts +6 -1
  124. package/src/commands/onboard/manifest.ts +1 -0
  125. package/src/commands/onboard/steps/integration-slack.tsx +56 -16
  126. package/src/commands/onboard/steps/review.tsx +5 -0
  127. package/src/commands/onboard/types.ts +6 -0
  128. package/src/commands/onboard.tsx +5 -1
  129. package/src/commands/provider-credentials.ts +14 -2
  130. package/src/extensions/lifecycle.ts +15 -21
  131. package/src/http/agents.ts +2 -2
  132. package/src/http/config.ts +1 -1
  133. package/src/http/core.ts +5 -3
  134. package/src/http/extensions.ts +108 -34
  135. package/src/http/status.ts +22 -10
  136. package/src/prompts/base-prompt.ts +15 -7
  137. package/src/providers/claude-managed-models.ts +8 -0
  138. package/src/providers/codex-models.ts +15 -1
  139. package/src/providers/dsh-adapter.ts +248 -0
  140. package/src/providers/index.ts +5 -1
  141. package/src/providers/modelsdev-reasoning.json +50 -0
  142. package/src/rbac/legacy-policy.ts +15 -1
  143. package/src/rbac/types.ts +2 -0
  144. package/src/server.ts +7 -1
  145. package/src/slack/app.ts +32 -10
  146. package/src/slack/config.ts +29 -0
  147. package/src/telemetry.ts +2 -3
  148. package/src/tests/agents-harness-provider.test.ts +19 -0
  149. package/src/tests/agents-list-model-display.test.ts +60 -1
  150. package/src/tests/base-prompt.test.ts +25 -0
  151. package/src/tests/claude-managed-adapter.test.ts +6 -0
  152. package/src/tests/codex-gpt6-release.test.ts +97 -0
  153. package/src/tests/config-api-only-keys.test.ts +9 -0
  154. package/src/tests/context-window.test.ts +1 -0
  155. package/src/tests/dsh-adapter.test.ts +276 -0
  156. package/src/tests/e2e-nightly-report.test.ts +3 -3
  157. package/src/tests/e2e-redact.test.ts +2 -0
  158. package/src/tests/env-flag.test.ts +6 -0
  159. package/src/tests/extensions-db.test.ts +41 -0
  160. package/src/tests/extensions-http.test.ts +148 -4
  161. package/src/tests/extensions-lifecycle.test.ts +18 -0
  162. package/src/tests/extensions-mcp-tools.test.ts +9 -5
  163. package/src/tests/internal-ai/complete-structured.test.ts +32 -9
  164. package/src/tests/internal-ai/credentials.test.ts +4 -4
  165. package/src/tests/internal-ai/models.test.ts +20 -0
  166. package/src/tests/migration-046-budgets.test.ts +2 -0
  167. package/src/tests/model-control.test.ts +2 -2
  168. package/src/tests/onboard-compose.test.ts +14 -0
  169. package/src/tests/onboard-env.test.ts +17 -0
  170. package/src/tests/onboard-manifest.test.ts +12 -0
  171. package/src/tests/opus-5-5-registry.test.ts +48 -0
  172. package/src/tests/pricing-refresh.test.ts +1 -1
  173. package/src/tests/pricing-routes.test.ts +15 -3
  174. package/src/tests/provider-registration.test.ts +5 -2
  175. package/src/tests/rbac-admission-e2e.test.ts +54 -0
  176. package/src/tests/rbac-e2e-helpers.ts +2 -0
  177. package/src/tests/rbac-engine.test.ts +32 -0
  178. package/src/tests/rbac-wire-e2e.test.ts +33 -0
  179. package/src/tests/reasoning-effort.test.ts +8 -0
  180. package/src/tests/reload-config.test.ts +33 -0
  181. package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
  182. package/src/tests/slack-config.test.ts +136 -0
  183. package/src/tests/slack-mode-lifecycle.test.ts +69 -0
  184. package/src/tests/status.test.ts +22 -2
  185. package/src/tests/task-tool-preload-mcp.test.ts +3 -1
  186. package/src/tests/telemetry-init.test.ts +18 -0
  187. package/src/tests/workflow-llm.test.ts +3 -3
  188. package/src/tools/extension-common.ts +4 -0
  189. package/src/tools/extension-install.ts +1 -1
  190. package/src/tools/extension-list.ts +4 -3
  191. package/src/types.ts +17 -8
  192. package/src/utils/context-window.ts +1 -0
  193. package/src/utils/credentials.ts +8 -0
  194. package/src/utils/internal-ai/complete-structured.ts +8 -0
  195. package/src/utils/internal-ai/models.ts +5 -5
  196. package/templates/schedules/daily-status-report/content.md +25 -12
  197. package/templates/schedules/daily-workflow-health-audit/content.md +1 -1
  198. package/templates/skills/swarm-extensions/content.md +9 -5
  199. package/dist/cli-4wppfkcm.js +0 -16384
  200. package/dist/cli-55qrx3q8.js +0 -6041
  201. package/dist/cli-cg4vnyh4.js +0 -305
  202. package/dist/cli-jyetr64j.js +0 -52
  203. package/dist/cli-pp9ax9pa.js +0 -520
  204. package/dist/cli-qa66qaf0.js +0 -6076
  205. package/dist/cli-qghpvca2.js +0 -590
  206. package/dist/cli-rembwgt8.js +0 -861
  207. package/dist/cli-tcvj7j2r.js +0 -1971
  208. package/dist/cli-vfcth11k.js +0 -36
  209. package/dist/cli-w1d1bgkk.js +0 -1422
  210. package/dist/cli-y6x0gqtg.js +0 -5977
  211. package/dist/es5-tj3tn4jj.js +0 -844
  212. package/dist/index-1kq5hw2p.js +0 -467
  213. package/dist/index-1p8wdstt.js +0 -7
  214. package/dist/index-8fdjzb2f.js +0 -100
  215. package/dist/index-bxmwzbgw.js +0 -365
  216. package/dist/index-nzerxd5z.js +0 -7
  217. package/dist/index-pyymnzat.js +0 -1168
  218. package/dist/index-qv6atbab.js +0 -619
  219. package/dist/index-rja32qa7.js +0 -801
  220. package/dist/index-tzg5srfp.js +0 -211
  221. package/dist/index-vhncw983.js +0 -90
  222. package/dist/index-xk036zsk.js +0 -859
  223. package/dist/index-zyazbzcb.js +0 -6
  224. package/dist/{claude-managed-setup-48dwg9bv.js → claude-managed-setup-f5pmsyrp.js} +3 -3
@@ -1,3 +1,7 @@
1
+ import {
2
+ getSystemMessageText
3
+ } from "./cli-mcnhgnn1.js";
4
+
1
5
  // node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js
2
6
  class UnsupportedStrictJsonSchemaError extends Error {
3
7
  }
@@ -243,6 +247,9 @@ function estimateTextAndImageContentTokens(content) {
243
247
  }
244
248
  function estimateMessageTokens(message) {
245
249
  let chars = 0;
250
+ if (message.role === "system") {
251
+ return estimateTextTokens(getSystemMessageText(message)) + estimateToolsTokens(message.toolsAdded) + estimateToolsTokens(message.toolsRemoved);
252
+ }
246
253
  if (message.role === "user")
247
254
  return estimateTextAndImageContentTokens(message.content);
248
255
  if (message.role === "toolResult")
@@ -274,7 +281,8 @@ function getLastAssistantUsageInfo(messages) {
274
281
  }
275
282
  return usageInfo;
276
283
  }
277
- function estimateMessages(messages) {
284
+ function estimateContextTokens(context) {
285
+ const messages = "messages" in context ? context.messages : context;
278
286
  const usageInfo = getLastAssistantUsageInfo(messages);
279
287
  if (usageInfo) {
280
288
  const usageTokens = calculateContextTokens(usageInfo.usage);
@@ -294,31 +302,6 @@ function estimateToolsTokens(tools) {
294
302
  return 0;
295
303
  return estimateTextTokens(safeJsonStringify(tools));
296
304
  }
297
- function isMessageArray(value) {
298
- return Array.isArray(value);
299
- }
300
- function estimateContextTokens(context) {
301
- if (isMessageArray(context))
302
- return estimateMessages(context);
303
- const estimate = estimateMessages(context.messages);
304
- if (estimate.lastUsageIndex !== null) {
305
- const addedNames = new Set(context.messages.slice(estimate.lastUsageIndex + 1).filter((message) => message.role === "toolResult").flatMap((message) => message.addedToolNames ?? []));
306
- const addedToolTokens = estimateToolsTokens(context.tools?.filter((tool) => addedNames.has(tool.name)));
307
- return {
308
- tokens: estimate.tokens + addedToolTokens,
309
- usageTokens: estimate.usageTokens,
310
- trailingTokens: estimate.trailingTokens + addedToolTokens,
311
- lastUsageIndex: estimate.lastUsageIndex
312
- };
313
- }
314
- const prefixTokens = (context.systemPrompt ? estimateTextTokens(context.systemPrompt) : 0) + estimateToolsTokens(context.tools);
315
- return {
316
- tokens: estimate.tokens + prefixTokens,
317
- usageTokens: estimate.usageTokens,
318
- trailingTokens: estimate.trailingTokens + prefixTokens,
319
- lastUsageIndex: estimate.lastUsageIndex
320
- };
321
- }
322
305
 
323
306
  // node_modules/@earendil-works/pi-ai/dist/api/simple-options.js
324
307
  var CONTEXT_SAFETY_TOKENS = 4096;
@@ -424,7 +407,7 @@ function transformMessages(messages, model, normalizeToolCallId) {
424
407
  const normalizedMessages = messages.map((msg) => msg.content == null ? { ...msg, content: [] } : msg);
425
408
  const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model);
426
409
  const transformed = imageAwareMessages.map((msg) => {
427
- if (msg.role === "user") {
410
+ if (msg.role === "system" || msg.role === "user") {
428
411
  return msg;
429
412
  }
430
413
  if (msg.role === "toolResult") {
@@ -489,7 +472,8 @@ function transformMessages(messages, model, normalizeToolCallId) {
489
472
  const result = [];
490
473
  let pendingToolCalls = [];
491
474
  let existingToolResultIds = new Set;
492
- const insertSyntheticToolResults = () => {
475
+ const heldSystemMessages = [];
476
+ const closePendingToolCalls = () => {
493
477
  if (pendingToolCalls.length > 0) {
494
478
  for (const tc of pendingToolCalls) {
495
479
  if (!existingToolResultIds.has(tc.id)) {
@@ -506,11 +490,13 @@ function transformMessages(messages, model, normalizeToolCallId) {
506
490
  pendingToolCalls = [];
507
491
  existingToolResultIds = new Set;
508
492
  }
493
+ result.push(...heldSystemMessages);
494
+ heldSystemMessages.length = 0;
509
495
  };
510
496
  for (let i = 0;i < transformed.length; i++) {
511
497
  const msg = transformed[i];
512
498
  if (msg.role === "assistant") {
513
- insertSyntheticToolResults();
499
+ closePendingToolCalls();
514
500
  const assistantMsg = msg;
515
501
  if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") {
516
502
  continue;
@@ -524,14 +510,20 @@ function transformMessages(messages, model, normalizeToolCallId) {
524
510
  } else if (msg.role === "toolResult") {
525
511
  existingToolResultIds.add(msg.toolCallId);
526
512
  result.push(msg);
513
+ } else if (msg.role === "system") {
514
+ if (pendingToolCalls.length > 0) {
515
+ heldSystemMessages.push(msg);
516
+ } else {
517
+ result.push(msg);
518
+ }
527
519
  } else if (msg.role === "user") {
528
- insertSyntheticToolResults();
520
+ closePendingToolCalls();
529
521
  result.push(msg);
530
522
  } else {
531
523
  result.push(msg);
532
524
  }
533
525
  }
534
- insertSyntheticToolResults();
526
+ closePendingToolCalls();
535
527
  return result;
536
528
  }
537
529
 
@@ -15,7 +15,7 @@ import {
15
15
  recoverIncompleteRuns,
16
16
  repointTrackerSyncBySwarmId,
17
17
  resolveLeadOnlyRecoveryAssignment
18
- } from "./cli-z3wkng35.js";
18
+ } from "./cli-qrqhc31j.js";
19
19
  import {
20
20
  isMultiRuntimeEnabled
21
21
  } from "./cli-re8z5p8p.js";
@@ -61,7 +61,7 @@ import {
61
61
  releaseStaleReviewingTasks,
62
62
  supersedeTask,
63
63
  updateAgentStatus
64
- } from "./cli-zvgj5zg8.js";
64
+ } from "./cli-djvxhnc4.js";
65
65
  import {
66
66
  init_registry,
67
67
  init_resolver,
@@ -1,7 +1,194 @@
1
1
  import {
2
2
  AssistantMessageEventStream,
3
3
  formatThrownValue
4
- } from "./cli-8wrympd7.js";
4
+ } from "./cli-bzr0ftht.js";
5
+
6
+ // node_modules/@earendil-works/pi-ai/dist/utils/text.js
7
+ function contentText(content, separator = `
8
+ `) {
9
+ if (typeof content === "string")
10
+ return content;
11
+ return content.filter((block) => block.type === "text").map((block) => block.text).join(separator);
12
+ }
13
+ function getSystemMessageText(message) {
14
+ const parts = [contentText(message.content)];
15
+ for (const text of Object.values(message.sections ?? {})) {
16
+ if (text !== null)
17
+ parts.push(text);
18
+ }
19
+ return parts.filter((part) => part.length > 0).join(`
20
+
21
+ `);
22
+ }
23
+ function renderSystemMessageUpdate(message) {
24
+ const parts = [];
25
+ const text = contentText(message.content);
26
+ if (text.length > 0)
27
+ parts.push(text);
28
+ for (const [name, value] of Object.entries(message.sections ?? {})) {
29
+ parts.push(value === null ? `Removed system prompt section "${name}".` : `Updated system prompt section "${name}":
30
+
31
+ ${value}`);
32
+ }
33
+ return parts.join(`
34
+
35
+ `);
36
+ }
37
+
38
+ // node_modules/@earendil-works/pi-ai/dist/utils/transcript.js
39
+ function createInitialSystemMessage(systemPrompt, tools) {
40
+ const hasSystemPrompt = systemPrompt !== undefined && systemPrompt.length > 0;
41
+ const hasTools = tools !== undefined && tools.length > 0;
42
+ if (!hasSystemPrompt && !hasTools)
43
+ return;
44
+ return {
45
+ role: "system",
46
+ content: systemPrompt ?? "",
47
+ ...hasTools ? { toolsAdded: tools } : {},
48
+ timestamp: 0
49
+ };
50
+ }
51
+ function normalizeContext(context) {
52
+ const initialMessage = createInitialSystemMessage(context.systemPrompt, context.tools);
53
+ const messages = initialMessage ? [initialMessage, ...context.messages] : context.messages;
54
+ return { messages };
55
+ }
56
+ function isSystemMessage(message) {
57
+ return message.role === "system";
58
+ }
59
+ function getInitialSystemMessage(messages) {
60
+ const first = messages[0];
61
+ return first && isSystemMessage(first) ? first : undefined;
62
+ }
63
+ function withoutInitialSystemMessage(messages) {
64
+ return getInitialSystemMessage(messages) ? messages.slice(1) : messages;
65
+ }
66
+ function getCurrentTools(messages) {
67
+ const tools = new Map;
68
+ for (const message of messages) {
69
+ if (!isSystemMessage(message))
70
+ continue;
71
+ for (const tool of message.toolsRemoved ?? [])
72
+ tools.delete(tool.name);
73
+ for (const tool of message.toolsAdded ?? [])
74
+ tools.set(tool.name, tool);
75
+ }
76
+ return [...tools.values()];
77
+ }
78
+ function getCurrentSystemMessage(messages) {
79
+ const content = [];
80
+ const sections = new Map;
81
+ let timestamp;
82
+ for (const message of messages) {
83
+ if (!isSystemMessage(message))
84
+ continue;
85
+ timestamp ??= message.timestamp;
86
+ const text = contentText(message.content);
87
+ if (text.length > 0)
88
+ content.push(text);
89
+ for (const [name, value] of Object.entries(message.sections ?? {})) {
90
+ if (value === null)
91
+ sections.delete(name);
92
+ else
93
+ sections.set(name, value);
94
+ }
95
+ }
96
+ const tools = getCurrentTools(messages);
97
+ if (timestamp === undefined && tools.length === 0)
98
+ return;
99
+ return {
100
+ role: "system",
101
+ content: content.join(`
102
+
103
+ `),
104
+ ...sections.size > 0 ? { sections: Object.fromEntries(sections) } : {},
105
+ ...tools.length > 0 ? { toolsAdded: tools } : {},
106
+ timestamp: timestamp ?? 0
107
+ };
108
+ }
109
+ function getCurrentSystemPrompt(messages) {
110
+ const message = getCurrentSystemMessage(messages);
111
+ return message ? getSystemMessageText(message) : "";
112
+ }
113
+ function collapseSystemMessages(context) {
114
+ const head = getCurrentSystemMessage(context.messages);
115
+ const messages = context.messages.filter((message) => message.role !== "system");
116
+ return { messages: head ? [head, ...messages] : messages };
117
+ }
118
+ function resolveTranscript(context, supportsMidConvoSystemMessages) {
119
+ return supportsMidConvoSystemMessages ? context : collapseSystemMessages(context);
120
+ }
121
+ function toToolDeclaration(tool) {
122
+ return {
123
+ name: tool.name,
124
+ description: tool.description,
125
+ parameters: JSON.parse(JSON.stringify(tool.parameters)),
126
+ ...tool.constrainedSampling === undefined ? {} : { constrainedSampling: tool.constrainedSampling }
127
+ };
128
+ }
129
+ function declarationsEqual(left, right) {
130
+ return JSON.stringify(toToolDeclaration(left)) === JSON.stringify(toToolDeclaration(right));
131
+ }
132
+ function getToolStateChanges(previous, current) {
133
+ const previousTools = new Map(previous.map((tool) => [tool.name, tool]));
134
+ const currentTools = new Map(current.map((tool) => [tool.name, tool]));
135
+ return {
136
+ toolsAdded: current.filter((tool) => {
137
+ const previousTool = previousTools.get(tool.name);
138
+ return previousTool === undefined || !declarationsEqual(previousTool, tool);
139
+ }).map(toToolDeclaration),
140
+ toolsRemoved: previous.filter((tool) => {
141
+ const currentTool = currentTools.get(tool.name);
142
+ return currentTool === undefined || !declarationsEqual(tool, currentTool);
143
+ }).map((tool) => ({ name: tool.name }))
144
+ };
145
+ }
146
+ function getDeclaredTools(messages) {
147
+ const definitions = new Map;
148
+ for (const message of messages) {
149
+ if (!isSystemMessage(message))
150
+ continue;
151
+ for (const tool of message.toolsAdded ?? [])
152
+ definitions.set(tool.name, tool);
153
+ }
154
+ return [...definitions.values()];
155
+ }
156
+ function hasToolRedefinitions(messages) {
157
+ const declared = new Map;
158
+ for (const message of messages) {
159
+ if (!isSystemMessage(message))
160
+ continue;
161
+ for (const tool of message.toolsAdded ?? []) {
162
+ const previous = declared.get(tool.name);
163
+ if (previous !== undefined && !declarationsEqual(previous, tool))
164
+ return true;
165
+ declared.set(tool.name, tool);
166
+ }
167
+ }
168
+ return false;
169
+ }
170
+ function hasNonAdditiveToolChanges(messages) {
171
+ const declared = new Set;
172
+ for (const message of messages) {
173
+ if (!isSystemMessage(message))
174
+ continue;
175
+ if ((message.toolsRemoved?.length ?? 0) > 0)
176
+ return true;
177
+ for (const tool of message.toolsAdded ?? []) {
178
+ if (declared.has(tool.name))
179
+ return true;
180
+ declared.add(tool.name);
181
+ }
182
+ }
183
+ return false;
184
+ }
185
+ function resolveTranscriptTools(messages, supportsToolAdditions) {
186
+ const anchorsAdditions = supportsToolAdditions && !hasNonAdditiveToolChanges(messages);
187
+ return {
188
+ requestTools: anchorsAdditions ? getInitialSystemMessage(messages)?.toolsAdded ?? [] : getCurrentTools(messages),
189
+ anchorsAdditions
190
+ };
191
+ }
5
192
 
6
193
  // node_modules/@earendil-works/pi-ai/dist/api/lazy.js
7
194
  function createSetupErrorMessage(model, error) {
@@ -674,20 +861,22 @@ class ModelsImpl {
674
861
  return { requestModel, requestOptions };
675
862
  }
676
863
  stream(model, context, options) {
864
+ const transcript = normalizeContext(context);
677
865
  return lazyStream(model, async () => {
678
866
  const provider = this.requireProvider(model);
679
867
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
680
- return provider.stream(requestModel, context, requestOptions);
868
+ return provider.stream(requestModel, transcript, requestOptions);
681
869
  });
682
870
  }
683
871
  async complete(model, context, options) {
684
872
  return this.stream(model, context, options).result();
685
873
  }
686
874
  streamSimple(model, context, options) {
875
+ const transcript = normalizeContext(context);
687
876
  return lazyStream(model, async () => {
688
877
  const provider = this.requireProvider(model);
689
878
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
690
- return provider.streamSimple(requestModel, context, requestOptions);
879
+ return provider.streamSimple(requestModel, transcript, requestOptions);
691
880
  });
692
881
  }
693
882
  async completeSimple(model, context, options) {
@@ -860,4 +1049,4 @@ function modelsAreEqual(a, b) {
860
1049
  return a.id === b.id && a.provider === b.provider;
861
1050
  }
862
1051
 
863
- export { lazyStream, lazyApi, defaultProviderAuthContext, InMemoryCredentialStore, ModelsError, resolveProviderAuth, InMemoryModelsStore, createModels, createProvider, hasApi, calculateCost, getSupportedThinkingLevels, clampThinkingLevel, modelsAreEqual };
1052
+ export { lazyStream, lazyApi, defaultProviderAuthContext, InMemoryCredentialStore, ModelsError, resolveProviderAuth, InMemoryModelsStore, contentText, getSystemMessageText, renderSystemMessageUpdate, createInitialSystemMessage, normalizeContext, getInitialSystemMessage, withoutInitialSystemMessage, getCurrentTools, getCurrentSystemMessage, getCurrentSystemPrompt, collapseSystemMessages, resolveTranscript, toToolDeclaration, declarationsEqual, getToolStateChanges, getDeclaredTools, hasToolRedefinitions, hasNonAdditiveToolChanges, resolveTranscriptTools, createModels, createProvider, hasApi, calculateCost, getSupportedThinkingLevels, clampThinkingLevel, modelsAreEqual };
@@ -2,16 +2,18 @@ import {
2
2
  BASE_SUMMARIZE_PROMPT,
3
3
  SummaryWithRatingsSchema,
4
4
  buildSummaryWithRatingsPrompt,
5
- complete,
6
- exports_typebox,
7
- getBuiltinModel,
8
5
  parseModelStr,
9
6
  resolveCredential
10
- } from "./cli-4wppfkcm.js";
7
+ } from "./cli-7g9s78jf.js";
11
8
  import {
12
9
  DEFAULT_OPENROUTER_BASE_URL,
13
10
  getOpenRouterBaseUrl
14
11
  } from "./cli-3dpj7atn.js";
12
+ import {
13
+ complete,
14
+ exports_typebox,
15
+ getBuiltinModel
16
+ } from "./cli-d6hk10xx.js";
15
17
  import {
16
18
  init_zod
17
19
  } from "./cli-sd0mxa3c.js";
@@ -159,6 +161,10 @@ ${claudeUserPrompt}`, cred.modelDefault, opts.signal, jsonSchema);
159
161
  console.error(`internal-ai: getModel(${provider}, ${modelId}) threw (callerTag=${callerTag})`, err);
160
162
  return null;
161
163
  }
164
+ if (!model) {
165
+ console.error(scrubSecrets(`internal-ai: unknown model ${provider}/${modelId} (callerTag=${callerTag})`));
166
+ return null;
167
+ }
162
168
  const openRouterBaseUrl = getOpenRouterBaseUrl(opts.env ?? process.env);
163
169
  if (provider === "openrouter" && openRouterBaseUrl !== DEFAULT_OPENROUTER_BASE_URL) {
164
170
  model = { ...model, baseUrl: openRouterBaseUrl };