@nervekit/tools 0.1.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 (267) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/dist/catalog/core/filesystem.tools.d.ts +140 -0
  4. package/dist/catalog/core/filesystem.tools.d.ts.map +1 -0
  5. package/dist/catalog/core/filesystem.tools.js +221 -0
  6. package/dist/catalog/core/filesystem.tools.js.map +1 -0
  7. package/dist/catalog/core/interaction.tools.d.ts +37 -0
  8. package/dist/catalog/core/interaction.tools.d.ts.map +1 -0
  9. package/dist/catalog/core/interaction.tools.js +55 -0
  10. package/dist/catalog/core/interaction.tools.js.map +1 -0
  11. package/dist/catalog/core/python.tools.d.ts +17 -0
  12. package/dist/catalog/core/python.tools.d.ts.map +1 -0
  13. package/dist/catalog/core/python.tools.js +32 -0
  14. package/dist/catalog/core/python.tools.js.map +1 -0
  15. package/dist/catalog/core/shell.tools.d.ts +14 -0
  16. package/dist/catalog/core/shell.tools.d.ts.map +1 -0
  17. package/dist/catalog/core/shell.tools.js +22 -0
  18. package/dist/catalog/core/shell.tools.js.map +1 -0
  19. package/dist/catalog/core/web.tools.d.ts +23 -0
  20. package/dist/catalog/core/web.tools.d.ts.map +1 -0
  21. package/dist/catalog/core/web.tools.js +34 -0
  22. package/dist/catalog/core/web.tools.js.map +1 -0
  23. package/dist/catalog/descriptors.d.ts +4 -0
  24. package/dist/catalog/descriptors.d.ts.map +1 -0
  25. package/dist/catalog/descriptors.js +17 -0
  26. package/dist/catalog/descriptors.js.map +1 -0
  27. package/dist/catalog/index.d.ts +18 -0
  28. package/dist/catalog/index.d.ts.map +1 -0
  29. package/dist/catalog/index.js +44 -0
  30. package/dist/catalog/index.js.map +1 -0
  31. package/dist/catalog/orchestration/explore.tools.d.ts +20 -0
  32. package/dist/catalog/orchestration/explore.tools.d.ts.map +1 -0
  33. package/dist/catalog/orchestration/explore.tools.js +42 -0
  34. package/dist/catalog/orchestration/explore.tools.js.map +1 -0
  35. package/dist/catalog/orchestration/plan-mode.tools.d.ts +32 -0
  36. package/dist/catalog/orchestration/plan-mode.tools.d.ts.map +1 -0
  37. package/dist/catalog/orchestration/plan-mode.tools.js +43 -0
  38. package/dist/catalog/orchestration/plan-mode.tools.js.map +1 -0
  39. package/dist/catalog/orchestration/process.tools.d.ts +68 -0
  40. package/dist/catalog/orchestration/process.tools.d.ts.map +1 -0
  41. package/dist/catalog/orchestration/process.tools.js +96 -0
  42. package/dist/catalog/orchestration/process.tools.js.map +1 -0
  43. package/dist/catalog/orchestration/subagent.tools.d.ts +16 -0
  44. package/dist/catalog/orchestration/subagent.tools.d.ts.map +1 -0
  45. package/dist/catalog/orchestration/subagent.tools.js +25 -0
  46. package/dist/catalog/orchestration/subagent.tools.js.map +1 -0
  47. package/dist/catalog/orchestration/task.tools.d.ts +107 -0
  48. package/dist/catalog/orchestration/task.tools.d.ts.map +1 -0
  49. package/dist/catalog/orchestration/task.tools.js +170 -0
  50. package/dist/catalog/orchestration/task.tools.js.map +1 -0
  51. package/dist/catalog/risk.d.ts +3 -0
  52. package/dist/catalog/risk.d.ts.map +1 -0
  53. package/dist/catalog/risk.js +29 -0
  54. package/dist/catalog/risk.js.map +1 -0
  55. package/dist/catalog/types.d.ts +14 -0
  56. package/dist/catalog/types.d.ts.map +1 -0
  57. package/dist/catalog/types.js +2 -0
  58. package/dist/catalog/types.js.map +1 -0
  59. package/dist/definitions.d.ts +2 -0
  60. package/dist/definitions.d.ts.map +1 -0
  61. package/dist/definitions.js +2 -0
  62. package/dist/definitions.js.map +1 -0
  63. package/dist/execution/atomic-write.d.ts +2 -0
  64. package/dist/execution/atomic-write.d.ts.map +1 -0
  65. package/dist/execution/atomic-write.js +7 -0
  66. package/dist/execution/atomic-write.js.map +1 -0
  67. package/dist/execution/bash.d.ts +3 -0
  68. package/dist/execution/bash.d.ts.map +1 -0
  69. package/dist/execution/bash.js +133 -0
  70. package/dist/execution/bash.js.map +1 -0
  71. package/dist/execution/common/args.d.ts +2 -0
  72. package/dist/execution/common/args.d.ts.map +1 -0
  73. package/dist/execution/common/args.js +6 -0
  74. package/dist/execution/common/args.js.map +1 -0
  75. package/dist/execution/common/output-budget.d.ts +61 -0
  76. package/dist/execution/common/output-budget.d.ts.map +1 -0
  77. package/dist/execution/common/output-budget.js +140 -0
  78. package/dist/execution/common/output-budget.js.map +1 -0
  79. package/dist/execution/common/process-result.d.ts +44 -0
  80. package/dist/execution/common/process-result.d.ts.map +1 -0
  81. package/dist/execution/common/process-result.js +322 -0
  82. package/dist/execution/common/process-result.js.map +1 -0
  83. package/dist/execution/common/search-utils.d.ts +8 -0
  84. package/dist/execution/common/search-utils.d.ts.map +1 -0
  85. package/dist/execution/common/search-utils.js +110 -0
  86. package/dist/execution/common/search-utils.js.map +1 -0
  87. package/dist/execution/common/tool-error.d.ts +8 -0
  88. package/dist/execution/common/tool-error.d.ts.map +1 -0
  89. package/dist/execution/common/tool-error.js +14 -0
  90. package/dist/execution/common/tool-error.js.map +1 -0
  91. package/dist/execution/common/truncate.d.ts +27 -0
  92. package/dist/execution/common/truncate.d.ts.map +1 -0
  93. package/dist/execution/common/truncate.js +108 -0
  94. package/dist/execution/common/truncate.js.map +1 -0
  95. package/dist/execution/common.d.ts +2 -0
  96. package/dist/execution/common.d.ts.map +1 -0
  97. package/dist/execution/common.js +6 -0
  98. package/dist/execution/common.js.map +1 -0
  99. package/dist/execution/core-dispatch.d.ts +4 -0
  100. package/dist/execution/core-dispatch.d.ts.map +1 -0
  101. package/dist/execution/core-dispatch.js +58 -0
  102. package/dist/execution/core-dispatch.js.map +1 -0
  103. package/dist/execution/dispatch.d.ts +4 -0
  104. package/dist/execution/dispatch.d.ts.map +1 -0
  105. package/dist/execution/dispatch.js +54 -0
  106. package/dist/execution/dispatch.js.map +1 -0
  107. package/dist/execution/edit.d.ts +9 -0
  108. package/dist/execution/edit.d.ts.map +1 -0
  109. package/dist/execution/edit.js +175 -0
  110. package/dist/execution/edit.js.map +1 -0
  111. package/dist/execution/file-mutation-queue.d.ts +2 -0
  112. package/dist/execution/file-mutation-queue.d.ts.map +1 -0
  113. package/dist/execution/file-mutation-queue.js +19 -0
  114. package/dist/execution/file-mutation-queue.js.map +1 -0
  115. package/dist/execution/filesystem/atomic-write.d.ts +2 -0
  116. package/dist/execution/filesystem/atomic-write.d.ts.map +1 -0
  117. package/dist/execution/filesystem/atomic-write.js +7 -0
  118. package/dist/execution/filesystem/atomic-write.js.map +1 -0
  119. package/dist/execution/filesystem/edit-args.d.ts +46 -0
  120. package/dist/execution/filesystem/edit-args.d.ts.map +1 -0
  121. package/dist/execution/filesystem/edit-args.js +212 -0
  122. package/dist/execution/filesystem/edit-args.js.map +1 -0
  123. package/dist/execution/filesystem/edit-errors.d.ts +4 -0
  124. package/dist/execution/filesystem/edit-errors.d.ts.map +1 -0
  125. package/dist/execution/filesystem/edit-errors.js +8 -0
  126. package/dist/execution/filesystem/edit-errors.js.map +1 -0
  127. package/dist/execution/filesystem/edit.d.ts +4 -0
  128. package/dist/execution/filesystem/edit.d.ts.map +1 -0
  129. package/dist/execution/filesystem/edit.js +330 -0
  130. package/dist/execution/filesystem/edit.js.map +1 -0
  131. package/dist/execution/filesystem/file-mutation-queue.d.ts +2 -0
  132. package/dist/execution/filesystem/file-mutation-queue.d.ts.map +1 -0
  133. package/dist/execution/filesystem/file-mutation-queue.js +19 -0
  134. package/dist/execution/filesystem/file-mutation-queue.js.map +1 -0
  135. package/dist/execution/filesystem/find.d.ts +3 -0
  136. package/dist/execution/filesystem/find.d.ts.map +1 -0
  137. package/dist/execution/filesystem/find.js +93 -0
  138. package/dist/execution/filesystem/find.js.map +1 -0
  139. package/dist/execution/filesystem/legacy-edit.d.ts +9 -0
  140. package/dist/execution/filesystem/legacy-edit.d.ts.map +1 -0
  141. package/dist/execution/filesystem/legacy-edit.js +122 -0
  142. package/dist/execution/filesystem/legacy-edit.js.map +1 -0
  143. package/dist/execution/filesystem/list.d.ts +3 -0
  144. package/dist/execution/filesystem/list.d.ts.map +1 -0
  145. package/dist/execution/filesystem/list.js +49 -0
  146. package/dist/execution/filesystem/list.js.map +1 -0
  147. package/dist/execution/filesystem/path.d.ts +7 -0
  148. package/dist/execution/filesystem/path.d.ts.map +1 -0
  149. package/dist/execution/filesystem/path.js +69 -0
  150. package/dist/execution/filesystem/path.js.map +1 -0
  151. package/dist/execution/filesystem/read.d.ts +3 -0
  152. package/dist/execution/filesystem/read.d.ts.map +1 -0
  153. package/dist/execution/filesystem/read.js +225 -0
  154. package/dist/execution/filesystem/read.js.map +1 -0
  155. package/dist/execution/filesystem/search.d.ts +3 -0
  156. package/dist/execution/filesystem/search.d.ts.map +1 -0
  157. package/dist/execution/filesystem/search.js +149 -0
  158. package/dist/execution/filesystem/search.js.map +1 -0
  159. package/dist/execution/filesystem/smart-match.d.ts +31 -0
  160. package/dist/execution/filesystem/smart-match.d.ts.map +1 -0
  161. package/dist/execution/filesystem/smart-match.js +309 -0
  162. package/dist/execution/filesystem/smart-match.js.map +1 -0
  163. package/dist/execution/filesystem/text-editing.d.ts +9 -0
  164. package/dist/execution/filesystem/text-editing.d.ts.map +1 -0
  165. package/dist/execution/filesystem/text-editing.js +43 -0
  166. package/dist/execution/filesystem/text-editing.js.map +1 -0
  167. package/dist/execution/filesystem/write.d.ts +3 -0
  168. package/dist/execution/filesystem/write.d.ts.map +1 -0
  169. package/dist/execution/filesystem/write.js +21 -0
  170. package/dist/execution/filesystem/write.js.map +1 -0
  171. package/dist/execution/find.d.ts +3 -0
  172. package/dist/execution/find.d.ts.map +1 -0
  173. package/dist/execution/find.js +90 -0
  174. package/dist/execution/find.js.map +1 -0
  175. package/dist/execution/index.d.ts +18 -0
  176. package/dist/execution/index.d.ts.map +1 -0
  177. package/dist/execution/index.js +17 -0
  178. package/dist/execution/index.js.map +1 -0
  179. package/dist/execution/list.d.ts +3 -0
  180. package/dist/execution/list.d.ts.map +1 -0
  181. package/dist/execution/list.js +46 -0
  182. package/dist/execution/list.js.map +1 -0
  183. package/dist/execution/path.d.ts +7 -0
  184. package/dist/execution/path.d.ts.map +1 -0
  185. package/dist/execution/path.js +69 -0
  186. package/dist/execution/path.js.map +1 -0
  187. package/dist/execution/python/python.d.ts +3 -0
  188. package/dist/execution/python/python.d.ts.map +1 -0
  189. package/dist/execution/python/python.js +566 -0
  190. package/dist/execution/python/python.js.map +1 -0
  191. package/dist/execution/python/runtime.d.ts +22 -0
  192. package/dist/execution/python/runtime.d.ts.map +1 -0
  193. package/dist/execution/python/runtime.js +178 -0
  194. package/dist/execution/python/runtime.js.map +1 -0
  195. package/dist/execution/read.d.ts +3 -0
  196. package/dist/execution/read.d.ts.map +1 -0
  197. package/dist/execution/read.js +97 -0
  198. package/dist/execution/read.js.map +1 -0
  199. package/dist/execution/search-utils.d.ts +8 -0
  200. package/dist/execution/search-utils.d.ts.map +1 -0
  201. package/dist/execution/search-utils.js +110 -0
  202. package/dist/execution/search-utils.js.map +1 -0
  203. package/dist/execution/search.d.ts +3 -0
  204. package/dist/execution/search.d.ts.map +1 -0
  205. package/dist/execution/search.js +131 -0
  206. package/dist/execution/search.js.map +1 -0
  207. package/dist/execution/shell/bash.d.ts +3 -0
  208. package/dist/execution/shell/bash.d.ts.map +1 -0
  209. package/dist/execution/shell/bash.js +134 -0
  210. package/dist/execution/shell/bash.js.map +1 -0
  211. package/dist/execution/truncate.d.ts +21 -0
  212. package/dist/execution/truncate.d.ts.map +1 -0
  213. package/dist/execution/truncate.js +94 -0
  214. package/dist/execution/truncate.js.map +1 -0
  215. package/dist/execution/web/web-fetch.d.ts +3 -0
  216. package/dist/execution/web/web-fetch.d.ts.map +1 -0
  217. package/dist/execution/web/web-fetch.js +132 -0
  218. package/dist/execution/web/web-fetch.js.map +1 -0
  219. package/dist/execution/web/web-search.d.ts +3 -0
  220. package/dist/execution/web/web-search.d.ts.map +1 -0
  221. package/dist/execution/web/web-search.js +59 -0
  222. package/dist/execution/web/web-search.js.map +1 -0
  223. package/dist/execution/web-fetch.d.ts +3 -0
  224. package/dist/execution/web-fetch.d.ts.map +1 -0
  225. package/dist/execution/web-fetch.js +132 -0
  226. package/dist/execution/web-fetch.js.map +1 -0
  227. package/dist/execution/web-search.d.ts +3 -0
  228. package/dist/execution/web-search.d.ts.map +1 -0
  229. package/dist/execution/web-search.js +59 -0
  230. package/dist/execution/web-search.js.map +1 -0
  231. package/dist/execution/write.d.ts +3 -0
  232. package/dist/execution/write.d.ts.map +1 -0
  233. package/dist/execution/write.js +21 -0
  234. package/dist/execution/write.js.map +1 -0
  235. package/dist/index.d.ts +9 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +11 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/safety/command-policy-git.d.ts +2 -0
  240. package/dist/safety/command-policy-git.d.ts.map +1 -0
  241. package/dist/safety/command-policy-git.js +88 -0
  242. package/dist/safety/command-policy-git.js.map +1 -0
  243. package/dist/safety/command-policy-options.d.ts +6 -0
  244. package/dist/safety/command-policy-options.d.ts.map +1 -0
  245. package/dist/safety/command-policy-options.js +112 -0
  246. package/dist/safety/command-policy-options.js.map +1 -0
  247. package/dist/safety/command-policy-packages.d.ts +4 -0
  248. package/dist/safety/command-policy-packages.d.ts.map +1 -0
  249. package/dist/safety/command-policy-packages.js +161 -0
  250. package/dist/safety/command-policy-packages.js.map +1 -0
  251. package/dist/safety/command-policy-parser.d.ts +11 -0
  252. package/dist/safety/command-policy-parser.d.ts.map +1 -0
  253. package/dist/safety/command-policy-parser.js +121 -0
  254. package/dist/safety/command-policy-parser.js.map +1 -0
  255. package/dist/safety/command-policy-wrappers.d.ts +6 -0
  256. package/dist/safety/command-policy-wrappers.d.ts.map +1 -0
  257. package/dist/safety/command-policy-wrappers.js +95 -0
  258. package/dist/safety/command-policy-wrappers.js.map +1 -0
  259. package/dist/safety/command-policy.d.ts +6 -0
  260. package/dist/safety/command-policy.d.ts.map +1 -0
  261. package/dist/safety/command-policy.js +118 -0
  262. package/dist/safety/command-policy.js.map +1 -0
  263. package/dist/types.d.ts +78 -0
  264. package/dist/types.d.ts.map +1 -0
  265. package/dist/types.js +2 -0
  266. package/dist/types.js.map +1 -0
  267. package/package.json +48 -0
@@ -0,0 +1,322 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { appendBoundedTextNotice, boundText, PROCESS_INLINE_MAX_LINE_CHARS, textBoundaryDetails, } from "./output-budget.js";
6
+ import { formatSize, PROCESS_INLINE_MAX_BYTES, PROCESS_INLINE_MAX_LINES, PROCESS_PREVIEW_EDGE_LINES, PROCESS_PREVIEW_EDGE_MAX_BYTES, PROCESS_PREVIEW_MAX_LINE_CHARS, truncateHead, truncateLine, truncateTail, } from "./truncate.js";
7
+ export async function buildProcessTextResult({ text, outputFilePrefix, exitMessagePrefix, noOutputText, details, dataDir, contentFooterLines, }) {
8
+ const buffer = Buffer.from(text, "utf8");
9
+ return buildProcessResult({
10
+ stdoutChunks: text.length > 0 ? [buffer] : [],
11
+ stderrChunks: [],
12
+ combinedChunks: text.length > 0 ? [buffer] : [],
13
+ code: 0,
14
+ signal: null,
15
+ outputFilePrefix,
16
+ exitMessagePrefix,
17
+ noOutputText,
18
+ details,
19
+ dataDir,
20
+ contentFooterLines,
21
+ });
22
+ }
23
+ export async function buildProcessResult({ stdoutChunks, stderrChunks, combinedChunks, code, signal, outputFilePrefix, exitMessagePrefix, noOutputText = "(no output)", details = {}, dataDir, durationMs, timedOut = false, timeoutKilled = false, timeoutMessage, contentFooterLines = [], }) {
24
+ const stdout = Buffer.concat(stdoutChunks).toString("utf8");
25
+ const stderr = Buffer.concat(stderrChunks).toString("utf8");
26
+ const combined = Buffer.concat(combinedChunks).toString("utf8");
27
+ const exitCode = code ?? (timedOut ? 124 : signal ? 128 : 0);
28
+ const combinedStats = outputStats(combined);
29
+ const hasOutput = combined.length > 0;
30
+ const largeOutput = hasOutput && exceedsInlineLimits(combinedStats);
31
+ const boundedCombined = boundProcessInlineText(combined);
32
+ const boundedOutput = hasOutput && boundedCombined.truncated;
33
+ const fullOutputPath = boundedOutput
34
+ ? await writeTranscriptFile({ outputFilePrefix, text: combined, dataDir })
35
+ : undefined;
36
+ const stdoutStream = buildStreamResult({ label: "stdout", text: stdout });
37
+ const stderrStream = buildStreamResult({ label: "stderr", text: stderr });
38
+ const combinedStream = buildStreamResult({
39
+ label: "output",
40
+ text: combined,
41
+ savedTo: fullOutputPath,
42
+ });
43
+ const outputPreview = largeOutput
44
+ ? buildHeadTailPreview(combined)
45
+ : undefined;
46
+ const outputTruncation = outputPreview
47
+ ? previewTruncation(outputPreview)
48
+ : boundedCombined.truncated
49
+ ? textBoundaryDetails(boundedCombined)
50
+ : undefined;
51
+ let content = noOutputText;
52
+ if (hasOutput && outputPreview) {
53
+ content = formatLargeOutputContent({
54
+ exitMessagePrefix,
55
+ fullOutputPath: fullOutputPath ?? "",
56
+ combinedStats,
57
+ stdoutStats: outputStats(stdout),
58
+ stderrStats: outputStats(stderr),
59
+ exitCode,
60
+ signal,
61
+ preview: outputPreview,
62
+ });
63
+ }
64
+ else if (hasOutput && boundedCombined.truncated) {
65
+ content = formatBoundedOutputContent({
66
+ exitMessagePrefix,
67
+ fullOutputPath: fullOutputPath ?? "",
68
+ combinedStats,
69
+ stdoutStats: outputStats(stdout),
70
+ stderrStats: outputStats(stderr),
71
+ exitCode,
72
+ signal,
73
+ boundedText: appendBoundedTextNotice(boundedCombined, {
74
+ label: "output",
75
+ recoveryHint: fullOutputPath !== undefined
76
+ ? `Full output saved to ${fullOutputPath}.`
77
+ : undefined,
78
+ }),
79
+ });
80
+ }
81
+ else if (hasOutput) {
82
+ content = combined;
83
+ }
84
+ const footerLines = [...contentFooterLines];
85
+ if (timedOut) {
86
+ footerLines.push(timeoutMessage ??
87
+ `${exitMessagePrefix} timed out and ${timeoutKilled ? "was killed" : "was not killed"}.`);
88
+ }
89
+ if (exitCode !== 0) {
90
+ footerLines.push(`${exitMessagePrefix} exited with code ${exitCode}.`);
91
+ }
92
+ if (footerLines.length > 0) {
93
+ content += `${content.endsWith("\n") ? "" : "\n"}${footerLines.join("\n")}`;
94
+ }
95
+ return {
96
+ stdout: stdoutStream.text,
97
+ stderr: stderrStream.text,
98
+ exitCode,
99
+ content,
100
+ contentBlocks: [{ type: "text", text: content }],
101
+ details: {
102
+ ...details,
103
+ exitCode,
104
+ durationMs,
105
+ timedOut,
106
+ timeoutKilled,
107
+ truncation: outputTruncation,
108
+ streams: {
109
+ stdout: streamDetails(stdoutStream),
110
+ stderr: streamDetails(stderrStream),
111
+ combined: streamDetails(combinedStream),
112
+ },
113
+ fullOutputPath,
114
+ signal,
115
+ },
116
+ };
117
+ }
118
+ function buildStreamResult({ label, text, savedTo, }) {
119
+ const stats = outputStats(text);
120
+ const aggregateTruncated = exceedsInlineLimits(stats);
121
+ const bounded = boundProcessInlineText(text);
122
+ const truncated = aggregateTruncated || bounded.truncated;
123
+ const preview = aggregateTruncated ? buildHeadTailPreview(text) : undefined;
124
+ const displayText = preview
125
+ ? renderStreamPreview(label, preview)
126
+ : appendBoundedTextNotice(bounded, { label });
127
+ return {
128
+ text: displayText,
129
+ bytes: stats.bytes,
130
+ lines: stats.lines,
131
+ displayedBytes: Buffer.byteLength(displayText, "utf8"),
132
+ displayedLines: countLines(displayText),
133
+ truncated,
134
+ omittedLines: preview?.omittedLines ?? bounded.omittedLines,
135
+ omittedBytes: preview?.omittedBytes ?? bounded.omittedBytes,
136
+ truncatedLines: preview ? 0 : bounded.truncatedLines,
137
+ direction: preview ? "head_tail" : bounded.direction,
138
+ maxLineChars: truncated ? bounded.maxLineChars : undefined,
139
+ savedTo,
140
+ };
141
+ }
142
+ function streamDetails(stream) {
143
+ return {
144
+ bytes: stream.bytes,
145
+ lines: stream.lines,
146
+ displayedBytes: stream.displayedBytes,
147
+ displayedLines: stream.displayedLines,
148
+ truncated: stream.truncated,
149
+ omittedLines: stream.omittedLines,
150
+ omittedBytes: stream.omittedBytes,
151
+ truncatedLines: stream.truncatedLines,
152
+ direction: stream.direction,
153
+ maxLineChars: stream.maxLineChars,
154
+ savedTo: stream.savedTo,
155
+ };
156
+ }
157
+ function outputStats(text) {
158
+ return {
159
+ bytes: Buffer.byteLength(text, "utf8"),
160
+ lines: countLines(text),
161
+ };
162
+ }
163
+ function exceedsInlineLimits(stats) {
164
+ return (stats.bytes > PROCESS_INLINE_MAX_BYTES ||
165
+ stats.lines > PROCESS_INLINE_MAX_LINES);
166
+ }
167
+ function boundProcessInlineText(text) {
168
+ return boundText(text, {
169
+ maxBytes: PROCESS_INLINE_MAX_BYTES,
170
+ maxLines: PROCESS_INLINE_MAX_LINES,
171
+ maxLineChars: PROCESS_INLINE_MAX_LINE_CHARS,
172
+ });
173
+ }
174
+ function buildHeadTailPreview(text) {
175
+ const lines = splitLines(text);
176
+ if (lines.length === 0) {
177
+ return {
178
+ text: "",
179
+ omittedLines: 0,
180
+ omittedBytes: 0,
181
+ };
182
+ }
183
+ const headCount = Math.min(PROCESS_PREVIEW_EDGE_LINES, lines.length);
184
+ const tailStart = Math.max(headCount, lines.length - PROCESS_PREVIEW_EDGE_LINES);
185
+ const tailLines = tailStart < lines.length ? lines.slice(tailStart) : [];
186
+ const omittedBetweenLines = Math.max(0, tailStart - headCount);
187
+ const sections = [
188
+ {
189
+ title: `first ${formatLineCount(headCount)}`,
190
+ text: formatPreviewSection(lines.slice(0, headCount), "head"),
191
+ },
192
+ ];
193
+ if (tailLines.length > 0) {
194
+ sections.push({
195
+ title: `last ${formatLineCount(tailLines.length)}`,
196
+ text: formatPreviewSection(tailLines, "tail"),
197
+ });
198
+ }
199
+ const previewText = renderPreviewSections(sections, omittedBetweenLines);
200
+ const originalBytes = Buffer.byteLength(text, "utf8");
201
+ const previewBytes = Buffer.byteLength(previewText, "utf8");
202
+ return {
203
+ text: previewText,
204
+ omittedLines: omittedBetweenLines,
205
+ omittedBytes: Math.max(0, originalBytes - previewBytes),
206
+ };
207
+ }
208
+ function formatPreviewSection(lines, direction) {
209
+ const text = lines.map(truncatePreviewLine).join("\n");
210
+ const truncation = direction === "head"
211
+ ? truncateHead(text, {
212
+ maxLines: lines.length,
213
+ maxBytes: PROCESS_PREVIEW_EDGE_MAX_BYTES,
214
+ })
215
+ : truncateTail(text, {
216
+ maxLines: lines.length,
217
+ maxBytes: PROCESS_PREVIEW_EDGE_MAX_BYTES,
218
+ });
219
+ if (!truncation.truncated)
220
+ return truncation.text;
221
+ const marker = `[preview section truncated: omitted ${formatOmissions(truncation)}]`;
222
+ return direction === "head"
223
+ ? `${truncation.text}\n${marker}`
224
+ : `${marker}\n${truncation.text}`;
225
+ }
226
+ function truncatePreviewLine(line) {
227
+ return truncateLine(line, PROCESS_PREVIEW_MAX_LINE_CHARS).text;
228
+ }
229
+ function renderPreviewSections(sections, omittedBetweenLines) {
230
+ return sections
231
+ .map((section, index) => {
232
+ const prefix = index > 0 && omittedBetweenLines > 0
233
+ ? `[... omitted ${formatLineCount(omittedBetweenLines)} between preview sections ...]\n\n`
234
+ : "";
235
+ return `${prefix}Preview — ${section.title}:\n${section.text}`;
236
+ })
237
+ .join("\n\n");
238
+ }
239
+ function renderStreamPreview(label, preview) {
240
+ if (preview.text.length === 0)
241
+ return "";
242
+ return `[${label} exceeded inline limits; showing first/last preview]\n${preview.text}`;
243
+ }
244
+ function previewTruncation(preview) {
245
+ return {
246
+ text: preview.text,
247
+ truncated: true,
248
+ omittedLines: preview.omittedLines,
249
+ omittedBytes: preview.omittedBytes,
250
+ direction: "head_tail",
251
+ };
252
+ }
253
+ function formatLargeOutputContent({ exitMessagePrefix, fullOutputPath, combinedStats, stdoutStats, stderrStats, exitCode, signal, preview, }) {
254
+ const lines = [
255
+ `${exitMessagePrefix} output exceeded inline limits and was saved to:`,
256
+ fullOutputPath,
257
+ "",
258
+ `Combined output: ${formatStats(combinedStats)}`,
259
+ `stdout: ${formatStats(stdoutStats)}`,
260
+ `stderr: ${formatStats(stderrStats)}`,
261
+ `exitCode: ${exitCode}${signal ? `, signal: ${signal}` : ""}`,
262
+ "",
263
+ preview.text,
264
+ "",
265
+ "Use read with offset/limit or grep on the saved transcript to inspect specific sections.",
266
+ ];
267
+ return lines.join("\n");
268
+ }
269
+ function formatBoundedOutputContent({ exitMessagePrefix, fullOutputPath, combinedStats, stdoutStats, stderrStats, exitCode, signal, boundedText, }) {
270
+ const lines = [
271
+ `${exitMessagePrefix} output contained overlong lines and was saved to:`,
272
+ fullOutputPath,
273
+ "",
274
+ `Combined output: ${formatStats(combinedStats)}`,
275
+ `stdout: ${formatStats(stdoutStats)}`,
276
+ `stderr: ${formatStats(stderrStats)}`,
277
+ `exitCode: ${exitCode}${signal ? `, signal: ${signal}` : ""}`,
278
+ "",
279
+ boundedText,
280
+ "",
281
+ "Use read with byteOffset/byteLimit, offset/limit, or grep on the saved transcript to inspect omitted content.",
282
+ ];
283
+ return lines.join("\n");
284
+ }
285
+ async function writeTranscriptFile({ outputFilePrefix, text, dataDir, }) {
286
+ const baseDir = dataDir
287
+ ? join(dataDir, "tmp", "tool-outputs")
288
+ : join(tmpdir(), "nerve-tool-outputs");
289
+ await mkdir(baseDir, { recursive: true, mode: 0o700 });
290
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
291
+ const path = join(baseDir, `${outputFilePrefix}-${timestamp}-${randomUUID()}.log`);
292
+ await writeFile(path, text, { encoding: "utf8", mode: 0o600 });
293
+ return path;
294
+ }
295
+ function formatStats(stats) {
296
+ return `${formatSize(stats.bytes)}, ${formatLineCount(stats.lines)}`;
297
+ }
298
+ function formatLineCount(lines) {
299
+ return `${lines} line${lines === 1 ? "" : "s"}`;
300
+ }
301
+ function formatOmissions(truncation) {
302
+ const parts = [];
303
+ if (truncation.omittedLines > 0) {
304
+ parts.push(formatLineCount(truncation.omittedLines));
305
+ }
306
+ if (truncation.omittedBytes > 0) {
307
+ parts.push(formatSize(truncation.omittedBytes));
308
+ }
309
+ return parts.length > 0 ? parts.join(", ") : "0 bytes";
310
+ }
311
+ function splitLines(text) {
312
+ if (text.length === 0)
313
+ return [];
314
+ const withoutFinalNewline = text.endsWith("\n") ? text.slice(0, -1) : text;
315
+ return withoutFinalNewline.length === 0
316
+ ? [""]
317
+ : withoutFinalNewline.split("\n");
318
+ }
319
+ function countLines(text) {
320
+ return splitLines(text).length;
321
+ }
322
+ //# sourceMappingURL=process-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-result.js","sourceRoot":"","sources":["../../../src/execution/common/process-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type SearchScope = {
2
+ roots: string[];
3
+ displayRoot: string;
4
+ };
5
+ export declare function resolveSearchScope(cwd: string, args: Record<string, unknown>, toolName: string): Promise<SearchScope>;
6
+ export declare function walkFiles(root: string, path: string, limit: number, onFile: (absolutePath: string, relativePath: string) => Promise<void>, shouldStop?: () => boolean): Promise<void>;
7
+ export declare function globToRegExp(pattern: string): RegExp;
8
+ //# sourceMappingURL=search-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-utils.d.ts","sourceRoot":"","sources":["../../../src/execution/common/search-utils.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAmCtB;AA+CD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACrE,UAAU,CAAC,EAAE,MAAM,OAAO,GACzB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBpD"}
@@ -0,0 +1,110 @@
1
+ import { constants } from "node:fs";
2
+ import { access, readdir, stat } from "node:fs/promises";
3
+ import { dirname, isAbsolute, join, relative } from "node:path";
4
+ import { isErrnoException, resolveToolPath } from "../filesystem/path.js";
5
+ export async function resolveSearchScope(cwd, args, toolName) {
6
+ if (args.path !== undefined && args.paths !== undefined) {
7
+ throw new Error(`${toolName} accepts either 'path' or 'paths', not both.`);
8
+ }
9
+ const inputs = searchScopeInputs(args, toolName);
10
+ const roots = [];
11
+ for (const input of inputs) {
12
+ const path = resolveToolPath(cwd, input);
13
+ const info = await stat(path).catch((error) => {
14
+ if (isErrnoException(error) && error.code === "ENOENT") {
15
+ throw new Error(`${toolName} path not found: ${JSON.stringify(input)} (resolved to ${path}). Pass one path in 'path' or multiple paths as 'paths': [...].`);
16
+ }
17
+ throw error;
18
+ });
19
+ if (!info.isFile() && !info.isDirectory()) {
20
+ throw new Error(`${toolName} path is not a file or directory: ${JSON.stringify(input)} (resolved to ${path}).`);
21
+ }
22
+ roots.push({
23
+ input,
24
+ path,
25
+ kind: info.isDirectory() ? "directory" : "file",
26
+ });
27
+ }
28
+ const rootBases = roots.map((root) => root.kind === "directory" ? root.path : dirname(root.path));
29
+ const displayRoot = rootBases.length === 1 ? rootBases[0] : commonAncestor(rootBases);
30
+ return { roots: roots.map((root) => root.path), displayRoot };
31
+ }
32
+ function searchScopeInputs(args, toolName) {
33
+ if (args.paths !== undefined) {
34
+ if (!Array.isArray(args.paths) || args.paths.length === 0) {
35
+ throw new Error(`${toolName} 'paths' must be a non-empty array of strings.`);
36
+ }
37
+ return args.paths.map((input) => {
38
+ if (typeof input !== "string" || input.trim().length === 0) {
39
+ throw new Error(`${toolName} 'paths' must be a non-empty array of strings.`);
40
+ }
41
+ return input;
42
+ });
43
+ }
44
+ if (args.path !== undefined) {
45
+ if (typeof args.path !== "string" || args.path.trim().length === 0) {
46
+ throw new Error(`${toolName} 'path' must be a non-empty string.`);
47
+ }
48
+ return [args.path];
49
+ }
50
+ return ["."];
51
+ }
52
+ function commonAncestor(paths) {
53
+ let current = paths[0] ?? "/";
54
+ for (const path of paths.slice(1)) {
55
+ while (!isInsideOrSame(current, path)) {
56
+ const parent = dirname(current);
57
+ if (parent === current)
58
+ return current;
59
+ current = parent;
60
+ }
61
+ }
62
+ return current;
63
+ }
64
+ function isInsideOrSame(parent, child) {
65
+ const rel = relative(parent, child);
66
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
67
+ }
68
+ export async function walkFiles(root, path, limit, onFile, shouldStop) {
69
+ if (shouldStop?.())
70
+ return;
71
+ const info = await stat(path);
72
+ if (info.isDirectory()) {
73
+ const entries = await readdir(path, { withFileTypes: true });
74
+ for (const entry of entries) {
75
+ if (shouldStop?.())
76
+ return;
77
+ if (entry.name === "node_modules" || entry.name === ".git")
78
+ continue;
79
+ await walkFiles(root, join(path, entry.name), limit, onFile, shouldStop);
80
+ }
81
+ return;
82
+ }
83
+ if (!info.isFile())
84
+ return;
85
+ await access(path, constants.R_OK);
86
+ await onFile(path, relative(root, path));
87
+ }
88
+ export function globToRegExp(pattern) {
89
+ let output = "";
90
+ for (let index = 0; index < pattern.length; index += 1) {
91
+ const char = pattern[index];
92
+ const next = pattern[index + 1];
93
+ if (char === "*" && next === "*") {
94
+ output += ".*";
95
+ index += 1;
96
+ continue;
97
+ }
98
+ if (char === "*") {
99
+ output += "[^/]*";
100
+ continue;
101
+ }
102
+ if (char === "?") {
103
+ output += "[^/]";
104
+ continue;
105
+ }
106
+ output += char?.replace(/[.+^${}()|[\]\\]/g, "\\$&") ?? "";
107
+ }
108
+ return new RegExp(`^${output}$`);
109
+ }
110
+ //# sourceMappingURL=search-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../../src/execution/common/search-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAa1E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,IAA6B,EAC7B,QAAgB;IAEhB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,8CAA8C,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACrD,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,IAAI,iEAAiE,CAC3I,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAC/F,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK;YACL,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3D,CAAC;IACF,MAAM,WAAW,GACf,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACpE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,iBAAiB,CACxB,IAA6B,EAC7B,QAAgB;IAEhB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,gDAAgD,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,gDAAgD,CAC5D,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,qCAAqC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,OAAO;gBAAE,OAAO,OAAO,CAAC;YACvC,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,KAAa;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,MAAqE,EACrE,UAA0B;IAE1B,IAAI,UAAU,EAAE,EAAE;QAAE,OAAO;IAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,UAAU,EAAE,EAAE;gBAAE,OAAO;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACrE,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO;IAC3B,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,IAAI,IAAI,CAAC;YACf,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,MAAM,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,IAAI,EAAE,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class ToolExecutionError extends Error {
2
+ readonly code: string;
3
+ readonly details: Record<string, unknown>;
4
+ readonly retryable: boolean;
5
+ readonly isToolExecutionError = true;
6
+ constructor(code: string, message: string, details?: Record<string, unknown>, retryable?: boolean);
7
+ }
8
+ //# sourceMappingURL=tool-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.d.ts","sourceRoot":"","sources":["../../../src/execution/common/tool-error.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAmB,SAAQ,KAAK;IAIzC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,SAAS;IANpB,QAAQ,CAAC,oBAAoB,QAAQ;gBAG1B,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,UAAQ;CAK7B"}
@@ -0,0 +1,14 @@
1
+ export class ToolExecutionError extends Error {
2
+ code;
3
+ details;
4
+ retryable;
5
+ isToolExecutionError = true;
6
+ constructor(code, message, details = {}, retryable = false) {
7
+ super(message);
8
+ this.code = code;
9
+ this.details = details;
10
+ this.retryable = retryable;
11
+ this.name = "ToolExecutionError";
12
+ }
13
+ }
14
+ //# sourceMappingURL=tool-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.js","sourceRoot":"","sources":["../../../src/execution/common/tool-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAIhC;IAEA;IACA;IANF,oBAAoB,GAAG,IAAI,CAAC;IAErC,YACW,IAAY,EACrB,OAAe,EACN,UAAmC,EAAE,EACrC,YAAY,KAAK;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QALN,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAA8B;QACrC,cAAS,GAAT,SAAS,CAAQ;QAG1B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ export declare const DEFAULT_MAX_LINES = 2000;
2
+ export declare const DEFAULT_MAX_BYTES: number;
3
+ export declare const GREP_MAX_LINE_LENGTH = 500;
4
+ export declare const PROCESS_INLINE_MAX_BYTES: number;
5
+ export declare const PROCESS_INLINE_MAX_LINES = 500;
6
+ export declare const PROCESS_PREVIEW_EDGE_LINES = 40;
7
+ export declare const PROCESS_PREVIEW_EDGE_MAX_BYTES: number;
8
+ export declare const PROCESS_PREVIEW_MAX_LINE_CHARS = 500;
9
+ export type TruncationDirection = "head" | "tail" | "line" | "head_tail";
10
+ export type TruncationResult = {
11
+ text: string;
12
+ truncated: boolean;
13
+ omittedLines: number;
14
+ omittedBytes: number;
15
+ direction: TruncationDirection;
16
+ partialLine?: boolean;
17
+ };
18
+ type TruncateOptions = {
19
+ maxLines?: number;
20
+ maxBytes?: number;
21
+ };
22
+ export declare function truncateHead(input: string, options?: TruncateOptions): TruncationResult;
23
+ export declare function truncateTail(input: string, options?: TruncateOptions): TruncationResult;
24
+ export declare function truncateLine(input: string, maxChars?: number): TruncationResult;
25
+ export declare function formatSize(bytes: number): string;
26
+ export {};
27
+ //# sourceMappingURL=truncate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../src/execution/common/truncate.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAClD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,8BAA8B,QAAW,CAAC;AACvD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CAgClB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CA8BlB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,SAAuB,GAC9B,gBAAgB,CAkBlB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD"}
@@ -0,0 +1,108 @@
1
+ export const DEFAULT_MAX_LINES = 2000;
2
+ export const DEFAULT_MAX_BYTES = 50 * 1024;
3
+ export const GREP_MAX_LINE_LENGTH = 500;
4
+ export const PROCESS_INLINE_MAX_BYTES = 32 * 1024;
5
+ export const PROCESS_INLINE_MAX_LINES = 500;
6
+ export const PROCESS_PREVIEW_EDGE_LINES = 40;
7
+ export const PROCESS_PREVIEW_EDGE_MAX_BYTES = 8 * 1024;
8
+ export const PROCESS_PREVIEW_MAX_LINE_CHARS = 500;
9
+ export function truncateHead(input, options = {}) {
10
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
11
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
12
+ const lines = input.split("\n");
13
+ const selected = lines.slice(0, maxLines);
14
+ let text = selected.join("\n");
15
+ let omittedLines = Math.max(0, lines.length - selected.length);
16
+ let omittedBytes = 0;
17
+ while (byteLength(text) > maxBytes && selected.length > 1) {
18
+ const removed = selected.pop() ?? "";
19
+ omittedLines += 1;
20
+ omittedBytes += byteLength(removed) + 1;
21
+ text = selected.join("\n");
22
+ }
23
+ let partialLine = false;
24
+ if (byteLength(text) > maxBytes) {
25
+ const truncated = truncateUtf8Bytes(text, maxBytes);
26
+ omittedBytes += byteLength(text) - byteLength(truncated);
27
+ text = truncated;
28
+ partialLine = true;
29
+ }
30
+ return {
31
+ text,
32
+ truncated: omittedLines > 0 || omittedBytes > 0,
33
+ omittedLines,
34
+ omittedBytes,
35
+ direction: "head",
36
+ partialLine: partialLine || undefined,
37
+ };
38
+ }
39
+ export function truncateTail(input, options = {}) {
40
+ const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
41
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
42
+ const lines = input.split("\n");
43
+ const selected = lines.slice(Math.max(0, lines.length - maxLines));
44
+ let text = selected.join("\n");
45
+ let omittedLines = Math.max(0, lines.length - selected.length);
46
+ let omittedBytes = 0;
47
+ while (byteLength(text) > maxBytes && selected.length > 0) {
48
+ const removed = selected.shift() ?? "";
49
+ omittedLines += 1;
50
+ omittedBytes += byteLength(removed) + 1;
51
+ text = selected.join("\n");
52
+ }
53
+ if (byteLength(text) > maxBytes) {
54
+ const bytes = Buffer.from(text, "utf8");
55
+ const truncated = bytes.subarray(bytes.length - maxBytes).toString("utf8");
56
+ omittedBytes += byteLength(text) - byteLength(truncated);
57
+ text = truncated;
58
+ }
59
+ return {
60
+ text,
61
+ truncated: omittedLines > 0 || omittedBytes > 0,
62
+ omittedLines,
63
+ omittedBytes,
64
+ direction: "tail",
65
+ };
66
+ }
67
+ export function truncateLine(input, maxChars = GREP_MAX_LINE_LENGTH) {
68
+ if (input.length <= maxChars) {
69
+ return {
70
+ text: input,
71
+ truncated: false,
72
+ omittedLines: 0,
73
+ omittedBytes: 0,
74
+ direction: "line",
75
+ };
76
+ }
77
+ const omitted = input.slice(maxChars);
78
+ return {
79
+ text: `${input.slice(0, maxChars)}…[truncated ${omitted.length} chars]`,
80
+ truncated: true,
81
+ omittedLines: 0,
82
+ omittedBytes: byteLength(omitted),
83
+ direction: "line",
84
+ };
85
+ }
86
+ export function formatSize(bytes) {
87
+ if (bytes < 1024)
88
+ return `${bytes}B`;
89
+ if (bytes < 1024 * 1024)
90
+ return `${(bytes / 1024).toFixed(1)}KB`;
91
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
92
+ }
93
+ function truncateUtf8Bytes(input, maxBytes) {
94
+ if (maxBytes <= 0)
95
+ return "";
96
+ const bytes = Buffer.from(input, "utf8");
97
+ if (bytes.length <= maxBytes)
98
+ return input;
99
+ let end = maxBytes;
100
+ while (end > 0 && (bytes[end] & 0xc0) === 0x80) {
101
+ end -= 1;
102
+ }
103
+ return bytes.subarray(0, end).toString("utf8");
104
+ }
105
+ function byteLength(input) {
106
+ return Buffer.byteLength(input, "utf8");
107
+ }
108
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../../src/execution/common/truncate.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAkBlD,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACrC,YAAY,IAAI,CAAC,CAAC;QAClB,YAAY,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,GAAG,SAAS,CAAC;QACjB,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;QAC/C,YAAY;QACZ,YAAY;QACZ,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,WAAW,IAAI,SAAS;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IACnE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACvC,YAAY,IAAI,CAAC,CAAC;QAClB,YAAY,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3E,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;QAC/C,YAAY;QACZ,YAAY;QACZ,SAAS,EAAE,MAAM;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,QAAQ,GAAG,oBAAoB;IAE/B,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,OAAO,CAAC,MAAM,SAAS;QACvE,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC;QACjC,SAAS,EAAE,MAAM;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IACrC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IACxD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC"}