@desplega.ai/agent-swarm 1.166.0 → 1.167.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 (194) hide show
  1. package/dist/acp-adapter-zpvy6321.js +34 -0
  2. package/dist/{actions-qz3m692w.js → actions-fq2zrwtf.js} +25 -25
  3. package/dist/{amp-adapter-j1xbmsqz.js → amp-adapter-5gbk7501.js} +4 -4
  4. package/dist/{anthropic-messages-hst62ws9.js → anthropic-messages-13yn502s.js} +4 -4
  5. package/dist/{app-43vrdmv8.js → app-nctetn1e.js} +10 -9
  6. package/dist/{assistant-ertffmka.js → assistant-0aq8gjvj.js} +26 -26
  7. package/dist/{azure-openai-responses-mh8tvf78.js → azure-openai-responses-9st34pfz.js} +5 -5
  8. package/dist/{boot-reembed-998jtpdg.js → boot-reembed-1ze5853n.js} +9 -8
  9. package/dist/{boot-reembed-s7k7c6v2.js → boot-reembed-fmp5ww69.js} +9 -8
  10. package/dist/{boot-scrub-sweep-nepsk4t1.js → boot-scrub-sweep-cbp8xd4e.js} +10 -9
  11. package/dist/{boot-seeds-vvzs1zhk.js → boot-seeds-22tx8a53.js} +12 -11
  12. package/dist/{claude-adapter-2zvmekrp.js → claude-adapter-0jhgeh1d.js} +24 -22
  13. package/dist/{claude-managed-adapter-s49wbk8t.js → claude-managed-adapter-tzwxy803.js} +4 -4
  14. package/dist/{claude-managed-setup-cvhqq8qn.js → claude-managed-setup-nrhfx5b0.js} +3 -3
  15. package/dist/{claude-sdk-session-kkbxtw5q.js → claude-sdk-session-wh77rh83.js} +22 -22
  16. package/dist/{cli-zsh093hk.js → cli-014vns2y.js} +63 -1
  17. package/dist/{cli-qvfk83fy.js → cli-13xwcqvj.js} +2 -2
  18. package/dist/{cli-dw2q9f7g.js → cli-1yrcfa5s.js} +4 -4
  19. package/dist/{cli-jvj6a0cv.js → cli-577bxkf6.js} +27 -17
  20. package/dist/{cli-zy7vwsne.js → cli-5qkcdv8c.js} +16 -9
  21. package/dist/{cli-cwxhbf43.js → cli-5t5my0h8.js} +85 -2
  22. package/dist/{cli-y59h2pk9.js → cli-69egj654.js} +1 -1
  23. package/dist/{cli-68r1j4sg.js → cli-6bpvv8h4.js} +3 -3
  24. package/dist/{cli-cpfmqz3n.js → cli-6qxmjpem.js} +5 -5
  25. package/dist/{cli-aqcey741.js → cli-6vfz44sr.js} +1 -1
  26. package/dist/{cli-32bca7nr.js → cli-7avy4v8w.js} +1 -1
  27. package/dist/{cli-f2n17zhp.js → cli-7mhy3ths.js} +21 -18
  28. package/dist/{cli-q38n4bq0.js → cli-95zs84qw.js} +3 -3
  29. package/dist/cli-a35hzdve.js +33 -0
  30. package/dist/{cli-x3x0qwky.js → cli-bxqez1p0.js} +51 -23
  31. package/dist/{cli-gt8azyet.js → cli-c2tpw9ck.js} +1 -1
  32. package/dist/{cli-ecknp7p1.js → cli-c8r99akr.js} +10 -10
  33. package/dist/{cli-3qn4r334.js → cli-cexctgn5.js} +20 -14
  34. package/dist/{cli-vzc73wet.js → cli-cf2vgn9d.js} +87 -69
  35. package/dist/{cli-ng97fjq7.js → cli-cmxkbzzs.js} +33 -7
  36. package/dist/{cli-nexwh8zg.js → cli-g7k7zbcz.js} +12 -5
  37. package/dist/{cli-nvvfd8bq.js → cli-jbzbr36n.js} +4091 -3793
  38. package/dist/{cli-3ddybbbx.js → cli-jvmtxqtc.js} +26 -14
  39. package/dist/{cli-pkke6geq.js → cli-km4x66j0.js} +83 -65
  40. package/dist/{cli-j2jbr8af.js → cli-kw0jcfje.js} +1 -1
  41. package/dist/{cli-8t229cmr.js → cli-m7vmeepg.js} +30 -17
  42. package/dist/{cli-yshaazs1.js → cli-mkdsy1nq.js} +62 -20
  43. package/dist/{cli-b0f70z24.js → cli-mn8qkd8v.js} +1 -1
  44. package/dist/{cli-0qjcsxgz.js → cli-mxry91sa.js} +30 -9
  45. package/dist/cli-nkqjj42q.js +104 -0
  46. package/dist/{cli-rggdq8wq.js → cli-p8rt8spp.js} +3 -3
  47. package/dist/{cli-v2a8x45d.js → cli-pkj1w46r.js} +10 -5
  48. package/dist/cli-q1vnz8wv.js +96 -0
  49. package/dist/{cli-fj86xr3c.js → cli-qd97v6z2.js} +2 -2
  50. package/dist/{cli-66zh26sp.js → cli-qzmzwegq.js} +57 -17
  51. package/dist/{cli-p4ztb80h.js → cli-r7eeddkq.js} +13 -8
  52. package/dist/{cli-8ssjez7e.js → cli-rhy7z1rp.js} +22 -11
  53. package/dist/{cli-4mevd1hf.js → cli-s9y81s7j.js} +5 -5
  54. package/dist/{cli-h3x613ze.js → cli-tc5zec7v.js} +6 -6
  55. package/dist/{cli-ttbsse3f.js → cli-tmhsxhb8.js} +1 -1
  56. package/dist/{cli-0nhdwxd5.js → cli-tx2zvn23.js} +3 -3
  57. package/dist/{cli-mwegs4af.js → cli-ty4bzkqr.js} +3 -3
  58. package/dist/{cli-ysnyhws9.js → cli-v1pwxreq.js} +54 -51
  59. package/dist/{cli-feh3dkah.js → cli-v1w7pbd8.js} +2 -1
  60. package/dist/{cli-10zmp1p7.js → cli-vr5avem2.js} +27 -32
  61. package/dist/{cli-bzr0ftht.js → cli-wnb9b2g3.js} +19 -0
  62. package/dist/{cli-df56tqdw.js → cli-wydz3feg.js} +108 -57
  63. package/dist/{cli-krqm5f11.js → cli-xezn9nkh.js} +16 -13
  64. package/dist/{cli-8kt0bmgx.js → cli-xf713zz0.js} +2 -2
  65. package/dist/{cli-x7kpr72a.js → cli-y0kjpfm9.js} +2 -2
  66. package/dist/{cli-6zcfw0x7.js → cli-y195hv1a.js} +1 -1
  67. package/dist/{cli-fn697bnt.js → cli-ykt8f7va.js} +21 -8
  68. package/dist/{cli-4r1sjfc4.js → cli-ymmc1zxg.js} +8 -8
  69. package/dist/{cli-8kgvmkak.js → cli-ypgba1a8.js} +1 -1
  70. package/dist/{cli-rsy933yz.js → cli-z1dqhc9y.js} +30 -19
  71. package/dist/{cli-qbksc292.js → cli-zy39d433.js} +2 -0
  72. package/dist/cli.js +26 -26
  73. package/dist/{cloudflare-workers-ai-system-one-tt484t61.js → cloudflare-workers-ai-system-one-sta45jf9.js} +7 -5
  74. package/dist/{codex-adapter-dw1wxqt8.js → codex-adapter-cgesnjkr.js} +18 -18
  75. package/dist/{codex-login-terbdsqq.js → codex-login-g1cyt5zm.js} +1 -1
  76. package/dist/{codex-session-runner-3cgb8y1g.js → codex-session-runner-8kd7ddhr.js} +18 -18
  77. package/dist/{commands-mhxam6z2.js → commands-h6zaaxym.js} +9 -8
  78. package/dist/{cursor-adapter-2qda3st7.js → cursor-adapter-v8mm6bp5.js} +5 -5
  79. package/dist/{db-sjks418k.js → db-qg3myn53.js} +9 -8
  80. package/dist/{dispatcher-1es759rn.js → dispatcher-7vnwj9qw.js} +24 -24
  81. package/dist/{dsh-adapter-bek4cyw9.js → dsh-adapter-tz6hfp5r.js} +5 -5
  82. package/dist/{easter-egg-3d-mtpnw06s.js → easter-egg-3d-66zxervv.js} +2 -2
  83. package/dist/{execute-s4ccjq3n.js → execute-h4jgevyw.js} +61 -11
  84. package/dist/{google-generative-ai-d6nphg3q.js → google-generative-ai-b8zxrpax.js} +5 -5
  85. package/dist/{google-vertex-cpshkref.js → google-vertex-nrdd697t.js} +5 -5
  86. package/dist/{grok-adapter-ar9cw9jg.js → grok-adapter-jdt2dz2s.js} +18 -8
  87. package/dist/{handlers-1gkbhktr.js → handlers-2qtkpncr.js} +27 -27
  88. package/dist/{hook-ds2zxq9v.js → hook-51yfcgsv.js} +42 -31
  89. package/dist/{hook-vxa3tcsy.js → hook-qnbdgwvd.js} +14 -14
  90. package/dist/{http-3h21z9md.js → http-jsmtag08.js} +320 -98
  91. package/dist/{index-9b65j1m5.js → index-2t9kesn1.js} +9 -8
  92. package/dist/{index-dkfxpkmm.js → index-bt8wkv1w.js} +25 -25
  93. package/dist/{index-f8xnqrye.js → index-cx1sb9bq.js} +33 -24
  94. package/dist/{index-bn6cy8ps.js → index-ekywyv2v.js} +24 -24
  95. package/dist/{index-n99fycq7.js → index-t4g06w93.js} +24 -24
  96. package/dist/{keepalive-3xspa9jw.js → keepalive-4aezx4bj.js} +11 -10
  97. package/dist/{lead-6qphc124.js → lead-r44bkpm5.js} +47 -47
  98. package/dist/{llama-cpp-classify-tgj35k8d.js → llama-cpp-classify-6erb7wwv.js} +3 -1
  99. package/dist/{maintenance-0teem1bb.js → maintenance-grz5jrzh.js} +9 -8
  100. package/dist/{mistral-conversations-8445ddjn.js → mistral-conversations-059y51zt.js} +4 -4
  101. package/dist/{node-9sg7ajby.js → node-qm9eb6z0.js} +1 -1
  102. package/dist/{oauth-refresh-sweep-sh9q25xp.js → oauth-refresh-sweep-wm4ctjfj.js} +10 -9
  103. package/dist/{onboard-54qmnqxe.js → onboard-v60zgqf0.js} +2 -2
  104. package/dist/{openai-codex-responses-9ynm88zy.js → openai-codex-responses-jzxkta9b.js} +8 -7
  105. package/dist/{openai-completions-nhqwjmaw.js → openai-completions-663yncfq.js} +4 -4
  106. package/dist/openai-decisions-vj9nkpf8.js +162 -0
  107. package/dist/{openai-responses-xx1c4kgm.js → openai-responses-m3g43rrt.js} +5 -5
  108. package/dist/{opencode-adapter-wjfa2wvd.js → opencode-adapter-yjyqynzf.js} +7 -7
  109. package/dist/{openrouter-images-8yx3487g.js → openrouter-images-kr60n6b9.js} +1 -1
  110. package/dist/{otel-impl-ycqzp2a1.js → otel-impl-ghh4dyf8.js} +1 -1
  111. package/dist/{pi-messages-vxdt8v7j.js → pi-messages-xszk613n.js} +1 -1
  112. package/dist/{pi-mono-adapter-e77e9zst.js → pi-mono-adapter-0eg8kw2c.js} +68 -51
  113. package/dist/{pricing-refresh-atnkngqs.js → pricing-refresh-mjrqvnvw.js} +11 -10
  114. package/dist/{rbac-roles-j78wdksm.js → rbac-roles-axv4d74x.js} +10 -9
  115. package/dist/{rbac-roles-9pjphh9q.js → rbac-roles-fd5tskj9.js} +9 -8
  116. package/dist/{render-v2-pxjs49fx.js → render-v2-k50j33qd.js} +10 -9
  117. package/dist/{runtime-v2t1r79e.js → runtime-h9ha1mq6.js} +4 -4
  118. package/dist/{setup-ymej0xtx.js → setup-4syh0pd2.js} +2 -2
  119. package/dist/{typesafe-system-one-datfr82p.js → typesafe-system-one-e988vty7.js} +7 -5
  120. package/dist/{virtual-modules-wm8mxdxx.js → virtual-modules-ftr9kwe8.js} +11 -11
  121. package/dist/{work-objects-3nh4ymzb.js → work-objects-jcdbg8rr.js} +27 -27
  122. package/dist/{worker-qa9fkz5s.js → worker-x8j8c9sx.js} +47 -47
  123. package/openapi.json +1 -1
  124. package/package.json +8 -8
  125. package/src/be/memory/providers/openai-embedding.ts +7 -2
  126. package/src/be/memory/raters/llm-summarizer.ts +7 -2
  127. package/src/be/modelsdev-cache.json +61 -0
  128. package/src/be/seed-pricing.ts +84 -53
  129. package/src/be/swarm-config-guard.ts +13 -0
  130. package/src/commands/provider-credentials.ts +28 -5
  131. package/src/commands/runner.ts +7 -12
  132. package/src/heartbeat/heartbeat.ts +91 -19
  133. package/src/hooks/hook.ts +72 -27
  134. package/src/http/mcp.ts +5 -0
  135. package/src/http/onboarding.ts +2 -0
  136. package/src/providers/acp-targets.ts +9 -4
  137. package/src/providers/amp-adapter.ts +1 -1
  138. package/src/providers/claude-adapter.ts +26 -0
  139. package/src/providers/codex-adapter.ts +30 -3
  140. package/src/providers/codex-oauth/auth-json.ts +21 -4
  141. package/src/providers/codex-oauth/types.ts +2 -0
  142. package/src/providers/dsh-adapter.ts +10 -1
  143. package/src/providers/grok-adapter.ts +18 -2
  144. package/src/providers/opencode-adapter.ts +21 -5
  145. package/src/providers/pi-mono-extension.ts +56 -25
  146. package/src/providers/pricing-sources.md +2 -0
  147. package/src/server.ts +63 -3
  148. package/src/tests/acp-adapter.test.ts +152 -12
  149. package/src/tests/ci-unit-test-report.test.ts +73 -0
  150. package/src/tests/claude-default-route.test.ts +75 -0
  151. package/src/tests/claude-hook-output.test.ts +233 -0
  152. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +4 -2
  153. package/src/tests/codex-adapter.test.ts +166 -26
  154. package/src/tests/codex-oauth-auth-timestamps.test.ts +76 -0
  155. package/src/tests/codex-oauth.test.ts +4 -1
  156. package/src/tests/context-window.test.ts +2 -2
  157. package/src/tests/credential-check.test.ts +51 -1
  158. package/src/tests/dsh-adapter.test.ts +23 -1
  159. package/src/tests/enabled-tools.test.ts +269 -0
  160. package/src/tests/entrypoint-codex-oauth-seed.test.ts +12 -0
  161. package/src/tests/grok-adapter.test.ts +13 -0
  162. package/src/tests/haiku-5-5-pricing.test.ts +38 -0
  163. package/src/tests/heartbeat-checklist.test.ts +158 -1
  164. package/src/tests/onboarding.test.ts +44 -0
  165. package/src/tests/opencode-adapter.test.ts +66 -3
  166. package/src/tests/opencode-plugin.test.ts +37 -0
  167. package/src/tests/openrouter-attribution-call-sites.test.ts +204 -0
  168. package/src/tests/openrouter-base-url.test.ts +30 -39
  169. package/src/tests/pi-mono-extension.test.ts +161 -2
  170. package/src/tests/pricing-refresh.test.ts +70 -1
  171. package/src/tests/reasoning-effort.test.ts +3 -1
  172. package/src/tests/telemetry-trigger.test.ts +12 -1
  173. package/src/tests/workflow-llm.test.ts +14 -0
  174. package/src/tests/workflow-system-one-decision-providers.test.ts +33 -0
  175. package/src/tools/request-human-input.ts +7 -2
  176. package/src/utils/enabled-tools.ts +27 -0
  177. package/src/utils/internal-ai/complete-structured.ts +11 -3
  178. package/src/utils/openrouter-base-url.ts +23 -0
  179. package/src/workflows/executors/raw-llm.ts +1 -0
  180. package/src/workflows/executors/system-one-decision.ts +2 -0
  181. package/src/workflows/executors/validate.ts +1 -0
  182. package/src/workflows/executors/workflow-llm.ts +9 -2
  183. package/templates/skills/agent-browser/SKILL.md +2 -0
  184. package/templates/skills/agent-browser/content.md +2 -0
  185. package/templates/skills/code-quality/content.md +1 -0
  186. package/templates/skills/heartbeat-runbook/content.md +1 -1
  187. package/templates/skills/work-on-task/SKILL.md +4 -0
  188. package/templates/skills/work-on-task/content.md +4 -0
  189. package/templates/skills/workflow-iterate/content.md +9 -0
  190. package/dist/acp-adapter-yzfxn8vj.js +0 -23
  191. package/dist/cli-3dpj7atn.js +0 -11
  192. package/dist/cli-gvcgmx69.js +0 -183
  193. package/dist/{cli-jhm6hzjn.js → cli-mxvnnv5q.js} +7 -7
  194. package/dist/{codex-hook-d2rkvf39.js → codex-hook-15dgc4cb.js} +1 -1
@@ -1,3 +1,10 @@
1
+ import {
2
+ ProjectTrustStore,
3
+ addMcpServerConfig,
4
+ loadMcpConfig,
5
+ openBrowser,
6
+ removeMcpServerConfig
7
+ } from "./cli-13xwcqvj.js";
1
8
  import {
2
9
  McpOAuthCredentialStore,
3
10
  McpServerConnection,
@@ -5,24 +12,17 @@ import {
5
12
  McpSignInCancelledError,
6
13
  createDefaultTransport,
7
14
  signInMcpServer
8
- } from "./cli-x3x0qwky.js";
9
- import {
10
- ProjectTrustStore,
11
- addMcpServerConfig,
12
- loadMcpConfig,
13
- openBrowser,
14
- removeMcpServerConfig
15
- } from "./cli-qvfk83fy.js";
15
+ } from "./cli-bxqez1p0.js";
16
16
  import {
17
17
  getMcpToolExposure,
18
18
  validateMcpServerConfig
19
- } from "./cli-krqm5f11.js";
20
- import"./cli-8ssjez7e.js";
19
+ } from "./cli-xezn9nkh.js";
20
+ import"./cli-rhy7z1rp.js";
21
21
  import {
22
22
  APP_NAME,
23
23
  CONFIG_DIR_NAME,
24
24
  source_default
25
- } from "./cli-cwxhbf43.js";
25
+ } from "./cli-5t5my0h8.js";
26
26
  import"./cli-5bfdm1ah.js";
27
27
  import"./cli-0m7wct0d.js";
28
28
  import"./cli-2x0e561b.js";
@@ -451,8 +451,9 @@ async function login(entry, connection, url, timeoutMs, options, credentials, lo
451
451
  ${authorizationUrl.href}`);
452
452
  openUrl(authorizationUrl.href);
453
453
  },
454
- promptForRedirectUrl: (signal) => waitForRedirectUrl(signal, timeoutMs, interactive)
455
- }
454
+ promptForRedirectUrl: (signal) => waitForRedirectUrl(signal, interactive)
455
+ },
456
+ signal: AbortSignal.timeout(timeoutMs)
456
457
  });
457
458
  } catch (signInError) {
458
459
  error(signInError instanceof McpSignInCancelledError ? `Sign-in to MCP server "${name}" was cancelled or not completed within ${Math.round(timeoutMs / 1000)} seconds.` : `Sign-in to MCP server "${name}" failed: ${errorMessage(signInError)}`);
@@ -468,27 +469,21 @@ ${authorizationUrl.href}`);
468
469
  log(`Signed in to MCP server "${name}" (${connection.tools.length} tools).`);
469
470
  return 0;
470
471
  }
471
- async function waitForRedirectUrl(signal, timeoutMs, interactive) {
472
- const controller = new AbortController;
473
- const abort = () => controller.abort();
474
- signal.addEventListener("abort", abort, { once: true });
475
- const timer = setTimeout(abort, timeoutMs);
472
+ async function waitForRedirectUrl(signal, interactive) {
473
+ if (!interactive) {
474
+ if (!signal.aborted)
475
+ await new Promise((resolve) => signal.addEventListener("abort", resolve, { once: true }));
476
+ return;
477
+ }
478
+ const readline = createInterface({ input: process.stdin, output: process.stderr });
476
479
  try {
477
- if (!interactive) {
478
- await new Promise((resolve) => controller.signal.addEventListener("abort", () => resolve(), { once: true }));
479
- return;
480
- }
481
- const readline = createInterface({ input: process.stdin, output: process.stderr });
482
- try {
483
- return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ", { signal: controller.signal });
484
- } catch {
485
- return;
486
- } finally {
487
- readline.close();
488
- }
480
+ return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ", {
481
+ signal
482
+ });
483
+ } catch {
484
+ return;
489
485
  } finally {
490
- clearTimeout(timer);
491
- signal.removeEventListener("abort", abort);
486
+ readline.close();
492
487
  }
493
488
  }
494
489
  export {
@@ -77,6 +77,8 @@ class EventStream {
77
77
  }
78
78
 
79
79
  class AssistantMessageEventStream extends EventStream {
80
+ #startedAt = Date.now();
81
+ #startedAtMonotonic = performance.now();
80
82
  constructor() {
81
83
  super((event) => event.type === "done" || event.type === "error", (event) => {
82
84
  if (event.type === "done") {
@@ -87,6 +89,23 @@ class AssistantMessageEventStream extends EventStream {
87
89
  throw new Error("Unexpected event type for final result");
88
90
  });
89
91
  }
92
+ push(event) {
93
+ if (event.type === "done")
94
+ this.#time(event.message);
95
+ else if (event.type === "error")
96
+ this.#time(event.error);
97
+ super.push(event);
98
+ }
99
+ end(result) {
100
+ if (result !== undefined)
101
+ this.#time(result);
102
+ super.end(result);
103
+ }
104
+ #time(message) {
105
+ if (this.done || message.durationMs !== undefined || message.timestamp < this.#startedAt)
106
+ return;
107
+ message.durationMs = Math.max(0, Math.round(performance.now() - this.#startedAtMonotonic));
108
+ }
90
109
  }
91
110
  function createAssistantMessageEventStream() {
92
111
  return new AssistantMessageEventStream;
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  ensurePricingSeeded,
22
22
  ensureRbacSeeded
23
- } from "./cli-0nhdwxd5.js";
23
+ } from "./cli-tx2zvn23.js";
24
24
  import {
25
25
  buildCatalogEntries,
26
26
  getCatalogGeneration,
@@ -30,10 +30,10 @@ import {
30
30
  requestModelCatalogRefresh,
31
31
  startPricingRefreshLoop,
32
32
  upsertModelCatalogOverlay
33
- } from "./cli-rggdq8wq.js";
33
+ } from "./cli-p8rt8spp.js";
34
34
  import {
35
35
  loadModelsDevCache
36
- } from "./cli-ysnyhws9.js";
36
+ } from "./cli-v1pwxreq.js";
37
37
  import {
38
38
  AppDefinitionSchema,
39
39
  AppElementsSchema,
@@ -106,7 +106,7 @@ import {
106
106
  validateDefinition,
107
107
  validateScriptImports,
108
108
  writeBareImportShim
109
- } from "./cli-jvj6a0cv.js";
109
+ } from "./cli-577bxkf6.js";
110
110
  import {
111
111
  getApiKey
112
112
  } from "./cli-f14fvzag.js";
@@ -115,18 +115,18 @@ import {
115
115
  registerProcessGroup,
116
116
  terminateProcessGroup
117
117
  } from "./cli-zt3w1cn1.js";
118
- import {
119
- AgentFsProvider,
120
- getFileStorageProvider,
121
- providerPath
122
- } from "./cli-mzfth0bp.js";
123
118
  import {
124
119
  buildAuthorizationUrl,
125
120
  ensureAuthorizationTokenOrThrow,
126
121
  ensureToken,
127
122
  ensureTokenOrThrow,
128
123
  onAuthorizationRefreshed
129
- } from "./cli-j2jbr8af.js";
124
+ } from "./cli-kw0jcfje.js";
125
+ import {
126
+ AgentFsProvider,
127
+ getFileStorageProvider,
128
+ providerPath
129
+ } from "./cli-mzfth0bp.js";
130
130
  import {
131
131
  ZodFirstPartyTypeKind,
132
132
  objectType
@@ -156,11 +156,11 @@ import {
156
156
  taskCitationWarnings,
157
157
  upsertTaskCitations,
158
158
  withSpan
159
- } from "./cli-ecknp7p1.js";
159
+ } from "./cli-c8r99akr.js";
160
160
  import {
161
161
  getUserGrant,
162
162
  init_rbac_roles
163
- } from "./cli-8kgvmkak.js";
163
+ } from "./cli-ypgba1a8.js";
164
164
  import {
165
165
  can,
166
166
  decideAdmission,
@@ -374,6 +374,7 @@ import {
374
374
  init_db1 as init_db2,
375
375
  init_db_client,
376
376
  init_embeddings,
377
+ init_enabled_tools,
377
378
  init_key_paths,
378
379
  init_memory,
379
380
  init_model_tier_keys,
@@ -424,6 +425,7 @@ import {
424
425
  onTaskStarted,
425
426
  overwriteTerminalTaskResultText,
426
427
  pageContextKey,
428
+ parseEnabledTools,
427
429
  placeholderForConfigKey,
428
430
  postMessage,
429
431
  promoteDraftTask,
@@ -486,7 +488,7 @@ import {
486
488
  upsertSwarmConfig,
487
489
  validateConfigValue,
488
490
  workflowContextKey
489
- } from "./cli-yshaazs1.js";
491
+ } from "./cli-mkdsy1nq.js";
490
492
  import {
491
493
  $OpenAPIRegistry,
492
494
  $OpenApiGeneratorV31,
@@ -555,12 +557,23 @@ import {
555
557
  init_task_attachment_links,
556
558
  taskAttachmentDisplayUrl,
557
559
  taskAttachmentFetchCommand
558
- } from "./cli-jhm6hzjn.js";
560
+ } from "./cli-mxvnnv5q.js";
559
561
  import {
560
562
  getSlackConfiguration,
561
563
  init_config,
562
564
  isSlackConfigured
563
565
  } from "./cli-dmtrxqhg.js";
566
+ import {
567
+ deepInterpolate,
568
+ findInterpolationTokens,
569
+ getTemplateDefinition,
570
+ init_registry,
571
+ init_resolver,
572
+ init_template,
573
+ interpolate,
574
+ registerTemplate,
575
+ resolveTemplate
576
+ } from "./cli-5c2j5yvx.js";
564
577
  import {
565
578
  MAX_PROFILE_FILE_LENGTH,
566
579
  getAgentFsDefaultDriveId,
@@ -573,17 +586,6 @@ import {
573
586
  init_constants,
574
587
  isCombEnabled
575
588
  } from "./cli-gd4favx9.js";
576
- import {
577
- deepInterpolate,
578
- findInterpolationTokens,
579
- getTemplateDefinition,
580
- init_registry,
581
- init_resolver,
582
- init_template,
583
- interpolate,
584
- registerTemplate,
585
- resolveTemplate
586
- } from "./cli-5c2j5yvx.js";
587
589
  import {
588
590
  init_env_flag,
589
591
  isEnvFlagEnabled,
@@ -601,7 +603,7 @@ import {
601
603
  modelFamilyKey,
602
604
  parseAlias,
603
605
  resolveAlias
604
- } from "./cli-zsh093hk.js";
606
+ } from "./cli-014vns2y.js";
605
607
  import {
606
608
  exports_zod,
607
609
  init_zod
@@ -650,7 +652,7 @@ import {
650
652
  import {
651
653
  init_package,
652
654
  package_default
653
- } from "./cli-4r1sjfc4.js";
655
+ } from "./cli-ymmc1zxg.js";
654
656
  import {
655
657
  init_event_bus,
656
658
  workflowEventBus
@@ -14390,7 +14392,7 @@ async function notifyAutomationPreflightFailure(preflight) {
14390
14392
  return;
14391
14393
  }
14392
14394
  try {
14393
- const { getSlackApp: getSlackApp2 } = await import("./app-43vrdmv8.js");
14395
+ const { getSlackApp: getSlackApp2 } = await import("./app-nctetn1e.js");
14394
14396
  const app = getSlackApp2();
14395
14397
  if (!app) {
14396
14398
  console.warn("[Automation Preflight] Slack not available, cannot send notification");
@@ -19971,17 +19973,34 @@ function normalizeObjectSchema(schema) {
19971
19973
  }
19972
19974
  return;
19973
19975
  }
19976
+ function getDotPath(path) {
19977
+ if (path.length === 0) {
19978
+ return "object root";
19979
+ }
19980
+ return path.reduce((acc, seg, index) => {
19981
+ if (index === 0) {
19982
+ return String(seg);
19983
+ }
19984
+ if (typeof seg === "number") {
19985
+ return `${acc}[${seg}]`;
19986
+ }
19987
+ return `${acc}.${seg}`;
19988
+ }, "");
19989
+ }
19974
19990
  function getParseErrorMessage(error) {
19975
19991
  if (error && typeof error === "object") {
19992
+ if ("issues" in error && Array.isArray(error.issues) && error.issues.length > 0) {
19993
+ return error.issues.map((i) => {
19994
+ if (!i.path?.length) {
19995
+ return i.message;
19996
+ }
19997
+ return `${i.message} at ${getDotPath(i.path)}`;
19998
+ }).join(`
19999
+ `);
20000
+ }
19976
20001
  if ("message" in error && typeof error.message === "string") {
19977
20002
  return error.message;
19978
20003
  }
19979
- if ("issues" in error && Array.isArray(error.issues) && error.issues.length > 0) {
19980
- const firstIssue = error.issues[0];
19981
- if (firstIssue && typeof firstIssue === "object" && "message" in firstIssue) {
19982
- return String(firstIssue.message);
19983
- }
19984
- }
19985
20004
  try {
19986
20005
  return JSON.stringify(error);
19987
20006
  } catch {
@@ -23206,16 +23225,7 @@ class Server extends Protocol {
23206
23225
  if (!methodSchema) {
23207
23226
  throw new Error("Schema is missing a method literal");
23208
23227
  }
23209
- let methodValue;
23210
- if (isZ4Schema(methodSchema)) {
23211
- const v4Schema = methodSchema;
23212
- const v4Def = v4Schema._zod?.def;
23213
- methodValue = v4Def?.value ?? v4Schema.value;
23214
- } else {
23215
- const v3Schema = methodSchema;
23216
- const legacyDef = v3Schema._def;
23217
- methodValue = legacyDef?.value ?? v3Schema.value;
23218
- }
23228
+ const methodValue = getLiteralValue(methodSchema);
23219
23229
  if (typeof methodValue !== "string") {
23220
23230
  throw new Error("Schema method literal must be a string");
23221
23231
  }
@@ -29170,7 +29180,7 @@ async function notifySlack(text) {
29170
29180
  return;
29171
29181
  }
29172
29182
  try {
29173
- const { getSlackApp: getSlackApp2 } = await import("./app-43vrdmv8.js");
29183
+ const { getSlackApp: getSlackApp2 } = await import("./app-nctetn1e.js");
29174
29184
  const app = getSlackApp2();
29175
29185
  if (!app) {
29176
29186
  console.warn("[Jira webhook keepalive] Slack not available, cannot send notification");
@@ -29241,7 +29251,7 @@ async function deleteJiraWebhook(webhookId) {
29241
29251
  console.log(`[Jira webhook keepalive] Deleted webhook id=${webhookId}`);
29242
29252
  }
29243
29253
  async function overwriteWebhookIds(next) {
29244
- const { getDbClient: getDbClient2 } = await import("./db-sjks418k.js");
29254
+ const { getDbClient: getDbClient2 } = await import("./db-qg3myn53.js");
29245
29255
  await getDbClient2().transaction(async (tx) => {
29246
29256
  const row = await tx.get("SELECT metadata FROM oauth_apps WHERE provider = 'jira'");
29247
29257
  if (!row) {
@@ -103046,7 +103056,7 @@ async function reloadGlobalConfigsAndIntegrations() {
103046
103056
  return runWithoutRequestAuth(() => reloadGlobalConfigsAndIntegrationsInner());
103047
103057
  }
103048
103058
  async function reloadGlobalConfigsAndIntegrationsInner() {
103049
- const { getEmbeddingProvider: getEmbeddingProvider2, resetEmbeddingProvider } = await import("./index-9b65j1m5.js");
103059
+ const { getEmbeddingProvider: getEmbeddingProvider2, resetEmbeddingProvider } = await import("./index-2t9kesn1.js");
103050
103060
  const wasEmbeddingsConfigured = getEmbeddingProvider2().isConfigured();
103051
103061
  const updated = await loadGlobalConfigsIntoEnv(true);
103052
103062
  await stopSlackApp();
@@ -103059,10 +103069,10 @@ async function reloadGlobalConfigsAndIntegrationsInner() {
103059
103069
  integrations.push("embeddings");
103060
103070
  }
103061
103071
  if (!wasEmbeddingsConfigured && isEmbeddingsConfigured) {
103062
- import("./boot-reembed-s7k7c6v2.js").then(({ runBootReembed }) => runBootReembed()).catch((err) => {
103072
+ import("./boot-reembed-fmp5ww69.js").then(({ runBootReembed }) => runBootReembed()).catch((err) => {
103063
103073
  console.error("[config-reload] memory backfill failed (non-fatal):", err);
103064
103074
  });
103065
- import("./boot-reembed-998jtpdg.js").then(({ runBootReembedScripts }) => runBootReembedScripts()).catch((err) => {
103075
+ import("./boot-reembed-1ze5853n.js").then(({ runBootReembedScripts }) => runBootReembedScripts()).catch((err) => {
103066
103076
  console.error("[config-reload] script backfill failed (non-fatal):", err);
103067
103077
  });
103068
103078
  }
@@ -104180,7 +104190,7 @@ function setPreloadedTools(server, names) {
104180
104190
  async function applyPreToolCall(name, args, requestInfo, inputSchema) {
104181
104191
  if (requestInfo.callOrigin !== "mcp")
104182
104192
  return { args };
104183
- const dispatcher = await import("./dispatcher-1es759rn.js");
104193
+ const dispatcher = await import("./dispatcher-7vnwj9qw.js");
104184
104194
  const result = await dispatcher.dispatchPre("pre.tool.call", { tool: name, args, requestInfo }, inputSchema ? {
104185
104195
  validateModify: async (data) => {
104186
104196
  const schema = normalizeObjectSchema(inputSchema) ?? inputSchema;
@@ -117024,7 +117034,7 @@ var QuestionSchema = object({
117024
117034
  type: _enum(["approval", "text", "single-select", "multi-select", "boolean"]).describe("Question type"),
117025
117035
  label: string().describe("The question text displayed to the user"),
117026
117036
  required: boolean().optional().describe("Whether this question is required (default: true)"),
117027
- description: string().optional().describe("Optional help text"),
117037
+ description: string().optional().describe("Optional help text, rendered as markdown (code fences, images)"),
117028
117038
  placeholder: string().optional().describe("Placeholder text (for text type)"),
117029
117039
  multiline: boolean().optional().describe("Use textarea instead of input (for text type)"),
117030
117040
  options: array(object({
@@ -117040,7 +117050,7 @@ var registerRequestHumanInputTool = (server) => {
117040
117050
  createToolRegistrar(server)("request-human-input", {
117041
117051
  title: "Request human input",
117042
117052
  annotations: { destructiveHint: false },
117043
- description: "Create an approval request and return at once with the request id and URL. The answer arrives later as a hitl-follow-up task. " + "Supports multiple question types: approval (yes/no), text, single-select, " + "multi-select, and boolean. Returns the request ID and URL for the human to respond.",
117053
+ description: "Create an approval request and return at once with the request id and URL. The answer arrives later as a hitl-follow-up task. " + "Supports multiple question types: approval (yes/no), text, single-select, " + "multi-select, and boolean. Returns the request ID and URL for the human to respond. " + "The dashboard renders each label and description as markdown: put long content in description, fence code with a language, and put an image URL alone on its own line to show it. " + "No Slack message is sent; share the URL yourself.",
117044
117054
  inputSchema: object({
117045
117055
  title: string().min(1).describe("Title of the approval request"),
117046
117056
  questions: array(QuestionSchema).min(1).describe("Questions to ask the human"),
@@ -131695,6 +131705,9 @@ var registerUpdateWorkflowTool = (server) => {
131695
131705
  }
131696
131706
  });
131697
131707
  };
131708
+ // src/server.ts
131709
+ init_enabled_tools();
131710
+
131698
131711
  // src/utils/scripts-only-mode.ts
131699
131712
  init_env_flag();
131700
131713
  function resolveScriptsOnlyMode(opts) {
@@ -131759,9 +131772,43 @@ function getEnabledCapabilities() {
131759
131772
  function isScriptsOnlyMcp() {
131760
131773
  return resolveScriptsOnlyMode({ env: process.env.SCRIPTS_ONLY_MCP });
131761
131774
  }
131775
+ var loggedToolAllowlistWarnings = new Set;
131776
+ function warnToolAllowlistOnce(message) {
131777
+ if (loggedToolAllowlistWarnings.has(message))
131778
+ return;
131779
+ loggedToolAllowlistWarnings.add(message);
131780
+ console.warn(message);
131781
+ }
131782
+ function resolveToolAllowlist(value) {
131783
+ if (value === undefined)
131784
+ return;
131785
+ try {
131786
+ const tools = parseEnabledTools(value);
131787
+ if (!tools) {
131788
+ warnToolAllowlistOnce("[MCP] SWARM_ENABLED_TOOLS is set but lists no tools; ignoring it");
131789
+ }
131790
+ return tools;
131791
+ } catch {
131792
+ warnToolAllowlistOnce("[MCP] Invalid SWARM_ENABLED_TOOLS; ignoring it");
131793
+ return;
131794
+ }
131795
+ }
131796
+ function applyToolAllowlist(server, allowlist) {
131797
+ const tools = server._registeredTools;
131798
+ const allowed = new Set(allowlist);
131799
+ for (const [name, tool] of Object.entries(tools)) {
131800
+ if (!allowed.has(name))
131801
+ tool.remove();
131802
+ }
131803
+ const unknown3 = allowlist.filter((name) => !Object.hasOwn(tools, name));
131804
+ if (unknown3.length > 0) {
131805
+ warnToolAllowlistOnce(`[MCP] SWARM_ENABLED_TOOLS names unknown tools, ignoring them: ${unknown3.join(", ")}`);
131806
+ }
131807
+ }
131762
131808
  async function createServer(opts = {}) {
131763
131809
  await loadGlobalConfigsIntoEnv(true);
131764
- const hasCapability2 = (cap) => opts.fullSurface === true || getCapabilities().has(cap);
131810
+ const toolAllowlist = opts.fullSurface === true ? undefined : resolveToolAllowlist(opts.enabledTools ?? process.env.SWARM_ENABLED_TOOLS);
131811
+ const hasCapability2 = (cap) => opts.fullSurface === true || toolAllowlist !== undefined || getCapabilities().has(cap);
131765
131812
  initDb(process.env.DATABASE_PATH);
131766
131813
  ensurePricingSeeded();
131767
131814
  startPricingRefreshLoop();
@@ -131785,7 +131832,7 @@ async function createServer(opts = {}) {
131785
131832
  });
131786
131833
  if (opts.preloadedTools?.length)
131787
131834
  setPreloadedTools(server, opts.preloadedTools);
131788
- if (opts.scriptsOnly ?? isScriptsOnlyMcp()) {
131835
+ if (toolAllowlist === undefined && (opts.scriptsOnly ?? isScriptsOnlyMcp())) {
131789
131836
  registerScriptSearchTool(server);
131790
131837
  registerScriptRunTool(server);
131791
131838
  registerScriptUpsertTool(server);
@@ -131996,6 +132043,8 @@ async function createServer(opts = {}) {
131996
132043
  registerListServicesTool(server);
131997
132044
  registerUpdateServiceStatusTool(server);
131998
132045
  }
132046
+ if (toolAllowlist)
132047
+ applyToolAllowlist(server, toolAllowlist);
131999
132048
  return server;
132000
132049
  }
132001
132050
 
@@ -134561,7 +134610,7 @@ class NotifyExecutor extends BaseExecutor {
134561
134610
  }
134562
134611
  }
134563
134612
  case "slack": {
134564
- const { getSlackApp: getSlackApp2 } = await import("./app-43vrdmv8.js");
134613
+ const { getSlackApp: getSlackApp2 } = await import("./app-nctetn1e.js");
134565
134614
  const app = getSlackApp2();
134566
134615
  if (!app) {
134567
134616
  return {
@@ -134691,7 +134740,8 @@ async function executeRawLlm(config) {
134691
134740
  modelName = llmConfig.model;
134692
134741
  const provider = createOpenAI({
134693
134742
  baseURL: llmConfig.baseURL,
134694
- apiKey: llmConfig.apiKey
134743
+ apiKey: llmConfig.apiKey,
134744
+ headers: llmConfig.headers
134695
134745
  });
134696
134746
  const model = provider(llmConfig.model);
134697
134747
  if (config.schema) {
@@ -135152,7 +135202,8 @@ class ValidateExecutor extends BaseExecutor {
135152
135202
  const llmConfig = await resolveWorkflowLlmConfig();
135153
135203
  const provider = createOpenAI({
135154
135204
  baseURL: llmConfig.baseURL,
135155
- apiKey: llmConfig.apiKey
135205
+ apiKey: llmConfig.apiKey,
135206
+ headers: llmConfig.headers
135156
135207
  });
135157
135208
  const { object: object4 } = await generateObject({
135158
135209
  model: provider(llmConfig.model),
@@ -7,7 +7,7 @@ import {
7
7
  replaceTabs,
8
8
  truncateMiddle,
9
9
  writeOutputFile
10
- } from "./cli-8ssjez7e.js";
10
+ } from "./cli-rhy7z1rp.js";
11
11
  import {
12
12
  Container,
13
13
  Spacer,
@@ -17,7 +17,7 @@ import {
17
17
  keyHint,
18
18
  normalizePath,
19
19
  stripBom
20
- } from "./cli-cwxhbf43.js";
20
+ } from "./cli-5t5my0h8.js";
21
21
  import {
22
22
  require_cross_spawn
23
23
  } from "./cli-5bfdm1ah.js";
@@ -2647,6 +2647,7 @@ class StreamableHttpTransport extends TransportEvents {
2647
2647
  sessionIdValue;
2648
2648
  protocolVersion;
2649
2649
  getStreamStarted = false;
2650
+ lastToken;
2650
2651
  constructor(options) {
2651
2652
  super();
2652
2653
  this.options = Object.freeze({ ...options, headers: options.headers ? { ...options.headers } : undefined });
@@ -2705,16 +2706,14 @@ class StreamableHttpTransport extends TransportEvents {
2705
2706
  this.closed = true;
2706
2707
  this.controller.abort();
2707
2708
  if (this.started && this.sessionIdValue) {
2708
- const controller = new AbortController;
2709
- const timeout = setTimeout(() => controller.abort(), 1000);
2710
2709
  try {
2711
- const { headers } = await this.headers();
2712
- await this.fetch(this.url, { method: "DELETE", headers, signal: controller.signal }).then(discard).catch(() => {
2713
- return;
2710
+ const response = await this.fetch(this.url, {
2711
+ method: "DELETE",
2712
+ headers: this.buildHeaders({}, this.lastToken),
2713
+ signal: AbortSignal.timeout(1000)
2714
2714
  });
2715
- } catch {} finally {
2716
- clearTimeout(timeout);
2717
- }
2715
+ await discard(response);
2716
+ } catch {}
2718
2717
  }
2719
2718
  this.emitClose();
2720
2719
  }
@@ -2738,6 +2737,11 @@ class StreamableHttpTransport extends TransportEvents {
2738
2737
  }
2739
2738
  }
2740
2739
  async headers(extra = {}) {
2740
+ const token = await this.options.authProvider?.token();
2741
+ this.lastToken = token;
2742
+ return { headers: this.buildHeaders(extra, token), ...token ? { token } : {} };
2743
+ }
2744
+ buildHeaders(extra, token) {
2741
2745
  const headers = new Headers(this.options.headers);
2742
2746
  for (const [name, value] of Object.entries(extra))
2743
2747
  headers.set(name, value);
@@ -2745,10 +2749,9 @@ class StreamableHttpTransport extends TransportEvents {
2745
2749
  headers.set("Mcp-Session-Id", this.sessionIdValue);
2746
2750
  if (this.protocolVersion)
2747
2751
  headers.set("MCP-Protocol-Version", this.protocolVersion);
2748
- const token = await this.options.authProvider?.token();
2749
2752
  if (token)
2750
2753
  headers.set("Authorization", `Bearer ${token}`);
2751
- return { headers, ...token ? { token } : {} };
2754
+ return headers;
2752
2755
  }
2753
2756
  captureSession(response) {
2754
2757
  const sessionId = response.headers.get("mcp-session-id");
@@ -3829,4 +3832,4 @@ function readStoredCredential(providerId, authPath = join(getAgentDir(), "auth.j
3829
3832
  }
3830
3833
  }
3831
3834
 
3832
- export { createToolNameMatcher, LIST_MCP_RESOURCES_TOOL, LIST_MCP_RESOURCE_TEMPLATES_TOOL, READ_MCP_RESOURCE_TOOL, isMcpToolName, mcpNamespace, getMcpToolExposure, validateMcpServerConfig, McpServerRegistry, getConfigValueEnvVarNames, isCommandConfigValue, isConfigValueConfigured, resolveConfigValueOrThrow, resolveHeadersOrThrow, require_proper_lockfile, operationSignal, raceWithAbortSignal, FileAuthStorageBackend, ReadOnlyAuthStorage, AuthStorage, readStoredCredential, JSON_RPC_ERROR_CODES, McpError, isObject, LATEST_PROTOCOL_VERSION, McpClient, StdioTransport, McpHttpError, McpAuthRequiredError, McpSessionExpiredError, StreamableHttpTransport, createMcpToolName, createMcpToolDefinition, createMcpToolRenderers, isMcpAppResource, createMcpResourceToolDefinitions };
3835
+ export { require_proper_lockfile, createToolNameMatcher, LIST_MCP_RESOURCES_TOOL, LIST_MCP_RESOURCE_TEMPLATES_TOOL, READ_MCP_RESOURCE_TOOL, isMcpToolName, mcpNamespace, getMcpToolExposure, validateMcpServerConfig, McpServerRegistry, getConfigValueEnvVarNames, isCommandConfigValue, isConfigValueConfigured, resolveConfigValueOrThrow, resolveHeadersOrThrow, operationSignal, raceWithAbortSignal, FileAuthStorageBackend, ReadOnlyAuthStorage, AuthStorage, readStoredCredential, JSON_RPC_ERROR_CODES, McpError, isObject, LATEST_PROTOCOL_VERSION, McpClient, StdioTransport, McpHttpError, McpAuthRequiredError, McpSessionExpiredError, StreamableHttpTransport, createMcpToolName, createMcpToolDefinition, createMcpToolRenderers, isMcpAppResource, createMcpResourceToolDefinitions };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clampThinkingLevel,
3
3
  getSystemMessageText
4
- } from "./cli-nexwh8zg.js";
4
+ } from "./cli-g7k7zbcz.js";
5
5
 
6
6
  // node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js
7
7
  class UnsupportedStrictJsonSchemaError extends Error {
@@ -227,7 +227,7 @@ function createGrammarToolInputProperties(tools, supportsOpenAIGrammarTools) {
227
227
  }
228
228
 
229
229
  // node_modules/@earendil-works/pi-ai/dist/utils/estimate.js
230
- var CHARS_PER_TOKEN = 4;
230
+ var CHARS_PER_TOKEN = 3.5;
231
231
  var ESTIMATED_IMAGE_CHARS = 4800;
232
232
  function calculateContextTokens(usage) {
233
233
  return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
@@ -4,12 +4,12 @@ import {
4
4
  linkIdentity,
5
5
  recordUnmappedIdentity,
6
6
  resolveIdentity
7
- } from "./cli-df56tqdw.js";
7
+ } from "./cli-wydz3feg.js";
8
8
  import {
9
9
  getKv,
10
10
  init_db1 as init_db,
11
11
  upsertKv
12
- } from "./cli-yshaazs1.js";
12
+ } from "./cli-mkdsy1nq.js";
13
13
 
14
14
  // src/slack/enrich.ts
15
15
  init_db();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  theme
3
- } from "./cli-cwxhbf43.js";
3
+ } from "./cli-5t5my0h8.js";
4
4
 
5
5
  // node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.js
6
6
  var ARMIN_WIDTH = 31;