@defai.digital/ax-cli 3.14.14 → 3.14.17

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 (72) hide show
  1. package/.ax-cli/CUSTOM.md +97 -0
  2. package/.ax-cli/auto-accept-audit.json +1302 -0
  3. package/.ax-cli/index.json +43 -0
  4. package/.ax-cli/memory.json +62 -0
  5. package/.ax-cli/settings.json +39 -0
  6. package/README.md +47 -2
  7. package/ax.config.json +304 -0
  8. package/dist/agent/agent-executor.d.ts +61 -0
  9. package/dist/agent/agent-executor.js +185 -0
  10. package/dist/agent/agent-executor.js.map +1 -0
  11. package/dist/agent/agent-router.d.ts +68 -0
  12. package/dist/agent/agent-router.js +250 -0
  13. package/dist/agent/agent-router.js.map +1 -0
  14. package/dist/analyzers/ast/tree-sitter-parser.d.ts +134 -0
  15. package/dist/analyzers/ast/tree-sitter-parser.js +730 -0
  16. package/dist/analyzers/ast/tree-sitter-parser.js.map +1 -0
  17. package/dist/commands/setup.js +128 -31
  18. package/dist/commands/setup.js.map +1 -1
  19. package/dist/commands/update.js +55 -2
  20. package/dist/commands/update.js.map +1 -1
  21. package/dist/commands/vscode.js +2 -2
  22. package/dist/commands/vscode.js.map +1 -1
  23. package/dist/index.js +5 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/mcp/config-detector-v2.d.ts +83 -0
  26. package/dist/mcp/config-detector-v2.js +328 -0
  27. package/dist/mcp/config-detector-v2.js.map +1 -0
  28. package/dist/mcp/config-migrator-v2.d.ts +89 -0
  29. package/dist/mcp/config-migrator-v2.js +288 -0
  30. package/dist/mcp/config-migrator-v2.js.map +1 -0
  31. package/dist/mcp/config-v2.d.ts +111 -0
  32. package/dist/mcp/config-v2.js +443 -0
  33. package/dist/mcp/config-v2.js.map +1 -0
  34. package/dist/mcp/templates.js +3 -3
  35. package/dist/mcp/templates.js.map +1 -1
  36. package/dist/mcp/transports-v2.d.ts +152 -0
  37. package/dist/mcp/transports-v2.js +481 -0
  38. package/dist/mcp/transports-v2.js.map +1 -0
  39. package/dist/schemas/settings-schemas.d.ts +20 -0
  40. package/dist/schemas/settings-schemas.js +18 -0
  41. package/dist/schemas/settings-schemas.js.map +1 -1
  42. package/dist/ui/components/chat-interface.d.ts +3 -1
  43. package/dist/ui/components/chat-interface.js +32 -4
  44. package/dist/ui/components/chat-interface.js.map +1 -1
  45. package/dist/ui/components/status-bar.d.ts +2 -0
  46. package/dist/ui/components/status-bar.js +8 -4
  47. package/dist/ui/components/status-bar.js.map +1 -1
  48. package/dist/ui/hooks/use-input-handler.d.ts +4 -1
  49. package/dist/ui/hooks/use-input-handler.js +80 -1
  50. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  51. package/dist/utils/error-sanitizer.d.ts +119 -0
  52. package/dist/utils/error-sanitizer.js +253 -0
  53. package/dist/utils/error-sanitizer.js.map +1 -0
  54. package/dist/utils/errors.d.ts +74 -0
  55. package/dist/utils/errors.js +139 -0
  56. package/dist/utils/errors.js.map +1 -0
  57. package/dist/utils/incremental-analyzer.d.ts +134 -0
  58. package/dist/utils/incremental-analyzer.js +377 -0
  59. package/dist/utils/incremental-analyzer.js.map +1 -0
  60. package/dist/utils/math.d.ts +1 -0
  61. package/dist/utils/math.js +4 -0
  62. package/dist/utils/math.js.map +1 -0
  63. package/dist/utils/settings-manager.d.ts +13 -0
  64. package/dist/utils/settings-manager.js +19 -0
  65. package/dist/utils/settings-manager.js.map +1 -1
  66. package/dist/utils/settings.d.ts +1 -0
  67. package/dist/utils/settings.js +4 -0
  68. package/dist/utils/settings.js.map +1 -0
  69. package/dist/utils/streaming-analyzer.d.ts +160 -0
  70. package/dist/utils/streaming-analyzer.js +214 -0
  71. package/dist/utils/streaming-analyzer.js.map +1 -0
  72. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Agent Executor - Executes tasks through AutomatosX agents
3
+ *
4
+ * Spawns `ax run <agent> "message"` and streams the output back.
5
+ *
6
+ * @module agent-executor
7
+ */
8
+ import { spawn } from 'child_process';
9
+ import { EventEmitter } from 'events';
10
+ /**
11
+ * Executes a task through an AutomatosX agent
12
+ *
13
+ * @param options - Execution options
14
+ * @returns AsyncGenerator that yields execution chunks
15
+ */
16
+ export async function* executeAgent(options) {
17
+ const { agent, task, cwd = process.cwd(), timeout = 600000, // 10 minutes default
18
+ env = {}, streaming = true, noMemory = false, } = options;
19
+ // Build command arguments
20
+ const args = ['run', agent, task];
21
+ if (streaming) {
22
+ args.push('--streaming');
23
+ }
24
+ if (noMemory) {
25
+ args.push('--no-memory');
26
+ }
27
+ // Create abort controller for timeout
28
+ const abortController = new AbortController();
29
+ const timeoutId = setTimeout(() => {
30
+ abortController.abort();
31
+ }, timeout);
32
+ let process_ = null;
33
+ let abortHandler = null;
34
+ try {
35
+ // Spawn ax process
36
+ process_ = spawn('ax', args, {
37
+ cwd,
38
+ env: { ...process.env, ...env },
39
+ stdio: ['pipe', 'pipe', 'pipe'],
40
+ shell: false,
41
+ });
42
+ // Handle process spawn error
43
+ if (!process_.stdout || !process_.stderr) {
44
+ throw new Error('Failed to create process streams');
45
+ }
46
+ // Create event emitter for async iteration
47
+ const emitter = new EventEmitter();
48
+ let buffer = '';
49
+ // Handle stdout
50
+ process_.stdout.on('data', (data) => {
51
+ const text = data.toString();
52
+ buffer += text;
53
+ // Emit complete lines
54
+ const lines = buffer.split('\n');
55
+ buffer = lines.pop() || '';
56
+ for (const line of lines) {
57
+ if (line.trim()) {
58
+ emitter.emit('chunk', { type: 'output', content: line + '\n' });
59
+ }
60
+ }
61
+ });
62
+ // Handle stderr
63
+ process_.stderr.on('data', (data) => {
64
+ const text = data.toString();
65
+ // Filter out common noise from stderr
66
+ if (!text.includes('npm warn') && !text.includes('ExperimentalWarning')) {
67
+ emitter.emit('chunk', { type: 'error', content: text });
68
+ }
69
+ });
70
+ // Handle process close
71
+ process_.on('close', (code) => {
72
+ // Emit any remaining buffer content
73
+ if (buffer.trim()) {
74
+ emitter.emit('chunk', { type: 'output', content: buffer });
75
+ }
76
+ emitter.emit('chunk', { type: 'done', exitCode: code ?? 0 });
77
+ emitter.emit('done');
78
+ });
79
+ // Handle process error
80
+ process_.on('error', (err) => {
81
+ emitter.emit('chunk', { type: 'error', content: err.message });
82
+ emitter.emit('chunk', { type: 'done', exitCode: 1 });
83
+ emitter.emit('done');
84
+ });
85
+ // Handle abort signal
86
+ abortHandler = () => {
87
+ if (process_ && !process_.killed) {
88
+ process_.kill('SIGTERM');
89
+ emitter.emit('chunk', { type: 'error', content: 'Agent execution timed out' });
90
+ emitter.emit('chunk', { type: 'done', exitCode: 124 });
91
+ emitter.emit('done');
92
+ }
93
+ };
94
+ abortController.signal.addEventListener('abort', abortHandler);
95
+ // Yield chunks as they arrive
96
+ const chunkQueue = [];
97
+ let isDone = false;
98
+ let resolveWait = null;
99
+ emitter.on('chunk', (chunk) => {
100
+ chunkQueue.push(chunk);
101
+ if (resolveWait) {
102
+ resolveWait();
103
+ resolveWait = null;
104
+ }
105
+ });
106
+ emitter.on('done', () => {
107
+ isDone = true;
108
+ if (resolveWait) {
109
+ resolveWait();
110
+ resolveWait = null;
111
+ }
112
+ });
113
+ while (!isDone || chunkQueue.length > 0) {
114
+ if (chunkQueue.length > 0) {
115
+ yield chunkQueue.shift();
116
+ }
117
+ else if (!isDone) {
118
+ await new Promise((resolve) => {
119
+ resolveWait = resolve;
120
+ });
121
+ }
122
+ }
123
+ }
124
+ finally {
125
+ clearTimeout(timeoutId);
126
+ // Clean up abort handler to prevent memory leak
127
+ if (abortHandler) {
128
+ abortController.signal.removeEventListener('abort', abortHandler);
129
+ }
130
+ if (process_ && !process_.killed) {
131
+ process_.kill('SIGTERM');
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * Executes a task through an AutomatosX agent and returns the full result
137
+ *
138
+ * @param options - Execution options
139
+ * @returns Promise with execution result
140
+ */
141
+ export async function executeAgentSync(options) {
142
+ const startTime = Date.now();
143
+ let output = '';
144
+ let exitCode = 0;
145
+ for await (const chunk of executeAgent(options)) {
146
+ switch (chunk.type) {
147
+ case 'output':
148
+ output += chunk.content || '';
149
+ break;
150
+ case 'error':
151
+ output += chunk.content || '';
152
+ break;
153
+ case 'done':
154
+ exitCode = chunk.exitCode ?? 0;
155
+ break;
156
+ }
157
+ }
158
+ return {
159
+ success: exitCode === 0,
160
+ output: output.trim(),
161
+ exitCode,
162
+ duration: Date.now() - startTime,
163
+ };
164
+ }
165
+ /**
166
+ * Check if ax command is available (cross-platform)
167
+ */
168
+ export async function isAxAvailable() {
169
+ return new Promise((resolve) => {
170
+ // Use 'where' on Windows, 'which' on Unix-like systems
171
+ const isWindows = process.platform === 'win32';
172
+ const command = isWindows ? 'where' : 'which';
173
+ const process_ = spawn(command, ['ax'], {
174
+ stdio: 'pipe',
175
+ shell: isWindows, // Windows needs shell for 'where'
176
+ });
177
+ process_.on('close', (code) => {
178
+ resolve(code === 0);
179
+ });
180
+ process_.on('error', () => {
181
+ resolve(false);
182
+ });
183
+ });
184
+ }
185
+ //# sourceMappingURL=agent-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../../src/agent/agent-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Agent-First Router - MVP Implementation
3
+ *
4
+ * Lightweight router that matches user input to AutomatosX agents.
5
+ * Pure functions, session-cached availability, keyword-based matching.
6
+ *
7
+ * @module agent-router
8
+ */
9
+ import type { AgentFirstSettings } from '../schemas/settings-schemas.js';
10
+ /**
11
+ * Result of agent routing decision
12
+ */
13
+ export interface AgentRoutingResult {
14
+ /** Selected agent name, or null to use direct LLM */
15
+ agent: string | null;
16
+ /** System prefix to inject into conversation */
17
+ systemPrefix: string;
18
+ /** Transparency note shown in UI */
19
+ transparencyNote: string;
20
+ /** Confidence score (0-1) */
21
+ confidence: number;
22
+ /** Matched keywords that triggered the routing */
23
+ matchedKeywords: string[];
24
+ }
25
+ /**
26
+ * Configuration for agent routing
27
+ */
28
+ export interface AgentRouterConfig {
29
+ /** Enable/disable agent-first mode */
30
+ enabled: boolean;
31
+ /** Default agent when no keyword match */
32
+ defaultAgent: string | null;
33
+ /** Minimum confidence threshold for auto-routing */
34
+ confidenceThreshold: number;
35
+ /** Agents to exclude from auto-selection */
36
+ excludedAgents: string[];
37
+ }
38
+ /**
39
+ * Check if AutomatosX agents are available (cached per session)
40
+ */
41
+ export declare function checkAgentAvailability(): {
42
+ available: boolean;
43
+ agents: string[];
44
+ };
45
+ /**
46
+ * Reset availability cache (for testing or session reset)
47
+ */
48
+ export declare function resetAgentAvailabilityCache(): void;
49
+ /**
50
+ * Match user input to agent based on keywords
51
+ */
52
+ export declare function matchAgentByKeywords(userInput: string, availableAgents: string[], excludedAgents?: string[]): AgentRoutingResult | null;
53
+ /**
54
+ * Get default router config from settings
55
+ */
56
+ export declare function getDefaultRouterConfig(settings?: AgentFirstSettings): AgentRouterConfig;
57
+ /**
58
+ * Main routing function - determines which agent should handle the task
59
+ */
60
+ export declare function routeToAgent(userInput: string, config: AgentRouterConfig): AgentRoutingResult;
61
+ /**
62
+ * Get list of available agents for display
63
+ */
64
+ export declare function getAvailableAgents(): string[];
65
+ /**
66
+ * Check if a specific agent is available
67
+ */
68
+ export declare function isAgentAvailable(agentName: string): boolean;
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Agent-First Router - MVP Implementation
3
+ *
4
+ * Lightweight router that matches user input to AutomatosX agents.
5
+ * Pure functions, session-cached availability, keyword-based matching.
6
+ *
7
+ * @module agent-router
8
+ */
9
+ import { existsSync, readdirSync } from 'fs';
10
+ import { join } from 'path';
11
+ // Session cache for availability (avoid repeated filesystem checks)
12
+ let availabilityCache = null;
13
+ const AVAILABILITY_CACHE_TTL = 60000; // 1 minute
14
+ /**
15
+ * Keyword to agent mapping (ordered by specificity)
16
+ * High-confidence keywords that strongly indicate domain
17
+ */
18
+ const AGENT_KEYWORD_RULES = [
19
+ // Security - highest priority (security concerns override domain)
20
+ {
21
+ agent: 'security',
22
+ keywords: /\b(security|vulnerab|cve|xss|csrf|injection|auth(?:entication|orization)|encrypt|owasp|pentest|threat|exploit)\b/i,
23
+ confidence: 0.9,
24
+ matchedTerms: ['security', 'vulnerability', 'cve', 'xss', 'csrf', 'injection', 'authentication', 'authorization', 'encryption', 'owasp', 'pentest', 'threat', 'exploit'],
25
+ },
26
+ // Quality/Testing
27
+ {
28
+ agent: 'quality',
29
+ keywords: /\b(test(?:ing)?|vitest|jest|cypress|playwright|coverage|qa|bug|regression|e2e|unit[\s-]?test|integration[\s-]?test|spec)\b/i,
30
+ confidence: 0.85,
31
+ matchedTerms: ['test', 'testing', 'vitest', 'jest', 'cypress', 'playwright', 'coverage', 'qa', 'bug', 'regression', 'e2e', 'unit test', 'integration test', 'spec'],
32
+ },
33
+ // DevOps
34
+ {
35
+ agent: 'devops',
36
+ keywords: /\b(docker|kubernetes|k8s|helm|terraform|ansible|ci[\s\/]?cd|github[\s-]?action|jenkins|deploy|infrastructure|aws|gcp|azure|nginx|load[\s-]?balanc)\b/i,
37
+ confidence: 0.85,
38
+ matchedTerms: ['docker', 'kubernetes', 'k8s', 'helm', 'terraform', 'ansible', 'ci/cd', 'github actions', 'jenkins', 'deploy', 'infrastructure', 'aws', 'gcp', 'azure', 'nginx', 'load balancer'],
39
+ },
40
+ // Backend - specific technologies
41
+ {
42
+ agent: 'backend',
43
+ keywords: /\b(api|rest(?:ful)?|graphql|grpc|database|postgresql|mysql|mongodb|redis|microservice|golang|rust|server[\s-]?side|endpoint|middleware|orm|prisma)\b/i,
44
+ confidence: 0.8,
45
+ matchedTerms: ['api', 'rest', 'restful', 'graphql', 'grpc', 'database', 'postgresql', 'mysql', 'mongodb', 'redis', 'microservice', 'golang', 'rust', 'server-side', 'endpoint', 'middleware', 'orm', 'prisma'],
46
+ },
47
+ // Frontend - specific technologies
48
+ {
49
+ agent: 'frontend',
50
+ keywords: /\b(react|vue|angular|svelte|next\.?js|nuxt|css|tailwind|component|ui[\s-]?component|dom|html|responsive|scss|sass|styled[\s-]?component|animation)\b/i,
51
+ confidence: 0.8,
52
+ matchedTerms: ['react', 'vue', 'angular', 'svelte', 'next.js', 'nuxt', 'css', 'tailwind', 'component', 'ui component', 'dom', 'html', 'responsive', 'scss', 'sass', 'styled-component', 'animation'],
53
+ },
54
+ // Mobile
55
+ {
56
+ agent: 'mobile',
57
+ keywords: /\b(ios|android|swift|kotlin|flutter|react[\s-]?native|mobile[\s-]?app|xcode|gradle|cocoapod|expo)\b/i,
58
+ confidence: 0.8,
59
+ matchedTerms: ['ios', 'android', 'swift', 'kotlin', 'flutter', 'react native', 'mobile app', 'xcode', 'gradle', 'cocoapod', 'expo'],
60
+ },
61
+ // Data
62
+ {
63
+ agent: 'data',
64
+ keywords: /\b(etl|data[\s-]?pipeline|analytics|sql|data[\s-]?model|warehouse|bigquery|spark|kafka|airflow|dbt)\b/i,
65
+ confidence: 0.75,
66
+ matchedTerms: ['etl', 'data pipeline', 'analytics', 'sql', 'data model', 'warehouse', 'bigquery', 'spark', 'kafka', 'airflow', 'dbt'],
67
+ },
68
+ // Architecture
69
+ {
70
+ agent: 'architecture',
71
+ keywords: /\b(architect|system[\s-]?design|adr|scalab|microservice[\s-]?architect|event[\s-]?driven|domain[\s-]?driven|ddd|cqrs)\b/i,
72
+ confidence: 0.75,
73
+ matchedTerms: ['architecture', 'system design', 'adr', 'scalability', 'microservice architecture', 'event-driven', 'domain-driven', 'ddd', 'cqrs'],
74
+ },
75
+ // Product
76
+ {
77
+ agent: 'product',
78
+ keywords: /\b(prd|product[\s-]?requirement|user[\s-]?story|feature[\s-]?spec|roadmap|stakeholder|acceptance[\s-]?criteria)\b/i,
79
+ confidence: 0.7,
80
+ matchedTerms: ['prd', 'product requirement', 'user story', 'feature spec', 'roadmap', 'stakeholder', 'acceptance criteria'],
81
+ },
82
+ // Documentation/Writing
83
+ {
84
+ agent: 'writer',
85
+ keywords: /\b(document(?:ation)?|readme|changelog|technical[\s-]?writ|api[\s-]?doc|jsdoc|typedoc|wiki)\b/i,
86
+ confidence: 0.7,
87
+ matchedTerms: ['documentation', 'readme', 'changelog', 'technical writing', 'api doc', 'jsdoc', 'typedoc', 'wiki'],
88
+ },
89
+ // Design
90
+ {
91
+ agent: 'design',
92
+ keywords: /\b(figma|ui[\s\/]?ux|wireframe|mockup|prototype|design[\s-]?system|user[\s-]?experience|accessibility|a11y)\b/i,
93
+ confidence: 0.7,
94
+ matchedTerms: ['figma', 'ui/ux', 'wireframe', 'mockup', 'prototype', 'design system', 'user experience', 'accessibility', 'a11y'],
95
+ },
96
+ // Standards/Review (fallback for code-related queries)
97
+ {
98
+ agent: 'standard',
99
+ keywords: /\b(solid|design[\s-]?pattern|clean[\s-]?code|refactor|code[\s-]?review|best[\s-]?practice|lint|eslint|prettier|code[\s-]?quality)\b/i,
100
+ confidence: 0.65,
101
+ matchedTerms: ['solid', 'design pattern', 'clean code', 'refactor', 'code review', 'best practice', 'lint', 'eslint', 'prettier', 'code quality'],
102
+ },
103
+ ];
104
+ /**
105
+ * Check if AutomatosX agents are available (cached per session)
106
+ */
107
+ export function checkAgentAvailability() {
108
+ const now = Date.now();
109
+ // Return cached result if still valid
110
+ if (availabilityCache?.checked &&
111
+ (now - availabilityCache.timestamp) < AVAILABILITY_CACHE_TTL) {
112
+ return { available: availabilityCache.available, agents: availabilityCache.agents };
113
+ }
114
+ try {
115
+ const agentsDir = join(process.cwd(), '.automatosx', 'agents');
116
+ if (!existsSync(agentsDir)) {
117
+ availabilityCache = { checked: true, available: false, agents: [], timestamp: now };
118
+ return { available: false, agents: [] };
119
+ }
120
+ const agents = readdirSync(agentsDir)
121
+ .filter(f => f.endsWith('.yaml') || f.endsWith('.yml'))
122
+ .map(f => f.replace(/\.ya?ml$/, ''));
123
+ availabilityCache = {
124
+ checked: true,
125
+ available: agents.length > 0,
126
+ agents,
127
+ timestamp: now,
128
+ };
129
+ return { available: agents.length > 0, agents };
130
+ }
131
+ catch {
132
+ availabilityCache = { checked: true, available: false, agents: [], timestamp: now };
133
+ return { available: false, agents: [] };
134
+ }
135
+ }
136
+ /**
137
+ * Reset availability cache (for testing or session reset)
138
+ */
139
+ export function resetAgentAvailabilityCache() {
140
+ availabilityCache = null;
141
+ }
142
+ /**
143
+ * Extract matched keywords from user input
144
+ */
145
+ function extractMatchedKeywords(userInput, rule) {
146
+ const input = userInput.toLowerCase();
147
+ return rule.matchedTerms.filter(term => input.includes(term.toLowerCase()));
148
+ }
149
+ /**
150
+ * Match user input to agent based on keywords
151
+ */
152
+ export function matchAgentByKeywords(userInput, availableAgents, excludedAgents = []) {
153
+ for (const rule of AGENT_KEYWORD_RULES) {
154
+ // Skip excluded agents
155
+ if (excludedAgents.includes(rule.agent)) {
156
+ continue;
157
+ }
158
+ // Check if agent is available
159
+ if (!availableAgents.includes(rule.agent)) {
160
+ continue;
161
+ }
162
+ // Test for keyword match
163
+ if (rule.keywords.test(userInput)) {
164
+ const matchedKeywords = extractMatchedKeywords(userInput, rule);
165
+ return {
166
+ agent: rule.agent,
167
+ confidence: rule.confidence,
168
+ systemPrefix: `[Routed to ${rule.agent} agent for specialized assistance]`,
169
+ transparencyNote: `Agent: ${rule.agent}`,
170
+ matchedKeywords,
171
+ };
172
+ }
173
+ }
174
+ return null; // No confident match
175
+ }
176
+ /**
177
+ * Get default router config from settings
178
+ */
179
+ export function getDefaultRouterConfig(settings) {
180
+ return {
181
+ enabled: settings?.enabled ?? true,
182
+ defaultAgent: settings?.defaultAgent ?? 'standard',
183
+ confidenceThreshold: settings?.confidenceThreshold ?? 0.6,
184
+ excludedAgents: settings?.excludedAgents ?? [],
185
+ };
186
+ }
187
+ /**
188
+ * Main routing function - determines which agent should handle the task
189
+ */
190
+ export function routeToAgent(userInput, config) {
191
+ // Check if routing is enabled
192
+ if (!config.enabled) {
193
+ return {
194
+ agent: null,
195
+ systemPrefix: '',
196
+ transparencyNote: '',
197
+ confidence: 0,
198
+ matchedKeywords: [],
199
+ };
200
+ }
201
+ // Check agent availability
202
+ const { available, agents } = checkAgentAvailability();
203
+ if (!available || agents.length === 0) {
204
+ return {
205
+ agent: null,
206
+ systemPrefix: '',
207
+ transparencyNote: '',
208
+ confidence: 0,
209
+ matchedKeywords: [],
210
+ };
211
+ }
212
+ // Try to match agent by keywords
213
+ const match = matchAgentByKeywords(userInput, agents, config.excludedAgents);
214
+ if (match && match.confidence >= config.confidenceThreshold) {
215
+ return match;
216
+ }
217
+ // Use default agent if configured and available
218
+ if (config.defaultAgent && agents.includes(config.defaultAgent)) {
219
+ return {
220
+ agent: config.defaultAgent,
221
+ confidence: 0.5,
222
+ systemPrefix: `[Using ${config.defaultAgent} agent]`,
223
+ transparencyNote: `Agent: ${config.defaultAgent}`,
224
+ matchedKeywords: [],
225
+ };
226
+ }
227
+ // No match, use direct LLM
228
+ return {
229
+ agent: null,
230
+ systemPrefix: '',
231
+ transparencyNote: '',
232
+ confidence: 0,
233
+ matchedKeywords: [],
234
+ };
235
+ }
236
+ /**
237
+ * Get list of available agents for display
238
+ */
239
+ export function getAvailableAgents() {
240
+ const { agents } = checkAgentAvailability();
241
+ return agents;
242
+ }
243
+ /**
244
+ * Check if a specific agent is available
245
+ */
246
+ export function isAgentAvailable(agentName) {
247
+ const { agents } = checkAgentAvailability();
248
+ return agents.includes(agentName);
249
+ }
250
+ //# sourceMappingURL=agent-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-router.js","sourceRoot":"","sources":["../../src/agent/agent-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Tree-sitter Parser
3
+ *
4
+ * Base class for tree-sitter based language parsers.
5
+ * Uses WebAssembly (WASM) for cross-platform compatibility.
6
+ *
7
+ * Supports: Python, Rust, Go, TypeScript, JavaScript, HTML, CSS, and 30+ more languages
8
+ */
9
+ import { Tree } from 'web-tree-sitter';
10
+ import { BaseLanguageParser, type SupportedLanguage } from './language-parser.js';
11
+ import type { FileASTInfo } from './types.js';
12
+ /**
13
+ * Tree-sitter based language parser
14
+ */
15
+ export declare class TreeSitterParser extends BaseLanguageParser {
16
+ readonly language: SupportedLanguage;
17
+ private treeSitterLanguage;
18
+ private parser;
19
+ private loadedLanguage;
20
+ constructor(language: SupportedLanguage, treeSitterLanguage?: string);
21
+ private mapLanguageToTreeSitter;
22
+ /**
23
+ * Ensure parser is initialized
24
+ */
25
+ private ensureInitialized;
26
+ parseFile(filePath: string): Promise<FileASTInfo>;
27
+ parseContent(content: string, filePath?: string): Promise<FileASTInfo>;
28
+ /**
29
+ * Extract functions from AST
30
+ */
31
+ private extractFunctions;
32
+ /**
33
+ * Get node types that represent functions for this language
34
+ */
35
+ private getFunctionNodeTypes;
36
+ /**
37
+ * Extract function info from a function node
38
+ */
39
+ private extractFunctionInfo;
40
+ /**
41
+ * Extract function name
42
+ */
43
+ private extractFunctionName;
44
+ /**
45
+ * Extract parameters from function
46
+ */
47
+ private extractParameters;
48
+ /**
49
+ * Check if node is a parameter
50
+ */
51
+ private isParameterNode;
52
+ /**
53
+ * Extract parameter info
54
+ */
55
+ private extractParameterInfo;
56
+ /**
57
+ * Extract return type
58
+ */
59
+ private extractReturnType;
60
+ /**
61
+ * Check if function is async
62
+ */
63
+ private isAsyncFunction;
64
+ /**
65
+ * Check if function is exported
66
+ */
67
+ private isExportedFunction;
68
+ /**
69
+ * Calculate cyclomatic complexity
70
+ */
71
+ private calculateComplexity;
72
+ /**
73
+ * Extract classes from AST
74
+ */
75
+ private extractClasses;
76
+ /**
77
+ * Get node types that represent classes
78
+ */
79
+ private getClassNodeTypes;
80
+ /**
81
+ * Extract class info
82
+ */
83
+ private extractClassInfo;
84
+ /**
85
+ * Check if class is exported
86
+ */
87
+ private isExportedClass;
88
+ /**
89
+ * Extract methods from class
90
+ */
91
+ private extractMethods;
92
+ /**
93
+ * Get method visibility
94
+ */
95
+ private getVisibility;
96
+ /**
97
+ * Check if method is static
98
+ */
99
+ private isStatic;
100
+ /**
101
+ * Extract properties from class
102
+ */
103
+ private extractProperties;
104
+ /**
105
+ * Extract imports from AST
106
+ */
107
+ private extractImports;
108
+ /**
109
+ * Get import node types for this language
110
+ */
111
+ private getImportNodeTypes;
112
+ /**
113
+ * Extract import info
114
+ */
115
+ private extractImportInfo;
116
+ /**
117
+ * Extract exports from AST
118
+ */
119
+ private extractExports;
120
+ /**
121
+ * Get the raw syntax tree (for advanced usage)
122
+ */
123
+ getTree(content: string): Promise<Tree | null>;
124
+ dispose(): void;
125
+ }
126
+ /**
127
+ * Create a parser for a specific language
128
+ */
129
+ export declare function createTreeSitterParser(language: SupportedLanguage): TreeSitterParser;
130
+ /**
131
+ * Supported tree-sitter languages (beyond our core 5)
132
+ */
133
+ export declare const TREE_SITTER_LANGUAGES: readonly ["bash", "c", "cpp", "c_sharp", "css", "dart", "elixir", "elm", "go", "html", "java", "javascript", "json", "kotlin", "lua", "objc", "ocaml", "php", "python", "ruby", "rust", "scala", "solidity", "swift", "toml", "tsx", "typescript", "vue", "yaml", "zig"];
134
+ export type TreeSitterLanguage = typeof TREE_SITTER_LANGUAGES[number];