@wrongstack/tools 0.320.1 → 1.0.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 (191) hide show
  1. package/dist/_danger-detect.d.ts +8 -0
  2. package/dist/_syntax-check.d.ts +1 -2
  3. package/dist/audit.d.ts +4 -5
  4. package/dist/audit.js +6 -6
  5. package/dist/auto-proceed-loop-guard.js +9 -160
  6. package/dist/bash-kill-guard.d.ts +2 -3
  7. package/dist/bash.d.ts +2 -3
  8. package/dist/bash.js +4 -4
  9. package/dist/batch-tool-use.d.ts +2 -3
  10. package/dist/batch-tool-use.js +1 -1
  11. package/dist/browser/index.d.ts +1 -1
  12. package/dist/browser/index.js +1 -1
  13. package/dist/browser/tools.d.ts +56 -45
  14. package/dist/builtin.js +50 -50
  15. package/dist/{chunk-T77XOX7E.js → chunk-24T5XIJU.js} +1 -1
  16. package/dist/{chunk-DTQ75VBC.js → chunk-2CTZW6JQ.js} +2 -2
  17. package/dist/chunk-37QKUQ2Z.js +171 -0
  18. package/dist/{chunk-KWXIKGE3.js → chunk-3D5DJWOE.js} +3 -3
  19. package/dist/{chunk-XSSFBS5I.js → chunk-4ERMPDHV.js} +11 -6
  20. package/dist/{chunk-QSNVDHOZ.js → chunk-4WPBS45A.js} +4 -5
  21. package/dist/{chunk-4CQWNZ62.js → chunk-5ITQPCLC.js} +2 -2
  22. package/dist/{chunk-B4HTSV6Z.js → chunk-5KS24LTS.js} +11 -11
  23. package/dist/{chunk-QPNYDH5B.js → chunk-62OAECEQ.js} +29 -7
  24. package/dist/{chunk-DFQDJT22.js → chunk-6GOZTS6F.js} +3 -3
  25. package/dist/{chunk-34VLZ35Z.js → chunk-7HL23T3T.js} +63 -10
  26. package/dist/{chunk-HFXSNKCV.js → chunk-7JJFC6CT.js} +1 -1
  27. package/dist/{chunk-NDIT3SBZ.js → chunk-7N5U2RAU.js} +2 -2
  28. package/dist/{chunk-QBV725YG.js → chunk-7ODZTPCU.js} +2 -2
  29. package/dist/{chunk-4BABEJC2.js → chunk-AB2CAUOP.js} +64 -53
  30. package/dist/{chunk-6AAOT4PW.js → chunk-AQ5YBURX.js} +16 -4
  31. package/dist/{chunk-ZMW6WJFT.js → chunk-ASEXQRA7.js} +3 -3
  32. package/dist/{chunk-FRN7TIAA.js → chunk-B3MGJBFI.js} +1 -1
  33. package/dist/{chunk-JLYA4X7K.js → chunk-CGXTR34H.js} +21 -6
  34. package/dist/{chunk-IU4DV2PA.js → chunk-CHEK3ASV.js} +6 -3
  35. package/dist/{chunk-GOIZNNOA.js → chunk-DJYLI7EW.js} +1 -1
  36. package/dist/{chunk-Z6IHMJMC.js → chunk-DK4J2WMH.js} +11 -11
  37. package/dist/{chunk-OYP27E3I.js → chunk-DRRY6SCM.js} +47 -20
  38. package/dist/{chunk-BK732J7I.js → chunk-FBUP524S.js} +4 -4
  39. package/dist/{chunk-NYRLWDT5.js → chunk-FVM3O4JQ.js} +1 -1
  40. package/dist/chunk-FYDBUVQD.js +244 -0
  41. package/dist/{chunk-PV6HIZQD.js → chunk-GDDXX27P.js} +50 -50
  42. package/dist/{chunk-3GIKYHLA.js → chunk-GKSG5CPH.js} +6 -6
  43. package/dist/{chunk-ESLPBT5A.js → chunk-HDYUBRMF.js} +4 -3
  44. package/dist/{chunk-ELRRTWNP.js → chunk-IXIS7RSG.js} +2 -2
  45. package/dist/{chunk-HR67OWEP.js → chunk-IYH4OHBP.js} +5 -5
  46. package/dist/{chunk-W232EFEM.js → chunk-JDOO4P6Z.js} +7 -4
  47. package/dist/{chunk-OTPTQBYE.js → chunk-KDEXUQY7.js} +19 -8
  48. package/dist/{chunk-2OXHS3KZ.js → chunk-KLJZ4WV4.js} +4 -3
  49. package/dist/{chunk-3M7LLN7W.js → chunk-LQSOU63Z.js} +12 -11
  50. package/dist/{chunk-JVRLTEO7.js → chunk-M6UV67BH.js} +2 -2
  51. package/dist/{chunk-C2DQKVLO.js → chunk-MJSJWXBF.js} +1 -1
  52. package/dist/{chunk-NSPNFOJ7.js → chunk-MK2JK35J.js} +25 -10
  53. package/dist/{chunk-JSNSMG5R.js → chunk-MSOAX3GC.js} +1 -1
  54. package/dist/{chunk-J43O3BOX.js → chunk-N3K2SFEI.js} +532 -492
  55. package/dist/{chunk-J74TMK4M.js → chunk-NJX2RXKJ.js} +50 -7
  56. package/dist/{chunk-5UFVCIUB.js → chunk-NN2SNP2R.js} +4 -4
  57. package/dist/{chunk-WAQASTXB.js → chunk-O6BY43ZB.js} +29 -8
  58. package/dist/{chunk-QGF2C7TF.js → chunk-PVCB7RUZ.js} +2 -2
  59. package/dist/{chunk-YTKSNTT4.js → chunk-QA6IASYX.js} +8 -8
  60. package/dist/{chunk-VPALDFYM.js → chunk-RV7BVTDG.js} +1 -1
  61. package/dist/chunk-S57CDR2H.js +288 -0
  62. package/dist/{chunk-W2CECGTG.js → chunk-SMARDKAC.js} +1 -1
  63. package/dist/{chunk-QWKSKFKZ.js → chunk-SOR7OCYP.js} +1 -1
  64. package/dist/{chunk-I7FBZOEP.js → chunk-T3SMFF5Q.js} +11 -5
  65. package/dist/{chunk-4BHUSMNL.js → chunk-UI3ZJIG3.js} +1 -1
  66. package/dist/{chunk-WXJY3BKV.js → chunk-VBF2YXUW.js} +2 -2
  67. package/dist/{chunk-FQNXYA6W.js → chunk-VU3QBYL4.js} +36 -5
  68. package/dist/{chunk-VD2LV5WO.js → chunk-VZGPASGD.js} +37 -12
  69. package/dist/{chunk-UZFY3CKD.js → chunk-WEEVSWQB.js} +17 -6
  70. package/dist/chunk-XXRMF2BC.js +186 -0
  71. package/dist/{chunk-LRDIRJJL.js → chunk-YEISRT4S.js} +5 -11
  72. package/dist/{chunk-Q5JPPCZC.js → chunk-YJTXRH5Y.js} +3 -2
  73. package/dist/{chunk-23EX5WDO.js → chunk-YULVUTK5.js} +3 -3
  74. package/dist/{chunk-Z5Q3TXRY.js → chunk-ZTCJCYLN.js} +3 -3
  75. package/dist/circuit-breaker.d.ts +1 -0
  76. package/dist/circuit-breaker.js +1 -1
  77. package/dist/clarify.d.ts +1 -0
  78. package/dist/codebase-index/codebase-ast-replace-tool.d.ts +2 -3
  79. package/dist/codebase-index/codebase-impact-analysis-tool.d.ts +5 -4
  80. package/dist/codebase-index/codebase-incoming-calls-tool.d.ts +4 -3
  81. package/dist/codebase-index/codebase-index-tool.d.ts +2 -3
  82. package/dist/codebase-index/codebase-invariant-check-tool.d.ts +2 -3
  83. package/dist/codebase-index/codebase-outgoing-calls-tool.d.ts +4 -3
  84. package/dist/codebase-index/codebase-repo-map-tool.d.ts +2 -3
  85. package/dist/codebase-index/codebase-search-tool.d.ts +2 -3
  86. package/dist/codebase-index/codebase-skeleton-tool.d.ts +2 -3
  87. package/dist/codebase-index/codebase-stats-tool.d.ts +9 -3
  88. package/dist/codebase-index/codebase-targeted-test-tool.d.ts +4 -3
  89. package/dist/codebase-index/index.d.ts +11 -11
  90. package/dist/codebase-index/index.js +8 -8
  91. package/dist/codebase-index/project-server-framing.d.ts +29 -0
  92. package/dist/codebase-index/project-server-lifecycle.d.ts +20 -0
  93. package/dist/codebase-index/project-server-operations.d.ts +37 -0
  94. package/dist/codebase-index/project-server-types.d.ts +30 -0
  95. package/dist/codebase-index/project-server-watcher.d.ts +25 -0
  96. package/dist/codebase-index/project-server.js +448 -391
  97. package/dist/codebase-index/worker.js +2 -2
  98. package/dist/codebase-index/writer-init.d.ts +13 -0
  99. package/dist/codebase-index/writer-maintenance.d.ts +14 -0
  100. package/dist/codebase-index/writer.d.ts +0 -15
  101. package/dist/design.d.ts +2 -2
  102. package/dist/design.js +1 -1
  103. package/dist/diff.d.ts +4 -4
  104. package/dist/diff.js +1 -1
  105. package/dist/document.d.ts +3 -4
  106. package/dist/document.js +1 -1
  107. package/dist/e2e.d.ts +1 -1
  108. package/dist/e2e.js +1 -1
  109. package/dist/edit.d.ts +3 -3
  110. package/dist/edit.js +6 -6
  111. package/dist/exec.d.ts +2 -3
  112. package/dist/exec.js +4 -4
  113. package/dist/fetch.d.ts +4 -3
  114. package/dist/fetch.js +1 -1
  115. package/dist/format.d.ts +17 -45
  116. package/dist/format.js +12 -8
  117. package/dist/git.d.ts +3 -3
  118. package/dist/git.js +1 -1
  119. package/dist/glob.d.ts +2 -3
  120. package/dist/glob.js +2 -2
  121. package/dist/grep.d.ts +7 -5
  122. package/dist/grep.js +3 -3
  123. package/dist/index.d.ts +54 -45
  124. package/dist/index.js +118 -59
  125. package/dist/install.d.ts +7 -55
  126. package/dist/install.js +6 -6
  127. package/dist/json.d.ts +3 -4
  128. package/dist/json.js +2 -2
  129. package/dist/kanban-tool-types.d.ts +1 -2
  130. package/dist/kanban.d.ts +3 -19
  131. package/dist/kanban.js +1 -1
  132. package/dist/languages/execute-tool.d.ts +2 -3
  133. package/dist/languages/index.d.ts +2 -2
  134. package/dist/languages/index.js +4 -4
  135. package/dist/languages/tool.d.ts +3 -4
  136. package/dist/{legacy-bridge-FOV5ODDI.js → legacy-bridge-YXANP5QB.js} +6 -6
  137. package/dist/lint.d.ts +5 -4
  138. package/dist/lint.js +6 -6
  139. package/dist/logs.d.ts +3 -4
  140. package/dist/logs.js +2 -2
  141. package/dist/memory.d.ts +7 -8
  142. package/dist/memory.js +1 -1
  143. package/dist/mode.d.ts +3 -4
  144. package/dist/mode.js +1 -1
  145. package/dist/next-steps-tool.d.ts +2 -3
  146. package/dist/next-steps.d.ts +4 -0
  147. package/dist/next-steps.js +9 -175
  148. package/dist/outdated.d.ts +5 -29
  149. package/dist/outdated.js +3 -3
  150. package/dist/pack.js +51 -51
  151. package/dist/patch.d.ts +2 -3
  152. package/dist/patch.js +5 -5
  153. package/dist/plan.d.ts +4 -4
  154. package/dist/plan.js +3 -3
  155. package/dist/process-registry.js +2 -2
  156. package/dist/ps-slash.js +4 -4
  157. package/dist/pwsh.d.ts +1 -0
  158. package/dist/read.d.ts +5 -5
  159. package/dist/read.js +5 -5
  160. package/dist/replace.d.ts +2 -3
  161. package/dist/replace.js +6 -6
  162. package/dist/scaffold.d.ts +7 -3
  163. package/dist/scaffold.js +3 -1
  164. package/dist/search.d.ts +17 -3
  165. package/dist/search.js +5 -1
  166. package/dist/set-working-dir.d.ts +2 -3
  167. package/dist/skill.d.ts +4 -5
  168. package/dist/skill.js +1 -1
  169. package/dist/task.d.ts +6 -6
  170. package/dist/task.js +3 -3
  171. package/dist/test.d.ts +5 -4
  172. package/dist/test.js +6 -6
  173. package/dist/todo.d.ts +8 -8
  174. package/dist/todo.js +2 -2
  175. package/dist/tool-diff.js +11 -230
  176. package/dist/tool-help.d.ts +2 -3
  177. package/dist/tool-help.js +1 -1
  178. package/dist/tool-search.d.ts +2 -3
  179. package/dist/tool-search.js +1 -1
  180. package/dist/tool-summary.js +5 -281
  181. package/dist/tool-tier.js +52 -52
  182. package/dist/tool-use.d.ts +2 -3
  183. package/dist/tool-use.js +1 -1
  184. package/dist/tree.d.ts +5 -3
  185. package/dist/tree.js +5 -1
  186. package/dist/typecheck.d.ts +3 -3
  187. package/dist/typecheck.js +6 -6
  188. package/dist/write.d.ts +2 -3
  189. package/dist/write.js +6 -6
  190. package/package.json +5 -5
  191. package/dist/spawn-background.d.ts +0 -80
@@ -1,15 +1,17 @@
1
1
  import {
2
2
  tryLegacyCodeOperation
3
- } from "./chunk-I7FBZOEP.js";
3
+ } from "./chunk-T3SMFF5Q.js";
4
4
  import {
5
5
  spawnStream
6
- } from "./chunk-OYP27E3I.js";
6
+ } from "./chunk-DRRY6SCM.js";
7
7
  import {
8
+ ensureInsideRoot,
8
9
  normalizeCommandOutput,
9
10
  safeResolveReal
10
11
  } from "./chunk-ZUFHAHTE.js";
11
12
 
12
13
  // src/format.ts
14
+ import * as path from "node:path";
13
15
  import { ToolValidationError } from "@wrongstack/core/types";
14
16
  var formatTool = {
15
17
  name: "format",
@@ -43,18 +45,43 @@ var formatTool = {
43
45
  cwd: { type: "string", description: "Working directory (default: cwd)" }
44
46
  }
45
47
  },
48
+ writeTargets(input) {
49
+ if (input?.check) return [];
50
+ if (!input?.files) return [];
51
+ const rawFiles = Array.isArray(input.files) ? input.files : input.files.split(",");
52
+ return [
53
+ ...new Set(
54
+ rawFiles.filter((f) => typeof f === "string").map((f) => f.trim().replace(/\\/g, "/")).filter(Boolean)
55
+ )
56
+ ];
57
+ },
46
58
  async execute(input, ctx, opts) {
47
59
  let final;
48
60
  const executeStream = formatTool.executeStream;
49
61
  if (!executeStream) throw new Error("formatTool: stream execution unavailable");
50
- for await (const ev of executeStream(input, ctx, opts)) {
62
+ const signal = opts?.signal ?? ctx.signal ?? new AbortController().signal;
63
+ for await (const ev of executeStream(input, ctx, { signal })) {
51
64
  if (ev.type === "final") final = ev.output;
52
65
  }
53
66
  if (!final) throw new Error("format: stream ended without final event");
54
67
  return final;
55
68
  },
56
69
  async *executeStream(input, ctx, opts) {
57
- const cwd = input.cwd ? await safeResolveReal(input.cwd, ctx) : ctx.cwd;
70
+ if (input.cwd !== void 0 && (typeof input.cwd !== "string" || !input.cwd.trim())) {
71
+ throw new ToolValidationError({
72
+ message: "format: cwd must be a non-empty string when provided.",
73
+ field: "cwd"
74
+ });
75
+ }
76
+ let cwd;
77
+ try {
78
+ cwd = input.cwd ? await safeResolveReal(input.cwd, ctx) : ctx.cwd;
79
+ } catch (err) {
80
+ throw new ToolValidationError({
81
+ message: `format: ${err.message}`,
82
+ field: "cwd"
83
+ });
84
+ }
58
85
  const signal = opts?.signal ?? ctx.signal ?? new AbortController().signal;
59
86
  signal.throwIfAborted();
60
87
  const VALID_FIXERS = /* @__PURE__ */ new Set(["biome", "prettier", "auto"]);
@@ -107,7 +134,21 @@ var formatTool = {
107
134
  text: `Running ${detected}\u2026`,
108
135
  data: { fixer: detected, check: !!input.check }
109
136
  };
110
- const fileList = input.files ? (Array.isArray(input.files) ? input.files : input.files.split(",")).map((f) => f.trim().replace(/\\/g, "/")).filter(Boolean) : [];
137
+ const fileList = input.files ? [
138
+ ...new Set(
139
+ (Array.isArray(input.files) ? input.files : input.files.split(",")).filter((f) => typeof f === "string").map((f) => f.trim().replace(/\\/g, "/")).filter(Boolean)
140
+ )
141
+ ] : [];
142
+ for (const f of fileList) {
143
+ try {
144
+ ensureInsideRoot(path.resolve(cwd, f), ctx);
145
+ } catch (err) {
146
+ throw new ToolValidationError({
147
+ message: `format: file "${f}" ${err.message}`,
148
+ field: "files"
149
+ });
150
+ }
151
+ }
111
152
  let args;
112
153
  if (detected === "prettier") {
113
154
  args = [input.check ? "--check" : "--write"];
@@ -198,6 +239,8 @@ async function detectFixer(cwd) {
198
239
  }
199
240
 
200
241
  export {
201
- formatTool
242
+ formatTool,
243
+ parseFormatterCounts,
244
+ detectFixer
202
245
  };
203
- //# sourceMappingURL=chunk-J74TMK4M.js.map
246
+ //# sourceMappingURL=chunk-NJX2RXKJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-BTSFTGIL.js";
4
4
  import {
5
5
  getPersistentProcessRegistry
6
- } from "./chunk-QGF2C7TF.js";
6
+ } from "./chunk-PVCB7RUZ.js";
7
7
  import {
8
8
  createOutputSpool,
9
9
  spoolNote
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  getProcessRegistry,
13
13
  redactCommand
14
- } from "./chunk-ESLPBT5A.js";
14
+ } from "./chunk-HDYUBRMF.js";
15
15
  import {
16
16
  resolvePowerShell
17
17
  } from "./chunk-KE7A76VC.js";
@@ -903,7 +903,7 @@ ${hint}` : "") + pipeToShellNote,
903
903
  exit_code: timedOut || isAborted ? 124 : c.code,
904
904
  timed_out: timedOut || isAborted,
905
905
  pid: pid ?? null,
906
- error: isAborted ? "Command aborted by user or signal" : void 0
906
+ error: timedOut ? "Command timed out" : isAborted ? "Command aborted by user or signal" : void 0
907
907
  }
908
908
  };
909
909
  ctx.recordSideEffect?.({
@@ -977,4 +977,4 @@ export {
977
977
  checkAndBlockKillCommand,
978
978
  bashTool
979
979
  };
980
- //# sourceMappingURL=chunk-5UFVCIUB.js.map
980
+ //# sourceMappingURL=chunk-NN2SNP2R.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  tryLegacyPackageOperation
3
- } from "./chunk-I7FBZOEP.js";
3
+ } from "./chunk-T3SMFF5Q.js";
4
4
  import {
5
5
  spawnStream
6
- } from "./chunk-OYP27E3I.js";
6
+ } from "./chunk-DRRY6SCM.js";
7
7
  import {
8
8
  detectPackageManager,
9
9
  normalizeCommandOutput,
@@ -66,16 +66,37 @@ var installTool = {
66
66
  let final;
67
67
  const executeStream = installTool.executeStream;
68
68
  if (!executeStream) throw new Error("installTool: stream execution unavailable");
69
- for await (const ev of executeStream(input, ctx, opts)) {
69
+ const signal = opts?.signal ?? ctx.signal ?? new AbortController().signal;
70
+ for await (const ev of executeStream(input, ctx, { signal })) {
70
71
  if (ev.type === "final") final = ev.output;
71
72
  }
72
73
  if (!final) throw new Error("install: stream ended without final event");
73
74
  return final;
74
75
  },
75
76
  async *executeStream(input, ctx, opts) {
76
- const cwd = input.cwd ? await safeResolveReal(input.cwd, ctx) : ctx.cwd;
77
+ if (input.cwd !== void 0 && (typeof input.cwd !== "string" || !input.cwd.trim())) {
78
+ throw new ToolValidationError({
79
+ message: "install: cwd must be a non-empty string when provided.",
80
+ field: "cwd"
81
+ });
82
+ }
83
+ let cwd;
84
+ try {
85
+ cwd = input.cwd ? await safeResolveReal(input.cwd, ctx) : ctx.cwd;
86
+ } catch (err) {
87
+ throw new ToolValidationError({
88
+ message: `install: ${err.message}`,
89
+ field: "cwd"
90
+ });
91
+ }
77
92
  const signal = opts?.signal ?? ctx.signal ?? new AbortController().signal;
78
93
  signal.throwIfAborted();
94
+ if (input.packages !== void 0 && typeof input.packages !== "string" && !Array.isArray(input.packages)) {
95
+ throw new ToolValidationError({
96
+ message: "install: packages must be a string or array of strings",
97
+ field: "packages"
98
+ });
99
+ }
79
100
  const VALID_SAVES = /* @__PURE__ */ new Set(["dependency", "dev", "optional"]);
80
101
  if (input.save !== void 0 && !VALID_SAVES.has(input.save)) {
81
102
  throw new ToolValidationError({
@@ -84,7 +105,7 @@ var installTool = {
84
105
  });
85
106
  }
86
107
  if (!input.global) {
87
- const rawList2 = input.packages ? (Array.isArray(input.packages) ? input.packages : input.packages.split(",")).map((p) => p.trim()).filter(Boolean) : [];
108
+ const rawList2 = input.packages ? (Array.isArray(input.packages) ? input.packages : input.packages.split(",")).filter((p) => typeof p === "string").map((p) => p.trim()).filter(Boolean) : [];
88
109
  const pkgList2 = Array.from(new Set(rawList2));
89
110
  const bridge = await tryLegacyPackageOperation(
90
111
  "package-install",
@@ -102,7 +123,7 @@ var installTool = {
102
123
  type: "final",
103
124
  output: {
104
125
  exit_code: run?.exitCode ?? 0,
105
- packages: [],
126
+ packages: pkgList2,
106
127
  output: normalizeCommandOutput(
107
128
  run?.output || outcome.manifestsChanged.join(", ") || "ok"
108
129
  ),
@@ -117,7 +138,7 @@ var installTool = {
117
138
  yield { type: "log", text: `Resolving with ${pkgManager}\u2026`, data: { phase: "resolve" } };
118
139
  const globalFlag = input.global ? ["-g"] : [];
119
140
  const ignoreScripts = input.lifecycleScripts !== true;
120
- const rawList = input.packages ? (Array.isArray(input.packages) ? input.packages : input.packages.split(",")).map((p) => p.trim()).filter(Boolean) : [];
141
+ const rawList = input.packages ? (Array.isArray(input.packages) ? input.packages : input.packages.split(",")).filter((p) => typeof p === "string").map((p) => p.trim()).filter(Boolean) : [];
121
142
  const pkgList = Array.from(new Set(rawList));
122
143
  const PKG_NAME_RE = /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+(?:@[a-z0-9^~><=*.+-]+)?$/i;
123
144
  for (const pkg of pkgList) {
@@ -232,4 +253,4 @@ function resolveManifestPath(cwd, pkgManager) {
232
253
  export {
233
254
  installTool
234
255
  };
235
- //# sourceMappingURL=chunk-WAQASTXB.js.map
256
+ //# sourceMappingURL=chunk-O6BY43ZB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getProcessRegistry
3
- } from "./chunk-ESLPBT5A.js";
3
+ } from "./chunk-HDYUBRMF.js";
4
4
 
5
5
  // src/process-registry-persistent.ts
6
6
  import * as fs from "node:fs/promises";
@@ -519,4 +519,4 @@ export {
519
519
  getPersistentProcessRegistry,
520
520
  resetPersistentProcessRegistry
521
521
  };
522
- //# sourceMappingURL=chunk-QGF2C7TF.js.map
522
+ //# sourceMappingURL=chunk-PVCB7RUZ.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  tryLegacyCodeOperation
3
- } from "./chunk-I7FBZOEP.js";
3
+ } from "./chunk-T3SMFF5Q.js";
4
4
  import {
5
5
  spawnStream
6
- } from "./chunk-OYP27E3I.js";
6
+ } from "./chunk-DRRY6SCM.js";
7
7
  import {
8
8
  normalizeCommandOutput,
9
9
  safeResolveReal
@@ -166,7 +166,7 @@ function buildArgs(runner, input) {
166
166
  if (input.verbose) args.push("--verbose");
167
167
  if (input.watch) args.push("--watch");
168
168
  if (input.coverage) args.push("--coverage");
169
- if (input.grep) args.push("--testPathPattern", input.grep);
169
+ if (input.grep) args.push("--testNamePattern", input.grep);
170
170
  args.push("--testTimeout", String(timeout));
171
171
  break;
172
172
  case "mocha":
@@ -195,12 +195,12 @@ function parseResult(runner, result, duration) {
195
195
  if (failedMatch?.[1]) failed = Number.parseInt(failedMatch[1], 10);
196
196
  tests_run = passed + failed;
197
197
  } else if (runner === "jest") {
198
- const suitesMatch = out.match(/Test Suites:\s+(\d+)\s+total/);
199
- const passedMatch = out.match(/Tests:\s+(\d+)\s+passed/);
200
- const failedMatch = out.match(/Tests:\s+(\d+)\s+failed/);
201
- tests_run = Number.parseInt(suitesMatch?.[1] ?? "0", 10);
198
+ const totalMatch = out.match(/Tests:\s+(?:.*,\s+)?(\d+)\s+total/);
199
+ const passedMatch = out.match(/Tests:\s+.*?(\d+)\s+passed/);
200
+ const failedMatch = out.match(/Tests:\s+.*?(\d+)\s+failed/);
202
201
  passed = Number.parseInt(passedMatch?.[1] ?? "0", 10);
203
202
  failed = Number.parseInt(failedMatch?.[1] ?? "0", 10);
203
+ tests_run = totalMatch?.[1] ? Number.parseInt(totalMatch[1], 10) : passed + failed;
204
204
  } else if (runner === "mocha") {
205
205
  const passedMatch = out.match(/(\d+)\s+passing/);
206
206
  const failedMatch = out.match(/(\d+)\s+failing/);
@@ -231,4 +231,4 @@ ${result.stderr}` : result.stdout || result.stderr || result.error || "";
231
231
  export {
232
232
  testTool
233
233
  };
234
- //# sourceMappingURL=chunk-YTKSNTT4.js.map
234
+ //# sourceMappingURL=chunk-QA6IASYX.js.map
@@ -422,4 +422,4 @@ export {
422
422
  discoverE2EProjects,
423
423
  e2ePlanTool
424
424
  };
425
- //# sourceMappingURL=chunk-VPALDFYM.js.map
425
+ //# sourceMappingURL=chunk-RV7BVTDG.js.map
@@ -0,0 +1,288 @@
1
+ // src/tool-summary.ts
2
+ var FALLBACK_HEAD_FIELDS = [
3
+ "path",
4
+ "file_path",
5
+ "pattern",
6
+ "symbol",
7
+ "command",
8
+ "cmd",
9
+ "url",
10
+ "query",
11
+ "description",
12
+ "content"
13
+ ];
14
+ function clip(s, n) {
15
+ return s.length > n ? `${s.slice(0, n - 1)}\u2026` : s;
16
+ }
17
+ function pickPath(obj) {
18
+ const p = obj.file_path ?? obj.path ?? obj.filepath;
19
+ return typeof p === "string" ? p : "";
20
+ }
21
+ function safeJson(v) {
22
+ try {
23
+ return JSON.stringify(v);
24
+ } catch {
25
+ return String(v);
26
+ }
27
+ }
28
+ function coerceInput(input) {
29
+ if (typeof input === "string") {
30
+ const s = input.trim();
31
+ if (s.startsWith("{") || s.startsWith("[")) {
32
+ try {
33
+ const parsed = JSON.parse(s);
34
+ if (parsed && typeof parsed === "object")
35
+ return { obj: parsed, raw: parsed };
36
+ } catch {
37
+ }
38
+ }
39
+ return { obj: null, raw: input };
40
+ }
41
+ if (input && typeof input === "object")
42
+ return { obj: input, raw: input };
43
+ return { obj: null, raw: input };
44
+ }
45
+ function summarizeToolInput(toolName, input) {
46
+ if (input === null || input === void 0 || input === "") return "";
47
+ const { obj, raw } = coerceInput(input);
48
+ if (!obj) return clip(String(raw), 120);
49
+ const name = (toolName ?? "").toLowerCase();
50
+ if (/^todo(_?write)?$|^todos$/.test(name) || Array.isArray(obj.todos)) {
51
+ const todos = obj.todos ?? [];
52
+ if (Array.isArray(todos)) {
53
+ const done = todos.filter((t) => t?.status === "completed").length;
54
+ const wip = todos.filter((t) => t?.status === "in_progress").length;
55
+ const parts = [`${todos.length} todo${todos.length === 1 ? "" : "s"}`];
56
+ if (done > 0) parts.push(`${done} done`);
57
+ if (wip > 0) parts.push(`${wip} in-progress`);
58
+ return parts.join(" \xB7 ");
59
+ }
60
+ }
61
+ if (/batch|parallel/.test(name) || Array.isArray(obj.tool_uses) || Array.isArray(obj.calls)) {
62
+ const list = obj.tool_uses ?? obj.calls ?? obj.batch;
63
+ if (Array.isArray(list)) {
64
+ const subNames = /* @__PURE__ */ new Set();
65
+ for (const item of list) {
66
+ if (item && typeof item === "object" && "name" in item) {
67
+ subNames.add(String(item.name));
68
+ } else if (item && typeof item === "object" && "tool" in item) {
69
+ subNames.add(String(item.tool));
70
+ }
71
+ }
72
+ const preview = [...subNames].slice(0, 3).join(", ");
73
+ const more = subNames.size > 3 ? ` +${subNames.size - 3}` : "";
74
+ return `${list.length} sub-tool${list.length === 1 ? "" : "s"}${preview ? ` \xB7 ${preview}${more}` : ""}`;
75
+ }
76
+ }
77
+ if (name === "patch" && typeof obj.patch === "string" && obj.patch) {
78
+ const fileCount = (obj.patch.match(/^\+\+\+ /gm) ?? []).length;
79
+ if (fileCount > 0) return `patch \xB7 ${fileCount} file${fileCount === 1 ? "" : "s"}`;
80
+ return `patch \xB7 ${obj.patch.split("\n").length} lines`;
81
+ }
82
+ if (/^(edit|str_replace|edit_file|patch)$/.test(name)) {
83
+ const fp = pickPath(obj);
84
+ const oldS = typeof obj.old_string === "string" ? obj.old_string : "";
85
+ const newS = typeof obj.new_string === "string" ? obj.new_string : "";
86
+ const oldLines = oldS ? oldS.split("\n").length : 0;
87
+ const newLines = newS ? newS.split("\n").length : 0;
88
+ return `edit ${fp || "(file)"}${oldLines || newLines ? ` (${oldLines} \u2192 ${newLines} lines)` : ""}`;
89
+ }
90
+ if (/^(write|write_file|create_file|new_file)$/.test(name)) {
91
+ const fp = pickPath(obj);
92
+ const c = typeof obj.content === "string" ? obj.content : "";
93
+ const lines = c ? c.split("\n").length : 0;
94
+ return `write ${fp || "(file)"}${lines ? ` \xB7 ${lines} lines` : ""}`;
95
+ }
96
+ if (/^(bash|shell|sh|exec|run|run_command|run_shell|command)$/.test(name)) {
97
+ const cmd = obj.command ?? obj.cmd ?? obj.script;
98
+ if (typeof cmd === "string") return `$ ${clip(cmd, 110)}`;
99
+ }
100
+ if (/^(fetch|http|web|web_fetch|web_search|webfetch|curl|request)$/.test(name)) {
101
+ const url = obj.url;
102
+ if (typeof url === "string") {
103
+ const method = obj.method ?? "GET";
104
+ return `${method.toUpperCase()} ${clip(url, 100)}`;
105
+ }
106
+ }
107
+ if (/^(grep|search|ripgrep|rg)$/.test(name)) {
108
+ const pattern = obj.pattern;
109
+ const scope = obj.path ?? obj.glob ?? obj.type;
110
+ if (typeof pattern === "string") {
111
+ return scope ? `grep ${clip(pattern, 60)} in ${scope}` : `grep ${clip(pattern, 100)}`;
112
+ }
113
+ }
114
+ if (/^(glob|find)$/.test(name)) {
115
+ const p = obj.pattern ?? obj.glob;
116
+ if (typeof p === "string") return `glob ${clip(p, 80)}`;
117
+ }
118
+ if (/^tree$/.test(name)) {
119
+ const p = typeof obj.path === "string" ? obj.path : "";
120
+ const d = typeof obj.depth === "number" ? obj.depth : null;
121
+ return `tree ${p || "."}${d !== null ? ` (depth ${d})` : ""}`;
122
+ }
123
+ if (/^diff$/.test(name)) {
124
+ const a = typeof obj.a === "string" ? obj.a : "";
125
+ const b = typeof obj.b === "string" ? obj.b : "";
126
+ if (a || b) return `diff ${a && b ? `${a}..${b}` : a || b}`;
127
+ const fl = [];
128
+ if (Array.isArray(obj.files)) {
129
+ for (const f of obj.files) if (typeof f === "string") fl.push(f);
130
+ } else if (typeof obj.files === "string") {
131
+ for (const part of obj.files.split(",")) {
132
+ const t = part.trim();
133
+ if (t) fl.push(t);
134
+ }
135
+ }
136
+ if (fl.length === 1) return `diff ${clip(String(fl[0]), 80)}`;
137
+ if (fl.length > 1) return `diff ${fl.length} files`;
138
+ }
139
+ if (/^replace$/.test(name)) {
140
+ const pattern = typeof obj.pattern === "string" ? obj.pattern : "";
141
+ if (pattern) {
142
+ let scope = "";
143
+ if (typeof obj.files === "string") {
144
+ const parts = obj.files.split(",").map((s) => s.trim()).filter(Boolean);
145
+ scope = parts.length > 1 ? `${parts.length} files` : parts[0] ?? "";
146
+ } else if (Array.isArray(obj.files) && obj.files.length > 0) {
147
+ scope = obj.files.length === 1 ? String(obj.files[0]) : `${obj.files.length} files`;
148
+ }
149
+ return `replace ${clip(pattern, 60)}${scope ? ` in ${clip(scope, 50)}` : ""}`;
150
+ }
151
+ }
152
+ if (/^(read|read_file|cat|view)$/.test(name)) {
153
+ const fp = pickPath(obj);
154
+ const offset = obj.offset;
155
+ const limit = obj.limit;
156
+ if (fp && (typeof offset === "number" || typeof limit === "number")) {
157
+ const start = offset ?? 0;
158
+ const end = typeof limit === "number" ? start + limit : "";
159
+ return `read ${fp} (${start}\u2026${end})`;
160
+ }
161
+ if (fp) return `read ${fp}`;
162
+ }
163
+ for (const k of FALLBACK_HEAD_FIELDS) {
164
+ const v = obj[k];
165
+ if (typeof v === "string" && v.length > 0) {
166
+ return `${k}: ${clip(v, 100)}`;
167
+ }
168
+ }
169
+ return clip(safeJson(raw), 120);
170
+ }
171
+ var SUMMARIZE_TOOL_INPUT_BROWSER_SRC = [
172
+ 'function __clip(s,n){ s=String(s==null?"":s); return s.length>n ? s.slice(0,n-1)+"\\u2026" : s; }',
173
+ "function toolInputSummary(name, rawInput){",
174
+ ' if(rawInput==null || rawInput==="") return "";',
175
+ " var obj=null, raw=rawInput;",
176
+ ' if(typeof rawInput==="string"){',
177
+ " var s=rawInput.trim();",
178
+ ' if(s.charAt(0)==="{" || s.charAt(0)==="["){ try{ var pj=JSON.parse(s); if(pj && typeof pj==="object"){ obj=pj; raw=pj; } }catch(_e){} }',
179
+ ' } else if(rawInput && typeof rawInput==="object"){ obj=rawInput; raw=rawInput; }',
180
+ " if(!obj) return __clip(String(raw),120);",
181
+ ' var n=String(name==null?"":name).toLowerCase();',
182
+ " if(/^todo(_?write)?$|^todos$/.test(n) || Array.isArray(obj.todos)){",
183
+ " var todos=obj.todos||[];",
184
+ " if(Array.isArray(todos)){",
185
+ " var done=0, wip=0, ti;",
186
+ ' for(ti=0; ti<todos.length; ti++){ var st=todos[ti]&&todos[ti].status; if(st==="completed") done++; else if(st==="in_progress") wip++; }',
187
+ ' var tp=[todos.length+" todo"+(todos.length===1?"":"s")];',
188
+ ' if(done>0) tp.push(done+" done"); if(wip>0) tp.push(wip+" in-progress");',
189
+ ' return tp.join(" \\u00b7 ");',
190
+ " }",
191
+ " }",
192
+ " if(/batch|parallel/.test(n) || Array.isArray(obj.tool_uses) || Array.isArray(obj.calls)){",
193
+ " var list=obj.tool_uses||obj.calls||obj.batch;",
194
+ " if(Array.isArray(list)){",
195
+ " var names={}, ord=[], li, it, nm;",
196
+ ' for(li=0; li<list.length; li++){ it=list[li]; if(it && typeof it==="object"){ nm=("name" in it)?it.name:(("tool" in it)?it.tool:null); if(nm!=null){ nm=String(nm); if(!names[nm]){ names[nm]=1; ord.push(nm); } } } }',
197
+ ' var preview=ord.slice(0,3).join(", ");',
198
+ ' var more=ord.length>3 ? " +"+(ord.length-3) : "";',
199
+ ' return list.length+" sub-tool"+(list.length===1?"":"s")+(preview?(" \\u00b7 "+preview+more):"");',
200
+ " }",
201
+ " }",
202
+ " var fp;",
203
+ ' if(n==="patch" && typeof obj.patch==="string" && obj.patch){',
204
+ " var pfm=obj.patch.match(/^\\+\\+\\+ /gm);",
205
+ " var pfc=pfm?pfm.length:0;",
206
+ ' if(pfc>0) return "patch \\u00b7 "+pfc+" file"+(pfc===1?"":"s");',
207
+ ' return "patch \\u00b7 "+obj.patch.split("\\n").length+" lines";',
208
+ " }",
209
+ " if(/^(edit|str_replace|edit_file|patch)$/.test(n)){",
210
+ " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
211
+ ' var oldS=typeof obj.old_string==="string"?obj.old_string:"";',
212
+ ' var newS=typeof obj.new_string==="string"?obj.new_string:"";',
213
+ ' var ol=oldS?oldS.split("\\n").length:0, nl=newS?newS.split("\\n").length:0;',
214
+ ' var efp=typeof fp==="string"?fp:"";',
215
+ ' return "edit "+(efp||"(file)")+((ol||nl)?(" ("+ol+" \\u2192 "+nl+" lines)"):"");',
216
+ " }",
217
+ " if(/^(write|write_file|create_file|new_file)$/.test(n)){",
218
+ " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
219
+ ' var wc=typeof obj.content==="string"?obj.content:"";',
220
+ ' var wl=wc?wc.split("\\n").length:0;',
221
+ ' var wfp=typeof fp==="string"?fp:"";',
222
+ ' return "write "+(wfp||"(file)")+(wl?(" \\u00b7 "+wl+" lines"):"");',
223
+ " }",
224
+ " if(/^(bash|shell|sh|exec|run|run_command|run_shell|command)$/.test(n)){",
225
+ " var cmd=(obj.command!=null?obj.command:(obj.cmd!=null?obj.cmd:obj.script));",
226
+ ' if(typeof cmd==="string") return "$ "+__clip(cmd,110);',
227
+ " }",
228
+ " if(/^(fetch|http|web|web_fetch|web_search|webfetch|curl|request)$/.test(n)){",
229
+ ' if(typeof obj.url==="string"){ var mth=(typeof obj.method==="string"?obj.method:"GET"); return mth.toUpperCase()+" "+__clip(obj.url,100); }',
230
+ " }",
231
+ " if(/^(grep|search|ripgrep|rg)$/.test(n)){",
232
+ " var pat=obj.pattern, scope=(obj.path!=null?obj.path:(obj.glob!=null?obj.glob:obj.type));",
233
+ ' if(typeof pat==="string"){ return scope ? ("grep "+__clip(pat,60)+" in "+scope) : ("grep "+__clip(pat,100)); }',
234
+ " }",
235
+ " if(/^(glob|find)$/.test(n)){",
236
+ " var gp=(obj.pattern!=null?obj.pattern:obj.glob);",
237
+ ' if(typeof gp==="string") return "glob "+__clip(gp,80);',
238
+ " }",
239
+ " if(/^tree$/.test(n)){",
240
+ ' var trp=typeof obj.path==="string"?obj.path:"";',
241
+ ' var trd=typeof obj.depth==="number"?obj.depth:null;',
242
+ ' return "tree "+(trp||".")+(trd!==null?(" (depth "+trd+")"):"");',
243
+ " }",
244
+ " if(/^diff$/.test(n)){",
245
+ ' var da=typeof obj.a==="string"?obj.a:"", db=typeof obj.b==="string"?obj.b:"";',
246
+ ' if(da||db) return "diff "+((da&&db)?(da+".."+db):(da||db));',
247
+ " var dfl=[], dfi, dpi;",
248
+ ' if(Array.isArray(obj.files)){ for(dfi=0; dfi<obj.files.length; dfi++){ if(typeof obj.files[dfi]==="string") dfl.push(obj.files[dfi]); } }',
249
+ ' else if(typeof obj.files==="string"){ var dparts=obj.files.split(","); for(dpi=0; dpi<dparts.length; dpi++){ var dt=dparts[dpi].trim(); if(dt) dfl.push(dt); } }',
250
+ ' if(dfl.length===1) return "diff "+__clip(String(dfl[0]),80);',
251
+ ' if(dfl.length>1) return "diff "+dfl.length+" files";',
252
+ " }",
253
+ " if(/^replace$/.test(n)){",
254
+ ' var rpat=typeof obj.pattern==="string"?obj.pattern:"";',
255
+ " if(rpat){",
256
+ ' var rscope="";',
257
+ ' if(typeof obj.files==="string"){',
258
+ " var rparts=[], rsi;",
259
+ ' var rraw=obj.files.split(",");',
260
+ " for(rsi=0; rsi<rraw.length; rsi++){ var rt=rraw[rsi].trim(); if(rt) rparts.push(rt); }",
261
+ ' rscope=rparts.length>1?(rparts.length+" files"):(rparts.length===1?rparts[0]:"");',
262
+ " } else if(Array.isArray(obj.files) && obj.files.length>0){",
263
+ ' rscope=obj.files.length===1?String(obj.files[0]):(obj.files.length+" files");',
264
+ " }",
265
+ ' return "replace "+__clip(rpat,60)+(rscope?(" in "+__clip(rscope,50)):"");',
266
+ " }",
267
+ " }",
268
+ " if(/^(read|read_file|cat|view)$/.test(n)){",
269
+ " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
270
+ ' if(typeof fp==="string" && fp){',
271
+ " var off=obj.offset, lim=obj.limit;",
272
+ ' if(typeof off==="number" || typeof lim==="number"){ var start=(typeof off==="number"?off:0); var end=(typeof lim==="number"?(start+lim):""); return "read "+fp+" ("+start+"\\u2026"+end+")"; }',
273
+ ' return "read "+fp;',
274
+ " }",
275
+ " }",
276
+ ' var HEAD=["path","file_path","pattern","symbol","command","cmd","url","query","description","content"], hi;',
277
+ ' for(hi=0; hi<HEAD.length; hi++){ var hv=obj[HEAD[hi]]; if(typeof hv==="string" && hv.length>0){ return HEAD[hi]+": "+__clip(hv,100); } }',
278
+ " var jsonStr; try{ jsonStr=JSON.stringify(raw); }catch(_e2){ jsonStr=String(raw); }",
279
+ " return __clip(jsonStr,120);",
280
+ "}"
281
+ ].join("\n");
282
+
283
+ export {
284
+ FALLBACK_HEAD_FIELDS,
285
+ summarizeToolInput,
286
+ SUMMARIZE_TOOL_INPUT_BROWSER_SRC
287
+ };
288
+ //# sourceMappingURL=chunk-S57CDR2H.js.map
@@ -2118,4 +2118,4 @@ export {
2118
2118
  recordKanbanVerificationEvidence,
2119
2119
  kanbanTool
2120
2120
  };
2121
- //# sourceMappingURL=chunk-W2CECGTG.js.map
2121
+ //# sourceMappingURL=chunk-SMARDKAC.js.map
@@ -1398,4 +1398,4 @@ export {
1398
1398
  browserTools,
1399
1399
  shutdownBrowserTools
1400
1400
  };
1401
- //# sourceMappingURL=chunk-QWKSKFKZ.js.map
1401
+ //# sourceMappingURL=chunk-SOR7OCYP.js.map
@@ -2,7 +2,7 @@ import {
2
2
  executeLanguagePlan,
3
3
  executePackagePlan,
4
4
  planLanguageOperation
5
- } from "./chunk-NDIT3SBZ.js";
5
+ } from "./chunk-7N5U2RAU.js";
6
6
 
7
7
  // src/languages/legacy-bridge.ts
8
8
  import * as fs from "node:fs/promises";
@@ -21,7 +21,11 @@ async function detectNonJsEcosystem(cwd, projectRoot) {
21
21
  try {
22
22
  let dir = path.resolve(cwd);
23
23
  const root = path.resolve(projectRoot);
24
- for (let depth = 0; depth <= 4 && dir.startsWith(root); depth++) {
24
+ const isInsideOrSame = (d, r) => {
25
+ const rel = path.relative(r, d);
26
+ return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
27
+ };
28
+ for (let depth = 0; depth <= 4 && isInsideOrSame(dir, root); depth++) {
25
29
  for (const marker of NON_JS_MARKERS) {
26
30
  try {
27
31
  const s = await fs.stat(path.join(dir, marker.filename));
@@ -38,8 +42,10 @@ async function detectNonJsEcosystem(cwd, projectRoot) {
38
42
  }
39
43
  } catch {
40
44
  }
41
- if (dir === root) break;
42
- dir = path.dirname(dir);
45
+ if (path.relative(root, dir) === "") break;
46
+ const parent = path.dirname(dir);
47
+ if (parent === dir) break;
48
+ dir = parent;
43
49
  }
44
50
  } catch {
45
51
  }
@@ -98,4 +104,4 @@ export {
98
104
  tryLegacyCodeOperation,
99
105
  tryLegacyPackageOperation
100
106
  };
101
- //# sourceMappingURL=chunk-I7FBZOEP.js.map
107
+ //# sourceMappingURL=chunk-T3SMFF5Q.js.map
@@ -101,4 +101,4 @@ ${mode.description}`
101
101
  export {
102
102
  createModeTool
103
103
  };
104
- //# sourceMappingURL=chunk-4BHUSMNL.js.map
104
+ //# sourceMappingURL=chunk-UI3ZJIG3.js.map
@@ -80,7 +80,7 @@ var batchToolUseTool = {
80
80
  if (input.calls.length > MAX_BATCH_CALLS) {
81
81
  throw new Error(`batch_tool_use: calls must contain at most ${MAX_BATCH_CALLS} items`);
82
82
  }
83
- const governedExecute = ctx.meta[GOVERNED_TOOL_EXECUTOR_META_KEY];
83
+ const governedExecute = ctx.meta?.[GOVERNED_TOOL_EXECUTOR_META_KEY];
84
84
  if (typeof governedExecute !== "function") {
85
85
  return {
86
86
  results: input.calls.map((call) => ({
@@ -200,4 +200,4 @@ async function executeSingle(call, ctx, governedExecute) {
200
200
  export {
201
201
  batchToolUseTool
202
202
  };
203
- //# sourceMappingURL=chunk-WXJY3BKV.js.map
203
+ //# sourceMappingURL=chunk-VBF2YXUW.js.map