@osovv/vv-opencode 0.25.4 → 0.25.5

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 (32) hide show
  1. package/README.md +2 -2
  2. package/dist/commands/patch-provider.d.ts +11 -1
  3. package/dist/commands/patch-provider.js +12 -2
  4. package/dist/commands/patch-provider.js.map +1 -1
  5. package/dist/lib/vvoc-config.js +5 -5
  6. package/dist/lib/vvoc-config.js.map +1 -1
  7. package/dist/plugins/hashline-edit/constants.js +8 -4
  8. package/dist/plugins/hashline-edit/constants.js.map +1 -1
  9. package/dist/plugins/hashline-edit/edit-operations.js +94 -33
  10. package/dist/plugins/hashline-edit/edit-operations.js.map +1 -1
  11. package/dist/plugins/hashline-edit/edit-text-normalization.js +3 -2
  12. package/dist/plugins/hashline-edit/edit-text-normalization.js.map +1 -1
  13. package/dist/plugins/hashline-edit/hash-computation.d.ts +2 -0
  14. package/dist/plugins/hashline-edit/hash-computation.js +21 -4
  15. package/dist/plugins/hashline-edit/hash-computation.js.map +1 -1
  16. package/dist/plugins/hashline-edit/index.js +139 -28
  17. package/dist/plugins/hashline-edit/index.js.map +1 -1
  18. package/dist/plugins/hashline-edit/normalize-edits.js +4 -4
  19. package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -1
  20. package/dist/plugins/hashline-edit/tool-description.d.ts +1 -1
  21. package/dist/plugins/hashline-edit/tool-description.js +8 -4
  22. package/dist/plugins/hashline-edit/tool-description.js.map +1 -1
  23. package/dist/plugins/hashline-edit/types.d.ts +1 -1
  24. package/dist/plugins/hashline-edit/validation.d.ts +2 -0
  25. package/dist/plugins/hashline-edit/validation.js +58 -25
  26. package/dist/plugins/hashline-edit/validation.js.map +1 -1
  27. package/dist/plugins/system-context-injection/index.js +3 -2
  28. package/dist/plugins/system-context-injection/index.js.map +1 -1
  29. package/package.json +1 -1
  30. package/schemas/vvoc/v1.json +1 -1
  31. package/schemas/vvoc/v2.json +1 -1
  32. package/schemas/vvoc/v3.json +1 -1
@@ -1,8 +1,8 @@
1
1
  // FILE: src/plugins/hashline-edit/hash-computation.ts
2
- // VERSION: 0.1.0
2
+ // VERSION: 0.2.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Compute stable short line hashes used by hashline read output and edit anchors.
5
- // SCOPE: Current and legacy line hash computation plus formatting helpers for rendered hashline rows.
4
+ // PURPOSE: Compute stable short line hashes and context-anchored hashes used by hashline read output and edit anchors.
5
+ // SCOPE: Current and legacy line hash computation, context-anchored hash computation, plus formatting helpers for rendered hashline rows.
6
6
  // DEPENDS: [src/plugins/hashline-edit/constants.ts]
7
7
  // LINKS: [M-PLUGIN-HASHLINE-EDIT]
8
8
  // ROLE: RUNTIME
@@ -12,10 +12,17 @@
12
12
  // START_MODULE_MAP
13
13
  // computeLineHash - Compute the current two-character hash for a line using trailing-whitespace-insensitive content.
14
14
  // computeLegacyLineHash - Compute the previous whitespace-insensitive hash used for compatibility with earlier anchors.
15
- // formatHashLine - Render a `line#hash|content` row for read-output enhancement.
15
+ // computeAnchorHash - Compute a two-character context-anchored hash from surrounding lines for collision-resistant references.
16
+ // formatHashLine - Render a `line#hash|content` row (backward-compatible short format).
17
+ // formatHashAnchoredLine - Render a `line#hash#anchor|content` row with context-anchored hash.
16
18
  // END_MODULE_MAP
19
+ //
20
+ // START_CHANGE_SUMMARY
21
+ // LAST_CHANGE: [v0.2.0 - Added context-anchored hash computation to improve collision resistance; updated read output to emit anchor hashes via formatHashAnchoredLine.]
22
+ // END_CHANGE_SUMMARY
17
23
  import { HASHLINE_DICT } from "./constants.js";
18
24
  const RE_SIGNIFICANT = /[\p{L}\p{N}]/u;
25
+ const RS = "\u241E";
19
26
  function computeNormalizedLineHash(lineNumber, normalizedContent) {
20
27
  const seed = RE_SIGNIFICANT.test(normalizedContent) ? 0 : lineNumber;
21
28
  const hash = Bun.hash.xxHash32(normalizedContent, seed);
@@ -28,7 +35,17 @@ export function computeLineHash(lineNumber, content) {
28
35
  export function computeLegacyLineHash(lineNumber, content) {
29
36
  return computeNormalizedLineHash(lineNumber, content.replace(/\r/g, "").replace(/\s+/g, ""));
30
37
  }
38
+ export function computeAnchorHash(lineNumber, prevContent, content, nextContent) {
39
+ const clean = (s) => (s ?? "").replace(/\r/g, "").trimEnd();
40
+ const context = `${clean(prevContent)}${RS}${clean(content)}${RS}${clean(nextContent)}`;
41
+ const hash = Bun.hash.xxHash32(context, lineNumber);
42
+ const index = hash % 256;
43
+ return HASHLINE_DICT[index] ?? HASHLINE_DICT[0];
44
+ }
31
45
  export function formatHashLine(lineNumber, content) {
32
46
  return `${lineNumber}#${computeLineHash(lineNumber, content)}|${content}`;
33
47
  }
48
+ export function formatHashAnchoredLine(lineNumber, content, prevContent, nextContent) {
49
+ return `${lineNumber}#${computeLineHash(lineNumber, content)}#${computeAnchorHash(lineNumber, prevContent, content, nextContent)}|${content}`;
50
+ }
34
51
  //# sourceMappingURL=hash-computation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash-computation.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/hash-computation.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,iBAAiB;AACjB,wBAAwB;AACxB,6FAA6F;AAC7F,wGAAwG;AACxG,sDAAsD;AACtD,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,uHAAuH;AACvH,0HAA0H;AAC1H,mFAAmF;AACnF,iBAAiB;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,cAAc,GAAG,eAAe,CAAC;AAEvC,SAAS,yBAAyB,CAAC,UAAkB,EAAE,iBAAyB;IAC9E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACrE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC;IACzB,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,OAAe;IACjE,OAAO,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,OAAe;IACvE,OAAO,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,OAAe;IAChE,OAAO,GAAG,UAAU,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"hash-computation.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/hash-computation.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,iBAAiB;AACjB,wBAAwB;AACxB,yHAAyH;AACzH,4IAA4I;AAC5I,sDAAsD;AACtD,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,uHAAuH;AACvH,0HAA0H;AAC1H,iIAAiI;AACjI,0FAA0F;AAC1F,iGAAiG;AACjG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,2KAA2K;AAC3K,qBAAqB;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,cAAc,GAAG,eAAe,CAAC;AACvC,MAAM,EAAE,GAAG,QAAQ,CAAC;AAEpB,SAAS,yBAAyB,CAAC,UAAkB,EAAE,iBAAyB;IAC9E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACrE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC;IACzB,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,OAAe;IACjE,OAAO,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,OAAe;IACvE,OAAO,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,WAA+B,EAC/B,OAAe,EACf,WAA+B;IAE/B,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACxF,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;IACxF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC;IACzB,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,OAAe;IAChE,OAAO,GAAG,UAAU,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,OAAe,EACf,WAA+B,EAC/B,WAA+B;IAE/B,OAAO,GAAG,UAAU,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;AAChJ,CAAC"}
@@ -1,8 +1,8 @@
1
1
  // FILE: src/plugins/hashline-edit/index.ts
2
- // VERSION: 0.1.0
2
+ // VERSION: 0.4.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Override OpenCode's default `edit` tool with a hash-anchored edit implementation and hash-aware read output.
5
- // SCOPE: Hashline-backed edit tool registration, read-output transformation, anchor validation, file mutation execution, and success metadata emission.
4
+ // PURPOSE: Override OpenCode's default `edit` tool with a hash-anchored edit implementation and hash-aware read output with context-anchored hash references.
5
+ // SCOPE: Hashline-backed edit tool registration, read-output transformation with anchor hashes, anchor validation, file mutation execution, and success metadata emission.
6
6
  // DEPENDS: [@opencode-ai/plugin, src/plugins/hashline-edit/edit-operations.ts, src/plugins/hashline-edit/file-text-canonicalization.ts, src/plugins/hashline-edit/hash-computation.ts, src/plugins/hashline-edit/normalize-edits.ts, src/plugins/hashline-edit/tool-description.ts, src/plugins/hashline-edit/validation.ts]
7
7
  // LINKS: [M-PLUGIN-HASHLINE-EDIT]
8
8
  // ROLE: RUNTIME
@@ -14,12 +14,14 @@
14
14
  // END_MODULE_MAP
15
15
  //
16
16
  // START_CHANGE_SUMMARY
17
- // LAST_CHANGE: [v0.1.0 - Added a default-on hash-anchored edit override that rewrites Read output to `line#hash|content` and rejects stale anchors on edit.]
17
+ // LAST_CHANGE: [v0.4.0 - Read source snapshots are loaded only for eligible read output and only trusted when visible rows still match the file.]
18
+ // LAST_CHANGE: [v0.3.0 - Read output now uses the full file snapshot when available so partial and truncated reads emit edit-valid context anchors.]
19
+ // LAST_CHANGE: [v0.2.0 - Read output now emits context-anchored hashes (line#hash#anchor|content) for collision-resistant edit anchors.]
18
20
  // END_CHANGE_SUMMARY
19
21
  import { tool } from "@opencode-ai/plugin";
20
22
  import { applyHashlineEditsWithReport } from "./edit-operations.js";
21
23
  import { canonicalizeFileText, restoreFileText } from "./file-text-canonicalization.js";
22
- import { computeLineHash } from "./hash-computation.js";
24
+ import { computeAnchorHash, computeLineHash } from "./hash-computation.js";
23
25
  import { normalizeHashlineEdits } from "./normalize-edits.js";
24
26
  import { HASHLINE_EDIT_DESCRIPTION } from "./tool-description.js";
25
27
  import { HashlineMismatchError } from "./validation.js";
@@ -75,34 +77,135 @@ function isTextFileOutput(output) {
75
77
  const firstLine = output.split("\n")[0] ?? "";
76
78
  return COLON_READ_LINE_PATTERN.test(firstLine) || PIPE_READ_LINE_PATTERN.test(firstLine);
77
79
  }
78
- function parseReadLine(line) {
80
+ function isHashlineEligibleReadOutput(output) {
81
+ if (!output) {
82
+ return false;
83
+ }
84
+ const lines = output.split("\n");
85
+ const contentStart = lines.findIndex((line) => line === CONTENT_OPEN_TAG || line.startsWith(CONTENT_OPEN_TAG));
86
+ const contentEnd = lines.indexOf(CONTENT_CLOSE_TAG);
87
+ const fileStart = lines.findIndex((line) => line === FILE_OPEN_TAG || line.startsWith(FILE_OPEN_TAG));
88
+ const fileEnd = lines.indexOf(FILE_CLOSE_TAG);
89
+ const blockStart = contentStart !== -1 ? contentStart : fileStart;
90
+ const blockEnd = contentStart !== -1 ? contentEnd : fileEnd;
91
+ const openTag = contentStart !== -1 ? CONTENT_OPEN_TAG : FILE_OPEN_TAG;
92
+ if (blockStart !== -1 && blockEnd !== -1 && blockEnd > blockStart) {
93
+ const openLine = lines[blockStart] ?? "";
94
+ const inlineFirst = openLine.startsWith(openTag) && openLine !== openTag ? openLine.slice(openTag.length) : null;
95
+ const firstFileLine = inlineFirst ?? lines[blockStart + 1] ?? "";
96
+ return isTextFileOutput(firstFileLine);
97
+ }
98
+ return isTextFileOutput(lines[0] ?? "");
99
+ }
100
+ function readArgFilePath(args) {
101
+ if (!args || typeof args !== "object") {
102
+ return undefined;
103
+ }
104
+ const readArgs = args;
105
+ for (const candidate of [readArgs.filePath, readArgs.path, readArgs.file]) {
106
+ if (typeof candidate === "string" && candidate.trim().length > 0) {
107
+ return candidate;
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ async function readSourceLines(args) {
113
+ const filePath = readArgFilePath(args);
114
+ if (!filePath) {
115
+ return undefined;
116
+ }
117
+ try {
118
+ const file = Bun.file(filePath);
119
+ if (!(await file.exists())) {
120
+ return undefined;
121
+ }
122
+ const rawContent = Buffer.from(await file.arrayBuffer()).toString("utf8");
123
+ const envelope = canonicalizeFileText(rawContent);
124
+ return envelope.content.length === 0 ? [] : envelope.content.split("\n");
125
+ }
126
+ catch {
127
+ return undefined;
128
+ }
129
+ }
130
+ function parseReadLineParsed(line) {
79
131
  const colonMatch = COLON_READ_LINE_PATTERN.exec(line);
80
132
  if (colonMatch) {
133
+ const content = colonMatch[2] ?? "";
81
134
  return {
82
135
  lineNumber: Number.parseInt(colonMatch[1] ?? "0", 10),
83
- content: colonMatch[2] ?? "",
136
+ content,
137
+ isTruncated: content.endsWith(OPENCODE_LINE_TRUNCATION_SUFFIX),
84
138
  };
85
139
  }
86
140
  const pipeMatch = PIPE_READ_LINE_PATTERN.exec(line);
87
141
  if (pipeMatch) {
142
+ const content = pipeMatch[2] ?? "";
88
143
  return {
89
144
  lineNumber: Number.parseInt(pipeMatch[1] ?? "0", 10),
90
- content: pipeMatch[2] ?? "",
145
+ content,
146
+ isTruncated: content.endsWith(OPENCODE_LINE_TRUNCATION_SUFFIX),
91
147
  };
92
148
  }
93
149
  return null;
94
150
  }
95
- function transformReadLine(line) {
96
- const parsed = parseReadLine(line);
97
- if (!parsed) {
98
- return line;
151
+ function sourceLineAt(sourceLines, lineNumber) {
152
+ if (!sourceLines || lineNumber < 1 || lineNumber > sourceLines.length) {
153
+ return undefined;
154
+ }
155
+ return sourceLines[lineNumber - 1];
156
+ }
157
+ function sourceMatchesVisibleRows(sourceLines, parsedLines) {
158
+ if (!sourceLines) {
159
+ return false;
160
+ }
161
+ for (const parsed of parsedLines) {
162
+ if (parsed.isTruncated) {
163
+ continue;
164
+ }
165
+ if (sourceLineAt(sourceLines, parsed.lineNumber) !== parsed.content) {
166
+ return false;
167
+ }
99
168
  }
100
- if (parsed.content.endsWith(OPENCODE_LINE_TRUNCATION_SUFFIX)) {
101
- return line;
169
+ return true;
170
+ }
171
+ function formatParsedReadLine(parsed, prevContent, currentContent, nextContent) {
172
+ return `${parsed.lineNumber}#${computeLineHash(parsed.lineNumber, currentContent)}#${computeAnchorHash(parsed.lineNumber, prevContent, currentContent, nextContent)}|${parsed.content}`;
173
+ }
174
+ function formatReadLines(parsedLines, rawLines, sourceLines) {
175
+ const result = [];
176
+ let parsedIndex = 0;
177
+ for (let i = 0; i < rawLines.length; i += 1) {
178
+ if (parsedIndex >= parsedLines.length) {
179
+ result.push(...rawLines.slice(i));
180
+ break;
181
+ }
182
+ const parsed = parsedLines[parsedIndex];
183
+ if (i !== parsedIndex || !parsed) {
184
+ result.push(...rawLines.slice(i));
185
+ break;
186
+ }
187
+ if (parsed.isTruncated) {
188
+ result.push(rawLines[i]);
189
+ parsedIndex += 1;
190
+ continue;
191
+ }
192
+ const currentContent = sourceLineAt(sourceLines, parsed.lineNumber) ?? parsed.content;
193
+ const prevContent = sourceLines
194
+ ? sourceLineAt(sourceLines, parsed.lineNumber - 1)
195
+ : parsedIndex > 0
196
+ ? parsedLines[parsedIndex - 1]?.content
197
+ : undefined;
198
+ const nextContent = sourceLines
199
+ ? sourceLineAt(sourceLines, parsed.lineNumber + 1)
200
+ : parsedIndex + 1 < parsedLines.length
201
+ ? parsedLines[parsedIndex + 1]?.content
202
+ : undefined;
203
+ result.push(formatParsedReadLine(parsed, prevContent, currentContent, nextContent));
204
+ parsedIndex += 1;
102
205
  }
103
- return `${parsed.lineNumber}#${computeLineHash(parsed.lineNumber, parsed.content)}|${parsed.content}`;
206
+ return result;
104
207
  }
105
- function transformReadOutput(output) {
208
+ function transformReadOutput(output, sourceLines) {
106
209
  if (!output) {
107
210
  return output;
108
211
  }
@@ -123,14 +226,15 @@ function transformReadOutput(output) {
123
226
  if (!isTextFileOutput(fileLines[0] ?? "")) {
124
227
  return output;
125
228
  }
126
- const result = [];
229
+ const parsedLines = [];
127
230
  for (const line of fileLines) {
128
- if (!parseReadLine(line)) {
129
- result.push(...fileLines.slice(result.length));
231
+ const parsed = parseReadLineParsed(line);
232
+ if (!parsed) {
130
233
  break;
131
234
  }
132
- result.push(transformReadLine(line));
235
+ parsedLines.push(parsed);
133
236
  }
237
+ const result = formatReadLines(parsedLines, fileLines, sourceMatchesVisibleRows(sourceLines, parsedLines) ? sourceLines : undefined);
134
238
  const prefixLines = inlineFirst !== null
135
239
  ? [...lines.slice(0, blockStart), openTag]
136
240
  : lines.slice(0, blockStart + 1);
@@ -139,14 +243,15 @@ function transformReadOutput(output) {
139
243
  if (!isTextFileOutput(lines[0] ?? "")) {
140
244
  return output;
141
245
  }
142
- const result = [];
246
+ const parsedLines = [];
143
247
  for (const line of lines) {
144
- if (!parseReadLine(line)) {
145
- result.push(...lines.slice(result.length));
248
+ const parsed = parseReadLineParsed(line);
249
+ if (!parsed) {
146
250
  break;
147
251
  }
148
- result.push(transformReadLine(line));
252
+ parsedLines.push(parsed);
149
253
  }
254
+ const result = formatReadLines(parsedLines, lines, sourceMatchesVisibleRows(sourceLines, parsedLines) ? sourceLines : undefined);
150
255
  return result.join("\n");
151
256
  }
152
257
  async function executeHashlineEdit(args, context) {
@@ -207,7 +312,7 @@ async function executeHashlineEdit(args, context) {
207
312
  catch (error) {
208
313
  const message = error instanceof Error ? error.message : String(error);
209
314
  if (error instanceof HashlineMismatchError) {
210
- return `Error: hash mismatch - ${message}\nTip: reuse LINE#ID entries from the latest read output or mismatch snippet, or batch related edits in one call.`;
315
+ return `Error: hash mismatch - ${message}\nTip: reuse LINE#ID#ANCHOR entries from the latest read output or mismatch snippet, or batch related edits in one call.`;
211
316
  }
212
317
  return `Error: ${message}`;
213
318
  }
@@ -218,7 +323,10 @@ export const HashlineEditPlugin = async () => {
218
323
  if (!isReadTool(input.tool) || typeof output.output !== "string") {
219
324
  return;
220
325
  }
221
- output.output = transformReadOutput(output.output);
326
+ if (!isHashlineEligibleReadOutput(output.output)) {
327
+ return;
328
+ }
329
+ output.output = transformReadOutput(output.output, await readSourceLines(input.args));
222
330
  },
223
331
  tool: {
224
332
  edit: tool({
@@ -230,8 +338,11 @@ export const HashlineEditPlugin = async () => {
230
338
  edits: z
231
339
  .array(z.object({
232
340
  op: z.enum(["replace", "append", "prepend"]),
233
- pos: z.string().optional().describe("Primary anchor in LINE#HASH format"),
234
- end: z.string().optional().describe("Inclusive range end in LINE#HASH format"),
341
+ pos: z.string().optional().describe("Primary anchor in LINE#HASH#ANCHOR format"),
342
+ end: z
343
+ .string()
344
+ .optional()
345
+ .describe("Inclusive range end in LINE#HASH#ANCHOR format"),
235
346
  lines: z
236
347
  .union([z.array(z.string()), z.string(), z.null()])
237
348
  .describe("Replacement or inserted lines as plain text content"),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,iBAAiB;AACjB,wBAAwB;AACxB,0HAA0H;AAC1H,0JAA0J;AAC1J,+TAA+T;AAC/T,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,yGAAyG;AACzG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,+JAA+J;AAC/J,qBAAqB;AAErB,OAAO,EAAiC,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAwB,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,MAAM,gBAAgB,GAAG,WAAW,CAAC;AACrC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,+BAA+B,GAAG,oCAAoC,CAAC;AAC7E,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AACpD,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AASpD,SAAS,wBAAwB,CAAC,KAAqB;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAChB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CACpF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,aAAqB,EAAE,YAAoB;IACvE,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAElE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAO/B;IACC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpB,KAAK,EAAE,IAAI,CAAC,QAAQ;QACpB,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;YAC7E,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,aAAa;gBAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;aACzB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;YACrD,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;YACpD,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,UAAU,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;AACxG,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CACzE,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CACnE,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,QAAQ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,MAAM,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;IAEvE,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,WAAW,GACf,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/F,MAAM,SAAS,GACb,WAAW,KAAK,IAAI;YAClB,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/C,MAAM;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,WAAW,GACf,WAAW,KAAK,IAAI;YAClB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,MAAM;QACR,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAsB,EAAE,OAAoB;IAC7E,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACtD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,kDAAkD,CAAC;QAC5D,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,wDAAwD,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,kDAAkD,CAAC;QAC5D,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,0BAA0B,QAAQ,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,0BAA0B,QAAQ,EAAE,CAAC;YAC9C,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,wBAAwB,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,4BAA4B,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,CAAC;QAEhD,IAAI,mBAAmB,KAAK,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,UAAU,GAAG,sBAAsB,QAAQ,yCAAyC,CAAC;YACzF,IAAI,WAAW,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC9B,UAAU,IAAI,iBAAiB,WAAW,CAAC,SAAS,6EAA6E,CAAC;YACpI,CAAC;YACD,OAAO,UAAU,UAAU,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAExC,IAAI,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACtC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxE,sBAAsB,CAAC;YACrB,OAAO;YACP,QAAQ,EAAE,aAAa;YACvB,aAAa,EAAE,WAAW,CAAC,OAAO;YAClC,YAAY,EAAE,mBAAmB;YACjC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;SACjD,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,MAAM,KAAK,QAAQ;YAClC,CAAC,CAAC,SAAS,QAAQ,OAAO,MAAM,EAAE;YAClC,CAAC,CAAC,WAAW,aAAa,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAC3C,OAAO,0BAA0B,OAAO,mHAAmH,CAAC;QAC9J,CAAC;QACD,OAAO,UAAU,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAW,KAAK,IAAI,EAAE;IACnD,OAAO;QACL,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjE,OAAO;YACT,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC;gBACT,WAAW,EAAE,yBAAyB;gBACtC,IAAI,EAAE;oBACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;oBAClE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;oBAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;oBACjF,KAAK,EAAE,CAAC;yBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;wBACP,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;wBAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;wBACzE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;wBAC9E,KAAK,EAAE,CAAC;6BACL,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;6BAClD,QAAQ,CAAC,qDAAqD,CAAC;qBACnE,CAAC,CACH;yBACA,QAAQ,CAAC,oDAAoD,CAAC;iBAClE;gBACD,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;aAC/D,CAAC;SACH;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // FILE: src/plugins/hashline-edit/normalize-edits.ts
2
- // VERSION: 0.1.0
2
+ // VERSION: 0.2.0
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Validate and normalize raw hashline tool arguments into strongly-typed edit operations.
5
5
  // SCOPE: Raw edit input shape, anchor trimming, required-field validation, and replace/append/prepend normalization.
@@ -24,6 +24,9 @@ function requireLines(edit, index) {
24
24
  if (edit.lines === undefined) {
25
25
  throw new Error(`Edit ${index}: lines is required for ${edit.op ?? "unknown"}`);
26
26
  }
27
+ if (edit.lines === null) {
28
+ return [];
29
+ }
27
30
  return edit.lines;
28
31
  }
29
32
  function requireAnchor(anchor, index, op) {
@@ -52,9 +55,6 @@ function normalizeInsertEdit(edit, index, op) {
52
55
  const end = normalizeAnchor(edit.end);
53
56
  const anchor = pos ?? end;
54
57
  const lines = requireLines(edit, index);
55
- if (lines === null) {
56
- throw new Error(`Edit ${index}: ${op} does not support lines=null`);
57
- }
58
58
  const normalized = {
59
59
  op,
60
60
  lines,
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-edits.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/normalize-edits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"normalize-edits.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/normalize-edits.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const HASHLINE_EDIT_DESCRIPTION = "Edit files using exact hash-anchored line references from the latest Read output.\n\nWorkflow:\n1. Read the file and copy anchors in `{line}#{hash}` form from rows like `42#VK|content`.\n2. Submit one `edit` call per file with the smallest possible set of replace/append/prepend operations.\n3. If the same file needs another call after a successful edit, re-read it first.\n\nRules:\n- Every anchored edit must use exact current `{line}#{hash}` values from the latest Read output.\n- All edits in one call target the ORIGINAL file snapshot; do not adjust line numbers for earlier edits in the same batch.\n- `replace` with `pos` only replaces one line.\n- `replace` with `pos` and `end` replaces the inclusive range `pos..end`.\n- `append` inserts after the anchor, or at EOF when no anchor is provided.\n- `prepend` inserts before the anchor, or at BOF when no anchor is provided.\n- `lines: null` or `lines: []` with `replace` deletes the targeted line or range.\n- `lines` must contain plain replacement content only, not copied `line#hash|content` rows.\n- Prefer one operation per logical mutation site instead of a single oversized replace.\n\nRecovery:\n- If you get a hash mismatch error, copy the updated anchors shown in that error or re-read the file before retrying.";
1
+ export declare const HASHLINE_EDIT_DESCRIPTION = "Edit files using exact hash-anchored line references from the latest Read output.\n\nWorkflow:\n1. Read the file and copy anchors in `{line}#{hash}#{anchor}` form from rows like `42#VK#AB|content` (backward-compatible `{line}#{hash}` anchors also accepted).\n2. Submit one `edit` call per file with the smallest possible set of replace/append/prepend operations.\n3. If the same file needs another call after a successful edit, re-read it first.\n\nRules:\n- Every anchored edit must use exact current `{line}#{hash}` or `{line}#{hash}#{anchor}` values from the latest Read output.\n- All edits in one call target the ORIGINAL file snapshot; do not adjust line numbers for earlier edits in the same batch.\n- `replace` with `pos` only replaces one line.\n- `replace` with `pos` and `end` replaces the inclusive range `pos..end`.\n- `append` inserts after the anchor, or at EOF when no anchor is provided.\n- `prepend` inserts before the anchor, or at BOF when no anchor is provided.\n- `lines: null` or `lines: []` with `replace` deletes the targeted line or range.\n- `lines` must contain plain replacement content only, not copied `line#hash#anchor|content` rows.\n- Prefer one operation per logical mutation site instead of a single oversized replace.\n\nRecovery:\n- If you get a hash mismatch error, copy the updated anchors shown in that error or re-read the file before retrying.";
@@ -1,5 +1,5 @@
1
1
  // FILE: src/plugins/hashline-edit/tool-description.ts
2
- // VERSION: 0.1.0
2
+ // VERSION: 0.3.0
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Provide the LLM-facing tool description for the hash-anchored edit override.
5
5
  // SCOPE: Stable instructions for read-then-edit workflow, anchor usage, operation choice, and stale-anchor recovery.
@@ -12,22 +12,26 @@
12
12
  // START_MODULE_MAP
13
13
  // HASHLINE_EDIT_DESCRIPTION - Canonical LLM-facing description for the hashline-backed `edit` tool.
14
14
  // END_MODULE_MAP
15
+ //
16
+ // START_CHANGE_SUMMARY
17
+ // LAST_CHANGE: [v0.3.0 - Updated copied-row warning to include context-anchored hashline row format.]
18
+ // END_CHANGE_SUMMARY
15
19
  export const HASHLINE_EDIT_DESCRIPTION = `Edit files using exact hash-anchored line references from the latest Read output.
16
20
 
17
21
  Workflow:
18
- 1. Read the file and copy anchors in \`{line}#{hash}\` form from rows like \`42#VK|content\`.
22
+ 1. Read the file and copy anchors in \`{line}#{hash}#{anchor}\` form from rows like \`42#VK#AB|content\` (backward-compatible \`{line}#{hash}\` anchors also accepted).
19
23
  2. Submit one \`edit\` call per file with the smallest possible set of replace/append/prepend operations.
20
24
  3. If the same file needs another call after a successful edit, re-read it first.
21
25
 
22
26
  Rules:
23
- - Every anchored edit must use exact current \`{line}#{hash}\` values from the latest Read output.
27
+ - Every anchored edit must use exact current \`{line}#{hash}\` or \`{line}#{hash}#{anchor}\` values from the latest Read output.
24
28
  - All edits in one call target the ORIGINAL file snapshot; do not adjust line numbers for earlier edits in the same batch.
25
29
  - \`replace\` with \`pos\` only replaces one line.
26
30
  - \`replace\` with \`pos\` and \`end\` replaces the inclusive range \`pos..end\`.
27
31
  - \`append\` inserts after the anchor, or at EOF when no anchor is provided.
28
32
  - \`prepend\` inserts before the anchor, or at BOF when no anchor is provided.
29
33
  - \`lines: null\` or \`lines: []\` with \`replace\` deletes the targeted line or range.
30
- - \`lines\` must contain plain replacement content only, not copied \`line#hash|content\` rows.
34
+ - \`lines\` must contain plain replacement content only, not copied \`line#hash#anchor|content\` rows.
31
35
  - Prefer one operation per logical mutation site instead of a single oversized replace.
32
36
 
33
37
  Recovery:
@@ -1 +1 @@
1
- {"version":3,"file":"tool-description.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/tool-description.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,iBAAiB;AACjB,wBAAwB;AACxB,0FAA0F;AAC1F,uHAAuH;AACvH,gBAAgB;AAChB,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,sGAAsG;AACtG,iBAAiB;AAEjB,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;sHAmB6E,CAAC"}
1
+ {"version":3,"file":"tool-description.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/tool-description.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,iBAAiB;AACjB,wBAAwB;AACxB,0FAA0F;AAC1F,uHAAuH;AACvH,gBAAgB;AAChB,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,sGAAsG;AACtG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,wGAAwG;AACxG,qBAAqB;AAErB,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;sHAmB6E,CAAC"}
@@ -2,7 +2,7 @@ export interface ReplaceEdit {
2
2
  op: "replace";
3
3
  pos: string;
4
4
  end?: string;
5
- lines: string | string[] | null;
5
+ lines: string | string[];
6
6
  }
7
7
  export interface AppendEdit {
8
8
  op: "append";
@@ -1,10 +1,12 @@
1
1
  export interface LineRef {
2
2
  line: number;
3
3
  hash: string;
4
+ anchorHash?: string;
4
5
  }
5
6
  interface HashMismatch {
6
7
  line: number;
7
8
  expected: string;
9
+ expectedAnchor?: string;
8
10
  }
9
11
  export declare function normalizeLineRef(ref: string): string;
10
12
  export declare function parseLineRef(ref: string): LineRef;