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.
- package/CLAUDE.md +2 -3
- package/README.md +110 -55
- package/dist/cli/commands/agent/info.js +1 -1
- package/dist/cli/commands/agent/info.js.map +1 -1
- package/dist/cli/commands/agent/list.js +1 -1
- package/dist/cli/commands/agent/list.js.map +1 -1
- package/dist/cli/commands/agent/pull.d.ts +1 -0
- package/dist/cli/commands/agent/pull.d.ts.map +1 -1
- package/dist/cli/commands/agent/pull.js +67 -44
- package/dist/cli/commands/agent/pull.js.map +1 -1
- package/dist/cli/commands/cleanup.d.ts +4 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +197 -37
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/history.d.ts.map +1 -1
- package/dist/cli/commands/history.js +3 -22
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +10 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +88 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli/commands/init.d.ts +1 -6
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +173 -58
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/loop-context.d.ts +2 -0
- package/dist/cli/commands/loop-context.d.ts.map +1 -0
- package/dist/cli/commands/loop-context.js +88 -0
- package/dist/cli/commands/loop-context.js.map +1 -0
- package/dist/cli/commands/pipeline/create.d.ts.map +1 -1
- package/dist/cli/commands/pipeline/create.js +156 -68
- package/dist/cli/commands/pipeline/create.js.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +29 -5
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +9 -0
- package/dist/cli/commands/schema.d.ts.map +1 -0
- package/dist/cli/commands/schema.js +541 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +0 -6
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help/index.d.ts +6 -0
- package/dist/cli/help/index.d.ts.map +1 -0
- package/dist/cli/help/index.js +538 -0
- package/dist/cli/help/index.js.map +1 -0
- package/dist/cli/help/types.d.ts +22 -0
- package/dist/cli/help/types.d.ts.map +1 -0
- package/dist/cli/help/types.js +2 -0
- package/dist/cli/help/types.js.map +1 -0
- package/dist/cli/hooks.d.ts +5 -1
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +106 -12
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/templates/agents/code-review-agents/code-reviewer.md +46 -0
- package/dist/cli/templates/agents/code-review-agents/memory-doc-updater.md +189 -0
- package/dist/cli/templates/agents/code-review-agents/quality-checker.md +52 -0
- package/dist/cli/templates/agents/frontend-agents/brutalist_purist.md +563 -0
- package/dist/cli/templates/agents/frontend-agents/cyberpunk_hacker.md +824 -0
- package/dist/cli/templates/agents/frontend-agents/frontend-pipeline-ref.md +32 -0
- package/dist/cli/templates/agents/frontend-agents/indie_game_dev.md +715 -0
- package/dist/cli/templates/agents/frontend-agents/luxury_editorial.md +628 -0
- package/dist/cli/templates/agents/frontend-agents/product_owner.md +159 -0
- package/dist/cli/templates/agents/frontend-agents/retro_90s_webmaster.md +385 -0
- package/dist/cli/templates/agents/frontend-agents/showcase.md +362 -0
- package/dist/cli/templates/agents/frontend-agents/swiss_modernist.md +716 -0
- package/dist/cli/templates/agents/loop-agents/socratic-explorer.md +91 -0
- package/dist/cli/templates/instructions/handover.md +40 -0
- package/dist/cli/templates/instructions/loop.md +35 -0
- package/dist/cli/templates/pipelines/front-end-parallel-example.yml +81 -0
- package/dist/cli/templates/pipelines/loop-example.yml +25 -0
- package/dist/cli/templates/pipelines/post-commit-example.yml +49 -58
- package/dist/cli/templates/schema/pipeline-config.schema.json +400 -0
- package/dist/cli/templates/schema/pipeline-config.schema.yaml +301 -0
- package/dist/cli/utils/agent-importer.d.ts +1 -0
- package/dist/cli/utils/agent-importer.d.ts.map +1 -1
- package/dist/cli/utils/agent-importer.js +67 -0
- package/dist/cli/utils/agent-importer.js.map +1 -1
- package/dist/cli/utils/interactive-prompts.d.ts +4 -0
- package/dist/cli/utils/interactive-prompts.d.ts.map +1 -1
- package/dist/cli/utils/interactive-prompts.js +59 -13
- package/dist/cli/utils/interactive-prompts.js.map +1 -1
- package/dist/config/pipeline-loader.d.ts +4 -1
- package/dist/config/pipeline-loader.d.ts.map +1 -1
- package/dist/config/pipeline-loader.js +58 -0
- package/dist/config/pipeline-loader.js.map +1 -1
- package/dist/config/schema.d.ts +65 -35
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/abort-controller.d.ts +16 -0
- package/dist/core/abort-controller.d.ts.map +1 -0
- package/dist/core/abort-controller.js +52 -0
- package/dist/core/abort-controller.js.map +1 -0
- package/dist/core/agent-query-runner.d.ts +0 -1
- package/dist/core/agent-query-runner.d.ts.map +1 -1
- package/dist/core/agent-query-runner.js +0 -22
- package/dist/core/agent-query-runner.js.map +1 -1
- package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts +5 -1
- package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts.map +1 -1
- package/dist/core/agent-runtimes/claude-code-headless-runtime.js +127 -12
- package/dist/core/agent-runtimes/claude-code-headless-runtime.js.map +1 -1
- package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts +0 -2
- package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts.map +1 -1
- package/dist/core/agent-runtimes/claude-sdk-runtime.js +1 -22
- package/dist/core/agent-runtimes/claude-sdk-runtime.js.map +1 -1
- package/dist/core/branch-manager.d.ts +3 -1
- package/dist/core/branch-manager.d.ts.map +1 -1
- package/dist/core/branch-manager.js +11 -1
- package/dist/core/branch-manager.js.map +1 -1
- package/dist/core/git-manager.d.ts +17 -1
- package/dist/core/git-manager.d.ts.map +1 -1
- package/dist/core/git-manager.js +147 -3
- package/dist/core/git-manager.js.map +1 -1
- package/dist/core/group-execution-orchestrator.d.ts +7 -13
- package/dist/core/group-execution-orchestrator.d.ts.map +1 -1
- package/dist/core/group-execution-orchestrator.js +53 -142
- package/dist/core/group-execution-orchestrator.js.map +1 -1
- package/dist/core/handover-manager.d.ts +24 -0
- package/dist/core/handover-manager.d.ts.map +1 -0
- package/dist/core/handover-manager.js +214 -0
- package/dist/core/handover-manager.js.map +1 -0
- package/dist/core/instruction-loader.d.ts +23 -0
- package/dist/core/instruction-loader.d.ts.map +1 -0
- package/dist/core/instruction-loader.js +112 -0
- package/dist/core/instruction-loader.js.map +1 -0
- package/dist/core/loop-state-manager.d.ts +12 -7
- package/dist/core/loop-state-manager.d.ts.map +1 -1
- package/dist/core/loop-state-manager.js +49 -3
- package/dist/core/loop-state-manager.js.map +1 -1
- package/dist/core/parallel-executor.d.ts +12 -3
- package/dist/core/parallel-executor.d.ts.map +1 -1
- package/dist/core/parallel-executor.js +92 -14
- package/dist/core/parallel-executor.js.map +1 -1
- package/dist/core/pipeline-finalizer.d.ts +12 -4
- package/dist/core/pipeline-finalizer.d.ts.map +1 -1
- package/dist/core/pipeline-finalizer.js +244 -33
- package/dist/core/pipeline-finalizer.js.map +1 -1
- package/dist/core/pipeline-initializer.d.ts +13 -5
- package/dist/core/pipeline-initializer.d.ts.map +1 -1
- package/dist/core/pipeline-initializer.js +53 -25
- package/dist/core/pipeline-initializer.js.map +1 -1
- package/dist/core/pipeline-runner.d.ts +13 -1
- package/dist/core/pipeline-runner.d.ts.map +1 -1
- package/dist/core/pipeline-runner.js +352 -60
- package/dist/core/pipeline-runner.js.map +1 -1
- package/dist/core/pr-creator.d.ts +0 -1
- package/dist/core/pr-creator.d.ts.map +1 -1
- package/dist/core/pr-creator.js +12 -4
- package/dist/core/pr-creator.js.map +1 -1
- package/dist/core/stage-executor.d.ts +17 -9
- package/dist/core/stage-executor.d.ts.map +1 -1
- package/dist/core/stage-executor.js +152 -166
- package/dist/core/stage-executor.js.map +1 -1
- package/dist/core/types/agent-runtime.d.ts +3 -2
- package/dist/core/types/agent-runtime.d.ts.map +1 -1
- package/dist/core/worktree-manager.d.ts +21 -0
- package/dist/core/worktree-manager.d.ts.map +1 -0
- package/dist/core/worktree-manager.js +133 -0
- package/dist/core/worktree-manager.js.map +1 -0
- package/dist/index.js +118 -112
- package/dist/index.js.map +1 -1
- package/dist/notifications/notification-manager.d.ts +1 -0
- package/dist/notifications/notification-manager.d.ts.map +1 -1
- package/dist/notifications/notification-manager.js +17 -3
- package/dist/notifications/notification-manager.js.map +1 -1
- package/dist/notifications/notifiers/local-notifier.d.ts.map +1 -1
- package/dist/notifications/notifiers/local-notifier.js +5 -2
- package/dist/notifications/notifiers/local-notifier.js.map +1 -1
- package/dist/notifications/notifiers/slack-notifier.d.ts.map +1 -1
- package/dist/notifications/notifiers/slack-notifier.js +39 -8
- package/dist/notifications/notifiers/slack-notifier.js.map +1 -1
- package/dist/notifications/types.d.ts +1 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/ui/components/execution-group.d.ts.map +1 -1
- package/dist/ui/components/execution-group.js +1 -1
- package/dist/ui/components/execution-group.js.map +1 -1
- package/dist/ui/components/interactive-summary.d.ts +9 -0
- package/dist/ui/components/interactive-summary.d.ts.map +1 -0
- package/dist/ui/components/interactive-summary.js +166 -0
- package/dist/ui/components/interactive-summary.js.map +1 -0
- package/dist/ui/components/keyboard-hints.d.ts +12 -0
- package/dist/ui/components/keyboard-hints.d.ts.map +1 -0
- package/dist/ui/components/keyboard-hints.js +13 -0
- package/dist/ui/components/keyboard-hints.js.map +1 -0
- package/dist/ui/components/live-timer.d.ts +9 -0
- package/dist/ui/components/live-timer.d.ts.map +1 -0
- package/dist/ui/components/live-timer.js +25 -0
- package/dist/ui/components/live-timer.js.map +1 -0
- package/dist/ui/components/loop-iteration-history.d.ts +8 -0
- package/dist/ui/components/loop-iteration-history.d.ts.map +1 -0
- package/dist/ui/components/loop-iteration-history.js +106 -0
- package/dist/ui/components/loop-iteration-history.js.map +1 -0
- package/dist/ui/components/loop-session-summary.d.ts +9 -0
- package/dist/ui/components/loop-session-summary.d.ts.map +1 -0
- package/dist/ui/components/loop-session-summary.js +39 -0
- package/dist/ui/components/loop-session-summary.js.map +1 -0
- package/dist/ui/components/stage-row.d.ts +0 -1
- package/dist/ui/components/stage-row.d.ts.map +1 -1
- package/dist/ui/components/stage-row.js +5 -15
- package/dist/ui/components/stage-row.js.map +1 -1
- package/dist/ui/components/status-badge.d.ts.map +1 -1
- package/dist/ui/components/status-badge.js +1 -0
- package/dist/ui/components/status-badge.js.map +1 -1
- package/dist/ui/pipeline-ui.d.ts +1 -0
- package/dist/ui/pipeline-ui.d.ts.map +1 -1
- package/dist/ui/pipeline-ui.js +22 -18
- package/dist/ui/pipeline-ui.js.map +1 -1
- package/dist/utils/error-factory.d.ts.map +1 -1
- package/dist/utils/error-factory.js +10 -2
- package/dist/utils/error-factory.js.map +1 -1
- package/dist/utils/pipeline-formatter.d.ts +8 -2
- package/dist/utils/pipeline-formatter.d.ts.map +1 -1
- package/dist/utils/pipeline-formatter.js +30 -26
- package/dist/utils/pipeline-formatter.js.map +1 -1
- package/dist/utils/pipeline-logger.d.ts +19 -0
- package/dist/utils/pipeline-logger.d.ts.map +1 -0
- package/dist/utils/pipeline-logger.js +80 -0
- package/dist/utils/pipeline-logger.js.map +1 -0
- package/dist/utils/platform-opener.d.ts +4 -0
- package/dist/utils/platform-opener.d.ts.map +1 -0
- package/dist/utils/platform-opener.js +52 -0
- package/dist/utils/platform-opener.js.map +1 -0
- package/dist/validators/agent-validator.d.ts +10 -0
- package/dist/validators/agent-validator.d.ts.map +1 -0
- package/dist/validators/agent-validator.js +87 -0
- package/dist/validators/agent-validator.js.map +1 -0
- package/dist/validators/dag-validator.d.ts +9 -0
- package/dist/validators/dag-validator.d.ts.map +1 -0
- package/dist/validators/dag-validator.js +51 -0
- package/dist/validators/dag-validator.js.map +1 -0
- package/dist/validators/environment-validator.d.ts +9 -0
- package/dist/validators/environment-validator.d.ts.map +1 -0
- package/dist/validators/environment-validator.js +35 -0
- package/dist/validators/environment-validator.js.map +1 -0
- package/dist/validators/execution-validator.d.ts +8 -0
- package/dist/validators/execution-validator.d.ts.map +1 -0
- package/dist/validators/execution-validator.js +51 -0
- package/dist/validators/execution-validator.js.map +1 -0
- package/dist/validators/git-validator.d.ts +13 -0
- package/dist/validators/git-validator.d.ts.map +1 -0
- package/dist/validators/git-validator.js +135 -0
- package/dist/validators/git-validator.js.map +1 -0
- package/dist/validators/notification-validator.d.ts +8 -0
- package/dist/validators/notification-validator.d.ts.map +1 -0
- package/dist/validators/notification-validator.js +27 -0
- package/dist/validators/notification-validator.js.map +1 -0
- package/dist/validators/pipeline-validator.d.ts +3 -26
- package/dist/validators/pipeline-validator.d.ts.map +1 -1
- package/dist/validators/pipeline-validator.js +5 -515
- package/dist/validators/pipeline-validator.js.map +1 -1
- package/dist/validators/retry-validator.d.ts +9 -0
- package/dist/validators/retry-validator.d.ts.map +1 -0
- package/dist/validators/retry-validator.js +34 -0
- package/dist/validators/retry-validator.js.map +1 -0
- package/dist/validators/runtime-validator.d.ts +9 -0
- package/dist/validators/runtime-validator.d.ts.map +1 -0
- package/dist/validators/runtime-validator.js +82 -0
- package/dist/validators/runtime-validator.js.map +1 -0
- package/dist/validators/structure-validator.d.ts +8 -0
- package/dist/validators/structure-validator.d.ts.map +1 -0
- package/dist/validators/structure-validator.js +39 -0
- package/dist/validators/structure-validator.js.map +1 -0
- package/dist/validators/types.d.ts +19 -0
- package/dist/validators/types.d.ts.map +1 -0
- package/dist/validators/types.js +2 -0
- package/dist/validators/types.js.map +1 -0
- package/dist/validators/validation-orchestrator.d.ts +9 -0
- package/dist/validators/validation-orchestrator.d.ts.map +1 -0
- package/dist/validators/validation-orchestrator.js +43 -0
- package/dist/validators/validation-orchestrator.js.map +1 -0
- package/package.json +17 -11
- package/dist/cli/commands/install.d.ts +0 -2
- package/dist/cli/commands/install.d.ts.map +0 -1
- package/dist/cli/commands/install.js +0 -15
- package/dist/cli/commands/install.js.map +0 -1
- package/dist/cli/commands/uninstall.d.ts +0 -2
- package/dist/cli/commands/uninstall.d.ts.map +0 -1
- package/dist/cli/commands/uninstall.js +0 -6
- package/dist/cli/commands/uninstall.js.map +0 -1
- package/dist/cli/templates/agents/cleanup-reporter.md +0 -107
- package/dist/cli/templates/agents/code-reducer.md +0 -51
- package/dist/cli/templates/agents/code-reviewer.md +0 -34
- package/dist/cli/templates/agents/context-reducer.md +0 -94
- package/dist/cli/templates/agents/dependency-auditor.md +0 -127
- package/dist/cli/templates/agents/detective-empath.md +0 -26
- package/dist/cli/templates/agents/detective-linguist.md +0 -26
- package/dist/cli/templates/agents/detective-logician.md +0 -26
- package/dist/cli/templates/agents/detective-skeptic.md +0 -26
- package/dist/cli/templates/agents/detective-statistician.md +0 -26
- package/dist/cli/templates/agents/doc-updater.md +0 -30
- package/dist/cli/templates/agents/judge.md +0 -27
- package/dist/cli/templates/agents/memory-updater.md +0 -72
- package/dist/cli/templates/agents/quality-checker.md +0 -32
- package/dist/cli/templates/agents/security-auditor.md +0 -32
- package/dist/cli/templates/agents/storyteller.md +0 -26
- package/dist/cli/templates/agents/summary.md +0 -32
- package/dist/cli/templates/agents/synthesizer.md +0 -26
- package/dist/cli/templates/pipelines/large-pipeline-example.yml +0 -178
- package/dist/cli/templates/pipelines/post-merge-example.yml +0 -78
- package/dist/cli/templates/pipelines/pre-commit-example.yml +0 -41
- package/dist/cli/templates/pipelines/pre-push-example.yml +0 -51
- package/dist/cli/templates/pipelines/test-pipeline.yml +0 -90
- package/dist/config/project-config-loader.d.ts +0 -11
- package/dist/config/project-config-loader.d.ts.map +0 -1
- package/dist/config/project-config-loader.js +0 -100
- package/dist/config/project-config-loader.js.map +0 -1
- package/dist/core/condition-evaluator.d.ts +0 -16
- package/dist/core/condition-evaluator.d.ts.map +0 -1
- package/dist/core/condition-evaluator.js +0 -121
- package/dist/core/condition-evaluator.js.map +0 -1
- package/dist/core/context-reducer.d.ts +0 -15
- package/dist/core/context-reducer.d.ts.map +0 -1
- package/dist/core/context-reducer.js +0 -224
- package/dist/core/context-reducer.js.map +0 -1
- package/dist/core/output-storage-manager.d.ts +0 -14
- package/dist/core/output-storage-manager.d.ts.map +0 -1
- package/dist/core/output-storage-manager.js +0 -68
- package/dist/core/output-storage-manager.js.map +0 -1
- package/dist/core/output-tool-builder.d.ts +0 -6
- package/dist/core/output-tool-builder.d.ts.map +0 -1
- package/dist/core/output-tool-builder.js +0 -50
- package/dist/core/output-tool-builder.js.map +0 -1
- /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
|
|
14
|
-
status: 'completed' | 'failed';
|
|
15
|
-
duration
|
|
16
|
-
triggeredNext
|
|
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
|
-
|
|
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":"
|
|
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.
|
|
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.
|
|
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":"AAEA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
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;
|
|
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"}
|