@prbe.ai/electron-sdk 0.1.4 → 0.1.5

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 (61) hide show
  1. package/dist/index.d.mts +332 -0
  2. package/dist/index.d.ts +331 -15
  3. package/dist/index.js +2471 -60
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +2402 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/types-DHT-JxMT.d.mts +401 -0
  8. package/dist/types-DHT-JxMT.d.ts +401 -0
  9. package/dist/types.d.mts +2 -0
  10. package/dist/types.d.ts +2 -14
  11. package/dist/types.js +160 -30
  12. package/dist/types.js.map +1 -1
  13. package/dist/types.mjs +125 -0
  14. package/dist/types.mjs.map +1 -0
  15. package/package.json +22 -8
  16. package/dist/agent.d.ts +0 -106
  17. package/dist/agent.d.ts.map +0 -1
  18. package/dist/agent.js +0 -878
  19. package/dist/agent.js.map +0 -1
  20. package/dist/assets/index.d.ts +0 -6
  21. package/dist/assets/index.d.ts.map +0 -1
  22. package/dist/assets/index.js +0 -13
  23. package/dist/assets/index.js.map +0 -1
  24. package/dist/index.d.ts.map +0 -1
  25. package/dist/interactions.d.ts +0 -63
  26. package/dist/interactions.d.ts.map +0 -1
  27. package/dist/interactions.js +0 -27
  28. package/dist/interactions.js.map +0 -1
  29. package/dist/models.d.ts +0 -218
  30. package/dist/models.d.ts.map +0 -1
  31. package/dist/models.js +0 -121
  32. package/dist/models.js.map +0 -1
  33. package/dist/serialization.d.ts +0 -51
  34. package/dist/serialization.d.ts.map +0 -1
  35. package/dist/serialization.js +0 -72
  36. package/dist/serialization.js.map +0 -1
  37. package/dist/state.d.ts +0 -70
  38. package/dist/state.d.ts.map +0 -1
  39. package/dist/state.js +0 -303
  40. package/dist/state.js.map +0 -1
  41. package/dist/tools/bash.d.ts +0 -30
  42. package/dist/tools/bash.d.ts.map +0 -1
  43. package/dist/tools/bash.js +0 -248
  44. package/dist/tools/bash.js.map +0 -1
  45. package/dist/tools/filesystem.d.ts +0 -63
  46. package/dist/tools/filesystem.d.ts.map +0 -1
  47. package/dist/tools/filesystem.js +0 -573
  48. package/dist/tools/filesystem.js.map +0 -1
  49. package/dist/tools/index.d.ts +0 -46
  50. package/dist/tools/index.d.ts.map +0 -1
  51. package/dist/tools/index.js +0 -171
  52. package/dist/tools/index.js.map +0 -1
  53. package/dist/tools/interactive.d.ts +0 -15
  54. package/dist/tools/interactive.d.ts.map +0 -1
  55. package/dist/tools/interactive.js +0 -58
  56. package/dist/tools/interactive.js.map +0 -1
  57. package/dist/tools/logs.d.ts +0 -72
  58. package/dist/tools/logs.d.ts.map +0 -1
  59. package/dist/tools/logs.js +0 -366
  60. package/dist/tools/logs.js.map +0 -1
  61. package/dist/types.d.ts.map +0 -1
@@ -1,573 +0,0 @@
1
- "use strict";
2
- /**
3
- * tools/filesystem.ts — Built-in filesystem tools
4
- *
5
- * Implements: client_list_directory, client_read_file, client_search_content,
6
- * client_find_files, client_flag_file
7
- *
8
- * Mirrors PRBEAgentTools.swift filesystem tool implementations.
9
- */
10
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- var desc = Object.getOwnPropertyDescriptor(m, k);
13
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
- desc = { enumerable: true, get: function() { return m[k]; } };
15
- }
16
- Object.defineProperty(o, k2, desc);
17
- }) : (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- o[k2] = m[k];
20
- }));
21
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
- Object.defineProperty(o, "default", { enumerable: true, value: v });
23
- }) : function(o, v) {
24
- o["default"] = v;
25
- });
26
- var __importStar = (this && this.__importStar) || (function () {
27
- var ownKeys = function(o) {
28
- ownKeys = Object.getOwnPropertyNames || function (o) {
29
- var ar = [];
30
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
- return ar;
32
- };
33
- return ownKeys(o);
34
- };
35
- return function (mod) {
36
- if (mod && mod.__esModule) return mod;
37
- var result = {};
38
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
- __setModuleDefault(result, mod);
40
- return result;
41
- };
42
- })();
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.FlagFileTool = exports.FindFilesTool = exports.SearchContentTool = exports.ReadFileTool = exports.ListDirectoryTool = void 0;
45
- const fs = __importStar(require("fs"));
46
- const path = __importStar(require("path"));
47
- const models_1 = require("../models");
48
- const index_1 = require("./index");
49
- /** Resolve a path using access request if available, else basic validation. Returns [resolved, error]. */
50
- async function resolvePath(pathStr, autoApprovedDirs, requester, grantedPaths) {
51
- if (requester && grantedPaths) {
52
- const result = await (0, index_1.resolveWithAccessRequest)(pathStr, autoApprovedDirs, grantedPaths, requester);
53
- if (result && "error" in result)
54
- return [null, result.error];
55
- if (result && "path" in result)
56
- return [result.path, null];
57
- }
58
- const resolved = (0, index_1.resolveAndValidate)(pathStr, autoApprovedDirs);
59
- return [resolved, resolved ? null : "path is outside auto-approved directories"];
60
- }
61
- // ---------------------------------------------------------------------------
62
- // ListDirectoryTool
63
- // ---------------------------------------------------------------------------
64
- class ListDirectoryTool {
65
- autoApprovedDirs;
66
- requester;
67
- grantedPaths;
68
- constructor(autoApprovedDirs, requester, grantedPaths) {
69
- this.autoApprovedDirs = autoApprovedDirs;
70
- this.requester = requester;
71
- this.grantedPaths = grantedPaths;
72
- }
73
- get declaration() {
74
- return {
75
- name: models_1.ToolName.CLIENT_LIST_DIRECTORY,
76
- description: "List directory contents",
77
- parameters: [
78
- { name: "path", type: models_1.ToolParamType.STRING, description: "Directory path", required: true },
79
- { name: "recursive", type: models_1.ToolParamType.BOOLEAN, description: "List recursively", required: false },
80
- { name: "max_depth", type: models_1.ToolParamType.INTEGER, description: "Max depth (default 3)", required: false },
81
- ],
82
- };
83
- }
84
- async execute(args) {
85
- const pathStr = args["path"];
86
- if (!pathStr)
87
- return "Error: 'path' parameter is required";
88
- const [resolved, resolveErr] = await resolvePath(pathStr, this.autoApprovedDirs, this.requester, this.grantedPaths);
89
- if (!resolved)
90
- return `Error: ${resolveErr}`;
91
- try {
92
- const stat = fs.statSync(resolved);
93
- if (!stat.isDirectory())
94
- return `Error: '${pathStr}' is not a directory`;
95
- }
96
- catch {
97
- return `Error: '${pathStr}' does not exist or is not accessible`;
98
- }
99
- const recursive = args["recursive"] === true;
100
- const maxDepth = typeof args["max_depth"] === "number" ? args["max_depth"] : 3;
101
- const lines = [];
102
- this.listDir(resolved, 0, recursive ? maxDepth : 1, lines);
103
- if (lines.length >= ListDirectoryTool.MAX_ENTRIES) {
104
- lines.push(`\n(truncated at ${ListDirectoryTool.MAX_ENTRIES} entries — use a more specific path)`);
105
- }
106
- return lines.join("\n") || "(empty directory)";
107
- }
108
- static MAX_ENTRIES = 1000;
109
- listDir(dirPath, depth, maxDepth, lines) {
110
- if (depth >= maxDepth)
111
- return;
112
- if (lines.length >= ListDirectoryTool.MAX_ENTRIES)
113
- return;
114
- const indent = " ".repeat(depth);
115
- let entries;
116
- try {
117
- entries = fs.readdirSync(dirPath, { withFileTypes: true });
118
- }
119
- catch {
120
- lines.push(`${indent}(access denied)`);
121
- return;
122
- }
123
- // Sort entries alphabetically, skip hidden files
124
- const sorted = entries
125
- .filter((e) => !e.name.startsWith("."))
126
- .sort((a, b) => a.name.localeCompare(b.name));
127
- for (const entry of sorted) {
128
- const fullPath = path.join(dirPath, entry.name);
129
- if (entry.isDirectory()) {
130
- lines.push(`${indent}${entry.name}/`);
131
- this.listDir(fullPath, depth + 1, maxDepth, lines);
132
- }
133
- else {
134
- try {
135
- const stat = fs.statSync(fullPath);
136
- lines.push(`${indent}${entry.name} (${(0, index_1.humanReadableSize)(stat.size)})`);
137
- }
138
- catch {
139
- lines.push(`${indent}${entry.name} (unknown size)`);
140
- }
141
- }
142
- }
143
- }
144
- }
145
- exports.ListDirectoryTool = ListDirectoryTool;
146
- // ---------------------------------------------------------------------------
147
- // ReadFileTool
148
- // ---------------------------------------------------------------------------
149
- class ReadFileTool {
150
- autoApprovedDirs;
151
- requester;
152
- grantedPaths;
153
- constructor(autoApprovedDirs, requester, grantedPaths) {
154
- this.autoApprovedDirs = autoApprovedDirs;
155
- this.requester = requester;
156
- this.grantedPaths = grantedPaths;
157
- }
158
- get declaration() {
159
- return {
160
- name: models_1.ToolName.CLIENT_READ_FILE,
161
- description: "Read file contents",
162
- parameters: [
163
- { name: "path", type: models_1.ToolParamType.STRING, description: "File path", required: true },
164
- { name: "offset", type: models_1.ToolParamType.INTEGER, description: "Line offset", required: false },
165
- { name: "limit", type: models_1.ToolParamType.INTEGER, description: "Max lines (default 200)", required: false },
166
- ],
167
- };
168
- }
169
- async execute(args) {
170
- const pathStr = args["path"];
171
- if (!pathStr)
172
- return "Error: 'path' parameter is required";
173
- const [resolved, resolveErr] = await resolvePath(pathStr, this.autoApprovedDirs, this.requester, this.grantedPaths);
174
- if (!resolved)
175
- return `Error: ${resolveErr}`;
176
- let content;
177
- try {
178
- content = fs.readFileSync(resolved, "utf-8");
179
- }
180
- catch {
181
- return `Error: could not read file at '${pathStr}'`;
182
- }
183
- const allLines = content.split(/\r?\n/);
184
- const totalLines = allLines.length;
185
- const limit = typeof args["limit"] === "number" ? args["limit"] : 200;
186
- const rawOffset = typeof args["offset"] === "number" ? args["offset"] : 0;
187
- let startIndex;
188
- if (rawOffset < 0) {
189
- startIndex = Math.max(0, totalLines + rawOffset);
190
- }
191
- else {
192
- startIndex = rawOffset;
193
- }
194
- const endIndex = Math.min(startIndex + limit, totalLines);
195
- if (startIndex >= totalLines) {
196
- return `File has ${totalLines} lines; offset ${rawOffset} is out of range.`;
197
- }
198
- let stat;
199
- try {
200
- stat = fs.statSync(resolved);
201
- }
202
- catch {
203
- stat = { size: 0 };
204
- }
205
- const sizeStr = (0, index_1.humanReadableSize)(stat.size);
206
- let result = `File: ${pathStr} (${totalLines} lines, ${sizeStr}, showing ${startIndex + 1}-${endIndex})\n`;
207
- for (let i = startIndex; i < endIndex; i++) {
208
- const lineNum = String(i + 1).padStart(4, " ");
209
- result += `${lineNum} | ${allLines[i]}\n`;
210
- }
211
- return result;
212
- }
213
- }
214
- exports.ReadFileTool = ReadFileTool;
215
- // ---------------------------------------------------------------------------
216
- // SearchContentTool
217
- // ---------------------------------------------------------------------------
218
- class SearchContentTool {
219
- autoApprovedDirs;
220
- requester;
221
- grantedPaths;
222
- constructor(autoApprovedDirs, requester, grantedPaths) {
223
- this.autoApprovedDirs = autoApprovedDirs;
224
- this.requester = requester;
225
- this.grantedPaths = grantedPaths;
226
- }
227
- get declaration() {
228
- return {
229
- name: models_1.ToolName.CLIENT_SEARCH_CONTENT,
230
- description: "Search file contents",
231
- parameters: [
232
- { name: "pattern", type: models_1.ToolParamType.STRING, description: "Regex pattern", required: true },
233
- { name: "path", type: models_1.ToolParamType.STRING, description: "File or directory to search", required: true },
234
- { name: "context_lines", type: models_1.ToolParamType.INTEGER, description: "Context lines (default 2)", required: false },
235
- { name: "max_results", type: models_1.ToolParamType.INTEGER, description: "Max results (default 50)", required: false },
236
- ],
237
- };
238
- }
239
- async execute(args) {
240
- const pattern = args["pattern"];
241
- if (!pattern)
242
- return "Error: 'pattern' parameter is required";
243
- const pathStr = args["path"];
244
- if (!pathStr)
245
- return "Error: 'path' parameter is required";
246
- const [resolved, resolveErr] = await resolvePath(pathStr, this.autoApprovedDirs, this.requester, this.grantedPaths);
247
- if (!resolved)
248
- return `Error: ${resolveErr}`;
249
- const contextLines = typeof args["context_lines"] === "number" ? args["context_lines"] : 2;
250
- const maxResults = typeof args["max_results"] === "number" ? args["max_results"] : 50;
251
- let regex;
252
- try {
253
- regex = new RegExp(pattern);
254
- }
255
- catch {
256
- return `Error: invalid regex pattern '${pattern}'`;
257
- }
258
- // Collect file paths to search
259
- const fileURLs = [];
260
- let isDirectory = false;
261
- try {
262
- const stat = fs.statSync(resolved);
263
- if (stat.isDirectory()) {
264
- isDirectory = true;
265
- this.collectFiles(resolved, fileURLs);
266
- }
267
- else {
268
- fileURLs.push(resolved);
269
- }
270
- }
271
- catch {
272
- return `Error: could not access '${pathStr}'`;
273
- }
274
- const results = [];
275
- for (const filePath of fileURLs) {
276
- if (results.length >= maxResults)
277
- break;
278
- let content;
279
- try {
280
- content = fs.readFileSync(filePath, "utf-8");
281
- }
282
- catch {
283
- continue;
284
- }
285
- const lines = content.split(/\r?\n/);
286
- const relativePath = isDirectory
287
- ? path.relative(resolved, filePath)
288
- : path.basename(filePath);
289
- for (let idx = 0; idx < lines.length; idx++) {
290
- if (results.length >= maxResults)
291
- break;
292
- if (!regex.test(lines[idx]))
293
- continue;
294
- let snippet;
295
- if (contextLines > 0) {
296
- const start = Math.max(0, idx - contextLines);
297
- const end = Math.min(lines.length - 1, idx + contextLines);
298
- snippet = "";
299
- for (let ci = start; ci <= end; ci++) {
300
- const marker = ci === idx ? ">" : " ";
301
- snippet += `${relativePath}:${ci + 1}:${marker} ${lines[ci]}\n`;
302
- }
303
- }
304
- else {
305
- snippet = `${relativePath}:${idx + 1}: ${lines[idx]}`;
306
- }
307
- results.push(snippet);
308
- }
309
- }
310
- if (results.length === 0) {
311
- return `No matches found for '${pattern}' in '${pathStr}'`;
312
- }
313
- return `Found ${results.length} match(es):\n\n${results.join("\n---\n")}`;
314
- }
315
- collectFiles(dirPath, fileURLs) {
316
- let entries;
317
- try {
318
- entries = fs.readdirSync(dirPath, { withFileTypes: true });
319
- }
320
- catch {
321
- return;
322
- }
323
- for (const entry of entries) {
324
- if (entry.name.startsWith("."))
325
- continue;
326
- const fullPath = path.join(dirPath, entry.name);
327
- if (entry.isDirectory()) {
328
- this.collectFiles(fullPath, fileURLs);
329
- }
330
- else if (entry.isFile()) {
331
- fileURLs.push(fullPath);
332
- }
333
- }
334
- }
335
- }
336
- exports.SearchContentTool = SearchContentTool;
337
- // ---------------------------------------------------------------------------
338
- // FindFilesTool
339
- // ---------------------------------------------------------------------------
340
- class FindFilesTool {
341
- autoApprovedDirs;
342
- requester;
343
- grantedPaths;
344
- constructor(autoApprovedDirs, requester, grantedPaths) {
345
- this.autoApprovedDirs = autoApprovedDirs;
346
- this.requester = requester;
347
- this.grantedPaths = grantedPaths;
348
- }
349
- get declaration() {
350
- return {
351
- name: models_1.ToolName.CLIENT_FIND_FILES,
352
- description: "Find files by name",
353
- parameters: [
354
- { name: "pattern", type: models_1.ToolParamType.STRING, description: "Glob pattern", required: true },
355
- { name: "path", type: models_1.ToolParamType.STRING, description: "Directory to search", required: true },
356
- { name: "max_results", type: models_1.ToolParamType.INTEGER, description: "Max results (default 50)", required: false },
357
- ],
358
- };
359
- }
360
- async execute(args) {
361
- const pattern = args["pattern"];
362
- if (!pattern)
363
- return "Error: 'pattern' parameter is required";
364
- const pathStr = args["path"];
365
- if (!pathStr)
366
- return "Error: 'path' parameter is required";
367
- const [resolved, resolveErr] = await resolvePath(pathStr, this.autoApprovedDirs, this.requester, this.grantedPaths);
368
- if (!resolved)
369
- return `Error: ${resolveErr}`;
370
- const maxResults = typeof args["max_results"] === "number" ? args["max_results"] : 50;
371
- const matches = [];
372
- this.walkAndMatch(resolved, pattern, matches);
373
- // Sort newest-first
374
- matches.sort((a, b) => b.modified.getTime() - a.modified.getTime());
375
- const limited = matches.slice(0, maxResults);
376
- if (limited.length === 0) {
377
- return `No files matching '${pattern}' found in '${pathStr}'`;
378
- }
379
- let result = `Found ${matches.length} file(s) matching '${pattern}':\n\n`;
380
- for (const m of limited) {
381
- const sizeStr = (0, index_1.humanReadableSize)(m.size);
382
- const dateStr = m.modified.toISOString();
383
- result += `${m.path} (${sizeStr}, ${dateStr})\n`;
384
- }
385
- return result;
386
- }
387
- walkAndMatch(dirPath, pattern, matches) {
388
- let entries;
389
- try {
390
- entries = fs.readdirSync(dirPath, { withFileTypes: true });
391
- }
392
- catch {
393
- return;
394
- }
395
- for (const entry of entries) {
396
- if (entry.name.startsWith("."))
397
- continue;
398
- const fullPath = path.join(dirPath, entry.name);
399
- if (entry.isDirectory()) {
400
- this.walkAndMatch(fullPath, pattern, matches);
401
- }
402
- else if (entry.isFile()) {
403
- if (this.globMatch(entry.name, pattern)) {
404
- try {
405
- const stat = fs.statSync(fullPath);
406
- matches.push({
407
- path: fullPath,
408
- size: stat.size,
409
- modified: stat.mtime,
410
- });
411
- }
412
- catch {
413
- // Skip files we can't stat
414
- }
415
- }
416
- }
417
- }
418
- }
419
- /**
420
- * Simple glob matching: supports *, ?, and character classes [...].
421
- * Converts glob to regex and tests against the filename.
422
- */
423
- globMatch(filename, pattern) {
424
- // Convert glob pattern to regex
425
- let regexStr = "^";
426
- for (let i = 0; i < pattern.length; i++) {
427
- const c = pattern[i];
428
- switch (c) {
429
- case "*":
430
- regexStr += ".*";
431
- break;
432
- case "?":
433
- regexStr += ".";
434
- break;
435
- case "[":
436
- // Find closing bracket
437
- const closeBracket = pattern.indexOf("]", i + 1);
438
- if (closeBracket === -1) {
439
- regexStr += "\\[";
440
- }
441
- else {
442
- regexStr += pattern.substring(i, closeBracket + 1);
443
- i = closeBracket;
444
- }
445
- break;
446
- case ".":
447
- case "(":
448
- case ")":
449
- case "+":
450
- case "^":
451
- case "$":
452
- case "|":
453
- case "{":
454
- case "}":
455
- case "\\":
456
- regexStr += `\\${c}`;
457
- break;
458
- default:
459
- regexStr += c;
460
- }
461
- }
462
- regexStr += "$";
463
- try {
464
- return new RegExp(regexStr).test(filename);
465
- }
466
- catch {
467
- return false;
468
- }
469
- }
470
- }
471
- exports.FindFilesTool = FindFilesTool;
472
- // ---------------------------------------------------------------------------
473
- // FlagFileTool
474
- // ---------------------------------------------------------------------------
475
- class FlagFileTool {
476
- autoApprovedDirs;
477
- onFlag;
478
- requester;
479
- grantedPaths;
480
- static MAX_BINARY_SIZE = 100 * 1024 * 1024; // 100MB
481
- constructor(autoApprovedDirs, onFlag, requester, grantedPaths) {
482
- this.autoApprovedDirs = autoApprovedDirs;
483
- this.onFlag = onFlag;
484
- this.requester = requester;
485
- this.grantedPaths = grantedPaths;
486
- }
487
- get declaration() {
488
- return {
489
- name: models_1.ToolName.CLIENT_FLAG_FILE,
490
- description: "Flag a file (or part of a text file) as evidence. For large text files, use offset and limit to flag only the relevant section. Binary files are flagged in full (up to 100MB).",
491
- parameters: [
492
- { name: "path", type: models_1.ToolParamType.STRING, description: "File path", required: true },
493
- { name: "reason", type: models_1.ToolParamType.STRING, description: "Reason for flagging", required: true },
494
- { name: "offset", type: models_1.ToolParamType.INTEGER, description: "Starting line number (1-based, text files only). Negative = from end.", required: false },
495
- { name: "limit", type: models_1.ToolParamType.INTEGER, description: "Max number of lines to include (text files only).", required: false },
496
- ],
497
- };
498
- }
499
- async execute(args) {
500
- const pathStr = args["path"];
501
- if (!pathStr)
502
- return "Error: 'path' parameter is required";
503
- const reason = args["reason"];
504
- if (!reason)
505
- return "Error: 'reason' parameter is required";
506
- const [resolved, resolveErr] = await resolvePath(pathStr, this.autoApprovedDirs, this.requester, this.grantedPaths);
507
- if (!resolved)
508
- return `Error: ${resolveErr}`;
509
- if (!fs.existsSync(resolved)) {
510
- return `Error: file does not exist at '${pathStr}'`;
511
- }
512
- const offset = typeof args["offset"] === "number" ? args["offset"] : undefined;
513
- const limit = typeof args["limit"] === "number" ? args["limit"] : undefined;
514
- // Try reading as text first
515
- let textContent = null;
516
- try {
517
- textContent = fs.readFileSync(resolved, "utf-8");
518
- }
519
- catch {
520
- // Not readable as text
521
- }
522
- if (textContent !== null) {
523
- let content = textContent;
524
- if (offset !== undefined || limit !== undefined) {
525
- let lines = content.split(/\r?\n/);
526
- const totalLines = lines.length;
527
- let startIdx = 0;
528
- if (offset !== undefined) {
529
- startIdx = offset < 0 ? Math.max(0, totalLines + offset) : Math.max(0, offset - 1);
530
- }
531
- lines = lines.slice(startIdx);
532
- if (limit !== undefined && limit > 0) {
533
- lines = lines.slice(0, limit);
534
- }
535
- const rangeDesc = `lines ${startIdx + 1}-${startIdx + lines.length} of ${totalLines}`;
536
- content = `[${rangeDesc}]\n${lines.join("\n")}`;
537
- }
538
- const redacted = (0, models_1.redactPII)(content);
539
- this.onFlag({
540
- originalPath: resolved,
541
- reason,
542
- data: Buffer.from(redacted, "utf-8"),
543
- isText: true,
544
- });
545
- const sizeDesc = offset !== undefined || limit !== undefined ? " (partial)" : "";
546
- return `Flagged '${pathStr}'${sizeDesc} — reason: ${reason}`;
547
- }
548
- // Binary file — flag in full, no partial support
549
- if (offset !== undefined || limit !== undefined) {
550
- return "Error: offset/limit not supported for binary files. Flag the full file instead.";
551
- }
552
- let data;
553
- try {
554
- data = fs.readFileSync(resolved);
555
- }
556
- catch {
557
- return `Error: could not read file at '${pathStr}'`;
558
- }
559
- if (data.length > FlagFileTool.MAX_BINARY_SIZE) {
560
- const sizeMB = Math.floor(data.length / (1024 * 1024));
561
- return `Error: file is ${sizeMB}MB — exceeds 100MB limit`;
562
- }
563
- this.onFlag({
564
- originalPath: resolved,
565
- reason,
566
- data,
567
- isText: false,
568
- });
569
- return `Flagged '${pathStr}' (binary, ${data.length} bytes) — reason: ${reason}`;
570
- }
571
- }
572
- exports.FlagFileTool = FlagFileTool;
573
- //# sourceMappingURL=filesystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/tools/filesystem.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- /**
2
- * tools/index.ts — Tool interface, registry, and closure tool
3
- *
4
- * Mirrors PRBEAgentTools.swift tool protocol + registry pattern.
5
- */
6
- import type { PRBEToolDeclaration, PRBEToolParameter } from "../models";
7
- export interface PRBETool {
8
- readonly declaration: PRBEToolDeclaration;
9
- execute(args: Record<string, unknown>): Promise<string>;
10
- }
11
- export declare class PRBEToolRegistry {
12
- private tools;
13
- register(tool: PRBETool): void;
14
- allDeclarations(): PRBEToolDeclaration[];
15
- execute(name: string, args: Record<string, unknown>): Promise<string>;
16
- }
17
- export declare class PRBEClosureTool implements PRBETool {
18
- readonly declaration: PRBEToolDeclaration;
19
- private readonly handler;
20
- constructor(name: string, description: string, parameters: PRBEToolParameter[], handler: (args: Record<string, unknown>) => Promise<string>);
21
- execute(args: Record<string, unknown>): Promise<string>;
22
- }
23
- /**
24
- * Resolve a path string and validate it against auto-approved directories.
25
- * Returns the resolved absolute path or null if outside auto-approved directories.
26
- */
27
- export declare function resolveAndValidate(pathStr: string, autoApprovedDirs: string[]): string | null;
28
- /** Result of resolveWithAccessRequest — resolved path, null (silently denied), or error string for the agent */
29
- export type PathResolution = {
30
- path: string;
31
- } | {
32
- error: string;
33
- } | null;
34
- /**
35
- * Resolve a path, requesting user access if outside auto-approved directories.
36
- * When a requester is available and the path fails validation, prompts
37
- * the user for permission and caches the grant in `grantedPaths`.
38
- *
39
- * Returns { path } on success, { error } with a message for the agent, or null.
40
- */
41
- export declare function resolveWithAccessRequest(pathStr: string, autoApprovedDirs: string[], grantedPaths: Set<string>, requester?: import("../interactions").PRBEInteractionRequester): Promise<PathResolution>;
42
- /**
43
- * Format byte sizes for human-readable output.
44
- */
45
- export declare function humanReadableSize(bytes: number): string;
46
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAMxE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAoC;IAEjD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI9B,eAAe,IAAI,mBAAmB,EAAE;IAIlC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAO5E;AAMD,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,SAAgB,WAAW,EAAE,mBAAmB,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqD;gBAG3E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;IAMvD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAG9D;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAqB7F;AAED,gHAAgH;AAChH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EAAE,EAC1B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,SAAS,CAAC,EAAE,OAAO,iBAAiB,EAAE,wBAAwB,GAC7D,OAAO,CAAC,cAAc,CAAC,CAyCzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvD"}