dino-spec 17.4.3 → 17.6.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.
Files changed (277) hide show
  1. package/README.md +16 -1
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +10 -0
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  8. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  12. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  16. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  20. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  21. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  22. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  26. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  30. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  34. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  35. package/dist/core/agents/ambiguity-resolver.d.ts +14 -1
  36. package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -1
  37. package/dist/core/agents/ambiguity-resolver.js +24 -2
  38. package/dist/core/agents/ambiguity-resolver.js.map +1 -1
  39. package/dist/core/agents/blackboard.d.ts +22 -3
  40. package/dist/core/agents/blackboard.d.ts.map +1 -1
  41. package/dist/core/agents/blackboard.js +52 -2
  42. package/dist/core/agents/blackboard.js.map +1 -1
  43. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  44. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  45. package/dist/core/agents/circuit-breaker.js +175 -1
  46. package/dist/core/agents/circuit-breaker.js.map +1 -1
  47. package/dist/core/agents/clarification-phase.d.ts +128 -0
  48. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  49. package/dist/core/agents/clarification-phase.js +375 -0
  50. package/dist/core/agents/clarification-phase.js.map +1 -0
  51. package/dist/core/agents/confidence-gate.d.ts +133 -4
  52. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  53. package/dist/core/agents/confidence-gate.js +376 -9
  54. package/dist/core/agents/confidence-gate.js.map +1 -1
  55. package/dist/core/agents/correction-tracker.d.ts +197 -0
  56. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  57. package/dist/core/agents/correction-tracker.js +366 -0
  58. package/dist/core/agents/correction-tracker.js.map +1 -0
  59. package/dist/core/agents/dependency-graph.d.ts +193 -0
  60. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  61. package/dist/core/agents/dependency-graph.js +462 -0
  62. package/dist/core/agents/dependency-graph.js.map +1 -0
  63. package/dist/core/agents/gap-detector.d.ts +277 -0
  64. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  65. package/dist/core/agents/gap-detector.js +540 -0
  66. package/dist/core/agents/gap-detector.js.map +1 -0
  67. package/dist/core/agents/index.d.ts +14 -1
  68. package/dist/core/agents/index.d.ts.map +1 -1
  69. package/dist/core/agents/index.js +26 -1
  70. package/dist/core/agents/index.js.map +1 -1
  71. package/dist/core/agents/message-protocol.d.ts +13 -2
  72. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  73. package/dist/core/agents/message-protocol.js +20 -1
  74. package/dist/core/agents/message-protocol.js.map +1 -1
  75. package/dist/core/agents/parallel-executor.d.ts +182 -0
  76. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  77. package/dist/core/agents/parallel-executor.js +474 -0
  78. package/dist/core/agents/parallel-executor.js.map +1 -0
  79. package/dist/core/agents/pattern-detector.d.ts +157 -0
  80. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  81. package/dist/core/agents/pattern-detector.js +370 -0
  82. package/dist/core/agents/pattern-detector.js.map +1 -0
  83. package/dist/core/agents/registry-client.d.ts +6 -0
  84. package/dist/core/agents/registry-client.d.ts.map +1 -1
  85. package/dist/core/agents/registry-client.js +3 -0
  86. package/dist/core/agents/registry-client.js.map +1 -1
  87. package/dist/core/agents/research-phase.d.ts +114 -0
  88. package/dist/core/agents/research-phase.d.ts.map +1 -0
  89. package/dist/core/agents/research-phase.js +355 -0
  90. package/dist/core/agents/research-phase.js.map +1 -0
  91. package/dist/core/agents/research-validator.d.ts +13 -2
  92. package/dist/core/agents/research-validator.d.ts.map +1 -1
  93. package/dist/core/agents/research-validator.js +63 -31
  94. package/dist/core/agents/research-validator.js.map +1 -1
  95. package/dist/core/agents/skill-creator.d.ts +174 -0
  96. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  97. package/dist/core/agents/skill-creator.js +570 -0
  98. package/dist/core/agents/skill-creator.js.map +1 -0
  99. package/dist/core/agents/state-persistence.d.ts +184 -0
  100. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  101. package/dist/core/agents/state-persistence.js +394 -0
  102. package/dist/core/agents/state-persistence.js.map +1 -0
  103. package/dist/core/agents/validation-cache.d.ts +122 -0
  104. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  105. package/dist/core/agents/validation-cache.js +280 -0
  106. package/dist/core/agents/validation-cache.js.map +1 -0
  107. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  108. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  109. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  110. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  111. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  112. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  113. package/dist/core/agents/validators/base-validator.js +192 -0
  114. package/dist/core/agents/validators/base-validator.js.map +1 -0
  115. package/dist/core/agents/validators/index.d.ts +7 -0
  116. package/dist/core/agents/validators/index.d.ts.map +1 -0
  117. package/dist/core/agents/validators/index.js +7 -0
  118. package/dist/core/agents/validators/index.js.map +1 -0
  119. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  120. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  121. package/dist/core/agents/validators/npm-validator.js +211 -0
  122. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  123. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  124. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  125. package/dist/core/agents/validators/pip-validator.js +191 -0
  126. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  127. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  128. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  129. package/dist/core/agents/validators/validator-registry.js +321 -0
  130. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  131. package/dist/core/context/auto-injection-engine.d.ts +7 -1
  132. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  133. package/dist/core/context/auto-injection-engine.js +46 -1
  134. package/dist/core/context/auto-injection-engine.js.map +1 -1
  135. package/dist/core/context-repl/types.d.ts +4 -4
  136. package/dist/core/memory/index.d.ts +1 -0
  137. package/dist/core/memory/index.d.ts.map +1 -1
  138. package/dist/core/memory/index.js +2 -0
  139. package/dist/core/memory/index.js.map +1 -1
  140. package/dist/core/memory/learning-store.d.ts +222 -0
  141. package/dist/core/memory/learning-store.d.ts.map +1 -0
  142. package/dist/core/memory/learning-store.js +477 -0
  143. package/dist/core/memory/learning-store.js.map +1 -0
  144. package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts +7 -0
  145. package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts.map +1 -0
  146. package/dist/core/ralph/__tests__/prd-generator-session-context.test.js +143 -0
  147. package/dist/core/ralph/__tests__/prd-generator-session-context.test.js.map +1 -0
  148. package/dist/core/ralph/index.d.ts +3 -3
  149. package/dist/core/ralph/index.d.ts.map +1 -1
  150. package/dist/core/ralph/index.js +2 -2
  151. package/dist/core/ralph/index.js.map +1 -1
  152. package/dist/core/ralph/prd-generator.d.ts +18 -3
  153. package/dist/core/ralph/prd-generator.d.ts.map +1 -1
  154. package/dist/core/ralph/prd-generator.js +33 -11
  155. package/dist/core/ralph/prd-generator.js.map +1 -1
  156. package/dist/core/ralph/progress-tracker.d.ts.map +1 -1
  157. package/dist/core/ralph/progress-tracker.js +2 -1
  158. package/dist/core/ralph/progress-tracker.js.map +1 -1
  159. package/dist/core/ralph/sub-agent-spawner.d.ts +4 -2
  160. package/dist/core/ralph/sub-agent-spawner.d.ts.map +1 -1
  161. package/dist/core/ralph/sub-agent-spawner.js +48 -3
  162. package/dist/core/ralph/sub-agent-spawner.js.map +1 -1
  163. package/dist/core/ralph/task-integration.d.ts.map +1 -1
  164. package/dist/core/ralph/task-integration.js +6 -3
  165. package/dist/core/ralph/task-integration.js.map +1 -1
  166. package/dist/core/ralph/types.d.ts +62 -3
  167. package/dist/core/ralph/types.d.ts.map +1 -1
  168. package/dist/core/ralph/types.js.map +1 -1
  169. package/dist/core/recommendations/recommendation-engine.d.ts +6 -0
  170. package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -1
  171. package/dist/core/recommendations/recommendation-engine.js.map +1 -1
  172. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  173. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  174. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  175. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  176. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  177. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  178. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  179. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  180. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  181. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  182. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  183. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  184. package/dist/core/spec-analyzer/index.d.ts +22 -2
  185. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  186. package/dist/core/spec-analyzer/index.js +21 -3
  187. package/dist/core/spec-analyzer/index.js.map +1 -1
  188. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  189. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  190. package/dist/core/spec-analyzer/patterns.js +412 -0
  191. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  192. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  193. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  194. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  195. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  196. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  197. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  198. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  199. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  200. package/dist/hooks/dynamic-generator.d.ts +158 -0
  201. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  202. package/dist/hooks/dynamic-generator.js +448 -0
  203. package/dist/hooks/dynamic-generator.js.map +1 -0
  204. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  205. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  206. package/dist/hooks/hook-agent-bridge.js +489 -0
  207. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  208. package/dist/hooks/index.d.ts +3 -1
  209. package/dist/hooks/index.d.ts.map +1 -1
  210. package/dist/hooks/index.js +5 -1
  211. package/dist/hooks/index.js.map +1 -1
  212. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  213. package/dist/mcp/tool-catalog.js +47 -0
  214. package/dist/mcp/tool-catalog.js.map +1 -1
  215. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  216. package/dist/mcp/tool-tiers.js +4 -0
  217. package/dist/mcp/tool-tiers.js.map +1 -1
  218. package/dist/mcp/tools/auto-inject.d.ts +4 -0
  219. package/dist/mcp/tools/auto-inject.d.ts.map +1 -1
  220. package/dist/mcp/tools/auto-inject.js +13 -4
  221. package/dist/mcp/tools/auto-inject.js.map +1 -1
  222. package/dist/mcp/tools/chunking.d.ts +3 -0
  223. package/dist/mcp/tools/chunking.d.ts.map +1 -1
  224. package/dist/mcp/tools/chunking.js +10 -4
  225. package/dist/mcp/tools/chunking.js.map +1 -1
  226. package/dist/mcp/tools/embeddings.d.ts +4 -0
  227. package/dist/mcp/tools/embeddings.d.ts.map +1 -1
  228. package/dist/mcp/tools/embeddings.js +16 -6
  229. package/dist/mcp/tools/embeddings.js.map +1 -1
  230. package/dist/mcp/tools/index.d.ts +2 -1
  231. package/dist/mcp/tools/index.d.ts.map +1 -1
  232. package/dist/mcp/tools/index.js +15 -1
  233. package/dist/mcp/tools/index.js.map +1 -1
  234. package/dist/mcp/tools/knowledge-graph.d.ts +3 -0
  235. package/dist/mcp/tools/knowledge-graph.d.ts.map +1 -1
  236. package/dist/mcp/tools/knowledge-graph.js +19 -8
  237. package/dist/mcp/tools/knowledge-graph.js.map +1 -1
  238. package/dist/mcp/tools/lazy-context.d.ts +2 -0
  239. package/dist/mcp/tools/lazy-context.d.ts.map +1 -1
  240. package/dist/mcp/tools/lazy-context.js +10 -4
  241. package/dist/mcp/tools/lazy-context.js.map +1 -1
  242. package/dist/mcp/tools/learning-store.d.ts +30 -0
  243. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  244. package/dist/mcp/tools/learning-store.js +286 -0
  245. package/dist/mcp/tools/learning-store.js.map +1 -0
  246. package/dist/mcp/tools/memory-decay.d.ts.map +1 -1
  247. package/dist/mcp/tools/memory-decay.js +4 -2
  248. package/dist/mcp/tools/memory-decay.js.map +1 -1
  249. package/dist/mcp/tools/prefetch.d.ts +4 -1
  250. package/dist/mcp/tools/prefetch.d.ts.map +1 -1
  251. package/dist/mcp/tools/prefetch.js +18 -7
  252. package/dist/mcp/tools/prefetch.js.map +1 -1
  253. package/dist/mcp/tools/ralph.d.ts +2 -0
  254. package/dist/mcp/tools/ralph.d.ts.map +1 -1
  255. package/dist/mcp/tools/ralph.js +96 -6
  256. package/dist/mcp/tools/ralph.js.map +1 -1
  257. package/dist/mcp/tools/recommendations.d.ts +2 -0
  258. package/dist/mcp/tools/recommendations.d.ts.map +1 -1
  259. package/dist/mcp/tools/recommendations.js +13 -4
  260. package/dist/mcp/tools/recommendations.js.map +1 -1
  261. package/dist/mcp/tools/retrieval.d.ts +4 -0
  262. package/dist/mcp/tools/retrieval.d.ts.map +1 -1
  263. package/dist/mcp/tools/retrieval.js +25 -10
  264. package/dist/mcp/tools/retrieval.js.map +1 -1
  265. package/dist/mcp/tools/spec-feedback.d.ts +2 -0
  266. package/dist/mcp/tools/spec-feedback.d.ts.map +1 -1
  267. package/dist/mcp/tools/spec-feedback.js +33 -16
  268. package/dist/mcp/tools/spec-feedback.js.map +1 -1
  269. package/dist/mcp/utils/index.d.ts +1 -0
  270. package/dist/mcp/utils/index.d.ts.map +1 -1
  271. package/dist/mcp/utils/index.js +2 -0
  272. package/dist/mcp/utils/index.js.map +1 -1
  273. package/dist/mcp/utils/session-context.d.ts +108 -0
  274. package/dist/mcp/utils/session-context.d.ts.map +1 -0
  275. package/dist/mcp/utils/session-context.js +157 -0
  276. package/dist/mcp/utils/session-context.js.map +1 -0
  277. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-loop.test.js","sourceRoot":"","sources":["../../../../src/core/agents/__tests__/learning-loop.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for Parallel Agent Executor (MAC-12)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=parallel-executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-executor.test.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/__tests__/parallel-executor.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,610 @@
1
+ /**
2
+ * Tests for Parallel Agent Executor (MAC-12)
3
+ */
4
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
7
+ import { createMockAgentExecutor, createParallelExecutor, DEFAULT_EXECUTOR_CONFIG, executeParallel, formatExecutionProgress, formatParallelResult, ParallelExecutor, TimeoutError, } from '../parallel-executor.js';
8
+ // =============================================================================
9
+ // Test Fixtures
10
+ // =============================================================================
11
+ const testDir = join(process.cwd(), '.test-parallel-executor');
12
+ const tasksDir = join(testDir, '.dino', 'tasks');
13
+ const checkpointsDir = join(testDir, '.dino', 'checkpoints');
14
+ function setupTestProject() {
15
+ mkdirSync(tasksDir, { recursive: true });
16
+ mkdirSync(checkpointsDir, { recursive: true });
17
+ // Create parent task
18
+ const parentTask = {
19
+ id: 'parent-1',
20
+ title: 'Parent Task',
21
+ description: 'Test parent task',
22
+ role: 'planner',
23
+ status: 'in_progress',
24
+ dependencies: [],
25
+ context: { files: [] },
26
+ createdAt: new Date().toISOString(),
27
+ updatedAt: new Date().toISOString(),
28
+ };
29
+ // Create child tasks
30
+ const childTasks = [
31
+ {
32
+ id: 'child-1',
33
+ title: 'Child Task 1',
34
+ description: 'First child',
35
+ role: 'implementer',
36
+ status: 'pending',
37
+ parentId: 'parent-1',
38
+ dependencies: [],
39
+ context: { files: ['src/file1.ts'] },
40
+ createdAt: new Date().toISOString(),
41
+ updatedAt: new Date().toISOString(),
42
+ },
43
+ {
44
+ id: 'child-2',
45
+ title: 'Child Task 2',
46
+ description: 'Second child',
47
+ role: 'implementer',
48
+ status: 'pending',
49
+ parentId: 'parent-1',
50
+ dependencies: [],
51
+ context: { files: ['src/file2.ts'] },
52
+ createdAt: new Date().toISOString(),
53
+ updatedAt: new Date().toISOString(),
54
+ },
55
+ {
56
+ id: 'child-3',
57
+ title: 'Child Task 3',
58
+ description: 'Third child (depends on child-1)',
59
+ role: 'implementer',
60
+ status: 'pending',
61
+ parentId: 'parent-1',
62
+ dependencies: ['child-1'],
63
+ context: { files: ['src/file3.ts'] },
64
+ createdAt: new Date().toISOString(),
65
+ updatedAt: new Date().toISOString(),
66
+ },
67
+ ];
68
+ // Write registry
69
+ const registry = {
70
+ tasks: {
71
+ 'parent-1': parentTask,
72
+ 'child-1': childTasks[0],
73
+ 'child-2': childTasks[1],
74
+ 'child-3': childTasks[2],
75
+ },
76
+ version: 1,
77
+ lastUpdated: new Date().toISOString(),
78
+ };
79
+ writeFileSync(join(tasksDir, 'registry.json'), JSON.stringify(registry, null, 2));
80
+ }
81
+ function createSuccessfulExecutor(delayMs = 50) {
82
+ return async (context, _timeoutMs) => {
83
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
84
+ return {
85
+ taskId: context.taskId,
86
+ agentRole: context.role,
87
+ status: 'completed',
88
+ checkpointId: `cp-${context.taskId}`,
89
+ filesModified: context.isolatedFiles,
90
+ tokensUsed: 1000,
91
+ executionTimeMs: delayMs,
92
+ };
93
+ };
94
+ }
95
+ function createFailingExecutor(failTaskIds, delayMs = 50) {
96
+ return async (context, _timeoutMs) => {
97
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
98
+ if (failTaskIds.includes(context.taskId)) {
99
+ return {
100
+ taskId: context.taskId,
101
+ agentRole: context.role,
102
+ status: 'failed',
103
+ filesModified: [],
104
+ error: 'Simulated failure',
105
+ tokensUsed: 500,
106
+ executionTimeMs: delayMs,
107
+ };
108
+ }
109
+ return {
110
+ taskId: context.taskId,
111
+ agentRole: context.role,
112
+ status: 'completed',
113
+ checkpointId: `cp-${context.taskId}`,
114
+ filesModified: context.isolatedFiles,
115
+ tokensUsed: 1000,
116
+ executionTimeMs: delayMs,
117
+ };
118
+ };
119
+ }
120
+ function createSlowExecutor(slowTaskIds, slowDelayMs = 5000) {
121
+ return async (context, _timeoutMs) => {
122
+ const delay = slowTaskIds.includes(context.taskId) ? slowDelayMs : 50;
123
+ await new Promise((resolve) => setTimeout(resolve, delay));
124
+ return {
125
+ taskId: context.taskId,
126
+ agentRole: context.role,
127
+ status: 'completed',
128
+ filesModified: [],
129
+ tokensUsed: 1000,
130
+ executionTimeMs: delay,
131
+ };
132
+ };
133
+ }
134
+ // =============================================================================
135
+ // ParallelExecutor Tests
136
+ // =============================================================================
137
+ describe('ParallelExecutor', () => {
138
+ beforeEach(() => {
139
+ if (existsSync(testDir)) {
140
+ rmSync(testDir, { recursive: true });
141
+ }
142
+ setupTestProject();
143
+ });
144
+ afterEach(() => {
145
+ if (existsSync(testDir)) {
146
+ rmSync(testDir, { recursive: true });
147
+ }
148
+ });
149
+ describe('configuration', () => {
150
+ it('should use default configuration', () => {
151
+ const executor = new ParallelExecutor({}, testDir);
152
+ expect(executor).toBeDefined();
153
+ });
154
+ it('should merge custom configuration', () => {
155
+ const config = {
156
+ maxConcurrency: 5,
157
+ agentTimeoutMs: 30000,
158
+ };
159
+ const executor = new ParallelExecutor(config, testDir);
160
+ expect(executor).toBeDefined();
161
+ });
162
+ it('should have sensible defaults', () => {
163
+ expect(DEFAULT_EXECUTOR_CONFIG.maxConcurrency).toBe(3);
164
+ expect(DEFAULT_EXECUTOR_CONFIG.agentTimeoutMs).toBe(60000);
165
+ expect(DEFAULT_EXECUTOR_CONFIG.globalTimeoutMs).toBe(300000);
166
+ expect(DEFAULT_EXECUTOR_CONFIG.continueOnFailure).toBe(true);
167
+ });
168
+ });
169
+ describe('execution', () => {
170
+ it('should execute parallel agents successfully', async () => {
171
+ const executor = createParallelExecutor({ maxConcurrency: 2 }, testDir);
172
+ const agentExecutor = createSuccessfulExecutor(50);
173
+ const result = await executor.execute('parent-1', agentExecutor);
174
+ expect(result.success).toBe(true);
175
+ expect(result.completedTasks.length).toBeGreaterThan(0);
176
+ expect(result.failedTasks.length).toBe(0);
177
+ });
178
+ it('should respect max concurrency', async () => {
179
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
180
+ let concurrentCount = 0;
181
+ let maxConcurrent = 0;
182
+ const trackingExecutor = async (context, _timeoutMs) => {
183
+ concurrentCount++;
184
+ maxConcurrent = Math.max(maxConcurrent, concurrentCount);
185
+ await new Promise((resolve) => setTimeout(resolve, 50));
186
+ concurrentCount--;
187
+ return {
188
+ taskId: context.taskId,
189
+ agentRole: context.role,
190
+ status: 'completed',
191
+ filesModified: [],
192
+ tokensUsed: 1000,
193
+ executionTimeMs: 50,
194
+ };
195
+ };
196
+ await executor.execute('parent-1', trackingExecutor);
197
+ expect(maxConcurrent).toBeLessThanOrEqual(1);
198
+ });
199
+ it('should handle partial failures', async () => {
200
+ const executor = createParallelExecutor({ maxConcurrency: 3, continueOnFailure: true }, testDir);
201
+ // Track calls to verify executor behavior
202
+ let callCount = 0;
203
+ const trackingFailExecutor = async (context, _timeoutMs) => {
204
+ await new Promise((resolve) => setTimeout(resolve, 50));
205
+ callCount++;
206
+ // Fail every other task to test partial failure
207
+ const isFail = callCount % 2 === 0;
208
+ return {
209
+ taskId: context.taskId,
210
+ agentRole: context.role,
211
+ status: isFail ? 'failed' : 'completed',
212
+ filesModified: [],
213
+ error: isFail ? 'Simulated failure' : undefined,
214
+ tokensUsed: 1000,
215
+ executionTimeMs: 50,
216
+ };
217
+ };
218
+ const result = await executor.execute('parent-1', trackingFailExecutor);
219
+ // If tasks were found and executed with partial failures
220
+ if (callCount >= 2) {
221
+ // We should have a mix of completed and failed
222
+ expect(result.success).toBe(false);
223
+ expect(result.completedTasks.length + result.failedTasks.length).toBe(callCount);
224
+ }
225
+ else {
226
+ // Edge case: few or no tasks found
227
+ expect(result.executionTimeMs).toBeGreaterThanOrEqual(0);
228
+ }
229
+ });
230
+ it('should stop on failure when configured', async () => {
231
+ const executor = createParallelExecutor({ maxConcurrency: 1, continueOnFailure: false }, testDir);
232
+ const agentExecutor = createFailingExecutor(['child-1']);
233
+ const result = await executor.execute('parent-1', agentExecutor);
234
+ expect(result.success).toBe(false);
235
+ expect(result.failedTasks).toContain('child-1');
236
+ });
237
+ });
238
+ describe('timeout handling', () => {
239
+ it('should timeout slow agents', async () => {
240
+ const executor = createParallelExecutor({
241
+ maxConcurrency: 2,
242
+ agentTimeoutMs: 100,
243
+ continueOnFailure: true,
244
+ }, testDir);
245
+ const agentExecutor = createSlowExecutor(['child-1'], 500);
246
+ const result = await executor.execute('parent-1', agentExecutor);
247
+ // child-1 should timeout, others may complete
248
+ const failedOrTimeout = result.failedTasks.includes('child-1');
249
+ expect(failedOrTimeout).toBe(true);
250
+ });
251
+ it('should abort all on global timeout', async () => {
252
+ const executor = createParallelExecutor({
253
+ maxConcurrency: 1,
254
+ globalTimeoutMs: 100,
255
+ agentTimeoutMs: 5000,
256
+ }, testDir);
257
+ const slowExecutor = async (context, _timeoutMs) => {
258
+ await new Promise((resolve) => setTimeout(resolve, 200));
259
+ return {
260
+ taskId: context.taskId,
261
+ agentRole: context.role,
262
+ status: 'completed',
263
+ filesModified: [],
264
+ tokensUsed: 1000,
265
+ executionTimeMs: 200,
266
+ };
267
+ };
268
+ const result = await executor.execute('parent-1', slowExecutor);
269
+ // Should have some cancelled/failed tasks due to global timeout
270
+ expect(result.success).toBe(false);
271
+ });
272
+ });
273
+ describe('events', () => {
274
+ it('should emit agent:start event', async () => {
275
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
276
+ const agentExecutor = createSuccessfulExecutor(50);
277
+ const startedTasks = [];
278
+ executor.on('agent:start', (taskId) => {
279
+ startedTasks.push(taskId);
280
+ });
281
+ await executor.execute('parent-1', agentExecutor);
282
+ expect(startedTasks.length).toBeGreaterThan(0);
283
+ });
284
+ it('should emit agent:complete event', async () => {
285
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
286
+ const agentExecutor = createSuccessfulExecutor(50);
287
+ const completedTasks = [];
288
+ executor.on('agent:complete', (taskId) => {
289
+ completedTasks.push(taskId);
290
+ });
291
+ await executor.execute('parent-1', agentExecutor);
292
+ expect(completedTasks.length).toBeGreaterThan(0);
293
+ });
294
+ it('should emit wave:start and wave:complete events', async () => {
295
+ const executor = createParallelExecutor({ maxConcurrency: 3 }, testDir);
296
+ const agentExecutor = createSuccessfulExecutor(50);
297
+ const waveStarts = [];
298
+ const waveCompletes = [];
299
+ executor.on('wave:start', (waveNumber) => {
300
+ waveStarts.push(waveNumber);
301
+ });
302
+ executor.on('wave:complete', (waveNumber) => {
303
+ waveCompletes.push(waveNumber);
304
+ });
305
+ await executor.execute('parent-1', agentExecutor);
306
+ expect(waveStarts.length).toBeGreaterThan(0);
307
+ expect(waveCompletes.length).toBe(waveStarts.length);
308
+ });
309
+ it('should emit progress events', async () => {
310
+ const executor = createParallelExecutor({ maxConcurrency: 1, progressIntervalMs: 50 }, testDir);
311
+ const agentExecutor = createSuccessfulExecutor(100);
312
+ const progressUpdates = [];
313
+ executor.on('progress', (progress) => {
314
+ progressUpdates.push(progress);
315
+ });
316
+ await executor.execute('parent-1', agentExecutor);
317
+ // May or may not have progress updates depending on timing
318
+ // Just verify no errors
319
+ });
320
+ });
321
+ describe('progress tracking', () => {
322
+ it('should track execution progress', async () => {
323
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
324
+ let capturedProgress;
325
+ const trackingExecutor = async (context, _timeoutMs) => {
326
+ capturedProgress = executor.getProgress();
327
+ await new Promise((resolve) => setTimeout(resolve, 50));
328
+ return {
329
+ taskId: context.taskId,
330
+ agentRole: context.role,
331
+ status: 'completed',
332
+ filesModified: [],
333
+ tokensUsed: 1000,
334
+ executionTimeMs: 50,
335
+ };
336
+ };
337
+ await executor.execute('parent-1', trackingExecutor);
338
+ // Verify progress was captured during execution
339
+ expect(capturedProgress).toBeDefined();
340
+ const finalProgress = executor.getProgress();
341
+ expect(finalProgress.totalAgents).toBeGreaterThan(0);
342
+ expect(finalProgress.completed + finalProgress.failed).toBe(finalProgress.totalAgents);
343
+ });
344
+ it('should estimate remaining time', async () => {
345
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
346
+ const agentExecutor = createSuccessfulExecutor(100);
347
+ let midProgress;
348
+ const wrappedExecutor = async (context, timeoutMs) => {
349
+ const result = await agentExecutor(context, timeoutMs);
350
+ midProgress = executor.getProgress();
351
+ return result;
352
+ };
353
+ await executor.execute('parent-1', wrappedExecutor);
354
+ // After first completion, there should be an estimate if more tasks remain
355
+ // This depends on timing, so just verify structure
356
+ expect(midProgress).toBeDefined();
357
+ });
358
+ });
359
+ describe('abort', () => {
360
+ it('should abort execution when requested', async () => {
361
+ const executor = createParallelExecutor({ maxConcurrency: 1 }, testDir);
362
+ let executionCount = 0;
363
+ const slowExecutor = async (context, _timeoutMs) => {
364
+ executionCount++;
365
+ if (executionCount === 1) {
366
+ executor.abort();
367
+ }
368
+ await new Promise((resolve) => setTimeout(resolve, 50));
369
+ return {
370
+ taskId: context.taskId,
371
+ agentRole: context.role,
372
+ status: 'completed',
373
+ filesModified: [],
374
+ tokensUsed: 1000,
375
+ executionTimeMs: 50,
376
+ };
377
+ };
378
+ const result = await executor.execute('parent-1', slowExecutor);
379
+ expect(executor.isAborted()).toBe(true);
380
+ // Some tasks should be cancelled
381
+ expect(result.failedTasks.length).toBeGreaterThan(0);
382
+ });
383
+ });
384
+ describe('coordination', () => {
385
+ it('should provide coordination statistics', async () => {
386
+ const executor = createParallelExecutor({}, testDir);
387
+ const stats = executor.getCoordinationStats();
388
+ expect(stats).toHaveProperty('blackboardStats');
389
+ expect(stats).toHaveProperty('messageHistory');
390
+ expect(stats).toHaveProperty('activeSubscriptions');
391
+ });
392
+ });
393
+ });
394
+ // =============================================================================
395
+ // Helper Function Tests
396
+ // =============================================================================
397
+ describe('createParallelExecutor', () => {
398
+ const testDir2 = join(process.cwd(), '.test-parallel-helper');
399
+ beforeEach(() => {
400
+ if (existsSync(testDir2)) {
401
+ rmSync(testDir2, { recursive: true });
402
+ }
403
+ mkdirSync(testDir2, { recursive: true });
404
+ });
405
+ afterEach(() => {
406
+ if (existsSync(testDir2)) {
407
+ rmSync(testDir2, { recursive: true });
408
+ }
409
+ });
410
+ it('should create executor with default config', () => {
411
+ const executor = createParallelExecutor({}, testDir2);
412
+ expect(executor).toBeInstanceOf(ParallelExecutor);
413
+ });
414
+ it('should create executor with custom config', () => {
415
+ const executor = createParallelExecutor({ maxConcurrency: 5 }, testDir2);
416
+ expect(executor).toBeInstanceOf(ParallelExecutor);
417
+ });
418
+ });
419
+ describe('executeParallel', () => {
420
+ const testDir3 = join(process.cwd(), '.test-parallel-execute');
421
+ beforeEach(() => {
422
+ if (existsSync(testDir3)) {
423
+ rmSync(testDir3, { recursive: true });
424
+ }
425
+ mkdirSync(join(testDir3, '.dino', 'tasks'), { recursive: true });
426
+ mkdirSync(join(testDir3, '.dino', 'checkpoints'), { recursive: true });
427
+ // Minimal registry
428
+ const registry = { tasks: {}, version: 1 };
429
+ writeFileSync(join(testDir3, '.dino', 'tasks', 'registry.json'), JSON.stringify(registry));
430
+ });
431
+ afterEach(() => {
432
+ if (existsSync(testDir3)) {
433
+ rmSync(testDir3, { recursive: true });
434
+ }
435
+ });
436
+ it('should execute with simplified API', async () => {
437
+ const mockExecutor = createMockAgentExecutor(new Map());
438
+ const result = await executeParallel('parent-1', mockExecutor, {}, testDir3);
439
+ // No child tasks, so should complete with empty results
440
+ expect(result).toBeDefined();
441
+ expect(result.executionTimeMs).toBeGreaterThanOrEqual(0);
442
+ });
443
+ });
444
+ describe('createMockAgentExecutor', () => {
445
+ it('should create mock executor with specified results', async () => {
446
+ const results = new Map([
447
+ ['task-1', { status: 'completed', tokensUsed: 2000 }],
448
+ ['task-2', { status: 'failed', error: 'Test error' }],
449
+ ]);
450
+ const executor = createMockAgentExecutor(results, 10);
451
+ const context1 = {
452
+ taskId: 'task-1',
453
+ role: 'implementer',
454
+ checkpointContext: '',
455
+ budgetAllocation: 5000,
456
+ isolatedFiles: [],
457
+ };
458
+ const context2 = {
459
+ taskId: 'task-2',
460
+ role: 'implementer',
461
+ checkpointContext: '',
462
+ budgetAllocation: 5000,
463
+ isolatedFiles: [],
464
+ };
465
+ const result1 = await executor(context1, 1000);
466
+ const result2 = await executor(context2, 1000);
467
+ expect(result1.status).toBe('completed');
468
+ expect(result1.tokensUsed).toBe(2000);
469
+ expect(result2.status).toBe('failed');
470
+ expect(result2.error).toBe('Test error');
471
+ });
472
+ it('should default to completed status', async () => {
473
+ const executor = createMockAgentExecutor(new Map(), 10);
474
+ const context = {
475
+ taskId: 'unknown-task',
476
+ role: 'implementer',
477
+ checkpointContext: '',
478
+ budgetAllocation: 5000,
479
+ isolatedFiles: [],
480
+ };
481
+ const result = await executor(context, 1000);
482
+ expect(result.status).toBe('completed');
483
+ expect(result.tokensUsed).toBe(1000);
484
+ });
485
+ });
486
+ // =============================================================================
487
+ // Formatting Tests
488
+ // =============================================================================
489
+ describe('formatExecutionProgress', () => {
490
+ it('should format progress correctly', () => {
491
+ const progress = {
492
+ totalAgents: 5,
493
+ pending: 1,
494
+ running: 2,
495
+ completed: 1,
496
+ failed: 1,
497
+ overallProgress: 40,
498
+ elapsedMs: 5000,
499
+ estimatedRemainingMs: 3000,
500
+ agents: [
501
+ { taskId: 'task-1', status: 'completed', progress: 100 },
502
+ { taskId: 'task-2', status: 'running', startedAt: '2026-01-31T10:00:00Z', progress: 50 },
503
+ { taskId: 'task-3', status: 'failed', error: 'Test error', progress: 0 },
504
+ ],
505
+ };
506
+ const formatted = formatExecutionProgress(progress);
507
+ expect(formatted).toContain('Parallel Execution Progress');
508
+ expect(formatted).toContain('40%');
509
+ expect(formatted).toContain('5s');
510
+ expect(formatted).toContain('3s');
511
+ expect(formatted).toContain('Pending: 1');
512
+ expect(formatted).toContain('Running: 2');
513
+ expect(formatted).toContain('Completed: 1');
514
+ expect(formatted).toContain('Failed: 1');
515
+ expect(formatted).toContain('task-2');
516
+ expect(formatted).toContain('task-3');
517
+ expect(formatted).toContain('Test error');
518
+ });
519
+ it('should handle no estimated remaining time', () => {
520
+ const progress = {
521
+ totalAgents: 1,
522
+ pending: 0,
523
+ running: 1,
524
+ completed: 0,
525
+ failed: 0,
526
+ overallProgress: 0,
527
+ elapsedMs: 1000,
528
+ agents: [{ taskId: 'task-1', status: 'running', progress: 50 }],
529
+ };
530
+ const formatted = formatExecutionProgress(progress);
531
+ expect(formatted).not.toContain('Estimated Remaining');
532
+ });
533
+ });
534
+ describe('formatParallelResult', () => {
535
+ it('should format successful result', () => {
536
+ const result = {
537
+ success: true,
538
+ completedTasks: ['task-1', 'task-2'],
539
+ failedTasks: [],
540
+ conflicts: { hasConflicts: false, conflicts: [] },
541
+ synthesizedCheckpointId: 'cp-synth-123',
542
+ totalTokensUsed: 5000,
543
+ executionTimeMs: 10000,
544
+ };
545
+ const formatted = formatParallelResult(result);
546
+ expect(formatted).toContain('Parallel Execution Result');
547
+ expect(formatted).toContain('✅ Success');
548
+ expect(formatted).toContain('Completed:** 2');
549
+ expect(formatted).toContain('Failed:** 0');
550
+ expect(formatted).toContain('5000');
551
+ expect(formatted).toContain('10s');
552
+ expect(formatted).toContain('task-1');
553
+ expect(formatted).toContain('task-2');
554
+ expect(formatted).toContain('cp-synth-123');
555
+ });
556
+ it('should format failed result with conflicts', () => {
557
+ const result = {
558
+ success: false,
559
+ completedTasks: ['task-1'],
560
+ failedTasks: ['task-2'],
561
+ conflicts: {
562
+ hasConflicts: true,
563
+ conflicts: [
564
+ { type: 'file', description: 'File conflict', taskIds: ['task-1', 'task-2'] },
565
+ ],
566
+ },
567
+ synthesizedCheckpointId: '',
568
+ totalTokensUsed: 3000,
569
+ executionTimeMs: 5000,
570
+ };
571
+ const formatted = formatParallelResult(result);
572
+ expect(formatted).toContain('❌ Partial/Failed');
573
+ expect(formatted).toContain('Failed Tasks');
574
+ expect(formatted).toContain('❌ task-2');
575
+ expect(formatted).toContain('Conflicts Detected');
576
+ expect(formatted).toContain('File conflict');
577
+ });
578
+ });
579
+ // =============================================================================
580
+ // TimeoutError Tests
581
+ // =============================================================================
582
+ describe('TimeoutError', () => {
583
+ it('should create timeout error with message', () => {
584
+ const error = new TimeoutError('Agent timed out');
585
+ expect(error).toBeInstanceOf(Error);
586
+ expect(error).toBeInstanceOf(TimeoutError);
587
+ expect(error.name).toBe('TimeoutError');
588
+ expect(error.message).toBe('Agent timed out');
589
+ });
590
+ });
591
+ // =============================================================================
592
+ // Configuration Tests
593
+ // =============================================================================
594
+ describe('DEFAULT_EXECUTOR_CONFIG', () => {
595
+ it('should have all required fields', () => {
596
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('maxConcurrency');
597
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('agentTimeoutMs');
598
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('globalTimeoutMs');
599
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('conflictStrategy');
600
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('continueOnFailure');
601
+ expect(DEFAULT_EXECUTOR_CONFIG).toHaveProperty('progressIntervalMs');
602
+ });
603
+ it('should have reasonable default values', () => {
604
+ expect(DEFAULT_EXECUTOR_CONFIG.maxConcurrency).toBeGreaterThan(0);
605
+ expect(DEFAULT_EXECUTOR_CONFIG.maxConcurrency).toBeLessThanOrEqual(10);
606
+ expect(DEFAULT_EXECUTOR_CONFIG.agentTimeoutMs).toBeGreaterThan(1000);
607
+ expect(DEFAULT_EXECUTOR_CONFIG.globalTimeoutMs).toBeGreaterThan(DEFAULT_EXECUTOR_CONFIG.agentTimeoutMs);
608
+ });
609
+ });
610
+ //# sourceMappingURL=parallel-executor.test.js.map