borderless-agent 0.0.1-alpha.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 (90) hide show
  1. package/README.md +274 -0
  2. package/dist/agentBuilder.d.ts +51 -0
  3. package/dist/agentBuilder.d.ts.map +1 -0
  4. package/dist/agentBuilder.js +130 -0
  5. package/dist/agentBuilder.js.map +1 -0
  6. package/dist/agentInstance.d.ts +45 -0
  7. package/dist/agentInstance.d.ts.map +1 -0
  8. package/dist/agentInstance.js +501 -0
  9. package/dist/agentInstance.js.map +1 -0
  10. package/dist/agentsCore.d.ts +16 -0
  11. package/dist/agentsCore.d.ts.map +1 -0
  12. package/dist/agentsCore.js +50 -0
  13. package/dist/agentsCore.js.map +1 -0
  14. package/dist/cli/index.d.ts +5 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +11 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/main.d.ts +36 -0
  19. package/dist/cli/main.d.ts.map +1 -0
  20. package/dist/cli/main.js +306 -0
  21. package/dist/cli/main.js.map +1 -0
  22. package/dist/config.d.ts +26 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +98 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/contextCore.d.ts +97 -0
  27. package/dist/contextCore.d.ts.map +1 -0
  28. package/dist/contextCore.js +533 -0
  29. package/dist/contextCore.js.map +1 -0
  30. package/dist/index.d.ts +28 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +46 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llmProtocol.d.ts +60 -0
  35. package/dist/llmProtocol.d.ts.map +1 -0
  36. package/dist/llmProtocol.js +202 -0
  37. package/dist/llmProtocol.js.map +1 -0
  38. package/dist/loopCore.d.ts +22 -0
  39. package/dist/loopCore.d.ts.map +1 -0
  40. package/dist/loopCore.js +288 -0
  41. package/dist/loopCore.js.map +1 -0
  42. package/dist/main.d.ts +9 -0
  43. package/dist/main.d.ts.map +1 -0
  44. package/dist/main.js +15 -0
  45. package/dist/main.js.map +1 -0
  46. package/dist/memoryCore.d.ts +37 -0
  47. package/dist/memoryCore.d.ts.map +1 -0
  48. package/dist/memoryCore.js +346 -0
  49. package/dist/memoryCore.js.map +1 -0
  50. package/dist/server/app.d.ts +13 -0
  51. package/dist/server/app.d.ts.map +1 -0
  52. package/dist/server/app.js +200 -0
  53. package/dist/server/app.js.map +1 -0
  54. package/dist/sessionCore.d.ts +54 -0
  55. package/dist/sessionCore.d.ts.map +1 -0
  56. package/dist/sessionCore.js +312 -0
  57. package/dist/sessionCore.js.map +1 -0
  58. package/dist/skillsCore.d.ts +23 -0
  59. package/dist/skillsCore.d.ts.map +1 -0
  60. package/dist/skillsCore.js +202 -0
  61. package/dist/skillsCore.js.map +1 -0
  62. package/dist/storage/cloudBackend.d.ts +48 -0
  63. package/dist/storage/cloudBackend.d.ts.map +1 -0
  64. package/dist/storage/cloudBackend.js +301 -0
  65. package/dist/storage/cloudBackend.js.map +1 -0
  66. package/dist/storage/fileBackend.d.ts +41 -0
  67. package/dist/storage/fileBackend.d.ts.map +1 -0
  68. package/dist/storage/fileBackend.js +240 -0
  69. package/dist/storage/fileBackend.js.map +1 -0
  70. package/dist/storage/index.d.ts +21 -0
  71. package/dist/storage/index.d.ts.map +1 -0
  72. package/dist/storage/index.js +58 -0
  73. package/dist/storage/index.js.map +1 -0
  74. package/dist/storage/protocols.d.ts +29 -0
  75. package/dist/storage/protocols.d.ts.map +1 -0
  76. package/dist/storage/protocols.js +20 -0
  77. package/dist/storage/protocols.js.map +1 -0
  78. package/dist/todoCore.d.ts +15 -0
  79. package/dist/todoCore.d.ts.map +1 -0
  80. package/dist/todoCore.js +52 -0
  81. package/dist/todoCore.js.map +1 -0
  82. package/dist/toolsCore.d.ts +31 -0
  83. package/dist/toolsCore.d.ts.map +1 -0
  84. package/dist/toolsCore.js +609 -0
  85. package/dist/toolsCore.js.map +1 -0
  86. package/dist/types.d.ts +144 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +8 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +48 -0
@@ -0,0 +1,609 @@
1
+ "use strict";
2
+ /**
3
+ * toolsCore.ts - Tool definitions and implementations (bash, file ops, skills, tasks).
4
+ *
5
+ * Read: pagination (offset/limit) and chunked read for large files.
6
+ * Grep: context lines (before/after) around matches.
7
+ * Write: atomic write + backup before overwrite.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.LOADED_SKILLS = exports.MAX_TOOL_ROUNDS = exports.ALL_TOOLS = exports.SKILL_TOOL = exports.TASK_TOOL = exports.BASE_TOOLS = void 0;
44
+ exports.setFileAccessCallback = setFileAccessCallback;
45
+ exports.setExecutorApprovalCallback = setExecutorApprovalCallback;
46
+ exports.getToolsForAgent = getToolsForAgent;
47
+ exports.safePath = safePath;
48
+ exports.runBash = runBash;
49
+ exports.runRead = runRead;
50
+ exports.runGrep = runGrep;
51
+ exports.runWrite = runWrite;
52
+ exports.runEdit = runEdit;
53
+ exports.runTodo = runTodo;
54
+ exports.runSearchKnowledgeBase = runSearchKnowledgeBase;
55
+ exports.runReadEmail = runReadEmail;
56
+ exports.runSkill = runSkill;
57
+ exports.runTask = runTask;
58
+ exports.executeTool = executeTool;
59
+ exports.executeToolAsync = executeToolAsync;
60
+ const child_process_1 = require("child_process");
61
+ const fs = __importStar(require("fs"));
62
+ const path = __importStar(require("path"));
63
+ const config_1 = require("./config");
64
+ const skillsCore_1 = require("./skillsCore");
65
+ const todoCore_1 = require("./todoCore");
66
+ const agentsCore_1 = require("./agentsCore");
67
+ // Mid-term memory: optional callback when a file is read
68
+ let _fileAccessCallback = null;
69
+ function setFileAccessCallback(cb) {
70
+ _fileAccessCallback = cb;
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Tool format conversion
74
+ // ---------------------------------------------------------------------------
75
+ function toolsToOpenAI(tools) {
76
+ return tools.map((t) => ({
77
+ type: 'function',
78
+ function: {
79
+ name: t.name,
80
+ description: t.description ?? '',
81
+ parameters: t.input_schema ?? { type: 'object', properties: {} },
82
+ },
83
+ }));
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Tool definitions
87
+ // ---------------------------------------------------------------------------
88
+ exports.BASE_TOOLS = [
89
+ {
90
+ name: 'bash',
91
+ description: 'Run shell command.',
92
+ input_schema: {
93
+ type: 'object',
94
+ properties: { command: { type: 'string' } },
95
+ required: ['command'],
96
+ },
97
+ },
98
+ {
99
+ name: 'read_file',
100
+ description: 'Read file contents with pagination. Use offset/limit for large files to avoid token overflow.',
101
+ input_schema: {
102
+ type: 'object',
103
+ properties: {
104
+ path: { type: 'string' },
105
+ offset: {
106
+ type: 'integer',
107
+ description: 'Line number to start from (0-based). Default 0.',
108
+ },
109
+ limit: {
110
+ type: 'integer',
111
+ description: 'Max lines to return. Default 500. Omit for first page only.',
112
+ },
113
+ },
114
+ required: ['path'],
115
+ },
116
+ },
117
+ {
118
+ name: 'grep',
119
+ description: 'Search for pattern in file; show matching lines with optional context (lines before/after).',
120
+ input_schema: {
121
+ type: 'object',
122
+ properties: {
123
+ path: { type: 'string' },
124
+ pattern: { type: 'string' },
125
+ context_before: {
126
+ type: 'integer',
127
+ description: 'Lines to show before each match. Default 0.',
128
+ },
129
+ context_after: {
130
+ type: 'integer',
131
+ description: 'Lines to show after each match. Default 0.',
132
+ },
133
+ },
134
+ required: ['path', 'pattern'],
135
+ },
136
+ },
137
+ {
138
+ name: 'write_file',
139
+ description: 'Write to file. Creates backup of existing file before overwrite (rollback-friendly).',
140
+ input_schema: {
141
+ type: 'object',
142
+ properties: {
143
+ path: { type: 'string' },
144
+ content: { type: 'string' },
145
+ },
146
+ required: ['path', 'content'],
147
+ },
148
+ },
149
+ {
150
+ name: 'edit_file',
151
+ description: 'Replace text in file.',
152
+ input_schema: {
153
+ type: 'object',
154
+ properties: {
155
+ path: { type: 'string' },
156
+ old_text: { type: 'string' },
157
+ new_text: { type: 'string' },
158
+ },
159
+ required: ['path', 'old_text', 'new_text'],
160
+ },
161
+ },
162
+ {
163
+ name: 'TodoWrite',
164
+ description: 'Update task list.',
165
+ input_schema: {
166
+ type: 'object',
167
+ properties: {
168
+ items: {
169
+ type: 'array',
170
+ items: {
171
+ type: 'object',
172
+ properties: {
173
+ content: { type: 'string' },
174
+ status: {
175
+ type: 'string',
176
+ enum: ['pending', 'in_progress', 'completed'],
177
+ },
178
+ activeForm: { type: 'string' },
179
+ },
180
+ required: ['content', 'status', 'activeForm'],
181
+ },
182
+ },
183
+ },
184
+ required: ['items'],
185
+ },
186
+ },
187
+ {
188
+ name: 'search_knowledge_base',
189
+ description: 'Query knowledge base (stub). Use for Explorer when user asks to look up docs or KB.',
190
+ input_schema: {
191
+ type: 'object',
192
+ properties: { query: { type: 'string' } },
193
+ required: ['query'],
194
+ },
195
+ },
196
+ {
197
+ name: 'read_email',
198
+ description: 'Read emails (stub). Use for Explorer when user asks to check or read mail.',
199
+ input_schema: {
200
+ type: 'object',
201
+ properties: {
202
+ folder: { type: 'string', description: 'Inbox, Sent, etc.' },
203
+ limit: { type: 'integer' },
204
+ },
205
+ required: [],
206
+ },
207
+ },
208
+ ];
209
+ exports.TASK_TOOL = {
210
+ name: 'Task',
211
+ description: 'Spawn a subagent for a focused subtask.\n\nAgent types:\n' +
212
+ Object.entries(agentsCore_1.AGENT_TYPES)
213
+ .map(([name, cfg]) => `- ${name}: ${cfg.description}`)
214
+ .join('\n'),
215
+ input_schema: {
216
+ type: 'object',
217
+ properties: {
218
+ description: {
219
+ type: 'string',
220
+ description: 'Short task description (3-5 words)',
221
+ },
222
+ prompt: {
223
+ type: 'string',
224
+ description: 'Detailed instructions for the subagent',
225
+ },
226
+ agent_type: {
227
+ type: 'string',
228
+ enum: Object.keys(agentsCore_1.AGENT_TYPES),
229
+ },
230
+ },
231
+ required: ['description', 'prompt', 'agent_type'],
232
+ },
233
+ };
234
+ exports.SKILL_TOOL = {
235
+ name: 'Skill',
236
+ description: `Load a skill to gain specialized knowledge for a task.
237
+
238
+ Available skills:
239
+ ${skillsCore_1.SKILLS.getDescriptions()}
240
+
241
+ When to use:
242
+ - IMMEDIATELY when user task matches a skill description
243
+ - Before attempting domain-specific work (PDF, MCP, etc.)
244
+
245
+ The skill content will be injected into the conversation, giving you
246
+ detailed instructions and access to resources.`,
247
+ input_schema: {
248
+ type: 'object',
249
+ properties: {
250
+ skill: {
251
+ type: 'string',
252
+ description: 'Name of the skill to load',
253
+ },
254
+ },
255
+ required: ['skill'],
256
+ },
257
+ };
258
+ exports.ALL_TOOLS = [
259
+ ...exports.BASE_TOOLS,
260
+ exports.TASK_TOOL,
261
+ exports.SKILL_TOOL,
262
+ ];
263
+ // Safety limit
264
+ exports.MAX_TOOL_ROUNDS = 20;
265
+ // Track loaded skills per interaction
266
+ exports.LOADED_SKILLS = new Set();
267
+ // Approval callback for Executor
268
+ let _executorApprovalCallback = null;
269
+ function setExecutorApprovalCallback(callback) {
270
+ _executorApprovalCallback = callback;
271
+ }
272
+ function defaultExecutorApproval(toolName, toolArgs) {
273
+ let summary = `[Executor] ${toolName}`;
274
+ if (toolName === 'bash') {
275
+ summary += `: ${(toolArgs.command ?? '').slice(0, 80)}`;
276
+ }
277
+ else if (toolName === 'write_file') {
278
+ summary += `: write ${toolArgs.path ?? ''} (${(toolArgs.content ?? '').length} chars)`;
279
+ }
280
+ else if (toolName === 'edit_file') {
281
+ summary += `: edit ${toolArgs.path ?? ''}`;
282
+ }
283
+ else {
284
+ summary += `: ${JSON.stringify(toolArgs)}`;
285
+ }
286
+ // In non-interactive contexts, deny by default
287
+ config_1.logger.info(`\n${summary}\nApproval required (auto-denied in non-interactive mode)`);
288
+ return false;
289
+ }
290
+ function getToolsForAgent(agentType) {
291
+ const allowed = agentsCore_1.AGENT_TYPES[agentType]?.tools ?? '*';
292
+ if (allowed === '*')
293
+ return exports.BASE_TOOLS;
294
+ return exports.BASE_TOOLS.filter((t) => allowed.includes(t.name));
295
+ }
296
+ // ---------------------------------------------------------------------------
297
+ // Path safety
298
+ // ---------------------------------------------------------------------------
299
+ function safePath(p) {
300
+ const resolved = path.resolve(config_1.WORKDIR, p);
301
+ if (!resolved.startsWith(path.resolve(config_1.WORKDIR))) {
302
+ throw new Error(`Path escapes workspace: ${p}`);
303
+ }
304
+ return resolved;
305
+ }
306
+ // ---------------------------------------------------------------------------
307
+ // Tool implementations
308
+ // ---------------------------------------------------------------------------
309
+ const READ_DEFAULT_LIMIT = 500;
310
+ const READ_MAX_CHARS = 50_000;
311
+ function runBash(cmd) {
312
+ if (['rm -rf /', 'sudo', 'shutdown'].some((d) => cmd.includes(d))) {
313
+ return 'Error: Dangerous command';
314
+ }
315
+ try {
316
+ const result = (0, child_process_1.execSync)(cmd, {
317
+ cwd: config_1.WORKDIR,
318
+ encoding: 'utf-8',
319
+ timeout: 60_000,
320
+ stdio: ['pipe', 'pipe', 'pipe'],
321
+ });
322
+ return (result || '(no output)').trim().slice(0, 50_000);
323
+ }
324
+ catch (e) {
325
+ const stderr = e.stderr?.toString() ?? '';
326
+ const stdout = e.stdout?.toString() ?? '';
327
+ return ((stdout + stderr).trim() || `Error: ${e.message}`).slice(0, 50_000);
328
+ }
329
+ }
330
+ function runRead(filePath, offset = 0, limit) {
331
+ try {
332
+ const fp = safePath(filePath);
333
+ if (!fs.existsSync(fp))
334
+ return `Error: File not found: ${filePath}`;
335
+ if (_fileAccessCallback) {
336
+ try {
337
+ _fileAccessCallback(filePath);
338
+ }
339
+ catch { /* ignore */ }
340
+ }
341
+ const effectiveLimit = Math.max(1, Math.min(limit ?? READ_DEFAULT_LIMIT, 2000));
342
+ offset = Math.max(0, offset);
343
+ const content = fs.readFileSync(fp, 'utf-8');
344
+ const allLines = content.split('\n');
345
+ const lines = allLines.slice(offset, offset + effectiveLimit);
346
+ if (lines.length >= effectiveLimit && offset + effectiveLimit < allLines.length) {
347
+ const footer = `\n[Lines ${offset + 1}-${offset + lines.length}; use offset=${offset + effectiveLimit} for next page]`;
348
+ let out = lines.join('\n');
349
+ if (out.length > READ_MAX_CHARS)
350
+ out = out.slice(0, READ_MAX_CHARS) + '\n...[truncated]';
351
+ return out + footer;
352
+ }
353
+ let out = lines.join('\n');
354
+ if (out.length > READ_MAX_CHARS)
355
+ out = out.slice(0, READ_MAX_CHARS) + '\n...[truncated]';
356
+ return out + `\n[Lines ${offset + 1}-${offset + lines.length}]`;
357
+ }
358
+ catch (e) {
359
+ return `Error: ${e.message}`;
360
+ }
361
+ }
362
+ function runGrep(filePath, pattern, contextBefore = 0, contextAfter = 0) {
363
+ try {
364
+ const fp = safePath(filePath);
365
+ if (!fs.existsSync(fp))
366
+ return `Error: File not found: ${filePath}`;
367
+ contextBefore = Math.max(0, Math.min(contextBefore, 10));
368
+ contextAfter = Math.max(0, Math.min(contextAfter, 10));
369
+ let pat;
370
+ try {
371
+ pat = new RegExp(pattern);
372
+ }
373
+ catch {
374
+ pat = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
375
+ }
376
+ const lines = fs.readFileSync(fp, 'utf-8').split('\n');
377
+ const results = [];
378
+ let i = 0;
379
+ while (i < lines.length) {
380
+ if (pat.test(lines[i])) {
381
+ const start = Math.max(0, i - contextBefore);
382
+ const end = Math.min(lines.length, i + 1 + contextAfter);
383
+ for (let j = start; j < end; j++) {
384
+ const prefix = j !== i ? ' ' : '> ';
385
+ results.push(`${prefix}${j + 1}: ${lines[j]}`);
386
+ }
387
+ results.push('');
388
+ i = end;
389
+ }
390
+ else {
391
+ i++;
392
+ }
393
+ }
394
+ if (!results.length)
395
+ return `No matches for pattern '${pattern.slice(0, 60)}' in ${filePath}`;
396
+ return results.join('\n').trim().slice(0, READ_MAX_CHARS);
397
+ }
398
+ catch (e) {
399
+ return `Error: ${e.message}`;
400
+ }
401
+ }
402
+ function runWrite(filePath, content) {
403
+ try {
404
+ const fp = safePath(filePath);
405
+ const dir = path.dirname(fp);
406
+ fs.mkdirSync(dir, { recursive: true });
407
+ let didBackup = false;
408
+ let backupName = '';
409
+ if (fs.existsSync(fp)) {
410
+ backupName = fp + '.bak';
411
+ fs.copyFileSync(fp, backupName);
412
+ didBackup = true;
413
+ }
414
+ const tmp = fp + '.tmp';
415
+ fs.writeFileSync(tmp, content, 'utf-8');
416
+ fs.renameSync(tmp, fp);
417
+ return (`Wrote ${content.length} bytes to ${filePath}` +
418
+ (didBackup ? ` (backup: ${path.basename(backupName)})` : ''));
419
+ }
420
+ catch (e) {
421
+ return `Error: ${e.message}`;
422
+ }
423
+ }
424
+ function runEdit(filePath, oldText, newText) {
425
+ try {
426
+ const fp = safePath(filePath);
427
+ const text = fs.readFileSync(fp, 'utf-8');
428
+ if (!text.includes(oldText))
429
+ return `Error: Text not found in ${filePath}`;
430
+ fs.writeFileSync(fp, text.replace(oldText, newText), 'utf-8');
431
+ return `Edited ${filePath}`;
432
+ }
433
+ catch (e) {
434
+ return `Error: ${e.message}`;
435
+ }
436
+ }
437
+ function runTodo(items) {
438
+ try {
439
+ return todoCore_1.TODO.update(items);
440
+ }
441
+ catch (e) {
442
+ return `Error: ${e.message}`;
443
+ }
444
+ }
445
+ function runSearchKnowledgeBase(query) {
446
+ return ('[Stub] Knowledge base is not connected. ' +
447
+ 'Use read_file and grep on local files under the workspace for retrieval.');
448
+ }
449
+ function runReadEmail(folder = 'Inbox', limit = 10) {
450
+ return ('[Stub] Email is not connected. ' +
451
+ 'When integrated, this would list emails from the specified folder.');
452
+ }
453
+ function runSkill(skillName) {
454
+ if (exports.LOADED_SKILLS.has(skillName)) {
455
+ return (`(Skill '${skillName}' is already loaded for this task. ` +
456
+ 'Use the previously loaded knowledge to answer the user directly, ' +
457
+ 'and do NOT call the Skill tool again.)');
458
+ }
459
+ exports.LOADED_SKILLS.add(skillName);
460
+ const content = skillsCore_1.SKILLS.getSkillContent(skillName);
461
+ if (content === null) {
462
+ const available = skillsCore_1.SKILLS.listSkills().join(', ') || 'none';
463
+ return `Error: Unknown skill '${skillName}'. Available: ${available}`;
464
+ }
465
+ return `<skill-loaded name="${skillName}">
466
+ ${content}
467
+ </skill-loaded>
468
+
469
+ You have now loaded this skill. Use the knowledge above to complete the user's task.
470
+ Do NOT call the Skill tool again for this task; respond with your full answer in natural language.`;
471
+ }
472
+ function toolCallsToMsgShape(toolCalls) {
473
+ return toolCalls.map((tc) => ({
474
+ id: tc.id,
475
+ function: {
476
+ name: tc.name,
477
+ arguments: tc.arguments ? JSON.stringify(tc.arguments) : '{}',
478
+ },
479
+ }));
480
+ }
481
+ async function runTask(description, prompt, agentType, llm) {
482
+ if (!llm)
483
+ llm = config_1.defaultLlmProvider;
484
+ if (!(agentType in agentsCore_1.AGENT_TYPES))
485
+ return `Error: Unknown agent type '${agentType}'`;
486
+ const config = agentsCore_1.AGENT_TYPES[agentType];
487
+ const subSystem = `You are a ${agentType} subagent at ${config_1.WORKDIR}.
488
+
489
+ ${config.prompt}
490
+
491
+ Complete the task and return a clear, concise summary.`;
492
+ const subTools = getToolsForAgent(agentType);
493
+ const openaiTools = toolsToOpenAI(subTools);
494
+ const apiMessages = [
495
+ { role: 'system', content: subSystem },
496
+ { role: 'user', content: prompt },
497
+ ];
498
+ config_1.logger.info(` [${agentType}] ${description}`);
499
+ const start = Date.now();
500
+ let toolCount = 0;
501
+ let toolRounds = 0;
502
+ let lastText = '(subagent returned no text)';
503
+ while (true) {
504
+ const response = (await llm.chat(apiMessages, {
505
+ tools: openaiTools,
506
+ maxTokens: 8000,
507
+ stream: false,
508
+ }));
509
+ const tcs = response.toolCalls?.length
510
+ ? toolCallsToMsgShape(response.toolCalls)
511
+ : [];
512
+ const usage = response.usage;
513
+ if (usage && (usage.input_tokens || usage.output_tokens)) {
514
+ config_1.logger.info(` [${agentType}] Tokens: in ${usage.input_tokens ?? 0} out ${usage.output_tokens ?? 0}`);
515
+ }
516
+ if (response.content)
517
+ lastText = response.content.trim();
518
+ if (!tcs.length)
519
+ break;
520
+ toolRounds++;
521
+ if (toolRounds >= exports.MAX_TOOL_ROUNDS) {
522
+ config_1.logger.warning(` [${agentType}] Reached tool-use limit, stopping tool calls.`);
523
+ break;
524
+ }
525
+ const assistantToolCalls = tcs.map((tc) => ({
526
+ id: tc.id,
527
+ type: 'function',
528
+ function: { name: tc.function.name, arguments: tc.function.arguments },
529
+ }));
530
+ const results = [];
531
+ for (const tc of tcs) {
532
+ toolCount++;
533
+ const name = tc.function.name;
534
+ let args;
535
+ try {
536
+ args = JSON.parse(tc.function.arguments || '{}');
537
+ }
538
+ catch {
539
+ args = {};
540
+ }
541
+ let output;
542
+ if (config.requiresApproval && agentsCore_1.EXECUTOR_MUTATING_TOOLS.has(name)) {
543
+ const ask = _executorApprovalCallback ?? defaultExecutorApproval;
544
+ if (!ask(name, args)) {
545
+ output = 'Action not approved by user.';
546
+ }
547
+ else {
548
+ output = executeTool(name, args);
549
+ }
550
+ }
551
+ else {
552
+ output = executeTool(name, args);
553
+ }
554
+ results.push({ tool_call_id: tc.id, content: output });
555
+ }
556
+ apiMessages.push({
557
+ role: 'assistant',
558
+ content: response.content ?? '',
559
+ tool_calls: assistantToolCalls,
560
+ });
561
+ for (const r of results) {
562
+ apiMessages.push({
563
+ role: 'tool',
564
+ tool_call_id: r.tool_call_id,
565
+ content: r.content,
566
+ });
567
+ }
568
+ }
569
+ const elapsed = ((Date.now() - start) / 1000).toFixed(1);
570
+ config_1.logger.info(` [${agentType}] ${description} - done (${toolCount} tools, ${elapsed}s)`);
571
+ return lastText;
572
+ }
573
+ // ---------------------------------------------------------------------------
574
+ // Tool dispatcher
575
+ // ---------------------------------------------------------------------------
576
+ function executeTool(name, args) {
577
+ switch (name) {
578
+ case 'bash':
579
+ return runBash(args.command);
580
+ case 'read_file':
581
+ return runRead(args.path, args.offset ?? 0, args.limit);
582
+ case 'grep':
583
+ return runGrep(args.path, args.pattern, args.context_before ?? 0, args.context_after ?? 0);
584
+ case 'write_file':
585
+ return runWrite(args.path, args.content);
586
+ case 'edit_file':
587
+ return runEdit(args.path, args.old_text, args.new_text);
588
+ case 'TodoWrite':
589
+ return runTodo(args.items);
590
+ case 'search_knowledge_base':
591
+ return runSearchKnowledgeBase(args.query ?? '');
592
+ case 'read_email':
593
+ return runReadEmail(args.folder ?? 'Inbox', args.limit ?? 10);
594
+ case 'Task':
595
+ // runTask is async; return a placeholder — callers should use executeToolAsync
596
+ return '(Task tool requires async execution)';
597
+ case 'Skill':
598
+ return runSkill(args.skill);
599
+ default:
600
+ return `Unknown tool: ${name}`;
601
+ }
602
+ }
603
+ async function executeToolAsync(name, args) {
604
+ if (name === 'Task') {
605
+ return runTask(args.description, args.prompt, args.agent_type);
606
+ }
607
+ return executeTool(name, args);
608
+ }
609
+ //# sourceMappingURL=toolsCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolsCore.js","sourceRoot":"","sources":["../src/toolsCore.ts"],"names":[],"mappings":"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"}