@gaunt-sloth/agent 2.0.0-alpha.3 → 2.0.0-alpha.30

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 (96) hide show
  1. package/README.md +73 -23
  2. package/dist/builtInToolsConfig.d.ts +17 -3
  3. package/dist/builtInToolsConfig.js +40 -41
  4. package/dist/builtInToolsConfig.js.map +1 -1
  5. package/dist/core/GthDeepAgent.d.ts +52 -32
  6. package/dist/core/GthDeepAgent.js +438 -198
  7. package/dist/core/GthDeepAgent.js.map +1 -1
  8. package/dist/core/debugCapture.d.ts +8 -49
  9. package/dist/core/debugCapture.js +1 -1
  10. package/dist/core/debugCapture.js.map +1 -1
  11. package/dist/core/deepAgentPermissions.d.ts +67 -2
  12. package/dist/core/deepAgentPermissions.js +151 -3
  13. package/dist/core/deepAgentPermissions.js.map +1 -1
  14. package/dist/core/gthAcpServer.js +11 -0
  15. package/dist/core/gthAcpServer.js.map +1 -1
  16. package/dist/core/gthDeepAgentFactory.d.ts +3 -0
  17. package/dist/core/gthDeepAgentFactory.js +9 -1
  18. package/dist/core/gthDeepAgentFactory.js.map +1 -1
  19. package/dist/core/resolveAgentFactory.d.ts +14 -0
  20. package/dist/core/resolveAgentFactory.js +18 -0
  21. package/dist/core/resolveAgentFactory.js.map +1 -0
  22. package/dist/core/subagentProfiles.d.ts +50 -0
  23. package/dist/core/subagentProfiles.js +76 -0
  24. package/dist/core/subagentProfiles.js.map +1 -0
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/mcp/OAuthClientProviderImpl.js.map +1 -1
  29. package/dist/mcp/tlsTrust.d.ts +61 -0
  30. package/dist/mcp/tlsTrust.js +109 -0
  31. package/dist/mcp/tlsTrust.js.map +1 -0
  32. package/dist/middleware/binaryContentInjectionMiddleware.d.ts +8 -1
  33. package/dist/middleware/binaryContentInjectionMiddleware.js +11 -2
  34. package/dist/middleware/binaryContentInjectionMiddleware.js.map +1 -1
  35. package/dist/middleware/frontendImageInjectionMiddleware.d.ts +106 -0
  36. package/dist/middleware/frontendImageInjectionMiddleware.js +166 -0
  37. package/dist/middleware/frontendImageInjectionMiddleware.js.map +1 -0
  38. package/dist/middleware/registry.js +36 -1
  39. package/dist/middleware/registry.js.map +1 -1
  40. package/dist/middleware/types.d.ts +16 -2
  41. package/dist/modules/a2a/A2AClientWrapper.d.ts +56 -1
  42. package/dist/modules/a2a/A2AClientWrapper.js +131 -31
  43. package/dist/modules/a2a/A2AClientWrapper.js.map +1 -1
  44. package/dist/modules/acpModule.js +17 -1
  45. package/dist/modules/acpModule.js.map +1 -1
  46. package/dist/modules/apiAgUiModule.d.ts +87 -0
  47. package/dist/modules/apiAgUiModule.js +229 -28
  48. package/dist/modules/apiAgUiModule.js.map +1 -1
  49. package/dist/modules/interactiveSessionModule.js +501 -41
  50. package/dist/modules/interactiveSessionModule.js.map +1 -1
  51. package/dist/modules/slashCommands.d.ts +576 -0
  52. package/dist/modules/slashCommands.js +995 -0
  53. package/dist/modules/slashCommands.js.map +1 -0
  54. package/dist/resolvers.js +119 -9
  55. package/dist/resolvers.js.map +1 -1
  56. package/dist/tools/GthCustomToolkit.js +95 -11
  57. package/dist/tools/GthCustomToolkit.js.map +1 -1
  58. package/dist/tools/GthDevToolkit.d.ts +11 -3
  59. package/dist/tools/GthDevToolkit.js +120 -34
  60. package/dist/tools/GthDevToolkit.js.map +1 -1
  61. package/dist/tools/GthFileSystemToolkit.d.ts +63 -0
  62. package/dist/tools/GthFileSystemToolkit.js +506 -105
  63. package/dist/tools/GthFileSystemToolkit.js.map +1 -1
  64. package/dist/tools/McpResourceTool.d.ts +31 -0
  65. package/dist/tools/McpResourceTool.js +106 -0
  66. package/dist/tools/McpResourceTool.js.map +1 -0
  67. package/dist/tools/gthChecklistTool.d.ts +30 -0
  68. package/dist/tools/gthChecklistTool.js +81 -0
  69. package/dist/tools/gthChecklistTool.js.map +1 -0
  70. package/dist/tools/gthGrepTool.d.ts +54 -0
  71. package/dist/tools/gthGrepTool.js +482 -0
  72. package/dist/tools/gthGrepTool.js.map +1 -0
  73. package/dist/tools/shell/env.js +1 -1
  74. package/dist/tools/shell/env.js.map +1 -1
  75. package/dist/tools/shell/outputBuffer.js.map +1 -1
  76. package/dist/tools/shell/workDir.d.ts +11 -0
  77. package/dist/tools/shell/workDir.js +45 -0
  78. package/dist/tools/shell/workDir.js.map +1 -0
  79. package/dist/utils/mcpAuthError.d.ts +36 -0
  80. package/dist/utils/mcpAuthError.js +89 -0
  81. package/dist/utils/mcpAuthError.js.map +1 -0
  82. package/dist/utils/mcpUtils.js +16 -0
  83. package/dist/utils/mcpUtils.js.map +1 -1
  84. package/package.json +12 -11
  85. package/dist/tools/shell/allowlist.d.ts +0 -11
  86. package/dist/tools/shell/allowlist.js +0 -12
  87. package/dist/tools/shell/allowlist.js.map +0 -1
  88. package/dist/tools/shell/arity.d.ts +0 -11
  89. package/dist/tools/shell/arity.js +0 -12
  90. package/dist/tools/shell/arity.js.map +0 -1
  91. package/dist/tools/shell/hardline.d.ts +0 -15
  92. package/dist/tools/shell/hardline.js +0 -88
  93. package/dist/tools/shell/hardline.js.map +0 -1
  94. package/dist/tools/shell/normalize.d.ts +0 -10
  95. package/dist/tools/shell/normalize.js +0 -11
  96. package/dist/tools/shell/normalize.js.map +0 -1
@@ -5,12 +5,22 @@ import { BaseToolkit, tool } from '@langchain/core/tools';
5
5
  import { z } from 'zod';
6
6
  import { spawn, spawnSync } from 'child_process';
7
7
  import path from 'node:path';
8
- import { displayInfo, displayError, displayWarning } from '@gaunt-sloth/core/utils/consoleUtils.js';
8
+ // TUI-C31 (a): failure-path warnings/errors travel the tool-output channel (see emitToolOutput
9
+ // below) so they reach the managed frame under the Ink TUI instead of raw stdout; the channel's
10
+ // default sink still renders them via displayWarning/displayError for every headless surface.
9
11
  import { getShellMaxOutputBytes, getShellTimeoutMs, isShellToolEnabled, } from '@gaunt-sloth/core/config.js';
10
- import { stdout } from '@gaunt-sloth/core/utils/systemUtils.js';
11
- import { checkHardline } from '#src/tools/shell/hardline.js';
12
+ import { emitToolOutput } from '@gaunt-sloth/core/core/toolOutputChannel.js';
13
+ import { ShellCommandFailedError } from '@gaunt-sloth/core/core/shell/ShellCommandFailedError.js';
14
+ import { buildHardlineRefusal, checkHardline } from '@gaunt-sloth/core/core/shell/hardline.js';
12
15
  import { buildScrubbedEnv } from '#src/tools/shell/env.js';
13
16
  import { OutputBuffer } from '#src/tools/shell/outputBuffer.js';
17
+ import { getShellWorkDir } from '#src/tools/shell/workDir.js';
18
+ // EXT-21: `ShellCommandFailedError` moved to core so BOTH agents can recognise a shell failure
19
+ // without breaking the agent→core dependency direction (the lean `GthLangChainAgent` lives in core
20
+ // and cannot import from agent). Re-exported here so the historical import site
21
+ // (`#src/tools/GthDevToolkit.js`) — GthDeepAgent + the existing GthDevToolkit specs — keeps working
22
+ // and every throw below is one and the same core type both agents' softeners catch.
23
+ export { ShellCommandFailedError } from '@gaunt-sloth/core/core/shell/ShellCommandFailedError.js';
14
24
  // Grace period (ms) between SIGTERM and the escalation to SIGKILL when a command
15
25
  // exceeds its timeout. Mirrors opencode's `forceKillAfter` (3s).
16
26
  const KILL_GRACE_MS = 3_000;
@@ -74,7 +84,9 @@ export function killProcessGroup(child, signal) {
74
84
  // Already exited — nothing to do.
75
85
  }
76
86
  }
77
- // Helper function to create a tool with dev type
87
+ // Helper function to create a tool with dev type. The fn's second parameter is LangChain's
88
+ // ToolRunnableConfig — when the framework invokes the tool with a ToolCall, `config.toolCall.id`
89
+ // identifies the call, which TUI-C17 threads into the live-output channel for attribution.
78
90
  function createGthTool(fn, config, gthDevType) {
79
91
  const toolInstance = tool(fn, config);
80
92
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -90,6 +102,25 @@ const RunSingleTestArgsSchema = z.object({
90
102
  });
91
103
  const RunShellCommandArgsSchema = z.object({
92
104
  command: z.string().describe('The shell command to run'),
105
+ /**
106
+ * [[EXT-29]] (spec §5.1, §7) — **the move §7 already promises the model and it could not make.**
107
+ * The rejection message names *"call the same command with a justification"* among the moves
108
+ * available after a refusal; without an argument to carry one, the only way to act on that was to
109
+ * re-send the identical call, which is what makes an agent repeat itself and burn §5.3's cap
110
+ * without producing information.
111
+ *
112
+ * It reaches the rater as fenced, untrusted data, weighed asymmetrically (§5.1): a justification
113
+ * may only ever make an outcome LESS severe, and a stated intent that does not match what the
114
+ * command does is grounds for rejection rather than for a discount. Never sent for its own sake —
115
+ * an unprompted one is noise the rater still has to read.
116
+ */
117
+ justification: z
118
+ .string()
119
+ .optional()
120
+ .describe('Optional. Why this command is the right one, in a sentence or two — supply it when ' +
121
+ 'RE-CALLING a command that was rejected, so the reviewer can weigh what you are trying ' +
122
+ 'to do. Address the objection you were given rather than restating the request; a ' +
123
+ 'justification that does not match what the command actually does is rejected outright.'),
93
124
  });
94
125
  const TEST_PATH_PLACEHOLDER = '${testPath}';
95
126
  export default class GthDevToolkit extends BaseToolkit {
@@ -177,21 +208,39 @@ export default class GthDevToolkit extends BaseToolkit {
177
208
  * 2. output capped with a head/tail window + temp-file spillover,
178
209
  * 3. provider/LLM credentials scrubbed from the child env,
179
210
  * 4. an unbypassable hardline blocklist (refuses catastrophic commands BEFORE
180
- * spawn — fires even when confirmation is bypassed by yolo).
211
+ * spawn — fires even when confirmation is bypassed by approvals.mode: bypass).
181
212
  *
182
- * Resolves with a model-facing string. Timeouts resolve (not reject) so the
183
- * model sees the killed-after-N message and can continue.
213
+ * Resolves with a model-facing string on a CLEAN exit (`code === 0`). EXT-20: a non-zero exit
214
+ * and a timeout-kill instead REJECT with a {@link ShellCommandFailedError} that carries the FULL
215
+ * model-facing body — the deep-agent {@link GthDeepShellExitSoftening} middleware converts that
216
+ * throw into an error `ToolMessage` (status:'error' → ✗) while preserving the output, so the
217
+ * model still sees the killed-after-N / exit-code message and can continue. GS2-36: spawn-level
218
+ * failures (`child.on('error')` — missing shell binary, a non-existent cwd, EMFILE, …) ALSO reject
219
+ * with a {@link ShellCommandFailedError} (exitCode null) so the same softeners convert them into a
220
+ * recoverable error `ToolMessage`; previously they rejected a plain `Error` that neither softener
221
+ * recognised, so a spawn failure aborted the whole run.
184
222
  */
185
- async executeCommand(command, toolName) {
186
- displayInfo(`\n🔧 Executing ${toolName}: ${command}`);
187
- // (4) Hardline blocklist checked here so it fires regardless of yolo,
188
- // allow-lists, or any confirmation path. Refuse WITHOUT executing.
223
+ async executeCommand(command, toolName, toolCallId) {
224
+ // TUI-C17: the "Executing" notice + live child output go through the tool-output channel.
225
+ // With no subscriber (every non-TUI surface) the channel's default sink reproduces the
226
+ // historical behaviour exactly (displayInfo notice, raw stdout chunks); under the Ink TUI
227
+ // the session subscribes and folds them into the managed frame instead.
228
+ emitToolOutput({
229
+ toolCallId,
230
+ toolName,
231
+ kind: 'notice',
232
+ text: `🔧 Executing ${toolName}: ${command}`,
233
+ });
234
+ // (4) Hardline blocklist — checked here so it fires regardless of the approval mode,
235
+ // allow-lists, or any confirmation path. Refuse WITHOUT executing. The approvals gate consults
236
+ // the SAME floor before it rates or prompts ([[EXT-29]] §4.2), so a matching command normally
237
+ // never reaches this line; this call is the guarantee that holds when nothing gated it at all.
189
238
  const hardline = checkHardline(command);
190
239
  if (hardline) {
191
- const refusal = `Refusing to execute '${command}': blocked by hardline safety policy ` +
192
- `(${hardline.description}). This is a catastrophic, non-recoverable command ` +
193
- `and is blocked even when command confirmation is disabled.`;
194
- displayWarning(`\n⛔ ${refusal}`);
240
+ const refusal = buildHardlineRefusal(command, hardline);
241
+ // TUI-C31 (a): route through the tool-output channel so the refusal lands in the managed
242
+ // frame under the TUI (headless still gets displayWarning via the default sink, verbatim).
243
+ emitToolOutput({ toolCallId, toolName, kind: 'warning', text: `\n⛔ ${refusal}` });
195
244
  return refusal;
196
245
  }
197
246
  const timeoutMs = getShellTimeoutMs(this.commands);
@@ -199,6 +248,14 @@ export default class GthDevToolkit extends BaseToolkit {
199
248
  return new Promise((resolve, reject) => {
200
249
  const child = spawn(command, {
201
250
  shell: true,
251
+ // EXT-22 (S4) / EXT-23: spawn in the SAME directory the deepagents FilesystemBackend is
252
+ // rooted at, so the shell tool and the fs tools (ls/read_file/write_file/edit_file/glob/grep)
253
+ // operate on one path namespace instead of diverging. `getShellWorkDir()` returns
254
+ // `getCurrentWorkDir()` on the local code/chat runner + AG-UI (where init() roots the backend
255
+ // at `rootDir: getCurrentWorkDir()`), and the ACP session override on the ACP transport (where
256
+ // `gthAcpServer` re-roots the per-session backend to `session/new.cwd` and updates the
257
+ // override to match — see tools/shell/workDir.ts). Evaluated at call time.
258
+ cwd: getShellWorkDir(),
202
259
  // (1) Never let the child block on stdin (e.g. git commit opening $EDITOR).
203
260
  stdio: ['ignore', 'pipe', 'pipe'],
204
261
  // (1) POSIX: own process group so we can kill the whole tree on timeout
@@ -229,14 +286,14 @@ export default class GthDevToolkit extends BaseToolkit {
229
286
  if (child.stdout) {
230
287
  child.stdout.on('data', (data) => {
231
288
  const chunk = data.toString();
232
- stdout.write(chunk);
289
+ emitToolOutput({ toolCallId, toolName, kind: 'output', text: chunk });
233
290
  buffer.append(chunk);
234
291
  });
235
292
  }
236
293
  if (child.stderr) {
237
294
  child.stderr.on('data', (data) => {
238
295
  const chunk = data.toString();
239
- stdout.write(chunk);
296
+ emitToolOutput({ toolCallId, toolName, kind: 'output', text: chunk });
240
297
  buffer.append(chunk);
241
298
  });
242
299
  }
@@ -251,16 +308,31 @@ export default class GthDevToolkit extends BaseToolkit {
251
308
  captured.text +
252
309
  `</COMMAND_OUTPUT>\n`;
253
310
  if (timedOut) {
254
- resolve(body +
255
- `\n\nCommand '${command}' was killed after exceeding the ${Math.round(timeoutMs / 1000)}s timeout. ` +
256
- `If it legitimately needs longer, increase the shell timeout in config.`);
311
+ // EXT-20: a timeout-kill is a failure — reject so the deep-agent middleware flips the
312
+ // tool result to status:'error' (✗). The FULL body is preserved on the error so the
313
+ // model's observation is unchanged except for the status.
314
+ reject(new ShellCommandFailedError({
315
+ output: body +
316
+ `\n\nCommand '${command}' was killed after exceeding the ${Math.round(timeoutMs / 1000)}s timeout. ` +
317
+ `If it legitimately needs longer, increase the shell timeout in config.`,
318
+ exitCode: null,
319
+ command,
320
+ toolName,
321
+ }));
257
322
  return;
258
323
  }
259
324
  if (code === 0) {
260
325
  resolve(body + `\n\nCommand '${command}' completed successfully`);
261
326
  }
262
327
  else {
263
- resolve(body + `\n\nCommand '${command}' exited with code ${code}`);
328
+ // EXT-20: a non-zero exit is a failure — reject (was resolve) so the softening
329
+ // middleware surfaces the ✗ (isError) signal while preserving the full output body.
330
+ reject(new ShellCommandFailedError({
331
+ output: body + `\n\nCommand '${command}' exited with code ${code}`,
332
+ exitCode: code,
333
+ command,
334
+ toolName,
335
+ }));
264
336
  }
265
337
  });
266
338
  child.on('error', (error) => {
@@ -268,17 +340,31 @@ export default class GthDevToolkit extends BaseToolkit {
268
340
  return;
269
341
  settled = true;
270
342
  clearTimers();
271
- const errorMsg = `Failed to execute command '${command}': ${error.message}`;
272
- displayError(errorMsg);
273
- reject(new Error(errorMsg));
343
+ // GS2-36: a spawn-level failure used to reject a plain Error, which neither the lean
344
+ // (GthLeanShellExitSoftening) nor the deep (GthDeepShellExitSoftening) softener recognises —
345
+ // so it propagated to GthAgentRunner as a fatal `Stream processing failed` and crashed the
346
+ // run. Reject a ShellCommandFailedError (exitCode null, like a timeout-kill) so BOTH softeners
347
+ // convert it into a recoverable status:'error' ToolMessage and the model can route around it.
348
+ // The message is phrased as an action-oriented recovery hint (EXT-34 hermes style).
349
+ const errorMsg = `Failed to start command '${command}': ${error.message}. ` +
350
+ 'Check that the command/executable exists and the working directory is valid, then retry.';
351
+ // TUI-C31 (a): route through the tool-output channel so the spawn-error advisory lands in
352
+ // the managed frame under the TUI (headless still gets displayError via the default sink).
353
+ emitToolOutput({ toolCallId, toolName, kind: 'error', text: errorMsg });
354
+ reject(new ShellCommandFailedError({
355
+ output: errorMsg,
356
+ exitCode: null,
357
+ command,
358
+ toolName,
359
+ }));
274
360
  });
275
361
  });
276
362
  }
277
363
  createTools() {
278
364
  const tools = [];
279
365
  if (this.commands.run_tests) {
280
- tools.push(createGthTool(async (_args) => {
281
- return await this.executeCommand(this.commands.run_tests, 'run_tests');
366
+ tools.push(createGthTool(async (_args, config) => {
367
+ return await this.executeCommand(this.commands.run_tests, 'run_tests', config?.toolCall?.id);
282
368
  }, {
283
369
  name: 'run_tests',
284
370
  description: 'Execute the test suite for this project. Runs the configured test command and returns the output.' +
@@ -287,10 +373,10 @@ export default class GthDevToolkit extends BaseToolkit {
287
373
  }, 'execute'));
288
374
  }
289
375
  if (this.commands.run_single_test) {
290
- tools.push(createGthTool(async (args) => {
376
+ tools.push(createGthTool(async (args, config) => {
291
377
  const validatedPath = this.validateParameterValue(args.testPath, 'testPath');
292
378
  const command = this.buildSingleTestCommand(validatedPath);
293
- return await this.executeCommand(command, 'run_single_test');
379
+ return await this.executeCommand(command, 'run_single_test', config?.toolCall?.id);
294
380
  }, {
295
381
  name: 'run_single_test',
296
382
  description: 'Execute a single test file. Runs the configured test command with the specified test file path. ' +
@@ -300,8 +386,8 @@ export default class GthDevToolkit extends BaseToolkit {
300
386
  }, 'execute'));
301
387
  }
302
388
  if (this.commands.run_lint) {
303
- tools.push(createGthTool(async (_args) => {
304
- return await this.executeCommand(this.commands.run_lint, 'run_lint');
389
+ tools.push(createGthTool(async (_args, config) => {
390
+ return await this.executeCommand(this.commands.run_lint, 'run_lint', config?.toolCall?.id);
305
391
  }, {
306
392
  name: 'run_lint',
307
393
  description: 'Run the linter on the project code. Executes the configured lint command and returns any linting errors or warnings.' +
@@ -310,8 +396,8 @@ export default class GthDevToolkit extends BaseToolkit {
310
396
  }, 'execute'));
311
397
  }
312
398
  if (this.commands.run_build) {
313
- tools.push(createGthTool(async (_args) => {
314
- return await this.executeCommand(this.commands.run_build, 'run_build');
399
+ tools.push(createGthTool(async (_args, config) => {
400
+ return await this.executeCommand(this.commands.run_build, 'run_build', config?.toolCall?.id);
315
401
  }, {
316
402
  name: 'run_build',
317
403
  description: 'Build the project. Executes the configured build command and returns the build output.' +
@@ -324,8 +410,8 @@ export default class GthDevToolkit extends BaseToolkit {
324
410
  // agent (createDeepAgent `interruptOn`), not a parameter sanitizer — a real shell command
325
411
  // legitimately contains pipes / `$` / `;`, so validateParameterValue must NOT be applied.
326
412
  if (isShellToolEnabled(this.commands, this.command)) {
327
- tools.push(createGthTool(async (args) => {
328
- return await this.executeCommand(args.command, 'run_shell_command');
413
+ tools.push(createGthTool(async (args, config) => {
414
+ return await this.executeCommand(args.command, 'run_shell_command', config?.toolCall?.id);
329
415
  }, {
330
416
  name: 'run_shell_command',
331
417
  description: 'Run an arbitrary shell command in the project working directory and return its ' +
@@ -1 +1 @@
1
- {"version":3,"file":"GthDevToolkit.js","sourceRoot":"","sources":["../../src/tools/GthDevToolkit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GthDevToolkit.js","sourceRoot":"","sources":["../../src/tools/GthDevToolkit.ts"],"names":[],"mappings":"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"}
@@ -27,10 +27,73 @@ export default class GthFileSystemToolkit extends BaseToolkit {
27
27
  private searchFiles;
28
28
  private normalizeLineEndings;
29
29
  private createUnifiedDiff;
30
+ /**
31
+ * Count non-overlapping exact occurrences of `search` in `content`.
32
+ * Uses an indexOf scan (no regex) so arbitrary text is matched literally.
33
+ */
34
+ private countOccurrences;
30
35
  private applyFileEdits;
31
36
  private formatSize;
32
37
  private tailFile;
33
38
  private headFile;
39
+ /**
40
+ * Returns the first `head` lines and the last `tail` lines of a file, separated by a
41
+ * `... [N lines skipped] ...` marker. When the two windows cover or overlap the whole
42
+ * file (`head + tail >= total`) the entire file is returned unchanged (no marker, no
43
+ * duplicated lines).
44
+ */
45
+ private headAndTailFile;
46
+ /**
47
+ * Return the file's lines from the 1-based `offset` to EOF (GS2-39 paging). Deliberately does
48
+ * NOT apply `limit` here — the caller hands the result to capReadContent with maxLines = limit so
49
+ * that a limit-bounded read is *observable* to the envelope (it can then tell "more file remains
50
+ * past this window" from "reached EOF" and emit the correct resume notice). Pre-slicing to
51
+ * exactly `limit` lines here would hide that signal and silently drop the continuation.
52
+ *
53
+ * Mirrors headAndTailFile's trailing-newline handling so line numbering matches head/tail/full
54
+ * reads: a terminating newline yields a phantom trailing empty element that must not be counted
55
+ * as a real line. Clamps rather than throwing: an offset past EOF returns a short recoverable note
56
+ * (not an empty string, which is indistinguishable from an empty file).
57
+ */
58
+ private windowFile;
59
+ /**
60
+ * Apply the read safety envelope (GS2-39) to already-selected file content:
61
+ * - any single line longer than MAX_LINE_LENGTH is truncated with LINE_TRUNCATED_SUFFIX;
62
+ * - emission stops once `maxLines` lines OR MAX_READ_BYTES bytes have been produced.
63
+ *
64
+ * When nothing exceeds the caps the content is returned verbatim (byte-identical), so normal
65
+ * files behave exactly as before — the change only bites on pathological / huge files.
66
+ *
67
+ * Three truncation signals are kept deliberately separate:
68
+ * - a per-line cut is marked only by the inline LINE_TRUNCATED_SUFFIX (no global notice);
69
+ * - the BYTE cap always appends the global "output truncated" notice, because it is the hard
70
+ * safety envelope regardless of who asked for the read;
71
+ * - the LINE cap appends the global notice only when `lineCapIsHard` is true — i.e. `maxLines`
72
+ * is the hard MAX_READ_LINES envelope (a defaulted or clamped-down window, or the whole-file
73
+ * read), NOT a deliberate small explicit `limit`. This distinguishes a *capped continuation*
74
+ * (notify so the model can page) from a *satisfied explicit window* (stay quiet).
75
+ *
76
+ * `startLine` is the 1-based file line of the first line in `content`; it is used only to put a
77
+ * concrete resume `offset` in the global notice. Pass `undefined` (head/tail paths, where the
78
+ * first emitted line is not line `startLine` of the file) to emit a generic notice instead.
79
+ */
80
+ private capReadContent;
81
+ /**
82
+ * GS2-36 — turn a fatal tool throw into a recoverable, action-oriented errored result.
83
+ *
84
+ * A filesystem tool that throws (a denied/symlinked-out path from validatePath, a missing file,
85
+ * EISDIR, permission-denied, a directory-not-empty refusal, …) otherwise propagates to
86
+ * GthAgentRunner as a fatal `Stream processing failed` and crashes the whole turn. The house
87
+ * convention (AGENTS.md: a tool result must never abort a run; the write_file precedent in
88
+ * `5892801a`) is to return the failure to the model as a plain string it can act on. This wraps
89
+ * that string in a uniform `Error <action>: <message>` shape — the underlying fs/validation
90
+ * message (ENOENT / EISDIR / EACCES / "Access denied - …") is itself the actionable detail, and
91
+ * the deliberately-thrown logical messages (edit_file no-match/ambiguous, "Directory not empty",
92
+ * "Cannot delete protected directory") are already phrased as recovery hints. EXT-14 containment
93
+ * is preserved everywhere: validatePath runs first and throws on a symlink-out BEFORE any fs
94
+ * mutation, so the mutation never happens — the denial is merely surfaced as a result here.
95
+ */
96
+ private recoverableError;
34
97
  private createReadBinaryTool;
35
98
  private createTools;
36
99
  }