ownkey 1.0.0 → 1.0.2

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 (91) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +256 -81
  3. package/dist/ai/factory.js +2 -2
  4. package/dist/ai/factory.js.map +1 -1
  5. package/dist/ai/gemini.d.ts.map +1 -1
  6. package/dist/ai/gemini.js +13 -3
  7. package/dist/ai/gemini.js.map +1 -1
  8. package/dist/ai/ollama.d.ts +0 -2
  9. package/dist/ai/ollama.d.ts.map +1 -1
  10. package/dist/ai/ollama.js +20 -93
  11. package/dist/ai/ollama.js.map +1 -1
  12. package/dist/ai/openai.d.ts +4 -1
  13. package/dist/ai/openai.d.ts.map +1 -1
  14. package/dist/ai/openai.js +7 -3
  15. package/dist/ai/openai.js.map +1 -1
  16. package/dist/ai/provider.d.ts +4 -0
  17. package/dist/ai/provider.d.ts.map +1 -1
  18. package/dist/ai/provider.js +80 -47
  19. package/dist/ai/provider.js.map +1 -1
  20. package/dist/commands/apply.d.ts.map +1 -1
  21. package/dist/commands/apply.js +82 -47
  22. package/dist/commands/apply.js.map +1 -1
  23. package/dist/commands/config.d.ts.map +1 -1
  24. package/dist/commands/config.js +249 -101
  25. package/dist/commands/config.js.map +1 -1
  26. package/dist/commands/suggest.d.ts.map +1 -1
  27. package/dist/commands/suggest.js +44 -34
  28. package/dist/commands/suggest.js.map +1 -1
  29. package/dist/commands/undo.d.ts.map +1 -1
  30. package/dist/commands/undo.js +35 -25
  31. package/dist/commands/undo.js.map +1 -1
  32. package/dist/config/keychain.d.ts.map +1 -1
  33. package/dist/config/keychain.js +5 -1
  34. package/dist/config/keychain.js.map +1 -1
  35. package/dist/config/manager.d.ts +15 -2
  36. package/dist/config/manager.d.ts.map +1 -1
  37. package/dist/config/manager.js +42 -13
  38. package/dist/config/manager.js.map +1 -1
  39. package/dist/core/apply/engine.d.ts +19 -12
  40. package/dist/core/apply/engine.d.ts.map +1 -1
  41. package/dist/core/apply/engine.js +160 -149
  42. package/dist/core/apply/engine.js.map +1 -1
  43. package/dist/core/apply/index.d.ts +4 -2
  44. package/dist/core/apply/index.d.ts.map +1 -1
  45. package/dist/core/apply/index.js.map +1 -1
  46. package/dist/core/apply/interactive.d.ts +1 -1
  47. package/dist/core/apply/interactive.d.ts.map +1 -1
  48. package/dist/core/apply/interactive.js.map +1 -1
  49. package/dist/core/backup/index.d.ts +2 -1
  50. package/dist/core/backup/index.d.ts.map +1 -1
  51. package/dist/core/backup/index.js.map +1 -1
  52. package/dist/core/backup/manager.d.ts +6 -1
  53. package/dist/core/backup/manager.d.ts.map +1 -1
  54. package/dist/core/backup/manager.js +26 -18
  55. package/dist/core/backup/manager.js.map +1 -1
  56. package/dist/core/diff/applier.d.ts +23 -8
  57. package/dist/core/diff/applier.d.ts.map +1 -1
  58. package/dist/core/diff/applier.js +85 -80
  59. package/dist/core/diff/applier.js.map +1 -1
  60. package/dist/core/diff/index.d.ts +6 -3
  61. package/dist/core/diff/index.d.ts.map +1 -1
  62. package/dist/core/diff/index.js.map +1 -1
  63. package/dist/core/diff/parser.d.ts +2 -0
  64. package/dist/core/diff/parser.d.ts.map +1 -1
  65. package/dist/core/diff/parser.js +15 -5
  66. package/dist/core/diff/parser.js.map +1 -1
  67. package/dist/core/diff/validator.d.ts +3 -8
  68. package/dist/core/diff/validator.d.ts.map +1 -1
  69. package/dist/core/diff/validator.js +13 -71
  70. package/dist/core/diff/validator.js.map +1 -1
  71. package/dist/db/client.d.ts +9 -1
  72. package/dist/db/client.d.ts.map +1 -1
  73. package/dist/db/client.js +64 -86
  74. package/dist/db/client.js.map +1 -1
  75. package/dist/db/migrations/001_init.sql +80 -80
  76. package/dist/db/migrations/002_applies.sql +33 -32
  77. package/dist/index.js +13 -20
  78. package/dist/index.js.map +1 -1
  79. package/dist/storage/local.d.ts +12 -0
  80. package/dist/storage/local.d.ts.map +1 -1
  81. package/dist/storage/local.js +28 -0
  82. package/dist/storage/local.js.map +1 -1
  83. package/dist/types/index.d.ts +7 -0
  84. package/dist/types/index.d.ts.map +1 -1
  85. package/dist/types/index.js +1 -0
  86. package/dist/types/index.js.map +1 -1
  87. package/dist/utils/severity.d.ts +6 -0
  88. package/dist/utils/severity.d.ts.map +1 -0
  89. package/dist/utils/severity.js +19 -0
  90. package/dist/utils/severity.js.map +1 -0
  91. package/package.json +72 -72
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/backup/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/backup/manager.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,37 @@
1
- import { ParsedDiff } from './parser.js';
1
+ import { ParsedDiff, Hunk } from './parser.js';
2
2
  export interface ApplyResult {
3
3
  success: boolean;
4
4
  filePath: string;
5
5
  linesChanged: number;
6
6
  error?: string;
7
7
  }
8
+ export interface ContentResult {
9
+ ok: boolean;
10
+ content: string;
11
+ linesChanged: number;
12
+ errors: string[];
13
+ warnings: string[];
14
+ isNewFile: boolean;
15
+ }
8
16
  export declare class DiffApplier {
9
17
  /**
10
- * Apply a parsed diff to a file
11
- */
12
- static apply(diff: ParsedDiff, targetPath: string): Promise<ApplyResult>;
13
- /**
14
- * Apply a single hunk to file lines
18
+ * Apply a diff to file content in memory.
19
+ *
20
+ * Each hunk is located by matching its context + removed lines against the file,
21
+ * starting at the line the hunk claims and searching outward, so slightly wrong
22
+ * line numbers (common in model output) still apply cleanly. A hunk whose lines
23
+ * do not exist in the file is rejected instead of being written in the wrong place.
15
24
  */
16
- private static applyHunk;
25
+ static applyToContent(original: string | null, diff: ParsedDiff): ContentResult;
26
+ /** Find where `block` occurs in `lines`, preferring the position closest to `expected`. */
27
+ private static locate;
17
28
  /**
18
- * Dry run - show what would change without actually applying
29
+ * Apply a parsed diff to a file on disk (creates the file for new-file diffs).
19
30
  */
31
+ static apply(diff: ParsedDiff, targetPath: string): Promise<ApplyResult>;
32
+ /** Dry run: the file's lines after applying, without writing. */
20
33
  static dryRun(diff: ParsedDiff, targetPath: string): Promise<string[]>;
34
+ /** Kept for API compatibility. */
35
+ static hunkSize(hunk: Hunk): number;
21
36
  }
22
37
  //# sourceMappingURL=applier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"applier.d.ts","sourceRoot":"","sources":["../../../src/core/diff/applier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACpB;;OAEG;WACU,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA6C9E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IA0CxB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAY/E"}
1
+ {"version":3,"file":"applier.d.ts","sourceRoot":"","sources":["../../../src/core/diff/applier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,WAAW;IACpB;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,aAAa;IA2C/E,2FAA2F;IAC3F,OAAO,CAAC,MAAM,CAAC,MAAM;IAwBrB;;OAEG;WACU,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe9E,iEAAiE;WACpD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5E,kCAAkC;IAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;CAGtC"}
@@ -1,98 +1,103 @@
1
- import { readFile, writeFile } from 'fs/promises';
2
- import { DiffValidator } from './validator.js';
1
+ import { readFile, writeFile, mkdir } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { dirname } from 'path';
3
4
  export class DiffApplier {
4
5
  /**
5
- * Apply a parsed diff to a file
6
+ * Apply a diff to file content in memory.
7
+ *
8
+ * Each hunk is located by matching its context + removed lines against the file,
9
+ * starting at the line the hunk claims and searching outward, so slightly wrong
10
+ * line numbers (common in model output) still apply cleanly. A hunk whose lines
11
+ * do not exist in the file is rejected instead of being written in the wrong place.
6
12
  */
7
- static async apply(diff, targetPath) {
8
- try {
9
- // Validate first
10
- const validation = await DiffValidator.validate(diff, targetPath);
11
- if (!validation.valid) {
12
- return {
13
- success: false,
14
- filePath: targetPath,
15
- linesChanged: 0,
16
- error: `Validation failed: ${validation.errors.join(', ')}`,
17
- };
13
+ static applyToContent(original, diff) {
14
+ const errors = [];
15
+ const warnings = [];
16
+ const isNewFile = original === null;
17
+ if (diff.newPath === '/dev/null') {
18
+ return { ok: false, content: original ?? '', linesChanged: 0, errors: ['File deletion is not supported'], warnings, isNewFile };
19
+ }
20
+ const usesCRLF = original?.includes('\r\n') ?? false;
21
+ const text = (original ?? '').replace(/\r\n/g, '\n');
22
+ const lines = text === '' ? [] : text.split('\n');
23
+ let offset = 0;
24
+ let linesChanged = 0;
25
+ diff.hunks.forEach((hunk, index) => {
26
+ const oldBlock = hunk.changes.filter((c) => c.type !== 'add').map((c) => c.content);
27
+ const newBlock = hunk.changes.filter((c) => c.type !== 'remove').map((c) => c.content);
28
+ const expected = Math.max(0, hunk.oldStart - 1 + offset);
29
+ const at = DiffApplier.locate(lines, oldBlock, expected);
30
+ if (at === -1) {
31
+ errors.push(`Hunk ${index + 1} (around line ${hunk.oldStart}) does not match the current file contents`);
32
+ return;
18
33
  }
19
- // Read file
20
- const fileContent = await readFile(targetPath, 'utf-8');
21
- const lines = fileContent.split('\n');
22
- // Apply hunks
23
- let linesChanged = 0;
24
- let offset = 0; // Track line number shifts
25
- for (const hunk of diff.hunks) {
26
- const result = this.applyHunk(hunk, lines, offset);
27
- linesChanged += result.linesChanged;
28
- offset += result.offset;
34
+ if (oldBlock.length > 0 && at !== expected) {
35
+ warnings.push(`Hunk ${index + 1} applied at line ${at + 1} (diff said ${hunk.oldStart})`);
29
36
  }
30
- // Write back
31
- await writeFile(targetPath, lines.join('\n'), 'utf-8');
32
- return {
33
- success: true,
34
- filePath: targetPath,
35
- linesChanged,
36
- };
37
+ lines.splice(at, oldBlock.length, ...newBlock);
38
+ offset += newBlock.length - oldBlock.length;
39
+ linesChanged += hunk.changes.filter((c) => c.type !== 'context').length;
40
+ });
41
+ let content = lines.join('\n');
42
+ if (isNewFile && content !== '' && !content.endsWith('\n'))
43
+ content += '\n';
44
+ if (usesCRLF)
45
+ content = content.replace(/\n/g, '\r\n');
46
+ return { ok: errors.length === 0, content, linesChanged, errors, warnings, isNewFile };
47
+ }
48
+ /** Find where `block` occurs in `lines`, preferring the position closest to `expected`. */
49
+ static locate(lines, block, expected) {
50
+ if (block.length === 0) {
51
+ return Math.min(expected, lines.length);
37
52
  }
38
- catch (error) {
39
- return {
40
- success: false,
41
- filePath: targetPath,
42
- linesChanged: 0,
43
- error: error.message,
44
- };
53
+ const matchesAt = (i, loose) => {
54
+ for (let k = 0; k < block.length; k++) {
55
+ const a = lines[i + k];
56
+ const b = block[k];
57
+ if (a === undefined)
58
+ return false;
59
+ if (loose ? a.trim() !== b.trim() : a !== b)
60
+ return false;
61
+ }
62
+ return true;
63
+ };
64
+ const last = lines.length - block.length;
65
+ for (const loose of [false, true]) {
66
+ for (let d = 0; d <= Math.max(expected, last - expected); d++) {
67
+ for (const i of d === 0 ? [expected] : [expected - d, expected + d]) {
68
+ if (i >= 0 && i <= last && matchesAt(i, loose))
69
+ return i;
70
+ }
71
+ }
45
72
  }
73
+ return -1;
46
74
  }
47
75
  /**
48
- * Apply a single hunk to file lines
76
+ * Apply a parsed diff to a file on disk (creates the file for new-file diffs).
49
77
  */
50
- static applyHunk(hunk, lines, offset) {
51
- let linesChanged = 0;
52
- let currentOffset = offset;
53
- let fileLineIndex = hunk.oldStart - 1 + offset;
54
- // Collect changes to apply
55
- const toRemove = [];
56
- const toAdd = [];
57
- for (const change of hunk.changes) {
58
- if (change.type === 'remove') {
59
- toRemove.push(fileLineIndex);
60
- fileLineIndex++;
61
- linesChanged++;
62
- }
63
- else if (change.type === 'add') {
64
- toAdd.push({ index: fileLineIndex, content: change.content });
65
- fileLineIndex++;
66
- currentOffset++;
67
- linesChanged++;
68
- }
69
- else if (change.type === 'context') {
70
- fileLineIndex++;
78
+ static async apply(diff, targetPath) {
79
+ try {
80
+ const original = existsSync(targetPath) ? await readFile(targetPath, 'utf-8') : null;
81
+ const result = DiffApplier.applyToContent(original, diff);
82
+ if (!result.ok) {
83
+ return { success: false, filePath: targetPath, linesChanged: 0, error: result.errors.join('; ') };
71
84
  }
85
+ await mkdir(dirname(targetPath), { recursive: true });
86
+ await writeFile(targetPath, result.content, 'utf-8');
87
+ return { success: true, filePath: targetPath, linesChanged: result.linesChanged };
72
88
  }
73
- // Apply removals (in reverse to maintain indices)
74
- for (let i = toRemove.length - 1; i >= 0; i--) {
75
- lines.splice(toRemove[i], 1);
76
- currentOffset--;
77
- }
78
- // Apply additions
79
- for (const add of toAdd) {
80
- lines.splice(add.index, 0, add.content);
89
+ catch (error) {
90
+ return { success: false, filePath: targetPath, linesChanged: 0, error: error.message };
81
91
  }
82
- return { linesChanged, offset: currentOffset - offset };
83
92
  }
84
- /**
85
- * Dry run - show what would change without actually applying
86
- */
93
+ /** Dry run: the file's lines after applying, without writing. */
87
94
  static async dryRun(diff, targetPath) {
88
- const fileContent = await readFile(targetPath, 'utf-8');
89
- const lines = fileContent.split('\n').slice(); // Copy
90
- let offset = 0;
91
- for (const hunk of diff.hunks) {
92
- const result = this.applyHunk(hunk, lines, offset);
93
- offset += result.offset;
94
- }
95
- return lines;
95
+ const original = existsSync(targetPath) ? await readFile(targetPath, 'utf-8') : null;
96
+ return DiffApplier.applyToContent(original, diff).content.split('\n');
97
+ }
98
+ /** Kept for API compatibility. */
99
+ static hunkSize(hunk) {
100
+ return hunk.changes.length;
96
101
  }
97
102
  }
98
103
  //# sourceMappingURL=applier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"applier.js","sourceRoot":"","sources":["../../../src/core/diff/applier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"applier.js","sourceRoot":"","sources":["../../../src/core/diff/applier.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
- export { DiffParser, ParsedDiff, Hunk, Change } from './parser.js';
2
- export { DiffValidator, ValidationResult } from './validator.js';
3
- export { DiffApplier, ApplyResult } from './applier.js';
1
+ export { DiffParser } from './parser.js';
2
+ export type { ParsedDiff, Hunk, Change } from './parser.js';
3
+ export { DiffValidator } from './validator.js';
4
+ export type { ValidationResult } from './validator.js';
5
+ export { DiffApplier } from './applier.js';
6
+ export type { ApplyResult, ContentResult } from './applier.js';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/diff/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/diff/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/diff/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/diff/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -24,6 +24,8 @@ export declare class DiffParser {
24
24
  * Parse unified diff format into structured data
25
25
  */
26
26
  static parse(diffText: string): ParsedDiff[];
27
+ /** Strip tab-separated timestamps and surrounding quotes from a ---/+++ path. */
28
+ static cleanPath(raw: string): string;
27
29
  /**
28
30
  * Generate unified diff format from structured data
29
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/core/diff/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACnB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAwF5C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAiB5C"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/core/diff/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACnB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IA8F5C,iFAAiF;IACjF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIrC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAiB5C"}
@@ -7,7 +7,8 @@ export class DiffParser {
7
7
  */
8
8
  static parse(diffText) {
9
9
  const diffs = [];
10
- const lines = diffText.split('\n');
10
+ // Normalise line endings and drop trailing blank lines (they are not context)
11
+ const lines = diffText.replace(/\r\n/g, '\n').replace(/\n+$/, '').split('\n');
11
12
  let currentDiff = null;
12
13
  let currentHunk = null;
13
14
  let lineNumber = 0;
@@ -21,7 +22,7 @@ export class DiffParser {
21
22
  if (currentDiff) {
22
23
  diffs.push(currentDiff);
23
24
  }
24
- const oldPath = line.substring(4).replace(/^a\//, '');
25
+ const oldPath = DiffParser.cleanPath(line.substring(4)).replace(/^a\//, '');
25
26
  currentDiff = {
26
27
  filePath: oldPath,
27
28
  oldPath,
@@ -31,9 +32,12 @@ export class DiffParser {
31
32
  }
32
33
  // File header: +++ b/path/to/file.ts
33
34
  else if (line.startsWith('+++ ') && currentDiff) {
34
- const newPath = line.substring(4).replace(/^b\//, '');
35
+ const newPath = DiffParser.cleanPath(line.substring(4)).replace(/^b\//, '');
35
36
  currentDiff.newPath = newPath;
36
- currentDiff.filePath = newPath;
37
+ // A deletion diff ends in /dev/null: keep the real path
38
+ if (newPath !== '/dev/null') {
39
+ currentDiff.filePath = newPath;
40
+ }
37
41
  }
38
42
  // Hunk header: @@ -10,5 +10,6 @@
39
43
  else if (line.startsWith('@@')) {
@@ -69,7 +73,8 @@ export class DiffParser {
69
73
  });
70
74
  lineNumber++;
71
75
  }
72
- else if (line.startsWith(' ')) {
76
+ else if (line.startsWith(' ') || line === '') {
77
+ // Models often strip the leading space from blank context lines
73
78
  currentHunk.changes.push({
74
79
  type: 'context',
75
80
  content: line.substring(1),
@@ -77,6 +82,7 @@ export class DiffParser {
77
82
  });
78
83
  lineNumber++;
79
84
  }
85
+ // '\' and other noise are ignored
80
86
  }
81
87
  }
82
88
  // Push last hunk and diff
@@ -88,6 +94,10 @@ export class DiffParser {
88
94
  }
89
95
  return diffs;
90
96
  }
97
+ /** Strip tab-separated timestamps and surrounding quotes from a ---/+++ path. */
98
+ static cleanPath(raw) {
99
+ return raw.split('\t')[0].trim().replace(/^"(.*)"$/, '$1');
100
+ }
91
101
  /**
92
102
  * Generate unified diff format from structured data
93
103
  */
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/diff/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/diff/parser.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,11 @@ export interface ValidationResult {
6
6
  }
7
7
  export declare class DiffValidator {
8
8
  /**
9
- * Validate a parsed diff before applying
9
+ * Validate a parsed diff against the file it targets (a missing file is only
10
+ * valid when the diff creates it).
10
11
  */
11
12
  static validate(diff: ParsedDiff, targetPath: string): Promise<ValidationResult>;
12
- /**
13
- * Validate a single hunk against file content
14
- */
15
- private static validateHunk;
16
- /**
17
- * Check if diff can be applied cleanly (no conflicts)
18
- */
13
+ /** Check if a diff applies to the given content. */
19
14
  static canApplyCleanly(diff: ParsedDiff, fileContent: string): boolean;
20
15
  }
21
16
  //# sourceMappingURL=validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,aAAa;IACtB;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8BtF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAkC3B;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAqBzE"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,aAAa;IACtB;;;OAGG;WACU,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IActF,oDAAoD;IACpD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAGzE"}
@@ -1,86 +1,28 @@
1
1
  import { readFile } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { DiffApplier } from './applier.js';
2
4
  export class DiffValidator {
3
5
  /**
4
- * Validate a parsed diff before applying
6
+ * Validate a parsed diff against the file it targets (a missing file is only
7
+ * valid when the diff creates it).
5
8
  */
6
9
  static async validate(diff, targetPath) {
7
- const errors = [];
8
- const warnings = [];
9
10
  try {
10
- // Check if file exists
11
- const fileContent = await readFile(targetPath, 'utf-8');
12
- const lines = fileContent.split('\n');
13
- // Validate each hunk
14
- for (const hunk of diff.hunks) {
15
- const hunkValidation = this.validateHunk(hunk, lines);
16
- errors.push(...hunkValidation.errors);
17
- warnings.push(...hunkValidation.warnings);
11
+ const exists = existsSync(targetPath);
12
+ if (!exists && diff.oldPath !== '/dev/null' && diff.hunks.some((h) => h.oldLines > 0)) {
13
+ return { valid: false, errors: [`File not found: ${targetPath}`], warnings: [] };
18
14
  }
15
+ const original = exists ? await readFile(targetPath, 'utf-8') : null;
16
+ const result = DiffApplier.applyToContent(original, diff);
17
+ return { valid: result.ok, errors: result.errors, warnings: result.warnings };
19
18
  }
20
19
  catch (error) {
21
- if (error.code === 'ENOENT') {
22
- errors.push(`File not found: ${targetPath}`);
23
- }
24
- else {
25
- errors.push(`Failed to read file: ${error.message}`);
26
- }
27
- }
28
- return {
29
- valid: errors.length === 0,
30
- errors,
31
- warnings,
32
- };
33
- }
34
- /**
35
- * Validate a single hunk against file content
36
- */
37
- static validateHunk(hunk, fileLines) {
38
- const errors = [];
39
- const warnings = [];
40
- // Check if hunk is within file bounds
41
- if (hunk.oldStart < 1 || hunk.oldStart > fileLines.length + 1) {
42
- errors.push(`Hunk starts at line ${hunk.oldStart}, but file only has ${fileLines.length} lines`);
43
- return { valid: false, errors, warnings };
20
+ return { valid: false, errors: [`Failed to read file: ${error.message}`], warnings: [] };
44
21
  }
45
- // Validate context lines match
46
- let fileLineIndex = hunk.oldStart - 1;
47
- for (const change of hunk.changes) {
48
- if (change.type === 'context' || change.type === 'remove') {
49
- if (fileLineIndex >= fileLines.length) {
50
- errors.push(`Context line ${fileLineIndex + 1} is beyond end of file`);
51
- break;
52
- }
53
- const fileLine = fileLines[fileLineIndex];
54
- if (fileLine !== change.content) {
55
- warnings.push(`Line ${fileLineIndex + 1} doesn't match context:\n` +
56
- ` Expected: "${change.content}"\n` +
57
- ` Found: "${fileLine}"`);
58
- }
59
- fileLineIndex++;
60
- }
61
- }
62
- return { valid: errors.length === 0, errors, warnings };
63
22
  }
64
- /**
65
- * Check if diff can be applied cleanly (no conflicts)
66
- */
23
+ /** Check if a diff applies to the given content. */
67
24
  static canApplyCleanly(diff, fileContent) {
68
- const lines = fileContent.split('\n');
69
- for (const hunk of diff.hunks) {
70
- let fileLineIndex = hunk.oldStart - 1;
71
- for (const change of hunk.changes) {
72
- if (change.type === 'context' || change.type === 'remove') {
73
- if (fileLineIndex >= lines.length) {
74
- return false;
75
- }
76
- if (lines[fileLineIndex] !== change.content) {
77
- return false;
78
- }
79
- fileLineIndex++;
80
- }
81
- }
82
- }
83
- return true;
25
+ return DiffApplier.applyToContent(fileContent, diff).ok;
84
26
  }
85
27
  }
86
28
  //# sourceMappingURL=validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/core/diff/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ3C,MAAM,OAAO,aAAa;IACtB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAgB,EAAE,UAAkB;QACtD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,mBAAmB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YACrF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,wBAAyB,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACxG,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,eAAe,CAAC,IAAgB,EAAE,WAAmB;QACxD,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;CACJ"}
@@ -11,8 +11,16 @@ export declare class DatabaseClient {
11
11
  isConnected(): boolean;
12
12
  isLocalOnlyMode(): boolean;
13
13
  getClient(): ReturnType<typeof postgres> | null;
14
+ /**
15
+ * Apply every migrations/NNN_name.sql that has not been recorded in schema_migrations.
16
+ * Each migration runs in its own transaction together with its version record.
17
+ */
14
18
  private runMigrations;
15
- private runMigration;
19
+ static listMigrations(): Promise<{
20
+ version: number;
21
+ file: string;
22
+ path: string;
23
+ }[]>;
16
24
  }
17
25
  export declare const dbClient: DatabaseClient;
18
26
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,EAAE,CAA2C;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,eAAe,CAAkB;IAEnC,OAAO,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,KAAK,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC;IAUnC,WAAW,IAAI,OAAO;IAItB,eAAe,IAAI,OAAO;IAI1B,SAAS,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,GAAG,IAAI;YAIjC,aAAa;YAuDb,YAAY;CAsB7B;AAED,eAAO,MAAM,QAAQ,gBAAuB,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAYlD,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,EAAE,CAA2C;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,eAAe,CAAkB;IAEnC,OAAO,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,KAAK,IAAI,UAAU,CAAC,OAAO,OAAO,CAAC;IAUnC,WAAW,IAAI,OAAO;IAItB,eAAe,IAAI,OAAO;IAI1B,SAAS,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,GAAG,IAAI;IAI/C;;;OAGG;YACW,aAAa;WAoCd,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAS5F;AAED,eAAO,MAAM,QAAQ,gBAAuB,CAAC"}