funolio-agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -0
- package/dist/clerk/index.d.ts +62 -0
- package/dist/clerk/index.d.ts.map +1 -0
- package/dist/clerk/index.js +186 -0
- package/dist/clerk/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/configure.d.ts +2 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +252 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +151 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +170 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/start.d.ts +8 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +179 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +55 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +113 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +83 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +338 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/registry.d.ts +32 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +139 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/message-loop.d.ts +18 -0
- package/dist/message-loop.d.ts.map +1 -0
- package/dist/message-loop.js +165 -0
- package/dist/message-loop.js.map +1 -0
- package/dist/mqtt-client.d.ts +67 -0
- package/dist/mqtt-client.d.ts.map +1 -0
- package/dist/mqtt-client.js +148 -0
- package/dist/mqtt-client.js.map +1 -0
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +183 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +161 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +42 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +10 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +173 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/retry.d.ts +6 -0
- package/dist/providers/retry.d.ts.map +1 -0
- package/dist/providers/retry.js +38 -0
- package/dist/providers/retry.js.map +1 -0
- package/dist/subagent/index.d.ts +8 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +14 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/orchestrator.d.ts +67 -0
- package/dist/subagent/orchestrator.d.ts.map +1 -0
- package/dist/subagent/orchestrator.js +152 -0
- package/dist/subagent/orchestrator.js.map +1 -0
- package/dist/subagent/queue.d.ts +66 -0
- package/dist/subagent/queue.d.ts.map +1 -0
- package/dist/subagent/queue.js +298 -0
- package/dist/subagent/queue.js.map +1 -0
- package/dist/subagent/types.d.ts +76 -0
- package/dist/subagent/types.d.ts.map +1 -0
- package/dist/subagent/types.js +14 -0
- package/dist/subagent/types.js.map +1 -0
- package/dist/tools/edit-file.d.ts +3 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +112 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/git-tools.d.ts +5 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +144 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/index.d.ts +40 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +126 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/installer.d.ts +41 -0
- package/dist/tools/installer.d.ts.map +1 -0
- package/dist/tools/installer.js +227 -0
- package/dist/tools/installer.js.map +1 -0
- package/dist/tools/list-directory.d.ts +3 -0
- package/dist/tools/list-directory.d.ts.map +1 -0
- package/dist/tools/list-directory.js +107 -0
- package/dist/tools/list-directory.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +89 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/run-command.d.ts +3 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +86 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/sandbox.d.ts +17 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +78 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/write-file.d.ts +3 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +88 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/verification/index.d.ts +17 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +224 -0
- package/dist/verification/index.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,112 @@
|
|
|
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.editFileTool = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const sandbox_1 = require("./sandbox");
|
|
39
|
+
exports.editFileTool = {
|
|
40
|
+
name: 'edit_file',
|
|
41
|
+
description: 'Edit a file by replacing exact text (search/replace). The old_string must match exactly.',
|
|
42
|
+
parameters: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
properties: {
|
|
45
|
+
path: { type: 'string', description: 'File path relative to project root' },
|
|
46
|
+
old_string: { type: 'string', description: 'Exact text to find and replace' },
|
|
47
|
+
new_string: { type: 'string', description: 'Replacement text' },
|
|
48
|
+
},
|
|
49
|
+
required: ['path', 'old_string', 'new_string'],
|
|
50
|
+
},
|
|
51
|
+
async execute(args, ctx) {
|
|
52
|
+
const filePath = args.path;
|
|
53
|
+
const oldString = args.old_string;
|
|
54
|
+
const newString = args.new_string;
|
|
55
|
+
try {
|
|
56
|
+
const resolved = (0, sandbox_1.resolveSandboxed)(ctx.projectDir, filePath);
|
|
57
|
+
await (0, sandbox_1.checkFileSize)(resolved, ctx.maxFileSize);
|
|
58
|
+
const content = await fs.promises.readFile(resolved, 'utf-8');
|
|
59
|
+
if (!content.includes(oldString)) {
|
|
60
|
+
return {
|
|
61
|
+
tool_call_id: '',
|
|
62
|
+
name: 'edit_file',
|
|
63
|
+
success: false,
|
|
64
|
+
output: '',
|
|
65
|
+
error: `old_string not found in ${filePath}. The text to replace must match exactly (including whitespace and indentation).`,
|
|
66
|
+
verified: true,
|
|
67
|
+
verification_details: 'Edit failed: old_string not found',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Check for multiple occurrences
|
|
71
|
+
const occurrences = content.split(oldString).length - 1;
|
|
72
|
+
if (occurrences > 1) {
|
|
73
|
+
return {
|
|
74
|
+
tool_call_id: '',
|
|
75
|
+
name: 'edit_file',
|
|
76
|
+
success: false,
|
|
77
|
+
output: '',
|
|
78
|
+
error: `old_string found ${occurrences} times in ${filePath}. Please provide a more specific string that matches exactly once.`,
|
|
79
|
+
verified: true,
|
|
80
|
+
verification_details: `Edit failed: ${occurrences} occurrences found`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const newContent = content.replace(oldString, newString);
|
|
84
|
+
await fs.promises.writeFile(resolved, newContent, 'utf-8');
|
|
85
|
+
// Generate simple diff info
|
|
86
|
+
const oldLines = oldString.split('\n').length;
|
|
87
|
+
const newLines = newString.split('\n').length;
|
|
88
|
+
return {
|
|
89
|
+
tool_call_id: '',
|
|
90
|
+
name: 'edit_file',
|
|
91
|
+
success: true,
|
|
92
|
+
output: `Replaced ${oldLines} line(s) with ${newLines} line(s) in ${filePath}`,
|
|
93
|
+
diff: `--- ${filePath}\n+++ ${filePath}\n-${oldString.split('\n').join('\n-')}\n+${newString.split('\n').join('\n+')}`,
|
|
94
|
+
verified: false, // Verification will re-read to confirm
|
|
95
|
+
verification_details: 'Pending verification',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
100
|
+
return {
|
|
101
|
+
tool_call_id: '',
|
|
102
|
+
name: 'edit_file',
|
|
103
|
+
success: false,
|
|
104
|
+
output: '',
|
|
105
|
+
error: msg,
|
|
106
|
+
verified: true,
|
|
107
|
+
verification_details: `Edit failed: ${msg}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=edit-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../src/tools/edit-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-tools.d.ts","sourceRoot":"","sources":["../../src/tools/git-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA2B,MAAM,UAAU,CAAC;AAqBnE,eAAO,MAAM,aAAa,EAAE,cA4B3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,cAqCzB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cA2D3B,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gitCommitTool = exports.gitDiffTool = exports.gitStatusTool = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
function execGit(args, cwd, timeout) {
|
|
6
|
+
return new Promise((resolve) => {
|
|
7
|
+
(0, child_process_1.execFile)('git', args, {
|
|
8
|
+
cwd,
|
|
9
|
+
timeout: timeout * 1000,
|
|
10
|
+
maxBuffer: 1024 * 1024,
|
|
11
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
|
|
12
|
+
}, (error, stdout, stderr) => {
|
|
13
|
+
const exitCode = error && 'code' in error ? error.code ?? 1 : 0;
|
|
14
|
+
resolve({ stdout: stdout || '', stderr: stderr || '', exitCode });
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.gitStatusTool = {
|
|
19
|
+
name: 'git_status',
|
|
20
|
+
description: 'Show the working tree status (git status).',
|
|
21
|
+
parameters: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {},
|
|
24
|
+
required: [],
|
|
25
|
+
},
|
|
26
|
+
async execute(_args, ctx) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await execGit(['status', '--porcelain=v1', '-b'], ctx.projectDir, ctx.commandTimeout);
|
|
29
|
+
return {
|
|
30
|
+
tool_call_id: '',
|
|
31
|
+
name: 'git_status',
|
|
32
|
+
success: result.exitCode === 0,
|
|
33
|
+
output: result.stdout || '(clean working tree)',
|
|
34
|
+
exit_code: result.exitCode,
|
|
35
|
+
stderr: result.stderr,
|
|
36
|
+
error: result.exitCode !== 0 ? result.stderr : undefined,
|
|
37
|
+
verified: true,
|
|
38
|
+
verification_details: `git status completed with exit code ${result.exitCode}`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
43
|
+
return { tool_call_id: '', name: 'git_status', success: false, output: '', error: msg, verified: true, verification_details: msg };
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
exports.gitDiffTool = {
|
|
48
|
+
name: 'git_diff',
|
|
49
|
+
description: 'Show changes in the working directory or between commits.',
|
|
50
|
+
parameters: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
staged: { type: 'boolean', description: 'Show staged changes (--cached)' },
|
|
54
|
+
path: { type: 'string', description: 'Limit diff to a specific path' },
|
|
55
|
+
ref: { type: 'string', description: 'Compare against a specific ref (e.g., HEAD~1)' },
|
|
56
|
+
},
|
|
57
|
+
required: [],
|
|
58
|
+
},
|
|
59
|
+
async execute(args, ctx) {
|
|
60
|
+
try {
|
|
61
|
+
const gitArgs = ['diff'];
|
|
62
|
+
if (args.staged)
|
|
63
|
+
gitArgs.push('--cached');
|
|
64
|
+
if (args.ref)
|
|
65
|
+
gitArgs.push(args.ref);
|
|
66
|
+
if (args.path)
|
|
67
|
+
gitArgs.push('--', args.path);
|
|
68
|
+
const result = await execGit(gitArgs, ctx.projectDir, ctx.commandTimeout);
|
|
69
|
+
return {
|
|
70
|
+
tool_call_id: '',
|
|
71
|
+
name: 'git_diff',
|
|
72
|
+
success: result.exitCode === 0,
|
|
73
|
+
output: result.stdout || '(no changes)',
|
|
74
|
+
exit_code: result.exitCode,
|
|
75
|
+
stderr: result.stderr,
|
|
76
|
+
error: result.exitCode !== 0 ? result.stderr : undefined,
|
|
77
|
+
verified: true,
|
|
78
|
+
verification_details: `git diff completed with exit code ${result.exitCode}`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
return { tool_call_id: '', name: 'git_diff', success: false, output: '', error: msg, verified: true, verification_details: msg };
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
exports.gitCommitTool = {
|
|
88
|
+
name: 'git_commit',
|
|
89
|
+
description: 'Stage files and create a git commit.',
|
|
90
|
+
parameters: {
|
|
91
|
+
type: 'object',
|
|
92
|
+
properties: {
|
|
93
|
+
message: { type: 'string', description: 'Commit message' },
|
|
94
|
+
files: {
|
|
95
|
+
type: 'array',
|
|
96
|
+
items: { type: 'string' },
|
|
97
|
+
description: 'Files to stage (default: all changed files)',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
required: ['message'],
|
|
101
|
+
},
|
|
102
|
+
async execute(args, ctx) {
|
|
103
|
+
try {
|
|
104
|
+
const message = args.message;
|
|
105
|
+
const files = args.files;
|
|
106
|
+
// Stage files
|
|
107
|
+
const addArgs = files && files.length > 0
|
|
108
|
+
? ['add', ...files]
|
|
109
|
+
: ['add', '-A'];
|
|
110
|
+
const addResult = await execGit(addArgs, ctx.projectDir, ctx.commandTimeout);
|
|
111
|
+
if (addResult.exitCode !== 0) {
|
|
112
|
+
return {
|
|
113
|
+
tool_call_id: '',
|
|
114
|
+
name: 'git_commit',
|
|
115
|
+
success: false,
|
|
116
|
+
output: addResult.stdout,
|
|
117
|
+
error: `git add failed: ${addResult.stderr}`,
|
|
118
|
+
exit_code: addResult.exitCode,
|
|
119
|
+
stderr: addResult.stderr,
|
|
120
|
+
verified: true,
|
|
121
|
+
verification_details: `git add failed with exit code ${addResult.exitCode}`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Commit
|
|
125
|
+
const commitResult = await execGit(['commit', '-m', message], ctx.projectDir, ctx.commandTimeout);
|
|
126
|
+
return {
|
|
127
|
+
tool_call_id: '',
|
|
128
|
+
name: 'git_commit',
|
|
129
|
+
success: commitResult.exitCode === 0,
|
|
130
|
+
output: commitResult.stdout,
|
|
131
|
+
exit_code: commitResult.exitCode,
|
|
132
|
+
stderr: commitResult.stderr,
|
|
133
|
+
error: commitResult.exitCode !== 0 ? commitResult.stderr : undefined,
|
|
134
|
+
verified: false, // Verification will check git log
|
|
135
|
+
verification_details: 'Pending verification',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
140
|
+
return { tool_call_id: '', name: 'git_commit', success: false, output: '', error: msg, verified: true, verification_details: msg };
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=git-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-tools.js","sourceRoot":"","sources":["../../src/tools/git-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3D: Tool Execution Engine
|
|
3
|
+
* Registry of all 8 tools with sandboxed execution.
|
|
4
|
+
*/
|
|
5
|
+
import { ToolDefinition, ToolContext, ToolCall, ToolResult } from '../types';
|
|
6
|
+
import { MCPManager } from '../mcp/manager';
|
|
7
|
+
declare const BUILTIN_TOOLS: ToolDefinition[];
|
|
8
|
+
/** Backward compat alias */
|
|
9
|
+
declare const ALL_TOOLS: ToolDefinition[];
|
|
10
|
+
declare const toolMap: Map<string, ToolDefinition>;
|
|
11
|
+
/**
|
|
12
|
+
* Get tool definitions for LLM function calling schema.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getToolDefinitions(): Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
parameters: Record<string, unknown>;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Execute a single tool call within the given context.
|
|
21
|
+
*/
|
|
22
|
+
export declare function executeTool(call: ToolCall, ctx: ToolContext): Promise<ToolResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Create a default tool context for a project.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createToolContext(projectDir: string, overrides?: Partial<ToolContext>): ToolContext;
|
|
27
|
+
/**
|
|
28
|
+
* Get all tool definitions including MCP tools (Phase 3J).
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAllToolDefinitions(mcpManager?: MCPManager): Array<{
|
|
31
|
+
name: string;
|
|
32
|
+
description: string;
|
|
33
|
+
parameters: Record<string, unknown>;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Execute a tool call, checking MCP tools if not a builtin.
|
|
37
|
+
*/
|
|
38
|
+
export declare function executeToolWithMCP(call: ToolCall, ctx: ToolContext, mcpManager?: MCPManager): Promise<ToolResult>;
|
|
39
|
+
export { ALL_TOOLS, BUILTIN_TOOLS, toolMap };
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAO7E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,QAAA,MAAM,aAAa,EAAE,cAAc,EASlC,CAAC;AAEF,4BAA4B;AAC5B,QAAA,MAAM,SAAS,EAAE,cAAc,EAAkB,CAAC;AAElD,QAAA,MAAM,OAAO,6BAEZ,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAMtH;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAQnG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAgBhJ;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,UAAU,CAAC,CA6BrB;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3D: Tool Execution Engine
|
|
4
|
+
* Registry of all 8 tools with sandboxed execution.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.toolMap = exports.BUILTIN_TOOLS = exports.ALL_TOOLS = void 0;
|
|
8
|
+
exports.getToolDefinitions = getToolDefinitions;
|
|
9
|
+
exports.executeTool = executeTool;
|
|
10
|
+
exports.createToolContext = createToolContext;
|
|
11
|
+
exports.getAllToolDefinitions = getAllToolDefinitions;
|
|
12
|
+
exports.executeToolWithMCP = executeToolWithMCP;
|
|
13
|
+
const read_file_1 = require("./read-file");
|
|
14
|
+
const write_file_1 = require("./write-file");
|
|
15
|
+
const edit_file_1 = require("./edit-file");
|
|
16
|
+
const list_directory_1 = require("./list-directory");
|
|
17
|
+
const run_command_1 = require("./run-command");
|
|
18
|
+
const git_tools_1 = require("./git-tools");
|
|
19
|
+
const BUILTIN_TOOLS = [
|
|
20
|
+
read_file_1.readFileTool,
|
|
21
|
+
write_file_1.writeFileTool,
|
|
22
|
+
edit_file_1.editFileTool,
|
|
23
|
+
list_directory_1.listDirectoryTool,
|
|
24
|
+
run_command_1.runCommandTool,
|
|
25
|
+
git_tools_1.gitStatusTool,
|
|
26
|
+
git_tools_1.gitDiffTool,
|
|
27
|
+
git_tools_1.gitCommitTool,
|
|
28
|
+
];
|
|
29
|
+
exports.BUILTIN_TOOLS = BUILTIN_TOOLS;
|
|
30
|
+
/** Backward compat alias */
|
|
31
|
+
const ALL_TOOLS = BUILTIN_TOOLS;
|
|
32
|
+
exports.ALL_TOOLS = ALL_TOOLS;
|
|
33
|
+
const toolMap = new Map(ALL_TOOLS.map((t) => [t.name, t]));
|
|
34
|
+
exports.toolMap = toolMap;
|
|
35
|
+
/**
|
|
36
|
+
* Get tool definitions for LLM function calling schema.
|
|
37
|
+
*/
|
|
38
|
+
function getToolDefinitions() {
|
|
39
|
+
return ALL_TOOLS.map((t) => ({
|
|
40
|
+
name: t.name,
|
|
41
|
+
description: t.description,
|
|
42
|
+
parameters: t.parameters,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Execute a single tool call within the given context.
|
|
47
|
+
*/
|
|
48
|
+
async function executeTool(call, ctx) {
|
|
49
|
+
const tool = toolMap.get(call.name);
|
|
50
|
+
if (!tool) {
|
|
51
|
+
return {
|
|
52
|
+
tool_call_id: call.id,
|
|
53
|
+
name: call.name,
|
|
54
|
+
success: false,
|
|
55
|
+
output: '',
|
|
56
|
+
error: `Unknown tool: ${call.name}. Available tools: ${ALL_TOOLS.map((t) => t.name).join(', ')}`,
|
|
57
|
+
verified: true,
|
|
58
|
+
verification_details: 'Tool not found',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const result = await tool.execute(call.arguments, ctx);
|
|
62
|
+
result.tool_call_id = call.id;
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create a default tool context for a project.
|
|
67
|
+
*/
|
|
68
|
+
function createToolContext(projectDir, overrides) {
|
|
69
|
+
return {
|
|
70
|
+
projectDir,
|
|
71
|
+
commandTimeout: 60,
|
|
72
|
+
maxCommandTimeout: 300,
|
|
73
|
+
maxFileSize: 1024 * 1024, // 1MB
|
|
74
|
+
...overrides,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all tool definitions including MCP tools (Phase 3J).
|
|
79
|
+
*/
|
|
80
|
+
function getAllToolDefinitions(mcpManager) {
|
|
81
|
+
const builtinDefs = BUILTIN_TOOLS.map((t) => ({
|
|
82
|
+
name: t.name,
|
|
83
|
+
description: t.description,
|
|
84
|
+
parameters: t.parameters,
|
|
85
|
+
}));
|
|
86
|
+
if (!mcpManager)
|
|
87
|
+
return builtinDefs;
|
|
88
|
+
const mcpDefs = mcpManager.getToolDefinitions().map((t) => ({
|
|
89
|
+
name: t.name,
|
|
90
|
+
description: t.description,
|
|
91
|
+
parameters: t.parameters,
|
|
92
|
+
}));
|
|
93
|
+
return [...builtinDefs, ...mcpDefs];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Execute a tool call, checking MCP tools if not a builtin.
|
|
97
|
+
*/
|
|
98
|
+
async function executeToolWithMCP(call, ctx, mcpManager) {
|
|
99
|
+
// Try builtin first
|
|
100
|
+
const tool = toolMap.get(call.name);
|
|
101
|
+
if (tool) {
|
|
102
|
+
const result = await tool.execute(call.arguments, ctx);
|
|
103
|
+
result.tool_call_id = call.id;
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
// Try MCP tools
|
|
107
|
+
if (mcpManager) {
|
|
108
|
+
const mcpTools = mcpManager.getToolDefinitions();
|
|
109
|
+
const mcpTool = mcpTools.find((t) => t.name === call.name);
|
|
110
|
+
if (mcpTool) {
|
|
111
|
+
const result = await mcpTool.execute(call.arguments, ctx);
|
|
112
|
+
result.tool_call_id = call.id;
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
tool_call_id: call.id,
|
|
118
|
+
name: call.name,
|
|
119
|
+
success: false,
|
|
120
|
+
output: '',
|
|
121
|
+
error: `Unknown tool: ${call.name}`,
|
|
122
|
+
verified: true,
|
|
123
|
+
verification_details: 'Tool not found',
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool installer — pulls user's tool selections from the server
|
|
3
|
+
* and auto-installs matching CLI tools / packages.
|
|
4
|
+
*/
|
|
5
|
+
/** Maps web-selected intents to installable tools */
|
|
6
|
+
export interface ToolMapping {
|
|
7
|
+
intent: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
tools: ToolDef[];
|
|
10
|
+
heavy?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolDef {
|
|
13
|
+
name: string;
|
|
14
|
+
checkCmd: string;
|
|
15
|
+
installCmd: string;
|
|
16
|
+
mcpConfig?: McpServerConfig;
|
|
17
|
+
}
|
|
18
|
+
export interface McpServerConfig {
|
|
19
|
+
command: string;
|
|
20
|
+
args?: string[];
|
|
21
|
+
env?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
export declare const TOOL_REGISTRY: ToolMapping[];
|
|
24
|
+
export interface InstallResult {
|
|
25
|
+
tool: string;
|
|
26
|
+
status: 'already_installed' | 'installed' | 'failed' | 'skipped_lite';
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetch user's tool selections from the server.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fetchToolSelections(token: string): Promise<string[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Install tools for the given intents. Returns results per tool.
|
|
35
|
+
*/
|
|
36
|
+
export declare function installTools(intents: string[], lite: boolean): InstallResult[];
|
|
37
|
+
/**
|
|
38
|
+
* Generate ~/.funolio/mcp.json based on installed tools.
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateMcpConfig(intents: string[], lite: boolean): void;
|
|
41
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/tools/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EAmFtC,CAAC;AAWF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,aAAa,EAAE,CAmC9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAwBxE"}
|