skyloom 1.17.0 → 1.18.1

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 (57) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/main.js +9 -0
  3. package/dist/cli/main.js.map +1 -1
  4. package/dist/core/agent.d.ts.map +1 -1
  5. package/dist/core/agent.js +8 -5
  6. package/dist/core/agent.js.map +1 -1
  7. package/dist/core/bus.d.ts.map +1 -1
  8. package/dist/core/bus.js +5 -3
  9. package/dist/core/bus.js.map +1 -1
  10. package/dist/core/logger.d.ts +15 -0
  11. package/dist/core/logger.d.ts.map +1 -1
  12. package/dist/core/logger.js +72 -2
  13. package/dist/core/logger.js.map +1 -1
  14. package/dist/core/patch.d.ts +59 -0
  15. package/dist/core/patch.d.ts.map +1 -0
  16. package/dist/core/patch.js +220 -0
  17. package/dist/core/patch.js.map +1 -0
  18. package/dist/core/protocol.d.ts +11 -0
  19. package/dist/core/protocol.d.ts.map +1 -0
  20. package/dist/core/protocol.js +39 -0
  21. package/dist/core/protocol.js.map +1 -0
  22. package/dist/core/search.d.ts +41 -0
  23. package/dist/core/search.d.ts.map +1 -0
  24. package/dist/core/search.js +156 -0
  25. package/dist/core/search.js.map +1 -0
  26. package/dist/core/security.d.ts.map +1 -1
  27. package/dist/core/security.js +2 -1
  28. package/dist/core/security.js.map +1 -1
  29. package/dist/core/tool.d.ts +8 -0
  30. package/dist/core/tool.d.ts.map +1 -1
  31. package/dist/core/tool.js +7 -0
  32. package/dist/core/tool.js.map +1 -1
  33. package/dist/tools/builtin.d.ts.map +1 -1
  34. package/dist/tools/builtin.js +68 -4
  35. package/dist/tools/builtin.js.map +1 -1
  36. package/dist/tools/websearch.d.ts +7 -1
  37. package/dist/tools/websearch.d.ts.map +1 -1
  38. package/dist/tools/websearch.js +19 -4
  39. package/dist/tools/websearch.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/cli/main.ts +7 -0
  42. package/src/core/agent.ts +7 -5
  43. package/src/core/bus.ts +6 -3
  44. package/src/core/logger.ts +40 -2
  45. package/src/core/patch.ts +176 -0
  46. package/src/core/protocol.ts +36 -0
  47. package/src/core/search.ts +138 -0
  48. package/src/core/security.ts +2 -1
  49. package/src/core/tool.ts +15 -0
  50. package/src/tools/builtin.ts +63 -4
  51. package/src/tools/websearch.ts +22 -6
  52. package/tests/logger.test.ts +44 -0
  53. package/tests/patch.test.ts +128 -0
  54. package/tests/protocol.test.ts +27 -0
  55. package/tests/search.test.ts +87 -0
  56. package/tests/tool.test.ts +44 -0
  57. package/tests/websearch.test.ts +24 -0
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * apply_patch — atomic, multi-file edits for larger refactors.
4
+ *
5
+ * Uses exact search/replace blocks (not line-number/context hunks), so it can't
6
+ * misapply against a drifted file: every SEARCH must match the current file
7
+ * content exactly and uniquely. The whole patch is validated first; disk is
8
+ * only touched once every operation is known to apply — so a bad block aborts
9
+ * the patch without leaving a half-applied tree.
10
+ *
11
+ * Format:
12
+ * *** Update File: path
13
+ * <<<<<<< SEARCH
14
+ * exact old text
15
+ * =======
16
+ * new text
17
+ * >>>>>>> REPLACE
18
+ * (one or more blocks per file)
19
+ *
20
+ * *** Add File: path
21
+ * full file content
22
+ *
23
+ * *** Delete File: path
24
+ *
25
+ * An optional `*** Begin Patch` / `*** End Patch` envelope is tolerated.
26
+ */
27
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
31
+ desc = { enumerable: true, get: function() { return m[k]; } };
32
+ }
33
+ Object.defineProperty(o, k2, desc);
34
+ }) : (function(o, m, k, k2) {
35
+ if (k2 === undefined) k2 = k;
36
+ o[k2] = m[k];
37
+ }));
38
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
39
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
40
+ }) : function(o, v) {
41
+ o["default"] = v;
42
+ });
43
+ var __importStar = (this && this.__importStar) || (function () {
44
+ var ownKeys = function(o) {
45
+ ownKeys = Object.getOwnPropertyNames || function (o) {
46
+ var ar = [];
47
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
48
+ return ar;
49
+ };
50
+ return ownKeys(o);
51
+ };
52
+ return function (mod) {
53
+ if (mod && mod.__esModule) return mod;
54
+ var result = {};
55
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
56
+ __setModuleDefault(result, mod);
57
+ return result;
58
+ };
59
+ })();
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.parsePatch = parsePatch;
62
+ exports.applyPatch = applyPatch;
63
+ const fs = __importStar(require("fs"));
64
+ const path = __importStar(require("path"));
65
+ const diff_1 = require("./diff");
66
+ const HDR_UPDATE = /^\*\*\* Update File:\s*(.+?)\s*$/;
67
+ const HDR_ADD = /^\*\*\* Add File:\s*(.+?)\s*$/;
68
+ const HDR_DELETE = /^\*\*\* Delete File:\s*(.+?)\s*$/;
69
+ const MARK_SEARCH = '<<<<<<< SEARCH';
70
+ const MARK_SEP = '=======';
71
+ const MARK_REPLACE = '>>>>>>> REPLACE';
72
+ function parsePatch(text) {
73
+ const lines = text.split(/\r?\n/);
74
+ const ops = [];
75
+ let i = 0;
76
+ const isHeader = (l) => l.startsWith('*** ');
77
+ while (i < lines.length) {
78
+ const line = lines[i];
79
+ if (line.startsWith('*** Begin Patch') || line.startsWith('*** End Patch')) {
80
+ i++;
81
+ continue;
82
+ }
83
+ if (line.trim() === '') {
84
+ i++;
85
+ continue;
86
+ }
87
+ let m;
88
+ if ((m = line.match(HDR_UPDATE))) {
89
+ const filePath = m[1];
90
+ i++;
91
+ const blocks = [];
92
+ while (i < lines.length && !isHeader(lines[i])) {
93
+ if (lines[i].trim() === '') {
94
+ i++;
95
+ continue;
96
+ }
97
+ if (lines[i] !== MARK_SEARCH) {
98
+ return { error: `Malformed Update block for '${filePath}': expected '${MARK_SEARCH}', got ${JSON.stringify(lines[i].slice(0, 40))}` };
99
+ }
100
+ i++;
101
+ const search = [];
102
+ while (i < lines.length && lines[i] !== MARK_SEP)
103
+ search.push(lines[i++]);
104
+ if (i >= lines.length)
105
+ return { error: `Unterminated SEARCH (missing '${MARK_SEP}') for '${filePath}'` };
106
+ i++; // consume separator
107
+ const replace = [];
108
+ while (i < lines.length && lines[i] !== MARK_REPLACE)
109
+ replace.push(lines[i++]);
110
+ if (i >= lines.length)
111
+ return { error: `Unterminated REPLACE (missing '${MARK_REPLACE}') for '${filePath}'` };
112
+ i++; // consume replace marker
113
+ blocks.push({ search: search.join('\n'), replace: replace.join('\n') });
114
+ }
115
+ if (blocks.length === 0)
116
+ return { error: `Update File '${filePath}' has no SEARCH/REPLACE blocks` };
117
+ ops.push({ op: 'update', path: filePath, blocks });
118
+ }
119
+ else if ((m = line.match(HDR_ADD))) {
120
+ const filePath = m[1];
121
+ i++;
122
+ const content = [];
123
+ while (i < lines.length && !isHeader(lines[i]))
124
+ content.push(lines[i++]);
125
+ while (content.length && content[content.length - 1] === '')
126
+ content.pop();
127
+ ops.push({ op: 'add', path: filePath, content: content.length ? content.join('\n') + '\n' : '' });
128
+ }
129
+ else if ((m = line.match(HDR_DELETE))) {
130
+ ops.push({ op: 'delete', path: m[1] });
131
+ i++;
132
+ }
133
+ else {
134
+ return { error: `Unexpected line outside any file section: ${JSON.stringify(line.slice(0, 60))}` };
135
+ }
136
+ }
137
+ if (ops.length === 0)
138
+ return { error: 'Patch contains no operations.' };
139
+ return { ops };
140
+ }
141
+ /**
142
+ * Validate every operation, then apply them all. Returns a human summary on
143
+ * success or an `Error: …` string on the first validation failure (no writes).
144
+ */
145
+ function applyPatch(text, opts = {}) {
146
+ const cwd = opts.cwd || process.cwd();
147
+ const parsed = parsePatch(text);
148
+ if ('error' in parsed)
149
+ return `Error: ${parsed.error}`;
150
+ const plan = [];
151
+ // ── Validate everything first (no disk mutation) ──
152
+ for (const op of parsed.ops) {
153
+ const abs = path.resolve(cwd, op.path);
154
+ if (opts.fenceCheck) {
155
+ const f = opts.fenceCheck(abs);
156
+ if (f)
157
+ return f;
158
+ }
159
+ if (op.op === 'update') {
160
+ if (!fs.existsSync(abs))
161
+ return `Error: Update target not found: ${op.path}`;
162
+ let content;
163
+ try {
164
+ content = fs.readFileSync(abs, 'utf8');
165
+ }
166
+ catch (e) {
167
+ return `Error: cannot read ${op.path}: ${e}`;
168
+ }
169
+ const orig = content;
170
+ for (const block of op.blocks) {
171
+ if (block.search === block.replace)
172
+ return `Error: a SEARCH/REPLACE block for ${op.path} is a no-op (identical).`;
173
+ const n = (0, diff_1.countOccurrences)(content, block.search);
174
+ if (n === 0)
175
+ return `Error: SEARCH block not found in ${op.path}: ${JSON.stringify(block.search.slice(0, 80))}`;
176
+ if (n > 1)
177
+ return `Error: SEARCH block is ambiguous in ${op.path} (appears ${n} times) — add more context to make it unique.`;
178
+ content = content.replace(block.search, () => block.replace); // literal replacement
179
+ }
180
+ plan.push({ op: 'update', path: op.path, abs, oldContent: orig, newContent: content });
181
+ }
182
+ else if (op.op === 'add') {
183
+ if (fs.existsSync(abs))
184
+ return `Error: Add target already exists: ${op.path} (use Update File to modify it)`;
185
+ plan.push({ op: 'add', path: op.path, abs, newContent: op.content });
186
+ }
187
+ else {
188
+ if (!fs.existsSync(abs))
189
+ return `Error: Delete target not found: ${op.path}`;
190
+ plan.push({ op: 'delete', path: op.path, abs });
191
+ }
192
+ }
193
+ // ── Apply (validation passed for all ops) ──
194
+ const summary = [];
195
+ for (const p of plan) {
196
+ try {
197
+ if (p.op === 'update') {
198
+ opts.snapshot?.(p.abs);
199
+ fs.writeFileSync(p.abs, p.newContent, 'utf8');
200
+ const d = (0, diff_1.unifiedDiff)(p.oldContent, p.newContent, { context: 0 });
201
+ summary.push(`~ ${p.path} (+${d.stat.added} -${d.stat.removed})`);
202
+ }
203
+ else if (p.op === 'add') {
204
+ fs.mkdirSync(path.dirname(p.abs), { recursive: true });
205
+ fs.writeFileSync(p.abs, p.newContent, 'utf8');
206
+ summary.push(`+ ${p.path} (new)`);
207
+ }
208
+ else {
209
+ opts.snapshot?.(p.abs);
210
+ fs.unlinkSync(p.abs);
211
+ summary.push(`- ${p.path} (deleted)`);
212
+ }
213
+ }
214
+ catch (e) {
215
+ return `Error: patch validated but failed while writing ${p.path}: ${e}\nPartial summary:\n${summary.join('\n')}`;
216
+ }
217
+ }
218
+ return `Applied patch — ${plan.length} file${plan.length !== 1 ? 's' : ''}:\n${summary.join('\n')}`;
219
+ }
220
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/core/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Engineering protocol — the working discipline injected into every agent's
3
+ * system prompt so it operates like a senior engineer, not just a code typist.
4
+ *
5
+ * Kept as a pure function (no `this`) so it can be unit-tested and evolved in
6
+ * one place. It deliberately names the project's own capabilities
7
+ * (code_search / get_diagnostics / run_bash) so the model actually uses the
8
+ * read→edit→verify loop instead of guessing.
9
+ */
10
+ export declare function engineeringProtocol(lang?: string): string;
11
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,MAAa,GAAG,MAAM,CAyB/D"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Engineering protocol — the working discipline injected into every agent's
4
+ * system prompt so it operates like a senior engineer, not just a code typist.
5
+ *
6
+ * Kept as a pure function (no `this`) so it can be unit-tested and evolved in
7
+ * one place. It deliberately names the project's own capabilities
8
+ * (code_search / get_diagnostics / run_bash) so the model actually uses the
9
+ * read→edit→verify loop instead of guessing.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.engineeringProtocol = engineeringProtocol;
13
+ function engineeringProtocol(lang = 'zh') {
14
+ if (lang === 'en') {
15
+ return [
16
+ '## Engineering Standard (work like a senior engineer)',
17
+ '- Understand before changing: read the target code and its tests/callers (code_search → read_file) before editing. Match the surrounding style, naming, and existing patterns.',
18
+ '- Reuse first: prefer utilities/libraries already in the project over inventing new ones; check how similar things are done here.',
19
+ '- Root cause, not symptom: reproduce the failure, find why it happens, fix the cause — never paper over it or hardcode around a test.',
20
+ '- Minimal, surgical diffs: change only what the task needs. No drive-by reformatting or unrelated edits.',
21
+ '- Verify your work: after editing code, run get_diagnostics on the changed files and run the project tests/build (run_bash). Do not claim done until it is green; report the real result.',
22
+ '- Be honest about uncertainty: never fabricate APIs, file paths, or results. If unsure, say so and check.',
23
+ '- Security & performance: validate inputs, handle errors for real, avoid obvious injection / DoS / performance traps.',
24
+ 'You may read and modify Skyloom\'s own source.',
25
+ ].join('\n');
26
+ }
27
+ return [
28
+ '## 工程标准(像资深工程师一样工作)',
29
+ '- 改之前先理解:动手前先读目标代码及其测试/调用方(code_search → read_file),沿用周围的风格、命名与既有模式。',
30
+ '- 优先复用:优先用项目里已有的工具/库,而不是另造轮子;先看相似功能此处怎么做。',
31
+ '- 治根因不治症状:先复现失败,定位根本原因再修;绝不糊弄,绝不为了通过测试而硬编码。',
32
+ '- 最小手术式改动:只改任务所需,不顺手重排格式、不夹带无关修改。',
33
+ '- 改完必验证:改代码后对改动文件跑 get_diagnostics,并跑项目测试/构建(run_bash);未变绿不算完成,如实汇报真实结果。',
34
+ '- 诚实面对不确定:绝不编造 API、文件路径或结果;不确定就说明并去核实。',
35
+ '- 安全与性能:校验输入、做真实的错误处理,避开明显的注入/DoS/性能陷阱。',
36
+ '你可以阅读和修改 Skyloom 自身源码。',
37
+ ].join('\n');
38
+ }
39
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAEH,kDAyBC;AAzBD,SAAgB,mBAAmB,CAAC,OAAe,IAAI;IACrD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,uDAAuD;YACvD,gLAAgL;YAChL,mIAAmI;YACnI,uIAAuI;YACvI,0GAA0G;YAC1G,2LAA2L;YAC3L,2GAA2G;YAC3G,uHAAuH;YACvH,gDAAgD;SACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,qBAAqB;QACrB,sEAAsE;QACtE,2CAA2C;QAC3C,6CAA6C;QAC7C,mCAAmC;QACnC,0EAA0E;QAC1E,wCAAwC;QACxC,yCAAyC;QACzC,wBAAwB;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Code search — a dependency-light, cross-platform engine for "find where X is
3
+ * used and read it in context". Backs the code_search tool and is the fallback
4
+ * for grep when ripgrep/grep aren't installed (common on Windows), so search
5
+ * never silently returns nothing just because a binary is missing.
6
+ */
7
+ export interface SearchOptions {
8
+ pattern: string;
9
+ /** Root directory to search (default: cwd). */
10
+ root?: string;
11
+ /** Glob to restrict files (e.g. "**\/*.ts"). Default: all files. */
12
+ glob?: string;
13
+ /** Case-insensitive match (default false). */
14
+ ignoreCase?: boolean;
15
+ /** Treat pattern as a regular expression (default true). */
16
+ regex?: boolean;
17
+ /** Lines of context around each match (default 0). */
18
+ context?: number;
19
+ /** Cap on total matches returned (default 200). */
20
+ maxResults?: number;
21
+ /** Skip files larger than this many bytes (default 2 MiB). */
22
+ maxFileBytes?: number;
23
+ }
24
+ export interface SearchMatch {
25
+ file: string;
26
+ line: number;
27
+ text: string;
28
+ before?: string[];
29
+ after?: string[];
30
+ }
31
+ export interface SearchResult {
32
+ matches: SearchMatch[];
33
+ filesScanned: number;
34
+ truncated: boolean;
35
+ error?: string;
36
+ }
37
+ /** Pure-JS recursive code search. No external process required. */
38
+ export declare function searchCode(opts: SearchOptions): SearchResult;
39
+ /** Render a SearchResult as ripgrep-style `file:line:text` (with context). */
40
+ export declare function formatSearchResult(res: SearchResult): string;
41
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAeD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CA2D5D;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAiB5D"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * Code search — a dependency-light, cross-platform engine for "find where X is
4
+ * used and read it in context". Backs the code_search tool and is the fallback
5
+ * for grep when ripgrep/grep aren't installed (common on Windows), so search
6
+ * never silently returns nothing just because a binary is missing.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.searchCode = searchCode;
43
+ exports.formatSearchResult = formatSearchResult;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const glob_1 = require("glob");
47
+ /** Directories never worth searching — vendored, generated, or VCS internals. */
48
+ const DEFAULT_IGNORES = [
49
+ '**/node_modules/**', '**/.git/**', '**/dist/**', '**/build/**',
50
+ '**/coverage/**', '**/.next/**', '**/out/**', '**/.cache/**',
51
+ '**/vendor/**', '**/.venv/**', '**/__pycache__/**',
52
+ ];
53
+ function looksBinary(buf) {
54
+ const n = Math.min(buf.length, 8000);
55
+ for (let i = 0; i < n; i++)
56
+ if (buf[i] === 0)
57
+ return true; // NUL byte ⇒ binary
58
+ return false;
59
+ }
60
+ /** Pure-JS recursive code search. No external process required. */
61
+ function searchCode(opts) {
62
+ const root = path.resolve(opts.root || process.cwd());
63
+ const maxResults = opts.maxResults ?? 200;
64
+ const maxFileBytes = opts.maxFileBytes ?? 2 * 1024 * 1024;
65
+ const context = Math.max(0, opts.context ?? 0);
66
+ let matcher;
67
+ if (opts.regex === false) {
68
+ const needle = opts.ignoreCase ? opts.pattern.toLowerCase() : opts.pattern;
69
+ matcher = (line) => (opts.ignoreCase ? line.toLowerCase() : line).includes(needle);
70
+ }
71
+ else {
72
+ let re;
73
+ try {
74
+ re = new RegExp(opts.pattern, opts.ignoreCase ? 'i' : '');
75
+ }
76
+ catch (e) {
77
+ return { matches: [], filesScanned: 0, truncated: false, error: `invalid regex: ${e}` };
78
+ }
79
+ matcher = (line) => re.test(line);
80
+ }
81
+ let files;
82
+ try {
83
+ files = (0, glob_1.globSync)(opts.glob || '**/*', {
84
+ cwd: root, nodir: true, dot: false, ignore: DEFAULT_IGNORES,
85
+ });
86
+ }
87
+ catch (e) {
88
+ return { matches: [], filesScanned: 0, truncated: false, error: `glob failed: ${e}` };
89
+ }
90
+ const matches = [];
91
+ let filesScanned = 0;
92
+ let truncated = false;
93
+ for (const rel of files) {
94
+ if (matches.length >= maxResults) {
95
+ truncated = true;
96
+ break;
97
+ }
98
+ const abs = path.join(root, rel);
99
+ let buf;
100
+ try {
101
+ const stat = fs.statSync(abs);
102
+ if (stat.size > maxFileBytes)
103
+ continue;
104
+ buf = fs.readFileSync(abs);
105
+ }
106
+ catch {
107
+ continue;
108
+ }
109
+ if (looksBinary(buf))
110
+ continue;
111
+ filesScanned++;
112
+ const lines = buf.toString('utf8').split('\n');
113
+ for (let i = 0; i < lines.length; i++) {
114
+ if (!matcher(lines[i]))
115
+ continue;
116
+ const m = { file: rel.split(path.sep).join('/'), line: i + 1, text: lines[i] };
117
+ if (context > 0) {
118
+ m.before = lines.slice(Math.max(0, i - context), i);
119
+ m.after = lines.slice(i + 1, i + 1 + context);
120
+ }
121
+ matches.push(m);
122
+ if (matches.length >= maxResults) {
123
+ truncated = true;
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ return { matches, filesScanned, truncated };
129
+ }
130
+ /** Render a SearchResult as ripgrep-style `file:line:text` (with context). */
131
+ function formatSearchResult(res) {
132
+ if (res.error)
133
+ return `Search error: ${res.error}`;
134
+ if (res.matches.length === 0)
135
+ return 'No matches found.';
136
+ const out = [];
137
+ let lastFile = '';
138
+ for (const m of res.matches) {
139
+ if (m.file !== lastFile) {
140
+ if (out.length)
141
+ out.push('');
142
+ lastFile = m.file;
143
+ }
144
+ for (let k = 0; k < (m.before?.length || 0); k++) {
145
+ out.push(`${m.file}:${m.line - (m.before.length - k)}- ${m.before[k]}`);
146
+ }
147
+ out.push(`${m.file}:${m.line}: ${m.text}`);
148
+ for (let k = 0; k < (m.after?.length || 0); k++) {
149
+ out.push(`${m.file}:${m.line + k + 1}- ${m.after[k]}`);
150
+ }
151
+ }
152
+ if (res.truncated)
153
+ out.push(`\n…[results truncated at ${res.matches.length} matches — narrow the pattern or glob]`);
154
+ return out.join('\n');
155
+ }
156
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,7 @@ const TOOL_DANGER_MAP = {
80
80
  current_time: DangerLevel.SAFE,
81
81
  write_file: DangerLevel.LOW,
82
82
  edit_file: DangerLevel.LOW,
83
+ apply_patch: DangerLevel.LOW,
83
84
  copy_file: DangerLevel.LOW,
84
85
  move_file: DangerLevel.LOW,
85
86
  make_directory: DangerLevel.LOW,
@@ -134,7 +135,7 @@ exports.PERMISSION_MODE_ALIASES = {
134
135
  yolo: "bypass",
135
136
  };
136
137
  /** Tools that mutate the filesystem — the ones acceptEdits waves through. */
137
- const EDIT_TOOL_RE = /^(write_|edit_|append_|replace_|create_|make_|copy_|move_|delete_)/;
138
+ const EDIT_TOOL_RE = /^(write_|edit_|append_|replace_|create_|make_|copy_|move_|delete_)|^apply_patch$/;
138
139
  function isEditTool(toolName) { return EDIT_TOOL_RE.test(toolName); }
139
140
  /**
140
141
  * Pure permission decision (red-line is gated separately, before this). Keeps
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,14 @@ export interface ToolDefinition {
38
38
  */
39
39
  idempotent?: boolean;
40
40
  timeout?: number;
41
+ /**
42
+ * Optional output guard: inspect the handler's result and return an error
43
+ * message if it's not valid (else null/undefined). A non-null return makes
44
+ * the call fail — routed through the same retry + circuit-breaker path as a
45
+ * thrown error — so a tool/plugin can reject malformed output instead of
46
+ * passing garbage back to the model as "success".
47
+ */
48
+ validateOutput?: (result: string, params: Record<string, unknown>) => string | null | undefined;
41
49
  }
42
50
  /** Order-stable JSON key so {a,b} and {b,a} hash to the same cache/dedup key. */
43
51
  export declare function stableStringify(value: unknown): string;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/core/tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/core/tool.ts"],"names":[],"mappings":"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"}
package/dist/core/tool.js CHANGED
@@ -352,6 +352,13 @@ class ToolRegistry extends events_1.EventEmitter {
352
352
  if (timer)
353
353
  clearTimeout(timer);
354
354
  }
355
+ // Output guard: a non-null message means the result is invalid. Throw so
356
+ // it flows through the same retry + breaker path as any other failure.
357
+ if (tool.validateOutput) {
358
+ const outErr = tool.validateOutput(result, params);
359
+ if (outErr)
360
+ throw new Error(`invalid tool output: ${outErr}`);
361
+ }
355
362
  const duration = Date.now() - startTime;
356
363
  // Cache result
357
364
  if (tool.cacheable) {