@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.
- package/CHANGELOG.md +9 -0
- package/dist/src/dsl/index.d.ts +34 -3
- package/dist/src/dsl/index.d.ts.map +1 -1
- package/dist/src/dsl/index.js +304 -14
- package/dist/src/dsl/index.js.map +1 -1
- package/dist/src/dsl-exports.d.ts +3 -1
- package/dist/src/dsl-exports.d.ts.map +1 -1
- package/dist/src/dsl-exports.js +2 -1
- package/dist/src/dsl-exports.js.map +1 -1
- package/dist/src/server/command-metadata-service.d.ts +17 -0
- package/dist/src/server/command-metadata-service.d.ts.map +1 -0
- package/dist/src/server/command-metadata-service.js +35 -0
- package/dist/src/server/command-metadata-service.js.map +1 -0
- package/dist/src/server/command-registry.d.ts +5 -16
- package/dist/src/server/command-registry.d.ts.map +1 -1
- package/dist/src/server/command-registry.js +8 -18
- package/dist/src/server/command-registry.js.map +1 -1
- package/dist/src/server/config-loader.d.ts +2 -1
- package/dist/src/server/config-loader.d.ts.map +1 -1
- package/dist/src/server/config-loader.js +9 -1
- package/dist/src/server/config-loader.js.map +1 -1
- package/dist/src/server/event-processor.d.ts +5 -3
- package/dist/src/server/event-processor.d.ts.map +1 -1
- package/dist/src/server/event-processor.js +10 -1
- package/dist/src/server/event-processor.js.map +1 -1
- package/dist/src/server/http-routes.d.ts +3 -0
- package/dist/src/server/http-routes.d.ts.map +1 -1
- package/dist/src/server/http-routes.js +29 -8
- package/dist/src/server/http-routes.js.map +1 -1
- package/dist/src/server/server.d.ts +11 -1
- package/dist/src/server/server.d.ts.map +1 -1
- package/dist/src/server/server.js +19 -1
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/settled-tracker.d.ts +19 -0
- package/dist/src/server/settled-tracker.d.ts.map +1 -0
- package/dist/src/server/settled-tracker.js +162 -0
- package/dist/src/server/settled-tracker.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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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"}
|