omp-fabric 1.25.7 → 1.25.9

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 (69) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +1 -1
  3. package/dist/audit/projection.d.ts.map +1 -1
  4. package/dist/chunks/{chunk-HAH64YUG.js → chunk-2C5YN36Y.js} +2 -2
  5. package/dist/chunks/chunk-2C5YN36Y.js.map +7 -0
  6. package/dist/chunks/{chunk-3BS4RMF4.js → chunk-AZBJNZS4.js} +2 -2
  7. package/dist/chunks/{chunk-EZRC24CX.js → chunk-BMSAIMFB.js} +2 -2
  8. package/dist/chunks/{chunk-63VIZJGS.js → chunk-BWLZ6VDQ.js} +2 -2
  9. package/dist/chunks/{chunk-BQG4LFAC.js → chunk-D55BFSFK.js} +2 -2
  10. package/dist/chunks/{chunk-WUPYPFAC.js → chunk-E3KTE736.js} +3 -3
  11. package/dist/chunks/{chunk-JBKYNJFN.js → chunk-FL4A542C.js} +2 -1
  12. package/dist/chunks/chunk-FL4A542C.js.map +7 -0
  13. package/dist/chunks/{chunk-REHGQCXU.js → chunk-J2BDKPO4.js} +4 -4
  14. package/dist/chunks/{chunk-3KORI7FQ.js → chunk-KLWNXXEI.js} +2 -2
  15. package/dist/chunks/{chunk-XLINRLLP.js → chunk-PIW2DEO2.js} +4 -4
  16. package/dist/chunks/{chunk-H3KRHDDF.js → chunk-QJKOPPW2.js} +2 -2
  17. package/dist/chunks/{chunk-MR5C7U5H.js → chunk-UKB5RJDP.js} +3 -3
  18. package/dist/chunks/chunk-UKB5RJDP.js.map +7 -0
  19. package/dist/chunks/{chunk-GPJV2FSP.js → chunk-WX6C7N3W.js} +2 -2
  20. package/dist/chunks/{chunk-ABBGHQVX.js → chunk-YAI5SCIE.js} +2 -2
  21. package/dist/chunks/{chunk-G3ELO3QC.js → chunk-Z6TTRT6Q.js} +2 -2
  22. package/dist/compaction/hook.js +3 -3
  23. package/dist/compaction/lcm-runtime.js +4 -4
  24. package/dist/core/action-registry.js +2 -2
  25. package/dist/core/system-guidance.d.ts +3 -0
  26. package/dist/core/system-guidance.d.ts.map +1 -1
  27. package/dist/entropy/index.js +5 -5
  28. package/dist/fabric-runtime-state.js +67 -28
  29. package/dist/fabric-runtime-state.js.map +2 -2
  30. package/dist/host-compatibility.d.ts +1 -1
  31. package/dist/index.js +19 -14
  32. package/dist/index.js.map +2 -2
  33. package/dist/memory/discovery.js +4 -4
  34. package/dist/memory/normalize.js +3 -3
  35. package/dist/memory/search.js +4 -4
  36. package/dist/providers/memory-provider.js +6 -6
  37. package/dist/providers/omp-tools-provider.d.ts.map +1 -1
  38. package/dist/residency/host.js +6 -6
  39. package/dist/residency/omp-entry.js +6 -6
  40. package/dist/runtime/core-override-guest-types.js +1 -1
  41. package/dist/runtime/guest-types.d.ts +2 -2
  42. package/dist/runtime/guest-types.d.ts.map +1 -1
  43. package/dist/runtime/guest-types.js +1 -1
  44. package/dist/runtime/node-process-runtime.js +1 -1
  45. package/dist/runtime/quickjs-runtime.d.ts +1 -1
  46. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  47. package/dist/runtime/quickjs-runtime.js +1 -1
  48. package/dist/speculation/guest-args.d.ts.map +1 -1
  49. package/dist/speculation/scanner.js +2 -1
  50. package/dist/speculation/scanner.js.map +2 -2
  51. package/docs/audit-trace.md +1 -1
  52. package/docs/configuration.md +1 -1
  53. package/package.json +4 -4
  54. package/skills/fabric-exec/SKILL.md +4 -4
  55. package/dist/chunks/chunk-HAH64YUG.js.map +0 -7
  56. package/dist/chunks/chunk-JBKYNJFN.js.map +0 -7
  57. package/dist/chunks/chunk-MR5C7U5H.js.map +0 -7
  58. /package/dist/chunks/{chunk-3BS4RMF4.js.map → chunk-AZBJNZS4.js.map} +0 -0
  59. /package/dist/chunks/{chunk-EZRC24CX.js.map → chunk-BMSAIMFB.js.map} +0 -0
  60. /package/dist/chunks/{chunk-63VIZJGS.js.map → chunk-BWLZ6VDQ.js.map} +0 -0
  61. /package/dist/chunks/{chunk-BQG4LFAC.js.map → chunk-D55BFSFK.js.map} +0 -0
  62. /package/dist/chunks/{chunk-WUPYPFAC.js.map → chunk-E3KTE736.js.map} +0 -0
  63. /package/dist/chunks/{chunk-REHGQCXU.js.map → chunk-J2BDKPO4.js.map} +0 -0
  64. /package/dist/chunks/{chunk-3KORI7FQ.js.map → chunk-KLWNXXEI.js.map} +0 -0
  65. /package/dist/chunks/{chunk-XLINRLLP.js.map → chunk-PIW2DEO2.js.map} +0 -0
  66. /package/dist/chunks/{chunk-H3KRHDDF.js.map → chunk-QJKOPPW2.js.map} +0 -0
  67. /package/dist/chunks/{chunk-GPJV2FSP.js.map → chunk-WX6C7N3W.js.map} +0 -0
  68. /package/dist/chunks/{chunk-ABBGHQVX.js.map → chunk-YAI5SCIE.js.map} +0 -0
  69. /package/dist/chunks/{chunk-G3ELO3QC.js.map → chunk-Z6TTRT6Q.js.map} +0 -0
@@ -11,8 +11,8 @@ import {
11
11
  MemoryProvider,
12
12
  actionArgNormalizer,
13
13
  uniqueDeclaredKeyForSpelling
14
- } from "./chunks/chunk-REHGQCXU.js";
15
- import "./chunks/chunk-63VIZJGS.js";
14
+ } from "./chunks/chunk-J2BDKPO4.js";
15
+ import "./chunks/chunk-BWLZ6VDQ.js";
16
16
  import "./chunks/chunk-U5FYOMG5.js";
17
17
  import {
18
18
  ApprovalController,
@@ -33,7 +33,7 @@ import {
33
33
  repairFabricGuestCode,
34
34
  resolveFabricIdentity,
35
35
  runFabricHandoffAtBoundary
36
- } from "./chunks/chunk-XLINRLLP.js";
36
+ } from "./chunks/chunk-PIW2DEO2.js";
37
37
  import "./chunks/chunk-7VIQNUPS.js";
38
38
  import {
39
39
  AgentTranscriptReader,
@@ -50,7 +50,7 @@ import {
50
50
  repairActionName,
51
51
  setActiveCompiledSurface,
52
52
  setActiveRepairCompiler
53
- } from "./chunks/chunk-3KORI7FQ.js";
53
+ } from "./chunks/chunk-KLWNXXEI.js";
54
54
  import {
55
55
  formatFabricEffectConflict
56
56
  } from "./chunks/chunk-LMAVZN7J.js";
@@ -63,8 +63,8 @@ import {
63
63
  withExclusiveFileLockAsync
64
64
  } from "./chunks/chunk-YWEXP724.js";
65
65
  import "./chunks/chunk-4A4MVZQW.js";
66
- import "./chunks/chunk-GPJV2FSP.js";
67
- import "./chunks/chunk-G3ELO3QC.js";
66
+ import "./chunks/chunk-WX6C7N3W.js";
67
+ import "./chunks/chunk-Z6TTRT6Q.js";
68
68
  import {
69
69
  FABRIC_COMPONENT_DISCOVER_EVENT,
70
70
  FABRIC_PROVIDER_DISCOVER_EVENT,
@@ -94,7 +94,7 @@ import {
94
94
  resolveAgentCwd,
95
95
  resolveOmpBinary,
96
96
  validateAgentCwdRequest
97
- } from "./chunks/chunk-ABBGHQVX.js";
97
+ } from "./chunks/chunk-YAI5SCIE.js";
98
98
  import "./chunks/chunk-VPPIJRNZ.js";
99
99
  import {
100
100
  executeFile,
@@ -104,7 +104,7 @@ import {
104
104
  import "./chunks/chunk-CT2AJ2UI.js";
105
105
  import {
106
106
  checkedHandoffCompaction
107
- } from "./chunks/chunk-H3KRHDDF.js";
107
+ } from "./chunks/chunk-QJKOPPW2.js";
108
108
  import {
109
109
  DEFAULT_FABRIC_CONFIG,
110
110
  FUZZY_RESOLUTION_MARKERS,
@@ -154,7 +154,7 @@ import {
154
154
  import {
155
155
  estimateTokens,
156
156
  fabricExecTitleHintCached
157
- } from "./chunks/chunk-BQG4LFAC.js";
157
+ } from "./chunks/chunk-D55BFSFK.js";
158
158
  import "./chunks/chunk-3J7BKUNG.js";
159
159
  import {
160
160
  MAX_COMPACTION_INSTRUCTIONS_CHARS,
@@ -164,12 +164,12 @@ import {
164
164
  encodeCompactionRequest
165
165
  } from "./chunks/chunk-QSRTEINF.js";
166
166
  import "./chunks/chunk-UAP6IQIR.js";
167
- import "./chunks/chunk-3BS4RMF4.js";
167
+ import "./chunks/chunk-AZBJNZS4.js";
168
168
  import {
169
169
  FabricExecutionTraceRecorder,
170
170
  FabricTraceSafeError,
171
171
  executionOutcomeFromError
172
- } from "./chunks/chunk-JBKYNJFN.js";
172
+ } from "./chunks/chunk-FL4A542C.js";
173
173
  import {
174
174
  OMP_GUEST_TOOL_NAMES,
175
175
  OMP_GUEST_TOOL_NAME_SET,
@@ -10773,6 +10773,10 @@ var GREP_SKIP_PROPERTY = {
10773
10773
  type: "number",
10774
10774
  description: "Files to skip before collecting results \u2014 paginate when a search hit the file limit"
10775
10775
  };
10776
+ var GREP_LIMIT_PROPERTY = {
10777
+ type: "number",
10778
+ description: "Cap on total surfaced matches \u2014 applied on top of the per-file and file-window caps, never above them"
10779
+ };
10776
10780
  var GITIGNORE_PROPERTY = {
10777
10781
  type: "boolean",
10778
10782
  description: "Respect gitignore rules; pass false to search ignored files such as build output or .env"
@@ -10793,7 +10797,7 @@ var withExtraProperties = (document, extras) => {
10793
10797
  if (Object.keys(additions).length === 0) return document;
10794
10798
  return { ...schema, properties: { ...properties, ...additions } };
10795
10799
  };
10796
- var withGrepSkipSchema = (document) => withExtraProperties(document, { skip: GREP_SKIP_PROPERTY, gitignore: GITIGNORE_PROPERTY });
10800
+ var withGrepOptionSchema = (document) => withExtraProperties(document, { skip: GREP_SKIP_PROPERTY, limit: GREP_LIMIT_PROPERTY, gitignore: GITIGNORE_PROPERTY });
10797
10801
  var withFindFilterSchema = (document) => withExtraProperties(document, { gitignore: GITIGNORE_PROPERTY, hidden: HIDDEN_PROPERTY });
10798
10802
  var grepSession = (cwd, context) => ({
10799
10803
  cwd,
@@ -10804,12 +10808,12 @@ var grepSession = (cwd, context) => ({
10804
10808
  context === void 0 ? void 0 : { "grep.contextBefore": Math.max(0, Math.floor(context)), "grep.contextAfter": Math.max(0, Math.floor(context)) }
10805
10809
  )
10806
10810
  });
10807
- var createGrepDefinitionWithSkip = (cwd) => {
10811
+ var createGrepDefinitionWithOptions = (cwd) => {
10808
10812
  const legacy = createGrepToolDefinition(cwd);
10809
10813
  const defaultTool = new GrepTool(grepSession(cwd));
10810
10814
  return {
10811
10815
  ...legacy,
10812
- parameters: withGrepSkipSchema(legacy.parameters),
10816
+ parameters: withGrepOptionSchema(legacy.parameters),
10813
10817
  execute: (toolCallId, params, signal, onUpdate, context) => {
10814
10818
  const record2 = asRecord(params) ?? {};
10815
10819
  const rawPattern = typeof record2.pattern === "string" ? record2.pattern : "";
@@ -10817,7 +10821,8 @@ var createGrepDefinitionWithSkip = (cwd) => {
10817
10821
  const glob = typeof record2.glob === "string" ? record2.glob : void 0;
10818
10822
  const contextLines = typeof record2.context === "number" ? record2.context : void 0;
10819
10823
  const skip = typeof record2.skip === "number" ? record2.skip : void 0;
10820
- const tool = contextLines === void 0 ? defaultTool : new GrepTool(grepSession(cwd, contextLines));
10824
+ const limit = typeof record2.limit === "number" ? record2.limit : void 0;
10825
+ const tool = contextLines === void 0 && limit === void 0 ? defaultTool : new GrepTool(grepSession(cwd, contextLines), limit === void 0 ? void 0 : { totalMatchLimit: limit });
10821
10826
  return tool.execute(
10822
10827
  toolCallId,
10823
10828
  {
@@ -10977,6 +10982,7 @@ var readTruncationMeta = (details) => {
10977
10982
  };
10978
10983
  var UNREADABLE_READ_NOTE = /^\[Cannot read (?:binary file '|\.[^\s:]+ file: )/;
10979
10984
  var REPEAT_READ_HINT_PATTERN = /\n\n\[You have received this identical output \d+ times\. Re-reading '[\s\S]*?' will not change it — use a narrower selector \(path:A-B\), or proceed with the edit\.\]$/;
10985
+ var stripGrepPageCursor = (text) => text.replace(/\n*Showing files \d+-\d+ of [^\n]*\. Use skip=\d+ for the next page, or narrow paths\/pattern\.\n?/, "\n");
10980
10986
  var stripRepeatReadHint = (text) => text.endsWith("]") ? text.replace(REPEAT_READ_HINT_PATTERN, "") : text;
10981
10987
  var dropLeadingLines = (text, count) => {
10982
10988
  if (count <= 0) return text;
@@ -11036,8 +11042,19 @@ var unreadableReadMessage = (note, readPath) => {
11036
11042
  const remedy = target ? ` Read the bytes with omp.read("${target}:raw").` : "";
11037
11043
  return `omp.read returned no text content: ${note.trim()}${remedy}`;
11038
11044
  };
11039
- var restoreBashOutput = (artifactPath, maxChars, delivered, artifactElidedBytes) => {
11045
+ var artifactFailureClause = (artifactError) => typeof artifactError === "string" ? `the host failed to save it (artifact ${artifactError} failed)` : "the host failed to save it";
11046
+ var oversizedArtifactBytes = (artifactPath, maxChars) => {
11040
11047
  if (!artifactPath || maxChars <= 0) return void 0;
11048
+ try {
11049
+ const { size } = statSync4(artifactPath);
11050
+ return size > maxChars ? size : void 0;
11051
+ } catch {
11052
+ return void 0;
11053
+ }
11054
+ };
11055
+ var restoreBashOutput = (artifactPath, maxChars, delivered, artifactElidedBytes, artifactError) => {
11056
+ if (!artifactPath || maxChars <= 0) return void 0;
11057
+ if (artifactError !== void 0) return void 0;
11041
11058
  if (artifactElidedBytes !== void 0 && artifactElidedBytes > 0) return void 0;
11042
11059
  let size;
11043
11060
  try {
@@ -11067,15 +11084,24 @@ var withoutColumnLimit = (detailRecord, metaRecord) => {
11067
11084
  const { meta: _meta, ...remainingDetails } = detailRecord;
11068
11085
  return remainingDetails;
11069
11086
  };
11070
- var grepTruncationSignal = (details) => {
11087
+ var grepTruncationSignal = (details, requestedLimit) => {
11071
11088
  const record2 = asRecord(details);
11072
11089
  if (!record2 || record2.truncated !== true) return void 0;
11073
- const perFile = finiteNumber2(record2.perFileLimitReached);
11090
+ const reached = finiteNumber2(record2.perFileLimitReached);
11091
+ const askedFor = requestedLimit === void 0 ? void 0 : Math.max(1, Math.floor(requestedLimit));
11092
+ const totalLimit = reached !== void 0 && reached === askedFor ? reached : void 0;
11093
+ const perFile = totalLimit === void 0 ? reached : void 0;
11074
11094
  const maxColumn = finiteNumber2(asRecord(asRecord(asRecord(record2.meta)?.limits)?.columnTruncated)?.maxColumn);
11075
11095
  const fileCount = finiteNumber2(record2.fileCount);
11076
11096
  const reasons = [];
11077
11097
  const notes = [];
11078
11098
  let continuation = null;
11099
+ if (totalLimit !== void 0) {
11100
+ reasons.push("matchLimit");
11101
+ notes.push(
11102
+ `Only the first ${totalLimit} matches are returned because limit=${totalLimit}; raise limit or narrow the pattern.`
11103
+ );
11104
+ }
11079
11105
  if (perFile !== void 0) {
11080
11106
  reasons.push("matchLimit");
11081
11107
  notes.push(
@@ -11101,6 +11127,7 @@ var grepTruncationSignal = (details) => {
11101
11127
  reasons,
11102
11128
  ...finiteNumber2(record2.matchCount) === void 0 ? {} : { matchCount: record2.matchCount },
11103
11129
  ...fileCount === void 0 ? {} : { fileCount },
11130
+ ...totalLimit === void 0 ? {} : { matchLimit: totalLimit },
11104
11131
  ...perFile === void 0 ? {} : { perFileMatchLimit: perFile },
11105
11132
  ...maxColumn === void 0 ? {} : { maxColumn },
11106
11133
  continue: continuation,
@@ -11205,8 +11232,10 @@ var normalizeResult = (name, result, artifactPaths, appendReadNewline = true, ex
11205
11232
  return readSignal?.signal ? appendTruncationMarker(body, readSignal.signal) : body;
11206
11233
  }
11207
11234
  if (name === "grep") {
11208
- const signal = grepTruncationSignal(result.details);
11209
- return signal ? appendTruncationMarker(text, signal) : text;
11235
+ const signal = grepTruncationSignal(result.details, extras?.grepLimit);
11236
+ if (!signal) return text;
11237
+ const body = signal.matchLimit === void 0 ? text : stripGrepPageCursor(text);
11238
+ return appendTruncationMarker(body, signal);
11210
11239
  }
11211
11240
  if (name === "find") {
11212
11241
  const signal = findTruncationSignal(result.details);
@@ -11226,7 +11255,8 @@ var normalizeResult = (name, result, artifactPaths, appendReadNewline = true, ex
11226
11255
  if (truncation && typeof truncation === "object" && !Array.isArray(truncation)) {
11227
11256
  const truncationRecord = truncation;
11228
11257
  const artifactId = truncationRecord.artifactId;
11229
- const fullOutputPath = typeof artifactId === "string" ? artifactPaths?.get(artifactId) ?? extras?.bashArtifactPath : extras?.bashArtifactPath;
11258
+ const artifactError = metaRecord?.artifactError;
11259
+ const fullOutputPath = artifactError !== void 0 ? void 0 : typeof artifactId === "string" ? artifactPaths?.get(artifactId) ?? extras?.bashArtifactPath : extras?.bashArtifactPath;
11230
11260
  const artifactElidedBytes = finiteNumber2(truncationRecord.artifactElidedBytes);
11231
11261
  details = {
11232
11262
  ...detailRecord,
@@ -11246,7 +11276,7 @@ var normalizeResult = (name, result, artifactPaths, appendReadNewline = true, ex
11246
11276
  ...columnCap === void 0 ? {} : { maxColumn: columnCap },
11247
11277
  fullOutputPath: fullOutputPath ?? null,
11248
11278
  continue: null,
11249
- note: fullOutputPath ? artifactElidedBytes === void 0 ? `Output exceeded the host bash result budget; the complete stream is on disk at ${fullOutputPath}.` : `Output exceeded the host bash result budget, and the on-disk artifact at ${fullOutputPath} is itself capped: ${artifactElidedBytes} bytes were dropped from its middle. Only the artifact's head and tail survive; set the host's \`tools.artifactMaxBytes\` to \`0\` for an uncapped file.` : "Output exceeded the host bash result budget and no full-output artifact was retained."
11279
+ note: artifactError !== void 0 ? `Output exceeded the host bash result budget and ${artifactFailureClause(artifactError)}, so the full output is unrecoverable.` : fullOutputPath ? artifactElidedBytes === void 0 ? `Output exceeded the host bash result budget; the complete stream is on disk at ${fullOutputPath}.` : `Output exceeded the host bash result budget, and the on-disk artifact at ${fullOutputPath} is itself capped: ${artifactElidedBytes} bytes were dropped from its middle. Only the artifact's head and tail survive; set the host's \`tools.artifactMaxBytes\` to \`0\` for an uncapped file.` : "Output exceeded the host bash result budget and no full-output artifact was retained."
11250
11280
  });
11251
11281
  }
11252
11282
  } else {
@@ -11255,26 +11285,31 @@ var normalizeResult = (name, result, artifactPaths, appendReadNewline = true, ex
11255
11285
  const columnElidedBytes = finiteNumber2(
11256
11286
  asRecord(asRecord(metaRecord?.limits)?.columnTruncated)?.artifactElidedBytes
11257
11287
  );
11288
+ const artifactError = metaRecord?.artifactError;
11289
+ const maxChars = extras?.maxResultChars ?? 0;
11258
11290
  const restored = restoreBashOutput(
11259
11291
  extras?.bashArtifactPath,
11260
- extras?.maxResultChars ?? 0,
11292
+ maxChars,
11261
11293
  text,
11262
- columnElidedBytes
11294
+ columnElidedBytes,
11295
+ artifactError
11263
11296
  );
11264
11297
  if (restored === void 0) {
11298
+ const fullOutputPath = artifactError === void 0 ? extras?.bashArtifactPath : void 0;
11299
+ const oversizedBytes = columnElidedBytes === void 0 ? oversizedArtifactBytes(fullOutputPath, maxChars) : void 0;
11265
11300
  details = {
11266
11301
  ...detailRecord,
11267
11302
  columnTruncated: { maxColumn: columnCap, restored: false },
11268
- ...extras?.bashArtifactPath ? { fullOutputPath: extras.bashArtifactPath } : {}
11303
+ ...fullOutputPath ? { fullOutputPath } : {}
11269
11304
  };
11270
11305
  output = appendTruncationMarker(text, {
11271
11306
  tool: name,
11272
11307
  partial: true,
11273
11308
  reasons: ["columnLimit"],
11274
11309
  maxColumn: columnCap,
11275
- fullOutputPath: extras?.bashArtifactPath ?? null,
11310
+ fullOutputPath: fullOutputPath ?? null,
11276
11311
  continue: null,
11277
- note: columnElidedBytes !== void 0 && columnElidedBytes > 0 ? `Output lines were cut at ${columnCap} bytes by the host bash executor, and the artifact is itself capped: ${columnElidedBytes} bytes were dropped from its middle, so the full output is unrecoverable. Set the host's \`tools.artifactMaxBytes\` to \`0\` for an uncapped file.` : `Output lines were cut at ${columnCap} bytes by the host bash executor, which reads global settings and ignores this session's tools.outputMaxColumns.`
11312
+ note: artifactError !== void 0 ? `Output lines were cut at ${columnCap} bytes by the host bash executor and ${artifactFailureClause(artifactError)}, so the full output is unrecoverable.` : columnElidedBytes !== void 0 && columnElidedBytes > 0 ? `Output lines were cut at ${columnCap} bytes by the host bash executor, and the artifact is itself capped: ${columnElidedBytes} bytes were dropped from its middle, so the full output is unrecoverable. Set the host's \`tools.artifactMaxBytes\` to \`0\` for an uncapped file.` : oversizedBytes !== void 0 && fullOutputPath ? `Output lines were cut at ${columnCap} bytes by the host bash executor; the complete output is on disk at ${fullOutputPath}, ${oversizedBytes} bytes that exceed this session's \`executor.maxNestedResultChars\` (${maxChars}), so it was not inlined here.` : `Output lines were cut at ${columnCap} bytes by the host bash executor, which reads global settings and ignores this session's tools.outputMaxColumns.`
11278
11313
  });
11279
11314
  } else {
11280
11315
  output = restored;
@@ -11321,7 +11356,7 @@ var OmpToolsProvider = class _OmpToolsProvider {
11321
11356
  bash: createNativeBashToolDefinition(cwd, this.#artifacts, this.#identity, this.#autoBackground),
11322
11357
  edit: createNativeReplaceEditToolDefinition(cwd, this.#identity),
11323
11358
  write: createPreviewWriteToolDefinition(cwd, createNativeSession(cwd, { identity: this.#identity })),
11324
- grep: createGrepDefinitionWithSkip(cwd),
11359
+ grep: createGrepDefinitionWithOptions(cwd),
11325
11360
  find: createFindDefinitionWithFilters(cwd),
11326
11361
  ls: createLsToolDefinition(cwd),
11327
11362
  wait: createNativeWaitToolDefinition(cwd, this.#identity, this.#autoBackground)
@@ -11550,6 +11585,10 @@ var OmpToolsProvider = class _OmpToolsProvider {
11550
11585
  // provider boundary; replacement is idempotent when middleware already ran.
11551
11586
  async #normalizeResult(name, result, args, context, appendReadNewline = true, artifacts) {
11552
11587
  const extras = {};
11588
+ if (name === "grep") {
11589
+ const limit = finiteNumber2(args.limit);
11590
+ if (limit !== void 0) extras.grepLimit = limit;
11591
+ }
11553
11592
  if (isOmpShellToolName(name)) {
11554
11593
  const artifactPath = artifacts?.at(-1);
11555
11594
  if (artifactPath !== void 0) extras.bashArtifactPath = artifactPath;