@osovv/vv-opencode 1.2.6 → 1.2.7
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.
- package/CHANGELOG.md +8 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.d.ts +2 -2
- package/dist/plugins/hashline-edit/edit-operation-primitives.js +37 -37
- package/dist/plugins/hashline-edit/edit-operation-primitives.js.map +1 -1
- package/dist/plugins/hashline-edit/edit-operations.d.ts +1 -0
- package/dist/plugins/hashline-edit/edit-operations.js +17 -10
- package/dist/plugins/hashline-edit/edit-operations.js.map +1 -1
- package/dist/plugins/hashline-edit/edit-text-normalization.d.ts +27 -4
- package/dist/plugins/hashline-edit/edit-text-normalization.js +45 -56
- package/dist/plugins/hashline-edit/edit-text-normalization.js.map +1 -1
- package/dist/plugins/hashline-edit/index.js +61 -4
- package/dist/plugins/hashline-edit/index.js.map +1 -1
- package/dist/plugins/hashline-edit/normalize-edits.js +37 -5
- package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -1
- package/dist/plugins/hashline-edit/tool-description.d.ts +1 -1
- package/dist/plugins/hashline-edit/tool-description.js +16 -11
- package/dist/plugins/hashline-edit/tool-description.js.map +1 -1
- package/package.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.d.ts +0 -1
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js +0 -188
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## <small>1.2.7 (2026-08-14)</small>
|
|
2
|
+
|
|
3
|
+
### Summary
|
|
4
|
+
|
|
5
|
+
Hashline Edit now applies edit payloads literally, removing the silent autocorrect heuristics that could lose or duplicate lines; ambiguous payloads such as blank entries or entries containing embedded newlines are rejected fail-closed instead of being guessed at, while exact duplicate echoes are trimmed and reported as visible warnings. End-of-file appends no longer introduce a phantom blank line, and every successful edit returns a bounded diff with added/removed line counts and the first changed line, making it easier to confirm edits match intent before continuing.
|
|
6
|
+
|
|
7
|
+
* feat(hashline-edit): apply edit payloads literally and report bounded post-edit diffs ([5da05e6](https://github.com/osovv/vv-opencode/commit/5da05e6))
|
|
8
|
+
|
|
1
9
|
## <small>1.2.6 (2026-08-13)</small>
|
|
2
10
|
|
|
3
11
|
### Summary
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
interface EditApplyOptions {
|
|
1
|
+
export interface EditApplyOptions {
|
|
2
2
|
skipValidation?: boolean;
|
|
3
|
+
onWarning?: (message: string) => void;
|
|
3
4
|
}
|
|
4
5
|
export declare function applySetLine(lines: string[], anchor: string, newText: string | string[] | null, options?: EditApplyOptions): string[];
|
|
5
6
|
export declare function applyReplaceLines(lines: string[], startAnchor: string, endAnchor: string, newText: string | string[] | null, options?: EditApplyOptions): string[];
|
|
@@ -7,4 +8,3 @@ export declare function applyInsertAfter(lines: string[], anchor: string, text:
|
|
|
7
8
|
export declare function applyInsertBefore(lines: string[], anchor: string, text: string | string[], options?: EditApplyOptions): string[];
|
|
8
9
|
export declare function applyAppend(lines: string[], text: string | string[]): string[];
|
|
9
10
|
export declare function applyPrepend(lines: string[], text: string | string[]): string[];
|
|
10
|
-
export {};
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/edit-operation-primitives.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.2.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Apply validated hashline edit operations to an in-memory file snapshot one mutation at a time.
|
|
5
|
-
// SCOPE: Single-line replace, range replace, anchored insert-before/after, and BOF/EOF insert helpers.
|
|
6
|
-
// DEPENDS: [src/plugins/hashline-edit/
|
|
4
|
+
// PURPOSE: Apply validated hashline edit operations literally to an in-memory file snapshot one mutation at a time.
|
|
5
|
+
// SCOPE: Single-line replace, range replace, anchored insert-before/after with exact-match echo trimming, and BOF/EOF insert helpers that preserve trailing-newline sentinels.
|
|
6
|
+
// DEPENDS: [src/plugins/hashline-edit/edit-text-normalization.ts, src/plugins/hashline-edit/validation.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
13
|
+
// EditApplyOptions - Optional validation skip and warning collector for primitive apply calls.
|
|
14
|
+
// applySetLine - Replace or delete a single anchored line literally.
|
|
15
|
+
// applyReplaceLines - Replace or delete an inclusive anchored line range literally, trimming only exact boundary echoes.
|
|
16
|
+
// applyInsertAfter - Insert lines after an anchored line, trimming only an exact anchor echo.
|
|
17
|
+
// applyInsertBefore - Insert lines before an anchored line, trimming only an exact anchor echo.
|
|
18
|
+
// applyAppend - Insert lines at EOF without creating a phantom blank line before the trailing newline.
|
|
18
19
|
// applyPrepend - Insert lines at BOF, creating content for an empty file.
|
|
19
20
|
// END_MODULE_MAP
|
|
20
21
|
//
|
|
21
22
|
// START_CHANGE_SUMMARY
|
|
22
|
-
// LAST_CHANGE: [v0.
|
|
23
|
+
// LAST_CHANGE: [v0.2.0 - Removed autocorrect and indent restoration, switched echo trimming to exact-match with warnings, and fixed EOF append inserting a phantom blank line before the trailing newline.]
|
|
23
24
|
// END_CHANGE_SUMMARY
|
|
24
|
-
import {
|
|
25
|
-
import { restoreLeadingIndent, stripInsertAnchorEcho, stripInsertBeforeEcho, stripRangeBoundaryEcho, toNewLines, } from "./edit-text-normalization.js";
|
|
25
|
+
import { stripExactBoundaryEchoes, stripExactInsertBeforeEcho, stripExactInsertEcho, toNewLines, } from "./edit-text-normalization.js";
|
|
26
26
|
import { parseLineRef, validateLineRef } from "./validation.js";
|
|
27
27
|
function shouldValidate(options) {
|
|
28
28
|
return options?.skipValidation !== true;
|
|
@@ -33,15 +33,7 @@ export function applySetLine(lines, anchor, newText, options) {
|
|
|
33
33
|
}
|
|
34
34
|
const { line } = parseLineRef(anchor);
|
|
35
35
|
const result = [...lines];
|
|
36
|
-
const
|
|
37
|
-
const normalized = newText === null ? [] : toNewLines(newText);
|
|
38
|
-
const corrected = autocorrectReplacementLines([originalLine], normalized);
|
|
39
|
-
const replacement = corrected.map((entry, index) => {
|
|
40
|
-
if (index !== 0) {
|
|
41
|
-
return entry;
|
|
42
|
-
}
|
|
43
|
-
return restoreLeadingIndent(originalLine, entry);
|
|
44
|
-
});
|
|
36
|
+
const replacement = newText === null ? [] : toNewLines(newText);
|
|
45
37
|
if (replacement.length > 1) {
|
|
46
38
|
throw new Error("applySetLine: replace is for single-line replacement only. " +
|
|
47
39
|
`Removing 1 line but inserting ${replacement.length} lines. Use applyReplaceLines (replace_range) for multi-line replacement.`);
|
|
@@ -60,17 +52,13 @@ export function applyReplaceLines(lines, startAnchor, endAnchor, newText, option
|
|
|
60
52
|
throw new Error(`Invalid range: start line ${startLine} cannot be greater than end line ${endLine}`);
|
|
61
53
|
}
|
|
62
54
|
const result = [...lines];
|
|
63
|
-
const originalRange = lines.slice(startLine - 1, endLine);
|
|
64
55
|
const normalized = newText === null ? [] : toNewLines(newText);
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return restoreLeadingIndent(lines[startLine - 1] ?? "", entry);
|
|
72
|
-
});
|
|
73
|
-
result.splice(startLine - 1, endLine - startLine + 1, ...restored);
|
|
56
|
+
const trimmed = stripExactBoundaryEchoes(lines, startLine, endLine, normalized);
|
|
57
|
+
const dropped = trimmed.droppedLeading + trimmed.droppedTrailing;
|
|
58
|
+
if (dropped > 0) {
|
|
59
|
+
options?.onWarning?.(`replace_range lines ${startLine}-${endLine}: dropped ${dropped} exact boundary echo line(s) duplicating surviving neighbors; the rest of the payload was applied literally`);
|
|
60
|
+
}
|
|
61
|
+
result.splice(startLine - 1, endLine - startLine + 1, ...trimmed.lines);
|
|
74
62
|
return result;
|
|
75
63
|
}
|
|
76
64
|
export function applyInsertAfter(lines, anchor, text, options) {
|
|
@@ -79,11 +67,14 @@ export function applyInsertAfter(lines, anchor, text, options) {
|
|
|
79
67
|
}
|
|
80
68
|
const { line } = parseLineRef(anchor);
|
|
81
69
|
const result = [...lines];
|
|
82
|
-
const
|
|
83
|
-
if (
|
|
70
|
+
const trimmed = stripExactInsertEcho(lines[line - 1] ?? "", toNewLines(text));
|
|
71
|
+
if (trimmed.stripped > 0) {
|
|
72
|
+
options?.onWarning?.(`append at line ${line}: dropped payload line identical to the anchor line`);
|
|
73
|
+
}
|
|
74
|
+
if (trimmed.lines.length === 0) {
|
|
84
75
|
throw new Error(`append (anchored) requires non-empty text for ${anchor}`);
|
|
85
76
|
}
|
|
86
|
-
result.splice(line, 0, ...
|
|
77
|
+
result.splice(line, 0, ...trimmed.lines);
|
|
87
78
|
return result;
|
|
88
79
|
}
|
|
89
80
|
export function applyInsertBefore(lines, anchor, text, options) {
|
|
@@ -92,11 +83,14 @@ export function applyInsertBefore(lines, anchor, text, options) {
|
|
|
92
83
|
}
|
|
93
84
|
const { line } = parseLineRef(anchor);
|
|
94
85
|
const result = [...lines];
|
|
95
|
-
const
|
|
96
|
-
if (
|
|
86
|
+
const trimmed = stripExactInsertBeforeEcho(lines[line - 1] ?? "", toNewLines(text));
|
|
87
|
+
if (trimmed.stripped > 0) {
|
|
88
|
+
options?.onWarning?.(`prepend at line ${line}: dropped payload line identical to the anchor line`);
|
|
89
|
+
}
|
|
90
|
+
if (trimmed.lines.length === 0) {
|
|
97
91
|
throw new Error(`prepend (anchored) requires non-empty text for ${anchor}`);
|
|
98
92
|
}
|
|
99
|
-
result.splice(line - 1, 0, ...
|
|
93
|
+
result.splice(line - 1, 0, ...trimmed.lines);
|
|
100
94
|
return result;
|
|
101
95
|
}
|
|
102
96
|
export function applyAppend(lines, text) {
|
|
@@ -107,6 +101,12 @@ export function applyAppend(lines, text) {
|
|
|
107
101
|
if (lines.length === 1 && lines[0] === "") {
|
|
108
102
|
return [...normalized];
|
|
109
103
|
}
|
|
104
|
+
// A newline-terminated file splits into a trailing "" sentinel. Append
|
|
105
|
+
// before it so no phantom blank line is created and the final newline is
|
|
106
|
+
// preserved.
|
|
107
|
+
if (lines.length > 1 && lines[lines.length - 1] === "") {
|
|
108
|
+
return [...lines.slice(0, -1), ...normalized, ""];
|
|
109
|
+
}
|
|
110
110
|
return [...lines, ...normalized];
|
|
111
111
|
}
|
|
112
112
|
export function applyPrepend(lines, text) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-operation-primitives.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-operation-primitives.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"edit-operation-primitives.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-operation-primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/edit-operations.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.7.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Validate, order, deduplicate, and apply a batch of hashline edit operations against a file snapshot.
|
|
5
|
-
// SCOPE: Batch region computation, comprehensive conflict detection covering all mutation types, exact-edit deduplication, bottom-up application ordering,
|
|
4
|
+
// PURPOSE: Validate, order, deduplicate, and apply a batch of hashline edit operations literally against a file snapshot while collecting apply warnings.
|
|
5
|
+
// SCOPE: Batch region computation, comprehensive conflict detection covering all mutation types, exact-edit deduplication, bottom-up application ordering, no-op reporting, and warning aggregation.
|
|
6
6
|
// DEPENDS: [src/plugins/hashline-edit/edit-operation-primitives.ts, src/plugins/hashline-edit/types.ts, src/plugins/hashline-edit/validation.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
// HashlineApplyReport - Result shape returned after applying a batch of hashline edits.
|
|
14
|
-
// applyHashlineEditsWithReport - Validate and apply a batch of edits while reporting no-ops and
|
|
13
|
+
// HashlineApplyReport - Result shape returned after applying a batch of hashline edits, including apply warnings.
|
|
14
|
+
// applyHashlineEditsWithReport - Validate and apply a batch of edits literally while reporting no-ops, deduplicated operations, and echo-trim warnings.
|
|
15
15
|
// END_MODULE_MAP
|
|
16
16
|
//
|
|
17
17
|
// START_CHANGE_SUMMARY
|
|
18
|
-
// LAST_CHANGE: [v0.7.0 -
|
|
18
|
+
// LAST_CHANGE: [v0.7.0 - Application is literal: primitives receive a warning collector and HashlineApplyReport surfaces echo-trim warnings.]
|
|
19
19
|
// END_CHANGE_SUMMARY
|
|
20
20
|
import { applyAppend, applyInsertAfter, applyInsertBefore, applyPrepend, applyReplaceLines, applySetLine, } from "./edit-operation-primitives.js";
|
|
21
21
|
import { normalizeLineRef, parseLineRef, validateLineRefs } from "./validation.js";
|
|
@@ -167,6 +167,7 @@ export function applyHashlineEditsWithReport(content, edits) {
|
|
|
167
167
|
content,
|
|
168
168
|
noopEdits: 0,
|
|
169
169
|
deduplicatedEdits: 0,
|
|
170
|
+
warnings: [],
|
|
170
171
|
};
|
|
171
172
|
}
|
|
172
173
|
const dedupeResult = dedupeEdits(edits);
|
|
@@ -202,6 +203,11 @@ export function applyHashlineEditsWithReport(content, edits) {
|
|
|
202
203
|
})
|
|
203
204
|
.map((entry) => entry.edit);
|
|
204
205
|
let lines = content.length === 0 ? [] : content.split("\n");
|
|
206
|
+
const warnings = [];
|
|
207
|
+
const applyOptions = {
|
|
208
|
+
skipValidation: true,
|
|
209
|
+
onWarning: (message) => warnings.push(message),
|
|
210
|
+
};
|
|
205
211
|
const regions = computeEditRegions(sortedEdits);
|
|
206
212
|
validateBatchConflicts(regions);
|
|
207
213
|
const refs = collectLineRefs(sortedEdits);
|
|
@@ -211,19 +217,19 @@ export function applyHashlineEditsWithReport(content, edits) {
|
|
|
211
217
|
let next = lines;
|
|
212
218
|
switch (edit.op) {
|
|
213
219
|
case "replace_range":
|
|
214
|
-
next = applyReplaceLines(lines, edit.pos, edit.end, edit.lines,
|
|
220
|
+
next = applyReplaceLines(lines, edit.pos, edit.end, edit.lines, applyOptions);
|
|
215
221
|
break;
|
|
216
222
|
case "replace":
|
|
217
|
-
next = applySetLine(lines, edit.pos, edit.lines,
|
|
223
|
+
next = applySetLine(lines, edit.pos, edit.lines, applyOptions);
|
|
218
224
|
break;
|
|
219
225
|
case "append":
|
|
220
226
|
next = edit.pos
|
|
221
|
-
? applyInsertAfter(lines, edit.pos, edit.lines,
|
|
227
|
+
? applyInsertAfter(lines, edit.pos, edit.lines, applyOptions)
|
|
222
228
|
: applyAppend(lines, edit.lines);
|
|
223
229
|
break;
|
|
224
230
|
case "prepend":
|
|
225
231
|
next = edit.pos
|
|
226
|
-
? applyInsertBefore(lines, edit.pos, edit.lines,
|
|
232
|
+
? applyInsertBefore(lines, edit.pos, edit.lines, applyOptions)
|
|
227
233
|
: applyPrepend(lines, edit.lines);
|
|
228
234
|
break;
|
|
229
235
|
}
|
|
@@ -236,6 +242,7 @@ export function applyHashlineEditsWithReport(content, edits) {
|
|
|
236
242
|
return {
|
|
237
243
|
content: lines.join("\n"),
|
|
238
244
|
noopEdits,
|
|
245
|
+
warnings,
|
|
239
246
|
deduplicatedEdits: dedupeResult.deduplicatedEdits,
|
|
240
247
|
};
|
|
241
248
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-operations.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-operations.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"edit-operations.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
export declare function stripLinePrefixes(lines: string[]): string[];
|
|
2
2
|
export declare function toNewLines(input: string | string[]): string[];
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
export interface EchoTrimResult {
|
|
4
|
+
lines: string[];
|
|
5
|
+
stripped: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Remove a leading payload line that exactly duplicates the append anchor
|
|
9
|
+
* line. Only byte-identical echoes are trimmed; whitespace-differing lines
|
|
10
|
+
* are literal content and stay in the payload.
|
|
11
|
+
*/
|
|
12
|
+
export declare function stripExactInsertEcho(anchorLine: string, newLines: string[]): EchoTrimResult;
|
|
13
|
+
/**
|
|
14
|
+
* Remove a trailing payload line that exactly duplicates the prepend anchor
|
|
15
|
+
* line. Only byte-identical echoes are trimmed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripExactInsertBeforeEcho(anchorLine: string, newLines: string[]): EchoTrimResult;
|
|
18
|
+
export interface BoundaryEchoTrimResult {
|
|
19
|
+
lines: string[];
|
|
20
|
+
droppedLeading: number;
|
|
21
|
+
droppedTrailing: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Remove exact copies of the surviving neighbor lines from a replace payload
|
|
25
|
+
* that is longer than the replaced range. Payloads that are not longer than
|
|
26
|
+
* their range are returned untouched so intentional boundary content is
|
|
27
|
+
* never silently dropped.
|
|
28
|
+
*/
|
|
29
|
+
export declare function stripExactBoundaryEchoes(fileLines: string[], startLine: number, endLine: number, newLines: string[]): BoundaryEchoTrimResult;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/edit-text-normalization.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.5.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Normalize edit payload text so copied hashline rows and accidental diff markers do not corrupt replacements.
|
|
5
|
-
// SCOPE: Prefix stripping, line splitting,
|
|
4
|
+
// PURPOSE: Normalize edit payload text so copied hashline rows and accidental diff markers do not corrupt replacements, and trim only provably accidental echo lines.
|
|
5
|
+
// SCOPE: Prefix stripping, line splitting, exact-match insert echo trimming with reporting, and exact-match range-boundary echo trimming with reporting.
|
|
6
6
|
// DEPENDS: []
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -12,26 +12,18 @@
|
|
|
12
12
|
// START_MODULE_MAP
|
|
13
13
|
// stripLinePrefixes - Remove copied hashline or diff prefixes when most payload lines include them.
|
|
14
14
|
// toNewLines - Normalize string or string[] payloads into plain content lines.
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
15
|
+
// EchoTrimResult - Trimmed payload lines plus the number of exact echo lines removed.
|
|
16
|
+
// stripExactInsertEcho - Remove a leading payload line that exactly duplicates the append anchor line.
|
|
17
|
+
// stripExactInsertBeforeEcho - Remove a trailing payload line that exactly duplicates the prepend anchor line.
|
|
18
|
+
// BoundaryEchoTrimResult - Trimmed payload lines plus removed leading/trailing boundary echo counts.
|
|
19
|
+
// stripExactBoundaryEchoes - Remove exact copies of surviving neighbor lines from over-long replace payloads.
|
|
19
20
|
// END_MODULE_MAP
|
|
20
21
|
//
|
|
21
22
|
// START_CHANGE_SUMMARY
|
|
22
|
-
// LAST_CHANGE: [v0.
|
|
23
|
+
// LAST_CHANGE: [v0.5.0 - Replaced whitespace-insensitive autocorrect helpers with exact-match, reported echo trimming so valid payloads apply literally.]
|
|
23
24
|
// END_CHANGE_SUMMARY
|
|
24
25
|
const HASHLINE_PREFIX_RE = /^\s*(?:>>>|>>)?\s*\d+\s*#\s*[ZPMQVRWSNKTXJBYH]{2}(?:\s*#\s*[ZPMQVRWSNKTXJBYH]{2})?\|/;
|
|
25
26
|
const DIFF_PLUS_RE = /^[+](?![+])/;
|
|
26
|
-
function equalsIgnoringWhitespace(left, right) {
|
|
27
|
-
if (left === right) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
return left.replace(/\s+/g, "") === right.replace(/\s+/g, "");
|
|
31
|
-
}
|
|
32
|
-
function leadingWhitespace(text) {
|
|
33
|
-
return text.match(/^\s*/)?.[0] ?? "";
|
|
34
|
-
}
|
|
35
27
|
export function stripLinePrefixes(lines) {
|
|
36
28
|
let hashPrefixCount = 0;
|
|
37
29
|
let diffPlusCount = 0;
|
|
@@ -72,56 +64,53 @@ export function toNewLines(input) {
|
|
|
72
64
|
}
|
|
73
65
|
return stripLinePrefixes(input.split("\n"));
|
|
74
66
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
if (templateLine.trim() === line.trim()) {
|
|
87
|
-
return line;
|
|
88
|
-
}
|
|
89
|
-
return `${templateIndent}${line}`;
|
|
90
|
-
}
|
|
91
|
-
export function stripInsertAnchorEcho(anchorLine, newLines) {
|
|
92
|
-
if (newLines.length === 0) {
|
|
93
|
-
return newLines;
|
|
94
|
-
}
|
|
95
|
-
if (equalsIgnoringWhitespace(newLines[0] ?? "", anchorLine)) {
|
|
96
|
-
return newLines.slice(1);
|
|
97
|
-
}
|
|
98
|
-
return newLines;
|
|
67
|
+
/**
|
|
68
|
+
* Remove a leading payload line that exactly duplicates the append anchor
|
|
69
|
+
* line. Only byte-identical echoes are trimmed; whitespace-differing lines
|
|
70
|
+
* are literal content and stay in the payload.
|
|
71
|
+
*/
|
|
72
|
+
export function stripExactInsertEcho(anchorLine, newLines) {
|
|
73
|
+
if (newLines.length > 0 && newLines[0] === anchorLine) {
|
|
74
|
+
return { lines: newLines.slice(1), stripped: 1 };
|
|
75
|
+
}
|
|
76
|
+
return { lines: newLines, stripped: 0 };
|
|
99
77
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Remove a trailing payload line that exactly duplicates the prepend anchor
|
|
80
|
+
* line. Only byte-identical echoes are trimmed.
|
|
81
|
+
*/
|
|
82
|
+
export function stripExactInsertBeforeEcho(anchorLine, newLines) {
|
|
83
|
+
if (newLines.length > 0 && newLines[newLines.length - 1] === anchorLine) {
|
|
84
|
+
return { lines: newLines.slice(0, -1), stripped: 1 };
|
|
85
|
+
}
|
|
86
|
+
return { lines: newLines, stripped: 0 };
|
|
108
87
|
}
|
|
109
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Remove exact copies of the surviving neighbor lines from a replace payload
|
|
90
|
+
* that is longer than the replaced range. Payloads that are not longer than
|
|
91
|
+
* their range are returned untouched so intentional boundary content is
|
|
92
|
+
* never silently dropped.
|
|
93
|
+
*/
|
|
94
|
+
export function stripExactBoundaryEchoes(fileLines, startLine, endLine, newLines) {
|
|
110
95
|
const replacedCount = endLine - startLine + 1;
|
|
111
|
-
if (newLines.length <=
|
|
112
|
-
return newLines;
|
|
96
|
+
if (newLines.length <= replacedCount) {
|
|
97
|
+
return { lines: newLines, droppedLeading: 0, droppedTrailing: 0 };
|
|
113
98
|
}
|
|
114
99
|
let output = newLines;
|
|
100
|
+
let droppedLeading = 0;
|
|
101
|
+
let droppedTrailing = 0;
|
|
115
102
|
const beforeIndex = startLine - 2;
|
|
116
|
-
if (beforeIndex >= 0 && output[0] ===
|
|
103
|
+
if (beforeIndex >= 0 && output[0] === fileLines[beforeIndex]) {
|
|
117
104
|
output = output.slice(1);
|
|
105
|
+
droppedLeading = 1;
|
|
118
106
|
}
|
|
119
107
|
const afterIndex = endLine;
|
|
120
|
-
if (afterIndex <
|
|
108
|
+
if (afterIndex < fileLines.length &&
|
|
121
109
|
output.length > 0 &&
|
|
122
|
-
output[output.length - 1] ===
|
|
110
|
+
output[output.length - 1] === fileLines[afterIndex]) {
|
|
123
111
|
output = output.slice(0, -1);
|
|
112
|
+
droppedTrailing = 1;
|
|
124
113
|
}
|
|
125
|
-
return output;
|
|
114
|
+
return { lines: output, droppedLeading, droppedTrailing };
|
|
126
115
|
}
|
|
127
116
|
//# sourceMappingURL=edit-text-normalization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-text-normalization.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-text-normalization.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"edit-text-normalization.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/edit-text-normalization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/index.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.7.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
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.
|
|
5
|
+
// SCOPE: Hashline-backed edit tool registration, read-output transformation with anchor hashes, anchor validation, literal file mutation execution, bounded post-edit diff feedback, and success metadata emission.
|
|
6
6
|
// DEPENDS: [@opencode-ai/plugin, src/lib/config-layers.ts, src/lib/plugin-toggle-config.ts, 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,7 +14,7 @@
|
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [v0.
|
|
17
|
+
// LAST_CHANGE: [v0.7.0 - Successful edits now report line deltas, apply warnings, and a bounded diff in the tool output; application is literal.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
19
|
import { tool } from "@opencode-ai/plugin";
|
|
20
20
|
import { resolve } from "node:path";
|
|
@@ -51,6 +51,49 @@ function findFirstChangedLine(beforeContent, afterContent) {
|
|
|
51
51
|
}
|
|
52
52
|
return undefined;
|
|
53
53
|
}
|
|
54
|
+
const DIFF_CONTEXT_LINES = 2;
|
|
55
|
+
const DIFF_MAX_RENDERED_LINES = 40;
|
|
56
|
+
function summarizeEditDiff(beforeContent, afterContent) {
|
|
57
|
+
const before = beforeContent.length === 0 ? [] : beforeContent.split("\n");
|
|
58
|
+
const after = afterContent.length === 0 ? [] : afterContent.split("\n");
|
|
59
|
+
const minLen = Math.min(before.length, after.length);
|
|
60
|
+
let prefix = 0;
|
|
61
|
+
while (prefix < minLen && before[prefix] === after[prefix]) {
|
|
62
|
+
prefix += 1;
|
|
63
|
+
}
|
|
64
|
+
let suffix = 0;
|
|
65
|
+
while (suffix < minLen - prefix &&
|
|
66
|
+
before[before.length - 1 - suffix] === after[after.length - 1 - suffix]) {
|
|
67
|
+
suffix += 1;
|
|
68
|
+
}
|
|
69
|
+
const removed = before.slice(prefix, before.length - suffix);
|
|
70
|
+
const added = after.slice(prefix, after.length - suffix);
|
|
71
|
+
if (removed.length === 0 && added.length === 0) {
|
|
72
|
+
return { additions: 0, deletions: 0, rendered: [] };
|
|
73
|
+
}
|
|
74
|
+
const rendered = [`@@ changed lines ${prefix + 1} @@`];
|
|
75
|
+
const contextStart = Math.max(0, prefix - DIFF_CONTEXT_LINES);
|
|
76
|
+
for (let i = contextStart; i < prefix; i += 1) {
|
|
77
|
+
rendered.push(` ${before[i]}`);
|
|
78
|
+
}
|
|
79
|
+
for (const line of removed) {
|
|
80
|
+
rendered.push(`- ${line}`);
|
|
81
|
+
}
|
|
82
|
+
for (const line of added) {
|
|
83
|
+
rendered.push(`+ ${line}`);
|
|
84
|
+
}
|
|
85
|
+
const tailStart = before.length - suffix;
|
|
86
|
+
const contextEnd = Math.min(before.length, tailStart + DIFF_CONTEXT_LINES);
|
|
87
|
+
for (let i = tailStart; i < contextEnd; i += 1) {
|
|
88
|
+
rendered.push(` ${before[i]}`);
|
|
89
|
+
}
|
|
90
|
+
if (rendered.length > DIFF_MAX_RENDERED_LINES) {
|
|
91
|
+
const kept = rendered.slice(0, DIFF_MAX_RENDERED_LINES - 1);
|
|
92
|
+
kept.push(`… (${rendered.length - kept.length} more diff lines)`);
|
|
93
|
+
return { additions: added.length, deletions: removed.length, rendered: kept };
|
|
94
|
+
}
|
|
95
|
+
return { additions: added.length, deletions: removed.length, rendered };
|
|
96
|
+
}
|
|
54
97
|
function publishSuccessMetadata(args) {
|
|
55
98
|
args.context.metadata({
|
|
56
99
|
title: args.filePath,
|
|
@@ -315,7 +358,21 @@ async function executeHashlineEdit(args, context) {
|
|
|
315
358
|
noopEdits: applyResult.noopEdits,
|
|
316
359
|
deduplicatedEdits: applyResult.deduplicatedEdits,
|
|
317
360
|
});
|
|
318
|
-
|
|
361
|
+
const diffSummary = summarizeEditDiff(oldEnvelope.content, canonicalNewContent);
|
|
362
|
+
const firstChangedLine = findFirstChangedLine(oldEnvelope.content, canonicalNewContent);
|
|
363
|
+
const stats = `+${diffSummary.additions}/-${diffSummary.deletions}${firstChangedLine !== undefined ? `, first change line ${firstChangedLine}` : ""}`;
|
|
364
|
+
const headline = isMove
|
|
365
|
+
? `Moved ${filePath} to ${rename} (${stats})`
|
|
366
|
+
: `Updated ${effectivePath} (${stats})`;
|
|
367
|
+
const outputParts = [headline];
|
|
368
|
+
for (const warning of applyResult.warnings) {
|
|
369
|
+
outputParts.push(`Warning: ${warning}`);
|
|
370
|
+
}
|
|
371
|
+
if (applyResult.deduplicatedEdits > 0) {
|
|
372
|
+
outputParts.push(`Note: ${applyResult.deduplicatedEdits} duplicate edit(s) were applied only once.`);
|
|
373
|
+
}
|
|
374
|
+
outputParts.push(...diffSummary.rendered);
|
|
375
|
+
return outputParts.join("\n");
|
|
319
376
|
}
|
|
320
377
|
catch (error) {
|
|
321
378
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/normalize-edits.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.4.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Validate and normalize raw hashline tool arguments into strongly-typed edit operations.
|
|
5
|
-
// SCOPE: Raw edit input shape, anchor trimming, required-field validation, and replace/replace_range/append/prepend normalization.
|
|
5
|
+
// SCOPE: Raw edit input shape, anchor trimming, required-field validation, physical single-line payload enforcement, blank-payload rejection for replacements, and replace/replace_range/append/prepend normalization.
|
|
6
6
|
// DEPENDS: [src/plugins/hashline-edit/types.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// END_MODULE_MAP
|
|
16
16
|
//
|
|
17
17
|
// START_CHANGE_SUMMARY
|
|
18
|
-
// LAST_CHANGE: [v0.
|
|
18
|
+
// LAST_CHANGE: [v0.4.0 - Rejected embedded newlines inside array payload entries and blank-only replace/replace_range payloads with teaching errors.]
|
|
19
19
|
// END_CHANGE_SUMMARY
|
|
20
20
|
function normalizeAnchor(value) {
|
|
21
21
|
if (typeof value !== "string") {
|
|
@@ -45,10 +45,17 @@ function normalizeReplaceEdit(edit, index) {
|
|
|
45
45
|
throw new Error(`Edit ${index}: replace is for single-line replacement only. ` +
|
|
46
46
|
`You passed ${edit.lines.length} replacement lines. Use "replace_range" with pos + end for multi-line replacement.`);
|
|
47
47
|
}
|
|
48
|
+
const lines = requireLines(edit, index);
|
|
49
|
+
assertNonBlankReplacement(edit, index, lines);
|
|
50
|
+
if (typeof lines === "string" && (lines.includes("\n") || lines.includes("\r"))) {
|
|
51
|
+
throw new Error(`Edit ${index}: replace received a string payload with embedded newlines. ` +
|
|
52
|
+
'Use "replace_range" with pos + end for multi-line replacement.');
|
|
53
|
+
}
|
|
54
|
+
assertPhysicalLines(edit, index, lines);
|
|
48
55
|
return {
|
|
49
56
|
op: "replace",
|
|
50
57
|
pos,
|
|
51
|
-
lines
|
|
58
|
+
lines,
|
|
52
59
|
};
|
|
53
60
|
}
|
|
54
61
|
function normalizeReplaceRangeEdit(edit, index) {
|
|
@@ -57,11 +64,14 @@ function normalizeReplaceRangeEdit(edit, index) {
|
|
|
57
64
|
if (!pos || !end) {
|
|
58
65
|
throw new Error(`Edit ${index}: replace_range requires both pos and end anchors`);
|
|
59
66
|
}
|
|
67
|
+
const lines = requireLines(edit, index);
|
|
68
|
+
assertNonBlankReplacement(edit, index, lines);
|
|
69
|
+
assertPhysicalLines(edit, index, lines);
|
|
60
70
|
return {
|
|
61
71
|
op: "replace_range",
|
|
62
72
|
pos,
|
|
63
73
|
end,
|
|
64
|
-
lines
|
|
74
|
+
lines,
|
|
65
75
|
};
|
|
66
76
|
}
|
|
67
77
|
function normalizeInsertEdit(edit, index, op) {
|
|
@@ -69,6 +79,7 @@ function normalizeInsertEdit(edit, index, op) {
|
|
|
69
79
|
const end = normalizeAnchor(edit.end);
|
|
70
80
|
const anchor = pos ?? end;
|
|
71
81
|
const lines = requireLines(edit, index);
|
|
82
|
+
assertPhysicalLines(edit, index, lines);
|
|
72
83
|
const normalized = {
|
|
73
84
|
op,
|
|
74
85
|
lines,
|
|
@@ -78,6 +89,27 @@ function normalizeInsertEdit(edit, index, op) {
|
|
|
78
89
|
}
|
|
79
90
|
return normalized;
|
|
80
91
|
}
|
|
92
|
+
function assertPhysicalLines(edit, index, lines) {
|
|
93
|
+
if (typeof lines === "string") {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (let entryIndex = 0; entryIndex < lines.length; entryIndex += 1) {
|
|
97
|
+
const entry = lines[entryIndex] ?? "";
|
|
98
|
+
if (entry.includes("\n") || entry.includes("\r")) {
|
|
99
|
+
throw new Error(`Edit ${index}: lines[${entryIndex}] for ${edit.op ?? "unknown"} contains an embedded newline. ` +
|
|
100
|
+
"Each array entry must be exactly one physical line; split the content into separate entries.");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function assertNonBlankReplacement(edit, index, lines) {
|
|
105
|
+
const isBlank = (typeof lines === "string" && lines === "") ||
|
|
106
|
+
(Array.isArray(lines) && lines.length === 1 && lines[0] === "");
|
|
107
|
+
if (!isBlank) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
throw new Error(`Edit ${index}: ${edit.op ?? "unknown"} with a single blank line (lines: [""]) is ambiguous and was rejected. ` +
|
|
111
|
+
"To delete lines use lines: [] or lines: null. To insert a blank line use append or prepend.");
|
|
112
|
+
}
|
|
81
113
|
export function normalizeHashlineEdits(rawEdits) {
|
|
82
114
|
return rawEdits.map((rawEdit, index) => {
|
|
83
115
|
const edit = rawEdit ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-edits.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/normalize-edits.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,iBAAiB;AACjB,wBAAwB;AACxB,qGAAqG;AACrG,
|
|
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\n<must>\n1. SNAPSHOT: All edits in one call reference the ORIGINAL file state. Do NOT adjust line numbers for prior edits in the same batch \u2014 the system applies them bottom-up automatically.\n2. replace replaces ONE line at pos. It does NOT accept end. For multi-line replacement, use replace_range.\n3. replace_range with pos+end replaces ALL lines FROM pos THROUGH end (BOTH INCLUSIVE). The end line WILL BE replaced. If you set end to a line that belongs to the next function/method/statement, that line is DELETED.\n CORRECT: pos on the first line to replace, end on the LAST line to replace \u2014 not the line after.\n4. lines must contain ONLY the content that belongs inside the replaced range. Lines AFTER end survive unchanged \u2014 do NOT include them in lines. If you do, they will appear twice.\n INSERTION SAFETY: To add a function, handler, statement, or block NEXT TO existing code, use append/prepend anchored to a surviving line. To add code AFTER a closed block, append after its final structural closing line. Do NOT replace that closing line merely to reproduce it and add content after it.\n STRUCTURAL CLOSURES: If replace_range intentionally consumes lines containing closing syntax such as }, });, ], ), );, or </tag>, lines MUST include every closure required by the resulting code. Never assume
|
|
1
|
+
export declare const HASHLINE_EDIT_DESCRIPTION = "Edit files using exact hash-anchored line references from the latest Read output.\n\n<must>\n1. SNAPSHOT: All edits in one call reference the ORIGINAL file state. Do NOT adjust line numbers for prior edits in the same batch \u2014 the system applies them bottom-up automatically.\n2. replace replaces ONE line at pos. It does NOT accept end. For multi-line replacement, use replace_range.\n3. replace_range with pos+end replaces ALL lines FROM pos THROUGH end (BOTH INCLUSIVE). The end line WILL BE replaced. If you set end to a line that belongs to the next function/method/statement, that line is DELETED.\n CORRECT: pos on the first line to replace, end on the LAST line to replace \u2014 not the line after.\n4. lines must contain ONLY the content that belongs inside the replaced range. Lines AFTER end survive unchanged \u2014 do NOT include them in lines. If you do, they will appear twice.\n INSERTION SAFETY: To add a function, handler, statement, or block NEXT TO existing code, use append/prepend anchored to a surviving line. To add code AFTER a closed block, append after its final structural closing line. Do NOT replace that closing line merely to reproduce it and add content after it.\n STRUCTURAL CLOSURES: If replace_range intentionally consumes lines containing closing syntax such as }, });, ], ), );, or </tag>, lines MUST include every closure required by the resulting code. Never assume the tool reconstructs omitted closing syntax.\n5. Tags MUST be copied exactly from read output or >>> mismatch output. NEVER guess or reconstruct tags.\n6. Batch = multiple operations in edits[], NOT one big replace covering everything. Each operation targets the smallest possible change.\n7. lines must contain plain replacement text only (no LINE#HASH#ANCHOR| prefixes, no diff + markers).\n8. CRITICAL: Double-quote characters inside lines strings MUST be escaped as \\\". Unescaped \\\" inside a JSON string will break the parser. Example: [\"const x = \\\"hello\\\";\"] \u2014 NOT [\"const x = \"hello\";\"]. Single quotes and backticks do NOT need escaping.\n9. LITERAL APPLICATION: payloads are applied byte-for-byte. There is NO merging, splitting, indentation fixing, or other content rewriting. The only automatic removals are exact duplicate echoes, and each one is reported as a Warning line in the result.\n10. PHYSICAL LINES: every string[] entry in lines must be exactly one physical line. Entries with embedded newlines are rejected. A string value is split on newlines.\n11. DELETION: to delete lines use lines: [] or lines: null with replace/replace_range. lines: [\"\"] is REJECTED because a single blank line is ambiguous \u2014 use append/prepend when you really want to insert a blank line.\n12. VERIFY: successful results include a bounded diff (@@ block) of what changed. Check that it matches your intent before moving on.\n</must>\n\n<operations>\nANCHOR FORMAT:\n Each anchor is `{line_number}#{hash_id}#{anchor_hash}` from read output like `42#VK#AB|content`.\n Backward-compatible `{line}#{hash}` also accepted.\n\nOPERATION CHOICE:\n replace with pos -> replace ONE line at pos (end is rejected)\n replace_range with pos+end -> replace range pos..end INCLUSIVE (both lines replaced); use only when those existing lines must change or be removed\n append with pos -> insert lines AFTER the anchored line; preferred for adding code after a block's final }, });, ], or other closing line\n prepend with pos -> insert lines BEFORE the anchored line; preferred for adding code before an existing declaration or block\n append/prepend without pos -> EOF/BOF insertion (also creates missing files)\n\nCONTENT FORMAT:\n lines: string (single line) or string[] (multi-line, preferred); each array entry is exactly one physical line\n lines: null or lines: [] with replace/replace_range -> DELETE those lines\n lines: [\"\"] with replace/replace_range -> REJECTED (ambiguous); use [] / null to delete, append/prepend to insert blank lines\n\nFILE MODES:\n delete=true deletes file and requires edits=[] with no rename\n rename moves final content to a new path and removes old path\n</operations>\n\n<examples>\nGiven this file after read:\n 10#VK#AB|function hello() {\n 11#XJ#CD| console.log(\"hi\");\n 12#MB#EF| console.log(\"bye\");\n 13#QR#GH|} // end of hello()\n\nSingle-line replace (change line 11):\n { op: \"replace\", pos: \"11#XJ#CD\", lines: [\" console.log(\\\"hello\\\");\"] }\n Result: line 11 replaced. Lines 10, 12-13 unchanged.\n\nRange replace (replace lines 11-12, function body):\n { op: \"replace_range\", pos: \"11#XJ#CD\", end: \"12#MB#EF\", lines: [\" return \\\"hello world\\\";\"] }\n Result: lines 11-12 removed, replaced by 1 new line. Lines 10, 13 unchanged.\n\nBAD - end is one line too far (DELETES closing brace):\n { op: \"replace_range\", pos: \"11#XJ#CD\", end: \"13#QR#GH\", lines: [\" return \\\"hello world\\\";\"] }\n Result: line 13 (closing brace) is REPLACED too \u2014 function is broken!\n CORRECT: use end: \"12#MB#EF\" \u2014 only replace lines 11-12, keep line 13 unchanged.\n\nBAD - lines extend past end (DUPLICATES line 13):\n { op: \"replace_range\", pos: \"11#XJ#CD\", end: \"12#MB#EF\", lines: [\" return \\\"hi\\\";\", \"}\"] }\n Line 13 is \"}\" which already exists after end. Including it in lines duplicates it.\n CORRECT: { op: \"replace_range\", pos: \"11#XJ#CD\", end: \"12#MB#EF\", lines: [\" return \\\"hi\\\";\"] }\n\nAppend after a line (insert between functions):\n { op: \"append\", pos: \"13#QR#GH\", lines: [\"\", \"function added() {\", \" return true;\", \"}\"] }\n Result: 4 lines inserted after line 13. All existing lines unchanged.\n\nBAD - replacing a closing line only to insert after it:\n { op: \"replace_range\", pos: \"13#QR#GH\", end: \"13#QR#GH\", lines: [\"} // end of hello()\", \"\", \"function added() {\", \"}\"] }\n This unnecessarily consumes the existing closing line. If that closure is omitted or altered, hello() becomes unbalanced.\n CORRECT: { op: \"append\", pos: \"13#QR#GH\", lines: [\"\", \"function added() {\", \"}\"] }\n\nWhen a structural rewrite really changes both opening and closing syntax:\n Use replace_range covering the complete structure, and include the required replacement closures explicitly. Re-read the edited region or run the narrow syntax/type check immediately afterward.\n</examples>\n\n<auto>\nBuilt-in normalization (you do NOT need to handle these):\n BOM and CRLF line endings are preserved automatically.\n Hashline prefixes and diff + markers copied into text are auto-stripped.\n Exact duplicate echoes are dropped and reported as Warning lines: a payload line identical to the append/prepend anchor line, or a range payload longer than its range whose first/last line exactly duplicates a surviving neighbor.\nEverything else is applied literally \u2014 no merging, splitting, or indentation fixes.\n</auto>\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,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/plugins/hashline-edit/tool-description.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.8.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Provide the LLM-facing tool description for the hash-anchored edit override.
|
|
5
|
-
// SCOPE: Stable instructions for read-then-edit workflow, anchor usage,
|
|
5
|
+
// SCOPE: Stable instructions for read-then-edit workflow, anchor usage, operation choice, literal payload semantics, and stale-anchor recovery.
|
|
6
6
|
// DEPENDS: []
|
|
7
7
|
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
8
|
// ROLE: RUNTIME
|
|
@@ -12,8 +12,9 @@
|
|
|
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
|
+
//
|
|
15
16
|
// START_CHANGE_SUMMARY
|
|
16
|
-
// LAST_CHANGE: [v0.
|
|
17
|
+
// LAST_CHANGE: [v0.8.0 - Documented literal application, physical single-line entries, blank-payload rejection, exact echo trimming with warnings, and the post-edit diff summary.]
|
|
17
18
|
// END_CHANGE_SUMMARY
|
|
18
19
|
export const HASHLINE_EDIT_DESCRIPTION = `Edit files using exact hash-anchored line references from the latest Read output.
|
|
19
20
|
|
|
@@ -24,11 +25,15 @@ export const HASHLINE_EDIT_DESCRIPTION = `Edit files using exact hash-anchored l
|
|
|
24
25
|
CORRECT: pos on the first line to replace, end on the LAST line to replace — not the line after.
|
|
25
26
|
4. lines must contain ONLY the content that belongs inside the replaced range. Lines AFTER end survive unchanged — do NOT include them in lines. If you do, they will appear twice.
|
|
26
27
|
INSERTION SAFETY: To add a function, handler, statement, or block NEXT TO existing code, use append/prepend anchored to a surviving line. To add code AFTER a closed block, append after its final structural closing line. Do NOT replace that closing line merely to reproduce it and add content after it.
|
|
27
|
-
STRUCTURAL CLOSURES: If replace_range intentionally consumes lines containing closing syntax such as }, });, ], ), );, or </tag>, lines MUST include every closure required by the resulting code. Never assume
|
|
28
|
+
STRUCTURAL CLOSURES: If replace_range intentionally consumes lines containing closing syntax such as }, });, ], ), );, or </tag>, lines MUST include every closure required by the resulting code. Never assume the tool reconstructs omitted closing syntax.
|
|
28
29
|
5. Tags MUST be copied exactly from read output or >>> mismatch output. NEVER guess or reconstruct tags.
|
|
29
30
|
6. Batch = multiple operations in edits[], NOT one big replace covering everything. Each operation targets the smallest possible change.
|
|
30
31
|
7. lines must contain plain replacement text only (no LINE#HASH#ANCHOR| prefixes, no diff + markers).
|
|
31
32
|
8. CRITICAL: Double-quote characters inside lines strings MUST be escaped as \\". Unescaped \\" inside a JSON string will break the parser. Example: ["const x = \\"hello\\";"] — NOT ["const x = "hello";"]. Single quotes and backticks do NOT need escaping.
|
|
33
|
+
9. LITERAL APPLICATION: payloads are applied byte-for-byte. There is NO merging, splitting, indentation fixing, or other content rewriting. The only automatic removals are exact duplicate echoes, and each one is reported as a Warning line in the result.
|
|
34
|
+
10. PHYSICAL LINES: every string[] entry in lines must be exactly one physical line. Entries with embedded newlines are rejected. A string value is split on newlines.
|
|
35
|
+
11. DELETION: to delete lines use lines: [] or lines: null with replace/replace_range. lines: [""] is REJECTED because a single blank line is ambiguous — use append/prepend when you really want to insert a blank line.
|
|
36
|
+
12. VERIFY: successful results include a bounded diff (@@ block) of what changed. Check that it matches your intent before moving on.
|
|
32
37
|
</must>
|
|
33
38
|
|
|
34
39
|
<operations>
|
|
@@ -44,8 +49,9 @@ OPERATION CHOICE:
|
|
|
44
49
|
append/prepend without pos -> EOF/BOF insertion (also creates missing files)
|
|
45
50
|
|
|
46
51
|
CONTENT FORMAT:
|
|
47
|
-
lines: string (single line) or string[] (multi-line, preferred)
|
|
48
|
-
lines: null or lines: [] with replace -> DELETE those lines
|
|
52
|
+
lines: string (single line) or string[] (multi-line, preferred); each array entry is exactly one physical line
|
|
53
|
+
lines: null or lines: [] with replace/replace_range -> DELETE those lines
|
|
54
|
+
lines: [""] with replace/replace_range -> REJECTED (ambiguous); use [] / null to delete, append/prepend to insert blank lines
|
|
49
55
|
|
|
50
56
|
FILE MODES:
|
|
51
57
|
delete=true deletes file and requires edits=[] with no rename
|
|
@@ -91,12 +97,11 @@ When a structural rewrite really changes both opening and closing syntax:
|
|
|
91
97
|
</examples>
|
|
92
98
|
|
|
93
99
|
<auto>
|
|
94
|
-
Built-in
|
|
95
|
-
Merged lines are auto-expanded back to original line count.
|
|
96
|
-
Indentation is auto-restored from original lines.
|
|
100
|
+
Built-in normalization (you do NOT need to handle these):
|
|
97
101
|
BOM and CRLF line endings are preserved automatically.
|
|
98
|
-
Hashline prefixes and diff markers
|
|
99
|
-
|
|
102
|
+
Hashline prefixes and diff + markers copied into text are auto-stripped.
|
|
103
|
+
Exact duplicate echoes are dropped and reported as Warning lines: a payload line identical to the append/prepend anchor line, or a range payload longer than its range whose first/last line exactly duplicates a surviving neighbor.
|
|
104
|
+
Everything else is applied literally — no merging, splitting, or indentation fixes.
|
|
100
105
|
</auto>
|
|
101
106
|
|
|
102
107
|
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,
|
|
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,kJAAkJ;AAClJ,gBAAgB;AAChB,oCAAoC;AACpC,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,sGAAsG;AACtG,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,sLAAsL;AACtL,qBAAqB;AACrB,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sHAyF6E,CAAC"}
|
package/package.json
CHANGED
package/schemas/vvoc/v3.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@1.2.
|
|
3
|
+
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@1.2.7/schemas/vvoc/v3.json",
|
|
4
4
|
"title": "vvoc config",
|
|
5
5
|
"description": "Canonical vvoc configuration document.",
|
|
6
6
|
"type": "object",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function autocorrectReplacementLines(originalLines: string[], replacementLines: string[]): string[];
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
// FILE: src/plugins/hashline-edit/autocorrect-replacement-lines.ts
|
|
2
|
-
// VERSION: 0.1.0
|
|
3
|
-
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Recover common model formatting mistakes in replacement payloads without changing user-requested semantics.
|
|
5
|
-
// SCOPE: Merged-line expansion, recovery of uniquely wrapped original lines, and indentation restoration for paired replacements.
|
|
6
|
-
// DEPENDS: []
|
|
7
|
-
// LINKS: [M-PLUGIN-HASHLINE-EDIT]
|
|
8
|
-
// ROLE: RUNTIME
|
|
9
|
-
// MAP_MODE: EXPORTS
|
|
10
|
-
// END_MODULE_CONTRACT
|
|
11
|
-
//
|
|
12
|
-
// START_MODULE_MAP
|
|
13
|
-
// autocorrectReplacementLines - Apply conservative autocorrections to replacement payload lines.
|
|
14
|
-
// END_MODULE_MAP
|
|
15
|
-
//
|
|
16
|
-
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [v0.0.0 - Initial GRACE compliance: added missing CHANGE_SUMMARY.]
|
|
18
|
-
// END_CHANGE_SUMMARY
|
|
19
|
-
function normalizeTokens(text) {
|
|
20
|
-
return text.replace(/\s+/g, "");
|
|
21
|
-
}
|
|
22
|
-
function stripTrailingContinuationTokens(text) {
|
|
23
|
-
return text.replace(/(?:&&|\|\||\?\?|\?|:|=|,|\+|-|\*|\/|\.|\()\s*$/u, "");
|
|
24
|
-
}
|
|
25
|
-
function stripMergeOperatorChars(text) {
|
|
26
|
-
return text.replace(/[|&?]/g, "");
|
|
27
|
-
}
|
|
28
|
-
function leadingWhitespace(text) {
|
|
29
|
-
return text.match(/^\s*/)?.[0] ?? "";
|
|
30
|
-
}
|
|
31
|
-
function restoreOldWrappedLines(originalLines, replacementLines) {
|
|
32
|
-
if (originalLines.length === 0 || replacementLines.length < 2) {
|
|
33
|
-
return replacementLines;
|
|
34
|
-
}
|
|
35
|
-
const canonicalToOriginal = new Map();
|
|
36
|
-
for (const line of originalLines) {
|
|
37
|
-
const canonical = normalizeTokens(line);
|
|
38
|
-
const existing = canonicalToOriginal.get(canonical);
|
|
39
|
-
if (existing) {
|
|
40
|
-
existing.count += 1;
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
canonicalToOriginal.set(canonical, { line, count: 1 });
|
|
44
|
-
}
|
|
45
|
-
const candidates = [];
|
|
46
|
-
for (let start = 0; start < replacementLines.length; start += 1) {
|
|
47
|
-
for (let length = 2; length <= 10 && start + length <= replacementLines.length; length += 1) {
|
|
48
|
-
const span = replacementLines.slice(start, start + length);
|
|
49
|
-
if (span.some((line) => line.trim().length === 0)) {
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
const canonicalSpan = normalizeTokens(span.join(""));
|
|
53
|
-
const original = canonicalToOriginal.get(canonicalSpan);
|
|
54
|
-
if (original && original.count === 1 && canonicalSpan.length >= 6) {
|
|
55
|
-
candidates.push({
|
|
56
|
-
start,
|
|
57
|
-
len: length,
|
|
58
|
-
replacement: original.line,
|
|
59
|
-
canonical: canonicalSpan,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (candidates.length === 0) {
|
|
65
|
-
return replacementLines;
|
|
66
|
-
}
|
|
67
|
-
const canonicalCounts = new Map();
|
|
68
|
-
for (const candidate of candidates) {
|
|
69
|
-
canonicalCounts.set(candidate.canonical, (canonicalCounts.get(candidate.canonical) ?? 0) + 1);
|
|
70
|
-
}
|
|
71
|
-
const uniqueCandidates = candidates.filter((candidate) => (canonicalCounts.get(candidate.canonical) ?? 0) === 1);
|
|
72
|
-
if (uniqueCandidates.length === 0) {
|
|
73
|
-
return replacementLines;
|
|
74
|
-
}
|
|
75
|
-
uniqueCandidates.sort((left, right) => right.start - left.start);
|
|
76
|
-
const corrected = [...replacementLines];
|
|
77
|
-
for (const candidate of uniqueCandidates) {
|
|
78
|
-
corrected.splice(candidate.start, candidate.len, candidate.replacement);
|
|
79
|
-
}
|
|
80
|
-
return corrected;
|
|
81
|
-
}
|
|
82
|
-
function maybeExpandSingleLineMerge(originalLines, replacementLines) {
|
|
83
|
-
if (replacementLines.length !== 1 || originalLines.length <= 1) {
|
|
84
|
-
return replacementLines;
|
|
85
|
-
}
|
|
86
|
-
const merged = replacementLines[0] ?? "";
|
|
87
|
-
const parts = originalLines.map((line) => line.trim()).filter((line) => line.length > 0);
|
|
88
|
-
if (parts.length !== originalLines.length) {
|
|
89
|
-
return replacementLines;
|
|
90
|
-
}
|
|
91
|
-
const indices = [];
|
|
92
|
-
let offset = 0;
|
|
93
|
-
let orderedMatch = true;
|
|
94
|
-
for (const part of parts) {
|
|
95
|
-
let index = merged.indexOf(part, offset);
|
|
96
|
-
let matchedLength = part.length;
|
|
97
|
-
if (index === -1) {
|
|
98
|
-
const stripped = stripTrailingContinuationTokens(part);
|
|
99
|
-
if (stripped !== part) {
|
|
100
|
-
index = merged.indexOf(stripped, offset);
|
|
101
|
-
if (index !== -1) {
|
|
102
|
-
matchedLength = stripped.length;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (index === -1) {
|
|
107
|
-
const segment = merged.slice(offset);
|
|
108
|
-
const fuzzyIndex = stripMergeOperatorChars(segment).indexOf(stripMergeOperatorChars(part));
|
|
109
|
-
if (fuzzyIndex !== -1) {
|
|
110
|
-
let strippedPos = 0;
|
|
111
|
-
let originalPos = 0;
|
|
112
|
-
while (strippedPos < fuzzyIndex && originalPos < segment.length) {
|
|
113
|
-
if (!/[|&?]/.test(segment[originalPos] ?? "")) {
|
|
114
|
-
strippedPos += 1;
|
|
115
|
-
}
|
|
116
|
-
originalPos += 1;
|
|
117
|
-
}
|
|
118
|
-
index = offset + originalPos;
|
|
119
|
-
matchedLength = part.length;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (index === -1) {
|
|
123
|
-
orderedMatch = false;
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
indices.push(index);
|
|
127
|
-
offset = index + matchedLength;
|
|
128
|
-
}
|
|
129
|
-
const expanded = [];
|
|
130
|
-
if (orderedMatch) {
|
|
131
|
-
for (let index = 0; index < indices.length; index += 1) {
|
|
132
|
-
const start = indices[index] ?? 0;
|
|
133
|
-
const end = index + 1 < indices.length ? (indices[index + 1] ?? merged.length) : merged.length;
|
|
134
|
-
const candidate = merged.slice(start, end).trim();
|
|
135
|
-
if (candidate.length === 0) {
|
|
136
|
-
orderedMatch = false;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
expanded.push(candidate);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (orderedMatch && expanded.length === originalLines.length) {
|
|
143
|
-
return expanded;
|
|
144
|
-
}
|
|
145
|
-
const semicolonSplit = merged
|
|
146
|
-
.split(/;\s+/)
|
|
147
|
-
.map((line, index, array) => {
|
|
148
|
-
if (index < array.length - 1 && !line.endsWith(";")) {
|
|
149
|
-
return `${line};`;
|
|
150
|
-
}
|
|
151
|
-
return line;
|
|
152
|
-
})
|
|
153
|
-
.map((line) => line.trim())
|
|
154
|
-
.filter((line) => line.length > 0);
|
|
155
|
-
if (semicolonSplit.length === originalLines.length) {
|
|
156
|
-
return semicolonSplit;
|
|
157
|
-
}
|
|
158
|
-
return replacementLines;
|
|
159
|
-
}
|
|
160
|
-
function restoreIndentForPairedReplacement(originalLines, replacementLines) {
|
|
161
|
-
if (originalLines.length !== replacementLines.length) {
|
|
162
|
-
return replacementLines;
|
|
163
|
-
}
|
|
164
|
-
return replacementLines.map((line, index) => {
|
|
165
|
-
if (line.length === 0) {
|
|
166
|
-
return line;
|
|
167
|
-
}
|
|
168
|
-
if (leadingWhitespace(line).length > 0) {
|
|
169
|
-
return line;
|
|
170
|
-
}
|
|
171
|
-
const indent = leadingWhitespace(originalLines[index] ?? "");
|
|
172
|
-
if (indent.length === 0) {
|
|
173
|
-
return line;
|
|
174
|
-
}
|
|
175
|
-
if ((originalLines[index] ?? "").trim() === line.trim()) {
|
|
176
|
-
return line;
|
|
177
|
-
}
|
|
178
|
-
return `${indent}${line}`;
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
export function autocorrectReplacementLines(originalLines, replacementLines) {
|
|
182
|
-
let next = replacementLines;
|
|
183
|
-
next = maybeExpandSingleLineMerge(originalLines, next);
|
|
184
|
-
next = restoreOldWrappedLines(originalLines, next);
|
|
185
|
-
next = restoreIndentForPairedReplacement(originalLines, next);
|
|
186
|
-
return next;
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=autocorrect-replacement-lines.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocorrect-replacement-lines.js","sourceRoot":"","sources":["../../../src/plugins/hashline-edit/autocorrect-replacement-lines.ts"],"names":[],"mappings":"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"}
|