agent-pipeline 0.1.0 → 0.1.1

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 (323) hide show
  1. package/CLAUDE.md +2 -3
  2. package/README.md +110 -55
  3. package/dist/cli/commands/agent/info.js +1 -1
  4. package/dist/cli/commands/agent/info.js.map +1 -1
  5. package/dist/cli/commands/agent/list.js +1 -1
  6. package/dist/cli/commands/agent/list.js.map +1 -1
  7. package/dist/cli/commands/agent/pull.d.ts +1 -0
  8. package/dist/cli/commands/agent/pull.d.ts.map +1 -1
  9. package/dist/cli/commands/agent/pull.js +67 -44
  10. package/dist/cli/commands/agent/pull.js.map +1 -1
  11. package/dist/cli/commands/cleanup.d.ts +4 -0
  12. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  13. package/dist/cli/commands/cleanup.js +197 -37
  14. package/dist/cli/commands/cleanup.js.map +1 -1
  15. package/dist/cli/commands/history.d.ts.map +1 -1
  16. package/dist/cli/commands/history.js +3 -22
  17. package/dist/cli/commands/history.js.map +1 -1
  18. package/dist/cli/commands/hooks.d.ts +10 -0
  19. package/dist/cli/commands/hooks.d.ts.map +1 -0
  20. package/dist/cli/commands/hooks.js +88 -0
  21. package/dist/cli/commands/hooks.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +1 -6
  23. package/dist/cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/commands/init.js +173 -58
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli/commands/loop-context.d.ts +2 -0
  27. package/dist/cli/commands/loop-context.d.ts.map +1 -0
  28. package/dist/cli/commands/loop-context.js +88 -0
  29. package/dist/cli/commands/loop-context.js.map +1 -0
  30. package/dist/cli/commands/pipeline/create.d.ts.map +1 -1
  31. package/dist/cli/commands/pipeline/create.js +156 -68
  32. package/dist/cli/commands/pipeline/create.js.map +1 -1
  33. package/dist/cli/commands/run.d.ts +1 -1
  34. package/dist/cli/commands/run.d.ts.map +1 -1
  35. package/dist/cli/commands/run.js +29 -5
  36. package/dist/cli/commands/run.js.map +1 -1
  37. package/dist/cli/commands/schema.d.ts +9 -0
  38. package/dist/cli/commands/schema.d.ts.map +1 -0
  39. package/dist/cli/commands/schema.js +541 -0
  40. package/dist/cli/commands/schema.js.map +1 -0
  41. package/dist/cli/commands/status.d.ts.map +1 -1
  42. package/dist/cli/commands/status.js +0 -6
  43. package/dist/cli/commands/status.js.map +1 -1
  44. package/dist/cli/help/index.d.ts +6 -0
  45. package/dist/cli/help/index.d.ts.map +1 -0
  46. package/dist/cli/help/index.js +538 -0
  47. package/dist/cli/help/index.js.map +1 -0
  48. package/dist/cli/help/types.d.ts +22 -0
  49. package/dist/cli/help/types.d.ts.map +1 -0
  50. package/dist/cli/help/types.js +2 -0
  51. package/dist/cli/help/types.js.map +1 -0
  52. package/dist/cli/hooks.d.ts +5 -1
  53. package/dist/cli/hooks.d.ts.map +1 -1
  54. package/dist/cli/hooks.js +106 -12
  55. package/dist/cli/hooks.js.map +1 -1
  56. package/dist/cli/templates/agents/code-review-agents/code-reviewer.md +46 -0
  57. package/dist/cli/templates/agents/code-review-agents/memory-doc-updater.md +189 -0
  58. package/dist/cli/templates/agents/code-review-agents/quality-checker.md +52 -0
  59. package/dist/cli/templates/agents/frontend-agents/brutalist_purist.md +563 -0
  60. package/dist/cli/templates/agents/frontend-agents/cyberpunk_hacker.md +824 -0
  61. package/dist/cli/templates/agents/frontend-agents/frontend-pipeline-ref.md +32 -0
  62. package/dist/cli/templates/agents/frontend-agents/indie_game_dev.md +715 -0
  63. package/dist/cli/templates/agents/frontend-agents/luxury_editorial.md +628 -0
  64. package/dist/cli/templates/agents/frontend-agents/product_owner.md +159 -0
  65. package/dist/cli/templates/agents/frontend-agents/retro_90s_webmaster.md +385 -0
  66. package/dist/cli/templates/agents/frontend-agents/showcase.md +362 -0
  67. package/dist/cli/templates/agents/frontend-agents/swiss_modernist.md +716 -0
  68. package/dist/cli/templates/agents/loop-agents/socratic-explorer.md +91 -0
  69. package/dist/cli/templates/instructions/handover.md +40 -0
  70. package/dist/cli/templates/instructions/loop.md +35 -0
  71. package/dist/cli/templates/pipelines/front-end-parallel-example.yml +81 -0
  72. package/dist/cli/templates/pipelines/loop-example.yml +25 -0
  73. package/dist/cli/templates/pipelines/post-commit-example.yml +49 -58
  74. package/dist/cli/templates/schema/pipeline-config.schema.json +400 -0
  75. package/dist/cli/templates/schema/pipeline-config.schema.yaml +301 -0
  76. package/dist/cli/utils/agent-importer.d.ts +1 -0
  77. package/dist/cli/utils/agent-importer.d.ts.map +1 -1
  78. package/dist/cli/utils/agent-importer.js +67 -0
  79. package/dist/cli/utils/agent-importer.js.map +1 -1
  80. package/dist/cli/utils/interactive-prompts.d.ts +4 -0
  81. package/dist/cli/utils/interactive-prompts.d.ts.map +1 -1
  82. package/dist/cli/utils/interactive-prompts.js +59 -13
  83. package/dist/cli/utils/interactive-prompts.js.map +1 -1
  84. package/dist/config/pipeline-loader.d.ts +4 -1
  85. package/dist/config/pipeline-loader.d.ts.map +1 -1
  86. package/dist/config/pipeline-loader.js +58 -0
  87. package/dist/config/pipeline-loader.js.map +1 -1
  88. package/dist/config/schema.d.ts +65 -35
  89. package/dist/config/schema.d.ts.map +1 -1
  90. package/dist/core/abort-controller.d.ts +16 -0
  91. package/dist/core/abort-controller.d.ts.map +1 -0
  92. package/dist/core/abort-controller.js +52 -0
  93. package/dist/core/abort-controller.js.map +1 -0
  94. package/dist/core/agent-query-runner.d.ts +0 -1
  95. package/dist/core/agent-query-runner.d.ts.map +1 -1
  96. package/dist/core/agent-query-runner.js +0 -22
  97. package/dist/core/agent-query-runner.js.map +1 -1
  98. package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts +5 -1
  99. package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts.map +1 -1
  100. package/dist/core/agent-runtimes/claude-code-headless-runtime.js +127 -12
  101. package/dist/core/agent-runtimes/claude-code-headless-runtime.js.map +1 -1
  102. package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts +0 -2
  103. package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts.map +1 -1
  104. package/dist/core/agent-runtimes/claude-sdk-runtime.js +1 -22
  105. package/dist/core/agent-runtimes/claude-sdk-runtime.js.map +1 -1
  106. package/dist/core/branch-manager.d.ts +3 -1
  107. package/dist/core/branch-manager.d.ts.map +1 -1
  108. package/dist/core/branch-manager.js +11 -1
  109. package/dist/core/branch-manager.js.map +1 -1
  110. package/dist/core/git-manager.d.ts +17 -1
  111. package/dist/core/git-manager.d.ts.map +1 -1
  112. package/dist/core/git-manager.js +147 -3
  113. package/dist/core/git-manager.js.map +1 -1
  114. package/dist/core/group-execution-orchestrator.d.ts +7 -13
  115. package/dist/core/group-execution-orchestrator.d.ts.map +1 -1
  116. package/dist/core/group-execution-orchestrator.js +53 -142
  117. package/dist/core/group-execution-orchestrator.js.map +1 -1
  118. package/dist/core/handover-manager.d.ts +24 -0
  119. package/dist/core/handover-manager.d.ts.map +1 -0
  120. package/dist/core/handover-manager.js +214 -0
  121. package/dist/core/handover-manager.js.map +1 -0
  122. package/dist/core/instruction-loader.d.ts +23 -0
  123. package/dist/core/instruction-loader.d.ts.map +1 -0
  124. package/dist/core/instruction-loader.js +112 -0
  125. package/dist/core/instruction-loader.js.map +1 -0
  126. package/dist/core/loop-state-manager.d.ts +12 -7
  127. package/dist/core/loop-state-manager.d.ts.map +1 -1
  128. package/dist/core/loop-state-manager.js +49 -3
  129. package/dist/core/loop-state-manager.js.map +1 -1
  130. package/dist/core/parallel-executor.d.ts +12 -3
  131. package/dist/core/parallel-executor.d.ts.map +1 -1
  132. package/dist/core/parallel-executor.js +92 -14
  133. package/dist/core/parallel-executor.js.map +1 -1
  134. package/dist/core/pipeline-finalizer.d.ts +12 -4
  135. package/dist/core/pipeline-finalizer.d.ts.map +1 -1
  136. package/dist/core/pipeline-finalizer.js +244 -33
  137. package/dist/core/pipeline-finalizer.js.map +1 -1
  138. package/dist/core/pipeline-initializer.d.ts +13 -5
  139. package/dist/core/pipeline-initializer.d.ts.map +1 -1
  140. package/dist/core/pipeline-initializer.js +53 -25
  141. package/dist/core/pipeline-initializer.js.map +1 -1
  142. package/dist/core/pipeline-runner.d.ts +13 -1
  143. package/dist/core/pipeline-runner.d.ts.map +1 -1
  144. package/dist/core/pipeline-runner.js +352 -60
  145. package/dist/core/pipeline-runner.js.map +1 -1
  146. package/dist/core/pr-creator.d.ts +0 -1
  147. package/dist/core/pr-creator.d.ts.map +1 -1
  148. package/dist/core/pr-creator.js +12 -4
  149. package/dist/core/pr-creator.js.map +1 -1
  150. package/dist/core/stage-executor.d.ts +17 -9
  151. package/dist/core/stage-executor.d.ts.map +1 -1
  152. package/dist/core/stage-executor.js +152 -166
  153. package/dist/core/stage-executor.js.map +1 -1
  154. package/dist/core/types/agent-runtime.d.ts +3 -2
  155. package/dist/core/types/agent-runtime.d.ts.map +1 -1
  156. package/dist/core/worktree-manager.d.ts +21 -0
  157. package/dist/core/worktree-manager.d.ts.map +1 -0
  158. package/dist/core/worktree-manager.js +133 -0
  159. package/dist/core/worktree-manager.js.map +1 -0
  160. package/dist/index.js +118 -112
  161. package/dist/index.js.map +1 -1
  162. package/dist/notifications/notification-manager.d.ts +1 -0
  163. package/dist/notifications/notification-manager.d.ts.map +1 -1
  164. package/dist/notifications/notification-manager.js +17 -3
  165. package/dist/notifications/notification-manager.js.map +1 -1
  166. package/dist/notifications/notifiers/local-notifier.d.ts.map +1 -1
  167. package/dist/notifications/notifiers/local-notifier.js +5 -2
  168. package/dist/notifications/notifiers/local-notifier.js.map +1 -1
  169. package/dist/notifications/notifiers/slack-notifier.d.ts.map +1 -1
  170. package/dist/notifications/notifiers/slack-notifier.js +39 -8
  171. package/dist/notifications/notifiers/slack-notifier.js.map +1 -1
  172. package/dist/notifications/types.d.ts +1 -1
  173. package/dist/notifications/types.d.ts.map +1 -1
  174. package/dist/ui/components/execution-group.d.ts.map +1 -1
  175. package/dist/ui/components/execution-group.js +1 -1
  176. package/dist/ui/components/execution-group.js.map +1 -1
  177. package/dist/ui/components/interactive-summary.d.ts +9 -0
  178. package/dist/ui/components/interactive-summary.d.ts.map +1 -0
  179. package/dist/ui/components/interactive-summary.js +166 -0
  180. package/dist/ui/components/interactive-summary.js.map +1 -0
  181. package/dist/ui/components/keyboard-hints.d.ts +12 -0
  182. package/dist/ui/components/keyboard-hints.d.ts.map +1 -0
  183. package/dist/ui/components/keyboard-hints.js +13 -0
  184. package/dist/ui/components/keyboard-hints.js.map +1 -0
  185. package/dist/ui/components/live-timer.d.ts +9 -0
  186. package/dist/ui/components/live-timer.d.ts.map +1 -0
  187. package/dist/ui/components/live-timer.js +25 -0
  188. package/dist/ui/components/live-timer.js.map +1 -0
  189. package/dist/ui/components/loop-iteration-history.d.ts +8 -0
  190. package/dist/ui/components/loop-iteration-history.d.ts.map +1 -0
  191. package/dist/ui/components/loop-iteration-history.js +106 -0
  192. package/dist/ui/components/loop-iteration-history.js.map +1 -0
  193. package/dist/ui/components/loop-session-summary.d.ts +9 -0
  194. package/dist/ui/components/loop-session-summary.d.ts.map +1 -0
  195. package/dist/ui/components/loop-session-summary.js +39 -0
  196. package/dist/ui/components/loop-session-summary.js.map +1 -0
  197. package/dist/ui/components/stage-row.d.ts +0 -1
  198. package/dist/ui/components/stage-row.d.ts.map +1 -1
  199. package/dist/ui/components/stage-row.js +5 -15
  200. package/dist/ui/components/stage-row.js.map +1 -1
  201. package/dist/ui/components/status-badge.d.ts.map +1 -1
  202. package/dist/ui/components/status-badge.js +1 -0
  203. package/dist/ui/components/status-badge.js.map +1 -1
  204. package/dist/ui/pipeline-ui.d.ts +1 -0
  205. package/dist/ui/pipeline-ui.d.ts.map +1 -1
  206. package/dist/ui/pipeline-ui.js +22 -18
  207. package/dist/ui/pipeline-ui.js.map +1 -1
  208. package/dist/utils/error-factory.d.ts.map +1 -1
  209. package/dist/utils/error-factory.js +10 -2
  210. package/dist/utils/error-factory.js.map +1 -1
  211. package/dist/utils/pipeline-formatter.d.ts +8 -2
  212. package/dist/utils/pipeline-formatter.d.ts.map +1 -1
  213. package/dist/utils/pipeline-formatter.js +30 -26
  214. package/dist/utils/pipeline-formatter.js.map +1 -1
  215. package/dist/utils/pipeline-logger.d.ts +19 -0
  216. package/dist/utils/pipeline-logger.d.ts.map +1 -0
  217. package/dist/utils/pipeline-logger.js +80 -0
  218. package/dist/utils/pipeline-logger.js.map +1 -0
  219. package/dist/utils/platform-opener.d.ts +4 -0
  220. package/dist/utils/platform-opener.d.ts.map +1 -0
  221. package/dist/utils/platform-opener.js +52 -0
  222. package/dist/utils/platform-opener.js.map +1 -0
  223. package/dist/validators/agent-validator.d.ts +10 -0
  224. package/dist/validators/agent-validator.d.ts.map +1 -0
  225. package/dist/validators/agent-validator.js +87 -0
  226. package/dist/validators/agent-validator.js.map +1 -0
  227. package/dist/validators/dag-validator.d.ts +9 -0
  228. package/dist/validators/dag-validator.d.ts.map +1 -0
  229. package/dist/validators/dag-validator.js +51 -0
  230. package/dist/validators/dag-validator.js.map +1 -0
  231. package/dist/validators/environment-validator.d.ts +9 -0
  232. package/dist/validators/environment-validator.d.ts.map +1 -0
  233. package/dist/validators/environment-validator.js +35 -0
  234. package/dist/validators/environment-validator.js.map +1 -0
  235. package/dist/validators/execution-validator.d.ts +8 -0
  236. package/dist/validators/execution-validator.d.ts.map +1 -0
  237. package/dist/validators/execution-validator.js +51 -0
  238. package/dist/validators/execution-validator.js.map +1 -0
  239. package/dist/validators/git-validator.d.ts +13 -0
  240. package/dist/validators/git-validator.d.ts.map +1 -0
  241. package/dist/validators/git-validator.js +135 -0
  242. package/dist/validators/git-validator.js.map +1 -0
  243. package/dist/validators/notification-validator.d.ts +8 -0
  244. package/dist/validators/notification-validator.d.ts.map +1 -0
  245. package/dist/validators/notification-validator.js +27 -0
  246. package/dist/validators/notification-validator.js.map +1 -0
  247. package/dist/validators/pipeline-validator.d.ts +3 -26
  248. package/dist/validators/pipeline-validator.d.ts.map +1 -1
  249. package/dist/validators/pipeline-validator.js +5 -515
  250. package/dist/validators/pipeline-validator.js.map +1 -1
  251. package/dist/validators/retry-validator.d.ts +9 -0
  252. package/dist/validators/retry-validator.d.ts.map +1 -0
  253. package/dist/validators/retry-validator.js +34 -0
  254. package/dist/validators/retry-validator.js.map +1 -0
  255. package/dist/validators/runtime-validator.d.ts +9 -0
  256. package/dist/validators/runtime-validator.d.ts.map +1 -0
  257. package/dist/validators/runtime-validator.js +82 -0
  258. package/dist/validators/runtime-validator.js.map +1 -0
  259. package/dist/validators/structure-validator.d.ts +8 -0
  260. package/dist/validators/structure-validator.d.ts.map +1 -0
  261. package/dist/validators/structure-validator.js +39 -0
  262. package/dist/validators/structure-validator.js.map +1 -0
  263. package/dist/validators/types.d.ts +19 -0
  264. package/dist/validators/types.d.ts.map +1 -0
  265. package/dist/validators/types.js +2 -0
  266. package/dist/validators/types.js.map +1 -0
  267. package/dist/validators/validation-orchestrator.d.ts +9 -0
  268. package/dist/validators/validation-orchestrator.d.ts.map +1 -0
  269. package/dist/validators/validation-orchestrator.js +43 -0
  270. package/dist/validators/validation-orchestrator.js.map +1 -0
  271. package/package.json +17 -11
  272. package/dist/cli/commands/install.d.ts +0 -2
  273. package/dist/cli/commands/install.d.ts.map +0 -1
  274. package/dist/cli/commands/install.js +0 -15
  275. package/dist/cli/commands/install.js.map +0 -1
  276. package/dist/cli/commands/uninstall.d.ts +0 -2
  277. package/dist/cli/commands/uninstall.d.ts.map +0 -1
  278. package/dist/cli/commands/uninstall.js +0 -6
  279. package/dist/cli/commands/uninstall.js.map +0 -1
  280. package/dist/cli/templates/agents/cleanup-reporter.md +0 -107
  281. package/dist/cli/templates/agents/code-reducer.md +0 -51
  282. package/dist/cli/templates/agents/code-reviewer.md +0 -34
  283. package/dist/cli/templates/agents/context-reducer.md +0 -94
  284. package/dist/cli/templates/agents/dependency-auditor.md +0 -127
  285. package/dist/cli/templates/agents/detective-empath.md +0 -26
  286. package/dist/cli/templates/agents/detective-linguist.md +0 -26
  287. package/dist/cli/templates/agents/detective-logician.md +0 -26
  288. package/dist/cli/templates/agents/detective-skeptic.md +0 -26
  289. package/dist/cli/templates/agents/detective-statistician.md +0 -26
  290. package/dist/cli/templates/agents/doc-updater.md +0 -30
  291. package/dist/cli/templates/agents/judge.md +0 -27
  292. package/dist/cli/templates/agents/memory-updater.md +0 -72
  293. package/dist/cli/templates/agents/quality-checker.md +0 -32
  294. package/dist/cli/templates/agents/security-auditor.md +0 -32
  295. package/dist/cli/templates/agents/storyteller.md +0 -26
  296. package/dist/cli/templates/agents/summary.md +0 -32
  297. package/dist/cli/templates/agents/synthesizer.md +0 -26
  298. package/dist/cli/templates/pipelines/large-pipeline-example.yml +0 -178
  299. package/dist/cli/templates/pipelines/post-merge-example.yml +0 -78
  300. package/dist/cli/templates/pipelines/pre-commit-example.yml +0 -41
  301. package/dist/cli/templates/pipelines/pre-push-example.yml +0 -51
  302. package/dist/cli/templates/pipelines/test-pipeline.yml +0 -90
  303. package/dist/config/project-config-loader.d.ts +0 -11
  304. package/dist/config/project-config-loader.d.ts.map +0 -1
  305. package/dist/config/project-config-loader.js +0 -100
  306. package/dist/config/project-config-loader.js.map +0 -1
  307. package/dist/core/condition-evaluator.d.ts +0 -16
  308. package/dist/core/condition-evaluator.d.ts.map +0 -1
  309. package/dist/core/condition-evaluator.js +0 -121
  310. package/dist/core/condition-evaluator.js.map +0 -1
  311. package/dist/core/context-reducer.d.ts +0 -15
  312. package/dist/core/context-reducer.d.ts.map +0 -1
  313. package/dist/core/context-reducer.js +0 -224
  314. package/dist/core/context-reducer.js.map +0 -1
  315. package/dist/core/output-storage-manager.d.ts +0 -14
  316. package/dist/core/output-storage-manager.d.ts.map +0 -1
  317. package/dist/core/output-storage-manager.js +0 -68
  318. package/dist/core/output-storage-manager.js.map +0 -1
  319. package/dist/core/output-tool-builder.d.ts +0 -6
  320. package/dist/core/output-tool-builder.d.ts.map +0 -1
  321. package/dist/core/output-tool-builder.js +0 -50
  322. package/dist/core/output-tool-builder.js.map +0 -1
  323. /package/{license → LICENSE} +0 -0
@@ -0,0 +1,214 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { InstructionLoader } from './instruction-loader.js';
4
+ export class HandoverManager {
5
+ handoverDir;
6
+ pipelineName;
7
+ runId;
8
+ instructionLoader;
9
+ constructor(repoPath, pipelineName, runId, config) {
10
+ this.pipelineName = pipelineName;
11
+ this.runId = runId;
12
+ this.instructionLoader = new InstructionLoader(repoPath);
13
+ const runIdSuffix = runId.substring(0, 8);
14
+ if (config?.directory) {
15
+ const customBase = path.isAbsolute(config.directory)
16
+ ? config.directory
17
+ : path.join(repoPath, config.directory);
18
+ this.handoverDir = path.join(customBase, runIdSuffix);
19
+ }
20
+ else {
21
+ this.handoverDir = path.join(repoPath, '.agent-pipeline', 'runs', `${pipelineName}-${runIdSuffix}`);
22
+ }
23
+ }
24
+ getHandoverDir() {
25
+ return this.handoverDir;
26
+ }
27
+ async initialize() {
28
+ await fs.mkdir(this.handoverDir, { recursive: true });
29
+ await fs.mkdir(path.join(this.handoverDir, 'stages'), { recursive: true });
30
+ const runsDir = path.dirname(this.handoverDir);
31
+ const runsGitignore = path.join(runsDir, '.gitignore');
32
+ try {
33
+ await fs.access(runsGitignore);
34
+ }
35
+ catch {
36
+ await fs.writeFile(runsGitignore, '# Ignore all pipeline run artifacts\n*\n!.gitignore\n');
37
+ }
38
+ await fs.writeFile(path.join(this.handoverDir, 'HANDOVER.md'), this.buildInitialHandover());
39
+ await fs.writeFile(path.join(this.handoverDir, 'execution-log.md'), this.buildInitialLog());
40
+ }
41
+ async createStageDirectory(stageName) {
42
+ const stageDir = path.join(this.handoverDir, 'stages', stageName);
43
+ await fs.mkdir(stageDir, { recursive: true });
44
+ return stageDir;
45
+ }
46
+ async saveAgentOutput(stageName, output) {
47
+ const stageDir = await this.createStageDirectory(stageName);
48
+ await fs.writeFile(path.join(stageDir, 'output.md'), output);
49
+ }
50
+ async appendToLog(stageName, status, duration, summary) {
51
+ const timestamp = new Date().toISOString();
52
+ const logEntry = `
53
+ ---
54
+ ## [${timestamp}] Stage: ${stageName}
55
+ **Status:** ${status} | **Duration:** ${duration.toFixed(1)}s
56
+ **Summary:** ${summary}
57
+ `;
58
+ const logPath = path.join(this.handoverDir, 'execution-log.md');
59
+ await fs.appendFile(logPath, logEntry);
60
+ }
61
+ async getPreviousStages() {
62
+ try {
63
+ const stagesDir = path.join(this.handoverDir, 'stages');
64
+ const entries = await fs.readdir(stagesDir, { withFileTypes: true });
65
+ return entries
66
+ .filter(e => e.isDirectory())
67
+ .map(e => e.name);
68
+ }
69
+ catch {
70
+ return [];
71
+ }
72
+ }
73
+ buildContextMessage(stageName, previousStages) {
74
+ const previousStagesSection = previousStages.length > 0
75
+ ? previousStages.map(s => `- \`${this.handoverDir}/stages/${s}/output.md\``).join('\n')
76
+ : '(none - this is the first stage)';
77
+ return `## Pipeline Handover Context
78
+
79
+ **Handover Directory:** \`${this.handoverDir}\`
80
+
81
+ ### Required Reading
82
+ Before starting your task, read these files to understand the current state:
83
+ 1. \`${this.handoverDir}/HANDOVER.md\` - Current pipeline state and context
84
+ 2. \`${this.handoverDir}/execution-log.md\` - Execution history
85
+
86
+ ### Previous Stage Outputs
87
+ ${previousStagesSection}
88
+
89
+ ### Your Output Requirements
90
+
91
+ **output.md is a summary file only.** Keep it minimal and to the point.
92
+
93
+ Save your summary to: \`${this.handoverDir}/stages/${stageName}/output.md\`
94
+
95
+ \`\`\`markdown
96
+ # Stage: ${stageName}
97
+
98
+ ## Summary
99
+ {1-2 sentences max: what you accomplished}
100
+
101
+ ## Files Changed
102
+ {list paths only, no descriptions}
103
+
104
+ ## Reference Files
105
+ {list any additional files you saved to this stage directory}
106
+
107
+ ## Next Stage Context
108
+ {1-2 bullet points only if critical context is needed}
109
+ \`\`\`
110
+
111
+ **Guidelines:**
112
+ - output.md contains ONLY the requested summary—no detailed analysis, logs, or verbose explanations
113
+ - For detailed output (analysis reports, data dumps, reference material), write separate files to \`${this.handoverDir}/stages/${stageName}/\` and reference them in output.md
114
+ - Be ruthlessly concise—next stages can read your reference files if they need details
115
+
116
+ The orchestrator will update HANDOVER.md and execution-log.md automatically.
117
+ `;
118
+ }
119
+ async readStageOutput(stageName) {
120
+ const outputPath = path.join(this.handoverDir, 'stages', stageName, 'output.md');
121
+ try {
122
+ return await fs.readFile(outputPath, 'utf-8');
123
+ }
124
+ catch {
125
+ return `(No output found for stage: ${stageName})`;
126
+ }
127
+ }
128
+ async copyStageToHandover(stageName) {
129
+ const stageOutput = await this.readStageOutput(stageName);
130
+ const handoverContent = this.formatAsHandover(stageName, stageOutput);
131
+ await fs.writeFile(path.join(this.handoverDir, 'HANDOVER.md'), handoverContent);
132
+ }
133
+ async mergeParallelOutputs(stageNames) {
134
+ const outputs = await Promise.all(stageNames.map(async (name) => ({
135
+ name,
136
+ content: await this.readStageOutput(name)
137
+ })));
138
+ const mergedContent = this.formatMergedHandover(outputs);
139
+ await fs.writeFile(path.join(this.handoverDir, 'HANDOVER.md'), mergedContent);
140
+ }
141
+ formatAsHandover(stageName, stageOutput) {
142
+ return `# Pipeline Handover
143
+
144
+ ## Current Status
145
+ - Stage: ${stageName}
146
+ - Status: success
147
+ - Timestamp: ${new Date().toISOString()}
148
+
149
+ ## Stage Output
150
+
151
+ ${stageOutput}
152
+ `;
153
+ }
154
+ formatMergedHandover(outputs) {
155
+ const stageNames = outputs.map(o => o.name).join(', ');
156
+ const stageSections = outputs
157
+ .map(o => `### ${o.name}\n\n${o.content}`)
158
+ .join('\n\n---\n\n');
159
+ return `# Pipeline Handover
160
+
161
+ ## Current Status
162
+ - Stages: ${stageNames} (parallel group completed)
163
+ - Status: success
164
+ - Timestamp: ${new Date().toISOString()}
165
+
166
+ ## Parallel Stage Outputs
167
+
168
+ ${stageSections}
169
+ `;
170
+ }
171
+ async buildContextMessageAsync(stageName, previousStages, instructionPath) {
172
+ const previousStagesSection = previousStages.length > 0
173
+ ? previousStages.map(s => `- \`${this.handoverDir}/stages/${s}/output.md\``).join('\n')
174
+ : '(none - this is the first stage)';
175
+ const context = {
176
+ handoverDir: this.handoverDir,
177
+ stageName,
178
+ timestamp: new Date().toISOString(),
179
+ previousStagesSection
180
+ };
181
+ return this.instructionLoader.loadHandoverInstructions(instructionPath, context);
182
+ }
183
+ buildInitialHandover() {
184
+ return `# Pipeline Handover
185
+
186
+ ## Current Status
187
+ - Stage: (none - pipeline starting)
188
+ - Status: initializing
189
+ - Timestamp: ${new Date().toISOString()}
190
+
191
+ ## Summary
192
+ Pipeline "${this.pipelineName}" is starting. No stages have executed yet.
193
+
194
+ ## Key Outputs
195
+ (none yet)
196
+
197
+ ## Files Created/Modified
198
+ (none yet)
199
+
200
+ ## Notes for Next Stage
201
+ This is the first stage. Read your task instructions carefully.
202
+ `;
203
+ }
204
+ buildInitialLog() {
205
+ return `# Pipeline Execution Log
206
+
207
+ **Pipeline:** ${this.pipelineName}
208
+ **Run ID:** ${this.runId}
209
+ **Started:** ${new Date().toISOString()}
210
+
211
+ `;
212
+ }
213
+ }
214
+ //# sourceMappingURL=handover-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handover-manager.js","sourceRoot":"","sources":["../../src/core/handover-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface InstructionContext {
2
+ handoverDir?: string;
3
+ stageName?: string;
4
+ timestamp?: string;
5
+ previousStagesSection?: string;
6
+ pendingDir?: string;
7
+ currentIteration?: number;
8
+ maxIterations?: number;
9
+ pipelineName?: string;
10
+ }
11
+ export declare class InstructionLoader {
12
+ private repoPath;
13
+ private static readonly DEFAULT_HANDOVER_PATH;
14
+ private static readonly DEFAULT_LOOP_PATH;
15
+ constructor(repoPath: string);
16
+ loadHandoverInstructions(customPath?: string, context?: InstructionContext): Promise<string>;
17
+ loadLoopInstructions(customPath?: string, context?: InstructionContext): Promise<string>;
18
+ private loadTemplate;
19
+ private interpolate;
20
+ private getBuiltInHandoverTemplate;
21
+ private getBuiltInLoopTemplate;
22
+ }
23
+ //# sourceMappingURL=instruction-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-loader.d.ts","sourceRoot":"","sources":["../../src/core/instruction-loader.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAEjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAA8C;IAC3F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;gBAEvE,QAAQ,EAAE,MAAM;IAOtB,wBAAwB,CAC5B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAYZ,oBAAoB,CACxB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;YAeJ,YAAY;IA8B1B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,0BAA0B;IA2ClC,OAAO,CAAC,sBAAsB;CAyB/B"}
@@ -0,0 +1,112 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ export class InstructionLoader {
4
+ repoPath;
5
+ static DEFAULT_HANDOVER_PATH = '.agent-pipeline/instructions/handover.md';
6
+ static DEFAULT_LOOP_PATH = '.agent-pipeline/instructions/loop.md';
7
+ constructor(repoPath) {
8
+ this.repoPath = repoPath;
9
+ }
10
+ async loadHandoverInstructions(customPath, context) {
11
+ const content = await this.loadTemplate(customPath, InstructionLoader.DEFAULT_HANDOVER_PATH, this.getBuiltInHandoverTemplate());
12
+ return this.interpolate(content, context || {});
13
+ }
14
+ async loadLoopInstructions(customPath, context) {
15
+ const content = await this.loadTemplate(customPath, InstructionLoader.DEFAULT_LOOP_PATH, this.getBuiltInLoopTemplate());
16
+ return this.interpolate(content, context || {});
17
+ }
18
+ async loadTemplate(customPath, defaultPath, builtInTemplate) {
19
+ if (customPath) {
20
+ const fullPath = path.isAbsolute(customPath)
21
+ ? customPath
22
+ : path.join(this.repoPath, customPath);
23
+ try {
24
+ return await fs.readFile(fullPath, 'utf-8');
25
+ }
26
+ catch {
27
+ console.warn(`Custom instruction file not found: ${customPath}, falling back to default`);
28
+ }
29
+ }
30
+ const defaultFullPath = path.join(this.repoPath, defaultPath);
31
+ try {
32
+ return await fs.readFile(defaultFullPath, 'utf-8');
33
+ }
34
+ catch {
35
+ return builtInTemplate;
36
+ }
37
+ }
38
+ interpolate(template, context) {
39
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
40
+ const value = context[key];
41
+ if (value === undefined || value === null) {
42
+ return match;
43
+ }
44
+ return String(value);
45
+ });
46
+ }
47
+ getBuiltInHandoverTemplate() {
48
+ return `## Pipeline Handover Context
49
+
50
+ **Handover Directory:** \`{{handoverDir}}\` *(absolute path - use exactly as shown)*
51
+
52
+ ### Required Reading
53
+ Before starting your task, read these files to understand the current state:
54
+ 1. \`{{handoverDir}}/HANDOVER.md\` - Current pipeline state and context
55
+ 2. \`{{handoverDir}}/execution-log.md\` - Execution history
56
+
57
+ ### Previous Stage Outputs
58
+ {{previousStagesSection}}
59
+
60
+ ### Your Output Requirements
61
+ When you complete your task, save your output to:
62
+ \`{{handoverDir}}/stages/{{stageName}}/output.md\`
63
+
64
+ > **Note:** This is an absolute path. You have permission to write here regardless of your current working directory.
65
+
66
+ Use this format:
67
+ \`\`\`markdown
68
+ # Stage: {{stageName}}
69
+
70
+ ## Summary
71
+ {1-2 sentences: what you accomplished}
72
+
73
+ ## Key Outputs
74
+ {bullet points of important results}
75
+
76
+ ## Files Created/Modified
77
+ {list files you changed}
78
+
79
+ ## Notes for Next Stage
80
+ {context the next agent needs}
81
+ \`\`\`
82
+
83
+ The orchestrator will update HANDOVER.md and execution-log.md automatically.
84
+ `;
85
+ }
86
+ getBuiltInLoopTemplate() {
87
+ return `## Pipeline Looping
88
+
89
+ This pipeline is running in LOOP MODE. You are in the FINAL stage group.
90
+
91
+ **When to Create a Next Pipeline:**
92
+ Create a pipeline in the pending directory ONLY when:
93
+ 1. You discovered unexpected new work outside your current scope
94
+ 2. You have a task that explicitly calls for the next agent (like "Pass to the next agent")
95
+ 3. You are finishing a phase in a multi-phase plan and more phases remain
96
+ - Create a pipeline for the NEXT PHASE ONLY (not all remaining phases)
97
+
98
+ **When NOT to Create a Next Pipeline:**
99
+ - Your task is complete with no follow-up needed
100
+ - The work is a simple fix that doesn't warrant a new pipeline
101
+ - Subsequent work is better handled by a human
102
+
103
+ **To queue the next pipeline:**
104
+ - Write a valid pipeline YAML to: \`{{pendingDir}}\`
105
+ - Automatically picked up after this pipeline completes
106
+ - Reference: \`.agent-pipeline/pipelines/{{pipelineName}}.yml\`
107
+
108
+ **Loop status:** Iteration {{currentIteration}}/{{maxIterations}}
109
+ `;
110
+ }
111
+ }
112
+ //# sourceMappingURL=instruction-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-loader.js","sourceRoot":"","sources":["../../src/core/instruction-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgB7B,MAAM,OAAO,iBAAiB;IACpB,QAAQ,CAAS;IAEjB,MAAM,CAAU,qBAAqB,GAAG,0CAA0C,CAAC;IACnF,MAAM,CAAU,iBAAiB,GAAG,sCAAsC,CAAC;IAEnF,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAKD,KAAK,CAAC,wBAAwB,CAC5B,UAAmB,EACnB,OAA4B;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CACrC,UAAU,EACV,iBAAiB,CAAC,qBAAqB,EACvC,IAAI,CAAC,0BAA0B,EAAE,CAClC,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAKD,KAAK,CAAC,oBAAoB,CACxB,UAAmB,EACnB,OAA4B;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CACrC,UAAU,EACV,iBAAiB,CAAC,iBAAiB,EACnC,IAAI,CAAC,sBAAsB,EAAE,CAC9B,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAQO,KAAK,CAAC,YAAY,CACxB,UAA8B,EAC9B,WAAmB,EACnB,eAAuB;QAGvB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC1C,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,sCAAsC,UAAU,2BAA2B,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAGD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YAEP,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAKO,WAAW,CAAC,QAAgB,EAAE,OAA2B;QAC/D,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAA+B,CAAC,CAAC;YACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAKO,0BAA0B;QAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCV,CAAC;IACA,CAAC;IAKO,sBAAsB;QAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBV,CAAC;IACA,CAAC"}
@@ -1,8 +1,9 @@
1
+ import { ResolvedLoopingConfig } from '../config/schema.js';
1
2
  export interface LoopSession {
2
3
  sessionId: string;
3
4
  startTime: string;
4
5
  endTime?: string;
5
- status: 'running' | 'completed' | 'failed' | 'limit-reached';
6
+ status: 'running' | 'completed' | 'failed' | 'aborted' | 'limit-reached';
6
7
  maxIterations: number;
7
8
  totalIterations: number;
8
9
  iterations: IterationSummary[];
@@ -10,20 +11,24 @@ export interface LoopSession {
10
11
  export interface IterationSummary {
11
12
  iterationNumber: number;
12
13
  pipelineName: string;
13
- runId: string;
14
- status: 'completed' | 'failed';
15
- duration: number;
16
- triggeredNext: boolean;
14
+ runId?: string;
15
+ status: 'in-progress' | 'completed' | 'failed' | 'aborted';
16
+ duration?: number;
17
+ triggeredNext?: boolean;
17
18
  }
18
19
  export declare class LoopStateManager {
19
20
  private loopsDir;
20
21
  private sessions;
21
22
  constructor(repoPath: string);
22
- startSession(maxIterations: number): LoopSession;
23
+ startSession(maxIterations: number): Promise<LoopSession>;
23
24
  appendIteration(sessionId: string, summary: IterationSummary): Promise<void>;
24
- completeSession(sessionId: string, status: 'completed' | 'failed' | 'limit-reached'): Promise<void>;
25
+ updateIteration(sessionId: string, iterationNumber: number, updates: Partial<IterationSummary>): Promise<boolean>;
26
+ completeSession(sessionId: string, status: 'completed' | 'failed' | 'aborted' | 'limit-reached'): Promise<void>;
25
27
  loadSession(sessionId: string): Promise<LoopSession | null>;
26
28
  getAllSessions(): Promise<LoopSession[]>;
27
29
  private saveSession;
30
+ private getSessionForUpdate;
31
+ createSessionDirectories(sessionId: string, basePath: string): Promise<ResolvedLoopingConfig['directories']>;
32
+ getSessionQueueDir(sessionId: string, basePath: string): string;
28
33
  }
29
34
  //# sourceMappingURL=loop-state-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-state-manager.d.ts","sourceRoot":"","sources":["../../src/core/loop-state-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAuC;gBAE3C,QAAQ,EAAE,MAAM;IAO5B,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW;IAiB1C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5E,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,eAAe,GAC/C,OAAO,CAAC,IAAI,CAAC;IAgBV,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAc3D,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YA2BhC,WAAW;CAM1B"}
1
+ {"version":3,"file":"loop-state-manager.d.ts","sourceRoot":"","sources":["../../src/core/loop-state-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;IACzE,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAuC;gBAE3C,QAAQ,EAAE,MAAM;IAOtB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBzD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5E,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC;IAmBb,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,GAC3D,OAAO,CAAC,IAAI,CAAC;IAgBV,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAc3D,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YA2BhC,WAAW;YAOX,mBAAmB;IAqB3B,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IA8BhD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGhE"}
@@ -7,7 +7,7 @@ export class LoopStateManager {
7
7
  constructor(repoPath) {
8
8
  this.loopsDir = path.join(repoPath, '.agent-pipeline', 'state', 'loops');
9
9
  }
10
- startSession(maxIterations) {
10
+ async startSession(maxIterations) {
11
11
  const session = {
12
12
  sessionId: randomUUID(),
13
13
  startTime: new Date().toISOString(),
@@ -17,10 +17,11 @@ export class LoopStateManager {
17
17
  iterations: []
18
18
  };
19
19
  this.sessions.set(session.sessionId, session);
20
+ await this.saveSession(session);
20
21
  return session;
21
22
  }
22
23
  async appendIteration(sessionId, summary) {
23
- const session = this.sessions.get(sessionId);
24
+ const session = await this.getSessionForUpdate(sessionId);
24
25
  if (!session) {
25
26
  throw new Error(`Loop session not found: ${sessionId}`);
26
27
  }
@@ -28,8 +29,21 @@ export class LoopStateManager {
28
29
  session.totalIterations = session.iterations.length;
29
30
  await this.saveSession(session);
30
31
  }
32
+ async updateIteration(sessionId, iterationNumber, updates) {
33
+ const session = await this.getSessionForUpdate(sessionId);
34
+ if (!session) {
35
+ throw new Error(`Loop session not found: ${sessionId}`);
36
+ }
37
+ const index = session.iterations.findIndex((iteration) => iteration.iterationNumber === iterationNumber);
38
+ if (index === -1) {
39
+ return false;
40
+ }
41
+ session.iterations[index] = { ...session.iterations[index], ...updates };
42
+ await this.saveSession(session);
43
+ return true;
44
+ }
31
45
  async completeSession(sessionId, status) {
32
- const session = this.sessions.get(sessionId);
46
+ const session = await this.getSessionForUpdate(sessionId);
33
47
  if (!session) {
34
48
  throw new Error(`Loop session not found: ${sessionId}`);
35
49
  }
@@ -74,5 +88,37 @@ export class LoopStateManager {
74
88
  const filePath = path.join(this.loopsDir, `${session.sessionId}.json`);
75
89
  await fs.writeFile(filePath, JSON.stringify(session, null, 2), 'utf-8');
76
90
  }
91
+ async getSessionForUpdate(sessionId) {
92
+ const cached = this.sessions.get(sessionId);
93
+ if (cached) {
94
+ return cached;
95
+ }
96
+ const loaded = await this.loadSession(sessionId);
97
+ if (loaded) {
98
+ this.sessions.set(sessionId, loaded);
99
+ }
100
+ return loaded;
101
+ }
102
+ async createSessionDirectories(sessionId, basePath) {
103
+ const sessionDir = path.join(basePath, '.agent-pipeline', 'loops', sessionId);
104
+ const dirs = {
105
+ pending: path.join(sessionDir, 'pending'),
106
+ running: path.join(sessionDir, 'running'),
107
+ finished: path.join(sessionDir, 'finished'),
108
+ failed: path.join(sessionDir, 'failed'),
109
+ };
110
+ await Promise.all(Object.values(dirs).map(d => fs.mkdir(d, { recursive: true })));
111
+ const gitignorePath = path.join(sessionDir, '.gitignore');
112
+ try {
113
+ await fs.access(gitignorePath);
114
+ }
115
+ catch {
116
+ await fs.writeFile(gitignorePath, '# Ignore loop queue contents\n*\n!.gitignore\n');
117
+ }
118
+ return dirs;
119
+ }
120
+ getSessionQueueDir(sessionId, basePath) {
121
+ return path.join(basePath, '.agent-pipeline', 'loops', sessionId);
122
+ }
77
123
  }
78
124
  //# sourceMappingURL=loop-state-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-state-manager.js","sourceRoot":"","sources":["../../src/core/loop-state-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-state-manager.js","sourceRoot":"","sources":["../../src/core/loop-state-manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { AgentStageConfig, StageExecution, PipelineState } from '../config/schema.js';
2
2
  import { StageExecutor } from './stage-executor.js';
3
+ import { PipelineAbortController } from './abort-controller.js';
3
4
  export interface ParallelExecutionResult {
4
5
  executions: StageExecution[];
5
6
  allSucceeded: boolean;
@@ -9,13 +10,21 @@ export interface ParallelExecutionResult {
9
10
  export declare class ParallelExecutor {
10
11
  private stageExecutor;
11
12
  private onStateChange?;
12
- constructor(stageExecutor: StageExecutor, onStateChange?: ((state: PipelineState) => void) | undefined);
13
+ private abortController?;
14
+ constructor(stageExecutor: StageExecutor, onStateChange?: ((state: PipelineState) => void) | undefined, abortController?: PipelineAbortController | undefined);
13
15
  private emitStateChange;
16
+ private isAborted;
14
17
  private createFailedExecution;
15
18
  private createStageCallback;
16
19
  private buildExecutionResult;
17
- executeParallelGroup(stages: AgentStageConfig[], pipelineState: PipelineState, onOutputUpdate?: (stageName: string, output: string) => void): Promise<ParallelExecutionResult>;
18
- executeSequentialGroup(stages: AgentStageConfig[], pipelineState: PipelineState, onOutputUpdate?: (stageName: string, output: string) => void): Promise<ParallelExecutionResult>;
20
+ private addRunningStage;
21
+ private updateStageInState;
22
+ executeParallelGroup(stages: AgentStageConfig[], pipelineState: PipelineState, onOutputUpdate?: (stageName: string, output: string) => void, groupContext?: {
23
+ isFinalGroup: boolean;
24
+ }): Promise<ParallelExecutionResult>;
25
+ executeSequentialGroup(stages: AgentStageConfig[], pipelineState: PipelineState, onOutputUpdate?: (stageName: string, output: string) => void, groupContext?: {
26
+ isFinalGroup: boolean;
27
+ }): Promise<ParallelExecutionResult>;
19
28
  aggregateResults(result: ParallelExecutionResult): string;
20
29
  }
21
30
  //# sourceMappingURL=parallel-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parallel-executor.d.ts","sourceRoot":"","sources":["../../src/core/parallel-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa,CAAC;gBADd,aAAa,EAAE,aAAa,EAC5B,aAAa,CAAC,GAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,aAAA;IAGxD,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAwBtB,oBAAoB,CACxB,MAAM,EAAE,gBAAgB,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAC3D,OAAO,CAAC,uBAAuB,CAAC;IA8C7B,sBAAsB,CAC1B,MAAM,EAAE,gBAAgB,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAC3D,OAAO,CAAC,uBAAuB,CAAC;IA4BnC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;CAO1D"}
1
+ {"version":3,"file":"parallel-executor.d.ts","sourceRoot":"","sources":["../../src/core/parallel-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAsB,MAAM,uBAAuB,CAAC;AAEpF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,eAAe,CAAC;gBAFhB,aAAa,EAAE,aAAa,EAC5B,aAAa,CAAC,GAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,aAAA,EAC9C,eAAe,CAAC,EAAE,uBAAuB,YAAA;IAGnD,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,kBAAkB;IAoBpB,oBAAoB,CACxB,MAAM,EAAE,gBAAgB,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC5D,YAAY,CAAC,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,GACvC,OAAO,CAAC,uBAAuB,CAAC;IA2E7B,sBAAsB,CAC1B,MAAM,EAAE,gBAAgB,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC5D,YAAY,CAAC,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,GACvC,OAAO,CAAC,uBAAuB,CAAC;IAyEnC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM;CAO1D"}