mcp-agent-foundry 1.0.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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/install-skills.d.ts +11 -0
  4. package/dist/cli/install-skills.d.ts.map +1 -0
  5. package/dist/cli/install-skills.js +143 -0
  6. package/dist/cli/install-skills.js.map +1 -0
  7. package/dist/cli/recovery-commands.d.ts +41 -0
  8. package/dist/cli/recovery-commands.d.ts.map +1 -0
  9. package/dist/cli/recovery-commands.js +241 -0
  10. package/dist/cli/recovery-commands.js.map +1 -0
  11. package/dist/cli/setup-wizard.d.ts +25 -0
  12. package/dist/cli/setup-wizard.d.ts.map +1 -0
  13. package/dist/cli/setup-wizard.js +1417 -0
  14. package/dist/cli/setup-wizard.js.map +1 -0
  15. package/dist/cli/test-connection.d.ts +45 -0
  16. package/dist/cli/test-connection.d.ts.map +1 -0
  17. package/dist/cli/test-connection.js +317 -0
  18. package/dist/cli/test-connection.js.map +1 -0
  19. package/dist/cli.d.ts +75 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +704 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/defaults.d.ts +57 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +99 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +14 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/manager.d.ts +184 -0
  32. package/dist/config/manager.d.ts.map +1 -0
  33. package/dist/config/manager.js +347 -0
  34. package/dist/config/manager.js.map +1 -0
  35. package/dist/config/merger.d.ts +76 -0
  36. package/dist/config/merger.d.ts.map +1 -0
  37. package/dist/config/merger.js +189 -0
  38. package/dist/config/merger.js.map +1 -0
  39. package/dist/config/schema.d.ts +20 -0
  40. package/dist/config/schema.d.ts.map +1 -0
  41. package/dist/config/schema.js +20 -0
  42. package/dist/config/schema.js.map +1 -0
  43. package/dist/config/validator.d.ts +254 -0
  44. package/dist/config/validator.d.ts.map +1 -0
  45. package/dist/config/validator.js +363 -0
  46. package/dist/config/validator.js.map +1 -0
  47. package/dist/config/worktree-defaults.d.ts +23 -0
  48. package/dist/config/worktree-defaults.d.ts.map +1 -0
  49. package/dist/config/worktree-defaults.js +78 -0
  50. package/dist/config/worktree-defaults.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +44 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/tools/compare-agents.d.ts +25 -0
  56. package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
  57. package/dist/mcp/tools/compare-agents.js +177 -0
  58. package/dist/mcp/tools/compare-agents.js.map +1 -0
  59. package/dist/mcp/tools/critique-plan.d.ts +26 -0
  60. package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
  61. package/dist/mcp/tools/critique-plan.js +162 -0
  62. package/dist/mcp/tools/critique-plan.js.map +1 -0
  63. package/dist/mcp/tools/design-feedback.d.ts +26 -0
  64. package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
  65. package/dist/mcp/tools/design-feedback.js +216 -0
  66. package/dist/mcp/tools/design-feedback.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +50 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +191 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/invoke-agent.d.ts +25 -0
  72. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
  73. package/dist/mcp/tools/invoke-agent.js +141 -0
  74. package/dist/mcp/tools/invoke-agent.js.map +1 -0
  75. package/dist/mcp/tools/review-code.d.ts +25 -0
  76. package/dist/mcp/tools/review-code.d.ts.map +1 -0
  77. package/dist/mcp/tools/review-code.js +170 -0
  78. package/dist/mcp/tools/review-code.js.map +1 -0
  79. package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
  80. package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
  82. package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
  83. package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
  84. package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
  85. package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
  86. package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
  87. package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
  88. package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
  89. package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
  90. package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
  91. package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
  92. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/tasks/execute-task.js +284 -0
  94. package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
  95. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
  96. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
  97. package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
  98. package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
  99. package/dist/mcp/tools/tasks/index.d.ts +36 -0
  100. package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
  101. package/dist/mcp/tools/tasks/index.js +66 -0
  102. package/dist/mcp/tools/tasks/index.js.map +1 -0
  103. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
  104. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
  105. package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
  106. package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
  107. package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
  108. package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
  109. package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
  110. package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
  111. package/dist/mcp/tools/worktree/index.d.ts +41 -0
  112. package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
  113. package/dist/mcp/tools/worktree/index.js +69 -0
  114. package/dist/mcp/tools/worktree/index.js.map +1 -0
  115. package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
  116. package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
  117. package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
  118. package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
  119. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
  120. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
  121. package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
  122. package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
  123. package/dist/mcp/transport/stdio.d.ts +13 -0
  124. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  125. package/dist/mcp/transport/stdio.js +15 -0
  126. package/dist/mcp/transport/stdio.js.map +1 -0
  127. package/dist/observability/logger.d.ts +137 -0
  128. package/dist/observability/logger.d.ts.map +1 -0
  129. package/dist/observability/logger.js +235 -0
  130. package/dist/observability/logger.js.map +1 -0
  131. package/dist/observability/metrics.d.ts +250 -0
  132. package/dist/observability/metrics.d.ts.map +1 -0
  133. package/dist/observability/metrics.js +364 -0
  134. package/dist/observability/metrics.js.map +1 -0
  135. package/dist/persistence/index.d.ts +9 -0
  136. package/dist/persistence/index.d.ts.map +1 -0
  137. package/dist/persistence/index.js +9 -0
  138. package/dist/persistence/index.js.map +1 -0
  139. package/dist/persistence/state-schema.d.ts +116 -0
  140. package/dist/persistence/state-schema.d.ts.map +1 -0
  141. package/dist/persistence/state-schema.js +28 -0
  142. package/dist/persistence/state-schema.js.map +1 -0
  143. package/dist/persistence/state-store.d.ts +111 -0
  144. package/dist/persistence/state-store.d.ts.map +1 -0
  145. package/dist/persistence/state-store.js +291 -0
  146. package/dist/persistence/state-store.js.map +1 -0
  147. package/dist/providers/anthropic.d.ts +164 -0
  148. package/dist/providers/anthropic.d.ts.map +1 -0
  149. package/dist/providers/anthropic.js +500 -0
  150. package/dist/providers/anthropic.js.map +1 -0
  151. package/dist/providers/base.d.ts +151 -0
  152. package/dist/providers/base.d.ts.map +1 -0
  153. package/dist/providers/base.js +227 -0
  154. package/dist/providers/base.js.map +1 -0
  155. package/dist/providers/gemini.d.ts +85 -0
  156. package/dist/providers/gemini.d.ts.map +1 -0
  157. package/dist/providers/gemini.js +414 -0
  158. package/dist/providers/gemini.js.map +1 -0
  159. package/dist/providers/kimi.d.ts +19 -0
  160. package/dist/providers/kimi.d.ts.map +1 -0
  161. package/dist/providers/kimi.js +20 -0
  162. package/dist/providers/kimi.js.map +1 -0
  163. package/dist/providers/manager.d.ts +160 -0
  164. package/dist/providers/manager.d.ts.map +1 -0
  165. package/dist/providers/manager.js +264 -0
  166. package/dist/providers/manager.js.map +1 -0
  167. package/dist/providers/ollama.d.ts +83 -0
  168. package/dist/providers/ollama.d.ts.map +1 -0
  169. package/dist/providers/ollama.js +453 -0
  170. package/dist/providers/ollama.js.map +1 -0
  171. package/dist/providers/openai.d.ts +96 -0
  172. package/dist/providers/openai.d.ts.map +1 -0
  173. package/dist/providers/openai.js +457 -0
  174. package/dist/providers/openai.js.map +1 -0
  175. package/dist/providers/zai.d.ts +19 -0
  176. package/dist/providers/zai.d.ts.map +1 -0
  177. package/dist/providers/zai.js +20 -0
  178. package/dist/providers/zai.js.map +1 -0
  179. package/dist/router/context-manager.d.ts +2 -0
  180. package/dist/router/context-manager.d.ts.map +1 -0
  181. package/dist/router/context-manager.js +3 -0
  182. package/dist/router/context-manager.js.map +1 -0
  183. package/dist/router/engine.d.ts +169 -0
  184. package/dist/router/engine.d.ts.map +1 -0
  185. package/dist/router/engine.js +435 -0
  186. package/dist/router/engine.js.map +1 -0
  187. package/dist/router/pattern-executor.d.ts +317 -0
  188. package/dist/router/pattern-executor.d.ts.map +1 -0
  189. package/dist/router/pattern-executor.js +571 -0
  190. package/dist/router/pattern-executor.js.map +1 -0
  191. package/dist/router/role-resolver.d.ts +59 -0
  192. package/dist/router/role-resolver.d.ts.map +1 -0
  193. package/dist/router/role-resolver.js +95 -0
  194. package/dist/router/role-resolver.js.map +1 -0
  195. package/dist/server.d.ts +32 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +223 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/startup.d.ts +78 -0
  200. package/dist/startup.d.ts.map +1 -0
  201. package/dist/startup.js +107 -0
  202. package/dist/startup.js.map +1 -0
  203. package/dist/tasks/coordinator.d.ts +141 -0
  204. package/dist/tasks/coordinator.d.ts.map +1 -0
  205. package/dist/tasks/coordinator.js +331 -0
  206. package/dist/tasks/coordinator.js.map +1 -0
  207. package/dist/tasks/index.d.ts +13 -0
  208. package/dist/tasks/index.d.ts.map +1 -0
  209. package/dist/tasks/index.js +13 -0
  210. package/dist/tasks/index.js.map +1 -0
  211. package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
  212. package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
  213. package/dist/tasks/persistent-state-coordinator.js +371 -0
  214. package/dist/tasks/persistent-state-coordinator.js.map +1 -0
  215. package/dist/tasks/pipeline-manager.d.ts +103 -0
  216. package/dist/tasks/pipeline-manager.d.ts.map +1 -0
  217. package/dist/tasks/pipeline-manager.js +358 -0
  218. package/dist/tasks/pipeline-manager.js.map +1 -0
  219. package/dist/tasks/state-coordinator.d.ts +79 -0
  220. package/dist/tasks/state-coordinator.d.ts.map +1 -0
  221. package/dist/tasks/state-coordinator.js +200 -0
  222. package/dist/tasks/state-coordinator.js.map +1 -0
  223. package/dist/tasks/worker-mode.d.ts +65 -0
  224. package/dist/tasks/worker-mode.d.ts.map +1 -0
  225. package/dist/tasks/worker-mode.js +208 -0
  226. package/dist/tasks/worker-mode.js.map +1 -0
  227. package/dist/translation/errors.d.ts +203 -0
  228. package/dist/translation/errors.d.ts.map +1 -0
  229. package/dist/translation/errors.js +477 -0
  230. package/dist/translation/errors.js.map +1 -0
  231. package/dist/translation/index.d.ts +12 -0
  232. package/dist/translation/index.d.ts.map +1 -0
  233. package/dist/translation/index.js +32 -0
  234. package/dist/translation/index.js.map +1 -0
  235. package/dist/translation/messages.d.ts +295 -0
  236. package/dist/translation/messages.d.ts.map +1 -0
  237. package/dist/translation/messages.js +557 -0
  238. package/dist/translation/messages.js.map +1 -0
  239. package/dist/translation/streaming.d.ts +226 -0
  240. package/dist/translation/streaming.d.ts.map +1 -0
  241. package/dist/translation/streaming.js +520 -0
  242. package/dist/translation/streaming.js.map +1 -0
  243. package/dist/translation/tools.d.ts +209 -0
  244. package/dist/translation/tools.d.ts.map +1 -0
  245. package/dist/translation/tools.js +331 -0
  246. package/dist/translation/tools.js.map +1 -0
  247. package/dist/types.d.ts +747 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +86 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils/circuit-breaker.d.ts +175 -0
  252. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  253. package/dist/utils/circuit-breaker.js +315 -0
  254. package/dist/utils/circuit-breaker.js.map +1 -0
  255. package/dist/utils/env.d.ts +2 -0
  256. package/dist/utils/env.d.ts.map +1 -0
  257. package/dist/utils/env.js +3 -0
  258. package/dist/utils/env.js.map +1 -0
  259. package/dist/utils/git.d.ts +58 -0
  260. package/dist/utils/git.d.ts.map +1 -0
  261. package/dist/utils/git.js +197 -0
  262. package/dist/utils/git.js.map +1 -0
  263. package/dist/utils/index.d.ts +9 -0
  264. package/dist/utils/index.d.ts.map +1 -0
  265. package/dist/utils/index.js +9 -0
  266. package/dist/utils/index.js.map +1 -0
  267. package/dist/utils/merge-ordering.d.ts +45 -0
  268. package/dist/utils/merge-ordering.d.ts.map +1 -0
  269. package/dist/utils/merge-ordering.js +128 -0
  270. package/dist/utils/merge-ordering.js.map +1 -0
  271. package/dist/utils/retry.d.ts +106 -0
  272. package/dist/utils/retry.d.ts.map +1 -0
  273. package/dist/utils/retry.js +188 -0
  274. package/dist/utils/retry.js.map +1 -0
  275. package/dist/worktrees/branch-manager.d.ts +55 -0
  276. package/dist/worktrees/branch-manager.d.ts.map +1 -0
  277. package/dist/worktrees/branch-manager.js +129 -0
  278. package/dist/worktrees/branch-manager.js.map +1 -0
  279. package/dist/worktrees/conflict-handler.d.ts +72 -0
  280. package/dist/worktrees/conflict-handler.d.ts.map +1 -0
  281. package/dist/worktrees/conflict-handler.js +287 -0
  282. package/dist/worktrees/conflict-handler.js.map +1 -0
  283. package/dist/worktrees/conflict-parser.d.ts +28 -0
  284. package/dist/worktrees/conflict-parser.d.ts.map +1 -0
  285. package/dist/worktrees/conflict-parser.js +140 -0
  286. package/dist/worktrees/conflict-parser.js.map +1 -0
  287. package/dist/worktrees/index.d.ts +20 -0
  288. package/dist/worktrees/index.d.ts.map +1 -0
  289. package/dist/worktrees/index.js +20 -0
  290. package/dist/worktrees/index.js.map +1 -0
  291. package/dist/worktrees/instructions.d.ts +20 -0
  292. package/dist/worktrees/instructions.d.ts.map +1 -0
  293. package/dist/worktrees/instructions.js +84 -0
  294. package/dist/worktrees/instructions.js.map +1 -0
  295. package/dist/worktrees/manager.d.ts +76 -0
  296. package/dist/worktrees/manager.d.ts.map +1 -0
  297. package/dist/worktrees/manager.js +277 -0
  298. package/dist/worktrees/manager.js.map +1 -0
  299. package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
  300. package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
  301. package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
  302. package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
  303. package/dist/worktrees/pool.d.ts +95 -0
  304. package/dist/worktrees/pool.d.ts.map +1 -0
  305. package/dist/worktrees/pool.js +271 -0
  306. package/dist/worktrees/pool.js.map +1 -0
  307. package/dist/worktrees/recovery.d.ts +94 -0
  308. package/dist/worktrees/recovery.d.ts.map +1 -0
  309. package/dist/worktrees/recovery.js +371 -0
  310. package/dist/worktrees/recovery.js.map +1 -0
  311. package/dist/worktrees/resource-manager.d.ts +74 -0
  312. package/dist/worktrees/resource-manager.d.ts.map +1 -0
  313. package/dist/worktrees/resource-manager.js +228 -0
  314. package/dist/worktrees/resource-manager.js.map +1 -0
  315. package/package.json +88 -0
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Pipeline Manager
3
+ *
4
+ * Manages multi-step task DAGs with dependency resolution.
5
+ * Generates TaskCreate instructions for Claude to execute.
6
+ */
7
+ import { randomUUID } from "node:crypto";
8
+ /** Maximum context length before truncation */
9
+ const MAX_CONTEXT_LENGTH = 50000;
10
+ export class PipelineManager {
11
+ executions = new Map();
12
+ stepWorktrees = new Map();
13
+ logger;
14
+ constructor(logger) {
15
+ this.logger = logger;
16
+ }
17
+ /**
18
+ * Allocate a worktree for a pipeline step.
19
+ */
20
+ allocateWorktreeForStep(stepId, allocation) {
21
+ this.stepWorktrees.set(stepId, allocation);
22
+ this.logger.debug("Worktree allocated for step", {
23
+ stepId,
24
+ worktreeId: allocation.worktreeId,
25
+ branch: allocation.branch,
26
+ });
27
+ }
28
+ /**
29
+ * Get the worktree allocation for a step.
30
+ */
31
+ getStepWorktree(stepId) {
32
+ return this.stepWorktrees.get(stepId);
33
+ }
34
+ /**
35
+ * Get all allocated worktrees.
36
+ */
37
+ getAllocatedWorktrees() {
38
+ return new Map(this.stepWorktrees);
39
+ }
40
+ /**
41
+ * Update the status of a step's worktree allocation.
42
+ */
43
+ updateStepWorktreeStatus(stepId, status) {
44
+ const allocation = this.stepWorktrees.get(stepId);
45
+ if (!allocation) {
46
+ throw new Error(`No worktree allocation found for step: ${stepId}`);
47
+ }
48
+ allocation.status = status;
49
+ if (status === 'merged') {
50
+ allocation.mergedAt = Date.now();
51
+ }
52
+ this.logger.debug("Step worktree status updated", { stepId, status });
53
+ }
54
+ /**
55
+ * Validate pipeline definition for cycles and missing dependencies.
56
+ * Uses topological sort (Kahn's algorithm) to detect cycles.
57
+ * @throws Error if validation fails
58
+ */
59
+ validateDefinition(definition) {
60
+ const stepNames = new Set(definition.steps.map((s) => s.name));
61
+ // Check for duplicate step names
62
+ if (stepNames.size !== definition.steps.length) {
63
+ throw new Error("Pipeline contains duplicate step names");
64
+ }
65
+ // Check all dependencies exist
66
+ for (const step of definition.steps) {
67
+ for (const dep of step.dependsOn ?? []) {
68
+ if (!stepNames.has(dep)) {
69
+ throw new Error(`Step "${step.name}" depends on unknown step "${dep}"`);
70
+ }
71
+ }
72
+ }
73
+ // Check for cycles using topological sort (Kahn's algorithm)
74
+ const inDegree = new Map();
75
+ const adjacency = new Map();
76
+ for (const step of definition.steps) {
77
+ inDegree.set(step.name, step.dependsOn?.length ?? 0);
78
+ adjacency.set(step.name, []);
79
+ }
80
+ for (const step of definition.steps) {
81
+ for (const dep of step.dependsOn ?? []) {
82
+ adjacency.get(dep).push(step.name);
83
+ }
84
+ }
85
+ // Find all nodes with no incoming edges
86
+ const queue = [];
87
+ for (const [name, degree] of inDegree) {
88
+ if (degree === 0)
89
+ queue.push(name);
90
+ }
91
+ let processedCount = 0;
92
+ while (queue.length > 0) {
93
+ const current = queue.shift();
94
+ processedCount++;
95
+ for (const neighbor of adjacency.get(current) ?? []) {
96
+ const newDegree = inDegree.get(neighbor) - 1;
97
+ inDegree.set(neighbor, newDegree);
98
+ if (newDegree === 0)
99
+ queue.push(neighbor);
100
+ }
101
+ }
102
+ if (processedCount !== definition.steps.length) {
103
+ throw new Error("Pipeline contains circular dependencies");
104
+ }
105
+ }
106
+ /**
107
+ * Generate TaskCreate instructions for all pipeline steps.
108
+ * Returns a string with all the TaskCreate calls Claude should execute.
109
+ */
110
+ generatePipelineCreation(definition) {
111
+ this.validateDefinition(definition);
112
+ const instructions = [];
113
+ const stepToIndex = new Map();
114
+ // First pass: assign indices
115
+ definition.steps.forEach((step, index) => {
116
+ stepToIndex.set(step.name, index + 1);
117
+ });
118
+ // Second pass: generate TaskCreate instructions
119
+ for (const step of definition.steps) {
120
+ const metadata = {
121
+ pipeline: definition.name,
122
+ role: step.role,
123
+ stepName: step.name,
124
+ };
125
+ const blockedByIndices = step.dependsOn?.map((dep) => stepToIndex.get(dep));
126
+ let instruction = `TaskCreate({
127
+ subject: ${JSON.stringify(step.subject)},
128
+ description: ${JSON.stringify(step.description ?? "")},
129
+ activeForm: "Executing ${step.role} agent...",
130
+ metadata: ${JSON.stringify(metadata)}`;
131
+ if (blockedByIndices?.length) {
132
+ instruction += `,
133
+ blockedBy: [${blockedByIndices.map((i) => `"${i}"`).join(", ")}]`;
134
+ }
135
+ instruction += `
136
+ })`;
137
+ instructions.push(instruction);
138
+ }
139
+ return instructions.join("\n\n");
140
+ }
141
+ /**
142
+ * Create a new pipeline execution tracker.
143
+ */
144
+ createExecution(definition) {
145
+ this.validateDefinition(definition);
146
+ const execution = {
147
+ pipelineId: randomUUID(),
148
+ definition,
149
+ taskIdMap: new Map(),
150
+ status: "pending",
151
+ startTime: Date.now(),
152
+ completedSteps: new Set(),
153
+ results: new Map(),
154
+ };
155
+ this.executions.set(execution.pipelineId, execution);
156
+ this.logger.info("Pipeline execution created", {
157
+ pipelineId: execution.pipelineId,
158
+ name: definition.name,
159
+ stepCount: definition.steps.length,
160
+ });
161
+ return execution;
162
+ }
163
+ /**
164
+ * Get a pipeline execution by ID.
165
+ */
166
+ getExecution(pipelineId) {
167
+ return this.executions.get(pipelineId);
168
+ }
169
+ /**
170
+ * Register task IDs after Claude creates the tasks.
171
+ */
172
+ registerTaskIds(pipelineId, taskIdMap) {
173
+ const execution = this.executions.get(pipelineId);
174
+ if (!execution) {
175
+ throw new Error(`Unknown pipeline: ${pipelineId}`);
176
+ }
177
+ execution.taskIdMap = taskIdMap;
178
+ execution.status = "running";
179
+ }
180
+ /**
181
+ * Determine which steps are ready to execute (all dependencies complete).
182
+ */
183
+ getReadySteps(execution) {
184
+ return execution.definition.steps.filter((step) => {
185
+ // Skip already completed
186
+ if (execution.completedSteps.has(step.name))
187
+ return false;
188
+ // Check all dependencies are complete
189
+ const depsComplete = step.dependsOn?.every((dep) => execution.completedSteps.has(dep)) ??
190
+ true;
191
+ return depsComplete;
192
+ });
193
+ }
194
+ /**
195
+ * Mark a step as completed with its result.
196
+ */
197
+ completeStep(pipelineId, stepName, result) {
198
+ const execution = this.executions.get(pipelineId);
199
+ if (!execution) {
200
+ throw new Error(`Unknown pipeline: ${pipelineId}`);
201
+ }
202
+ execution.completedSteps.add(stepName);
203
+ execution.results.set(stepName, result);
204
+ this.logger.debug("Pipeline step completed", { pipelineId, stepName });
205
+ // Check if pipeline is complete
206
+ if (execution.completedSteps.size === execution.definition.steps.length) {
207
+ execution.status = "completed";
208
+ this.logger.info("Pipeline completed", {
209
+ pipelineId,
210
+ name: execution.definition.name,
211
+ durationMs: Date.now() - execution.startTime,
212
+ });
213
+ }
214
+ }
215
+ /**
216
+ * Mark a step as failed.
217
+ */
218
+ failStep(pipelineId, stepName, error) {
219
+ const execution = this.executions.get(pipelineId);
220
+ if (!execution) {
221
+ throw new Error(`Unknown pipeline: ${pipelineId}`);
222
+ }
223
+ execution.status = "failed";
224
+ this.logger.error("Pipeline step failed", { pipelineId, stepName, error });
225
+ }
226
+ /**
227
+ * Build context for a step, including results from completed dependencies.
228
+ * Truncates if total context exceeds MAX_CONTEXT_LENGTH.
229
+ */
230
+ buildStepContext(execution, step) {
231
+ const parts = [];
232
+ // Global context
233
+ if (execution.definition.globalContext) {
234
+ parts.push(`## Project Context\n${execution.definition.globalContext}`);
235
+ }
236
+ // Step-specific context
237
+ if (step.context) {
238
+ parts.push(`## Task Context\n${step.context}`);
239
+ }
240
+ // Results from dependencies
241
+ if (step.dependsOn?.length) {
242
+ parts.push("## Previous Step Results");
243
+ for (const depName of step.dependsOn) {
244
+ const depResult = execution.results.get(depName);
245
+ if (depResult) {
246
+ const content = depResult.content
247
+ .filter((b) => b.type === "text")
248
+ .map((b) => b.text ?? "")
249
+ .join("\n");
250
+ parts.push(`### ${depName} (${depResult.role})\n${content}`);
251
+ }
252
+ }
253
+ }
254
+ let fullContext = parts.join("\n\n");
255
+ // Truncate if too long
256
+ if (fullContext.length > MAX_CONTEXT_LENGTH) {
257
+ fullContext =
258
+ fullContext.slice(0, MAX_CONTEXT_LENGTH - 100) +
259
+ "\n\n...[Context truncated due to length]...";
260
+ this.logger.warn("Step context truncated", {
261
+ stepName: step.name,
262
+ originalLength: parts.join("\n\n").length,
263
+ truncatedLength: fullContext.length,
264
+ });
265
+ }
266
+ return fullContext;
267
+ }
268
+ /**
269
+ * Get all active pipeline executions.
270
+ */
271
+ getActiveExecutions() {
272
+ return Array.from(this.executions.values()).filter((e) => e.status === "running" || e.status === "pending");
273
+ }
274
+ /**
275
+ * Cleanup worktrees after successful pipeline merge.
276
+ * @param pipelineId - Pipeline to cleanup
277
+ * @param worktreeManager - WorktreeManager instance
278
+ * @param deleteBranches - Whether to delete the merged branches
279
+ */
280
+ async cleanupPipelineWorktrees(pipelineId, worktreeManager, deleteBranches = true) {
281
+ const errors = [];
282
+ let cleaned = 0;
283
+ for (const [stepId, allocation] of this.stepWorktrees) {
284
+ // Only cleanup merged or completed worktrees
285
+ if (allocation.status === "merged" || allocation.status === "completed") {
286
+ try {
287
+ await worktreeManager.remove(allocation.worktreeId, deleteBranches);
288
+ this.stepWorktrees.delete(stepId);
289
+ cleaned++;
290
+ }
291
+ catch (error) {
292
+ errors.push(`Failed to cleanup worktree for step ${stepId}: ${error}`);
293
+ }
294
+ }
295
+ }
296
+ this.logger.info("Pipeline worktrees cleaned up", {
297
+ pipelineId,
298
+ cleaned,
299
+ errors: errors.length,
300
+ });
301
+ return { cleaned, errors };
302
+ }
303
+ /**
304
+ * Mark a pipeline as failed and preserve worktrees for debugging.
305
+ * @param pipelineId - Pipeline to rollback
306
+ * @param reason - Failure reason
307
+ */
308
+ markPipelineFailed(pipelineId, reason) {
309
+ // Update all step worktree statuses to indicate failure
310
+ for (const [stepId, allocation] of this.stepWorktrees) {
311
+ if (allocation.status === "active" || allocation.status === "allocated") {
312
+ // Keep as-is for debugging, but log the failure
313
+ this.logger.warn("Preserving worktree for failed pipeline", {
314
+ pipelineId,
315
+ stepId,
316
+ worktreePath: allocation.worktreePath,
317
+ reason,
318
+ });
319
+ }
320
+ }
321
+ }
322
+ /**
323
+ * Get cleanup summary for a pipeline.
324
+ */
325
+ getWorktreeCleanupSummary() {
326
+ const summary = {
327
+ total: 0,
328
+ pending: 0,
329
+ active: 0,
330
+ completed: 0,
331
+ merged: 0,
332
+ conflict: 0,
333
+ };
334
+ for (const allocation of this.stepWorktrees.values()) {
335
+ summary.total++;
336
+ switch (allocation.status) {
337
+ case "pending":
338
+ case "allocated":
339
+ summary.pending++;
340
+ break;
341
+ case "active":
342
+ summary.active++;
343
+ break;
344
+ case "completed":
345
+ summary.completed++;
346
+ break;
347
+ case "merged":
348
+ summary.merged++;
349
+ break;
350
+ case "conflict":
351
+ summary.conflict++;
352
+ break;
353
+ }
354
+ }
355
+ return summary;
356
+ }
357
+ }
358
+ //# sourceMappingURL=pipeline-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-manager.js","sourceRoot":"","sources":["../../src/tasks/pipeline-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * State Coordinator for Agent Foundry
3
+ *
4
+ * Provides unified state management across tasks and worktrees.
5
+ * Tracks task-worktree associations and lifecycle state.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import type { ConflictState, ConflictResolutionStrategy } from '../types.js';
9
+ export interface TaskState {
10
+ taskId: string;
11
+ role: string;
12
+ status: 'pending' | 'running' | 'completed' | 'failed';
13
+ worktreeId?: string;
14
+ startedAt?: number;
15
+ completedAt?: number;
16
+ error?: string;
17
+ }
18
+ export interface StateEvents {
19
+ 'task:created': (task: TaskState) => void;
20
+ 'task:started': (task: TaskState) => void;
21
+ 'task:completed': (task: TaskState) => void;
22
+ 'task:failed': (task: TaskState, error: string) => void;
23
+ 'worktree:linked': (taskId: string, worktreeId: string) => void;
24
+ 'worktree:unlinked': (taskId: string, worktreeId: string) => void;
25
+ 'conflict:detected': (taskId: string, state: ConflictState) => void;
26
+ 'conflict:resolved': (taskId: string, state: ConflictState) => void;
27
+ }
28
+ export declare class StateCoordinator extends EventEmitter {
29
+ private readonly logger;
30
+ private tasks;
31
+ private taskToWorktree;
32
+ private worktreeToTask;
33
+ private conflictStates;
34
+ constructor();
35
+ createTask(taskId: string, role: string): TaskState;
36
+ startTask(taskId: string): TaskState;
37
+ completeTask(taskId: string): TaskState;
38
+ failTask(taskId: string, error: string): TaskState;
39
+ getTask(taskId: string): TaskState | undefined;
40
+ listTasks(): TaskState[];
41
+ listTasksByStatus(status: TaskState['status']): TaskState[];
42
+ linkTaskToWorktree(taskId: string, worktreeId: string): void;
43
+ unlinkTaskFromWorktree(taskId: string): string | undefined;
44
+ getWorktreeForTask(taskId: string): string | undefined;
45
+ getTaskForWorktree(worktreeId: string): string | undefined;
46
+ hasActiveWorktree(taskId: string): boolean;
47
+ getStats(): {
48
+ totalTasks: number;
49
+ runningTasks: number;
50
+ linkedWorktrees: number;
51
+ unresolvedConflicts: number;
52
+ };
53
+ /**
54
+ * Set conflict state for a task.
55
+ */
56
+ setConflictState(taskId: string, state: ConflictState): void;
57
+ /**
58
+ * Get conflict state for a task.
59
+ */
60
+ getConflictState(taskId: string): ConflictState | undefined;
61
+ /**
62
+ * Clear conflict state for a task (after resolution).
63
+ */
64
+ clearConflictState(taskId: string): void;
65
+ /**
66
+ * Mark conflict as resolved.
67
+ */
68
+ markConflictResolved(taskId: string, strategy: ConflictResolutionStrategy): void;
69
+ /**
70
+ * Check if a task has unresolved conflicts.
71
+ */
72
+ hasUnresolvedConflicts(taskId: string): boolean;
73
+ /**
74
+ * Get all tasks with unresolved conflicts.
75
+ */
76
+ getTasksWithConflicts(): string[];
77
+ cleanup(maxAgeMs: number): number;
78
+ }
79
+ //# sourceMappingURL=state-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-coordinator.d.ts","sourceRoot":"","sources":["../../src/tasks/state-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * State Coordinator for Agent Foundry
3
+ *
4
+ * Provides unified state management across tasks and worktrees.
5
+ * Tracks task-worktree associations and lifecycle state.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { createLogger } from '../observability/logger.js';
9
+ export class StateCoordinator extends EventEmitter {
10
+ logger;
11
+ tasks = new Map();
12
+ taskToWorktree = new Map(); // taskId -> worktreeId
13
+ worktreeToTask = new Map(); // worktreeId -> taskId
14
+ conflictStates = new Map(); // taskId -> ConflictState
15
+ constructor() {
16
+ super();
17
+ this.logger = createLogger({ name: 'state-coordinator' });
18
+ }
19
+ // === Task State Management ===
20
+ createTask(taskId, role) {
21
+ const task = {
22
+ taskId,
23
+ role,
24
+ status: 'pending',
25
+ };
26
+ this.tasks.set(taskId, task);
27
+ this.emit('task:created', task);
28
+ this.logger.info('Task created', { taskId, role });
29
+ return task;
30
+ }
31
+ startTask(taskId) {
32
+ const task = this.tasks.get(taskId);
33
+ if (!task)
34
+ throw new Error(`Task not found: ${taskId}`);
35
+ task.status = 'running';
36
+ task.startedAt = Date.now();
37
+ this.emit('task:started', task);
38
+ this.logger.info('Task started', { taskId });
39
+ return task;
40
+ }
41
+ completeTask(taskId) {
42
+ const task = this.tasks.get(taskId);
43
+ if (!task)
44
+ throw new Error(`Task not found: ${taskId}`);
45
+ task.status = 'completed';
46
+ task.completedAt = Date.now();
47
+ this.emit('task:completed', task);
48
+ this.logger.info('Task completed', { taskId, durationMs: task.completedAt - (task.startedAt || 0) });
49
+ return task;
50
+ }
51
+ failTask(taskId, error) {
52
+ const task = this.tasks.get(taskId);
53
+ if (!task)
54
+ throw new Error(`Task not found: ${taskId}`);
55
+ task.status = 'failed';
56
+ task.completedAt = Date.now();
57
+ task.error = error;
58
+ this.emit('task:failed', task, error);
59
+ this.logger.error('Task failed', { taskId, errorMessage: error });
60
+ return task;
61
+ }
62
+ getTask(taskId) {
63
+ return this.tasks.get(taskId);
64
+ }
65
+ listTasks() {
66
+ return Array.from(this.tasks.values());
67
+ }
68
+ listTasksByStatus(status) {
69
+ return this.listTasks().filter(t => t.status === status);
70
+ }
71
+ // === Task-Worktree Linking ===
72
+ linkTaskToWorktree(taskId, worktreeId) {
73
+ const task = this.tasks.get(taskId);
74
+ if (!task)
75
+ throw new Error(`Task not found: ${taskId}`);
76
+ // Check if worktree already linked to another task
77
+ const existingTask = this.worktreeToTask.get(worktreeId);
78
+ if (existingTask && existingTask !== taskId) {
79
+ throw new Error(`Worktree ${worktreeId} already linked to task ${existingTask}`);
80
+ }
81
+ task.worktreeId = worktreeId;
82
+ this.taskToWorktree.set(taskId, worktreeId);
83
+ this.worktreeToTask.set(worktreeId, taskId);
84
+ this.emit('worktree:linked', taskId, worktreeId);
85
+ this.logger.info('Task linked to worktree', { taskId, worktreeId });
86
+ }
87
+ unlinkTaskFromWorktree(taskId) {
88
+ const worktreeId = this.taskToWorktree.get(taskId);
89
+ if (!worktreeId)
90
+ return undefined;
91
+ const task = this.tasks.get(taskId);
92
+ if (task)
93
+ task.worktreeId = undefined;
94
+ this.taskToWorktree.delete(taskId);
95
+ this.worktreeToTask.delete(worktreeId);
96
+ this.emit('worktree:unlinked', taskId, worktreeId);
97
+ this.logger.info('Task unlinked from worktree', { taskId, worktreeId });
98
+ return worktreeId;
99
+ }
100
+ getWorktreeForTask(taskId) {
101
+ return this.taskToWorktree.get(taskId);
102
+ }
103
+ getTaskForWorktree(worktreeId) {
104
+ return this.worktreeToTask.get(worktreeId);
105
+ }
106
+ // === Utility Methods ===
107
+ hasActiveWorktree(taskId) {
108
+ return this.taskToWorktree.has(taskId);
109
+ }
110
+ getStats() {
111
+ return {
112
+ totalTasks: this.tasks.size,
113
+ runningTasks: this.listTasksByStatus('running').length,
114
+ linkedWorktrees: this.taskToWorktree.size,
115
+ unresolvedConflicts: this.getTasksWithConflicts().length,
116
+ };
117
+ }
118
+ // === Conflict State Management ===
119
+ /**
120
+ * Set conflict state for a task.
121
+ */
122
+ setConflictState(taskId, state) {
123
+ const task = this.tasks.get(taskId);
124
+ if (!task) {
125
+ this.logger.warn('Setting conflict state for unknown task', { taskId });
126
+ }
127
+ this.conflictStates.set(taskId, state);
128
+ this.emit('conflict:detected', taskId, state);
129
+ this.logger.info('Conflict state set', {
130
+ taskId,
131
+ totalConflicts: state.totalConflicts,
132
+ files: state.files.map(f => f.file)
133
+ });
134
+ }
135
+ /**
136
+ * Get conflict state for a task.
137
+ */
138
+ getConflictState(taskId) {
139
+ return this.conflictStates.get(taskId);
140
+ }
141
+ /**
142
+ * Clear conflict state for a task (after resolution).
143
+ */
144
+ clearConflictState(taskId) {
145
+ const state = this.conflictStates.get(taskId);
146
+ if (state) {
147
+ this.conflictStates.delete(taskId);
148
+ this.emit('conflict:resolved', taskId, state);
149
+ this.logger.info('Conflict state cleared', { taskId });
150
+ }
151
+ }
152
+ /**
153
+ * Mark conflict as resolved.
154
+ */
155
+ markConflictResolved(taskId, strategy) {
156
+ const state = this.conflictStates.get(taskId);
157
+ if (state) {
158
+ state.resolved = true;
159
+ state.resolutionStrategy = strategy;
160
+ state.resolvedAt = Date.now();
161
+ this.emit('conflict:resolved', taskId, state);
162
+ this.logger.info('Conflict marked resolved', { taskId, strategy });
163
+ }
164
+ }
165
+ /**
166
+ * Check if a task has unresolved conflicts.
167
+ */
168
+ hasUnresolvedConflicts(taskId) {
169
+ const state = this.conflictStates.get(taskId);
170
+ return state !== undefined && !state.resolved;
171
+ }
172
+ /**
173
+ * Get all tasks with unresolved conflicts.
174
+ */
175
+ getTasksWithConflicts() {
176
+ const tasks = [];
177
+ for (const [taskId, state] of this.conflictStates) {
178
+ if (!state.resolved) {
179
+ tasks.push(taskId);
180
+ }
181
+ }
182
+ return tasks;
183
+ }
184
+ // Cleanup completed/failed tasks older than threshold
185
+ cleanup(maxAgeMs) {
186
+ const threshold = Date.now() - maxAgeMs;
187
+ let cleaned = 0;
188
+ for (const [taskId, task] of this.tasks) {
189
+ if ((task.status === 'completed' || task.status === 'failed') &&
190
+ task.completedAt && task.completedAt < threshold) {
191
+ this.unlinkTaskFromWorktree(taskId);
192
+ this.tasks.delete(taskId);
193
+ cleaned++;
194
+ }
195
+ }
196
+ this.logger.info('State cleanup completed', { cleaned });
197
+ return cleaned;
198
+ }
199
+ }
200
+ //# sourceMappingURL=state-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-coordinator.js","sourceRoot":"","sources":["../../src/tasks/state-coordinator.ts"],"names":[],"mappings":"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"}