ciscollm-cli 1.0.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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/cli/ui/ui.d.ts +10 -0
  4. package/dist/cli/ui/ui.js +25 -0
  5. package/dist/cli/ui/ui.js.map +1 -0
  6. package/dist/core/agent/AgentLoop.d.ts +38 -0
  7. package/dist/core/agent/AgentLoop.js +562 -0
  8. package/dist/core/agent/AgentLoop.js.map +1 -0
  9. package/dist/core/agent/CommandReferenceEngine.d.ts +43 -0
  10. package/dist/core/agent/CommandReferenceEngine.js +366 -0
  11. package/dist/core/agent/CommandReferenceEngine.js.map +1 -0
  12. package/dist/core/agent/MultiAgentCoordinator.d.ts +12 -0
  13. package/dist/core/agent/MultiAgentCoordinator.js +57 -0
  14. package/dist/core/agent/MultiAgentCoordinator.js.map +1 -0
  15. package/dist/core/agent/PromptEngine.d.ts +3 -0
  16. package/dist/core/agent/PromptEngine.js +57 -0
  17. package/dist/core/agent/PromptEngine.js.map +1 -0
  18. package/dist/core/guardrails/CommandFirewall.d.ts +10 -0
  19. package/dist/core/guardrails/CommandFirewall.js +108 -0
  20. package/dist/core/guardrails/CommandFirewall.js.map +1 -0
  21. package/dist/core/guardrails/ErrorAnalyzer.d.ts +7 -0
  22. package/dist/core/guardrails/ErrorAnalyzer.js +16 -0
  23. package/dist/core/guardrails/ErrorAnalyzer.js.map +1 -0
  24. package/dist/core/rollback/TransactionManager.d.ts +13 -0
  25. package/dist/core/rollback/TransactionManager.js +144 -0
  26. package/dist/core/rollback/TransactionManager.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +578 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/infrastructure/llm/LLMClient.d.ts +11 -0
  31. package/dist/infrastructure/llm/LLMClient.js +94 -0
  32. package/dist/infrastructure/llm/LLMClient.js.map +1 -0
  33. package/dist/infrastructure/llm/LocalLLMClient.d.ts +7 -0
  34. package/dist/infrastructure/llm/LocalLLMClient.js +39 -0
  35. package/dist/infrastructure/llm/LocalLLMClient.js.map +1 -0
  36. package/dist/infrastructure/llm/ToolDefinitions.d.ts +179 -0
  37. package/dist/infrastructure/llm/ToolDefinitions.js +150 -0
  38. package/dist/infrastructure/llm/ToolDefinitions.js.map +1 -0
  39. package/dist/infrastructure/protocols/BaseSession.d.ts +10 -0
  40. package/dist/infrastructure/protocols/BaseSession.js +39 -0
  41. package/dist/infrastructure/protocols/BaseSession.js.map +1 -0
  42. package/dist/infrastructure/protocols/MockSession.d.ts +43 -0
  43. package/dist/infrastructure/protocols/MockSession.js +505 -0
  44. package/dist/infrastructure/protocols/MockSession.js.map +1 -0
  45. package/dist/infrastructure/protocols/PlinkSerial.d.ts +16 -0
  46. package/dist/infrastructure/protocols/PlinkSerial.js +132 -0
  47. package/dist/infrastructure/protocols/PlinkSerial.js.map +1 -0
  48. package/dist/infrastructure/protocols/SshSession.d.ts +19 -0
  49. package/dist/infrastructure/protocols/SshSession.js +110 -0
  50. package/dist/infrastructure/protocols/SshSession.js.map +1 -0
  51. package/dist/infrastructure/protocols/TelnetSession.d.ts +17 -0
  52. package/dist/infrastructure/protocols/TelnetSession.js +177 -0
  53. package/dist/infrastructure/protocols/TelnetSession.js.map +1 -0
  54. package/dist/shared/constants.d.ts +8 -0
  55. package/dist/shared/constants.js +25 -0
  56. package/dist/shared/constants.js.map +1 -0
  57. package/dist/shared/types.d.ts +22 -0
  58. package/dist/shared/types.js +3 -0
  59. package/dist/shared/types.js.map +1 -0
  60. package/package.json +49 -0
@@ -0,0 +1,562 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CiscoAgentLoop = void 0;
7
+ const CommandFirewall_1 = require("../guardrails/CommandFirewall");
8
+ const ErrorAnalyzer_1 = require("../guardrails/ErrorAnalyzer");
9
+ const TransactionManager_1 = require("../rollback/TransactionManager");
10
+ const PromptEngine_1 = require("./PromptEngine");
11
+ const CommandReferenceEngine_1 = require("./CommandReferenceEngine");
12
+ const ToolDefinitions_1 = require("../../infrastructure/llm/ToolDefinitions");
13
+ const child_process_1 = require("child_process");
14
+ const ui_1 = require("../../cli/ui/ui");
15
+ const chalk_1 = __importDefault(require("chalk"));
16
+ class CiscoAgentLoop {
17
+ llmClient;
18
+ coordinator;
19
+ messages = [];
20
+ transactions = new Map();
21
+ firewall = new CommandFirewall_1.CommandFirewall();
22
+ lastCommandPerDevice = {};
23
+ commandHints = 'Reference status: not loaded.';
24
+ commandReferenceEngine = CommandReferenceEngine_1.CommandReferenceEngine.getInstance();
25
+ strictReferenceMode = false;
26
+ referenceTelemetry = true;
27
+ options;
28
+ validationNudgeCount = 0;
29
+ constructor(llmClient, coordinator, options = {}) {
30
+ this.llmClient = llmClient;
31
+ this.coordinator = coordinator;
32
+ this.options = options;
33
+ this.applyOptions(this.options);
34
+ }
35
+ applyOptions(options) {
36
+ if (typeof options.referenceTelemetry === 'boolean') {
37
+ this.referenceTelemetry = options.referenceTelemetry;
38
+ }
39
+ if (typeof options.strictReferenceMode === 'boolean') {
40
+ this.commandReferenceEngine.setStrictMode(options.strictReferenceMode);
41
+ }
42
+ }
43
+ async run(userGoal) {
44
+ const backupSpinner = (0, ui_1.createSpinner)('Initializing device configuration backups to flash...').start();
45
+ try {
46
+ for (const [id, session] of this.coordinator.getSessions().entries()) {
47
+ const tx = new TransactionManager_1.TransactionManager();
48
+ await tx.initializeBackup(session);
49
+ this.transactions.set(id, tx);
50
+ }
51
+ backupSpinner.succeed('Atomic configuration backups initialized.');
52
+ }
53
+ catch (e) {
54
+ backupSpinner.warn(`Backup initialization skipped or partially completed: ${e.message}`);
55
+ }
56
+ this.strictReferenceMode = this.commandReferenceEngine.isStrictModeEnabled();
57
+ const refSpinner = (0, ui_1.createSpinner)(`Loading Cisco command reference from cf_command_ref.pdf${this.strictReferenceMode ? ' (strict mode ON)' : ''}...`).start();
58
+ try {
59
+ this.commandHints = await this.commandReferenceEngine.getPromptHints(userGoal, 14);
60
+ const telemetry = this.commandReferenceEngine.getWarmupTelemetry();
61
+ refSpinner.succeed(`Cisco command reference hints loaded${this.strictReferenceMode ? ' with strict-mode validation enabled' : ''}.`);
62
+ if (this.referenceTelemetry) {
63
+ ui_1.logger.info(`[RefTelemetry] source=${telemetry.source} commands=${telemetry.commandCount} loadMs=${telemetry.durationMs} strict=${telemetry.strictMode ? 'on' : 'off'}`);
64
+ ui_1.logger.info(`[RefTelemetry] cache=${telemetry.cachePath}`);
65
+ if (telemetry.error) {
66
+ ui_1.logger.warn(`[RefTelemetry] detail=${telemetry.error}`);
67
+ }
68
+ }
69
+ }
70
+ catch (err) {
71
+ this.commandHints = `Reference status: unavailable (${err.message}).`;
72
+ refSpinner.warn('Cisco command reference hints unavailable. Continuing with base policy.');
73
+ }
74
+ const stateInfo = this.buildStateInfoString();
75
+ this.messages.push({
76
+ role: 'system',
77
+ content: PromptEngine_1.PromptEngine.getSystemPrompt(stateInfo, this.commandHints, this.strictReferenceMode)
78
+ });
79
+ this.messages.push({ role: 'user', content: userGoal });
80
+ let dynamicLoopActive = true;
81
+ let executionDepth = 0;
82
+ const MAX_STEPS = 15;
83
+ while (dynamicLoopActive && executionDepth < MAX_STEPS) {
84
+ executionDepth++;
85
+ const updatedStateInfo = this.buildStateInfoString();
86
+ this.messages[0] = {
87
+ role: 'system',
88
+ content: PromptEngine_1.PromptEngine.getSystemPrompt(updatedStateInfo, this.commandHints, this.strictReferenceMode)
89
+ };
90
+ let shellEnabled = false;
91
+ for (const session of this.coordinator.getSessions().values()) {
92
+ if (session.isShellEnabled()) {
93
+ shellEnabled = true;
94
+ break;
95
+ }
96
+ }
97
+ const activeTools = ToolDefinitions_1.CiscoAgentTools.filter(tool => {
98
+ const shellTools = ['define_shell_variable', 'execute_shell_loop', 'define_shell_function'];
99
+ if (shellTools.includes(tool.function.name)) {
100
+ return shellEnabled;
101
+ }
102
+ return true;
103
+ });
104
+ const modelSpinner = (0, ui_1.createSpinner)(`[Step ${executionDepth}/${MAX_STEPS}] Agent is thinking...`).start();
105
+ let response;
106
+ try {
107
+ response = await this.llmClient.generateCompletion(this.messages, activeTools);
108
+ this.messages.push(response);
109
+ modelSpinner.succeed(`[Step ${executionDepth}/${MAX_STEPS}] Thinking complete.`);
110
+ const thoughts = response.reasoning_content || response.content;
111
+ if (thoughts && thoughts.trim()) {
112
+ console.log(chalk_1.default.gray(' ' + '─'.repeat(40)));
113
+ thoughts.trim().split('\n').forEach(line => {
114
+ console.log(chalk_1.default.dim(` | ${line}`));
115
+ });
116
+ console.log(chalk_1.default.gray(' ' + '─'.repeat(40)));
117
+ }
118
+ }
119
+ catch (err) {
120
+ modelSpinner.fail(`[Step ${executionDepth}/${MAX_STEPS}] LLM Client failed to respond.`);
121
+ throw err;
122
+ }
123
+ if (response.tool_calls && response.tool_calls.length > 0) {
124
+ for (const call of response.tool_calls) {
125
+ if (call.function.name === 'execute_ios_command') {
126
+ await this.handleExecuteCommandCall(call);
127
+ }
128
+ else if (call.function.name === 'ping_test') {
129
+ await this.handlePingTestCall(call);
130
+ }
131
+ else if (call.function.name === 'enable_ios_shell') {
132
+ await this.handleEnableIosShellCall(call);
133
+ }
134
+ else if (call.function.name === 'define_shell_variable') {
135
+ await this.handleDefineShellVariableCall(call);
136
+ }
137
+ else if (call.function.name === 'execute_shell_loop') {
138
+ await this.handleExecuteShellLoopCall(call);
139
+ }
140
+ else if (call.function.name === 'define_shell_function') {
141
+ await this.handleDefineShellFunctionCall(call);
142
+ }
143
+ }
144
+ }
145
+ else {
146
+ const lastMutatedDevice = this.findLastMutatedDevice();
147
+ const hasRunPing = this.messages.some(m => m.role === 'tool' && m.name === 'ping_test');
148
+ if (lastMutatedDevice && !hasRunPing) {
149
+ this.validationNudgeCount++;
150
+ ui_1.logger.info('Agent finished configuration without running validation ping. Enforcing closed-loop validation...');
151
+ if (this.validationNudgeCount >= 2) {
152
+ ui_1.logger.warn('Model skipped ping_test repeatedly. Triggering automatic ping fallback.');
153
+ await this.triggerAutomaticValidationPing(lastMutatedDevice);
154
+ ui_1.logger.heading('FINAL AGENT REASONING SUMMARY');
155
+ console.log(chalk_1.default.yellow('Validation ping was auto-triggered by fallback policy after repeated non-tool responses.'));
156
+ dynamicLoopActive = false;
157
+ }
158
+ else {
159
+ this.messages.push({
160
+ role: 'user',
161
+ content: `System Validation Request: Your configurations are applied. You MUST perform exactly one ping_test tool call in your next response. If destination is unknown, use destination "127.0.0.1" and device "${lastMutatedDevice}". Do not declare success until ping_test has executed.`
162
+ });
163
+ }
164
+ }
165
+ else {
166
+ ui_1.logger.heading('FINAL AGENT REASONING SUMMARY');
167
+ console.log(chalk_1.default.green(response.reasoning_content || response.content || '(No final response content provided)'));
168
+ dynamicLoopActive = false;
169
+ }
170
+ }
171
+ }
172
+ if (executionDepth >= MAX_STEPS && dynamicLoopActive) {
173
+ ui_1.logger.warn('Maximum loop steps limit reached.');
174
+ }
175
+ }
176
+ async triggerAutomaticValidationPing(deviceId) {
177
+ const destination = await this.resolveValidationDestination(deviceId);
178
+ const fallbackCall = {
179
+ id: `auto_ping_${Date.now()}`,
180
+ type: 'function',
181
+ function: {
182
+ name: 'ping_test',
183
+ arguments: JSON.stringify({ destination, device: deviceId })
184
+ }
185
+ };
186
+ await this.handlePingTestCall(fallbackCall);
187
+ }
188
+ async resolveValidationDestination(deviceId) {
189
+ try {
190
+ const session = this.coordinator.getSession(deviceId);
191
+ if (!session) {
192
+ return '127.0.0.1';
193
+ }
194
+ const output = await session.execute('show ip interface brief');
195
+ const lines = output.split(/\r?\n/).map(l => l.trim()).filter(Boolean);
196
+ for (const line of lines) {
197
+ if (/^Interface\s+/i.test(line))
198
+ continue;
199
+ const ipMatch = line.match(/\b(\d{1,3}(?:\.\d{1,3}){3})\b/);
200
+ if (!ipMatch)
201
+ continue;
202
+ const ip = ipMatch[1];
203
+ if (ip.toLowerCase() !== 'unassigned') {
204
+ return ip;
205
+ }
206
+ }
207
+ }
208
+ catch {
209
+ // Fall through to safe default.
210
+ }
211
+ return '127.0.0.1';
212
+ }
213
+ buildStateInfoString() {
214
+ const states = this.coordinator.getAllStates();
215
+ let stateInfo = '';
216
+ for (const [id, state] of Object.entries(states)) {
217
+ stateInfo += `- Device ID: "${id}"\n Hostname: "${state.hostname}"\n Access Mode: "${state.currentMode}"\n CLI Prompt: "${state.prompt}"\n`;
218
+ }
219
+ return stateInfo;
220
+ }
221
+ findLastMutatedDevice() {
222
+ for (const [deviceId, tx] of this.transactions.entries()) {
223
+ if (tx.hasMutations()) {
224
+ return deviceId;
225
+ }
226
+ }
227
+ return null;
228
+ }
229
+ resolveTargetDevice(requestedDevice) {
230
+ const devices = Array.from(this.coordinator.getSessions().keys());
231
+ if (devices.length === 0) {
232
+ throw new Error('No devices are currently registered.');
233
+ }
234
+ if (requestedDevice) {
235
+ if (this.coordinator.getSession(requestedDevice)) {
236
+ return requestedDevice;
237
+ }
238
+ const match = devices.find(d => d.toLowerCase() === requestedDevice.toLowerCase());
239
+ if (match)
240
+ return match;
241
+ throw new Error(`Device "${requestedDevice}" is not recognized. Available devices: ${devices.join(', ')}`);
242
+ }
243
+ if (devices.length === 1) {
244
+ return devices[0];
245
+ }
246
+ throw new Error(`Multiple devices connected (${devices.join(', ')}). You must specify the "device" parameter.`);
247
+ }
248
+ async handleExecuteCommandCall(call) {
249
+ let args;
250
+ try {
251
+ args = JSON.parse(call.function.arguments);
252
+ }
253
+ catch (e) {
254
+ this.injectToolResponse(call.id, 'execute_ios_command', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
255
+ return;
256
+ }
257
+ const targetCommand = args.command;
258
+ const requestedDevice = args.device;
259
+ const cleanCommand = targetCommand.trim();
260
+ const commandValidation = await this.commandReferenceEngine.validateCommand(cleanCommand);
261
+ if (this.strictReferenceMode && !commandValidation.allowed) {
262
+ const suggestions = commandValidation.suggestions.length
263
+ ? `\nReference suggestions:\n- ${commandValidation.suggestions.join('\n- ')}`
264
+ : '';
265
+ this.injectToolResponse(call.id, 'execute_ios_command', `CRITICAL ERROR: Strict command-reference policy blocked execution. ${commandValidation.reason}${suggestions}`);
266
+ return;
267
+ }
268
+ let targetDeviceId;
269
+ try {
270
+ targetDeviceId = this.resolveTargetDevice(requestedDevice);
271
+ }
272
+ catch (err) {
273
+ this.injectToolResponse(call.id, 'execute_ios_command', `Error: ${err.message}`);
274
+ return;
275
+ }
276
+ const lastCmdInfo = this.lastCommandPerDevice[targetDeviceId];
277
+ if (lastCmdInfo && lastCmdInfo.command === cleanCommand) {
278
+ lastCmdInfo.count++;
279
+ }
280
+ else {
281
+ this.lastCommandPerDevice[targetDeviceId] = { command: cleanCommand, count: 1 };
282
+ }
283
+ if (this.lastCommandPerDevice[targetDeviceId].count > 3) {
284
+ ui_1.logger.error(`Loop detected on command "${cleanCommand}" on device ${targetDeviceId}.`);
285
+ this.injectToolResponse(call.id, 'execute_ios_command', `CRITICAL ERROR: Loop check block. You have run "${cleanCommand}" multiple times with errors. Re-verify your settings before retrying.`);
286
+ return;
287
+ }
288
+ const tx = this.transactions.get(targetDeviceId);
289
+ const currentInterface = tx ? tx.targetInterface : null;
290
+ const firewallResult = this.firewall.checkCommand(cleanCommand, currentInterface);
291
+ if (firewallResult.dangerous) {
292
+ const allowed = await this.firewall.verifyWithHuman(cleanCommand, firewallResult.reason || 'High-risk token');
293
+ if (!allowed) {
294
+ this.injectToolResponse(call.id, 'execute_ios_command', 'CRITICAL ERROR: Execution denied by administrator.');
295
+ return;
296
+ }
297
+ }
298
+ if (tx) {
299
+ tx.trackMutation(cleanCommand);
300
+ }
301
+ const cmdSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Executing command: "${cleanCommand}"...`).start();
302
+ try {
303
+ const session = this.coordinator.getSession(targetDeviceId);
304
+ // Normalize context for read-only inspection commands to avoid mode-related failures.
305
+ const state = session.getState();
306
+ if (/^show\s+/i.test(cleanCommand) && (state.currentMode === 'GLOBAL_CONFIG' || state.currentMode === 'INTERFACE_CONFIG')) {
307
+ await session.execute('end');
308
+ }
309
+ const rawOutput = await session.execute(cleanCommand);
310
+ const processedOutput = this.truncateOutput(rawOutput);
311
+ const verification = ErrorAnalyzer_1.ErrorAnalyzer.checkOutput(processedOutput);
312
+ if (verification.hasError) {
313
+ cmdSpinner.fail(`[${targetDeviceId}] Command failed: "${cleanCommand}" (${verification.errorType})`);
314
+ const rbSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Reverting configuration changes...`).start();
315
+ let rollbackLogs = '';
316
+ if (tx) {
317
+ rollbackLogs = await tx.executeRollback(session);
318
+ }
319
+ rbSpinner.succeed(`[${targetDeviceId}] Rollback execution complete.`);
320
+ this.injectToolResponse(call.id, 'execute_ios_command', `IOS Error [${verification.errorType}]:\n${processedOutput}\n\nAutomated configuration rollback executed:\n${rollbackLogs}`);
321
+ }
322
+ else {
323
+ cmdSpinner.succeed(`[${targetDeviceId}] Command completed: "${cleanCommand}"`);
324
+ this.injectToolResponse(call.id, 'execute_ios_command', processedOutput);
325
+ }
326
+ }
327
+ catch (error) {
328
+ cmdSpinner.fail(`[${targetDeviceId}] Command failed: "${cleanCommand}" (${error.message})`);
329
+ this.injectToolResponse(call.id, 'execute_ios_command', `Hardware Session Fault: ${error.message}`);
330
+ }
331
+ }
332
+ async handleEnableIosShellCall(call) {
333
+ let args;
334
+ try {
335
+ args = JSON.parse(call.function.arguments);
336
+ }
337
+ catch (e) {
338
+ this.injectToolResponse(call.id, 'enable_ios_shell', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
339
+ return;
340
+ }
341
+ const mode = args.mode;
342
+ const requestedDevice = args.device;
343
+ let targetDeviceId;
344
+ try {
345
+ targetDeviceId = this.resolveTargetDevice(requestedDevice);
346
+ }
347
+ catch (err) {
348
+ this.injectToolResponse(call.id, 'enable_ios_shell', `Error: ${err.message}`);
349
+ return;
350
+ }
351
+ const cmdSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Enabling Cisco IOS Shell (${mode})...`).start();
352
+ try {
353
+ const session = this.coordinator.getSession(targetDeviceId);
354
+ let output = '';
355
+ if (mode === 'global') {
356
+ await session.execute('configure terminal');
357
+ output += await session.execute('shell processing full');
358
+ await session.execute('end');
359
+ }
360
+ else {
361
+ output += await session.execute('terminal shell');
362
+ }
363
+ cmdSpinner.succeed(`[${targetDeviceId}] Cisco IOS Shell enabled (${mode}).`);
364
+ this.injectToolResponse(call.id, 'enable_ios_shell', output || 'Shell enabled successfully.');
365
+ }
366
+ catch (error) {
367
+ cmdSpinner.fail(`[${targetDeviceId}] Failed to enable Cisco IOS Shell: ${error.message}`);
368
+ this.injectToolResponse(call.id, 'enable_ios_shell', `Error: ${error.message}`);
369
+ }
370
+ }
371
+ async handleDefineShellVariableCall(call) {
372
+ let args;
373
+ try {
374
+ args = JSON.parse(call.function.arguments);
375
+ }
376
+ catch (e) {
377
+ this.injectToolResponse(call.id, 'define_shell_variable', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
378
+ return;
379
+ }
380
+ const { name, value, device } = args;
381
+ let targetDeviceId;
382
+ try {
383
+ targetDeviceId = this.resolveTargetDevice(device);
384
+ }
385
+ catch (err) {
386
+ this.injectToolResponse(call.id, 'define_shell_variable', `Error: ${err.message}`);
387
+ return;
388
+ }
389
+ const cmdSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Defining shell variable: ${name}=${value}...`).start();
390
+ try {
391
+ const session = this.coordinator.getSession(targetDeviceId);
392
+ const output = await session.execute(`${name}=${value}`);
393
+ cmdSpinner.succeed(`[${targetDeviceId}] Defined shell variable: ${name}=${value}`);
394
+ this.injectToolResponse(call.id, 'define_shell_variable', output || `Variable ${name} defined.`);
395
+ }
396
+ catch (error) {
397
+ cmdSpinner.fail(`[${targetDeviceId}] Failed to define shell variable: ${error.message}`);
398
+ this.injectToolResponse(call.id, 'define_shell_variable', `Error: ${error.message}`);
399
+ }
400
+ }
401
+ async handleExecuteShellLoopCall(call) {
402
+ let args;
403
+ try {
404
+ args = JSON.parse(call.function.arguments);
405
+ }
406
+ catch (e) {
407
+ this.injectToolResponse(call.id, 'execute_shell_loop', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
408
+ return;
409
+ }
410
+ const { variable, items, command, device } = args;
411
+ const itemsStr = Array.isArray(items) ? items.join(' ') : items;
412
+ const loopCommand = `for ${variable} in ${itemsStr}; do ${command}; done`;
413
+ let targetDeviceId;
414
+ try {
415
+ targetDeviceId = this.resolveTargetDevice(device);
416
+ }
417
+ catch (err) {
418
+ this.injectToolResponse(call.id, 'execute_shell_loop', `Error: ${err.message}`);
419
+ return;
420
+ }
421
+ const cmdSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Executing shell loop: "${loopCommand}"...`).start();
422
+ try {
423
+ const session = this.coordinator.getSession(targetDeviceId);
424
+ const output = await session.execute(loopCommand);
425
+ cmdSpinner.succeed(`[${targetDeviceId}] Shell loop completed: "${loopCommand}"`);
426
+ this.injectToolResponse(call.id, 'execute_shell_loop', output);
427
+ }
428
+ catch (error) {
429
+ cmdSpinner.fail(`[${targetDeviceId}] Shell loop failed: ${error.message}`);
430
+ this.injectToolResponse(call.id, 'execute_shell_loop', `Error: ${error.message}`);
431
+ }
432
+ }
433
+ async handleDefineShellFunctionCall(call) {
434
+ let args;
435
+ try {
436
+ args = JSON.parse(call.function.arguments);
437
+ }
438
+ catch (e) {
439
+ this.injectToolResponse(call.id, 'define_shell_function', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
440
+ return;
441
+ }
442
+ const { name, body, device } = args;
443
+ const funcCommand = `${name}() { ${body}; }`;
444
+ let targetDeviceId;
445
+ try {
446
+ targetDeviceId = this.resolveTargetDevice(device);
447
+ }
448
+ catch (err) {
449
+ this.injectToolResponse(call.id, 'define_shell_function', `Error: ${err.message}`);
450
+ return;
451
+ }
452
+ const cmdSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Defining shell function: ${name}()...`).start();
453
+ try {
454
+ const session = this.coordinator.getSession(targetDeviceId);
455
+ const output = await session.execute(funcCommand);
456
+ cmdSpinner.succeed(`[${targetDeviceId}] Defined shell function: ${name}()`);
457
+ this.injectToolResponse(call.id, 'define_shell_function', output || `Function ${name} defined.`);
458
+ }
459
+ catch (error) {
460
+ cmdSpinner.fail(`[${targetDeviceId}] Failed to define shell function: ${error.message}`);
461
+ this.injectToolResponse(call.id, 'define_shell_function', `Error: ${error.message}`);
462
+ }
463
+ }
464
+ async handlePingTestCall(call) {
465
+ let args;
466
+ try {
467
+ args = JSON.parse(call.function.arguments);
468
+ }
469
+ catch (e) {
470
+ this.injectToolResponse(call.id, 'ping_test', `Format Error: Invalid Tool Call arguments. Must be JSON.`);
471
+ return;
472
+ }
473
+ const destination = args.destination;
474
+ const requestedDevice = args.device;
475
+ if (requestedDevice) {
476
+ let targetDeviceId;
477
+ try {
478
+ targetDeviceId = this.resolveTargetDevice(requestedDevice);
479
+ }
480
+ catch (err) {
481
+ this.injectToolResponse(call.id, 'ping_test', `Error: ${err.message}`);
482
+ return;
483
+ }
484
+ const pingSpinner = (0, ui_1.createSpinner)(`[${targetDeviceId}] Executing remote ping to ${destination}...`).start();
485
+ try {
486
+ const session = this.coordinator.getSession(targetDeviceId);
487
+ const pingOutput = await session.execute(`ping ${destination}`);
488
+ const successMatch = /success rate is (\d+) percent/i.exec(pingOutput);
489
+ const isFail = successMatch ? parseInt(successMatch[1], 10) === 0 : pingOutput.includes('.....');
490
+ if (isFail) {
491
+ pingSpinner.fail(`[${targetDeviceId}] Remote ping to ${destination} failed.`);
492
+ const failReason = `Remote ping failed from device "${targetDeviceId}" to ${destination}. Success rate is 0%. Analyze routing table, interfaces, and trunk links to troubleshoot.`;
493
+ this.injectToolResponse(call.id, 'ping_test', `PING TEST FAILED:\n${pingOutput}\n\n[Diagnostic Alert]: ${failReason}`);
494
+ }
495
+ else {
496
+ pingSpinner.succeed(`[${targetDeviceId}] Remote ping to ${destination} succeeded.`);
497
+ this.injectToolResponse(call.id, 'ping_test', pingOutput);
498
+ }
499
+ }
500
+ catch (err) {
501
+ pingSpinner.fail(`[${targetDeviceId}] Remote ping request errored.`);
502
+ this.injectToolResponse(call.id, 'ping_test', `Cisco Remote Ping Error: ${err.message}`);
503
+ }
504
+ }
505
+ else {
506
+ const pingSpinner = (0, ui_1.createSpinner)(`Executing local host ping to ${destination}...`).start();
507
+ const hostPingOutput = await this.pingFromHost(destination);
508
+ const isLost = hostPingOutput.includes('100% packet loss') ||
509
+ hostPingOutput.includes('Request timed out') ||
510
+ hostPingOutput.includes('Destination host unreachable') ||
511
+ hostPingOutput.includes('PING FAILED');
512
+ if (isLost) {
513
+ pingSpinner.fail(`Local host ping to ${destination} failed.`);
514
+ const failReason = `Local host ping failed to destination ${destination}. Connection is unreachable. Verify router interfaces and routing configurations.`;
515
+ this.injectToolResponse(call.id, 'ping_test', `PING TEST FAILED:\n${hostPingOutput}\n\n[Diagnostic Alert]: ${failReason}`);
516
+ }
517
+ else {
518
+ pingSpinner.succeed(`Local host ping to ${destination} succeeded.`);
519
+ this.injectToolResponse(call.id, 'ping_test', hostPingOutput);
520
+ }
521
+ }
522
+ }
523
+ async pingFromHost(destination) {
524
+ return new Promise((resolve) => {
525
+ const isWindows = process.platform === 'win32';
526
+ const cmd = isWindows ? `ping -n 4 ${destination}` : `ping -c 4 ${destination}`;
527
+ (0, child_process_1.exec)(cmd, (error, stdout, stderr) => {
528
+ if (error) {
529
+ resolve(`PING FAILED:\n${stdout || stderr || error.message}`);
530
+ return;
531
+ }
532
+ resolve(stdout);
533
+ });
534
+ });
535
+ }
536
+ injectToolResponse(callId, name, content) {
537
+ this.messages.push({
538
+ role: 'tool',
539
+ tool_call_id: callId,
540
+ name: name,
541
+ content: content
542
+ });
543
+ }
544
+ truncateOutput(output) {
545
+ const MAX_LINES = 50;
546
+ const lines = output.split(/\r?\n/);
547
+ if (lines.length <= MAX_LINES) {
548
+ return output;
549
+ }
550
+ const keepLines = 20;
551
+ const firstPart = lines.slice(0, keepLines);
552
+ const lastPart = lines.slice(lines.length - keepLines);
553
+ const removedLinesCount = lines.length - (keepLines * 2);
554
+ return [
555
+ ...firstPart,
556
+ `[... TRUNCATED ${removedLinesCount} LINES OF TERMINAL OUTPUT TO PREVENT CONTEXT WINDOW OVERFLOW ...]`,
557
+ ...lastPart
558
+ ].join('\n');
559
+ }
560
+ }
561
+ exports.CiscoAgentLoop = CiscoAgentLoop;
562
+ //# sourceMappingURL=AgentLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentLoop.js","sourceRoot":"","sources":["../../../src/core/agent/AgentLoop.ts"],"names":[],"mappings":";;;;;;AAEA,mEAAgE;AAChE,+DAA4D;AAC5D,uEAAoE;AACpE,iDAA8C;AAC9C,qEAAkE;AAElE,8EAA2E;AAC3E,iDAAqC;AACrC,wCAAwD;AACxD,kDAA0B;AAO1B,MAAa,cAAc;IAaX;IACA;IAbJ,QAAQ,GAAkB,EAAE,CAAC;IAC7B,YAAY,GAAoC,IAAI,GAAG,EAAE,CAAC;IAC1D,QAAQ,GAAG,IAAI,iCAAe,EAAE,CAAC;IACjC,oBAAoB,GAAuD,EAAE,CAAC;IAC9E,YAAY,GAAG,+BAA+B,CAAC;IAC/C,sBAAsB,GAAG,+CAAsB,CAAC,WAAW,EAAE,CAAC;IAC9D,mBAAmB,GAAG,KAAK,CAAC;IAC5B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAmB;IAC1B,oBAAoB,GAAG,CAAC,CAAC;IAEjC,YACY,SAAoB,EACpB,WAAkC,EAC1C,UAA4B,EAAE;QAFtB,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAAuB;QAG1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEO,YAAY,CAAC,OAAyB;QAC1C,IAAI,OAAO,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,QAAgB;QAC7B,MAAM,aAAa,GAAG,IAAA,kBAAa,EAAC,uDAAuD,CAAC,CAAC,KAAK,EAAE,CAAC;QACrG,IAAI,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,MAAM,EAAE,GAAG,IAAI,uCAAkB,EAAE,CAAC;gBACpC,MAAM,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,aAAa,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,IAAA,kBAAa,EAC5B,0DAA0D,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,CACrH,CAAC,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACnF,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;YACnE,UAAU,CAAC,OAAO,CACd,uCAAuC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,GAAG,CACnH,CAAC;YACF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,WAAM,CAAC,IAAI,CACP,yBAAyB,SAAS,CAAC,MAAM,aAAa,SAAS,CAAC,YAAY,WAAW,SAAS,CAAC,UAAU,WAAW,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAC9J,CAAC;gBACF,WAAM,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3D,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,WAAM,CAAC,IAAI,CAAC,yBAAyB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,GAAG,kCAAkC,GAAG,CAAC,OAAO,IAAI,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAG9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,2BAAY,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC;SAChG,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAExD,IAAI,iBAAiB,GAAG,IAAI,CAAC;QAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,EAAE,CAAC;QAErB,OAAO,iBAAiB,IAAI,cAAc,GAAG,SAAS,EAAE,CAAC;YACrD,cAAc,EAAE,CAAC;YAGjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2BAAY,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC;aACvG,CAAC;YAGF,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5D,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;gBACV,CAAC;YACL,CAAC;YAGD,MAAM,WAAW,GAAG,iCAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC9C,MAAM,UAAU,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;gBAC5F,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,OAAO,YAAY,CAAC;gBACxB,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAA,kBAAa,EAAC,SAAS,cAAc,IAAI,SAAS,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;YACzG,IAAI,QAAqB,CAAC;YAC1B,IAAI,CAAC;gBACD,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,YAAY,CAAC,OAAO,CAAC,SAAS,cAAc,IAAI,SAAS,sBAAsB,CAAC,CAAC;gBAEjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,OAAO,CAAC;gBAChE,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/C,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,YAAY,CAAC,IAAI,CAAC,SAAS,cAAc,IAAI,SAAS,iCAAiC,CAAC,CAAC;gBACzF,MAAM,GAAG,CAAC;YACd,CAAC;YAED,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;wBAC/C,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;oBAC9C,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAC5C,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBACxC,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;wBACnD,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;oBAC9C,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;wBACxD,MAAM,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;oBACnD,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;wBACrD,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;oBAChD,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;wBACxD,MAAM,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;oBACnD,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBAEJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACvD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBAExF,IAAI,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,WAAM,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;oBAEjH,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,EAAE,CAAC;wBACjC,WAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;wBACvF,MAAM,IAAI,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;wBAC7D,WAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;wBAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0FAA0F,CAAC,CAAC,CAAC;wBACtH,iBAAiB,GAAG,KAAK,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;4BACf,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,0MAA0M,iBAAiB,yDAAyD;yBAChS,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,WAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,OAAO,IAAI,sCAAsC,CAAC,CAAC,CAAC;oBACnH,iBAAiB,GAAG,KAAK,CAAC;gBAC9B,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,cAAc,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACnD,WAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAAC,QAAgB;QACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,YAAY,GAAa;YAC3B,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aAC/D;SACJ,CAAC;QACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,QAAgB;QACvD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,WAAW,CAAC;YACvB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,gCAAgC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;IAEO,oBAAoB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC/C,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,SAAS,IAAI,iBAAiB,EAAE,mBAAmB,KAAK,CAAC,QAAQ,sBAAsB,KAAK,CAAC,WAAW,qBAAqB,KAAK,CAAC,MAAM,KAAK,CAAC;QACnJ,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,qBAAqB;QACzB,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;gBACpB,OAAO,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,eAAwB;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC/C,OAAO,eAAe,CAAC;YAC3B,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;YACnF,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACpH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,IAAc;QACjD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;YACpH,OAAO;QACX,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,MAAM;gBACpD,CAAC,CAAC,+BAA+B,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC7E,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CACnB,IAAI,CAAC,EAAE,EACP,qBAAqB,EACrB,sEAAsE,iBAAiB,CAAC,MAAM,GAAG,WAAW,EAAE,CACjH,CAAC;YACF,OAAO;QACX,CAAC;QAED,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,OAAO;QACX,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC9D,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YACtD,WAAW,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACpF,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACtD,WAAM,CAAC,KAAK,CAAC,6BAA6B,YAAY,eAAe,cAAc,GAAG,CAAC,CAAC;YACxF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,mDAAmD,YAAY,wEAAwE,CAAC,CAAC;YACjM,OAAO;QACX,CAAC;QAGD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAE,EAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAElF,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC;YAC9G,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,oDAAoD,CAAC,CAAC;gBAC9G,OAAO;YACX,CAAC;QACL,CAAC;QAGD,IAAI,EAAE,EAAE,CAAC;YACL,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAGD,MAAM,UAAU,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,yBAAyB,YAAY,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACxG,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YAE7D,sFAAsF;YACtF,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,eAAe,IAAI,KAAK,CAAC,WAAW,KAAK,kBAAkB,CAAC,EAAE,CAAC;gBACxH,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAEvD,MAAM,YAAY,GAAG,6BAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAChE,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,sBAAsB,YAAY,MAAM,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC;gBAErG,MAAM,SAAS,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClG,IAAI,YAAY,GAAG,EAAE,CAAC;gBACtB,IAAI,EAAE,EAAE,CAAC;oBACL,YAAY,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACrD,CAAC;gBACD,SAAS,CAAC,OAAO,CAAC,IAAI,cAAc,gCAAgC,CAAC,CAAC;gBAEtE,IAAI,CAAC,kBAAkB,CACnB,IAAI,CAAC,EAAE,EACP,qBAAqB,EACrB,cAAc,YAAY,CAAC,SAAS,OAAO,eAAe,mDAAmD,YAAY,EAAE,CAC9H,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,yBAAyB,YAAY,GAAG,CAAC,CAAC;gBAC/E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,sBAAsB,YAAY,MAAM,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;YAC5F,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,IAAc;QACjD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;YACjH,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QAEpC,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,+BAA+B,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACtG,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpB,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBAC5C,MAAM,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACzD,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACtD,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,8BAA8B,IAAI,IAAI,CAAC,CAAC;YAC7E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,IAAI,6BAA6B,CAAC,CAAC;QAClG,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,uCAAuC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,6BAA6B,CAAC,IAAc;QACtD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,0DAA0D,CAAC,CAAC;YACtH,OAAO;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAErC,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,8BAA8B,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7G,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YACzD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,6BAA6B,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,MAAM,IAAI,YAAY,IAAI,WAAW,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,IAAc;QACnD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,0DAA0D,CAAC,CAAC;YACnH,OAAO;QACX,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,QAAQ,CAAC;QAE1E,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,4BAA4B,WAAW,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1G,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAClD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,4BAA4B,WAAW,GAAG,CAAC,CAAC;YACjF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,6BAA6B,CAAC,IAAc;QACtD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,0DAA0D,CAAC,CAAC;YACtH,OAAO;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,WAAW,GAAG,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC;QAE7C,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,8BAA8B,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACtG,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAClD,UAAU,CAAC,OAAO,CAAC,IAAI,cAAc,6BAA6B,IAAI,IAAI,CAAC,CAAC;YAC5E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,MAAM,IAAI,YAAY,IAAI,WAAW,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,uBAAuB,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAc;QAC3C,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,0DAA0D,CAAC,CAAC;YAC1G,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QAEpC,IAAI,eAAe,EAAE,CAAC;YAElB,IAAI,cAAsB,CAAC;YAC3B,IAAI,CAAC;gBACD,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvE,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,IAAA,kBAAa,EAAC,IAAI,cAAc,8BAA8B,WAAW,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5G,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;gBAC7D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,WAAW,EAAE,CAAC,CAAC;gBAEhE,MAAM,YAAY,GAAG,gCAAgC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEjG,IAAI,MAAM,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,oBAAoB,WAAW,UAAU,CAAC,CAAC;oBAC9E,MAAM,UAAU,GAAG,mCAAmC,cAAc,QAAQ,WAAW,2FAA2F,CAAC;oBACnL,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,sBAAsB,UAAU,2BAA2B,UAAU,EAAE,CAAC,CAAC;gBAC3H,CAAC;qBAAM,CAAC;oBACJ,WAAW,CAAC,OAAO,CAAC,IAAI,cAAc,oBAAoB,WAAW,aAAa,CAAC,CAAC;oBACpF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,gCAAgC,CAAC,CAAC;gBACrE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,CAAC;QACL,CAAC;aAAM,CAAC;YAEJ,MAAM,WAAW,GAAG,IAAA,kBAAa,EAAC,gCAAgC,WAAW,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5F,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC3C,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC5C,cAAc,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBACvD,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEtD,IAAI,MAAM,EAAE,CAAC;gBACT,WAAW,CAAC,IAAI,CAAC,sBAAsB,WAAW,UAAU,CAAC,CAAC;gBAC9D,MAAM,UAAU,GAAG,yCAAyC,WAAW,mFAAmF,CAAC;gBAC3J,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,sBAAsB,cAAc,2BAA2B,UAAU,EAAE,CAAC,CAAC;YAC/H,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,OAAO,CAAC,sBAAsB,WAAW,aAAa,CAAC,CAAC;gBACpE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAClE,CAAC;QACL,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,WAAmB;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC/C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CAAC;YAEhF,IAAA,oBAAI,EAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACR,OAAO,CAAC,iBAAiB,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC9D,OAAO;gBACX,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,IAAY,EAAE,OAAe;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,MAAc;QACjC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACvD,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAEzD,OAAO;YACH,GAAG,SAAS;YACZ,kBAAkB,iBAAiB,mEAAmE;YACtG,GAAG,QAAQ;SACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;CACJ;AA/lBD,wCA+lBC"}
@@ -0,0 +1,43 @@
1
+ type ValidationResult = {
2
+ allowed: boolean;
3
+ reason: string;
4
+ suggestions: string[];
5
+ };
6
+ export type ReferenceWarmupTelemetry = {
7
+ source: 'memory' | 'cache' | 'pdf' | 'error';
8
+ commandCount: number;
9
+ durationMs: number;
10
+ strictMode: boolean;
11
+ cachePath: string;
12
+ error?: string;
13
+ };
14
+ export declare class CommandReferenceEngine {
15
+ private static readonly CACHE_VERSION;
16
+ private static readonly CACHE_DIR;
17
+ private static readonly CACHE_FILE;
18
+ private static instance;
19
+ private loaded;
20
+ private loadError;
21
+ private commands;
22
+ private pdfPath;
23
+ private strictMode;
24
+ private lastWarmupTelemetry;
25
+ static getInstance(): CommandReferenceEngine;
26
+ warmup(pdfFileName?: string): Promise<void>;
27
+ getPromptHints(goal: string, limit?: number): Promise<string>;
28
+ isStrictModeEnabled(): boolean;
29
+ setStrictMode(enabled: boolean): void;
30
+ getWarmupTelemetry(): ReferenceWarmupTelemetry;
31
+ validateCommand(command: string): Promise<ValidationResult>;
32
+ private search;
33
+ private normalizeCommand;
34
+ private isLikelySameCommandFamily;
35
+ private loadCache;
36
+ private saveCache;
37
+ private getCachePath;
38
+ private tokenize;
39
+ private extractCommands;
40
+ private isStructuralNoise;
41
+ private isCommandLine;
42
+ }
43
+ export {};