asm-mcp-proxy 2.0.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 +109 -0
- package/dist/gateway-client.d.ts +21 -0
- package/dist/gateway-client.d.ts.map +1 -0
- package/dist/gateway-client.js +266 -0
- package/dist/gateway-client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +424 -0
- package/dist/index.js.map +1 -0
- package/dist/local-tools.d.ts +93 -0
- package/dist/local-tools.d.ts.map +1 -0
- package/dist/local-tools.js +356 -0
- package/dist/local-tools.js.map +1 -0
- package/dist/router.d.ts +44 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +223 -0
- package/dist/router.js.map +1 -0
- package/dist/token-manager.d.ts +55 -0
- package/dist/token-manager.d.ts.map +1 -0
- package/dist/token-manager.js +210 -0
- package/dist/token-manager.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local Tools - Filesystem, Git, Terminal
|
|
4
|
+
* Tools que executam localmente no dispositivo do desenvolvedor
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.LOCAL_TOOLS = void 0;
|
|
41
|
+
exports.readFile = readFile;
|
|
42
|
+
exports.writeToFile = writeToFile;
|
|
43
|
+
exports.edit = edit;
|
|
44
|
+
exports.multiEdit = multiEdit;
|
|
45
|
+
exports.listDir = listDir;
|
|
46
|
+
exports.grepSearch = grepSearch;
|
|
47
|
+
exports.findByName = findByName;
|
|
48
|
+
exports.runCommand = runCommand;
|
|
49
|
+
exports.gitOperation = gitOperation;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const util_1 = require("util");
|
|
53
|
+
const child_process_1 = require("child_process");
|
|
54
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
55
|
+
/**
|
|
56
|
+
* Read file from local filesystem
|
|
57
|
+
*/
|
|
58
|
+
async function readFile(args) {
|
|
59
|
+
try {
|
|
60
|
+
const { file_path, offset, limit } = args;
|
|
61
|
+
if (!fs.existsSync(file_path)) {
|
|
62
|
+
return { success: false, error: `File not found: ${file_path}` };
|
|
63
|
+
}
|
|
64
|
+
const content = fs.readFileSync(file_path, 'utf-8');
|
|
65
|
+
const lines = content.split('\n');
|
|
66
|
+
// Se offset/limit especificados, retornar apenas essas linhas
|
|
67
|
+
if (offset !== undefined && limit !== undefined) {
|
|
68
|
+
const selectedLines = lines.slice(offset - 1, offset - 1 + limit);
|
|
69
|
+
const numberedLines = selectedLines.map((line, idx) => `${offset + idx}\t${line}`).join('\n');
|
|
70
|
+
return { success: true, output: numberedLines };
|
|
71
|
+
}
|
|
72
|
+
// Retornar arquivo completo com números de linha
|
|
73
|
+
const numberedContent = lines.map((line, idx) => `${idx + 1}\t${line}`).join('\n');
|
|
74
|
+
return { success: true, output: numberedContent };
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return { success: false, error: error.message };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Write file to local filesystem
|
|
82
|
+
*/
|
|
83
|
+
async function writeToFile(args) {
|
|
84
|
+
try {
|
|
85
|
+
const { TargetFile, CodeContent, EmptyFile } = args;
|
|
86
|
+
// Criar diretórios se não existirem
|
|
87
|
+
const dir = path.dirname(TargetFile);
|
|
88
|
+
if (!fs.existsSync(dir)) {
|
|
89
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
90
|
+
}
|
|
91
|
+
const content = EmptyFile ? '' : CodeContent;
|
|
92
|
+
fs.writeFileSync(TargetFile, content, 'utf-8');
|
|
93
|
+
return { success: true, output: { file: TargetFile, created: true } };
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return { success: false, error: error.message };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Edit file (find and replace)
|
|
101
|
+
*/
|
|
102
|
+
async function edit(args) {
|
|
103
|
+
try {
|
|
104
|
+
const { file_path, old_string, new_string, replace_all } = args;
|
|
105
|
+
if (!fs.existsSync(file_path)) {
|
|
106
|
+
return { success: false, error: `File not found: ${file_path}` };
|
|
107
|
+
}
|
|
108
|
+
let content = fs.readFileSync(file_path, 'utf-8');
|
|
109
|
+
// Verificar se old_string existe
|
|
110
|
+
if (!content.includes(old_string)) {
|
|
111
|
+
return { success: false, error: `String not found in file: ${old_string}` };
|
|
112
|
+
}
|
|
113
|
+
// Replace
|
|
114
|
+
if (replace_all) {
|
|
115
|
+
content = content.split(old_string).join(new_string);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Replace apenas primeira ocorrência
|
|
119
|
+
content = content.replace(old_string, new_string);
|
|
120
|
+
}
|
|
121
|
+
fs.writeFileSync(file_path, content, 'utf-8');
|
|
122
|
+
return { success: true, output: { file: file_path, modified: true } };
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return { success: false, error: error.message };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Multi-edit (múltiplas edições em um arquivo)
|
|
130
|
+
*/
|
|
131
|
+
async function multiEdit(args) {
|
|
132
|
+
try {
|
|
133
|
+
const { file_path, edits } = args;
|
|
134
|
+
if (!fs.existsSync(file_path)) {
|
|
135
|
+
return { success: false, error: `File not found: ${file_path}` };
|
|
136
|
+
}
|
|
137
|
+
let content = fs.readFileSync(file_path, 'utf-8');
|
|
138
|
+
// Aplicar edições sequencialmente
|
|
139
|
+
for (const edit of edits) {
|
|
140
|
+
if (!content.includes(edit.old_string)) {
|
|
141
|
+
return { success: false, error: `String not found in file: ${edit.old_string}` };
|
|
142
|
+
}
|
|
143
|
+
if (edit.replace_all) {
|
|
144
|
+
content = content.split(edit.old_string).join(edit.new_string);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
content = content.replace(edit.old_string, edit.new_string);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
fs.writeFileSync(file_path, content, 'utf-8');
|
|
151
|
+
return { success: true, output: { file: file_path, edits: edits.length, modified: true } };
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
return { success: false, error: error.message };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* List directory contents
|
|
159
|
+
*/
|
|
160
|
+
async function listDir(args) {
|
|
161
|
+
try {
|
|
162
|
+
const { DirectoryPath } = args;
|
|
163
|
+
if (!fs.existsSync(DirectoryPath)) {
|
|
164
|
+
return { success: false, error: `Directory not found: ${DirectoryPath}` };
|
|
165
|
+
}
|
|
166
|
+
const items = fs.readdirSync(DirectoryPath);
|
|
167
|
+
const result = items.map((item) => {
|
|
168
|
+
const fullPath = path.join(DirectoryPath, item);
|
|
169
|
+
const stats = fs.statSync(fullPath);
|
|
170
|
+
return {
|
|
171
|
+
name: item,
|
|
172
|
+
path: fullPath,
|
|
173
|
+
type: stats.isDirectory() ? 'directory' : 'file',
|
|
174
|
+
size: stats.isFile() ? stats.size : undefined,
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
return { success: true, output: result };
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
return { success: false, error: error.message };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Grep search (busca em arquivos)
|
|
185
|
+
*/
|
|
186
|
+
async function grepSearch(args) {
|
|
187
|
+
try {
|
|
188
|
+
const { SearchPath, Query, Includes, CaseSensitive, FixedStrings, MatchPerLine } = args;
|
|
189
|
+
let command = 'rg';
|
|
190
|
+
// Flags
|
|
191
|
+
if (!CaseSensitive)
|
|
192
|
+
command += ' -i';
|
|
193
|
+
if (FixedStrings)
|
|
194
|
+
command += ' -F';
|
|
195
|
+
if (MatchPerLine)
|
|
196
|
+
command += ' -n';
|
|
197
|
+
// Includes (glob patterns)
|
|
198
|
+
if (Includes && Includes.length > 0) {
|
|
199
|
+
Includes.forEach((pattern) => {
|
|
200
|
+
command += ` -g '${pattern}'`;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
command += ` '${Query}' '${SearchPath}'`;
|
|
204
|
+
const { stdout } = await execAsync(command);
|
|
205
|
+
return { success: true, output: stdout };
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
// rg retorna exit code 1 quando não encontra nada
|
|
209
|
+
if (error.code === 1) {
|
|
210
|
+
return { success: true, output: '' };
|
|
211
|
+
}
|
|
212
|
+
return { success: false, error: error.message };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Find by name (busca por nome de arquivo)
|
|
217
|
+
*/
|
|
218
|
+
async function findByName(args) {
|
|
219
|
+
try {
|
|
220
|
+
const { SearchDirectory, Pattern, Extensions, Type, MaxDepth } = args;
|
|
221
|
+
let command = `fd '${Pattern}' '${SearchDirectory}'`;
|
|
222
|
+
if (Type === 'file')
|
|
223
|
+
command += ' -t f';
|
|
224
|
+
if (Type === 'directory')
|
|
225
|
+
command += ' -t d';
|
|
226
|
+
if (MaxDepth)
|
|
227
|
+
command += ` -d ${MaxDepth}`;
|
|
228
|
+
if (Extensions && Extensions.length > 0) {
|
|
229
|
+
Extensions.forEach((ext) => {
|
|
230
|
+
command += ` -e ${ext}`;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
const { stdout } = await execAsync(command);
|
|
234
|
+
const files = stdout.trim().split('\n').filter(Boolean);
|
|
235
|
+
return { success: true, output: files };
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if (error.code === 1) {
|
|
239
|
+
return { success: true, output: [] };
|
|
240
|
+
}
|
|
241
|
+
return { success: false, error: error.message };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Run command (terminal)
|
|
246
|
+
*/
|
|
247
|
+
async function runCommand(args) {
|
|
248
|
+
try {
|
|
249
|
+
const { CommandLine, Cwd, Blocking } = args;
|
|
250
|
+
const options = {};
|
|
251
|
+
if (Cwd)
|
|
252
|
+
options.cwd = Cwd;
|
|
253
|
+
if (Blocking === false) {
|
|
254
|
+
// Non-blocking: retornar imediatamente
|
|
255
|
+
(0, child_process_1.exec)(CommandLine, options);
|
|
256
|
+
return { success: true, output: { status: 'started', command: CommandLine } };
|
|
257
|
+
}
|
|
258
|
+
// Blocking: aguardar conclusão
|
|
259
|
+
const { stdout, stderr } = await execAsync(CommandLine, options);
|
|
260
|
+
return {
|
|
261
|
+
success: true,
|
|
262
|
+
output: {
|
|
263
|
+
stdout: String(stdout).trim(),
|
|
264
|
+
stderr: String(stderr).trim(),
|
|
265
|
+
command: CommandLine,
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
return {
|
|
271
|
+
success: false,
|
|
272
|
+
error: error.message,
|
|
273
|
+
output: {
|
|
274
|
+
stdout: error.stdout?.trim() || '',
|
|
275
|
+
stderr: error.stderr?.trim() || '',
|
|
276
|
+
command: args.CommandLine,
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Git operations
|
|
283
|
+
*/
|
|
284
|
+
async function gitOperation(args) {
|
|
285
|
+
try {
|
|
286
|
+
const { operation, cwd, params } = args;
|
|
287
|
+
const workDir = cwd || process.cwd();
|
|
288
|
+
let command = 'git';
|
|
289
|
+
switch (operation) {
|
|
290
|
+
case 'status':
|
|
291
|
+
command += ' status --short';
|
|
292
|
+
break;
|
|
293
|
+
case 'diff':
|
|
294
|
+
command += ' diff';
|
|
295
|
+
if (params?.file)
|
|
296
|
+
command += ` ${params.file}`;
|
|
297
|
+
break;
|
|
298
|
+
case 'log':
|
|
299
|
+
const limit = params?.limit || 10;
|
|
300
|
+
command += ` log -n ${limit} --oneline`;
|
|
301
|
+
break;
|
|
302
|
+
case 'branch':
|
|
303
|
+
command += ' branch';
|
|
304
|
+
break;
|
|
305
|
+
case 'add':
|
|
306
|
+
command += ` add ${params?.files || '.'}`;
|
|
307
|
+
break;
|
|
308
|
+
case 'commit':
|
|
309
|
+
command += ` commit -m "${params?.message || 'Update'}"`;
|
|
310
|
+
break;
|
|
311
|
+
case 'push':
|
|
312
|
+
command += ' push';
|
|
313
|
+
break;
|
|
314
|
+
case 'pull':
|
|
315
|
+
command += ' pull';
|
|
316
|
+
break;
|
|
317
|
+
default:
|
|
318
|
+
return { success: false, error: `Unknown git operation: ${operation}` };
|
|
319
|
+
}
|
|
320
|
+
const { stdout, stderr } = await execAsync(command, { cwd: workDir });
|
|
321
|
+
return {
|
|
322
|
+
success: true,
|
|
323
|
+
output: {
|
|
324
|
+
operation,
|
|
325
|
+
stdout: stdout.trim(),
|
|
326
|
+
stderr: stderr.trim(),
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
return {
|
|
332
|
+
success: false,
|
|
333
|
+
error: error.message,
|
|
334
|
+
output: {
|
|
335
|
+
operation: args.operation,
|
|
336
|
+
stdout: error.stdout?.trim() || '',
|
|
337
|
+
stderr: error.stderr?.trim() || '',
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Mapeamento de tools locais
|
|
344
|
+
*/
|
|
345
|
+
exports.LOCAL_TOOLS = {
|
|
346
|
+
read_file: readFile,
|
|
347
|
+
write_to_file: writeToFile,
|
|
348
|
+
edit,
|
|
349
|
+
multi_edit: multiEdit,
|
|
350
|
+
list_dir: listDir,
|
|
351
|
+
grep_search: grepSearch,
|
|
352
|
+
find_by_name: findByName,
|
|
353
|
+
run_command: runCommand,
|
|
354
|
+
git_operation: gitOperation,
|
|
355
|
+
};
|
|
356
|
+
//# sourceMappingURL=local-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-tools.js","sourceRoot":"","sources":["../src/local-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router Inteligente - Cloud vs Local
|
|
3
|
+
* Decide se uma tool executa localmente ou vai para o gateway
|
|
4
|
+
*/
|
|
5
|
+
import { ToolResult } from './local-tools';
|
|
6
|
+
/**
|
|
7
|
+
* Decide se a tool executa local ou cloud
|
|
8
|
+
*/
|
|
9
|
+
export declare function shouldExecuteLocally(toolName: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Executa uma tool (local ou cloud)
|
|
12
|
+
*/
|
|
13
|
+
export declare function executeTool(toolName: string, args: Record<string, unknown>, gatewayUrl: string, jwtToken: string): Promise<ToolResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Lista todas as tools disponíveis (local + cloud)
|
|
16
|
+
*/
|
|
17
|
+
export declare function listAllTools(gatewayUrl: string, jwtToken: string): Promise<{
|
|
18
|
+
local: string[];
|
|
19
|
+
cloud: string[];
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Estatísticas de execução
|
|
23
|
+
*/
|
|
24
|
+
export interface ExecutionStats {
|
|
25
|
+
totalCalls: number;
|
|
26
|
+
localCalls: number;
|
|
27
|
+
cloudCalls: number;
|
|
28
|
+
errors: number;
|
|
29
|
+
avgLatencyLocal: number;
|
|
30
|
+
avgLatencyCloud: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Executa tool com tracking de métricas
|
|
34
|
+
*/
|
|
35
|
+
export declare function executeToolWithMetrics(toolName: string, args: Record<string, unknown>, gatewayUrl: string, jwtToken: string): Promise<ToolResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Obter estatísticas de execução
|
|
38
|
+
*/
|
|
39
|
+
export declare function getExecutionStats(): ExecutionStats;
|
|
40
|
+
/**
|
|
41
|
+
* Resetar estatísticas
|
|
42
|
+
*/
|
|
43
|
+
export declare function resetExecutionStats(): void;
|
|
44
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAe,UAAU,EAAE,MAAM,eAAe,CAAC;AAkGxD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkB9D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiB/C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAWD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAS1C"}
|
package/dist/router.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Router Inteligente - Cloud vs Local
|
|
4
|
+
* Decide se uma tool executa localmente ou vai para o gateway
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.shouldExecuteLocally = shouldExecuteLocally;
|
|
8
|
+
exports.executeTool = executeTool;
|
|
9
|
+
exports.listAllTools = listAllTools;
|
|
10
|
+
exports.executeToolWithMetrics = executeToolWithMetrics;
|
|
11
|
+
exports.getExecutionStats = getExecutionStats;
|
|
12
|
+
exports.resetExecutionStats = resetExecutionStats;
|
|
13
|
+
const local_tools_1 = require("./local-tools");
|
|
14
|
+
const gateway_client_1 = require("./gateway-client");
|
|
15
|
+
/**
|
|
16
|
+
* Tools que SEMPRE executam localmente (filesystem, git, terminal)
|
|
17
|
+
*/
|
|
18
|
+
const LOCAL_TOOL_NAMES = new Set([
|
|
19
|
+
// Filesystem
|
|
20
|
+
'read_file',
|
|
21
|
+
'write_to_file',
|
|
22
|
+
'edit',
|
|
23
|
+
'multi_edit',
|
|
24
|
+
'list_dir',
|
|
25
|
+
'grep_search',
|
|
26
|
+
'find_by_name',
|
|
27
|
+
// Terminal & Git
|
|
28
|
+
'run_command',
|
|
29
|
+
'git_operation',
|
|
30
|
+
// Notebook (se implementado)
|
|
31
|
+
'read_notebook',
|
|
32
|
+
'edit_notebook',
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Tools que SEMPRE vão para o cloud (ASM tools, AI, memory, etc.)
|
|
36
|
+
*/
|
|
37
|
+
const CLOUD_TOOL_NAMES = new Set([
|
|
38
|
+
// ASM Core
|
|
39
|
+
'asm_get_working_context',
|
|
40
|
+
'asm_search_patterns',
|
|
41
|
+
'asm_store_pattern',
|
|
42
|
+
// ASM Generate
|
|
43
|
+
'asm_generate_component',
|
|
44
|
+
'asm_generate_api',
|
|
45
|
+
'asm_generate',
|
|
46
|
+
// ASM Validate
|
|
47
|
+
'asm_gate5_validate',
|
|
48
|
+
'asm_validate',
|
|
49
|
+
// ASM AI
|
|
50
|
+
'asm_ai_chat',
|
|
51
|
+
'asm_ai_plan',
|
|
52
|
+
'asm_ai_review',
|
|
53
|
+
// ASM Memory & Knowledge
|
|
54
|
+
'asm_query',
|
|
55
|
+
'asm_learn',
|
|
56
|
+
'asm_knowledge',
|
|
57
|
+
// ASM Workflow
|
|
58
|
+
'asm_workflow',
|
|
59
|
+
'asm_proactive',
|
|
60
|
+
'asm_intent',
|
|
61
|
+
// ASM Deploy & Metrics
|
|
62
|
+
'asm_deploy',
|
|
63
|
+
'asm_metrics',
|
|
64
|
+
'asm_health',
|
|
65
|
+
// ASM Framework
|
|
66
|
+
'asm_framework',
|
|
67
|
+
'asm_snapshot',
|
|
68
|
+
'asm_config',
|
|
69
|
+
// ASM Advanced
|
|
70
|
+
'asm_figma',
|
|
71
|
+
'asm_browser',
|
|
72
|
+
'asm_ollama',
|
|
73
|
+
'asm_rls',
|
|
74
|
+
'asm_rules',
|
|
75
|
+
'asm_semantic',
|
|
76
|
+
'asm_sandbox',
|
|
77
|
+
'asm_mcp',
|
|
78
|
+
'asm_terminal',
|
|
79
|
+
'asm_write',
|
|
80
|
+
'asm_propose',
|
|
81
|
+
'asm_personas',
|
|
82
|
+
'asm_learning',
|
|
83
|
+
'asm_hooks',
|
|
84
|
+
'asm_git',
|
|
85
|
+
'asm_catalog',
|
|
86
|
+
'asm_execution',
|
|
87
|
+
'asm_do',
|
|
88
|
+
'asm_gateway',
|
|
89
|
+
]);
|
|
90
|
+
/**
|
|
91
|
+
* Mapeia nomes MCP para nomes internos de local tools
|
|
92
|
+
*/
|
|
93
|
+
function mapMCPToLocalToolName(mcpName) {
|
|
94
|
+
// MCP usa snake_case, local tools também
|
|
95
|
+
return mcpName;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Decide se a tool executa local ou cloud
|
|
99
|
+
*/
|
|
100
|
+
function shouldExecuteLocally(toolName) {
|
|
101
|
+
// Verificar se está na lista de local tools
|
|
102
|
+
if (LOCAL_TOOL_NAMES.has(toolName)) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
// Verificar se está na lista de cloud tools
|
|
106
|
+
if (CLOUD_TOOL_NAMES.has(toolName)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
// Default: se começa com "asm_", vai para cloud
|
|
110
|
+
if (toolName.startsWith('asm_')) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
// Caso contrário, tentar executar localmente
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Executa uma tool (local ou cloud)
|
|
118
|
+
*/
|
|
119
|
+
async function executeTool(toolName, args, gatewayUrl, jwtToken) {
|
|
120
|
+
const isLocal = shouldExecuteLocally(toolName);
|
|
121
|
+
if (isLocal) {
|
|
122
|
+
// Executar localmente
|
|
123
|
+
const localToolName = mapMCPToLocalToolName(toolName);
|
|
124
|
+
const localTool = local_tools_1.LOCAL_TOOLS[localToolName];
|
|
125
|
+
if (!localTool) {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: `Local tool not found: ${toolName}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
return await localTool(args);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: `Local tool execution failed: ${error.message}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Executar no cloud (gateway)
|
|
143
|
+
try {
|
|
144
|
+
return await (0, gateway_client_1.forwardToGateway)(toolName, args, gatewayUrl, jwtToken);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: `Cloud tool execution failed: ${error.message}`,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Lista todas as tools disponíveis (local + cloud)
|
|
156
|
+
*/
|
|
157
|
+
async function listAllTools(gatewayUrl, jwtToken) {
|
|
158
|
+
// Local tools
|
|
159
|
+
const localTools = Array.from(LOCAL_TOOL_NAMES);
|
|
160
|
+
// Cloud tools (buscar do gateway via tools/list)
|
|
161
|
+
let cloudTools = [];
|
|
162
|
+
try {
|
|
163
|
+
const response = await (0, gateway_client_1.forwardToGateway)('tools/list', {}, gatewayUrl, jwtToken);
|
|
164
|
+
if (response.success && Array.isArray(response.output)) {
|
|
165
|
+
cloudTools = response.output.map((tool) => tool.name);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
// Se falhar, usar lista hardcoded
|
|
170
|
+
cloudTools = Array.from(CLOUD_TOOL_NAMES);
|
|
171
|
+
}
|
|
172
|
+
return { local: localTools, cloud: cloudTools };
|
|
173
|
+
}
|
|
174
|
+
let stats = {
|
|
175
|
+
totalCalls: 0,
|
|
176
|
+
localCalls: 0,
|
|
177
|
+
cloudCalls: 0,
|
|
178
|
+
errors: 0,
|
|
179
|
+
avgLatencyLocal: 0,
|
|
180
|
+
avgLatencyCloud: 0,
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Executa tool com tracking de métricas
|
|
184
|
+
*/
|
|
185
|
+
async function executeToolWithMetrics(toolName, args, gatewayUrl, jwtToken) {
|
|
186
|
+
const startTime = Date.now();
|
|
187
|
+
const isLocal = shouldExecuteLocally(toolName);
|
|
188
|
+
stats.totalCalls++;
|
|
189
|
+
const result = await executeTool(toolName, args, gatewayUrl, jwtToken);
|
|
190
|
+
const latency = Date.now() - startTime;
|
|
191
|
+
if (isLocal) {
|
|
192
|
+
stats.localCalls++;
|
|
193
|
+
stats.avgLatencyLocal = (stats.avgLatencyLocal * (stats.localCalls - 1) + latency) / stats.localCalls;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
stats.cloudCalls++;
|
|
197
|
+
stats.avgLatencyCloud = (stats.avgLatencyCloud * (stats.cloudCalls - 1) + latency) / stats.cloudCalls;
|
|
198
|
+
}
|
|
199
|
+
if (!result.success) {
|
|
200
|
+
stats.errors++;
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Obter estatísticas de execução
|
|
206
|
+
*/
|
|
207
|
+
function getExecutionStats() {
|
|
208
|
+
return { ...stats };
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Resetar estatísticas
|
|
212
|
+
*/
|
|
213
|
+
function resetExecutionStats() {
|
|
214
|
+
stats = {
|
|
215
|
+
totalCalls: 0,
|
|
216
|
+
localCalls: 0,
|
|
217
|
+
cloudCalls: 0,
|
|
218
|
+
errors: 0,
|
|
219
|
+
avgLatencyLocal: 0,
|
|
220
|
+
avgLatencyCloud: 0,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|