@auto-engineer/cli 0.8.1 → 0.8.3

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.
@@ -2,24 +2,17 @@ import express from 'express';
2
2
  import cors from 'cors';
3
3
  import { createServer } from 'http';
4
4
  import { Server as SocketIOServer } from 'socket.io';
5
- import { createMessageBus, } from '@auto-engineer/message-bus';
5
+ import { createMessageBus } from '@auto-engineer/message-bus';
6
6
  import createDebug from 'debug';
7
7
  import { StateManager } from './state-manager.js';
8
8
  import { FileSyncer } from './file-syncer.js';
9
- import { fileURLToPath } from 'url';
10
- import { dirname, join } from 'path';
9
+ import { setupHttpRoutes } from './http-routes.js';
10
+ import { setupWebSocketHandlers } from './websocket-handler.js';
11
+ import { EventProcessor } from './event-processor.js';
12
+ import { CommandRegistry } from './command-registry.js';
11
13
  const debug = createDebug('auto-engineer:server');
12
- const debugHttp = createDebug('auto-engineer:server:http');
13
- const debugWs = createDebug('auto-engineer:server:ws');
14
- const debugBus = createDebug('auto-engineer:server:bus');
15
14
  export class MessageBusServer {
16
15
  constructor(config = {}) {
17
- this.eventHandlers = new Map();
18
- this.foldRegistry = new Map();
19
- this.commandHandlerNames = [];
20
- this.commandMetadata = new Map();
21
- this.eventHistory = [];
22
- this.maxEventHistory = 1000; // Limit to prevent memory issues
23
16
  this.config = {
24
17
  port: config.port ?? 5555,
25
18
  wsPort: config.wsPort ?? 5556,
@@ -40,350 +33,61 @@ export class MessageBusServer {
40
33
  // Initialize message bus and state manager
41
34
  this.messageBus = createMessageBus();
42
35
  this.stateManager = new StateManager();
36
+ // Initialize modules
37
+ this.eventProcessor = new EventProcessor(this.messageBus, this.stateManager, (event) => this.io.emit('event', event));
38
+ this.commandRegistry = new CommandRegistry(this.messageBus, this.stateManager);
43
39
  // Set up global event listener for state management
44
- this.setupGlobalEventListener();
40
+ this.eventProcessor.setupGlobalEventListener();
45
41
  // Set up HTTP routes
46
42
  this.setupRoutes();
47
43
  // Set up WebSocket handlers
48
44
  this.setupWebSocketHandlers();
49
45
  debug('Message bus server initialized');
50
46
  }
51
- /**
52
- * Set up global event listener for state management and event forwarding
53
- */
54
- setupGlobalEventListener() {
55
- this.messageBus.subscribeAll({
56
- name: 'ServerStateManager',
57
- handle: async (event) => {
58
- debugBus('Received event:', event.type);
59
- // Store event in history
60
- this.eventHistory.push({
61
- event,
62
- timestamp: new Date().toISOString(),
63
- });
64
- // Trim history if it exceeds max size
65
- if (this.eventHistory.length > this.maxEventHistory) {
66
- this.eventHistory = this.eventHistory.slice(-this.maxEventHistory);
67
- }
68
- // Apply event to state
69
- this.stateManager.applyEvent(event);
70
- // Trigger registered event handlers
71
- const handlers = this.eventHandlers.get(event.type) || [];
72
- for (const handler of handlers) {
73
- try {
74
- handler(event);
75
- }
76
- catch (error) {
77
- const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
78
- if (!isTest) {
79
- console.error(`Error in event handler for ${event.type}:`, error);
80
- }
81
- debugBus('Event handler error (suppressed in tests):', error);
82
- }
83
- }
84
- // Broadcast event to WebSocket clients
85
- this.io.emit('event', event);
86
- debugWs('Broadcasted event to WebSocket clients:', event.type);
87
- },
88
- });
89
- }
90
47
  /**
91
48
  * Set up HTTP routes
92
49
  */
93
50
  setupRoutes() {
94
- // Health check endpoint
95
- this.app.get('/health', (_req, res) => {
96
- res.json({
97
- status: 'healthy',
98
- uptime: process.uptime(),
99
- timestamp: new Date().toISOString(),
100
- });
101
- });
102
- // Serve dashboard
103
- this.app.get('/', (_req, res) => {
104
- const __dirname = dirname(fileURLToPath(import.meta.url));
105
- res.sendFile(join(__dirname, 'dashboard.html'));
106
- });
107
- // Get registry information
108
- this.app.get('/registry', (_req, res) => {
109
- // Sort commands alphabetically by alias
110
- const sortedCommands = this.commandHandlerNames
111
- .map((name) => ({
112
- name,
113
- metadata: this.commandMetadata.get(name),
114
- }))
115
- .sort((a, b) => {
116
- const aliasA = a.metadata?.alias ?? a.name;
117
- const aliasB = b.metadata?.alias ?? b.name;
118
- return aliasA.localeCompare(aliasB);
119
- });
120
- res.json({
121
- eventHandlers: Array.from(this.eventHandlers.keys()),
122
- folds: Array.from(this.foldRegistry.keys()),
123
- commandHandlers: sortedCommands.map((cmd) => cmd.name),
124
- commandsWithMetadata: sortedCommands.map((cmd) => ({
125
- name: cmd.name,
126
- alias: cmd.metadata?.alias ?? cmd.name,
127
- description: cmd.metadata?.description ?? 'No description',
128
- package: cmd.metadata?.package ?? 'unknown',
129
- version: cmd.metadata?.version,
130
- category: cmd.metadata?.category,
131
- })),
132
- });
133
- });
134
- // Get event history
135
- this.app.get('/events', (_req, res) => {
136
- res.json(this.eventHistory);
137
- });
138
- // Get current state
139
- this.app.get('/state', (_req, res) => {
140
- res.json(this.stateManager.getState());
141
- });
142
- // Command endpoint
143
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
144
- this.app.post('/command', async (req, res) => {
145
- try {
146
- const command = req.body;
147
- debugHttp('Received command:', command.type);
148
- debugHttp('Command data:', command.data);
149
- // Validate command structure
150
- if (!command.type || !('data' in command)) {
151
- return res.status(400).json({
152
- status: 'nack',
153
- error: 'Invalid command structure. Must have type and data fields.',
154
- });
155
- }
156
- // Add request ID if not present
157
- const hasRequestId = command.requestId !== null && command.requestId !== undefined && command.requestId !== '';
158
- const cmdWithId = hasRequestId
159
- ? command
160
- : { ...command, requestId: `req-${Date.now()}-${Math.random().toString(36).substring(2, 11)}` };
161
- // TODO: Add type validation based on command types
162
- // validateCommand(command);
163
- // Check if command handler exists
164
- if (!this.commandHandlerNames.includes(cmdWithId.type)) {
165
- return res.status(404).json({
166
- status: 'nack',
167
- error: `Command handler not found for command: ${cmdWithId.type}`,
168
- availableCommands: this.commandHandlerNames,
169
- });
170
- }
171
- // Send to message bus (non-blocking)
172
- this.messageBus
173
- .sendCommand(cmdWithId)
174
- .then(() => {
175
- debugHttp('Command processed successfully:', cmdWithId.type);
176
- })
177
- .catch((err) => {
178
- const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
179
- if (!isTest) {
180
- console.error('Command failed:', err);
181
- }
182
- debugHttp('Command failed (suppressed in tests):', err);
183
- // Emit error event for UI to capture
184
- this.io.emit('commandError', {
185
- commandId: cmdWithId.requestId,
186
- error: err instanceof Error ? err.message : String(err),
187
- timestamp: new Date().toISOString(),
188
- });
189
- });
190
- // Return acknowledgment immediately
191
- res.json({
192
- status: 'ack',
193
- commandId: cmdWithId.requestId,
194
- timestamp: new Date().toISOString(),
195
- });
196
- }
197
- catch (error) {
198
- debugHttp('Error processing command:', error);
199
- res.status(400).json({
200
- status: 'nack',
201
- error: error instanceof Error ? error.message : 'Failed to process command',
202
- });
203
- }
51
+ setupHttpRoutes(this.app, this.messageBus, this.stateManager, {
52
+ commandHandlerNames: this.commandRegistry.getCommandHandlerNames(),
53
+ commandMetadata: this.commandRegistry.getCommandMetadata(),
54
+ eventHandlers: this.eventProcessor.getEventHandlers(),
55
+ foldRegistry: this.commandRegistry.getFoldRegistry(),
56
+ eventHistory: this.eventProcessor.getEventHistory(),
57
+ onCommandError: (error) => {
58
+ this.io.emit('commandError', error);
59
+ },
204
60
  });
205
- debugHttp('HTTP routes configured');
206
61
  }
207
62
  /**
208
63
  * Set up WebSocket handlers
209
64
  */
210
65
  setupWebSocketHandlers() {
211
- this.io.on('connection', (socket) => {
212
- debugWs('WebSocket client connected:', socket.id);
213
- // Send current state to new client
214
- socket.emit('state', this.stateManager.getState());
215
- // Handle command from WebSocket
216
- socket.on('command', async (command) => {
217
- debugWs('Received command via WebSocket:', command.type);
218
- try {
219
- // Add request ID if not present
220
- const hasRequestId = command.requestId !== null && command.requestId !== undefined && command.requestId !== '';
221
- const cmdWithId = hasRequestId
222
- ? command
223
- : { ...command, requestId: `ws-${Date.now()}-${Math.random().toString(36).substring(2, 11)}` };
224
- await this.messageBus.sendCommand(cmdWithId);
225
- socket.emit('command-ack', {
226
- status: 'ack',
227
- commandId: cmdWithId.requestId,
228
- });
229
- }
230
- catch (error) {
231
- socket.emit('command-ack', {
232
- status: 'nack',
233
- error: error instanceof Error ? error.message : 'Unknown error',
234
- });
235
- }
236
- });
237
- // Handle state query
238
- socket.on('get-state', () => {
239
- socket.emit('state', this.stateManager.getState());
240
- });
241
- socket.on('disconnect', () => {
242
- debugWs('WebSocket client disconnected:', socket.id);
243
- });
244
- });
245
- debugWs('WebSocket handlers configured');
246
- }
247
- /**
248
- * Process handler result to reduce complexity
249
- */
250
- async processHandlerResult(result) {
251
- if (result === null || result === undefined)
252
- return;
253
- if (Array.isArray(result)) {
254
- await this.processCommandArray(result);
255
- }
256
- else if (typeof result === 'object' && result !== null && 'type' in result) {
257
- await this.processActionOrCommand(result);
258
- }
259
- }
260
- async processCommandArray(commands) {
261
- debugBus('Dispatching multiple commands from event handler');
262
- for (const command of commands) {
263
- if (command !== null &&
264
- command !== undefined &&
265
- typeof command === 'object' &&
266
- 'type' in command &&
267
- 'data' in command) {
268
- debugBus('Dispatching command:', command.type);
269
- await this.messageBus.sendCommand(command);
270
- }
271
- }
272
- }
273
- async processActionOrCommand(action) {
274
- const actionObj = action;
275
- if (actionObj !== null && typeof actionObj === 'object' && 'data' in actionObj) {
276
- debugBus('Dispatching command from event handler:', action.type);
277
- await this.messageBus.sendCommand(action);
278
- }
279
- else {
280
- await this.processDispatchAction(action);
281
- }
282
- }
283
- // eslint-disable-next-line complexity
284
- async processDispatchAction(action) {
285
- if (action.type === 'dispatch' && action.command) {
286
- debugBus('Dispatching command from dispatch action:', action.command.type);
287
- await this.messageBus.sendCommand(action.command);
288
- }
289
- else if (action.type === 'dispatch-parallel' && action.commands) {
290
- debugBus('Dispatching parallel commands from event handler');
291
- await Promise.all(action.commands.map((cmd) => this.messageBus.sendCommand(cmd)));
292
- }
293
- else if (action.type === 'dispatch-sequence' && action.commands) {
294
- debugBus('Dispatching sequential commands from event handler');
295
- for (const cmd of action.commands) {
296
- await this.messageBus.sendCommand(cmd);
297
- }
298
- }
299
- else if (action.type === 'dispatch-custom' && action.commandFactory) {
300
- const cmds = action.commandFactory();
301
- const commands = Array.isArray(cmds) ? cmds : [cmds];
302
- for (const cmd of commands) {
303
- await this.messageBus.sendCommand(cmd);
304
- }
305
- }
66
+ setupWebSocketHandlers(this.io, this.messageBus, this.stateManager);
306
67
  }
307
68
  /**
308
69
  * Register event handlers from DSL
309
70
  */
310
71
  registerEventHandler(registration) {
311
- debug('Registering event handler for:', registration.eventType);
312
- const handler = async (event) => {
313
- try {
314
- const result = registration.handler(event);
315
- await this.processHandlerResult(result);
316
- }
317
- catch (error) {
318
- const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
319
- if (!isTest) {
320
- console.error('Error in event handler:', error);
321
- }
322
- debug('Event handler error (suppressed in tests):', error);
323
- }
324
- };
325
- // Store handler for later execution
326
- if (!this.eventHandlers.has(registration.eventType)) {
327
- this.eventHandlers.set(registration.eventType, []);
328
- }
329
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
330
- this.eventHandlers.get(registration.eventType).push(handler);
72
+ this.eventProcessor.registerEventHandler(registration);
331
73
  }
332
74
  /**
333
75
  * Register fold function from DSL
334
76
  */
335
77
  registerFold(registration) {
336
- debug('Registering fold for:', registration.eventType);
337
- const foldFn = registration.reducer;
338
- this.stateManager.registerFold(registration.eventType, foldFn);
339
- this.foldRegistry.set(registration.eventType, foldFn);
78
+ this.commandRegistry.registerFold(registration);
340
79
  }
341
80
  /**
342
81
  * Set command metadata for dashboard display
343
82
  */
344
83
  setCommandMetadata(commandName, metadata) {
345
- this.commandMetadata.set(commandName, metadata);
346
- debugBus('Set metadata for command:', commandName, metadata);
84
+ this.commandRegistry.setCommandMetadata(commandName, metadata);
347
85
  }
348
86
  /**
349
87
  * Register command handlers directly with the message bus
350
88
  */
351
89
  registerCommandHandlers(handlers) {
352
- debugBus('registerCommandHandlers called with', handlers.length, 'handlers');
353
- debugBus('Current commandHandlerNames:', this.commandHandlerNames);
354
- for (const handler of handlers) {
355
- this.processCommandHandler(handler);
356
- }
357
- debugBus('After registration, commandHandlerNames:', this.commandHandlerNames);
358
- }
359
- processCommandHandler(handler) {
360
- if (handler !== null &&
361
- handler !== undefined &&
362
- typeof handler === 'object' &&
363
- 'name' in handler &&
364
- 'handle' in handler) {
365
- const cmdHandler = handler;
366
- debugBus('Registering command handler:', cmdHandler.name);
367
- this.messageBus.registerCommandHandler(cmdHandler);
368
- this.commandHandlerNames.push(cmdHandler.name);
369
- this.extractUnifiedHandlerMetadata(handler, cmdHandler.name);
370
- }
371
- else {
372
- debugBus('Skipping invalid handler:', handler);
373
- }
374
- }
375
- extractUnifiedHandlerMetadata(handler, commandName) {
376
- if (typeof handler === 'object' && handler !== null && 'alias' in handler && 'description' in handler) {
377
- const unifiedHandler = handler;
378
- debugBus('Extracting metadata from UnifiedCommandHandler:', commandName);
379
- this.setCommandMetadata(commandName, {
380
- alias: unifiedHandler.alias,
381
- description: unifiedHandler.description,
382
- package: unifiedHandler.package?.name ?? 'unknown',
383
- version: unifiedHandler.package?.version,
384
- category: unifiedHandler.category,
385
- });
386
- }
90
+ this.commandRegistry.registerCommandHandlers(handlers);
387
91
  }
388
92
  /**
389
93
  * Initialize state
@@ -466,13 +170,13 @@ export class MessageBusServer {
466
170
  * Get the event history
467
171
  */
468
172
  getEventHistory() {
469
- return this.eventHistory;
173
+ return this.eventProcessor.getEventHistory();
470
174
  }
471
175
  /**
472
176
  * Clear event history
473
177
  */
474
178
  clearEventHistory() {
475
- this.eventHistory = [];
179
+ this.eventProcessor.clearEventHistory();
476
180
  }
477
181
  }
478
182
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Server as SocketIOServer } from 'socket.io';
2
+ import type { MessageBus } from '@auto-engineer/message-bus';
3
+ import type { StateManager } from './state-manager';
4
+ export declare function setupWebSocketHandlers(io: SocketIOServer, messageBus: MessageBus, stateManager: StateManager<Record<string, unknown>>): void;
5
+ //# sourceMappingURL=websocket-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-handler.d.ts","sourceRoot":"","sources":["../../../src/server/websocket-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKpD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAClD,IAAI,CA2CN"}
@@ -0,0 +1,40 @@
1
+ import createDebug from 'debug';
2
+ const debugWs = createDebug('auto-engineer:server:ws');
3
+ export function setupWebSocketHandlers(io, messageBus, stateManager) {
4
+ io.on('connection', (socket) => {
5
+ debugWs('WebSocket client connected:', socket.id);
6
+ // Send current state to new client
7
+ socket.emit('state', stateManager.getState());
8
+ // Handle command from WebSocket
9
+ socket.on('command', async (command) => {
10
+ debugWs('Received command via WebSocket:', command.type);
11
+ try {
12
+ // Add request ID if not present
13
+ const hasRequestId = command.requestId !== null && command.requestId !== undefined && command.requestId !== '';
14
+ const cmdWithId = hasRequestId
15
+ ? command
16
+ : { ...command, requestId: `ws-${Date.now()}-${Math.random().toString(36).substring(2, 11)}` };
17
+ await messageBus.sendCommand(cmdWithId);
18
+ socket.emit('command-ack', {
19
+ status: 'ack',
20
+ commandId: cmdWithId.requestId,
21
+ });
22
+ }
23
+ catch (error) {
24
+ socket.emit('command-ack', {
25
+ status: 'nack',
26
+ error: error instanceof Error ? error.message : 'Unknown error',
27
+ });
28
+ }
29
+ });
30
+ // Handle state query
31
+ socket.on('get-state', () => {
32
+ socket.emit('state', stateManager.getState());
33
+ });
34
+ socket.on('disconnect', () => {
35
+ debugWs('WebSocket client disconnected:', socket.id);
36
+ });
37
+ });
38
+ debugWs('WebSocket handlers configured');
39
+ }
40
+ //# sourceMappingURL=websocket-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-handler.js","sourceRoot":"","sources":["../../../src/server/websocket-handler.ts"],"names":[],"mappings":"AAGA,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,MAAM,OAAO,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CACpC,EAAkB,EAClB,UAAsB,EACtB,YAAmD;IAEnD,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAElD,mCAAmC;QACnC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9C,gCAAgC;QAChC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;YAC9C,OAAO,CAAC,iCAAiC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,CAAC;gBACH,gCAAgC;gBAChC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC;gBAC/G,MAAM,SAAS,GAAG,YAAY;oBAC5B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAEjG,MAAM,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAExC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;oBACzB,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,SAAS,CAAC,SAAS;iBAC/B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;oBACzB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,gCAAgC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAC3C,CAAC"}