@desplega.ai/agent-swarm 1.162.0 → 1.164.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 (240) hide show
  1. package/README.md +2 -1
  2. package/dist/{acp-adapter-74m73ae9.js → acp-adapter-8t22d18g.js} +2 -2
  3. package/dist/{actions-4sr14gnt.js → actions-49xrhww7.js} +32 -29
  4. package/dist/amp-adapter-p230tajt.js +34 -0
  5. package/dist/{anthropic-messages-8xxrzky9.js → anthropic-messages-hst62ws9.js} +3 -3
  6. package/dist/{app-pt68fbwp.js → app-tgzw3f3d.js} +11 -10
  7. package/dist/{assistant-cv3jytks.js → assistant-dgfjm07j.js} +33 -30
  8. package/dist/{azure-openai-responses-f5cqsyj8.js → azure-openai-responses-mh8tvf78.js} +9 -68
  9. package/dist/{boot-reembed-4ht4gqth.js → boot-reembed-0qzs614r.js} +13 -12
  10. package/dist/{boot-reembed-nxpcvpj9.js → boot-reembed-dgp6peyx.js} +12 -11
  11. package/dist/{boot-scrub-logs-k93kyw8k.js → boot-scrub-logs-fxnk021a.js} +10 -9
  12. package/dist/{boot-seeds-1skcrs0e.js → boot-seeds-xe7adjvm.js} +14 -13
  13. package/dist/{claude-adapter-r5g0tzge.js → claude-adapter-hx0n8a31.js} +22 -20
  14. package/dist/{claude-managed-adapter-yxkfxg8j.js → claude-managed-adapter-hskapeen.js} +3 -3
  15. package/dist/{claude-managed-setup-pkyrgshb.js → claude-managed-setup-p7mt6dfq.js} +1 -1
  16. package/dist/{claude-sdk-session-jxyxnrwd.js → claude-sdk-session-d61a9c8x.js} +22 -20
  17. package/dist/{cli-twrh04ap.js → cli-0y30kqz4.js} +3 -3
  18. package/dist/{cli-5xhpb3kv.js → cli-0z9dj97t.js} +9 -9
  19. package/dist/{cli-t845n9xk.js → cli-1nzb8ftr.js} +2 -2
  20. package/dist/{cli-kdkwd3yr.js → cli-1wd1n2ya.js} +38 -10
  21. package/dist/{cli-vxe6qa4h.js → cli-23az412e.js} +1 -1
  22. package/dist/{cli-bsky8g7w.js → cli-26x4d89j.js} +1 -1
  23. package/dist/{cli-swfmp1fx.js → cli-2ar0x7cz.js} +9 -9
  24. package/dist/cli-2ksgp01n.js +933 -0
  25. package/dist/{cli-rnyzn44p.js → cli-2zhhnz2h.js} +1 -1
  26. package/dist/{cli-vc9bp061.js → cli-3qaw32we.js} +5 -5
  27. package/dist/{cli-vy3ed88x.js → cli-402m8btc.js} +31 -3
  28. package/dist/{cli-5bcd7sfy.js → cli-43fh8fzw.js} +3 -3
  29. package/dist/{cli-5k6k8ta3.js → cli-4f7s6k3q.js} +13 -5
  30. package/dist/{cli-sqvfa090.js → cli-4ntg6tkp.js} +6 -5
  31. package/dist/{cli-kh04eqwe.js → cli-4y9bnpvy.js} +1 -1
  32. package/dist/{cli-qjjvzwzd.js → cli-5c2j5yvx.js} +1 -1
  33. package/dist/{cli-2zy95vhm.js → cli-6891ft0y.js} +2 -2
  34. package/dist/{cli-tre4bdgq.js → cli-6behs2bt.js} +1 -1
  35. package/dist/cli-7mm2r1kp.js +17 -0
  36. package/dist/cli-7xcgj20z.js +68 -0
  37. package/dist/{cli-4cwxn7gp.js → cli-812vt3ht.js} +2 -2
  38. package/dist/{cli-mbssg1xv.js → cli-8kt0bmgx.js} +1 -1
  39. package/dist/{cli-wjgs5wxe.js → cli-8rpq35c0.js} +7 -7
  40. package/dist/{cli-jxs2ygaw.js → cli-9m8fk2v7.js} +74 -29
  41. package/dist/{cli-pkd6s2wy.js → cli-9q3wt23f.js} +2 -2
  42. package/dist/{cli-s3hwpt9v.js → cli-9s6fsg07.js} +30 -10
  43. package/dist/{cli-xqpk3rp7.js → cli-9x3bwfd3.js} +28 -5
  44. package/dist/{cli-qrgt5bqf.js → cli-agamgm0p.js} +1 -1
  45. package/dist/{cli-13hw4z91.js → cli-b0f70z24.js} +1 -1
  46. package/dist/{cli-gpqpmns7.js → cli-cgrvsz2t.js} +2 -2
  47. package/dist/{cli-2hhfhfq5.js → cli-cn53e7vc.js} +8 -1
  48. package/dist/{cli-p0r8sxj5.js → cli-crjazzsg.js} +222 -4
  49. package/dist/{cli-tcen9p5w.js → cli-d37n8b7c.js} +5 -5
  50. package/dist/{cli-wxkkd0e0.js → cli-dgh781z9.js} +3 -3
  51. package/dist/cli-dsdg2wrk.js +516 -0
  52. package/dist/{cli-q24re23n.js → cli-e2xnc4m5.js} +4 -4
  53. package/dist/{cli-f7kvq46p.js → cli-erxeg64j.js} +20 -0
  54. package/dist/{cli-8ev9xqnx.js → cli-fajbc7sa.js} +17 -219
  55. package/dist/{cli-g739zqzt.js → cli-fj86xr3c.js} +2 -2
  56. package/dist/{cli-zvhd3f64.js → cli-fpbvcf55.js} +3 -3
  57. package/dist/{cli-kp42yek0.js → cli-fyra5y8k.js} +424 -71
  58. package/dist/{cli-jyy6pm2f.js → cli-g3qgrzck.js} +15 -3
  59. package/dist/{cli-eg0b3p0k.js → cli-g5erf0zt.js} +23 -14
  60. package/dist/{cli-cvatsam7.js → cli-gcvzvq3e.js} +4 -4
  61. package/dist/{cli-89s4ngw3.js → cli-gvcgmx69.js} +1 -1
  62. package/dist/{cli-7tre70zp.js → cli-j261c831.js} +138 -128
  63. package/dist/{cli-sptrj5f5.js → cli-j3me0jw2.js} +2 -2
  64. package/dist/{cli-zxqx25nz.js → cli-k6w44yvq.js} +6 -6
  65. package/dist/cli-ndx5yz5n.js +3299 -0
  66. package/dist/{cli-ykk5jaax.js → cli-nexwh8zg.js} +34 -29
  67. package/dist/{cli-rfjw9jw2.js → cli-ng97fjq7.js} +2 -2
  68. package/dist/{cli-4x0csdjq.js → cli-ngne1dng.js} +2 -2
  69. package/dist/{cli-4dcpaefp.js → cli-pfzrhb8n.js} +2 -2
  70. package/dist/{cli-hb5c2x5y.js → cli-q38n4bq0.js} +2 -2
  71. package/dist/{cli-cebmgwsc.js → cli-r109nq7n.js} +4 -4
  72. package/dist/{cli-nq7yqw7b.js → cli-t7g0vmtc.js} +4 -4
  73. package/dist/{cli-jf7wmv1r.js → cli-tsvj33y0.js} +58 -19
  74. package/dist/{cli-7af8yhav.js → cli-vbr859rz.js} +7 -4
  75. package/dist/{cli-nt8hecg9.js → cli-wk3v6h55.js} +67 -38
  76. package/dist/{cli-vyqs9ya8.js → cli-wwvk0tsy.js} +7 -7
  77. package/dist/{cli-rj0gqwwp.js → cli-y2de3bzp.js} +1 -1
  78. package/dist/{cli-hmsw1gpy.js → cli-y74170pb.js} +4 -4
  79. package/dist/cli-ydt3zkwv.js +70 -0
  80. package/dist/{cli-xk79303e.js → cli-yj790e19.js} +9 -1
  81. package/dist/cli-zt3w1cn1.js +137 -0
  82. package/dist/{cli-trc24wk2.js → cli-zxg80zs9.js} +1 -1
  83. package/dist/cli.js +23 -22
  84. package/dist/{cloudflare-workers-ai-system-one-k8ddqjkq.js → cloudflare-workers-ai-system-one-tt484t61.js} +2 -2
  85. package/dist/{codex-adapter-esvmnhn7.js → codex-adapter-e3pky8aj.js} +14 -13
  86. package/dist/{codex-hook-m73jmqgx.js → codex-hook-b1fb7c2k.js} +4 -3
  87. package/dist/{codex-session-runner-ban9excr.js → codex-session-runner-1gq27w2t.js} +14 -13
  88. package/dist/{commands-75413p2n.js → commands-q07ezjzn.js} +10 -9
  89. package/dist/cursor-adapter-50cz7yba.js +32 -0
  90. package/dist/{db-7f5pecwg.js → db-wwt0sq9q.js} +18 -9
  91. package/dist/{dispatcher-fh9at8nz.js → dispatcher-wrg35vdd.js} +31 -28
  92. package/dist/{dsh-adapter-wpze65d4.js → dsh-adapter-sa6rxfpc.js} +6 -6
  93. package/dist/{e2b-gjgdjp91.js → e2b-v5np73yj.js} +4 -4
  94. package/dist/{easter-egg-3d-3w5c2n4c.js → easter-egg-3d-h2hx9b64.js} +2 -2
  95. package/dist/{event-bus-sfx8dx3t.js → event-bus-vkbhzt4n.js} +1 -1
  96. package/dist/{execute-f50wg9nh.js → execute-6gczxy8v.js} +42 -13
  97. package/dist/{google-generative-ai-jxxpnegy.js → google-generative-ai-d6nphg3q.js} +3 -3
  98. package/dist/{google-vertex-x7q1angm.js → google-vertex-cpshkref.js} +3 -3
  99. package/dist/{handlers-w13787bb.js → handlers-rv3gxvsp.js} +34 -31
  100. package/dist/{hook-46g1jrvx.js → hook-bcf5m80y.js} +15 -13
  101. package/dist/{hook-4tpts2ry.js → hook-z8b1jm2d.js} +16 -14
  102. package/dist/{http-19pzbfrt.js → http-56f7yt97.js} +932 -134
  103. package/dist/{index-scptvdxg.js → index-0kncjnrm.js} +30 -23
  104. package/dist/{index-dqmp15bq.js → index-1e6cg96n.js} +31 -28
  105. package/dist/{index-qb4q1y3e.js → index-8xgdb3k8.js} +31 -28
  106. package/dist/index-adw4zr9j.js +1020 -0
  107. package/dist/{index-h5gs261z.js → index-etdrp7yp.js} +140 -140
  108. package/dist/{index-8fd4dm4h.js → index-f9zscmft.js} +32 -29
  109. package/dist/index-fdk1t4d6.js +91297 -0
  110. package/dist/{index-s75wc4wd.js → index-jvb37h77.js} +12 -11
  111. package/dist/{keepalive-xa5ts9cd.js → keepalive-rp8daj4s.js} +12 -11
  112. package/dist/{lead-qp4xkvjq.js → lead-dfp77erc.js} +45 -40
  113. package/dist/{maintenance-rm5885hm.js → maintenance-wtmw3jqv.js} +13 -12
  114. package/dist/{mistral-conversations-rw7fbt22.js → mistral-conversations-8445ddjn.js} +2 -2
  115. package/dist/{oauth-refresh-sweep-1csdfebf.js → oauth-refresh-sweep-yhzqt95v.js} +11 -10
  116. package/dist/{onboard-r6b78cs4.js → onboard-9z8rwbcy.js} +2 -2
  117. package/dist/{openai-codex-responses-efvrgrq3.js → openai-codex-responses-9ynm88zy.js} +3 -3
  118. package/dist/{openai-completions-bbbrrz4z.js → openai-completions-nhqwjmaw.js} +2 -2
  119. package/dist/{openai-responses-9jjyrcm1.js → openai-responses-xx1c4kgm.js} +3 -3
  120. package/dist/{opencode-adapter-kb3g6pkf.js → opencode-adapter-1nxb6555.js} +5 -5
  121. package/dist/{otel-impl-0y9knpky.js → otel-impl-b83gaxw2.js} +1 -1
  122. package/dist/{pi-mono-adapter-z6s1bme2.js → pi-mono-adapter-ddxz8pjp.js} +18 -17
  123. package/dist/{pricing-refresh-mth26tgp.js → pricing-refresh-tmjvazb6.js} +12 -11
  124. package/dist/{rbac-roles-kwntb23q.js → rbac-roles-pa0gzjws.js} +11 -10
  125. package/dist/{rbac-roles-vpk4ebm8.js → rbac-roles-rhexa9s2.js} +12 -11
  126. package/dist/{render-v2-hcm7h00y.js → render-v2-ask84n8y.js} +11 -10
  127. package/dist/{runtime-vfjsfsc5.js → runtime-ckjnj3vf.js} +4 -4
  128. package/dist/{setup-hbyzd65h.js → setup-5ga5gdsy.js} +2 -2
  129. package/dist/{typesafe-system-one-2ef30pec.js → typesafe-system-one-datfr82p.js} +2 -2
  130. package/dist/{virtual-modules-9bv7ry91.js → virtual-modules-bmp3zwjf.js} +12 -11
  131. package/dist/{work-objects-m09sxnhe.js → work-objects-snnh0t7j.js} +34 -31
  132. package/dist/{worker-0h35rvk4.js → worker-rxyymrhb.js} +45 -40
  133. package/openapi.json +997 -39
  134. package/package.json +6 -5
  135. package/src/be/db/active-sessions.ts +30 -0
  136. package/src/be/db/approvals.ts +54 -0
  137. package/src/be/db.ts +25 -4
  138. package/src/be/mcp-server-checked-update.ts +34 -0
  139. package/src/be/mcp-server-stdio-gate.ts +34 -0
  140. package/src/be/memory/key-browser.ts +304 -0
  141. package/src/be/memory/providers/sqlite-store.ts +16 -3
  142. package/src/be/migrations/194_memory_orphan_chunks.sql +15 -0
  143. package/src/be/migrations/195_approval_request_approvals.sql +6 -0
  144. package/src/be/model-validation.ts +12 -2
  145. package/src/be/multi-runtime.ts +4 -3
  146. package/src/be/pricing-normalize.ts +11 -0
  147. package/src/be/repo-checked-update.ts +37 -0
  148. package/src/be/repo-merge-policy.ts +15 -0
  149. package/src/be/seed-pricing.ts +48 -1
  150. package/src/be/swarm-config-guard.ts +1 -0
  151. package/src/commands/provider-credentials.ts +44 -2
  152. package/src/extensions/contract-types.generated.ts +1 -1
  153. package/src/extensions/contract.ts +100 -0
  154. package/src/extensions/dispatcher.ts +19 -0
  155. package/src/extensions/post-bridge.ts +191 -0
  156. package/src/github/handlers.ts +128 -2
  157. package/src/gitlab/workflow-action-name.ts +15 -0
  158. package/src/heartbeat/heartbeat.ts +4 -3
  159. package/src/http/active-sessions.ts +6 -5
  160. package/src/http/agents.ts +10 -1
  161. package/src/http/approval-requests.ts +271 -35
  162. package/src/http/index.ts +1 -1
  163. package/src/http/mcp-servers.ts +74 -50
  164. package/src/http/memory.ts +275 -6
  165. package/src/http/repos.ts +58 -18
  166. package/src/http/request-principal.ts +19 -0
  167. package/src/http/session-cost-recompute.ts +64 -0
  168. package/src/http/session-data.ts +11 -0
  169. package/src/http/tasks.ts +9 -1
  170. package/src/http/webhooks.ts +17 -5
  171. package/src/prompts/base-prompt.ts +9 -4
  172. package/src/prompts/resolver.ts +1 -1
  173. package/src/prompts/session-templates.ts +28 -0
  174. package/src/providers/amp-adapter.ts +1232 -0
  175. package/src/providers/cursor-adapter.ts +638 -0
  176. package/src/providers/index.ts +9 -1
  177. package/src/providers/pricing-sources.md +39 -0
  178. package/src/providers/reasoning-effort.ts +15 -1
  179. package/src/providers/types.ts +11 -1
  180. package/src/rbac/legacy-policy.ts +23 -8
  181. package/src/rbac/permissions.ts +27 -1
  182. package/src/scripts-runtime/types/swarm-extension.d.ts +119 -0
  183. package/src/tests/amp-adapter.test.ts +822 -0
  184. package/src/tests/amp-budget-export-failed.test.ts +133 -0
  185. package/src/tests/amp-pricing-helpers.ts +16 -0
  186. package/src/tests/amp-pricing.test.ts +218 -0
  187. package/src/tests/api-drain-worker-e2e.test.ts +18 -7
  188. package/src/tests/approval-respond-auth.test.ts +371 -0
  189. package/src/tests/base-prompt.test.ts +13 -0
  190. package/src/tests/claude-adapter-binary.test.ts +24 -0
  191. package/src/tests/claude-adapter.test.ts +8 -0
  192. package/src/tests/cursor-adapter.test.ts +690 -0
  193. package/src/tests/db-task-read-contract.test.ts +5 -0
  194. package/src/tests/db-task-write-contract.test.ts +5 -0
  195. package/src/tests/docs-index-footprint.test.js +3 -3
  196. package/src/tests/extensions-post-bridge.test.ts +669 -0
  197. package/src/tests/extensions-run-context.test.ts +61 -0
  198. package/src/tests/fixtures/fake-amp.ts +304 -0
  199. package/src/tests/github-handlers-inline-comments.test.ts +147 -1
  200. package/src/tests/gitlab-workflow-event-names.test.ts +136 -0
  201. package/src/tests/mcp-input-ergonomics.test.ts +15 -10
  202. package/src/tests/mcp-server-stdio-gate.test.ts +438 -0
  203. package/src/tests/memory-http-access.test.ts +221 -0
  204. package/src/tests/memory-keys-endpoint.test.ts +406 -0
  205. package/src/tests/memory-store.test.ts +166 -0
  206. package/src/tests/model-tier-resolution.test.ts +3 -3
  207. package/src/tests/pricing-refresh.test.ts +5 -4
  208. package/src/tests/prompt-template-session.test.ts +5 -3
  209. package/src/tests/provider-process-group.test.ts +41 -0
  210. package/src/tests/provider-registration.test.ts +3 -1
  211. package/src/tests/rbac-charact-misc-tools.test.ts +18 -3
  212. package/src/tests/rbac-engine.test.ts +15 -11
  213. package/src/tests/rbac-wire-e2e.test.ts +4 -9
  214. package/src/tests/repo-allow-merge-gate.test.ts +382 -0
  215. package/src/tests/script-connections.test.ts +4 -0
  216. package/src/tests/send-task-requester-gate.test.ts +260 -0
  217. package/src/tests/session-activity-liveness.test.ts +248 -0
  218. package/src/tests/session-costs-golden.test.ts +28 -0
  219. package/src/tests/webhooks-task-blocked.test.ts +4 -4
  220. package/src/tests/write-gate.ts +68 -0
  221. package/src/tests/x402-client.test.ts +124 -0
  222. package/src/tests/x402-spending-tracker.test.ts +66 -0
  223. package/src/tools/mcp-servers/mcp-server-create.ts +23 -1
  224. package/src/tools/mcp-servers/mcp-server-update.ts +46 -28
  225. package/src/tools/memory-delete.ts +3 -3
  226. package/src/tools/repos/update-repo.ts +26 -5
  227. package/src/tools/send-task.ts +24 -1
  228. package/src/tools/steer-task.ts +1 -1
  229. package/src/types.ts +37 -2
  230. package/src/utils/amp-models.ts +114 -0
  231. package/src/utils/credentials.ts +8 -0
  232. package/src/utils/process-group.ts +79 -0
  233. package/src/workflows/event-bus.ts +28 -0
  234. package/src/x402/client.ts +36 -14
  235. package/src/x402/spending-tracker.ts +64 -3
  236. package/templates/skills/agent-browser/SKILL.md +5 -0
  237. package/templates/skills/agent-browser/content.md +5 -0
  238. package/templates/skills/heartbeat-runbook/content.md +1 -0
  239. package/templates/skills/swarm-extensions/content.md +4 -0
  240. package/dist/cli-y89t4nca.js +0 -67
@@ -7,11 +7,229 @@ import {
7
7
  imageFallback,
8
8
  resolvePath,
9
9
  truncateToWidth
10
- } from "./cli-s3hwpt9v.js";
10
+ } from "./cli-9s6fsg07.js";
11
+
12
+ // node_modules/@earendil-works/pi-coding-agent/dist/utils/output-files.js
13
+ import { randomBytes } from "node:crypto";
14
+ import { createWriteStream } from "node:fs";
15
+ import { writeFile } from "node:fs/promises";
16
+ import { tmpdir } from "node:os";
17
+ import { join } from "node:path";
18
+ var OUTPUT_FILE_MODE = 384;
19
+ function createOutputFilePath(prefix, extension) {
20
+ return join(tmpdir(), `${prefix}-${randomBytes(8).toString("hex")}${extension}`);
21
+ }
22
+ async function writeOutputFile(prefix, extension, data) {
23
+ const path = createOutputFilePath(prefix, extension);
24
+ await writeFile(path, data, { mode: OUTPUT_FILE_MODE, flag: "wx" });
25
+ return path;
26
+ }
27
+ function createOutputFileStream(prefix, extension) {
28
+ const path = createOutputFilePath(prefix, extension);
29
+ return { path, stream: createWriteStream(path, { mode: OUTPUT_FILE_MODE, flags: "wx" }) };
30
+ }
31
+
32
+ // node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.js
33
+ var DEFAULT_MAX_LINES = 2000;
34
+ var DEFAULT_MAX_BYTES = 50 * 1024;
35
+ var GREP_MAX_LINE_LENGTH = 500;
36
+ function splitLinesForCounting(content) {
37
+ if (content.length === 0) {
38
+ return [];
39
+ }
40
+ const lines = content.split(`
41
+ `);
42
+ if (content.endsWith(`
43
+ `)) {
44
+ lines.pop();
45
+ }
46
+ return lines;
47
+ }
48
+ function formatSize(bytes) {
49
+ if (bytes < 1024) {
50
+ return `${bytes}B`;
51
+ } else if (bytes < 1024 * 1024) {
52
+ return `${(bytes / 1024).toFixed(1)}KB`;
53
+ } else {
54
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
55
+ }
56
+ }
57
+ function truncateHead(content, options = {}) {
58
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
59
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
60
+ const totalBytes = Buffer.byteLength(content, "utf-8");
61
+ const lines = splitLinesForCounting(content);
62
+ const totalLines = lines.length;
63
+ if (totalLines <= maxLines && totalBytes <= maxBytes) {
64
+ return {
65
+ content,
66
+ truncated: false,
67
+ truncatedBy: null,
68
+ totalLines,
69
+ totalBytes,
70
+ outputLines: totalLines,
71
+ outputBytes: totalBytes,
72
+ lastLinePartial: false,
73
+ firstLineExceedsLimit: false,
74
+ maxLines,
75
+ maxBytes
76
+ };
77
+ }
78
+ const firstLineBytes = Buffer.byteLength(lines[0], "utf-8");
79
+ if (firstLineBytes > maxBytes) {
80
+ return {
81
+ content: "",
82
+ truncated: true,
83
+ truncatedBy: "bytes",
84
+ totalLines,
85
+ totalBytes,
86
+ outputLines: 0,
87
+ outputBytes: 0,
88
+ lastLinePartial: false,
89
+ firstLineExceedsLimit: true,
90
+ maxLines,
91
+ maxBytes
92
+ };
93
+ }
94
+ const outputLinesArr = [];
95
+ let outputBytesCount = 0;
96
+ let truncatedBy = "lines";
97
+ for (let i = 0;i < lines.length && i < maxLines; i++) {
98
+ const line = lines[i];
99
+ const lineBytes = Buffer.byteLength(line, "utf-8") + (i > 0 ? 1 : 0);
100
+ if (outputBytesCount + lineBytes > maxBytes) {
101
+ truncatedBy = "bytes";
102
+ break;
103
+ }
104
+ outputLinesArr.push(line);
105
+ outputBytesCount += lineBytes;
106
+ }
107
+ if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
108
+ truncatedBy = "lines";
109
+ }
110
+ const outputContent = outputLinesArr.join(`
111
+ `);
112
+ const finalOutputBytes = Buffer.byteLength(outputContent, "utf-8");
113
+ return {
114
+ content: outputContent,
115
+ truncated: true,
116
+ truncatedBy,
117
+ totalLines,
118
+ totalBytes,
119
+ outputLines: outputLinesArr.length,
120
+ outputBytes: finalOutputBytes,
121
+ lastLinePartial: false,
122
+ firstLineExceedsLimit: false,
123
+ maxLines,
124
+ maxBytes
125
+ };
126
+ }
127
+ function truncateTail(content, options = {}) {
128
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
129
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
130
+ const totalBytes = Buffer.byteLength(content, "utf-8");
131
+ const lines = splitLinesForCounting(content);
132
+ const totalLines = lines.length;
133
+ if (totalLines <= maxLines && totalBytes <= maxBytes) {
134
+ return {
135
+ content,
136
+ truncated: false,
137
+ truncatedBy: null,
138
+ totalLines,
139
+ totalBytes,
140
+ outputLines: totalLines,
141
+ outputBytes: totalBytes,
142
+ lastLinePartial: false,
143
+ firstLineExceedsLimit: false,
144
+ maxLines,
145
+ maxBytes
146
+ };
147
+ }
148
+ const outputLinesArr = [];
149
+ let outputBytesCount = 0;
150
+ let truncatedBy = "lines";
151
+ let lastLinePartial = false;
152
+ for (let i = lines.length - 1;i >= 0 && outputLinesArr.length < maxLines; i--) {
153
+ const line = lines[i];
154
+ const lineBytes = Buffer.byteLength(line, "utf-8") + (outputLinesArr.length > 0 ? 1 : 0);
155
+ if (outputBytesCount + lineBytes > maxBytes) {
156
+ truncatedBy = "bytes";
157
+ if (outputLinesArr.length === 0) {
158
+ const truncatedLine = truncateStringToBytesFromEnd(line, maxBytes);
159
+ outputLinesArr.unshift(truncatedLine);
160
+ outputBytesCount = Buffer.byteLength(truncatedLine, "utf-8");
161
+ lastLinePartial = true;
162
+ }
163
+ break;
164
+ }
165
+ outputLinesArr.unshift(line);
166
+ outputBytesCount += lineBytes;
167
+ }
168
+ if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
169
+ truncatedBy = "lines";
170
+ }
171
+ const outputContent = outputLinesArr.join(`
172
+ `);
173
+ const finalOutputBytes = Buffer.byteLength(outputContent, "utf-8");
174
+ return {
175
+ content: outputContent,
176
+ truncated: true,
177
+ truncatedBy,
178
+ totalLines,
179
+ totalBytes,
180
+ outputLines: outputLinesArr.length,
181
+ outputBytes: finalOutputBytes,
182
+ lastLinePartial,
183
+ firstLineExceedsLimit: false,
184
+ maxLines,
185
+ maxBytes
186
+ };
187
+ }
188
+ function truncateStringToBytesFromEnd(str, maxBytes) {
189
+ const buf = Buffer.from(str, "utf-8");
190
+ if (buf.length <= maxBytes) {
191
+ return str;
192
+ }
193
+ let start = buf.length - maxBytes;
194
+ while (start < buf.length && (buf[start] & 192) === 128) {
195
+ start++;
196
+ }
197
+ return buf.slice(start).toString("utf-8");
198
+ }
199
+ function truncateLine(line, maxChars = GREP_MAX_LINE_LENGTH) {
200
+ if (line.length <= maxChars) {
201
+ return { text: line, wasTruncated: false };
202
+ }
203
+ return { text: `${line.slice(0, maxChars)}... [truncated]`, wasTruncated: true };
204
+ }
205
+ function truncateMiddle(content, maxBytes) {
206
+ const buf = Buffer.from(content, "utf-8");
207
+ const totalLines = splitLinesForCounting(content).length;
208
+ if (buf.length <= maxBytes) {
209
+ return { content, truncated: false, removedChars: 0, totalBytes: buf.length, totalLines };
210
+ }
211
+ const isBoundary = (index) => index >= buf.length || (buf[index] & 192) !== 128;
212
+ let headEnd = Math.floor(maxBytes / 2);
213
+ while (headEnd > 0 && !isBoundary(headEnd))
214
+ headEnd--;
215
+ let tailStart = buf.length - (maxBytes - Math.floor(maxBytes / 2));
216
+ while (tailStart < buf.length && !isBoundary(tailStart))
217
+ tailStart++;
218
+ const head = buf.subarray(0, headEnd).toString("utf-8");
219
+ const tail = buf.subarray(tailStart).toString("utf-8");
220
+ const removedChars = Array.from(buf.subarray(headEnd, tailStart).toString("utf-8")).length;
221
+ return {
222
+ content: `${head}…${removedChars} chars truncated…${tail}`,
223
+ truncated: true,
224
+ removedChars,
225
+ totalBytes: buf.length,
226
+ totalLines
227
+ };
228
+ }
11
229
 
12
230
  // node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js
13
231
  import { existsSync } from "node:fs";
14
- import { delimiter, join } from "node:path";
232
+ import { delimiter, join as join2 } from "node:path";
15
233
  import { spawn, spawnSync } from "child_process";
16
234
  function isLegacyWslBashPath(path) {
17
235
  const normalized = path.replace(/\//g, "\\").toLowerCase();
@@ -134,7 +352,7 @@ function killTrackedDetachedChildren() {
134
352
  function killProcessTree(pid) {
135
353
  if (process.platform === "win32") {
136
354
  try {
137
- const child = spawn(join(process.env.SystemRoot ?? "C:\\Windows", "System32", "taskkill.exe"), ["/F", "/T", "/PID", String(pid)], {
355
+ const child = spawn(join2(process.env.SystemRoot ?? "C:\\Windows", "System32", "taskkill.exe"), ["/F", "/T", "/PID", String(pid)], {
138
356
  stdio: "ignore",
139
357
  detached: true,
140
358
  windowsHide: true
@@ -300,4 +518,4 @@ function renderToolPath(rawPath, theme, cwd, options) {
300
518
  return linkPath(theme.fg("accent", shortenPath(value)), value, cwd);
301
519
  }
302
520
 
303
- export { stripAnsi, getShellConfig, getPowerShellConfig, getShellEnv, sanitizeBinaryOutput, trackDetachedChildPid, untrackDetachedChildPid, killTrackedDetachedChildren, killProcessTree, truncateToVisualLines, VisualLinePreview, shortenPath, str, replaceTabs, normalizeDisplayText, getTextOutput, formatToolCallWithArgs, invalidArgText, renderToolPath };
521
+ export { stripAnsi, writeOutputFile, createOutputFileStream, getShellConfig, getPowerShellConfig, getShellEnv, sanitizeBinaryOutput, trackDetachedChildPid, untrackDetachedChildPid, killTrackedDetachedChildren, killProcessTree, DEFAULT_MAX_LINES, DEFAULT_MAX_BYTES, GREP_MAX_LINE_LENGTH, formatSize, truncateHead, truncateTail, truncateLine, truncateMiddle, truncateToVisualLines, VisualLinePreview, shortenPath, str, replaceTabs, normalizeDisplayText, getTextOutput, formatToolCallWithArgs, invalidArgText, renderToolPath };
@@ -5,24 +5,24 @@ import {
5
5
  McpSignInCancelledError,
6
6
  createDefaultTransport,
7
7
  signInMcpServer
8
- } from "./cli-4x0csdjq.js";
8
+ } from "./cli-ngne1dng.js";
9
9
  import {
10
10
  ProjectTrustStore,
11
11
  addMcpServerConfig,
12
12
  loadMcpConfig,
13
13
  openBrowser,
14
14
  removeMcpServerConfig
15
- } from "./cli-4cwxn7gp.js";
15
+ } from "./cli-812vt3ht.js";
16
16
  import {
17
17
  getMcpToolExposure,
18
18
  validateMcpServerConfig
19
- } from "./cli-8ev9xqnx.js";
20
- import"./cli-p0r8sxj5.js";
19
+ } from "./cli-fajbc7sa.js";
20
+ import"./cli-crjazzsg.js";
21
21
  import {
22
22
  APP_NAME,
23
23
  CONFIG_DIR_NAME,
24
24
  source_default
25
- } from "./cli-s3hwpt9v.js";
25
+ } from "./cli-9s6fsg07.js";
26
26
  import"./cli-5bfdm1ah.js";
27
27
  import"./cli-0m7wct0d.js";
28
28
  import"./cli-2x0e561b.js";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  seedPricingFromModelsDev
3
- } from "./cli-vy3ed88x.js";
3
+ } from "./cli-402m8btc.js";
4
4
  import {
5
5
  ensureRbacSeedsSynced,
6
6
  init_rbac_roles
7
- } from "./cli-2zy95vhm.js";
7
+ } from "./cli-6891ft0y.js";
8
8
  import {
9
9
  getDb,
10
10
  init_db
11
- } from "./cli-jf7wmv1r.js";
11
+ } from "./cli-tsvj33y0.js";
12
12
 
13
13
  // src/be/boot-seeds.ts
14
14
  init_db();