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.
@@ -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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"}
@@ -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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"}