@gencode/console 0.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.
- package/dist/client/assets/main-ACHOM3RY.css +1 -0
- package/dist/client/assets/main-BC36yw7y.js +131 -0
- package/dist/client/index.html +13 -0
- package/dist/server/callback-server.d.ts +56 -0
- package/dist/server/callback-server.d.ts.map +1 -0
- package/dist/server/callback-server.js +284 -0
- package/dist/server/callback-server.js.map +1 -0
- package/dist/server/cli-runner.d.ts +55 -0
- package/dist/server/cli-runner.d.ts.map +1 -0
- package/dist/server/cli-runner.js +191 -0
- package/dist/server/cli-runner.js.map +1 -0
- package/dist/server/config.d.ts +48 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +82 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +45 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/server.d.ts +17 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +168 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/ws-handler.d.ts +59 -0
- package/dist/server/ws-handler.d.ts.map +1 -0
- package/dist/server/ws-handler.js +262 -0
- package/dist/server/ws-handler.js.map +1 -0
- package/dist/shared/protocol.d.ts +287 -0
- package/dist/shared/protocol.d.ts.map +1 -0
- package/dist/shared/protocol.js +8 -0
- package/dist/shared/protocol.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>AIMax CLI 调试控制台</title>
|
|
7
|
+
<script type="module" crossorigin src="/assets/main-BC36yw7y.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/main-ACHOM3RY.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="root"></div>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP callback server for receiving progress events from CLI subprocesses.
|
|
3
|
+
*
|
|
4
|
+
* The CLI sends POST requests to this server with AgentProgressEvent payloads.
|
|
5
|
+
* This server then forwards those events to the appropriate WebSocket connections.
|
|
6
|
+
*/
|
|
7
|
+
import type { S2CMessage } from '../shared/protocol.js';
|
|
8
|
+
export type CallbackHandler = (sessionId: string, message: S2CMessage) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Callback server that receives HTTP POST requests from CLI and forwards
|
|
11
|
+
* events to WebSocket clients.
|
|
12
|
+
*/
|
|
13
|
+
export declare class CallbackServer {
|
|
14
|
+
private port;
|
|
15
|
+
private server;
|
|
16
|
+
private handler;
|
|
17
|
+
private toolCallCounter;
|
|
18
|
+
private toolCallIdStack;
|
|
19
|
+
constructor(port: number);
|
|
20
|
+
/**
|
|
21
|
+
* Set the handler function that will be called when events are received.
|
|
22
|
+
*/
|
|
23
|
+
setHandler(handler: CallbackHandler): void;
|
|
24
|
+
/**
|
|
25
|
+
* Start the callback server.
|
|
26
|
+
*/
|
|
27
|
+
start(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Stop the callback server.
|
|
30
|
+
*/
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Get the callback URL for a session.
|
|
34
|
+
*/
|
|
35
|
+
getCallbackUrl(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Handle incoming HTTP requests.
|
|
38
|
+
*/
|
|
39
|
+
private handleRequest;
|
|
40
|
+
/**
|
|
41
|
+
* Read the request body as a string.
|
|
42
|
+
*/
|
|
43
|
+
private readBody;
|
|
44
|
+
/**
|
|
45
|
+
* Convert CLI callback payload to S2C messages.
|
|
46
|
+
*
|
|
47
|
+
* This handles the mapping from AgentProgressEvent to WebSocket messages,
|
|
48
|
+
* including generating toolCallIds for tool_start/tool_end events.
|
|
49
|
+
*/
|
|
50
|
+
private convertPayloadToMessages;
|
|
51
|
+
/**
|
|
52
|
+
* Clean up session-specific state (call when session completes).
|
|
53
|
+
*/
|
|
54
|
+
cleanupSession(sessionId: string): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=callback-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-server.d.ts","sourceRoot":"","sources":["../../src/server/callback-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAsB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;AAE/E;;;GAGG;AACH,qBAAa,cAAc;IAMb,OAAO,CAAC,IAAI;IALxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,eAAe,CAA+B;gBAElC,IAAI,EAAE,MAAM;IAMhC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;YACW,aAAa;IAqC3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAWhB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAwLhC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAIxC"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP callback server for receiving progress events from CLI subprocesses.
|
|
3
|
+
*
|
|
4
|
+
* The CLI sends POST requests to this server with AgentProgressEvent payloads.
|
|
5
|
+
* This server then forwards those events to the appropriate WebSocket connections.
|
|
6
|
+
*/
|
|
7
|
+
import http from 'node:http';
|
|
8
|
+
/**
|
|
9
|
+
* Callback server that receives HTTP POST requests from CLI and forwards
|
|
10
|
+
* events to WebSocket clients.
|
|
11
|
+
*/
|
|
12
|
+
export class CallbackServer {
|
|
13
|
+
port;
|
|
14
|
+
server;
|
|
15
|
+
handler = null;
|
|
16
|
+
toolCallCounter = new Map();
|
|
17
|
+
toolCallIdStack = new Map();
|
|
18
|
+
constructor(port) {
|
|
19
|
+
this.port = port;
|
|
20
|
+
this.server = http.createServer((req, res) => {
|
|
21
|
+
this.handleRequest(req, res);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set the handler function that will be called when events are received.
|
|
26
|
+
*/
|
|
27
|
+
setHandler(handler) {
|
|
28
|
+
this.handler = handler;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Start the callback server.
|
|
32
|
+
*/
|
|
33
|
+
async start() {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
this.server.once('error', reject);
|
|
36
|
+
this.server.listen(this.port, () => {
|
|
37
|
+
this.server.off('error', reject);
|
|
38
|
+
resolve();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stop the callback server.
|
|
44
|
+
*/
|
|
45
|
+
async stop() {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
this.server.close((err) => {
|
|
48
|
+
if (err)
|
|
49
|
+
reject(err);
|
|
50
|
+
else
|
|
51
|
+
resolve();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the callback URL for a session.
|
|
57
|
+
*/
|
|
58
|
+
getCallbackUrl() {
|
|
59
|
+
return `http://localhost:${this.port}/callback`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Handle incoming HTTP requests.
|
|
63
|
+
*/
|
|
64
|
+
async handleRequest(req, res) {
|
|
65
|
+
// Only accept POST requests to /callback
|
|
66
|
+
if (req.method !== 'POST' || req.url !== '/callback') {
|
|
67
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
68
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const body = await this.readBody(req);
|
|
73
|
+
const payload = JSON.parse(body);
|
|
74
|
+
if (!this.handler) {
|
|
75
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
76
|
+
res.end(JSON.stringify({ error: 'No handler registered' }));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Convert CLI callback payload to S2C messages
|
|
80
|
+
const messages = this.convertPayloadToMessages(payload);
|
|
81
|
+
// Forward each message to the handler
|
|
82
|
+
for (const message of messages) {
|
|
83
|
+
this.handler(payload.sessionId, message);
|
|
84
|
+
}
|
|
85
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
86
|
+
res.end(JSON.stringify({ success: true }));
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
90
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Read the request body as a string.
|
|
95
|
+
*/
|
|
96
|
+
readBody(req) {
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
let body = '';
|
|
99
|
+
req.on('data', (chunk) => {
|
|
100
|
+
body += chunk.toString();
|
|
101
|
+
});
|
|
102
|
+
req.on('end', () => resolve(body));
|
|
103
|
+
req.on('error', reject);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Convert CLI callback payload to S2C messages.
|
|
108
|
+
*
|
|
109
|
+
* This handles the mapping from AgentProgressEvent to WebSocket messages,
|
|
110
|
+
* including generating toolCallIds for tool_start/tool_end events.
|
|
111
|
+
*/
|
|
112
|
+
convertPayloadToMessages(payload) {
|
|
113
|
+
const { sessionId } = payload;
|
|
114
|
+
const messageId = payload.messageId ?? (payload.type === 'progress' ? payload.event.messageId : undefined);
|
|
115
|
+
if (payload.type === 'start') {
|
|
116
|
+
return [
|
|
117
|
+
{
|
|
118
|
+
type: 'agent.start',
|
|
119
|
+
sessionId,
|
|
120
|
+
messageId,
|
|
121
|
+
message: payload.message,
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
if (payload.type === 'done') {
|
|
126
|
+
return [
|
|
127
|
+
{
|
|
128
|
+
type: 'agent.done',
|
|
129
|
+
sessionId,
|
|
130
|
+
messageId,
|
|
131
|
+
result: payload.result,
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
if (payload.type === 'error') {
|
|
136
|
+
return [
|
|
137
|
+
{
|
|
138
|
+
type: 'agent.error',
|
|
139
|
+
sessionId,
|
|
140
|
+
messageId,
|
|
141
|
+
message: payload.message,
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
if (payload.type === 'session_reset') {
|
|
146
|
+
return [
|
|
147
|
+
{
|
|
148
|
+
type: 'session.reset',
|
|
149
|
+
sessionId,
|
|
150
|
+
messageId,
|
|
151
|
+
action: payload.action,
|
|
152
|
+
previousSessionId: payload.previousSessionId,
|
|
153
|
+
message: payload.message,
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
// Handle progress events
|
|
158
|
+
const { event } = payload;
|
|
159
|
+
switch (event.type) {
|
|
160
|
+
case 'text':
|
|
161
|
+
return [
|
|
162
|
+
{
|
|
163
|
+
type: 'agent.text',
|
|
164
|
+
sessionId,
|
|
165
|
+
messageId,
|
|
166
|
+
delta: event.text,
|
|
167
|
+
},
|
|
168
|
+
];
|
|
169
|
+
case 'bootstrap':
|
|
170
|
+
return [
|
|
171
|
+
{
|
|
172
|
+
type: 'agent.bootstrap',
|
|
173
|
+
sessionId,
|
|
174
|
+
messageId,
|
|
175
|
+
phase: event.phase,
|
|
176
|
+
dataDir: event.dataDir,
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
case 'tool_start': {
|
|
180
|
+
// Generate a unique toolCallId for this session
|
|
181
|
+
const counter = this.toolCallCounter.get(sessionId) ?? 0;
|
|
182
|
+
const newCounter = counter + 1;
|
|
183
|
+
this.toolCallCounter.set(sessionId, newCounter);
|
|
184
|
+
const toolCallId = `tool-${newCounter}`;
|
|
185
|
+
// Push to stack for matching with tool_end
|
|
186
|
+
if (!this.toolCallIdStack.has(sessionId)) {
|
|
187
|
+
this.toolCallIdStack.set(sessionId, []);
|
|
188
|
+
}
|
|
189
|
+
this.toolCallIdStack.get(sessionId).push(toolCallId);
|
|
190
|
+
return [
|
|
191
|
+
{
|
|
192
|
+
type: 'agent.tool_start',
|
|
193
|
+
sessionId,
|
|
194
|
+
messageId,
|
|
195
|
+
toolCallId,
|
|
196
|
+
name: event.name,
|
|
197
|
+
input: event.input,
|
|
198
|
+
},
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
case 'tool_end': {
|
|
202
|
+
// Pop from stack to get matching toolCallId
|
|
203
|
+
const stack = this.toolCallIdStack.get(sessionId);
|
|
204
|
+
const toolCallId = stack?.pop() ?? `tool-${this.toolCallCounter.get(sessionId) ?? 0}`;
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
207
|
+
type: 'agent.tool_end',
|
|
208
|
+
sessionId,
|
|
209
|
+
messageId,
|
|
210
|
+
toolCallId,
|
|
211
|
+
name: event.name,
|
|
212
|
+
output: event.output,
|
|
213
|
+
isError: event.isError,
|
|
214
|
+
},
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
case 'compaction':
|
|
218
|
+
return [
|
|
219
|
+
{
|
|
220
|
+
type: 'agent.compaction',
|
|
221
|
+
sessionId,
|
|
222
|
+
messageId,
|
|
223
|
+
reason: event.reason,
|
|
224
|
+
},
|
|
225
|
+
];
|
|
226
|
+
case 'memory_changed':
|
|
227
|
+
return [
|
|
228
|
+
{
|
|
229
|
+
type: 'agent.memory_changed',
|
|
230
|
+
sessionId,
|
|
231
|
+
messageId,
|
|
232
|
+
reason: event.reason,
|
|
233
|
+
files: event.files,
|
|
234
|
+
source: event.source,
|
|
235
|
+
providerId: event.providerId,
|
|
236
|
+
timestamp: event.timestamp,
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
case 'error':
|
|
240
|
+
return [
|
|
241
|
+
{
|
|
242
|
+
type: 'agent.error',
|
|
243
|
+
sessionId,
|
|
244
|
+
messageId,
|
|
245
|
+
message: event.message,
|
|
246
|
+
},
|
|
247
|
+
];
|
|
248
|
+
case 'subagent_spawn':
|
|
249
|
+
return [
|
|
250
|
+
{
|
|
251
|
+
type: 'agent.subagent_spawn',
|
|
252
|
+
sessionId,
|
|
253
|
+
messageId,
|
|
254
|
+
childSessionId: event.childSessionId,
|
|
255
|
+
task: event.task,
|
|
256
|
+
label: event.label,
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
case 'subagent_complete':
|
|
260
|
+
return [
|
|
261
|
+
{
|
|
262
|
+
type: 'agent.subagent_complete',
|
|
263
|
+
sessionId,
|
|
264
|
+
messageId,
|
|
265
|
+
childSessionId: event.childSessionId,
|
|
266
|
+
task: event.task,
|
|
267
|
+
status: event.status,
|
|
268
|
+
},
|
|
269
|
+
];
|
|
270
|
+
default:
|
|
271
|
+
// Exhaustive check
|
|
272
|
+
const _exhaustive = event;
|
|
273
|
+
return [];
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Clean up session-specific state (call when session completes).
|
|
278
|
+
*/
|
|
279
|
+
cleanupSession(sessionId) {
|
|
280
|
+
this.toolCallCounter.delete(sessionId);
|
|
281
|
+
this.toolCallIdStack.delete(sessionId);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=callback-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-server.js","sourceRoot":"","sources":["../../src/server/callback-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI subprocess runner.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the aimax CLI as a child process and manages its lifecycle.
|
|
5
|
+
*/
|
|
6
|
+
import type { ServerConfig } from './config.js';
|
|
7
|
+
export type CliRunOptions = {
|
|
8
|
+
dataDir: string;
|
|
9
|
+
message: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
messageId?: string;
|
|
12
|
+
callbackUrl: string;
|
|
13
|
+
config: ServerConfig;
|
|
14
|
+
};
|
|
15
|
+
export type CliRunResult = {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
exitCode: number;
|
|
18
|
+
stdout: string;
|
|
19
|
+
stderr: string;
|
|
20
|
+
};
|
|
21
|
+
export type CliCommandsResult = {
|
|
22
|
+
exitCode: number;
|
|
23
|
+
stdout: string;
|
|
24
|
+
stderr: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Manages a CLI subprocess execution.
|
|
28
|
+
*/
|
|
29
|
+
export declare class CliRunner {
|
|
30
|
+
private options;
|
|
31
|
+
private process;
|
|
32
|
+
private stdout;
|
|
33
|
+
private stderr;
|
|
34
|
+
private aborted;
|
|
35
|
+
constructor(options: CliRunOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Start the CLI subprocess.
|
|
38
|
+
*
|
|
39
|
+
* @returns Promise that resolves when the CLI process exits
|
|
40
|
+
*/
|
|
41
|
+
run(): Promise<CliRunResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Abort the running CLI process.
|
|
44
|
+
*/
|
|
45
|
+
abort(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Check if the process is still running.
|
|
48
|
+
*/
|
|
49
|
+
isRunning(): boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function runCommandsList(params: {
|
|
52
|
+
dataDir: string;
|
|
53
|
+
config: ServerConfig;
|
|
54
|
+
}): Promise<CliCommandsResult>;
|
|
55
|
+
//# sourceMappingURL=cli-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-runner.d.ts","sourceRoot":"","sources":["../../src/server/cli-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAMR,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAS;gBAEJ,OAAO,EAAE,aAAa;IAE1C;;;;OAIG;IACG,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;IAgHlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoD7B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI subprocess runner.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the aimax CLI as a child process and manages its lifecycle.
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from 'node:child_process';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* Manages a CLI subprocess execution.
|
|
10
|
+
*/
|
|
11
|
+
export class CliRunner {
|
|
12
|
+
options;
|
|
13
|
+
process = null;
|
|
14
|
+
stdout = '';
|
|
15
|
+
stderr = '';
|
|
16
|
+
aborted = false;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Start the CLI subprocess.
|
|
22
|
+
*
|
|
23
|
+
* @returns Promise that resolves when the CLI process exits
|
|
24
|
+
*/
|
|
25
|
+
async run() {
|
|
26
|
+
const { config, dataDir, message, sessionId, messageId, callbackUrl } = this.options;
|
|
27
|
+
// Debug log
|
|
28
|
+
console.log('[CliRunner] Starting CLI with sessionId:', sessionId || 'NONE (new session)');
|
|
29
|
+
const baseArgs = [
|
|
30
|
+
'run',
|
|
31
|
+
'--data-dir', dataDir,
|
|
32
|
+
'--message', message,
|
|
33
|
+
'--channel', 'WEB',
|
|
34
|
+
'--base-url', config.llm.baseUrl,
|
|
35
|
+
];
|
|
36
|
+
if (config.llm.authToken) {
|
|
37
|
+
baseArgs.push('--auth-token', config.llm.authToken);
|
|
38
|
+
}
|
|
39
|
+
else if (config.llm.apiKey) {
|
|
40
|
+
baseArgs.push('--api-key', config.llm.apiKey);
|
|
41
|
+
}
|
|
42
|
+
baseArgs.push('--model', config.llm.model, '--callback-url', callbackUrl, '--output', 'json');
|
|
43
|
+
const useNode = isNodeBinary(config.cliBin);
|
|
44
|
+
const command = useNode ? config.nodeBinPath : config.cliBin;
|
|
45
|
+
const args = useNode ? [config.cliScriptPath, ...baseArgs] : baseArgs;
|
|
46
|
+
if (sessionId) {
|
|
47
|
+
args.push('--session-id', sessionId);
|
|
48
|
+
console.log('[CliRunner] Added --session-id argument:', sessionId);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log('[CliRunner] No sessionId provided, will create new session');
|
|
52
|
+
}
|
|
53
|
+
if (messageId) {
|
|
54
|
+
args.push('--message-id', messageId);
|
|
55
|
+
console.log('[CliRunner] Added --message-id argument:', messageId);
|
|
56
|
+
}
|
|
57
|
+
if (config.llm.contextWindow !== undefined) {
|
|
58
|
+
args.push('--context-window', config.llm.contextWindow.toString());
|
|
59
|
+
}
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
this.process = spawn(command, args, {
|
|
62
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
63
|
+
env: {
|
|
64
|
+
...process.env,
|
|
65
|
+
// Pass through environment variables
|
|
66
|
+
AIMAX_DATA_DIR: dataDir,
|
|
67
|
+
AIMAX_BASE_URL: config.llm.baseUrl,
|
|
68
|
+
...(config.llm.apiKey ? { AIMAX_API_KEY: config.llm.apiKey } : {}),
|
|
69
|
+
...(config.llm.authToken ? { AIMAX_AUTH_TOKEN: config.llm.authToken } : {}),
|
|
70
|
+
AIMAX_MODEL: config.llm.model,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
// Capture stdout
|
|
74
|
+
this.process.stdout?.on('data', (chunk) => {
|
|
75
|
+
this.stdout += chunk.toString();
|
|
76
|
+
});
|
|
77
|
+
// Capture stderr
|
|
78
|
+
this.process.stderr?.on('data', (chunk) => {
|
|
79
|
+
this.stderr += chunk.toString();
|
|
80
|
+
});
|
|
81
|
+
// Handle process exit
|
|
82
|
+
this.process.on('exit', (code) => {
|
|
83
|
+
const exitCode = code ?? (this.aborted ? 143 : 1);
|
|
84
|
+
// Try to extract sessionId from stdout (JSON output)
|
|
85
|
+
let extractedSessionId = sessionId;
|
|
86
|
+
try {
|
|
87
|
+
const lines = this.stdout.trim().split('\n');
|
|
88
|
+
const lastLine = lines[lines.length - 1];
|
|
89
|
+
if (lastLine) {
|
|
90
|
+
const result = JSON.parse(lastLine);
|
|
91
|
+
if (result.sessionId) {
|
|
92
|
+
extractedSessionId = result.sessionId;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore parse errors
|
|
98
|
+
}
|
|
99
|
+
resolve({
|
|
100
|
+
sessionId: extractedSessionId ?? 'unknown',
|
|
101
|
+
exitCode,
|
|
102
|
+
stdout: this.stdout,
|
|
103
|
+
stderr: this.stderr,
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
// Handle process errors
|
|
107
|
+
this.process.on('error', (err) => {
|
|
108
|
+
if (isCommandNotFound(err) && !useNode) {
|
|
109
|
+
reject(new Error('aimax command not found. Install @gencode/cli or set ' +
|
|
110
|
+
'AIMAX_CLI_BIN=node and AIMAX_CLI_SCRIPT=/path/to/cli/dist/bin.js ' +
|
|
111
|
+
'to run via Node.js.'));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
reject(new Error(`Failed to spawn CLI: ${err.message}`));
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Abort the running CLI process.
|
|
120
|
+
*/
|
|
121
|
+
abort() {
|
|
122
|
+
if (this.process && !this.process.killed) {
|
|
123
|
+
this.aborted = true;
|
|
124
|
+
this.process.kill('SIGTERM');
|
|
125
|
+
// Force kill after 5 seconds if still running
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
if (this.process && !this.process.killed) {
|
|
128
|
+
this.process.kill('SIGKILL');
|
|
129
|
+
}
|
|
130
|
+
}, 5000);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if the process is still running.
|
|
135
|
+
*/
|
|
136
|
+
isRunning() {
|
|
137
|
+
return this.process !== null && !this.process.killed;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export async function runCommandsList(params) {
|
|
141
|
+
const { config, dataDir } = params;
|
|
142
|
+
const baseArgs = [
|
|
143
|
+
'commands',
|
|
144
|
+
'--data-dir', dataDir,
|
|
145
|
+
'--output', 'json',
|
|
146
|
+
];
|
|
147
|
+
const useNode = isNodeBinary(config.cliBin);
|
|
148
|
+
const command = useNode ? config.nodeBinPath : config.cliBin;
|
|
149
|
+
const args = useNode ? [config.cliScriptPath, ...baseArgs] : baseArgs;
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
const child = spawn(command, args, {
|
|
152
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
153
|
+
env: {
|
|
154
|
+
...process.env,
|
|
155
|
+
AIMAX_DATA_DIR: dataDir,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
let stdout = '';
|
|
159
|
+
let stderr = '';
|
|
160
|
+
child.stdout?.on('data', (chunk) => {
|
|
161
|
+
stdout += chunk.toString();
|
|
162
|
+
});
|
|
163
|
+
child.stderr?.on('data', (chunk) => {
|
|
164
|
+
stderr += chunk.toString();
|
|
165
|
+
});
|
|
166
|
+
child.on('exit', (code) => {
|
|
167
|
+
resolve({
|
|
168
|
+
exitCode: code ?? 1,
|
|
169
|
+
stdout,
|
|
170
|
+
stderr,
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
child.on('error', (err) => {
|
|
174
|
+
if (isCommandNotFound(err) && !useNode) {
|
|
175
|
+
reject(new Error('aimax command not found. Install @gencode/cli or set ' +
|
|
176
|
+
'AIMAX_CLI_BIN=node and AIMAX_CLI_SCRIPT=/path/to/cli/dist/bin.js ' +
|
|
177
|
+
'to run via Node.js.'));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
reject(new Error(`Failed to spawn CLI: ${err.message}`));
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function isNodeBinary(bin) {
|
|
185
|
+
const base = path.basename(bin).toLowerCase();
|
|
186
|
+
return base === 'node' || base === 'node.exe';
|
|
187
|
+
}
|
|
188
|
+
function isCommandNotFound(err) {
|
|
189
|
+
return Boolean(err?.code === 'ENOENT');
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=cli-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../src/server/cli-runner.ts"],"names":[],"mappings":"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"}
|