dino-spec 17.4.2 → 17.5.0
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/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +116 -3
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +363 -3
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +10 -1
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +13 -1
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +2 -47
- package/dist/rules/index.js.map +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +159 -38
- package/dist/skills/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Agent Executor - v17.5.0 (MAC-12)
|
|
3
|
+
*
|
|
4
|
+
* Executes multiple agents in parallel with:
|
|
5
|
+
* - Concurrency control (max simultaneous agents)
|
|
6
|
+
* - Timeout handling (per-agent and global)
|
|
7
|
+
* - Progress tracking and status updates
|
|
8
|
+
* - Result aggregation with partial success support
|
|
9
|
+
* - Integration with blackboard and message bus
|
|
10
|
+
*/
|
|
11
|
+
import { EventEmitter } from 'node:events';
|
|
12
|
+
import { broadcastTaskComplete, cleanupOrchestratorContext, completeParallelExecution, createOrchestratorContext, getCoordinationStats, prepareParallelExecution, setCoordinationState, } from './orchestrator.js';
|
|
13
|
+
/**
|
|
14
|
+
* Default configuration
|
|
15
|
+
*/
|
|
16
|
+
export const DEFAULT_EXECUTOR_CONFIG = {
|
|
17
|
+
maxConcurrency: 3,
|
|
18
|
+
agentTimeoutMs: 60000,
|
|
19
|
+
globalTimeoutMs: 300000,
|
|
20
|
+
conflictStrategy: 'fail',
|
|
21
|
+
continueOnFailure: true,
|
|
22
|
+
progressIntervalMs: 5000,
|
|
23
|
+
};
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// ParallelExecutor Class
|
|
26
|
+
// =============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Executes multiple agents in parallel with coordination
|
|
29
|
+
*/
|
|
30
|
+
export class ParallelExecutor extends EventEmitter {
|
|
31
|
+
config;
|
|
32
|
+
context;
|
|
33
|
+
agents = new Map();
|
|
34
|
+
startTime = 0;
|
|
35
|
+
progressTimer;
|
|
36
|
+
aborted = false;
|
|
37
|
+
projectDir;
|
|
38
|
+
constructor(config = {}, projectDir = process.cwd()) {
|
|
39
|
+
super();
|
|
40
|
+
this.config = { ...DEFAULT_EXECUTOR_CONFIG, ...config };
|
|
41
|
+
this.projectDir = projectDir;
|
|
42
|
+
this.context = createOrchestratorContext('parallel-executor');
|
|
43
|
+
}
|
|
44
|
+
// EventEmitter type overrides
|
|
45
|
+
on(event, listener) {
|
|
46
|
+
return super.on(event, listener);
|
|
47
|
+
}
|
|
48
|
+
emit(event, ...args) {
|
|
49
|
+
return super.emit(event, ...args);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Execute parallel agents for a parent task
|
|
53
|
+
*/
|
|
54
|
+
async execute(parentTaskId, agentExecutor) {
|
|
55
|
+
this.startTime = Date.now();
|
|
56
|
+
this.aborted = false;
|
|
57
|
+
this.agents.clear();
|
|
58
|
+
try {
|
|
59
|
+
// Prepare execution plan
|
|
60
|
+
const { plan, spawnContexts } = await prepareParallelExecution({
|
|
61
|
+
parentTaskId,
|
|
62
|
+
subtaskIds: [],
|
|
63
|
+
conflictStrategy: this.config.conflictStrategy,
|
|
64
|
+
maxConcurrency: this.config.maxConcurrency,
|
|
65
|
+
timeoutMs: this.config.globalTimeoutMs,
|
|
66
|
+
}, this.projectDir);
|
|
67
|
+
// Initialize agent tracking
|
|
68
|
+
this.initializeAgentTracking(plan);
|
|
69
|
+
// Set up progress updates
|
|
70
|
+
this.startProgressUpdates();
|
|
71
|
+
// Set up global timeout
|
|
72
|
+
const globalTimeout = this.setupGlobalTimeout();
|
|
73
|
+
try {
|
|
74
|
+
// Execute waves sequentially, agents within wave in parallel
|
|
75
|
+
const allResults = [];
|
|
76
|
+
for (const wave of plan.waves) {
|
|
77
|
+
if (this.aborted)
|
|
78
|
+
break;
|
|
79
|
+
this.emit('wave:start', wave.waveNumber, wave.tasks.map((t) => t.taskId));
|
|
80
|
+
const waveResults = await this.executeWave(wave.tasks, spawnContexts, agentExecutor);
|
|
81
|
+
allResults.push(...waveResults);
|
|
82
|
+
// Check for failures if not continuing
|
|
83
|
+
if (!this.config.continueOnFailure) {
|
|
84
|
+
const failed = waveResults.some((r) => r.status !== 'completed');
|
|
85
|
+
if (failed) {
|
|
86
|
+
this.aborted = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
this.emit('wave:complete', wave.waveNumber);
|
|
90
|
+
}
|
|
91
|
+
// Complete execution and synthesize results
|
|
92
|
+
const result = await completeParallelExecution({
|
|
93
|
+
parentTaskId,
|
|
94
|
+
subtaskIds: allResults.map((r) => r.taskId),
|
|
95
|
+
conflictStrategy: this.config.conflictStrategy,
|
|
96
|
+
}, allResults, this.projectDir);
|
|
97
|
+
this.emit('execution:complete', result);
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
clearTimeout(globalTimeout);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.stopProgressUpdates();
|
|
106
|
+
cleanupOrchestratorContext(this.context);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Execute a single wave of parallel agents
|
|
111
|
+
*/
|
|
112
|
+
async executeWave(tasks, spawnContexts, agentExecutor) {
|
|
113
|
+
const results = [];
|
|
114
|
+
const taskQueue = [...tasks];
|
|
115
|
+
const runningPromises = new Map();
|
|
116
|
+
while ((taskQueue.length > 0 || runningPromises.size > 0) && !this.aborted) {
|
|
117
|
+
// Fill up to max concurrency
|
|
118
|
+
while (taskQueue.length > 0 && runningPromises.size < this.config.maxConcurrency) {
|
|
119
|
+
const task = taskQueue.shift();
|
|
120
|
+
const context = spawnContexts.get(task.taskId);
|
|
121
|
+
if (!context) {
|
|
122
|
+
results.push(this.createFailedResult(task.taskId, 'No spawn context found'));
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const promise = this.executeAgent(task.taskId, context, agentExecutor);
|
|
126
|
+
runningPromises.set(task.taskId, promise);
|
|
127
|
+
}
|
|
128
|
+
// Wait for any agent to complete
|
|
129
|
+
if (runningPromises.size > 0) {
|
|
130
|
+
const completedResult = await Promise.race(runningPromises.values());
|
|
131
|
+
runningPromises.delete(completedResult.taskId);
|
|
132
|
+
results.push(completedResult);
|
|
133
|
+
// Broadcast completion
|
|
134
|
+
await broadcastTaskComplete(this.context, completedResult.taskId, completedResult);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Handle remaining if aborted
|
|
138
|
+
if (this.aborted && taskQueue.length > 0) {
|
|
139
|
+
for (const task of taskQueue) {
|
|
140
|
+
results.push(this.createCancelledResult(task.taskId));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Execute a single agent with timeout
|
|
147
|
+
*/
|
|
148
|
+
async executeAgent(taskId, context, agentExecutor) {
|
|
149
|
+
const tracked = this.agents.get(taskId);
|
|
150
|
+
if (tracked) {
|
|
151
|
+
tracked.status = 'running';
|
|
152
|
+
tracked.startedAt = new Date().toISOString();
|
|
153
|
+
}
|
|
154
|
+
this.emit('agent:start', taskId);
|
|
155
|
+
setCoordinationState(this.context, `agent:${taskId}:status`, 'running');
|
|
156
|
+
const startTime = Date.now();
|
|
157
|
+
try {
|
|
158
|
+
// Execute with timeout
|
|
159
|
+
const result = await this.withTimeout(agentExecutor(context, this.config.agentTimeoutMs), this.config.agentTimeoutMs, taskId);
|
|
160
|
+
// Update tracking
|
|
161
|
+
if (tracked) {
|
|
162
|
+
tracked.status = 'completed';
|
|
163
|
+
tracked.completedAt = new Date().toISOString();
|
|
164
|
+
tracked.progress = 100;
|
|
165
|
+
tracked.result = result;
|
|
166
|
+
}
|
|
167
|
+
this.emit('agent:complete', taskId, result);
|
|
168
|
+
setCoordinationState(this.context, `agent:${taskId}:status`, 'completed');
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
const isTimeout = error instanceof TimeoutError;
|
|
173
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
174
|
+
// Update tracking
|
|
175
|
+
if (tracked) {
|
|
176
|
+
tracked.status = isTimeout ? 'timeout' : 'failed';
|
|
177
|
+
tracked.completedAt = new Date().toISOString();
|
|
178
|
+
tracked.error = errorMessage;
|
|
179
|
+
}
|
|
180
|
+
this.emit('agent:error', taskId, error instanceof Error ? error : new Error(errorMessage));
|
|
181
|
+
setCoordinationState(this.context, `agent:${taskId}:status`, tracked?.status || 'failed');
|
|
182
|
+
return {
|
|
183
|
+
taskId,
|
|
184
|
+
agentRole: context.role,
|
|
185
|
+
status: isTimeout ? 'timeout' : 'failed',
|
|
186
|
+
filesModified: [],
|
|
187
|
+
error: errorMessage,
|
|
188
|
+
tokensUsed: 0,
|
|
189
|
+
executionTimeMs: Date.now() - startTime,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Initialize agent tracking from plan
|
|
195
|
+
*/
|
|
196
|
+
initializeAgentTracking(plan) {
|
|
197
|
+
for (const wave of plan.waves) {
|
|
198
|
+
for (const task of wave.tasks) {
|
|
199
|
+
this.agents.set(task.taskId, {
|
|
200
|
+
taskId: task.taskId,
|
|
201
|
+
status: 'pending',
|
|
202
|
+
progress: 0,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Start periodic progress updates
|
|
209
|
+
*/
|
|
210
|
+
startProgressUpdates() {
|
|
211
|
+
this.progressTimer = setInterval(() => {
|
|
212
|
+
const progress = this.getProgress();
|
|
213
|
+
this.emit('progress', progress);
|
|
214
|
+
}, this.config.progressIntervalMs);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Stop progress updates
|
|
218
|
+
*/
|
|
219
|
+
stopProgressUpdates() {
|
|
220
|
+
if (this.progressTimer) {
|
|
221
|
+
clearInterval(this.progressTimer);
|
|
222
|
+
this.progressTimer = undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Set up global timeout
|
|
227
|
+
*/
|
|
228
|
+
setupGlobalTimeout() {
|
|
229
|
+
return setTimeout(() => {
|
|
230
|
+
this.aborted = true;
|
|
231
|
+
// Mark all pending/running agents as cancelled
|
|
232
|
+
for (const [_taskId, agent] of this.agents) {
|
|
233
|
+
if (agent.status === 'pending' || agent.status === 'running') {
|
|
234
|
+
agent.status = 'cancelled';
|
|
235
|
+
agent.error = 'Global timeout exceeded';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}, this.config.globalTimeoutMs);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Wrap a promise with timeout
|
|
242
|
+
*/
|
|
243
|
+
async withTimeout(promise, timeoutMs, taskId) {
|
|
244
|
+
return new Promise((resolve, reject) => {
|
|
245
|
+
const timer = setTimeout(() => {
|
|
246
|
+
reject(new TimeoutError(`Agent ${taskId} timed out after ${timeoutMs}ms`));
|
|
247
|
+
}, timeoutMs);
|
|
248
|
+
promise
|
|
249
|
+
.then((result) => {
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
resolve(result);
|
|
252
|
+
})
|
|
253
|
+
.catch((error) => {
|
|
254
|
+
clearTimeout(timer);
|
|
255
|
+
reject(error);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Create a failed result for missing context
|
|
261
|
+
*/
|
|
262
|
+
createFailedResult(taskId, error) {
|
|
263
|
+
const tracked = this.agents.get(taskId);
|
|
264
|
+
if (tracked) {
|
|
265
|
+
tracked.status = 'failed';
|
|
266
|
+
tracked.error = error;
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
taskId,
|
|
270
|
+
agentRole: 'implementer',
|
|
271
|
+
status: 'failed',
|
|
272
|
+
filesModified: [],
|
|
273
|
+
error,
|
|
274
|
+
tokensUsed: 0,
|
|
275
|
+
executionTimeMs: 0,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create a cancelled result
|
|
280
|
+
*/
|
|
281
|
+
createCancelledResult(taskId) {
|
|
282
|
+
const tracked = this.agents.get(taskId);
|
|
283
|
+
if (tracked) {
|
|
284
|
+
tracked.status = 'cancelled';
|
|
285
|
+
tracked.error = 'Execution cancelled';
|
|
286
|
+
}
|
|
287
|
+
return {
|
|
288
|
+
taskId,
|
|
289
|
+
agentRole: 'implementer',
|
|
290
|
+
status: 'failed',
|
|
291
|
+
filesModified: [],
|
|
292
|
+
error: 'Execution cancelled',
|
|
293
|
+
tokensUsed: 0,
|
|
294
|
+
executionTimeMs: 0,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get current execution progress
|
|
299
|
+
*/
|
|
300
|
+
getProgress() {
|
|
301
|
+
const agents = Array.from(this.agents.values());
|
|
302
|
+
const pending = agents.filter((a) => a.status === 'pending').length;
|
|
303
|
+
const running = agents.filter((a) => a.status === 'running').length;
|
|
304
|
+
const completed = agents.filter((a) => a.status === 'completed').length;
|
|
305
|
+
const failed = agents.filter((a) => a.status === 'failed' || a.status === 'timeout' || a.status === 'cancelled').length;
|
|
306
|
+
const totalAgents = agents.length;
|
|
307
|
+
const overallProgress = totalAgents > 0 ? Math.round(((completed + failed) / totalAgents) * 100) : 0;
|
|
308
|
+
const elapsedMs = Date.now() - this.startTime;
|
|
309
|
+
// Estimate remaining time based on average completion time
|
|
310
|
+
let estimatedRemainingMs;
|
|
311
|
+
const completedAgents = agents.filter((a) => a.completedAt && a.startedAt);
|
|
312
|
+
if (completedAgents.length > 0 && running + pending > 0) {
|
|
313
|
+
const totalTime = completedAgents.reduce((sum, a) => {
|
|
314
|
+
const start = new Date(a.startedAt).getTime();
|
|
315
|
+
const end = new Date(a.completedAt).getTime();
|
|
316
|
+
return sum + (end - start);
|
|
317
|
+
}, 0);
|
|
318
|
+
const avgTime = totalTime / completedAgents.length;
|
|
319
|
+
estimatedRemainingMs = Math.round(avgTime * (running + pending));
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
totalAgents,
|
|
323
|
+
pending,
|
|
324
|
+
running,
|
|
325
|
+
completed,
|
|
326
|
+
failed,
|
|
327
|
+
overallProgress,
|
|
328
|
+
elapsedMs,
|
|
329
|
+
estimatedRemainingMs,
|
|
330
|
+
agents,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Abort the current execution
|
|
335
|
+
*/
|
|
336
|
+
abort() {
|
|
337
|
+
this.aborted = true;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Check if execution is aborted
|
|
341
|
+
*/
|
|
342
|
+
isAborted() {
|
|
343
|
+
return this.aborted;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get coordination statistics
|
|
347
|
+
*/
|
|
348
|
+
getCoordinationStats() {
|
|
349
|
+
return getCoordinationStats(this.context);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// =============================================================================
|
|
353
|
+
// Timeout Error
|
|
354
|
+
// =============================================================================
|
|
355
|
+
/**
|
|
356
|
+
* Custom timeout error
|
|
357
|
+
*/
|
|
358
|
+
export class TimeoutError extends Error {
|
|
359
|
+
constructor(message) {
|
|
360
|
+
super(message);
|
|
361
|
+
this.name = 'TimeoutError';
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// =============================================================================
|
|
365
|
+
// Helper Functions
|
|
366
|
+
// =============================================================================
|
|
367
|
+
/**
|
|
368
|
+
* Create a parallel executor with default config
|
|
369
|
+
*/
|
|
370
|
+
export function createParallelExecutor(config = {}, projectDir = process.cwd()) {
|
|
371
|
+
return new ParallelExecutor(config, projectDir);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Execute parallel agents with simplified API
|
|
375
|
+
*/
|
|
376
|
+
export async function executeParallel(parentTaskId, agentExecutor, config = {}, projectDir = process.cwd()) {
|
|
377
|
+
const executor = createParallelExecutor(config, projectDir);
|
|
378
|
+
return executor.execute(parentTaskId, agentExecutor);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Format execution progress for display
|
|
382
|
+
*/
|
|
383
|
+
export function formatExecutionProgress(progress) {
|
|
384
|
+
const lines = [];
|
|
385
|
+
lines.push('## Parallel Execution Progress');
|
|
386
|
+
lines.push('');
|
|
387
|
+
lines.push(`**Overall:** ${progress.overallProgress}%`);
|
|
388
|
+
lines.push(`**Elapsed:** ${Math.round(progress.elapsedMs / 1000)}s`);
|
|
389
|
+
if (progress.estimatedRemainingMs !== undefined) {
|
|
390
|
+
lines.push(`**Estimated Remaining:** ${Math.round(progress.estimatedRemainingMs / 1000)}s`);
|
|
391
|
+
}
|
|
392
|
+
lines.push('');
|
|
393
|
+
lines.push('### Agent Status');
|
|
394
|
+
lines.push(`- Pending: ${progress.pending}`);
|
|
395
|
+
lines.push(`- Running: ${progress.running}`);
|
|
396
|
+
lines.push(`- Completed: ${progress.completed}`);
|
|
397
|
+
lines.push(`- Failed: ${progress.failed}`);
|
|
398
|
+
lines.push('');
|
|
399
|
+
if (progress.running > 0) {
|
|
400
|
+
lines.push('### Running Agents');
|
|
401
|
+
for (const agent of progress.agents.filter((a) => a.status === 'running')) {
|
|
402
|
+
lines.push(`- **${agent.taskId}**: Running since ${agent.startedAt}`);
|
|
403
|
+
}
|
|
404
|
+
lines.push('');
|
|
405
|
+
}
|
|
406
|
+
if (progress.failed > 0) {
|
|
407
|
+
lines.push('### Failed Agents');
|
|
408
|
+
for (const agent of progress.agents.filter((a) => a.status === 'failed' || a.status === 'timeout' || a.status === 'cancelled')) {
|
|
409
|
+
lines.push(`- **${agent.taskId}**: ${agent.status} - ${agent.error || 'Unknown error'}`);
|
|
410
|
+
}
|
|
411
|
+
lines.push('');
|
|
412
|
+
}
|
|
413
|
+
return lines.join('\n');
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Format parallel execution result for display
|
|
417
|
+
*/
|
|
418
|
+
export function formatParallelResult(result) {
|
|
419
|
+
const lines = [];
|
|
420
|
+
lines.push('## Parallel Execution Result');
|
|
421
|
+
lines.push('');
|
|
422
|
+
lines.push(`**Status:** ${result.success ? '✅ Success' : '❌ Partial/Failed'}`);
|
|
423
|
+
lines.push(`**Completed:** ${result.completedTasks.length}`);
|
|
424
|
+
lines.push(`**Failed:** ${result.failedTasks.length}`);
|
|
425
|
+
lines.push(`**Total Tokens:** ${result.totalTokensUsed}`);
|
|
426
|
+
lines.push(`**Execution Time:** ${Math.round(result.executionTimeMs / 1000)}s`);
|
|
427
|
+
lines.push('');
|
|
428
|
+
if (result.completedTasks.length > 0) {
|
|
429
|
+
lines.push('### Completed Tasks');
|
|
430
|
+
for (const taskId of result.completedTasks) {
|
|
431
|
+
lines.push(`- ✅ ${taskId}`);
|
|
432
|
+
}
|
|
433
|
+
lines.push('');
|
|
434
|
+
}
|
|
435
|
+
if (result.failedTasks.length > 0) {
|
|
436
|
+
lines.push('### Failed Tasks');
|
|
437
|
+
for (const taskId of result.failedTasks) {
|
|
438
|
+
lines.push(`- ❌ ${taskId}`);
|
|
439
|
+
}
|
|
440
|
+
lines.push('');
|
|
441
|
+
}
|
|
442
|
+
if (result.conflicts.hasConflicts) {
|
|
443
|
+
lines.push('### Conflicts Detected');
|
|
444
|
+
for (const conflict of result.conflicts.conflicts) {
|
|
445
|
+
lines.push(`- **${conflict.type}**: ${conflict.description}`);
|
|
446
|
+
}
|
|
447
|
+
lines.push('');
|
|
448
|
+
}
|
|
449
|
+
if (result.synthesizedCheckpointId) {
|
|
450
|
+
lines.push(`**Synthesized Checkpoint:** ${result.synthesizedCheckpointId}`);
|
|
451
|
+
}
|
|
452
|
+
return lines.join('\n');
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Create a mock agent executor for testing
|
|
456
|
+
*/
|
|
457
|
+
export function createMockAgentExecutor(results, delayMs = 100) {
|
|
458
|
+
return async (context, _timeoutMs) => {
|
|
459
|
+
// Simulate execution time
|
|
460
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
461
|
+
const mockResult = results.get(context.taskId);
|
|
462
|
+
return {
|
|
463
|
+
taskId: context.taskId,
|
|
464
|
+
agentRole: context.role,
|
|
465
|
+
status: mockResult?.status || 'completed',
|
|
466
|
+
checkpointId: mockResult?.checkpointId,
|
|
467
|
+
filesModified: mockResult?.filesModified || [],
|
|
468
|
+
error: mockResult?.error,
|
|
469
|
+
tokensUsed: mockResult?.tokensUsed || 1000,
|
|
470
|
+
executionTimeMs: mockResult?.executionTimeMs || delayMs,
|
|
471
|
+
};
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=parallel-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-executor.js","sourceRoot":"","sources":["../../../src/core/agents/parallel-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Detector - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Detects patterns from correction clusters for automation.
|
|
5
|
+
* Works with correction-tracker to identify learnable patterns.
|
|
6
|
+
*
|
|
7
|
+
* Pattern types:
|
|
8
|
+
* - Style patterns: Code formatting preferences
|
|
9
|
+
* - Naming patterns: Variable/function naming conventions
|
|
10
|
+
* - Structure patterns: Code organization preferences
|
|
11
|
+
* - Tool patterns: Library/tool preferences
|
|
12
|
+
*
|
|
13
|
+
* @module pattern-detector
|
|
14
|
+
*/
|
|
15
|
+
import type { CorrectionCluster } from './correction-tracker.js';
|
|
16
|
+
/**
|
|
17
|
+
* Type of detected pattern
|
|
18
|
+
*/
|
|
19
|
+
export type PatternType = 'style' | 'naming' | 'structure' | 'tool' | 'workflow' | 'preference';
|
|
20
|
+
/**
|
|
21
|
+
* Confidence level for pattern detection
|
|
22
|
+
*/
|
|
23
|
+
export type PatternConfidence = 'high' | 'medium' | 'low';
|
|
24
|
+
/**
|
|
25
|
+
* A detected pattern ready for learning
|
|
26
|
+
*/
|
|
27
|
+
export interface DetectedPattern {
|
|
28
|
+
id: string;
|
|
29
|
+
type: PatternType;
|
|
30
|
+
/** What triggers this pattern */
|
|
31
|
+
trigger: string;
|
|
32
|
+
/** The preferred approach */
|
|
33
|
+
preference: string;
|
|
34
|
+
/** Confidence based on cluster strength */
|
|
35
|
+
confidence: PatternConfidence;
|
|
36
|
+
/** Number of corrections that formed this pattern */
|
|
37
|
+
occurrences: number;
|
|
38
|
+
/** Example corrections that led to this pattern */
|
|
39
|
+
examples: Array<{
|
|
40
|
+
original: string;
|
|
41
|
+
corrected: string;
|
|
42
|
+
}>;
|
|
43
|
+
/** Keywords for matching */
|
|
44
|
+
keywords: string[];
|
|
45
|
+
/** Source cluster ID */
|
|
46
|
+
sourceClusterId: string;
|
|
47
|
+
/** When pattern was detected */
|
|
48
|
+
detectedAt: Date;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pattern suggestion for session context
|
|
52
|
+
*/
|
|
53
|
+
export interface PatternSuggestion {
|
|
54
|
+
pattern: DetectedPattern;
|
|
55
|
+
relevance: number;
|
|
56
|
+
reason: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Configuration for pattern detection
|
|
60
|
+
*/
|
|
61
|
+
export interface PatternDetectorConfig {
|
|
62
|
+
/** Minimum cluster size for pattern detection (default: 3) */
|
|
63
|
+
minClusterSize: number;
|
|
64
|
+
/** Minimum similarity within cluster (default: 0.6) */
|
|
65
|
+
minClusterSimilarity: number;
|
|
66
|
+
/** Maximum patterns to suggest per session (default: 5) */
|
|
67
|
+
maxSuggestions: number;
|
|
68
|
+
/** Confidence boost from file context match (default: 0.1) */
|
|
69
|
+
fileContextBoost: number;
|
|
70
|
+
}
|
|
71
|
+
export declare const DEFAULT_DETECTOR_CONFIG: PatternDetectorConfig;
|
|
72
|
+
/**
|
|
73
|
+
* Detects patterns from correction clusters
|
|
74
|
+
*/
|
|
75
|
+
export declare class PatternDetector {
|
|
76
|
+
private detectedPatterns;
|
|
77
|
+
private config;
|
|
78
|
+
constructor(config?: Partial<PatternDetectorConfig>);
|
|
79
|
+
/**
|
|
80
|
+
* Detect patterns from a cluster
|
|
81
|
+
*/
|
|
82
|
+
detectFromCluster(cluster: CorrectionCluster): DetectedPattern | null;
|
|
83
|
+
/**
|
|
84
|
+
* Detect patterns from multiple clusters
|
|
85
|
+
*/
|
|
86
|
+
detectFromClusters(clusters: CorrectionCluster[]): DetectedPattern[];
|
|
87
|
+
/**
|
|
88
|
+
* Get suggestions for current session context
|
|
89
|
+
*/
|
|
90
|
+
getSuggestions(context: {
|
|
91
|
+
focusArea?: string;
|
|
92
|
+
recentFiles?: string[];
|
|
93
|
+
currentTask?: string;
|
|
94
|
+
}): PatternSuggestion[];
|
|
95
|
+
/**
|
|
96
|
+
* Get all detected patterns
|
|
97
|
+
*/
|
|
98
|
+
getPatterns(): DetectedPattern[];
|
|
99
|
+
/**
|
|
100
|
+
* Get pattern by ID
|
|
101
|
+
*/
|
|
102
|
+
getPattern(id: string): DetectedPattern | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Remove pattern
|
|
105
|
+
*/
|
|
106
|
+
removePattern(id: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Clear all patterns
|
|
109
|
+
*/
|
|
110
|
+
clear(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Export state for persistence
|
|
113
|
+
*/
|
|
114
|
+
export(): DetectedPattern[];
|
|
115
|
+
/**
|
|
116
|
+
* Import state from persistence
|
|
117
|
+
*/
|
|
118
|
+
import(patterns: DetectedPattern[]): void;
|
|
119
|
+
private detectType;
|
|
120
|
+
private calculateConfidence;
|
|
121
|
+
private extractTrigger;
|
|
122
|
+
private extractPreference;
|
|
123
|
+
private extractKeywords;
|
|
124
|
+
private calculateRelevance;
|
|
125
|
+
private generateReason;
|
|
126
|
+
}
|
|
127
|
+
/** Global pattern detector */
|
|
128
|
+
export declare const patternDetector: PatternDetector;
|
|
129
|
+
/**
|
|
130
|
+
* Detect patterns from clusters using global detector
|
|
131
|
+
*/
|
|
132
|
+
export declare function detectPatterns(clusters: CorrectionCluster[]): DetectedPattern[];
|
|
133
|
+
/**
|
|
134
|
+
* Get pattern suggestions for session context
|
|
135
|
+
*/
|
|
136
|
+
export declare function getPatternSuggestions(context: {
|
|
137
|
+
focusArea?: string;
|
|
138
|
+
recentFiles?: string[];
|
|
139
|
+
currentTask?: string;
|
|
140
|
+
}): PatternSuggestion[];
|
|
141
|
+
/**
|
|
142
|
+
* Format pattern for display
|
|
143
|
+
*/
|
|
144
|
+
export declare function formatDetectedPattern(pattern: DetectedPattern): string;
|
|
145
|
+
/**
|
|
146
|
+
* Format suggestion for session injection
|
|
147
|
+
*/
|
|
148
|
+
export declare function formatSuggestionForSession(suggestion: PatternSuggestion): string;
|
|
149
|
+
/**
|
|
150
|
+
* Format multiple suggestions for session context
|
|
151
|
+
*/
|
|
152
|
+
export declare function formatSuggestionsForSession(suggestions: PatternSuggestion[]): string;
|
|
153
|
+
/**
|
|
154
|
+
* Calculate confidence adjustment from patterns
|
|
155
|
+
*/
|
|
156
|
+
export declare function calculateConfidenceAdjustment(patterns: DetectedPattern[]): number;
|
|
157
|
+
//# sourceMappingURL=pattern-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../../src/core/agents/pattern-detector.ts"],"names":[],"mappings":"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"}
|