bernard-agent 0.6.1 → 0.7.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.
- package/README.md +23 -3
- package/dist/agent.d.ts +3 -1
- package/dist/agent.js +58 -25
- package/dist/agent.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.js +19 -9
- package/dist/config.js.map +1 -1
- package/dist/cron/runner.js +2 -0
- package/dist/cron/runner.js.map +1 -1
- package/dist/repl.js +125 -91
- package/dist/repl.js.map +1 -1
- package/dist/specialist-candidates.d.ts +11 -0
- package/dist/specialist-candidates.js +17 -0
- package/dist/specialist-candidates.js.map +1 -1
- package/dist/specialists.d.ts +7 -3
- package/dist/specialists.js +28 -3
- package/dist/specialists.js.map +1 -1
- package/dist/tools/file.d.ts +154 -0
- package/dist/tools/file.js +396 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/index.d.ts +4 -1
- package/dist/tools/index.js +5 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/shell.js +1 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/specialist-run.d.ts +9 -1
- package/dist/tools/specialist-run.js +26 -3
- package/dist/tools/specialist-run.js.map +1 -1
- package/dist/tools/specialist.d.ts +11 -1
- package/dist/tools/specialist.js +69 -6
- package/dist/tools/specialist.js.map +1 -1
- package/dist/tools/subagent.d.ts +9 -1
- package/dist/tools/subagent.js +23 -3
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task.d.ts +52 -13
- package/dist/tools/task.js +96 -28
- package/dist/tools/task.js.map +1 -1
- package/package.json +1 -1
package/dist/specialists.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specialists.js","sourceRoot":"","sources":["../src/specialists.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAClC,yCAA6C;AAC7C,2DAAqD;
|
|
1
|
+
{"version":3,"file":"specialists.js","sourceRoot":"","sources":["../src/specialists.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** SHA-256 of content, first 16 hex chars. */
|
|
3
|
+
export declare function hashContent(content: string): string;
|
|
4
|
+
/** Check for null bytes in first 8KB — indicates binary file. */
|
|
5
|
+
export declare function isBinaryContent(buffer: Buffer): boolean;
|
|
6
|
+
interface NormalizedEdit {
|
|
7
|
+
action: 'replace' | 'insert' | 'delete' | 'append';
|
|
8
|
+
affectedLine: number;
|
|
9
|
+
original: {
|
|
10
|
+
action: string;
|
|
11
|
+
line?: number;
|
|
12
|
+
before?: number;
|
|
13
|
+
lines?: number[];
|
|
14
|
+
content?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Sort edits by affected line descending so high-line edits are applied first. */
|
|
18
|
+
export declare function sortEditsDescending(edits: Array<{
|
|
19
|
+
action: 'replace' | 'insert' | 'delete' | 'append';
|
|
20
|
+
line?: number;
|
|
21
|
+
before?: number;
|
|
22
|
+
lines?: number[];
|
|
23
|
+
content?: string;
|
|
24
|
+
}>): NormalizedEdit[];
|
|
25
|
+
/** Detect conflicting edits — same line targeted by multiple replace/delete operations. */
|
|
26
|
+
export declare function detectConflicts(edits: Array<{
|
|
27
|
+
action: 'replace' | 'insert' | 'delete' | 'append';
|
|
28
|
+
line?: number;
|
|
29
|
+
lines?: number[];
|
|
30
|
+
}>): string[];
|
|
31
|
+
/** Generate an LLM-friendly diff summary. */
|
|
32
|
+
export declare function generateDiffSummary(oldLines: string[], edits: Array<{
|
|
33
|
+
action: 'replace' | 'insert' | 'delete' | 'append';
|
|
34
|
+
line?: number;
|
|
35
|
+
before?: number;
|
|
36
|
+
lines?: number[];
|
|
37
|
+
content?: string;
|
|
38
|
+
}>): string;
|
|
39
|
+
/** Creates file_read_lines and file_edit_lines tools. */
|
|
40
|
+
export declare function createFileTools(): {
|
|
41
|
+
file_read_lines: import("ai").Tool<z.ZodObject<{
|
|
42
|
+
path: z.ZodString;
|
|
43
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
44
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
path: string;
|
|
47
|
+
limit?: number | undefined;
|
|
48
|
+
offset?: number | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
path: string;
|
|
51
|
+
limit?: number | undefined;
|
|
52
|
+
offset?: number | undefined;
|
|
53
|
+
}>, {
|
|
54
|
+
path: string;
|
|
55
|
+
total_lines: number;
|
|
56
|
+
offset: number;
|
|
57
|
+
limit: number;
|
|
58
|
+
lines: Array<{
|
|
59
|
+
num: number;
|
|
60
|
+
content: string;
|
|
61
|
+
}>;
|
|
62
|
+
truncated: boolean;
|
|
63
|
+
} | {
|
|
64
|
+
error: string;
|
|
65
|
+
}> & {
|
|
66
|
+
execute: (args: {
|
|
67
|
+
path: string;
|
|
68
|
+
limit?: number | undefined;
|
|
69
|
+
offset?: number | undefined;
|
|
70
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<{
|
|
71
|
+
path: string;
|
|
72
|
+
total_lines: number;
|
|
73
|
+
offset: number;
|
|
74
|
+
limit: number;
|
|
75
|
+
lines: Array<{
|
|
76
|
+
num: number;
|
|
77
|
+
content: string;
|
|
78
|
+
}>;
|
|
79
|
+
truncated: boolean;
|
|
80
|
+
} | {
|
|
81
|
+
error: string;
|
|
82
|
+
}>;
|
|
83
|
+
};
|
|
84
|
+
file_edit_lines: import("ai").Tool<z.ZodObject<{
|
|
85
|
+
path: z.ZodString;
|
|
86
|
+
edits: z.ZodArray<z.ZodObject<{
|
|
87
|
+
action: z.ZodEnum<["replace", "insert", "delete", "append"]>;
|
|
88
|
+
line: z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
before: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
lines: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
91
|
+
content: z.ZodOptional<z.ZodString>;
|
|
92
|
+
}, "strip", z.ZodTypeAny, {
|
|
93
|
+
action: "replace" | "delete" | "insert" | "append";
|
|
94
|
+
content?: string | undefined;
|
|
95
|
+
line?: number | undefined;
|
|
96
|
+
before?: number | undefined;
|
|
97
|
+
lines?: number[] | undefined;
|
|
98
|
+
}, {
|
|
99
|
+
action: "replace" | "delete" | "insert" | "append";
|
|
100
|
+
content?: string | undefined;
|
|
101
|
+
line?: number | undefined;
|
|
102
|
+
before?: number | undefined;
|
|
103
|
+
lines?: number[] | undefined;
|
|
104
|
+
}>, "many">;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
path: string;
|
|
107
|
+
edits: {
|
|
108
|
+
action: "replace" | "delete" | "insert" | "append";
|
|
109
|
+
content?: string | undefined;
|
|
110
|
+
line?: number | undefined;
|
|
111
|
+
before?: number | undefined;
|
|
112
|
+
lines?: number[] | undefined;
|
|
113
|
+
}[];
|
|
114
|
+
}, {
|
|
115
|
+
path: string;
|
|
116
|
+
edits: {
|
|
117
|
+
action: "replace" | "delete" | "insert" | "append";
|
|
118
|
+
content?: string | undefined;
|
|
119
|
+
line?: number | undefined;
|
|
120
|
+
before?: number | undefined;
|
|
121
|
+
lines?: number[] | undefined;
|
|
122
|
+
}[];
|
|
123
|
+
}>, {
|
|
124
|
+
path: string;
|
|
125
|
+
old_hash: string;
|
|
126
|
+
new_hash: string;
|
|
127
|
+
edits_applied: number;
|
|
128
|
+
total_lines: number;
|
|
129
|
+
diff: string;
|
|
130
|
+
} | {
|
|
131
|
+
error: string;
|
|
132
|
+
}> & {
|
|
133
|
+
execute: (args: {
|
|
134
|
+
path: string;
|
|
135
|
+
edits: {
|
|
136
|
+
action: "replace" | "delete" | "insert" | "append";
|
|
137
|
+
content?: string | undefined;
|
|
138
|
+
line?: number | undefined;
|
|
139
|
+
before?: number | undefined;
|
|
140
|
+
lines?: number[] | undefined;
|
|
141
|
+
}[];
|
|
142
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<{
|
|
143
|
+
path: string;
|
|
144
|
+
old_hash: string;
|
|
145
|
+
new_hash: string;
|
|
146
|
+
edits_applied: number;
|
|
147
|
+
total_lines: number;
|
|
148
|
+
diff: string;
|
|
149
|
+
} | {
|
|
150
|
+
error: string;
|
|
151
|
+
}>;
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
export {};
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.hashContent = hashContent;
|
|
37
|
+
exports.isBinaryContent = isBinaryContent;
|
|
38
|
+
exports.sortEditsDescending = sortEditsDescending;
|
|
39
|
+
exports.detectConflicts = detectConflicts;
|
|
40
|
+
exports.generateDiffSummary = generateDiffSummary;
|
|
41
|
+
exports.createFileTools = createFileTools;
|
|
42
|
+
const ai_1 = require("ai");
|
|
43
|
+
const zod_1 = require("zod");
|
|
44
|
+
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const node_crypto_1 = require("node:crypto");
|
|
47
|
+
const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB
|
|
48
|
+
/** SHA-256 of content, first 16 hex chars. */
|
|
49
|
+
function hashContent(content) {
|
|
50
|
+
return (0, node_crypto_1.createHash)('sha256').update(content).digest('hex').slice(0, 16);
|
|
51
|
+
}
|
|
52
|
+
/** Check for null bytes in first 8KB — indicates binary file. */
|
|
53
|
+
function isBinaryContent(buffer) {
|
|
54
|
+
const len = Math.min(buffer.length, 8192);
|
|
55
|
+
for (let i = 0; i < len; i++) {
|
|
56
|
+
if (buffer[i] === 0)
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
/** Sort edits by affected line descending so high-line edits are applied first. */
|
|
62
|
+
function sortEditsDescending(edits) {
|
|
63
|
+
const normalized = edits.map((e) => {
|
|
64
|
+
let affectedLine;
|
|
65
|
+
switch (e.action) {
|
|
66
|
+
case 'replace':
|
|
67
|
+
affectedLine = e.line;
|
|
68
|
+
break;
|
|
69
|
+
case 'insert':
|
|
70
|
+
affectedLine = e.before;
|
|
71
|
+
break;
|
|
72
|
+
case 'delete':
|
|
73
|
+
affectedLine = Math.max(...(e.lines ?? [0]));
|
|
74
|
+
break;
|
|
75
|
+
case 'append':
|
|
76
|
+
affectedLine = Infinity;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
return { action: e.action, affectedLine, original: e };
|
|
80
|
+
});
|
|
81
|
+
return normalized.sort((a, b) => {
|
|
82
|
+
// Appends go last (applied after all positional edits), preserve original order among appends
|
|
83
|
+
if (a.action === 'append' && b.action === 'append')
|
|
84
|
+
return 0;
|
|
85
|
+
if (a.action === 'append' && b.action !== 'append')
|
|
86
|
+
return 1;
|
|
87
|
+
if (b.action === 'append' && a.action !== 'append')
|
|
88
|
+
return -1;
|
|
89
|
+
return b.affectedLine - a.affectedLine;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/** Detect conflicting edits — same line targeted by multiple replace/delete operations. */
|
|
93
|
+
function detectConflicts(edits) {
|
|
94
|
+
const errors = [];
|
|
95
|
+
const targeted = new Map();
|
|
96
|
+
for (const e of edits) {
|
|
97
|
+
if (e.action === 'replace' && e.line !== undefined) {
|
|
98
|
+
const existing = targeted.get(e.line) ?? [];
|
|
99
|
+
existing.push('replace');
|
|
100
|
+
targeted.set(e.line, existing);
|
|
101
|
+
}
|
|
102
|
+
if (e.action === 'delete' && e.lines) {
|
|
103
|
+
for (const ln of e.lines) {
|
|
104
|
+
const existing = targeted.get(ln) ?? [];
|
|
105
|
+
existing.push('delete');
|
|
106
|
+
targeted.set(ln, existing);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const [line, actions] of targeted) {
|
|
111
|
+
if (actions.length > 1) {
|
|
112
|
+
errors.push(`Line ${line} targeted by multiple operations: ${actions.join(', ')}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return errors;
|
|
116
|
+
}
|
|
117
|
+
/** Generate an LLM-friendly diff summary. */
|
|
118
|
+
function generateDiffSummary(oldLines, edits) {
|
|
119
|
+
const parts = [];
|
|
120
|
+
for (const e of edits) {
|
|
121
|
+
switch (e.action) {
|
|
122
|
+
case 'replace': {
|
|
123
|
+
const old = oldLines[e.line - 1] ?? '';
|
|
124
|
+
parts.push(`line ${e.line}: "${old}" → "${e.content}"`);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'insert': {
|
|
128
|
+
const count = (e.content ?? '').split('\n').length;
|
|
129
|
+
const position = e.before === 1 ? 'at beginning of file' : `after line ${e.before - 1}`;
|
|
130
|
+
parts.push(`${position}: inserted ${count} line${count === 1 ? '' : 's'}`);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 'delete': {
|
|
134
|
+
for (const ln of e.lines ?? []) {
|
|
135
|
+
parts.push(`line ${ln}: deleted`);
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'append': {
|
|
140
|
+
const count = (e.content ?? '').split('\n').length;
|
|
141
|
+
parts.push(`appended ${count} line${count === 1 ? '' : 's'} at end`);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return parts.join('\n');
|
|
147
|
+
}
|
|
148
|
+
/** Split file content into lines, handling trailing newline and CRLF correctly. */
|
|
149
|
+
function splitLines(content) {
|
|
150
|
+
if (content === '')
|
|
151
|
+
return [];
|
|
152
|
+
// Normalize CRLF to LF before splitting so lines don't contain trailing \r
|
|
153
|
+
const normalized = content.replace(/\r\n/g, '\n');
|
|
154
|
+
const lines = normalized.split('\n');
|
|
155
|
+
// If file ends with \n, don't count the empty trailing element
|
|
156
|
+
if (lines[lines.length - 1] === '')
|
|
157
|
+
lines.pop();
|
|
158
|
+
return lines;
|
|
159
|
+
}
|
|
160
|
+
/** Detect line ending style from content. */
|
|
161
|
+
function detectLineEnding(content) {
|
|
162
|
+
return content.includes('\r\n') ? '\r\n' : '\n';
|
|
163
|
+
}
|
|
164
|
+
/** Creates file_read_lines and file_edit_lines tools. */
|
|
165
|
+
function createFileTools() {
|
|
166
|
+
return {
|
|
167
|
+
file_read_lines: (0, ai_1.tool)({
|
|
168
|
+
description: 'Read a file with line numbers. Returns structured line-numbered content for precise referencing. Use offset/limit to paginate large files.',
|
|
169
|
+
parameters: zod_1.z.object({
|
|
170
|
+
path: zod_1.z.string().describe('File path to read (relative or absolute)'),
|
|
171
|
+
offset: zod_1.z
|
|
172
|
+
.number()
|
|
173
|
+
.int()
|
|
174
|
+
.min(1)
|
|
175
|
+
.optional()
|
|
176
|
+
.describe('Start line number (1-based, default 1)'),
|
|
177
|
+
limit: zod_1.z
|
|
178
|
+
.number()
|
|
179
|
+
.int()
|
|
180
|
+
.min(1)
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Maximum lines to return (default 1000)'),
|
|
183
|
+
}),
|
|
184
|
+
execute: async ({ path: filePath, offset = 1, limit = 1000, }) => {
|
|
185
|
+
try {
|
|
186
|
+
const absPath = path.resolve(filePath);
|
|
187
|
+
// Validate file exists
|
|
188
|
+
let stat;
|
|
189
|
+
try {
|
|
190
|
+
stat = fs.statSync(absPath);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
const code = err.code;
|
|
194
|
+
if (code === 'ENOENT')
|
|
195
|
+
return { error: `File not found: ${absPath}` };
|
|
196
|
+
return { error: `Cannot access ${absPath}: ${err.message}` };
|
|
197
|
+
}
|
|
198
|
+
if (stat.isDirectory()) {
|
|
199
|
+
return { error: `Path is a directory, not a file: ${absPath}` };
|
|
200
|
+
}
|
|
201
|
+
if (stat.size > MAX_FILE_SIZE) {
|
|
202
|
+
return {
|
|
203
|
+
error: `File too large (${stat.size} bytes, max ${MAX_FILE_SIZE}): ${absPath}`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// Read once — use buffer for binary check, then decode
|
|
207
|
+
const rawBuffer = fs.readFileSync(absPath);
|
|
208
|
+
if (isBinaryContent(rawBuffer)) {
|
|
209
|
+
return { error: `File appears to be binary: ${absPath}` };
|
|
210
|
+
}
|
|
211
|
+
const content = rawBuffer.toString('utf-8');
|
|
212
|
+
const allLines = splitLines(content);
|
|
213
|
+
const totalLines = allLines.length;
|
|
214
|
+
const startIdx = offset - 1;
|
|
215
|
+
const endIdx = Math.min(startIdx + limit, totalLines);
|
|
216
|
+
const sliced = startIdx < totalLines ? allLines.slice(startIdx, endIdx) : [];
|
|
217
|
+
const lines = sliced.map((line, i) => ({
|
|
218
|
+
num: startIdx + i + 1,
|
|
219
|
+
content: line,
|
|
220
|
+
}));
|
|
221
|
+
return {
|
|
222
|
+
path: absPath,
|
|
223
|
+
total_lines: totalLines,
|
|
224
|
+
offset,
|
|
225
|
+
limit,
|
|
226
|
+
lines,
|
|
227
|
+
truncated: endIdx < totalLines,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
232
|
+
return { error: msg };
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
}),
|
|
236
|
+
file_edit_lines: (0, ai_1.tool)({
|
|
237
|
+
description: 'Edit a file with precise line-based operations. Supports replace, insert, delete, and append actions. Multiple edits are applied atomically (all or nothing). Always read the file first with file_read_lines to get current line numbers.',
|
|
238
|
+
parameters: zod_1.z.object({
|
|
239
|
+
path: zod_1.z.string().describe('File path to edit (relative or absolute)'),
|
|
240
|
+
edits: zod_1.z
|
|
241
|
+
.array(zod_1.z.object({
|
|
242
|
+
action: zod_1.z
|
|
243
|
+
.enum(['replace', 'insert', 'delete', 'append'])
|
|
244
|
+
.describe('replace: replace content at a line number; insert: insert before a line; delete: remove specific lines; append: add to end of file'),
|
|
245
|
+
line: zod_1.z.number().int().min(1).optional().describe('Line number for replace action'),
|
|
246
|
+
before: zod_1.z.number().int().min(1).optional().describe('Line number to insert before'),
|
|
247
|
+
lines: zod_1.z.array(zod_1.z.number().int().min(1)).optional().describe('Line numbers to delete'),
|
|
248
|
+
content: zod_1.z
|
|
249
|
+
.string()
|
|
250
|
+
.optional()
|
|
251
|
+
.describe('New content for replace/insert/append (may contain \\n for multi-line)'),
|
|
252
|
+
}))
|
|
253
|
+
.min(1)
|
|
254
|
+
.describe('Array of edit operations to apply'),
|
|
255
|
+
}),
|
|
256
|
+
execute: async ({ path: filePath, edits, }) => {
|
|
257
|
+
try {
|
|
258
|
+
const absPath = path.resolve(filePath);
|
|
259
|
+
// Validate file exists
|
|
260
|
+
let stat;
|
|
261
|
+
try {
|
|
262
|
+
stat = fs.statSync(absPath);
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
const code = err.code;
|
|
266
|
+
if (code === 'ENOENT')
|
|
267
|
+
return { error: `File not found: ${absPath}` };
|
|
268
|
+
return { error: `Cannot access ${absPath}: ${err.message}` };
|
|
269
|
+
}
|
|
270
|
+
if (stat.isDirectory()) {
|
|
271
|
+
return { error: `Path is a directory, not a file: ${absPath}` };
|
|
272
|
+
}
|
|
273
|
+
if (stat.size > MAX_FILE_SIZE) {
|
|
274
|
+
return {
|
|
275
|
+
error: `File too large (${stat.size} bytes, max ${MAX_FILE_SIZE}): ${absPath}`,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
// Read once — use buffer for binary check, then decode
|
|
279
|
+
const rawBuffer = fs.readFileSync(absPath);
|
|
280
|
+
if (isBinaryContent(rawBuffer)) {
|
|
281
|
+
return { error: `File appears to be binary: ${absPath}` };
|
|
282
|
+
}
|
|
283
|
+
const rawContent = rawBuffer.toString('utf-8');
|
|
284
|
+
const lineEnding = detectLineEnding(rawContent);
|
|
285
|
+
const hadTrailingNewline = rawContent.length > 0 && (rawContent.endsWith('\n') || rawContent.endsWith('\r\n'));
|
|
286
|
+
const oldLines = splitLines(rawContent);
|
|
287
|
+
const totalLines = oldLines.length;
|
|
288
|
+
const oldHash = hashContent(rawContent);
|
|
289
|
+
// Validate all edits upfront
|
|
290
|
+
const validationErrors = [];
|
|
291
|
+
for (let i = 0; i < edits.length; i++) {
|
|
292
|
+
const e = edits[i];
|
|
293
|
+
const prefix = `Edit ${i + 1} (${e.action})`;
|
|
294
|
+
switch (e.action) {
|
|
295
|
+
case 'replace':
|
|
296
|
+
if (e.line === undefined)
|
|
297
|
+
validationErrors.push(`${prefix}: "line" is required`);
|
|
298
|
+
else if (e.line > totalLines)
|
|
299
|
+
validationErrors.push(`${prefix}: line ${e.line} out of bounds (file has ${totalLines} lines)`);
|
|
300
|
+
if (e.content === undefined)
|
|
301
|
+
validationErrors.push(`${prefix}: "content" is required`);
|
|
302
|
+
break;
|
|
303
|
+
case 'insert':
|
|
304
|
+
if (e.before === undefined)
|
|
305
|
+
validationErrors.push(`${prefix}: "before" is required`);
|
|
306
|
+
else if (e.before > totalLines + 1)
|
|
307
|
+
validationErrors.push(`${prefix}: before ${e.before} out of bounds (file has ${totalLines} lines, max ${totalLines + 1})`);
|
|
308
|
+
if (e.content === undefined)
|
|
309
|
+
validationErrors.push(`${prefix}: "content" is required`);
|
|
310
|
+
break;
|
|
311
|
+
case 'delete':
|
|
312
|
+
if (!e.lines || e.lines.length === 0)
|
|
313
|
+
validationErrors.push(`${prefix}: "lines" array is required and must not be empty`);
|
|
314
|
+
else {
|
|
315
|
+
for (const ln of e.lines) {
|
|
316
|
+
if (ln > totalLines)
|
|
317
|
+
validationErrors.push(`${prefix}: line ${ln} out of bounds (file has ${totalLines} lines)`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
break;
|
|
321
|
+
case 'append':
|
|
322
|
+
if (e.content === undefined)
|
|
323
|
+
validationErrors.push(`${prefix}: "content" is required`);
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Check for conflicts
|
|
328
|
+
const conflicts = detectConflicts(edits);
|
|
329
|
+
validationErrors.push(...conflicts);
|
|
330
|
+
if (validationErrors.length > 0) {
|
|
331
|
+
return { error: validationErrors.join('; ') };
|
|
332
|
+
}
|
|
333
|
+
// Sort edits descending so high-line edits are applied first
|
|
334
|
+
const sorted = sortEditsDescending(edits);
|
|
335
|
+
// Apply edits to in-memory lines
|
|
336
|
+
const lines = [...oldLines];
|
|
337
|
+
for (const { original: e } of sorted) {
|
|
338
|
+
switch (e.action) {
|
|
339
|
+
case 'replace': {
|
|
340
|
+
const newLines = e.content.split('\n');
|
|
341
|
+
lines.splice(e.line - 1, 1, ...newLines);
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
case 'insert':
|
|
345
|
+
lines.splice(e.before - 1, 0, ...e.content.split('\n'));
|
|
346
|
+
break;
|
|
347
|
+
case 'delete': {
|
|
348
|
+
// Sort delete line numbers descending within this edit
|
|
349
|
+
const delLines = [...e.lines].sort((a, b) => b - a);
|
|
350
|
+
for (const ln of delLines) {
|
|
351
|
+
lines.splice(ln - 1, 1);
|
|
352
|
+
}
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
case 'append':
|
|
356
|
+
lines.push(...e.content.split('\n'));
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Write atomically: write to temp file, then rename (POSIX rename atomically replaces target)
|
|
361
|
+
const newContent = lines.length > 0 ? lines.join(lineEnding) + (hadTrailingNewline ? lineEnding : '') : '';
|
|
362
|
+
const tmpPath = `${absPath}.${process.pid}.${(0, node_crypto_1.randomBytes)(4).toString('hex')}.tmp`;
|
|
363
|
+
try {
|
|
364
|
+
fs.writeFileSync(tmpPath, newContent, 'utf-8');
|
|
365
|
+
fs.renameSync(tmpPath, absPath);
|
|
366
|
+
}
|
|
367
|
+
catch (writeErr) {
|
|
368
|
+
try {
|
|
369
|
+
fs.unlinkSync(tmpPath);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// Best-effort cleanup
|
|
373
|
+
}
|
|
374
|
+
const msg = writeErr instanceof Error ? writeErr.message : String(writeErr);
|
|
375
|
+
return { error: `Write failed: ${msg}` };
|
|
376
|
+
}
|
|
377
|
+
const newHash = hashContent(newContent);
|
|
378
|
+
const diff = generateDiffSummary(oldLines, edits);
|
|
379
|
+
return {
|
|
380
|
+
path: absPath,
|
|
381
|
+
old_hash: oldHash,
|
|
382
|
+
new_hash: newHash,
|
|
383
|
+
edits_applied: edits.length,
|
|
384
|
+
total_lines: lines.length,
|
|
385
|
+
diff,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
catch (err) {
|
|
389
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
390
|
+
return { error: msg };
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
}),
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { ToolOptions } from './types.js';
|
|
|
2
2
|
import type { MemoryStore } from '../memory.js';
|
|
3
3
|
import type { RoutineStore } from '../routines.js';
|
|
4
4
|
import type { SpecialistStore } from '../specialists.js';
|
|
5
|
+
import type { CandidateStoreReader } from '../specialist-candidates.js';
|
|
6
|
+
import type { BernardConfig } from '../config.js';
|
|
5
7
|
export type { ToolOptions } from './types.js';
|
|
6
8
|
/**
|
|
7
9
|
* Assembles the complete tool registry for the agent.
|
|
@@ -9,6 +11,7 @@ export type { ToolOptions } from './types.js';
|
|
|
9
11
|
* @param options - Shell execution options (timeout, dangerous-command confirmation callback).
|
|
10
12
|
* @param memoryStore - Persistent and scratch memory backing store.
|
|
11
13
|
* @param mcpTools - Optional MCP-provided tools to merge into the registry.
|
|
14
|
+
* @param config - Optional Bernard config, passed to specialist tool for provider/model validation.
|
|
12
15
|
* @returns A flat record of all available AI SDK tools keyed by tool name.
|
|
13
16
|
*/
|
|
14
|
-
export declare function createTools(options: ToolOptions, memoryStore: MemoryStore, mcpTools?: Record<string, any>, routineStore?: RoutineStore, specialistStore?: SpecialistStore): Record<string, any>;
|
|
17
|
+
export declare function createTools(options: ToolOptions, memoryStore: MemoryStore, mcpTools?: Record<string, any>, routineStore?: RoutineStore, specialistStore?: SpecialistStore, candidateStore?: CandidateStoreReader, config?: BernardConfig): Record<string, any>;
|
package/dist/tools/index.js
CHANGED
|
@@ -11,6 +11,7 @@ const mcp_js_1 = require("./mcp.js");
|
|
|
11
11
|
const mcp_url_js_1 = require("./mcp-url.js");
|
|
12
12
|
const web_js_1 = require("./web.js");
|
|
13
13
|
const wait_js_1 = require("./wait.js");
|
|
14
|
+
const file_js_1 = require("./file.js");
|
|
14
15
|
const routine_js_1 = require("./routine.js");
|
|
15
16
|
const specialist_js_1 = require("./specialist.js");
|
|
16
17
|
/**
|
|
@@ -19,15 +20,16 @@ const specialist_js_1 = require("./specialist.js");
|
|
|
19
20
|
* @param options - Shell execution options (timeout, dangerous-command confirmation callback).
|
|
20
21
|
* @param memoryStore - Persistent and scratch memory backing store.
|
|
21
22
|
* @param mcpTools - Optional MCP-provided tools to merge into the registry.
|
|
23
|
+
* @param config - Optional Bernard config, passed to specialist tool for provider/model validation.
|
|
22
24
|
* @returns A flat record of all available AI SDK tools keyed by tool name.
|
|
23
25
|
*/
|
|
24
|
-
function createTools(options, memoryStore, mcpTools, routineStore, specialistStore) {
|
|
26
|
+
function createTools(options, memoryStore, mcpTools, routineStore, specialistStore, candidateStore, config) {
|
|
25
27
|
return {
|
|
26
28
|
shell: (0, shell_js_1.createShellTool)(options),
|
|
27
29
|
memory: (0, memory_js_1.createMemoryTool)(memoryStore),
|
|
28
30
|
scratch: (0, memory_js_1.createScratchTool)(memoryStore),
|
|
29
31
|
routine: (0, routine_js_1.createRoutineTool)(routineStore),
|
|
30
|
-
specialist: (0, specialist_js_1.createSpecialistTool)(specialistStore),
|
|
32
|
+
specialist: (0, specialist_js_1.createSpecialistTool)(specialistStore, candidateStore, config),
|
|
31
33
|
datetime: (0, datetime_js_1.createDateTimeTool)(),
|
|
32
34
|
...(0, cron_js_1.createCronTools)(),
|
|
33
35
|
...(0, cron_logs_js_1.createCronLogTools)(),
|
|
@@ -36,6 +38,7 @@ function createTools(options, memoryStore, mcpTools, routineStore, specialistSto
|
|
|
36
38
|
mcp_add_url: (0, mcp_url_js_1.createMCPAddUrlTool)(),
|
|
37
39
|
web_read: (0, web_js_1.createWebReadTool)(),
|
|
38
40
|
wait: (0, wait_js_1.createWaitTool)(),
|
|
41
|
+
...(0, file_js_1.createFileTools)(),
|
|
39
42
|
...mcpTools,
|
|
40
43
|
};
|
|
41
44
|
}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;AA+BA,kCA0BC;AAzDD,yCAA6C;AAC7C,2CAAkE;AAClE,+CAAmD;AACnD,uCAA4C;AAC5C,iDAAoD;AACpD,uCAA4C;AAC5C,qCAA+C;AAC/C,6CAAmD;AACnD,qCAA6C;AAC7C,uCAA2C;AAC3C,uCAA4C;AAC5C,6CAAiD;AACjD,mDAAuD;AAUvD;;;;;;;;GAQG;AACH,SAAgB,WAAW,CACzB,OAAoB,EACpB,WAAwB,EACxB,QAA8B,EAC9B,YAA2B,EAC3B,eAAiC,EACjC,cAAqC,EACrC,MAAsB;IAEtB,OAAO;QACL,KAAK,EAAE,IAAA,0BAAe,EAAC,OAAO,CAAC;QAC/B,MAAM,EAAE,IAAA,4BAAgB,EAAC,WAAW,CAAC;QACrC,OAAO,EAAE,IAAA,6BAAiB,EAAC,WAAW,CAAC;QACvC,OAAO,EAAE,IAAA,8BAAiB,EAAC,YAAY,CAAC;QACxC,UAAU,EAAE,IAAA,oCAAoB,EAAC,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC;QACzE,QAAQ,EAAE,IAAA,gCAAkB,GAAE;QAC9B,GAAG,IAAA,yBAAe,GAAE;QACpB,GAAG,IAAA,iCAAkB,GAAE;QACvB,GAAG,IAAA,yBAAe,GAAE;QACpB,UAAU,EAAE,IAAA,4BAAmB,GAAE;QACjC,WAAW,EAAE,IAAA,gCAAmB,GAAE;QAClC,QAAQ,EAAE,IAAA,0BAAiB,GAAE;QAC7B,IAAI,EAAE,IAAA,wBAAc,GAAE;QACtB,GAAG,IAAA,yBAAe,GAAE;QACpB,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC"}
|