@desplega.ai/agent-swarm 1.136.0 → 1.138.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 (210) hide show
  1. package/README.md +12 -3
  2. package/dist/acp-adapter-6nttxe2q.js +4787 -0
  3. package/dist/{actions-agcbc8nd.js → actions-z9dzgh3f.js} +7 -8
  4. package/dist/{app-g2s78xya.js → app-wb6bc7tt.js} +4 -5
  5. package/dist/{assistant-yd3jkb9d.js → assistant-08pd6pgy.js} +9 -10
  6. package/dist/{boot-reembed-6spqw4q0.js → boot-reembed-hstr4e2c.js} +4 -4
  7. package/dist/{boot-reembed-b22s9w5x.js → boot-reembed-y7p7qjbf.js} +5 -5
  8. package/dist/{boot-scrub-logs-6h3cqkc0.js → boot-scrub-logs-azbnxwhn.js} +3 -3
  9. package/dist/{claude-adapter-ng5y8zd7.js → claude-adapter-rwaq6eda.js} +10 -9
  10. package/dist/{claude-managed-adapter-5zr3n86v.js → claude-managed-adapter-vtseey1x.js} +3 -3
  11. package/dist/{cli-qckgdqmr.js → cli-005yr57a.js} +2 -2
  12. package/dist/{cli-54ht104h.js → cli-0cka8dnm.js} +3 -3
  13. package/dist/{cli-gpdtxzar.js → cli-23cpnqk9.js} +1 -1
  14. package/dist/{cli-qhfkxrpg.js → cli-2ypjdmqg.js} +223 -474
  15. package/dist/{cli-bnq8h7ea.js → cli-3719ggyf.js} +17 -10
  16. package/dist/cli-390sgxn5.js +257 -0
  17. package/dist/{cli-z6e8eqrm.js → cli-47esr8ht.js} +2 -2
  18. package/dist/{cli-jjhnma34.js → cli-4jaj24py.js} +248 -101
  19. package/dist/{cli-6gwgzdgw.js → cli-69377c2a.js} +5 -5
  20. package/dist/{cli-ads0hfw2.js → cli-6v4d8r8c.js} +205 -75
  21. package/dist/{cli-mgef08pc.js → cli-8rtyss6g.js} +1 -1
  22. package/dist/{cli-35jknh9e.js → cli-9w7vsmbm.js} +5 -5
  23. package/dist/{cli-m3z53bed.js → cli-b4zdc3x6.js} +1 -1
  24. package/dist/{cli-fpjmcbhz.js → cli-ba87cw29.js} +4 -4
  25. package/dist/{cli-4gzv54ss.js → cli-bzk75kdc.js} +43 -11
  26. package/dist/{cli-d5ygfv18.js → cli-cywkhzqs.js} +35 -11
  27. package/dist/{cli-0crn5kaz.js → cli-d62cd9qs.js} +16 -4
  28. package/dist/{cli-5bnz1t86.js → cli-f9skf1v7.js} +51 -7
  29. package/dist/{cli-06ghj6pe.js → cli-fytpjraz.js} +4 -4
  30. package/dist/{cli-j7qp8gtf.js → cli-h7c5dam1.js} +16 -11
  31. package/dist/{cli-4r4jkqep.js → cli-kkn46gfr.js} +9 -3
  32. package/dist/{cli-tmn19cdz.js → cli-kq9htgbr.js} +415 -62
  33. package/dist/{cli-8v57p983.js → cli-pkmqqxp8.js} +45 -69
  34. package/dist/{cli-84vrhesc.js → cli-qf34ej1d.js} +1 -1
  35. package/dist/{cli-v3qda694.js → cli-rnyttbh0.js} +0 -5
  36. package/dist/cli-rx5cxzn2.js +7 -0
  37. package/dist/{cli-cw70hymf.js → cli-s25avqg9.js} +2 -0
  38. package/dist/{cli-tee8w7tq.js → cli-s6t1qv67.js} +15 -10
  39. package/dist/{cli-68vayryq.js → cli-tb4csb08.js} +2 -2
  40. package/dist/{cli-y16cesaq.js → cli-vy48y9bx.js} +2 -2
  41. package/dist/{cli-3y553gws.js → cli-y294regh.js} +1 -1
  42. package/dist/{cli-spf767vc.js → cli-y43043ws.js} +1 -1
  43. package/dist/{cli-hz5hp6wn.js → cli-yh2eybyt.js} +1 -1
  44. package/dist/{cli-edwrx42s.js → cli-zmyxt25p.js} +5 -5
  45. package/dist/cli.js +40 -18
  46. package/dist/{codex-adapter-kw11ps3j.js → codex-adapter-yzep6mvb.js} +7 -6
  47. package/dist/{codex-session-runner-sffb69v7.js → codex-session-runner-25e8tn72.js} +7 -6
  48. package/dist/{commands-0xxp4tz8.js → commands-0vv72d6a.js} +3 -3
  49. package/dist/{db-0npp39zd.js → db-x61ncfa1.js} +19 -3
  50. package/dist/{google-generative-ai-6xxdj4t3.js → google-generative-ai-zyhy3dab.js} +1 -1
  51. package/dist/{google-vertex-zma18wb0.js → google-vertex-t25h65yd.js} +1 -1
  52. package/dist/{handlers-5p7a1jx6.js → handlers-fwdcaahf.js} +9 -10
  53. package/dist/{hook-jjpxn4se.js → hook-mpwfgynm.js} +6 -5
  54. package/dist/{hook-hpefr0a8.js → hook-x18504ja.js} +8 -7
  55. package/dist/{http-wfp33653.js → http-83m6qdds.js} +590 -192
  56. package/dist/{index-pe58mf1r.js → index-1nsdwvn5.js} +2 -1
  57. package/dist/{index-17h657rg.js → index-38f98ck3.js} +9 -9
  58. package/dist/{index-m2p7ctyh.js → index-7kxvtd38.js} +24 -12
  59. package/dist/{index-racb4wfq.js → index-a4naswjn.js} +23 -10
  60. package/dist/{index-p13cfsc2.js → index-agykc6k2.js} +2 -1
  61. package/dist/{index-zh66wm65.js → index-dawtzfhw.js} +22 -9
  62. package/dist/{keepalive-wxjd633a.js → keepalive-y0m8g5wn.js} +5 -5
  63. package/dist/{lead-359ec2z0.js → lead-ka18ef6a.js} +36 -36
  64. package/dist/{maintenance-rr03qjtb.js → maintenance-x585p56c.js} +5 -5
  65. package/dist/{oauth-refresh-sweep-jwj22yb8.js → oauth-refresh-sweep-kdm9vj7a.js} +4 -4
  66. package/dist/{onboard-asnhchcv.js → onboard-5v229nvt.js} +664 -248
  67. package/dist/{opencode-adapter-sx38y7f7.js → opencode-adapter-46nnmnvv.js} +3 -3
  68. package/dist/{otel-impl-54cra6mw.js → otel-impl-k47aj4sd.js} +73 -4
  69. package/dist/{pi-mono-adapter-29g7axgj.js → pi-mono-adapter-wawfj09v.js} +42 -40
  70. package/dist/{pricing-refresh-mkyy7c2y.js → pricing-refresh-ky2gjp05.js} +5 -5
  71. package/dist/{rbac-roles-kb3afm95.js → rbac-roles-0j0f7s8r.js} +4 -4
  72. package/dist/{rbac-roles-ak56tr75.js → rbac-roles-az4wc15e.js} +3 -3
  73. package/dist/{render-v2-434asg49.js → render-v2-seyxq61z.js} +4 -5
  74. package/dist/{seed-pricing-nbmd7ah8.js → seed-pricing-fev611hx.js} +4 -4
  75. package/dist/{setup-wh4qmjs4.js → setup-hy404zwh.js} +2 -2
  76. package/dist/{worker-j1d27tjv.js → worker-g1j5hn16.js} +36 -36
  77. package/openapi.json +197 -27
  78. package/package.json +9 -3
  79. package/src/be/db-client.ts +58 -5
  80. package/src/be/db-retention.ts +550 -121
  81. package/src/be/db.ts +367 -55
  82. package/src/be/memory/raters/retrieval.ts +40 -0
  83. package/src/be/migrations/140_approval_request_cancelled_status.sql +64 -0
  84. package/src/be/pricing-normalize.ts +3 -0
  85. package/src/be/script-connections.ts +26 -6
  86. package/src/be/seed-pricing.ts +18 -8
  87. package/src/be/swarm-config-guard.ts +33 -0
  88. package/src/cli.tsx +20 -1
  89. package/src/commands/onboard/compose-generator.ts +63 -7
  90. package/src/commands/onboard/env-generator.ts +32 -4
  91. package/src/commands/onboard/manifest.ts +4 -1
  92. package/src/commands/onboard/non-interactive.ts +159 -0
  93. package/src/commands/onboard/steps/generate.tsx +1 -34
  94. package/src/commands/onboard/steps/harness-credentials.tsx +181 -1
  95. package/src/commands/onboard/steps/harness.tsx +20 -6
  96. package/src/commands/onboard/steps/review.tsx +3 -2
  97. package/src/commands/onboard/types.ts +48 -1
  98. package/src/commands/onboard.tsx +18 -13
  99. package/src/commands/provider-credentials.ts +17 -3
  100. package/src/commands/runner.ts +1 -0
  101. package/src/heartbeat/heartbeat.ts +47 -7
  102. package/src/http/approval-requests.ts +53 -8
  103. package/src/http/index.ts +9 -1
  104. package/src/http/mcp-servers.ts +2 -0
  105. package/src/http/memory.ts +27 -1
  106. package/src/http/oauth-callback.ts +33 -0
  107. package/src/http/repos.ts +6 -0
  108. package/src/http/script-connections.ts +77 -0
  109. package/src/http/session-data.ts +5 -1
  110. package/src/http/stats.ts +21 -30
  111. package/src/http/tasks.ts +10 -0
  112. package/src/oauth/presets.ts +29 -0
  113. package/src/otel-impl.ts +96 -1
  114. package/src/otel.ts +34 -0
  115. package/src/prompts/memories.ts +2 -2
  116. package/src/providers/acp-adapter.ts +325 -0
  117. package/src/providers/acp-swarm-events.ts +113 -0
  118. package/src/providers/acp-targets.ts +103 -0
  119. package/src/providers/claude-managed-models.ts +17 -1
  120. package/src/providers/codex-adapter.ts +3 -3
  121. package/src/providers/codex-oauth/auth-json-fs.ts +2 -2
  122. package/src/providers/codex-oauth/home.ts +13 -0
  123. package/src/providers/index.ts +5 -1
  124. package/src/providers/types.ts +1 -1
  125. package/src/server-user.ts +1 -0
  126. package/src/slack/app.ts +5 -1
  127. package/src/tasks/worker-follow-up.ts +78 -7
  128. package/src/telemetry.ts +151 -0
  129. package/src/tests/acp-adapter.test.ts +192 -0
  130. package/src/tests/acp-swarm-events.test.ts +132 -0
  131. package/src/tests/agents-list-model-display.test.ts +20 -0
  132. package/src/tests/approval-cancellation-migration.test.ts +134 -0
  133. package/src/tests/approval-requests.test.ts +456 -2
  134. package/src/tests/apps-spike2.test.ts +4 -1
  135. package/src/tests/apps-sync-engine.test.ts +22 -18
  136. package/src/tests/claude-managed-adapter.test.ts +12 -0
  137. package/src/tests/codex-oauth-auth-json-fs.test.ts +19 -0
  138. package/src/tests/connection-embedded-auth.test.ts +4 -1
  139. package/src/tests/context-window.test.ts +2 -0
  140. package/src/tests/credential-check.test.ts +6 -0
  141. package/src/tests/db-client-busy-retry.test.ts +18 -0
  142. package/src/tests/db-client.test.ts +23 -0
  143. package/src/tests/db-retention-telemetry.test.ts +569 -0
  144. package/src/tests/db-retention.test.ts +456 -117
  145. package/src/tests/heartbeat.test.ts +140 -0
  146. package/src/tests/memory-http-recall-gating.test.ts +120 -13
  147. package/src/tests/memory-store.test.ts +41 -0
  148. package/src/tests/migration-046-budgets.test.ts +27 -5
  149. package/src/tests/oauth-presets.test.ts +17 -5
  150. package/src/tests/onboard-compose.test.ts +99 -0
  151. package/src/tests/onboard-env.test.ts +43 -0
  152. package/src/tests/onboard-manifest.test.ts +17 -1
  153. package/src/tests/onboard-non-interactive.test.ts +89 -0
  154. package/src/tests/pool-affinity.test.ts +100 -0
  155. package/src/tests/promote-draft-task-route.test.ts +32 -1
  156. package/src/tests/sandbox-spawn-test-helpers.ts +3 -0
  157. package/src/tests/sandboxed-process.test.ts +2 -2
  158. package/src/tests/schedule-target-type.test.ts +6 -3
  159. package/src/tests/script-connections-http.test.ts +4 -3
  160. package/src/tests/script-connections.test.ts +6 -1
  161. package/src/tests/script-workflows-runtime-e2e.test.ts +36 -28
  162. package/src/tests/scripts-external-api.test.ts +8 -5
  163. package/src/tests/scripts-http.test.ts +6 -3
  164. package/src/tests/scripts-mcp-e2e.test.ts +65 -60
  165. package/src/tests/scripts-retention.test.ts +6 -3
  166. package/src/tests/scripts-runtime-identity.test.ts +4 -2
  167. package/src/tests/scripts-runtime.test.ts +18 -16
  168. package/src/tests/session-costs-model-key-normalize.test.ts +2 -0
  169. package/src/tests/slack-read-boundaries.test.ts +3 -1
  170. package/src/tests/task-lifecycle-telemetry.test.ts +1 -0
  171. package/src/tests/task-tools-ctx.test.ts +88 -1
  172. package/src/tests/telemetry-init.test.ts +61 -0
  173. package/src/tests/tool-annotations.test.ts +4 -1
  174. package/src/tests/vendored-openapi.test.ts +15 -2
  175. package/src/tests/workflow-e2e.test.ts +4 -1
  176. package/src/tests/workflow-engine-v2.test.ts +5 -2
  177. package/src/tests/workflow-executors.test.ts +24 -19
  178. package/src/tests/workflow-http-v2.test.ts +17 -2
  179. package/src/tests/workflow-llm.test.ts +57 -0
  180. package/src/tests/workflow-retry-v2.test.ts +142 -1
  181. package/src/tests/workflow-swarm-script.test.ts +20 -17
  182. package/src/tools/get-task-details.ts +1 -0
  183. package/src/tools/mcp-servers/mcp-server-create.ts +7 -1
  184. package/src/tools/memory-search.ts +27 -2
  185. package/src/tools/send-task.ts +28 -10
  186. package/src/tools/task-action.ts +13 -5
  187. package/src/types.ts +31 -2
  188. package/src/utils/context-window.ts +2 -0
  189. package/src/workflows/approval-notifications.ts +72 -0
  190. package/src/workflows/checkpoint.ts +16 -9
  191. package/src/workflows/completed-step-routing.ts +31 -0
  192. package/src/workflows/engine.ts +59 -43
  193. package/src/workflows/executors/human-in-the-loop.ts +38 -4
  194. package/src/workflows/executors/raw-llm.ts +8 -6
  195. package/src/workflows/executors/validate.ts +6 -5
  196. package/src/workflows/executors/workflow-llm.ts +35 -0
  197. package/src/workflows/resume.ts +90 -13
  198. package/src/workflows/retry-poller.ts +8 -1
  199. package/vendored-openapi/README.md +4 -2
  200. package/vendored-openapi/manifest.json +33 -0
  201. package/vendored-openapi/microsoft-graph.json +781 -0
  202. package/dist/cli-5tnr64pm.js +0 -29
  203. package/dist/{anthropic-messages-pm7pp23c.js → anthropic-messages-tvgm75yc.js} +3 -3
  204. package/dist/{azure-openai-responses-cwesc845.js → azure-openai-responses-hed7waek.js} +4 -4
  205. package/dist/{cli-s9gpxh9q.js → cli-5kmzp1wx.js} +0 -0
  206. package/dist/{cli-s73zwwqn.js → cli-xjx3fbtn.js} +4 -4
  207. package/dist/{openai-codex-responses-xxca1qr1.js → openai-codex-responses-gv3n8rg0.js} +3 -3
  208. package/dist/{openai-completions-yzftqrft.js → openai-completions-dkrj9433.js} +8 -8
  209. package/dist/{openai-responses-e4dcwm9g.js → openai-responses-spk6t7kh.js} +11 -11
  210. package/dist/{openrouter-images-asqqnbvh.js → openrouter-images-71hthwh9.js} +3 -3
@@ -1,31 +1,12 @@
1
- import {
2
- cleanupSessionResources,
3
- registerSessionResourceCleanup,
4
- uuidv7
5
- } from "./cli-v1mwc5v2.js";
6
- import {
7
- BASE_SUMMARIZE_PROMPT,
8
- SummaryWithRatingsSchema,
9
- buildSummaryWithRatingsPrompt
10
- } from "./cli-8p37s71j.js";
11
1
  import {
12
2
  getValidCodexOAuth,
13
3
  persistCodexOAuth
14
4
  } from "./cli-e7d20cty.js";
15
5
  import {
16
- DEFAULT_OPENROUTER_BASE_URL,
17
- getOpenRouterBaseUrl
18
- } from "./cli-3dpj7atn.js";
19
- import {
20
- init_zod
21
- } from "./cli-s35981d0.js";
22
- import {
23
- init_secret_scrubber,
24
- scrubSecrets
25
- } from "./cli-mkq1rk7b.js";
26
- import {
27
- exports_external
28
- } from "./cli-pqv5gvyf.js";
6
+ cleanupSessionResources,
7
+ registerSessionResourceCleanup,
8
+ uuidv7
9
+ } from "./cli-v1mwc5v2.js";
29
10
  import {
30
11
  bedrockConverseStreamApi,
31
12
  setBedrockProviderModule
@@ -5610,7 +5591,7 @@ function amazonBedrockProvider() {
5610
5591
  }
5611
5592
 
5612
5593
  // node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js
5613
- var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-yzftqrft.js"));
5594
+ var openAICompletionsApi = () => lazyApi(() => import("./openai-completions-dkrj9433.js"));
5614
5595
 
5615
5596
  // node_modules/@earendil-works/pi-ai/dist/auth/helpers.js
5616
5597
  function envApiKeyAuth(name, envVars) {
@@ -5666,7 +5647,7 @@ function antLingProvider() {
5666
5647
  }
5667
5648
 
5668
5649
  // node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js
5669
- var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-pm7pp23c.js"));
5650
+ var anthropicMessagesApi = () => lazyApi(() => import("./anthropic-messages-tvgm75yc.js"));
5670
5651
 
5671
5652
  // node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js
5672
5653
  var __rewriteRelativeImportExtension = function(path, preserveJsx) {
@@ -5904,7 +5885,7 @@ function anthropicProvider() {
5904
5885
  }
5905
5886
 
5906
5887
  // node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.lazy.js
5907
- var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-cwesc845.js"));
5888
+ var azureOpenAIResponsesApi = () => lazyApi(() => import("./azure-openai-responses-hed7waek.js"));
5908
5889
 
5909
5890
  // node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js
5910
5891
  function azureOpenAIResponsesProvider() {
@@ -5942,7 +5923,7 @@ function cerebrasProvider() {
5942
5923
  }
5943
5924
 
5944
5925
  // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.lazy.js
5945
- var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-e4dcwm9g.js"));
5926
+ var openAIResponsesApi = () => lazyApi(() => import("./openai-responses-spk6t7kh.js"));
5946
5927
 
5947
5928
  // node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.js
5948
5929
  var CLOUDFLARE_API_KEY = "CLOUDFLARE_API_KEY";
@@ -6130,7 +6111,7 @@ function githubCopilotProvider() {
6130
6111
  }
6131
6112
 
6132
6113
  // node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.lazy.js
6133
- var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-6xxdj4t3.js"));
6114
+ var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-zyhy3dab.js"));
6134
6115
 
6135
6116
  // node_modules/@earendil-works/pi-ai/dist/providers/google.js
6136
6117
  function googleProvider() {
@@ -6145,7 +6126,7 @@ function googleProvider() {
6145
6126
  }
6146
6127
 
6147
6128
  // node_modules/@earendil-works/pi-ai/dist/api/google-vertex.lazy.js
6148
- var googleVertexApi = () => lazyApi(() => import("./google-vertex-zma18wb0.js"));
6129
+ var googleVertexApi = () => lazyApi(() => import("./google-vertex-t25h65yd.js"));
6149
6130
 
6150
6131
  // node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js
6151
6132
  var VERTEX_ADC_PATH = "~/.config/gcloud/application_default_credentials.json";
@@ -6362,7 +6343,7 @@ function openaiProvider() {
6362
6343
  }
6363
6344
 
6364
6345
  // node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.lazy.js
6365
- var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-xxca1qr1.js"));
6346
+ var openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-gv3n8rg0.js"));
6366
6347
 
6367
6348
  // node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js
6368
6349
  function openaiCodexProvider() {
@@ -6434,7 +6415,7 @@ function openrouterProvider() {
6434
6415
 
6435
6416
  // node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.lazy.js
6436
6417
  var openrouterImagesApi = () => ({
6437
- generateImages: async (model, context, options) => (await import("./openrouter-images-asqqnbvh.js")).generateImages(model, context, options)
6418
+ generateImages: async (model, context, options) => (await import("./openrouter-images-71hthwh9.js")).generateImages(model, context, options)
6438
6419
  });
6439
6420
 
6440
6421
  // node_modules/@earendil-works/pi-ai/dist/image-models.generated.js
@@ -7558,200 +7539,6 @@ function builtinImagesModels(options) {
7558
7539
  }
7559
7540
  return models;
7560
7541
  }
7561
-
7562
- // node_modules/@earendil-works/pi-ai/dist/compat.js
7563
- var exports_compat = {};
7564
- __export(exports_compat, {
7565
- ANTHROPIC_API_KEY_ENV: () => ANTHROPIC_API_KEY_ENV,
7566
- ANTHROPIC_AUTH_TOKEN_ENV: () => ANTHROPIC_AUTH_TOKEN_ENV,
7567
- ANTHROPIC_OAUTH_TOKEN_ENV: () => ANTHROPIC_OAUTH_TOKEN_ENV,
7568
- AssistantMessageEventStream: () => AssistantMessageEventStream,
7569
- EventStream: () => EventStream,
7570
- InMemoryCredentialStore: () => InMemoryCredentialStore,
7571
- InMemoryModelsStore: () => InMemoryModelsStore,
7572
- ModelsError: () => ModelsError,
7573
- StringEnum: () => StringEnum,
7574
- Type: () => exports_typebox,
7575
- anthropicMessagesApi: () => anthropicMessagesApi,
7576
- appendAssistantMessageDiagnostic: () => appendAssistantMessageDiagnostic,
7577
- azureOpenAIResponsesApi: () => azureOpenAIResponsesApi,
7578
- bedrockConverseStreamApi: () => bedrockConverseStreamApi,
7579
- calculateCost: () => calculateCost,
7580
- clampThinkingLevel: () => clampThinkingLevel,
7581
- cleanupSessionResources: () => cleanupSessionResources,
7582
- complete: () => complete,
7583
- completeSimple: () => completeSimple,
7584
- contentText: () => contentText,
7585
- createAssistantMessageDiagnostic: () => createAssistantMessageDiagnostic,
7586
- createAssistantMessageEventStream: () => createAssistantMessageEventStream,
7587
- createFauxCore: () => createFauxCore,
7588
- createImagesModels: () => createImagesModels,
7589
- createImagesProvider: () => createImagesProvider,
7590
- createModels: () => createModels,
7591
- createProvider: () => createProvider,
7592
- defaultProviderAuthContext: () => defaultProviderAuthContext,
7593
- envApiKeyAuth: () => envApiKeyAuth,
7594
- extractDiagnosticError: () => extractDiagnosticError,
7595
- fauxAssistantMessage: () => fauxAssistantMessage,
7596
- fauxProvider: () => fauxProvider,
7597
- fauxText: () => fauxText,
7598
- fauxThinking: () => fauxThinking,
7599
- fauxToolCall: () => fauxToolCall,
7600
- findEnvKeys: () => findEnvKeys,
7601
- formatThrownValue: () => formatThrownValue,
7602
- generateImages: () => generateImages,
7603
- generateImagesOpenRouter: () => generateImagesOpenRouter,
7604
- getApiProvider: () => getApiProvider,
7605
- getApiProviders: () => getApiProviders,
7606
- getEnvApiKey: () => getEnvApiKey,
7607
- getImageModel: () => getImageModel,
7608
- getImageModels: () => getImageModels,
7609
- getImageProviders: () => getImageProviders,
7610
- getImagesApiProvider: () => getImagesApiProvider,
7611
- getModel: () => getModel,
7612
- getModels: () => getModels,
7613
- getOverflowPatterns: () => getOverflowPatterns,
7614
- getProviders: () => getProviders,
7615
- getSupportedThinkingLevels: () => getSupportedThinkingLevels,
7616
- googleGenerativeAIApi: () => googleGenerativeAIApi,
7617
- googleVertexApi: () => googleVertexApi,
7618
- hasApi: () => hasApi,
7619
- isContextOverflow: () => isContextOverflow,
7620
- isRecoverableLength: () => isRecoverableLength,
7621
- isRetryableAssistantError: () => isRetryableAssistantError,
7622
- lazyApi: () => lazyApi,
7623
- lazyOAuth: () => lazyOAuth,
7624
- lazyStream: () => lazyStream,
7625
- mistralConversationsApi: () => mistralConversationsApi,
7626
- modelsAreEqual: () => modelsAreEqual,
7627
- openAICodexResponsesApi: () => openAICodexResponsesApi,
7628
- openAICompletionsApi: () => openAICompletionsApi,
7629
- openAIResponsesApi: () => openAIResponsesApi,
7630
- parseJsonWithRepair: () => parseJsonWithRepair,
7631
- parseStreamingJson: () => parseStreamingJson,
7632
- piMessagesApi: () => piMessagesApi,
7633
- registerApiProvider: () => registerApiProvider,
7634
- registerBuiltInApiProviders: () => registerBuiltInApiProviders,
7635
- registerBuiltInImagesApiProviders: () => registerBuiltInImagesApiProviders,
7636
- registerFauxProvider: () => registerFauxProvider,
7637
- registerImagesApiProvider: () => registerImagesApiProvider,
7638
- registerSessionResourceCleanup: () => registerSessionResourceCleanup,
7639
- repairJson: () => repairJson,
7640
- resetApiProviders: () => resetApiProviders,
7641
- retryAssistantCall: () => retryAssistantCall,
7642
- setBedrockProviderModule: () => setBedrockProviderModule,
7643
- stream: () => stream,
7644
- streamAnthropic: () => streamAnthropic,
7645
- streamAzureOpenAIResponses: () => streamAzureOpenAIResponses,
7646
- streamGoogle: () => streamGoogle,
7647
- streamGoogleVertex: () => streamGoogleVertex,
7648
- streamMistral: () => streamMistral,
7649
- streamOpenAICodexResponses: () => streamOpenAICodexResponses,
7650
- streamOpenAICompletions: () => streamOpenAICompletions,
7651
- streamOpenAIResponses: () => streamOpenAIResponses,
7652
- streamSimple: () => streamSimple,
7653
- streamSimpleAnthropic: () => streamSimpleAnthropic,
7654
- streamSimpleAzureOpenAIResponses: () => streamSimpleAzureOpenAIResponses,
7655
- streamSimpleGoogle: () => streamSimpleGoogle,
7656
- streamSimpleGoogleVertex: () => streamSimpleGoogleVertex,
7657
- streamSimpleMistral: () => streamSimpleMistral,
7658
- streamSimpleOpenAICodexResponses: () => streamSimpleOpenAICodexResponses,
7659
- streamSimpleOpenAICompletions: () => streamSimpleOpenAICompletions,
7660
- streamSimpleOpenAIResponses: () => streamSimpleOpenAIResponses,
7661
- unregisterApiProviders: () => unregisterApiProviders,
7662
- uuidv7: () => uuidv7,
7663
- validateToolArguments: () => validateToolArguments,
7664
- validateToolCall: () => validateToolCall
7665
- });
7666
-
7667
- // node_modules/@earendil-works/pi-ai/dist/image-models.js
7668
- var imageModelRegistry = new Map;
7669
- for (const [provider, models] of Object.entries(IMAGE_MODELS)) {
7670
- const providerModels = new Map;
7671
- for (const [id, model] of Object.entries(models)) {
7672
- providerModels.set(id, model);
7673
- }
7674
- imageModelRegistry.set(provider, providerModels);
7675
- }
7676
- function getImageModel(provider, modelId) {
7677
- const providerModels = imageModelRegistry.get(provider);
7678
- return providerModels?.get(modelId);
7679
- }
7680
- function getImageProviders() {
7681
- return Array.from(imageModelRegistry.keys());
7682
- }
7683
- function getImageModels(provider) {
7684
- const models = imageModelRegistry.get(provider);
7685
- return models ? Array.from(models.values()) : [];
7686
- }
7687
- // node_modules/@earendil-works/pi-ai/dist/images-api-registry.js
7688
- var imagesApiProviderRegistry = new Map;
7689
- function wrapGenerateImages(api, generateImages) {
7690
- return (model, context, options) => {
7691
- if (model.api !== api) {
7692
- throw new Error(`Mismatched api: ${model.api} expected ${api}`);
7693
- }
7694
- return generateImages(model, context, options);
7695
- };
7696
- }
7697
- function registerImagesApiProvider(provider, sourceId) {
7698
- imagesApiProviderRegistry.set(provider.api, {
7699
- provider: {
7700
- api: provider.api,
7701
- generateImages: wrapGenerateImages(provider.api, provider.generateImages)
7702
- },
7703
- sourceId
7704
- });
7705
- }
7706
- function getImagesApiProvider(api) {
7707
- return imagesApiProviderRegistry.get(api)?.provider;
7708
- }
7709
-
7710
- // node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js
7711
- var openRouterImagesProviderModulePromise;
7712
- function createLazyLoadErrorImages(model, error) {
7713
- return {
7714
- api: model.api,
7715
- provider: model.provider,
7716
- model: model.id,
7717
- output: [],
7718
- stopReason: "error",
7719
- errorMessage: error instanceof Error ? error.message : String(error),
7720
- timestamp: Date.now()
7721
- };
7722
- }
7723
- function loadOpenRouterImagesProviderModule() {
7724
- openRouterImagesProviderModulePromise ||= import("./openrouter-images-asqqnbvh.js").then((module3) => module3);
7725
- return openRouterImagesProviderModulePromise;
7726
- }
7727
- var generateImagesOpenRouter = async (model, context, options) => {
7728
- try {
7729
- const module3 = await loadOpenRouterImagesProviderModule();
7730
- return await module3.generateImages(model, context, options);
7731
- } catch (error) {
7732
- return createLazyLoadErrorImages(model, error);
7733
- }
7734
- };
7735
- function registerBuiltInImagesApiProviders() {
7736
- registerImagesApiProvider({
7737
- api: "openrouter-images",
7738
- generateImages: generateImagesOpenRouter
7739
- });
7740
- }
7741
- registerBuiltInImagesApiProviders();
7742
-
7743
- // node_modules/@earendil-works/pi-ai/dist/images.js
7744
- function resolveImagesApiProvider(api) {
7745
- const provider = getImagesApiProvider(api);
7746
- if (!provider) {
7747
- throw new Error(`No API provider registered for api: ${api}`);
7748
- }
7749
- return provider;
7750
- }
7751
- async function generateImages(model, context, options) {
7752
- const provider = resolveImagesApiProvider(model.api);
7753
- return provider.generateImages(model, context, options);
7754
- }
7755
7542
  // node_modules/@earendil-works/pi-ai/dist/providers/faux.js
7756
7543
  var DEFAULT_API = "faux";
7757
7544
  var DEFAULT_PROVIDER = "faux";
@@ -13149,6 +12936,199 @@ Received arguments:
13149
12936
  ${JSON.stringify(toolCall.arguments, null, 2)}`;
13150
12937
  throw new Error(errorMessage);
13151
12938
  }
12939
+ // node_modules/@earendil-works/pi-ai/dist/compat.js
12940
+ var exports_compat = {};
12941
+ __export(exports_compat, {
12942
+ ANTHROPIC_API_KEY_ENV: () => ANTHROPIC_API_KEY_ENV,
12943
+ ANTHROPIC_AUTH_TOKEN_ENV: () => ANTHROPIC_AUTH_TOKEN_ENV,
12944
+ ANTHROPIC_OAUTH_TOKEN_ENV: () => ANTHROPIC_OAUTH_TOKEN_ENV,
12945
+ AssistantMessageEventStream: () => AssistantMessageEventStream,
12946
+ EventStream: () => EventStream,
12947
+ InMemoryCredentialStore: () => InMemoryCredentialStore,
12948
+ InMemoryModelsStore: () => InMemoryModelsStore,
12949
+ ModelsError: () => ModelsError,
12950
+ StringEnum: () => StringEnum,
12951
+ Type: () => exports_typebox,
12952
+ anthropicMessagesApi: () => anthropicMessagesApi,
12953
+ appendAssistantMessageDiagnostic: () => appendAssistantMessageDiagnostic,
12954
+ azureOpenAIResponsesApi: () => azureOpenAIResponsesApi,
12955
+ bedrockConverseStreamApi: () => bedrockConverseStreamApi,
12956
+ calculateCost: () => calculateCost,
12957
+ clampThinkingLevel: () => clampThinkingLevel,
12958
+ cleanupSessionResources: () => cleanupSessionResources,
12959
+ complete: () => complete,
12960
+ completeSimple: () => completeSimple,
12961
+ contentText: () => contentText,
12962
+ createAssistantMessageDiagnostic: () => createAssistantMessageDiagnostic,
12963
+ createAssistantMessageEventStream: () => createAssistantMessageEventStream,
12964
+ createFauxCore: () => createFauxCore,
12965
+ createImagesModels: () => createImagesModels,
12966
+ createImagesProvider: () => createImagesProvider,
12967
+ createModels: () => createModels,
12968
+ createProvider: () => createProvider,
12969
+ defaultProviderAuthContext: () => defaultProviderAuthContext,
12970
+ envApiKeyAuth: () => envApiKeyAuth,
12971
+ extractDiagnosticError: () => extractDiagnosticError,
12972
+ fauxAssistantMessage: () => fauxAssistantMessage,
12973
+ fauxProvider: () => fauxProvider,
12974
+ fauxText: () => fauxText,
12975
+ fauxThinking: () => fauxThinking,
12976
+ fauxToolCall: () => fauxToolCall,
12977
+ findEnvKeys: () => findEnvKeys,
12978
+ formatThrownValue: () => formatThrownValue,
12979
+ generateImages: () => generateImages,
12980
+ generateImagesOpenRouter: () => generateImagesOpenRouter,
12981
+ getApiProvider: () => getApiProvider,
12982
+ getApiProviders: () => getApiProviders,
12983
+ getEnvApiKey: () => getEnvApiKey,
12984
+ getImageModel: () => getImageModel,
12985
+ getImageModels: () => getImageModels,
12986
+ getImageProviders: () => getImageProviders,
12987
+ getImagesApiProvider: () => getImagesApiProvider,
12988
+ getModel: () => getModel,
12989
+ getModels: () => getModels,
12990
+ getOverflowPatterns: () => getOverflowPatterns,
12991
+ getProviders: () => getProviders,
12992
+ getSupportedThinkingLevels: () => getSupportedThinkingLevels,
12993
+ googleGenerativeAIApi: () => googleGenerativeAIApi,
12994
+ googleVertexApi: () => googleVertexApi,
12995
+ hasApi: () => hasApi,
12996
+ isContextOverflow: () => isContextOverflow,
12997
+ isRecoverableLength: () => isRecoverableLength,
12998
+ isRetryableAssistantError: () => isRetryableAssistantError,
12999
+ lazyApi: () => lazyApi,
13000
+ lazyOAuth: () => lazyOAuth,
13001
+ lazyStream: () => lazyStream,
13002
+ mistralConversationsApi: () => mistralConversationsApi,
13003
+ modelsAreEqual: () => modelsAreEqual,
13004
+ openAICodexResponsesApi: () => openAICodexResponsesApi,
13005
+ openAICompletionsApi: () => openAICompletionsApi,
13006
+ openAIResponsesApi: () => openAIResponsesApi,
13007
+ parseJsonWithRepair: () => parseJsonWithRepair,
13008
+ parseStreamingJson: () => parseStreamingJson,
13009
+ piMessagesApi: () => piMessagesApi,
13010
+ registerApiProvider: () => registerApiProvider,
13011
+ registerBuiltInApiProviders: () => registerBuiltInApiProviders,
13012
+ registerBuiltInImagesApiProviders: () => registerBuiltInImagesApiProviders,
13013
+ registerFauxProvider: () => registerFauxProvider,
13014
+ registerImagesApiProvider: () => registerImagesApiProvider,
13015
+ registerSessionResourceCleanup: () => registerSessionResourceCleanup,
13016
+ repairJson: () => repairJson,
13017
+ resetApiProviders: () => resetApiProviders,
13018
+ retryAssistantCall: () => retryAssistantCall,
13019
+ setBedrockProviderModule: () => setBedrockProviderModule,
13020
+ stream: () => stream,
13021
+ streamAnthropic: () => streamAnthropic,
13022
+ streamAzureOpenAIResponses: () => streamAzureOpenAIResponses,
13023
+ streamGoogle: () => streamGoogle,
13024
+ streamGoogleVertex: () => streamGoogleVertex,
13025
+ streamMistral: () => streamMistral,
13026
+ streamOpenAICodexResponses: () => streamOpenAICodexResponses,
13027
+ streamOpenAICompletions: () => streamOpenAICompletions,
13028
+ streamOpenAIResponses: () => streamOpenAIResponses,
13029
+ streamSimple: () => streamSimple,
13030
+ streamSimpleAnthropic: () => streamSimpleAnthropic,
13031
+ streamSimpleAzureOpenAIResponses: () => streamSimpleAzureOpenAIResponses,
13032
+ streamSimpleGoogle: () => streamSimpleGoogle,
13033
+ streamSimpleGoogleVertex: () => streamSimpleGoogleVertex,
13034
+ streamSimpleMistral: () => streamSimpleMistral,
13035
+ streamSimpleOpenAICodexResponses: () => streamSimpleOpenAICodexResponses,
13036
+ streamSimpleOpenAICompletions: () => streamSimpleOpenAICompletions,
13037
+ streamSimpleOpenAIResponses: () => streamSimpleOpenAIResponses,
13038
+ unregisterApiProviders: () => unregisterApiProviders,
13039
+ uuidv7: () => uuidv7,
13040
+ validateToolArguments: () => validateToolArguments,
13041
+ validateToolCall: () => validateToolCall
13042
+ });
13043
+
13044
+ // node_modules/@earendil-works/pi-ai/dist/image-models.js
13045
+ var imageModelRegistry = new Map;
13046
+ for (const [provider, models2] of Object.entries(IMAGE_MODELS)) {
13047
+ const providerModels = new Map;
13048
+ for (const [id2, model] of Object.entries(models2)) {
13049
+ providerModels.set(id2, model);
13050
+ }
13051
+ imageModelRegistry.set(provider, providerModels);
13052
+ }
13053
+ function getImageModel(provider, modelId) {
13054
+ const providerModels = imageModelRegistry.get(provider);
13055
+ return providerModels?.get(modelId);
13056
+ }
13057
+ function getImageProviders() {
13058
+ return Array.from(imageModelRegistry.keys());
13059
+ }
13060
+ function getImageModels(provider) {
13061
+ const models2 = imageModelRegistry.get(provider);
13062
+ return models2 ? Array.from(models2.values()) : [];
13063
+ }
13064
+ // node_modules/@earendil-works/pi-ai/dist/images-api-registry.js
13065
+ var imagesApiProviderRegistry = new Map;
13066
+ function wrapGenerateImages(api, generateImages) {
13067
+ return (model, context2, options) => {
13068
+ if (model.api !== api) {
13069
+ throw new Error(`Mismatched api: ${model.api} expected ${api}`);
13070
+ }
13071
+ return generateImages(model, context2, options);
13072
+ };
13073
+ }
13074
+ function registerImagesApiProvider(provider, sourceId) {
13075
+ imagesApiProviderRegistry.set(provider.api, {
13076
+ provider: {
13077
+ api: provider.api,
13078
+ generateImages: wrapGenerateImages(provider.api, provider.generateImages)
13079
+ },
13080
+ sourceId
13081
+ });
13082
+ }
13083
+ function getImagesApiProvider(api) {
13084
+ return imagesApiProviderRegistry.get(api)?.provider;
13085
+ }
13086
+
13087
+ // node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js
13088
+ var openRouterImagesProviderModulePromise;
13089
+ function createLazyLoadErrorImages(model, error2) {
13090
+ return {
13091
+ api: model.api,
13092
+ provider: model.provider,
13093
+ model: model.id,
13094
+ output: [],
13095
+ stopReason: "error",
13096
+ errorMessage: error2 instanceof Error ? error2.message : String(error2),
13097
+ timestamp: Date.now()
13098
+ };
13099
+ }
13100
+ function loadOpenRouterImagesProviderModule() {
13101
+ openRouterImagesProviderModulePromise ||= import("./openrouter-images-71hthwh9.js").then((module3) => module3);
13102
+ return openRouterImagesProviderModulePromise;
13103
+ }
13104
+ var generateImagesOpenRouter = async (model, context2, options) => {
13105
+ try {
13106
+ const module3 = await loadOpenRouterImagesProviderModule();
13107
+ return await module3.generateImages(model, context2, options);
13108
+ } catch (error2) {
13109
+ return createLazyLoadErrorImages(model, error2);
13110
+ }
13111
+ };
13112
+ function registerBuiltInImagesApiProviders() {
13113
+ registerImagesApiProvider({
13114
+ api: "openrouter-images",
13115
+ generateImages: generateImagesOpenRouter
13116
+ });
13117
+ }
13118
+ registerBuiltInImagesApiProviders();
13119
+
13120
+ // node_modules/@earendil-works/pi-ai/dist/images.js
13121
+ function resolveImagesApiProvider(api) {
13122
+ const provider = getImagesApiProvider(api);
13123
+ if (!provider) {
13124
+ throw new Error(`No API provider registered for api: ${api}`);
13125
+ }
13126
+ return provider;
13127
+ }
13128
+ async function generateImages(model, context2, options) {
13129
+ const provider = resolveImagesApiProvider(model.api);
13130
+ return provider.generateImages(model, context2, options);
13131
+ }
13152
13132
  // node_modules/@earendil-works/pi-ai/dist/legacy-api-aliases.js
13153
13133
  var anthropicMessagesStreams = anthropicMessagesApi();
13154
13134
  var azureOpenAIResponsesStreams = azureOpenAIResponsesApi();
@@ -13325,9 +13305,23 @@ async function completeSimple(model, context2, options) {
13325
13305
  return s.result();
13326
13306
  }
13327
13307
 
13328
- // src/utils/internal-ai/complete-structured.ts
13329
- init_zod();
13330
- init_secret_scrubber();
13308
+ // src/utils/internal-ai/models.ts
13309
+ var DEFAULT_MODEL = {
13310
+ openrouter: "openrouter/google/gemini-3-flash-preview",
13311
+ anthropic: "anthropic/claude-haiku-4-5",
13312
+ openai: "openai/gpt-5.4-mini",
13313
+ "openai-codex": "openai-codex/gpt-5.4-mini",
13314
+ "claude-cli": "haiku"
13315
+ };
13316
+ function resolveModelString(kind) {
13317
+ return process.env.MEMORY_RATER_MODEL ?? DEFAULT_MODEL[kind];
13318
+ }
13319
+ function parseModelStr(modelStr) {
13320
+ const idx = modelStr.indexOf("/");
13321
+ if (idx < 0)
13322
+ throw new Error(`invalid model string (no '/'): ${modelStr}`);
13323
+ return [modelStr.slice(0, idx), modelStr.slice(idx + 1)];
13324
+ }
13331
13325
 
13332
13326
  // node_modules/@earendil-works/pi-ai/dist/auth/oauth/oauth-page.js
13333
13327
  var LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#fff" fill-rule="evenodd" d="M165.29 165.29 H517.36 V400 H400 V517.36 H282.65 V634.72 H165.29 Z M282.65 282.65 V400 H400 V282.65 Z"/><path fill="#fff" d="M517.36 400 H634.72 V634.72 H517.36 Z"/></svg>`;
@@ -15520,24 +15514,6 @@ function registerBunOAuthFlows() {
15520
15514
  });
15521
15515
  }
15522
15516
 
15523
- // src/utils/internal-ai/models.ts
15524
- var DEFAULT_MODEL = {
15525
- openrouter: "openrouter/google/gemini-3-flash-preview",
15526
- anthropic: "anthropic/claude-haiku-4-5",
15527
- openai: "openai/gpt-5.4-mini",
15528
- "openai-codex": "openai-codex/gpt-5.4-mini",
15529
- "claude-cli": "haiku"
15530
- };
15531
- function resolveModelString(kind) {
15532
- return process.env.MEMORY_RATER_MODEL ?? DEFAULT_MODEL[kind];
15533
- }
15534
- function parseModelStr(modelStr) {
15535
- const idx = modelStr.indexOf("/");
15536
- if (idx < 0)
15537
- throw new Error(`invalid model string (no '/'): ${modelStr}`);
15538
- return [modelStr.slice(0, idx), modelStr.slice(idx + 1)];
15539
- }
15540
-
15541
15517
  // src/utils/internal-ai/credentials.ts
15542
15518
  registerBunOAuthFlows();
15543
15519
  var resolveOAuthApiKey = async (providerId, credentials) => {
@@ -15635,231 +15611,4 @@ async function resolveCredential(opts = {}) {
15635
15611
  return null;
15636
15612
  }
15637
15613
 
15638
- // src/utils/internal-ai/complete-structured.ts
15639
- var CLAUDE_CLI_TIMEOUT_MS = 30000;
15640
- function stripJsonFences(raw) {
15641
- const trimmed = raw.trim();
15642
- const fenced = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/i);
15643
- return fenced?.[1] ? fenced[1].trim() : trimmed;
15644
- }
15645
- function parseJsonText(raw) {
15646
- try {
15647
- return JSON.parse(stripJsonFences(raw));
15648
- } catch {
15649
- return;
15650
- }
15651
- }
15652
- function errorMessage(err) {
15653
- const message = err instanceof Error ? err.message : String(err ?? "unknown error");
15654
- return message.replace(/\s+/g, " ");
15655
- }
15656
- async function defaultSpawnClaudeCli(prompt, model, signal, jsonSchema) {
15657
- const useClaudeBridge = ["true", "1"].includes((process.env.SWARM_USE_CLAUDE_BRIDGE ?? "").trim().toLowerCase());
15658
- const claudeBinaryRaw = useClaudeBridge ? "claude-bridge" : (process.env.CLAUDE_BINARY ?? "claude").trim();
15659
- const claudeBinaryArgv = (claudeBinaryRaw || "claude").split(/\s+/);
15660
- const cmd = [...claudeBinaryArgv, "-p", "--model", model, "--output-format", "json"];
15661
- if (jsonSchema) {
15662
- cmd.push("--json-schema", JSON.stringify(jsonSchema));
15663
- }
15664
- const env = { ...process.env };
15665
- if (!env.CLAUDE_CODE_OAUTH_TOKEN && env.AGENT_SWARM_CLAUDE_OAUTH_TOKEN) {
15666
- env.CLAUDE_CODE_OAUTH_TOKEN = env.AGENT_SWARM_CLAUDE_OAUTH_TOKEN;
15667
- }
15668
- env.SKIP_SESSION_SUMMARY = "1";
15669
- const proc = Bun.spawn({
15670
- cmd,
15671
- env,
15672
- stdin: "pipe",
15673
- stdout: "pipe",
15674
- stderr: "pipe"
15675
- });
15676
- const timeout = setTimeout(() => {
15677
- try {
15678
- proc.kill();
15679
- } catch {}
15680
- }, CLAUDE_CLI_TIMEOUT_MS);
15681
- const abortHandler = () => {
15682
- try {
15683
- proc.kill();
15684
- } catch {}
15685
- };
15686
- signal?.addEventListener("abort", abortHandler, { once: true });
15687
- try {
15688
- proc.stdin.write(prompt);
15689
- await proc.stdin.end();
15690
- const [stdout, stderr, exitCode] = await Promise.all([
15691
- new Response(proc.stdout).text(),
15692
- new Response(proc.stderr).text(),
15693
- proc.exited
15694
- ]);
15695
- if (exitCode !== 0) {
15696
- console.error(`internal-ai: claude -p exited ${exitCode}; stderr=${stderr.slice(0, 500)}`);
15697
- }
15698
- try {
15699
- const envelope = JSON.parse(stdout);
15700
- if (jsonSchema && envelope.structured_output !== undefined) {
15701
- return JSON.stringify(envelope.structured_output);
15702
- }
15703
- return envelope.result ?? stdout;
15704
- } catch {
15705
- return stdout;
15706
- }
15707
- } finally {
15708
- clearTimeout(timeout);
15709
- signal?.removeEventListener("abort", abortHandler);
15710
- }
15711
- }
15712
- async function completeStructured(opts) {
15713
- const retries = opts.retries ?? 3;
15714
- const callerTag = opts.callerTag ?? "<unset>";
15715
- let cred;
15716
- if (opts._credentialOverride) {
15717
- cred = opts._credentialOverride;
15718
- } else {
15719
- const resolver = opts._resolveCredential ?? resolveCredential;
15720
- cred = await resolver({
15721
- env: opts.env ?? process.env,
15722
- apiUrl: opts.apiUrl,
15723
- apiKey: opts.apiKey,
15724
- callerTag: opts.callerTag
15725
- });
15726
- }
15727
- if (!cred) {
15728
- return null;
15729
- }
15730
- console.log(`internal-ai: kind=${cred.kind} callerTag=${callerTag}`);
15731
- if (cred.kind === "claude-cli") {
15732
- const spawn = opts._spawnClaudeCli ?? defaultSpawnClaudeCli;
15733
- const jsonSchema = exports_external.toJSONSchema(opts.zodSchema);
15734
- const schemaStr = JSON.stringify(jsonSchema);
15735
- const claudeUserPrompt = `${opts.userPrompt}
15736
-
15737
- Respond with ONLY a JSON object (no prose, no code fences) matching this schema:
15738
- ${schemaStr}`;
15739
- let lastErr2 = null;
15740
- for (let attempt = 0;attempt < retries; attempt++) {
15741
- try {
15742
- const raw = await spawn(`${opts.systemPrompt}
15743
-
15744
- ${claudeUserPrompt}`, cred.modelDefault, opts.signal, jsonSchema);
15745
- let parsedJson;
15746
- try {
15747
- parsedJson = JSON.parse(stripJsonFences(raw));
15748
- } catch (err) {
15749
- lastErr2 = err;
15750
- continue;
15751
- }
15752
- const validated = opts.zodSchema.safeParse(parsedJson);
15753
- if (validated.success) {
15754
- return validated.data;
15755
- }
15756
- lastErr2 = validated.error;
15757
- } catch (err) {
15758
- lastErr2 = err;
15759
- }
15760
- }
15761
- console.error(scrubSecrets(`internal-ai: structured output failed after ${retries} retries (callerTag=${callerTag} kind=${cred.kind}): ${errorMessage(lastErr2)}`));
15762
- return null;
15763
- }
15764
- const [provider, modelId] = parseModelStr(cred.modelDefault);
15765
- let model;
15766
- try {
15767
- model = getBuiltinModel(provider, modelId);
15768
- } catch (err) {
15769
- console.error(`internal-ai: getModel(${provider}, ${modelId}) threw (callerTag=${callerTag})`, err);
15770
- return null;
15771
- }
15772
- const openRouterBaseUrl = getOpenRouterBaseUrl(opts.env ?? process.env);
15773
- if (provider === "openrouter" && openRouterBaseUrl !== DEFAULT_OPENROUTER_BASE_URL) {
15774
- model = { ...model, baseUrl: openRouterBaseUrl };
15775
- }
15776
- const completeFn = opts._complete ?? complete;
15777
- const toolChoice = model.api === "anthropic-messages" ? { type: "tool", name: opts.toolName } : "required";
15778
- let userPrompt = opts.userPrompt;
15779
- let lastErr = null;
15780
- for (let attempt = 0;attempt < retries; attempt++) {
15781
- try {
15782
- const msg = await completeFn(model, {
15783
- systemPrompt: opts.systemPrompt,
15784
- messages: [{ role: "user", content: userPrompt, timestamp: Date.now() }],
15785
- tools: [
15786
- {
15787
- name: opts.toolName,
15788
- description: opts.toolDescription,
15789
- parameters: opts.toolSchema
15790
- }
15791
- ]
15792
- }, { apiKey: cred.apiKey, signal: opts.signal, toolChoice });
15793
- const toolCall = msg.content.find((c) => c.type === "toolCall" && c.name === opts.toolName);
15794
- if (!toolCall) {
15795
- const assistantText = msg.content.filter((content) => content.type === "text").map((content) => content.text).join(`
15796
- `);
15797
- if (assistantText) {
15798
- const parsedText = parseJsonText(assistantText);
15799
- if (parsedText !== undefined) {
15800
- const validatedText = opts.zodSchema.safeParse(parsedText);
15801
- if (validatedText.success) {
15802
- return validatedText.data;
15803
- }
15804
- }
15805
- }
15806
- userPrompt = `${userPrompt}
15807
-
15808
- You did not call the ${opts.toolName} tool. You MUST call it with the requested arguments.`;
15809
- lastErr = new Error("no tool call in response");
15810
- continue;
15811
- }
15812
- const validated = opts.zodSchema.safeParse(toolCall.arguments);
15813
- if (validated.success) {
15814
- return validated.data;
15815
- }
15816
- userPrompt = `${userPrompt}
15817
-
15818
- The ${opts.toolName} arguments did not validate: ${validated.error.message}. Please retry with correct arguments.`;
15819
- lastErr = validated.error;
15820
- } catch (err) {
15821
- lastErr = err;
15822
- }
15823
- }
15824
- console.error(scrubSecrets(`internal-ai: structured output failed after ${retries} retries (callerTag=${callerTag} kind=${cred.kind}): ${errorMessage(lastErr)}`));
15825
- return null;
15826
- }
15827
-
15828
- // src/utils/internal-ai/summarize-session.ts
15829
- var summaryToolSchema = exports_typebox.Object({
15830
- summary: exports_typebox.String(),
15831
- ratings: exports_typebox.Array(exports_typebox.Object({
15832
- id: exports_typebox.String({ minLength: 1 }),
15833
- score: exports_typebox.Number({ minimum: 0, maximum: 1 }),
15834
- reasoning: exports_typebox.String({ minLength: 1, maxLength: 500 }),
15835
- referencesSource: exports_typebox.Optional(exports_typebox.String({ minLength: 1, maxLength: 512 }))
15836
- }))
15837
- });
15838
- async function summarizeSession(opts) {
15839
- if (opts.transcript.length <= 100)
15840
- return null;
15841
- const taskLine = opts.taskContext.prompt ? `
15842
- Task: ${opts.taskContext.prompt}` : "";
15843
- const basePrompt = `${BASE_SUMMARIZE_PROMPT}${taskLine}
15844
-
15845
- Transcript:
15846
- ${opts.transcript}`;
15847
- const userPrompt = buildSummaryWithRatingsPrompt(basePrompt, opts.retrievals);
15848
- const runner = opts._completeStructured ?? completeStructured;
15849
- return await runner({
15850
- zodSchema: SummaryWithRatingsSchema,
15851
- toolSchema: summaryToolSchema,
15852
- toolName: "record_session_summary",
15853
- toolDescription: "Record the high-value learnings extracted from this session, plus per-memory ratings of any retrievals.",
15854
- systemPrompt: "You are an expert at extracting durable, generalizable learnings from agent sessions.",
15855
- userPrompt,
15856
- callerTag: `session-summary:${opts.harness}`,
15857
- apiUrl: opts.apiUrl,
15858
- apiKey: opts.apiKey,
15859
- env: opts.env,
15860
- signal: opts.signal,
15861
- retries: 3,
15862
- ...opts._credentialOverride ? { _credentialOverride: opts._credentialOverride } : {}
15863
- });
15864
- }
15865
- export { exports_typebox, exports_build, isContextOverflow, isRecoverableLength, retryAssistantCall, isRetryableAssistantError, contentText, exports_value2 as exports_value, Compile, exports_compile, validateToolArguments, DEFAULT_RADIUS_GATEWAY, radiusProvider, getBuiltinModel, getBuiltinModelDataGeneratedAt, getBuiltinModels, builtinProviders, exports_all, getApiProvider, resetApiProviders, stream, streamSimple, completeSimple, exports_compat, summarizeSession };
15614
+ export { exports_typebox, exports_build, isContextOverflow, isRecoverableLength, retryAssistantCall, isRetryableAssistantError, contentText, exports_value2 as exports_value, Compile, exports_compile, validateToolArguments, DEFAULT_RADIUS_GATEWAY, radiusProvider, getBuiltinModel, getBuiltinModelDataGeneratedAt, getBuiltinModels, builtinProviders, exports_all, getApiProvider, resetApiProviders, stream, complete, streamSimple, completeSimple, exports_compat, DEFAULT_MODEL, parseModelStr, resolveCredential };