@auto-engineer/cli 0.9.11 → 0.9.12

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 (39) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/src/dsl/index.d.ts +34 -3
  3. package/dist/src/dsl/index.d.ts.map +1 -1
  4. package/dist/src/dsl/index.js +304 -14
  5. package/dist/src/dsl/index.js.map +1 -1
  6. package/dist/src/dsl-exports.d.ts +3 -1
  7. package/dist/src/dsl-exports.d.ts.map +1 -1
  8. package/dist/src/dsl-exports.js +2 -1
  9. package/dist/src/dsl-exports.js.map +1 -1
  10. package/dist/src/server/command-metadata-service.d.ts +17 -0
  11. package/dist/src/server/command-metadata-service.d.ts.map +1 -0
  12. package/dist/src/server/command-metadata-service.js +35 -0
  13. package/dist/src/server/command-metadata-service.js.map +1 -0
  14. package/dist/src/server/command-registry.d.ts +5 -16
  15. package/dist/src/server/command-registry.d.ts.map +1 -1
  16. package/dist/src/server/command-registry.js +8 -18
  17. package/dist/src/server/command-registry.js.map +1 -1
  18. package/dist/src/server/config-loader.d.ts +2 -1
  19. package/dist/src/server/config-loader.d.ts.map +1 -1
  20. package/dist/src/server/config-loader.js +9 -1
  21. package/dist/src/server/config-loader.js.map +1 -1
  22. package/dist/src/server/event-processor.d.ts +5 -3
  23. package/dist/src/server/event-processor.d.ts.map +1 -1
  24. package/dist/src/server/event-processor.js +10 -1
  25. package/dist/src/server/event-processor.js.map +1 -1
  26. package/dist/src/server/http-routes.d.ts +3 -0
  27. package/dist/src/server/http-routes.d.ts.map +1 -1
  28. package/dist/src/server/http-routes.js +29 -8
  29. package/dist/src/server/http-routes.js.map +1 -1
  30. package/dist/src/server/server.d.ts +11 -1
  31. package/dist/src/server/server.d.ts.map +1 -1
  32. package/dist/src/server/server.js +19 -1
  33. package/dist/src/server/server.js.map +1 -1
  34. package/dist/src/server/settled-tracker.d.ts +19 -0
  35. package/dist/src/server/settled-tracker.d.ts.map +1 -0
  36. package/dist/src/server/settled-tracker.js +162 -0
  37. package/dist/src/server/settled-tracker.js.map +1 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +4 -4
@@ -0,0 +1,162 @@
1
+ import { getPendingDispatches } from '../dsl/index.js';
2
+ import createDebug from 'debug';
3
+ const debug = createDebug('auto-engineer:server:settled-tracker');
4
+ export class SettledTracker {
5
+ constructor(onDispatchAction) {
6
+ this.settledHandlers = new Map();
7
+ this.commandToHandlerIds = new Map();
8
+ this.runningCommands = new Map();
9
+ this.onDispatchAction = onDispatchAction;
10
+ }
11
+ registerSettledHandler(registration) {
12
+ const handlerId = this.generateHandlerId(registration);
13
+ debug('Registering settled handler:', handlerId, 'for commands:', registration.commandTypes);
14
+ const commandTrackers = new Map();
15
+ for (const commandType of registration.commandTypes) {
16
+ commandTrackers.set(commandType, {
17
+ commandType,
18
+ hasCompleted: false,
19
+ events: [],
20
+ });
21
+ // Track which handlers are interested in this command type
22
+ if (!this.commandToHandlerIds.has(commandType)) {
23
+ this.commandToHandlerIds.set(commandType, new Set());
24
+ }
25
+ this.commandToHandlerIds.get(commandType).add(handlerId);
26
+ }
27
+ this.settledHandlers.set(handlerId, {
28
+ registration,
29
+ commandTrackers,
30
+ });
31
+ }
32
+ onCommandStarted(command) {
33
+ const { type: commandType, correlationId, requestId } = command;
34
+ if (correlationId === undefined ||
35
+ correlationId === null ||
36
+ correlationId === '' ||
37
+ requestId === undefined ||
38
+ requestId === null ||
39
+ requestId === '') {
40
+ debug('Command missing correlation/request ID, cannot track:', commandType);
41
+ return;
42
+ }
43
+ // Track this command execution
44
+ this.runningCommands.set(requestId, { commandType, correlationId });
45
+ debug('Started tracking command:', commandType, 'with requestId:', requestId);
46
+ }
47
+ onEventReceived(event) {
48
+ debug('Received event:', event.type);
49
+ // For each settled handler, check if this event indicates completion of any tracked commands
50
+ for (const [handlerId, handler] of this.settledHandlers) {
51
+ for (const [commandType, tracker] of handler.commandTrackers) {
52
+ if (tracker.hasCompleted)
53
+ continue;
54
+ // Check if this event is related to this command type
55
+ if (this.isEventFromCommand(event.type, commandType)) {
56
+ debug('Event', event.type, 'is related to command', commandType);
57
+ // Always add related events to the tracker
58
+ tracker.events.push(event);
59
+ // Only mark as completed if this is a completion event
60
+ if (this.isCompletionEvent(event.type)) {
61
+ tracker.hasCompleted = true;
62
+ debug('Marked command', commandType, 'as completed for handler', handlerId);
63
+ // Check if all commands for this handler have completed
64
+ this.checkAndTriggerHandler(handlerId, handler);
65
+ }
66
+ else {
67
+ debug('Event', event.type, 'is progress for command', commandType, '- not marking as completed yet');
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ isEventFromCommand(eventType, commandType) {
74
+ // Simple heuristic mapping based on common patterns
75
+ const eventToCommandMap = {
76
+ TestsCheckPassed: ['CheckTests'],
77
+ TestsCheckFailed: ['CheckTests'],
78
+ TestsStarted: ['CheckTests'],
79
+ TestProgress: ['CheckTests'],
80
+ TypeCheckPassed: ['CheckTypes'],
81
+ TypeCheckFailed: ['CheckTypes'],
82
+ LintCheckPassed: ['CheckLint'],
83
+ LintCheckFailed: ['CheckLint'],
84
+ ClientImplemented: ['ImplementClient'],
85
+ };
86
+ const commandsForEvent = eventToCommandMap[eventType];
87
+ return commandsForEvent?.includes(commandType) ?? false;
88
+ }
89
+ isCompletionEvent(eventType) {
90
+ // Only these events indicate command completion
91
+ const completionEvents = [
92
+ 'TestsCheckPassed',
93
+ 'TestsCheckFailed',
94
+ 'TypeCheckPassed',
95
+ 'TypeCheckFailed',
96
+ 'LintCheckPassed',
97
+ 'LintCheckFailed',
98
+ 'ClientImplemented',
99
+ ];
100
+ return completionEvents.includes(eventType);
101
+ }
102
+ checkAndTriggerHandler(handlerId, handler) {
103
+ const allCompleted = Array.from(handler.commandTrackers.values()).every((tracker) => tracker.hasCompleted);
104
+ if (!allCompleted) {
105
+ debug('Handler', handlerId, 'not ready yet - waiting for more commands to complete');
106
+ return;
107
+ }
108
+ debug('All commands completed for handler', handlerId, '- triggering settled handler');
109
+ // Collect all events grouped by command type
110
+ const eventsByCommandType = {};
111
+ for (const [commandType, tracker] of handler.commandTrackers) {
112
+ eventsByCommandType[commandType] = [...tracker.events];
113
+ }
114
+ try {
115
+ // Execute the handler (DSL already handles enhanced API wrapping)
116
+ debug('Executing settled handler with events:', Object.keys(eventsByCommandType));
117
+ handler.registration.handler(eventsByCommandType);
118
+ // Check for any pending dispatches created by the handler
119
+ const pendingDispatches = getPendingDispatches();
120
+ debug('Found %d pending dispatches after handler execution', pendingDispatches.length);
121
+ if (pendingDispatches.length > 0 && this.onDispatchAction) {
122
+ for (const action of pendingDispatches) {
123
+ debug('Processing pending dispatch action:', action.type);
124
+ this.onDispatchAction(action);
125
+ }
126
+ }
127
+ debug('Settled handler', handlerId, 'executed successfully');
128
+ }
129
+ catch (error) {
130
+ debug('Error executing settled handler', handlerId, ':', error);
131
+ }
132
+ // Clean up this handler since it has been triggered
133
+ this.cleanupHandler(handlerId);
134
+ }
135
+ cleanupHandler(handlerId) {
136
+ const handler = this.settledHandlers.get(handlerId);
137
+ if (!handler)
138
+ return;
139
+ // Remove handler from command type mappings
140
+ for (const commandType of handler.registration.commandTypes) {
141
+ const handlerIds = this.commandToHandlerIds.get(commandType);
142
+ if (handlerIds) {
143
+ handlerIds.delete(handlerId);
144
+ if (handlerIds.size === 0) {
145
+ this.commandToHandlerIds.delete(commandType);
146
+ }
147
+ }
148
+ }
149
+ // Remove the handler itself
150
+ this.settledHandlers.delete(handlerId);
151
+ debug('Cleaned up settled handler:', handlerId);
152
+ }
153
+ generateHandlerId(registration) {
154
+ const commandTypes = registration.commandTypes.join(',');
155
+ const timestamp = Date.now();
156
+ return `settled-${commandTypes}-${timestamp}`;
157
+ }
158
+ getActiveHandlers() {
159
+ return Array.from(this.settledHandlers.keys());
160
+ }
161
+ }
162
+ //# sourceMappingURL=settled-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-tracker.js","sourceRoot":"","sources":["../../../src/server/settled-tracker.ts"],"names":[],"mappings":"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"}