@clarvis/agent-tools 0.1.0

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 (116) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/CODE_OF_CONDUCT.md +117 -0
  3. package/CONTRIBUTING.md +78 -0
  4. package/LICENSE +21 -0
  5. package/README.md +203 -0
  6. package/SECURITY.md +58 -0
  7. package/SPEC.md +266 -0
  8. package/dist/config.d.ts +29 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +145 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/core.d.ts +13 -0
  13. package/dist/core.d.ts.map +1 -0
  14. package/dist/core.js +43 -0
  15. package/dist/core.js.map +1 -0
  16. package/dist/errors.d.ts +9 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +29 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +20 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +17 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/lib/atomic.d.ts +11 -0
  25. package/dist/lib/atomic.d.ts.map +1 -0
  26. package/dist/lib/atomic.js +307 -0
  27. package/dist/lib/atomic.js.map +1 -0
  28. package/dist/lib/binary.d.ts +3 -0
  29. package/dist/lib/binary.d.ts.map +1 -0
  30. package/dist/lib/binary.js +20 -0
  31. package/dist/lib/binary.js.map +1 -0
  32. package/dist/lib/files.d.ts +9 -0
  33. package/dist/lib/files.d.ts.map +1 -0
  34. package/dist/lib/files.js +49 -0
  35. package/dist/lib/files.js.map +1 -0
  36. package/dist/lib/ignore.d.ts +5 -0
  37. package/dist/lib/ignore.d.ts.map +1 -0
  38. package/dist/lib/ignore.js +106 -0
  39. package/dist/lib/ignore.js.map +1 -0
  40. package/dist/lib/log.d.ts +4 -0
  41. package/dist/lib/log.d.ts.map +1 -0
  42. package/dist/lib/log.js +11 -0
  43. package/dist/lib/log.js.map +1 -0
  44. package/dist/lib/match-cascade.d.ts +10 -0
  45. package/dist/lib/match-cascade.d.ts.map +1 -0
  46. package/dist/lib/match-cascade.js +153 -0
  47. package/dist/lib/match-cascade.js.map +1 -0
  48. package/dist/lib/output.d.ts +8 -0
  49. package/dist/lib/output.d.ts.map +1 -0
  50. package/dist/lib/output.js +77 -0
  51. package/dist/lib/output.js.map +1 -0
  52. package/dist/lib/paths.d.ts +3 -0
  53. package/dist/lib/paths.d.ts.map +1 -0
  54. package/dist/lib/paths.js +46 -0
  55. package/dist/lib/paths.js.map +1 -0
  56. package/dist/lib/rg.d.ts +22 -0
  57. package/dist/lib/rg.d.ts.map +1 -0
  58. package/dist/lib/rg.js +285 -0
  59. package/dist/lib/rg.js.map +1 -0
  60. package/dist/lib/text.d.ts +18 -0
  61. package/dist/lib/text.d.ts.map +1 -0
  62. package/dist/lib/text.js +129 -0
  63. package/dist/lib/text.js.map +1 -0
  64. package/dist/lib/textfile.d.ts +4 -0
  65. package/dist/lib/textfile.d.ts.map +1 -0
  66. package/dist/lib/textfile.js +55 -0
  67. package/dist/lib/textfile.js.map +1 -0
  68. package/dist/lib/token.d.ts +2 -0
  69. package/dist/lib/token.d.ts.map +1 -0
  70. package/dist/lib/token.js +6 -0
  71. package/dist/lib/token.js.map +1 -0
  72. package/dist/tools/apply-patch.d.ts +3 -0
  73. package/dist/tools/apply-patch.d.ts.map +1 -0
  74. package/dist/tools/apply-patch.js +221 -0
  75. package/dist/tools/apply-patch.js.map +1 -0
  76. package/dist/tools/bash.d.ts +3 -0
  77. package/dist/tools/bash.d.ts.map +1 -0
  78. package/dist/tools/bash.js +179 -0
  79. package/dist/tools/bash.js.map +1 -0
  80. package/dist/tools/edit-file.d.ts +15 -0
  81. package/dist/tools/edit-file.d.ts.map +1 -0
  82. package/dist/tools/edit-file.js +163 -0
  83. package/dist/tools/edit-file.js.map +1 -0
  84. package/dist/tools/glob.d.ts +3 -0
  85. package/dist/tools/glob.d.ts.map +1 -0
  86. package/dist/tools/glob.js +64 -0
  87. package/dist/tools/glob.js.map +1 -0
  88. package/dist/tools/grep.d.ts +3 -0
  89. package/dist/tools/grep.d.ts.map +1 -0
  90. package/dist/tools/grep.js +201 -0
  91. package/dist/tools/grep.js.map +1 -0
  92. package/dist/tools/list-dir.d.ts +3 -0
  93. package/dist/tools/list-dir.d.ts.map +1 -0
  94. package/dist/tools/list-dir.js +59 -0
  95. package/dist/tools/list-dir.js.map +1 -0
  96. package/dist/tools/multi-edit.d.ts +3 -0
  97. package/dist/tools/multi-edit.d.ts.map +1 -0
  98. package/dist/tools/multi-edit.js +86 -0
  99. package/dist/tools/multi-edit.js.map +1 -0
  100. package/dist/tools/read-file.d.ts +3 -0
  101. package/dist/tools/read-file.d.ts.map +1 -0
  102. package/dist/tools/read-file.js +102 -0
  103. package/dist/tools/read-file.js.map +1 -0
  104. package/dist/tools/registry.d.ts +6 -0
  105. package/dist/tools/registry.d.ts.map +1 -0
  106. package/dist/tools/registry.js +28 -0
  107. package/dist/tools/registry.js.map +1 -0
  108. package/dist/tools/types.d.ts +9 -0
  109. package/dist/tools/types.d.ts.map +1 -0
  110. package/dist/tools/types.js +2 -0
  111. package/dist/tools/types.js.map +1 -0
  112. package/dist/tools/write-file.d.ts +3 -0
  113. package/dist/tools/write-file.d.ts.map +1 -0
  114. package/dist/tools/write-file.js +61 -0
  115. package/dist/tools/write-file.js.map +1 -0
  116. package/package.json +70 -0
@@ -0,0 +1,18 @@
1
+ export type Eol = "lf" | "crlf";
2
+ export type Encoding = "utf8" | "utf16le" | "utf16be";
3
+ export interface DecodedText {
4
+ content: string;
5
+ eol: Eol;
6
+ bom: boolean;
7
+ raw: string;
8
+ encoding: Encoding;
9
+ }
10
+ export declare function decodeText(buf: Buffer): DecodedText;
11
+ export declare function encodeText(content: string, opts: {
12
+ eol: Eol;
13
+ bom: boolean;
14
+ }): string;
15
+ export declare function splitLines(content: string): string[];
16
+ export declare function countNewlines(s: string): number;
17
+ export declare function reencode(newContent: string, decoded: DecodedText): string;
18
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/lib/text.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,GAAG,EAAE,GAAG,CAAC;IAET,GAAG,EAAE,OAAO,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAsCnD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAMpF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIpD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAoCD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAsCzE"}
@@ -0,0 +1,129 @@
1
+ import { diffArrays } from "diff";
2
+ const BOM = "";
3
+ export function decodeText(buf) {
4
+ let encoding = "utf8";
5
+ let raw;
6
+ let bom = false;
7
+ if (buf.length >= 2 && buf[0] === 0xff && buf[1] === 0xfe) {
8
+ encoding = "utf16le";
9
+ bom = true;
10
+ raw = buf.subarray(2).toString("utf16le");
11
+ }
12
+ else if (buf.length >= 2 && buf[0] === 0xfe && buf[1] === 0xff) {
13
+ encoding = "utf16be";
14
+ bom = true;
15
+ const body = buf.subarray(2);
16
+ const even = body.length - (body.length % 2);
17
+ const swapped = Buffer.from(body.subarray(0, even));
18
+ swapped.swap16();
19
+ raw = swapped.toString("utf16le");
20
+ }
21
+ else {
22
+ raw = buf.toString("utf8");
23
+ if (raw.charCodeAt(0) === 0xfeff) {
24
+ raw = raw.slice(1);
25
+ bom = true;
26
+ }
27
+ }
28
+ let crlf = 0;
29
+ let lf = 0;
30
+ for (let i = 0; i < raw.length; i++) {
31
+ if (raw.charCodeAt(i) === 0x0a) {
32
+ if (i > 0 && raw.charCodeAt(i - 1) === 0x0d)
33
+ crlf++;
34
+ else
35
+ lf++;
36
+ }
37
+ }
38
+ const eol = crlf > lf ? "crlf" : "lf";
39
+ const content = raw.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
40
+ return { content, eol, bom, raw, encoding };
41
+ }
42
+ export function encodeText(content, opts) {
43
+ let out = content.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
44
+ if (opts.eol === "crlf") {
45
+ out = out.replace(/\n/g, "\r\n");
46
+ }
47
+ return opts.bom ? BOM + out : out;
48
+ }
49
+ export function splitLines(content) {
50
+ const lines = content.split("\n");
51
+ if (lines.length > 0 && lines[lines.length - 1] === "")
52
+ lines.pop();
53
+ return lines;
54
+ }
55
+ export function countNewlines(s) {
56
+ let n = 0;
57
+ for (let i = 0; i < s.length; i++) {
58
+ if (s.charCodeAt(i) === 0x0a)
59
+ n++;
60
+ }
61
+ return n;
62
+ }
63
+ function tokenize(s) {
64
+ const parts = s.split(/(\r\n|\r|\n)/);
65
+ const lines = [];
66
+ for (let i = 0; i < parts.length; i += 2) {
67
+ const text = parts[i] ?? "";
68
+ const end = parts[i + 1] ?? "";
69
+ if (text === "" && end === "" && i > 0)
70
+ break;
71
+ lines.push({ text, end });
72
+ }
73
+ return lines;
74
+ }
75
+ function dominantEnd(lines) {
76
+ const counts = new Map();
77
+ for (const { end } of lines) {
78
+ if (end === "")
79
+ continue;
80
+ counts.set(end, (counts.get(end) ?? 0) + 1);
81
+ }
82
+ let best = "\n";
83
+ let bestCount = 0;
84
+ for (const [end, count] of counts) {
85
+ if (count > bestCount) {
86
+ best = end;
87
+ bestCount = count;
88
+ }
89
+ }
90
+ return best;
91
+ }
92
+ export function reencode(newContent, decoded) {
93
+ const oldLines = tokenize(decoded.raw);
94
+ const newLines = tokenize(newContent);
95
+ const dominant = dominantEnd(oldLines);
96
+ const mapped = newLines.map(() => null);
97
+ const parts = diffArrays(oldLines.map((l) => l.text), newLines.map((l) => l.text));
98
+ let oi = 0;
99
+ let ni = 0;
100
+ for (const part of parts) {
101
+ const count = part.count ?? part.value.length;
102
+ if (part.added) {
103
+ ni += count;
104
+ }
105
+ else if (part.removed) {
106
+ oi += count;
107
+ }
108
+ else {
109
+ for (let k = 0; k < count; k++) {
110
+ mapped[ni] = oldLines[oi]?.end ?? null;
111
+ oi++;
112
+ ni++;
113
+ }
114
+ }
115
+ }
116
+ let out = "";
117
+ for (let i = 0; i < newLines.length; i++) {
118
+ const line = newLines[i];
119
+ if (line === undefined)
120
+ continue;
121
+ out += line.text;
122
+ if (line.end === "")
123
+ continue;
124
+ const orig = mapped[i];
125
+ out += orig !== null && orig !== "" ? orig : dominant;
126
+ }
127
+ return decoded.bom ? BOM + out : out;
128
+ }
129
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/lib/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,GAAG,GAAG,GAAG,CAAC;AAkBhB,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,QAAQ,GAAa,MAAM,CAAC;IAChC,IAAI,GAAW,CAAC;IAChB,IAAI,GAAG,GAAG,KAAK,CAAC;IAEhB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1D,QAAQ,GAAG,SAAS,CAAC;QACrB,GAAG,GAAG,IAAI,CAAC;QACX,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,QAAQ,GAAG,SAAS,CAAC;QACrB,GAAG,GAAG,IAAI,CAAC;QACX,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,IAAI,EAAE,CAAC;;gBAC/C,EAAE,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAgC;IAC1E,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAOD,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACtC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,IAAI,GAAG,GAAG,CAAC;YACX,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,UAAkB,EAAE,OAAoB;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAsB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,CACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5B,CAAC;IACF,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,EAAE,IAAI,KAAK,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,EAAE,IAAI,KAAK,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;gBACvC,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,CAAC;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE;YAAE,SAAS;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type DecodedText } from "./text.js";
2
+ export declare function readTextFile(target: string, relForError: string, maxBytes: number): Promise<DecodedText>;
3
+ export declare function readTextBuffer(target: string, maxBytes: number): Promise<DecodedText | null>;
4
+ //# sourceMappingURL=textfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textfile.d.ts","sourceRoot":"","sources":["../../src/lib/textfile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAazD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgB7B"}
@@ -0,0 +1,55 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { ToolError, fsError } from "../errors.js";
3
+ import { isBinary, isUtf16Bom } from "./binary.js";
4
+ import { decodeText } from "./text.js";
5
+ function rejectIfUnreadable(buf, relForError) {
6
+ // A UTF-16 (BOM) file legitimately contains NUL bytes; decodeText handles it, so it is not
7
+ // binary. Other NUL-bearing files are refused.
8
+ if (isUtf16Bom(buf))
9
+ return;
10
+ if (isBinary(buf)) {
11
+ throw new ToolError("is_binary", `File appears to be binary: ${relForError}`, {
12
+ path: relForError,
13
+ });
14
+ }
15
+ }
16
+ export async function readTextFile(target, relForError, maxBytes) {
17
+ let stat;
18
+ try {
19
+ stat = await fs.stat(target);
20
+ }
21
+ catch (err) {
22
+ throw fsError(err, relForError);
23
+ }
24
+ if (stat.isDirectory()) {
25
+ throw new ToolError("not_a_file", `Path is a directory: ${relForError}`, { path: relForError });
26
+ }
27
+ if (stat.size > maxBytes) {
28
+ throw new ToolError("too_large", `File is ${stat.size} bytes, exceeding the ${maxBytes}-byte limit (raise MAX_FILE_BYTES): ${relForError}`, { path: relForError, size: stat.size, limit: maxBytes });
29
+ }
30
+ const buf = await fs.readFile(target);
31
+ rejectIfUnreadable(buf, relForError);
32
+ return decodeText(buf);
33
+ }
34
+ export async function readTextBuffer(target, maxBytes) {
35
+ let stat;
36
+ try {
37
+ stat = await fs.stat(target);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ if (stat.size > maxBytes)
43
+ return null;
44
+ let buf;
45
+ try {
46
+ buf = await fs.readFile(target);
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ if (isBinary(buf))
52
+ return null;
53
+ return decodeText(buf);
54
+ }
55
+ //# sourceMappingURL=textfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textfile.js","sourceRoot":"","sources":["../../src/lib/textfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAC;AAEzD,SAAS,kBAAkB,CAAC,GAAW,EAAE,WAAmB;IAC1D,2FAA2F;IAC3F,+CAA+C;IAC/C,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,8BAA8B,WAAW,EAAE,EAAE;YAC5E,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,WAAmB,EACnB,QAAgB;IAEhB,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,GAA4B,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE,wBAAwB,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CACjB,WAAW,EACX,WAAW,IAAI,CAAC,IAAI,yBAAyB,QAAQ,uCAAuC,WAAW,EAAE,EACzG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CACxD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,QAAgB;IAEhB,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function uniqueToken(): string;
2
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
@@ -0,0 +1,6 @@
1
+ import { randomBytes } from "node:crypto";
2
+ let counter = 0;
3
+ export function uniqueToken() {
4
+ return `${process.pid}-${Date.now()}-${counter++}-${randomBytes(6).toString("hex")}`;
5
+ }
6
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/lib/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACvF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "./types.js";
2
+ export declare const applyPatchTool: ToolDef;
3
+ //# sourceMappingURL=apply-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAoD1C,eAAO,MAAM,cAAc,EAAE,OAwD5B,CAAC"}
@@ -0,0 +1,221 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { applyPatch, parsePatch } from "diff";
3
+ import { ToolError, fsError } from "../errors.js";
4
+ import { resolvePath, displayPath } from "../lib/paths.js";
5
+ import { applyOpsAtomic, withFileLocks } from "../lib/atomic.js";
6
+ import { encodeText, reencode } from "../lib/text.js";
7
+ import { readTextFile } from "../lib/textfile.js";
8
+ function cleanName(name) {
9
+ if (!name)
10
+ return undefined;
11
+ if (name === "/dev/null")
12
+ return "/dev/null";
13
+ const noTab = name.split("\t")[0] ?? name;
14
+ return noTab.replace(/^[ab]\//, "");
15
+ }
16
+ async function readEditableFile(target, rel, maxBytes) {
17
+ const decoded = await readTextFile(target, rel, maxBytes);
18
+ if (decoded.encoding !== "utf8") {
19
+ throw new ToolError("is_binary", `Patching ${decoded.encoding} files is not supported (the file would be rewritten as ` +
20
+ `UTF-8): ${rel}`, { path: rel, encoding: decoded.encoding });
21
+ }
22
+ return decoded;
23
+ }
24
+ function countChanges(p) {
25
+ let adds = 0;
26
+ let dels = 0;
27
+ for (const h of p.hunks) {
28
+ for (const line of h.lines) {
29
+ if (line.startsWith("+"))
30
+ adds++;
31
+ else if (line.startsWith("-"))
32
+ dels++;
33
+ }
34
+ }
35
+ return { adds, dels };
36
+ }
37
+ function firstFailingHunk(source, p) {
38
+ let cur = source;
39
+ for (let i = 0; i < p.hunks.length; i++) {
40
+ const hunk = p.hunks[i];
41
+ if (hunk === undefined)
42
+ continue;
43
+ const single = { ...p, hunks: [hunk] };
44
+ const r = applyPatch(cur, single);
45
+ if (r === false)
46
+ return i + 1;
47
+ cur = r;
48
+ }
49
+ return undefined;
50
+ }
51
+ export const applyPatchTool = {
52
+ name: "apply_patch",
53
+ description: "Apply a unified diff across one or more files in a single atomic call (modify, create via " +
54
+ "`--- /dev/null`, delete via `+++ /dev/null`, rename/move when the old and new paths differ). " +
55
+ "Hunks are located by their context lines with a small line-offset tolerance; a hunk whose " +
56
+ "context does not match fails (`patch_failed`, naming the file and hunk) and NOTHING is " +
57
+ "written. Use for changes spanning MANY files; for several edits to a single file use " +
58
+ "multi_edit.",
59
+ inputSchema: {
60
+ type: "object",
61
+ properties: {
62
+ patch: {
63
+ type: "string",
64
+ description: "A unified diff with --- / +++ file headers and @@ hunks. File paths come from the " +
65
+ "headers (a/ and b/ prefixes are stripped) and resolve like any path; a block whose old " +
66
+ "and new paths differ renames/moves the file. Hunk bodies use LF line endings.",
67
+ },
68
+ },
69
+ required: ["patch"],
70
+ additionalProperties: false,
71
+ },
72
+ async handler(args, config) {
73
+ const patchText = args.patch;
74
+ let parsed;
75
+ try {
76
+ parsed = parsePatch(patchText);
77
+ }
78
+ catch (err) {
79
+ throw new ToolError("invalid_input", `Malformed patch: ${err.message}`);
80
+ }
81
+ if (parsed.length === 0) {
82
+ throw new ToolError("invalid_input", "Patch contains no applicable hunks");
83
+ }
84
+ const actionable = parsed.some((p) => {
85
+ if (p.hunks.length > 0)
86
+ return true;
87
+ const o = cleanName(p.oldFileName);
88
+ const n = cleanName(p.newFileName);
89
+ return !!o && !!n && o !== "/dev/null" && n !== "/dev/null" && o !== n;
90
+ });
91
+ if (!actionable) {
92
+ throw new ToolError("invalid_input", "Patch contains no applicable hunks");
93
+ }
94
+ const lockTargets = [];
95
+ for (const p of parsed) {
96
+ for (const name of [cleanName(p.oldFileName), cleanName(p.newFileName)]) {
97
+ if (name && name !== "/dev/null")
98
+ lockTargets.push(resolvePath(name, config.workspaceRoot, config.confineToWorkspace));
99
+ }
100
+ }
101
+ return withFileLocks(lockTargets, () => applyParsed(parsed, config));
102
+ },
103
+ };
104
+ async function applyParsed(parsed, config) {
105
+ const ops = [];
106
+ const summary = [];
107
+ const seen = new Set();
108
+ const claim = (abs, rel) => {
109
+ if (seen.has(abs)) {
110
+ throw new ToolError("invalid_input", `Patch contains multiple blocks for ${rel}; combine them into a single block.`, { path: rel });
111
+ }
112
+ seen.add(abs);
113
+ };
114
+ for (const p of parsed) {
115
+ const oldName = cleanName(p.oldFileName);
116
+ const newName = cleanName(p.newFileName);
117
+ const isCreate = oldName === "/dev/null";
118
+ const isDelete = newName === "/dev/null";
119
+ const isRename = !isCreate && !isDelete && !!oldName && !!newName && oldName !== newName;
120
+ if (isRename) {
121
+ const absFrom = resolvePath(oldName, config.workspaceRoot, config.confineToWorkspace);
122
+ const absTo = resolvePath(newName, config.workspaceRoot, config.confineToWorkspace);
123
+ if (absFrom !== absTo) {
124
+ const relFrom = displayPath(absFrom, config.workspaceRoot);
125
+ const relTo = displayPath(absTo, config.workspaceRoot);
126
+ claim(absFrom, relFrom);
127
+ claim(absTo, relTo);
128
+ const decoded = await readEditableFile(absFrom, relFrom, config.maxFileBytes);
129
+ const result = applyPatch(decoded.content, p);
130
+ if (result === false) {
131
+ const hunk = firstFailingHunk(decoded.content, p);
132
+ throw new ToolError("patch_failed", `Hunk did not apply cleanly in ${relFrom}`, {
133
+ file: relFrom,
134
+ ...(hunk !== undefined ? { hunk } : {}),
135
+ });
136
+ }
137
+ const { adds, dels } = countChanges(p);
138
+ if (p.hunks.length === 0 || result === decoded.content) {
139
+ ops.push({ type: "rename", path: absTo, from: absFrom });
140
+ summary.push(` R ${relFrom} -> ${relTo}`);
141
+ }
142
+ else {
143
+ ops.push({
144
+ type: "rename",
145
+ path: absTo,
146
+ from: absFrom,
147
+ content: reencode(result, decoded),
148
+ });
149
+ summary.push(` R ${relFrom} -> ${relTo} (+${adds} -${dels})`);
150
+ }
151
+ continue;
152
+ }
153
+ }
154
+ const relTarget = (isCreate ? newName : oldName);
155
+ if (!relTarget || relTarget === "/dev/null") {
156
+ throw new ToolError("invalid_input", "Patch is missing a valid file path");
157
+ }
158
+ const absTarget = resolvePath(relTarget, config.workspaceRoot, config.confineToWorkspace);
159
+ const rel = displayPath(absTarget, config.workspaceRoot);
160
+ claim(absTarget, rel);
161
+ let source = "";
162
+ let eol = "lf";
163
+ let bom = false;
164
+ let decoded = null;
165
+ if (!isCreate) {
166
+ decoded = await readEditableFile(absTarget, relTarget, config.maxFileBytes);
167
+ source = decoded.content;
168
+ eol = decoded.eol;
169
+ bom = decoded.bom;
170
+ }
171
+ const result = applyPatch(source, p);
172
+ if (result === false) {
173
+ const hunk = firstFailingHunk(source, p);
174
+ throw new ToolError("patch_failed", `Hunk did not apply cleanly in ${rel}`, {
175
+ file: rel,
176
+ ...(hunk !== undefined ? { hunk } : {}),
177
+ });
178
+ }
179
+ const { adds, dels } = countChanges(p);
180
+ if (isDelete) {
181
+ if (result !== "") {
182
+ throw new ToolError("invalid_input", `Delete patch for ${rel} does not remove the entire file`, { path: rel });
183
+ }
184
+ ops.push({ type: "delete", path: absTarget });
185
+ summary.push(` D ${rel} (+${adds} -${dels})`);
186
+ }
187
+ else if (isCreate) {
188
+ let alreadyExists = false;
189
+ try {
190
+ await fs.stat(absTarget);
191
+ alreadyExists = true;
192
+ }
193
+ catch (err) {
194
+ const e = err;
195
+ if (e.code !== "ENOENT")
196
+ throw fsError(e, relTarget);
197
+ }
198
+ if (alreadyExists) {
199
+ throw new ToolError("invalid_input", `Cannot create ${rel}: a file already exists there. Use a modify hunk with ` +
200
+ "context, or delete it first.", { path: rel });
201
+ }
202
+ ops.push({ type: "create", path: absTarget, content: encodeText(result, { eol, bom }) });
203
+ summary.push(` A ${rel} (+${adds} -${dels})`);
204
+ }
205
+ else {
206
+ const content = decoded ? reencode(result, decoded) : encodeText(result, { eol, bom });
207
+ ops.push({ type: "modify", path: absTarget, content });
208
+ summary.push(` M ${rel} (+${adds} -${dels})`);
209
+ }
210
+ }
211
+ try {
212
+ await applyOpsAtomic(ops);
213
+ }
214
+ catch (err) {
215
+ if (err instanceof ToolError)
216
+ throw err;
217
+ throw new ToolError("io_error", `Failed to apply patch: ${err.message}`);
218
+ }
219
+ return `Applied patch:\n${summary.join("\n")}`;
220
+ }
221
+ //# sourceMappingURL=apply-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "./types.js";
2
+ export declare const bash: ToolDef;
3
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AA4C1C,eAAO,MAAM,IAAI,EAAE,OA6ClB,CAAC"}