@defai.digital/ax-cli 3.14.16 → 3.14.18

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 (47) hide show
  1. package/dist/agent/agent-executor.d.ts +61 -0
  2. package/dist/agent/agent-executor.js +185 -0
  3. package/dist/agent/agent-executor.js.map +1 -0
  4. package/dist/agent/agent-router.d.ts +68 -0
  5. package/dist/agent/agent-router.js +250 -0
  6. package/dist/agent/agent-router.js.map +1 -0
  7. package/dist/commands/setup.js +46 -49
  8. package/dist/commands/setup.js.map +1 -1
  9. package/dist/commands/vscode.js +2 -2
  10. package/dist/commands/vscode.js.map +1 -1
  11. package/dist/index.js +5 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/llm/tools.d.ts +1 -0
  14. package/dist/llm/tools.js +11 -1
  15. package/dist/llm/tools.js.map +1 -1
  16. package/dist/mcp/cancellation.d.ts +169 -0
  17. package/dist/mcp/cancellation.js +237 -0
  18. package/dist/mcp/cancellation.js.map +1 -0
  19. package/dist/mcp/client-v2.d.ts +3 -0
  20. package/dist/mcp/client-v2.js +2 -0
  21. package/dist/mcp/client-v2.js.map +1 -1
  22. package/dist/mcp/client.d.ts +1 -0
  23. package/dist/mcp/client.js.map +1 -1
  24. package/dist/mcp/index.d.ts +2 -0
  25. package/dist/mcp/index.js +4 -0
  26. package/dist/mcp/index.js.map +1 -1
  27. package/dist/mcp/progress.d.ts +147 -0
  28. package/dist/mcp/progress.js +210 -0
  29. package/dist/mcp/progress.js.map +1 -0
  30. package/dist/mcp/templates.js +3 -3
  31. package/dist/mcp/templates.js.map +1 -1
  32. package/dist/schemas/settings-schemas.d.ts +20 -0
  33. package/dist/schemas/settings-schemas.js +18 -0
  34. package/dist/schemas/settings-schemas.js.map +1 -1
  35. package/dist/ui/components/chat-interface.d.ts +3 -1
  36. package/dist/ui/components/chat-interface.js +32 -4
  37. package/dist/ui/components/chat-interface.js.map +1 -1
  38. package/dist/ui/components/status-bar.d.ts +2 -0
  39. package/dist/ui/components/status-bar.js +8 -4
  40. package/dist/ui/components/status-bar.js.map +1 -1
  41. package/dist/ui/hooks/use-input-handler.d.ts +4 -1
  42. package/dist/ui/hooks/use-input-handler.js +80 -1
  43. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  44. package/dist/utils/settings-manager.d.ts +13 -0
  45. package/dist/utils/settings-manager.js +19 -0
  46. package/dist/utils/settings-manager.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,61 @@
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
+ /**
9
+ * Result chunk from agent execution
10
+ */
11
+ export interface AgentExecutionChunk {
12
+ type: 'output' | 'error' | 'done';
13
+ content?: string;
14
+ exitCode?: number;
15
+ }
16
+ /**
17
+ * Options for agent execution
18
+ */
19
+ export interface AgentExecutionOptions {
20
+ /** Agent name to use */
21
+ agent: string;
22
+ /** Task/message to send to the agent */
23
+ task: string;
24
+ /** Working directory (defaults to cwd) */
25
+ cwd?: string;
26
+ /** Timeout in milliseconds (default: 10 minutes) */
27
+ timeout?: number;
28
+ /** Additional environment variables */
29
+ env?: Record<string, string>;
30
+ /** Enable streaming mode */
31
+ streaming?: boolean;
32
+ /** Disable memory for this execution */
33
+ noMemory?: boolean;
34
+ }
35
+ /**
36
+ * Agent execution result
37
+ */
38
+ export interface AgentExecutionResult {
39
+ success: boolean;
40
+ output: string;
41
+ exitCode: number;
42
+ duration: number;
43
+ }
44
+ /**
45
+ * Executes a task through an AutomatosX agent
46
+ *
47
+ * @param options - Execution options
48
+ * @returns AsyncGenerator that yields execution chunks
49
+ */
50
+ export declare function executeAgent(options: AgentExecutionOptions): AsyncGenerator<AgentExecutionChunk>;
51
+ /**
52
+ * Executes a task through an AutomatosX agent and returns the full result
53
+ *
54
+ * @param options - Execution options
55
+ * @returns Promise with execution result
56
+ */
57
+ export declare function executeAgentSync(options: AgentExecutionOptions): Promise<AgentExecutionResult>;
58
+ /**
59
+ * Check if ax command is available (cross-platform)
60
+ */
61
+ export declare function isAxAvailable(): Promise<boolean>;
@@ -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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAyCtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,OAA8B;IAE9B,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,OAAO,GAAG,MAAM,EAAE,qBAAqB;IACvC,GAAG,GAAG,EAAE,EACR,SAAS,GAAG,IAAI,EAChB,QAAQ,GAAG,KAAK,GACjB,GAAG,OAAO,CAAC;IAEZ,0BAA0B;IAC1B,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAElC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IAED,sCAAsC;IACtC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAChC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,EAAE,OAAO,CAAC,CAAC;IAEZ,IAAI,QAAQ,GAAwB,IAAI,CAAC;IACzC,IAAI,YAAY,GAAwB,IAAI,CAAC;IAE7C,IAAI,CAAC;QACH,mBAAmB;QACnB,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;YAC3B,GAAG;YACH,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;YAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,gBAAgB;QAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,IAAI,CAAC;YAEf,sBAAsB;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,oCAAoC;YACpC,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,YAAY,GAAG,GAAG,EAAE;YAClB,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QACF,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE/D,8BAA8B;QAC9B,MAAM,UAAU,GAA0B,EAAE,CAAC;QAC7C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,WAAW,GAAwB,IAAI,CAAC;QAE5C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA0B,EAAE,EAAE;YACjD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;YAC5B,CAAC;iBAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,WAAW,GAAG,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,gDAAgD;QAChD,IAAI,YAAY,EAAE,CAAC;YACjB,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC9B,MAAM;YACR,KAAK,MAAM;gBACT,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAC/B,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,QAAQ,KAAK,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,QAAQ;QACR,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,uDAAuD;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAE9C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;YACtC,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,SAAS,EAAE,kCAAkC;SACrD,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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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"}