agentic-forge 0.0.0 → 0.7.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/LICENSE +21 -21
- package/README.md +64 -24
- package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/SKILL.md +2 -2
- package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/REFERENCE.md +9 -3
- package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/workflow-example.yaml +15 -8
- package/dist/checkpoints/manager.d.ts +5 -0
- package/dist/checkpoints/manager.js +87 -0
- package/dist/checkpoints/manager.js.map +1 -0
- package/{src → dist}/claude/.claude/skills/analyze/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/create-checkpoint/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/create-log/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/fix-analyze/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/git-branch/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/git-commit/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/git-pr/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/sdlc-plan/SKILL.md +1 -1
- package/{src → dist}/claude/.claude/skills/sdlc-review/SKILL.md +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +173 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/authoring-dir.d.ts +2 -0
- package/dist/commands/authoring-dir.js +9 -0
- package/dist/commands/authoring-dir.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +2 -0
- package/dist/commands/config-cmd.js +30 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/{src/commands/index.ts → dist/commands/index.d.ts} +2 -10
- package/dist/commands/index.js +14 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.js +83 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/release-notes.d.ts +5 -0
- package/dist/commands/release-notes.js +68 -0
- package/dist/commands/release-notes.js.map +1 -0
- package/dist/commands/resume.d.ts +5 -0
- package/dist/commands/resume.js +79 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/run.d.ts +27 -0
- package/dist/commands/run.js +243 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/shortcuts.d.ts +2 -0
- package/dist/commands/shortcuts.js +11 -0
- package/dist/commands/shortcuts.js.map +1 -0
- package/dist/commands/skills-dir.d.ts +2 -0
- package/dist/commands/skills-dir.js +9 -0
- package/dist/commands/skills-dir.js.map +1 -0
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.js +65 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.js +26 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/workflows.d.ts +4 -0
- package/dist/commands/workflows.js +111 -0
- package/dist/commands/workflows.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +110 -0
- package/dist/config.js.map +1 -0
- package/dist/console.d.ts +103 -0
- package/dist/console.js +670 -0
- package/dist/console.js.map +1 -0
- package/dist/executor.d.ts +27 -0
- package/dist/executor.js +236 -0
- package/dist/executor.js.map +1 -0
- package/dist/git/worktree.d.ts +23 -0
- package/dist/git/worktree.js +170 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/logging/logger.d.ts +27 -0
- package/dist/logging/logger.js +69 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/orchestrator.d.ts +44 -0
- package/dist/orchestrator.js +587 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/parser.d.ts +17 -0
- package/dist/parser.js +184 -0
- package/dist/parser.js.map +1 -0
- package/dist/progress.d.ts +29 -0
- package/dist/progress.js +275 -0
- package/dist/progress.js.map +1 -0
- package/dist/ralph-loop.d.ts +26 -0
- package/dist/ralph-loop.js +194 -0
- package/dist/ralph-loop.js.map +1 -0
- package/dist/renderer.d.ts +15 -0
- package/dist/renderer.js +123 -0
- package/dist/renderer.js.map +1 -0
- package/dist/runner.d.ts +84 -0
- package/dist/runner.js +529 -0
- package/dist/runner.js.map +1 -0
- package/dist/signal-manager.d.ts +16 -0
- package/dist/signal-manager.js +50 -0
- package/dist/signal-manager.js.map +1 -0
- package/dist/steps/base.d.ts +28 -0
- package/dist/steps/base.js +23 -0
- package/dist/steps/base.js.map +1 -0
- package/dist/steps/conditional-step.d.ts +12 -0
- package/dist/steps/conditional-step.js +106 -0
- package/dist/steps/conditional-step.js.map +1 -0
- package/{src/steps/index.ts → dist/steps/index.d.ts} +1 -9
- package/dist/steps/index.js +8 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/parallel-step.d.ts +11 -0
- package/dist/steps/parallel-step.js +166 -0
- package/dist/steps/parallel-step.js.map +1 -0
- package/dist/steps/prompt-step.d.ts +8 -0
- package/dist/steps/prompt-step.js +94 -0
- package/dist/steps/prompt-step.js.map +1 -0
- package/dist/steps/ralph-loop-step.d.ts +8 -0
- package/dist/steps/ralph-loop-step.js +132 -0
- package/dist/steps/ralph-loop-step.js.map +1 -0
- package/dist/steps/serial-step.d.ts +10 -0
- package/dist/steps/serial-step.js +57 -0
- package/dist/steps/serial-step.js.map +1 -0
- package/dist/types.d.ts +118 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +59 -2
- package/.gitattributes +0 -24
- package/.github/workflows/ci.yml +0 -70
- package/.markdownlint-cli2.jsonc +0 -16
- package/.prettierignore +0 -3
- package/.prettierrc +0 -6
- package/.vscode/agentic-forge.code-workspace +0 -26
- package/CHANGELOG.md +0 -100
- package/CLAUDE.md +0 -158
- package/CONTRIBUTING.md +0 -152
- package/biome.json +0 -21
- package/scripts/copy-assets.js +0 -21
- package/src/checkpoints/manager.ts +0 -119
- package/src/cli.ts +0 -182
- package/src/commands/config-cmd.ts +0 -28
- package/src/commands/init.ts +0 -96
- package/src/commands/release-notes.ts +0 -85
- package/src/commands/resume.ts +0 -103
- package/src/commands/run.ts +0 -234
- package/src/commands/shortcuts.ts +0 -11
- package/src/commands/skills-dir.ts +0 -11
- package/src/commands/status.ts +0 -112
- package/src/commands/update.ts +0 -64
- package/src/commands/version.ts +0 -27
- package/src/commands/workflows.ts +0 -129
- package/src/config.ts +0 -129
- package/src/console.ts +0 -790
- package/src/executor.ts +0 -354
- package/src/git/worktree.ts +0 -236
- package/src/logging/logger.ts +0 -95
- package/src/orchestrator.ts +0 -815
- package/src/parser.ts +0 -225
- package/src/progress.ts +0 -306
- package/src/ralph-loop.ts +0 -260
- package/src/renderer.ts +0 -164
- package/src/runner.ts +0 -634
- package/src/signal-manager.ts +0 -55
- package/src/steps/base.ts +0 -71
- package/src/steps/conditional-step.ts +0 -144
- package/src/steps/parallel-step.ts +0 -213
- package/src/steps/prompt-step.ts +0 -121
- package/src/steps/ralph-loop-step.ts +0 -186
- package/src/steps/serial-step.ts +0 -84
- package/src/types.ts +0 -141
- package/tests/config.test.ts +0 -219
- package/tests/console.test.ts +0 -506
- package/tests/executor.test.ts +0 -339
- package/tests/init.test.ts +0 -86
- package/tests/logger.test.ts +0 -110
- package/tests/parser.test.ts +0 -290
- package/tests/progress.test.ts +0 -345
- package/tests/ralph-loop.test.ts +0 -418
- package/tests/renderer.test.ts +0 -350
- package/tests/runner.test.ts +0 -497
- package/tests/setup.test.ts +0 -7
- package/tests/signal-manager.test.ts +0 -26
- package/tests/steps.test.ts +0 -412
- package/tests/worktree.test.ts +0 -411
- package/tsconfig.json +0 -18
- package/vitest.config.ts +0 -8
- /package/{src → dist}/agents/explorer.md +0 -0
- /package/{src → dist}/agents/reviewer.md +0 -0
- /package/{src → dist}/claude/.claude/skills/analyze/references/bug.md +0 -0
- /package/{src → dist}/claude/.claude/skills/analyze/references/debt.md +0 -0
- /package/{src → dist}/claude/.claude/skills/analyze/references/doc.md +0 -0
- /package/{src → dist}/claude/.claude/skills/analyze/references/security.md +0 -0
- /package/{src → dist}/claude/.claude/skills/analyze/references/style.md +0 -0
- /package/{src → dist}/claude/.claude/skills/orchestrate/SKILL.md +0 -0
- /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/bug.md +0 -0
- /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/chore.md +0 -0
- /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/feature.md +0 -0
- /package/{src → dist}/prompts/agentic-system.md +0 -0
- /package/{src → dist}/templates/analysis/bug.md.j2 +0 -0
- /package/{src → dist}/templates/analysis/debt.md.j2 +0 -0
- /package/{src → dist}/templates/analysis/doc.md.j2 +0 -0
- /package/{src → dist}/templates/analysis/security.md.j2 +0 -0
- /package/{src → dist}/templates/analysis/style.md.j2 +0 -0
- /package/{src → dist}/templates/analysis-summary.md.j2 +0 -0
- /package/{src → dist}/templates/checkpoint.md.j2 +0 -0
- /package/{src → dist}/templates/implementation-report.md.j2 +0 -0
- /package/{src → dist}/templates/memory.md.j2 +0 -0
- /package/{src → dist}/templates/plan-bug.md.j2 +0 -0
- /package/{src → dist}/templates/plan-chore.md.j2 +0 -0
- /package/{src → dist}/templates/plan-feature.md.j2 +0 -0
- /package/{src → dist}/templates/progress.json.j2 +0 -0
- /package/{src → dist}/templates/ralph-report.md.j2 +0 -0
- /package/{src → dist}/workflows/analyze-codebase-merge.yaml +0 -0
- /package/{src → dist}/workflows/analyze-codebase.yaml +0 -0
- /package/{src → dist}/workflows/analyze-single.yaml +0 -0
- /package/{src → dist}/workflows/demo.yaml +0 -0
- /package/{src → dist}/workflows/one-shot.yaml +0 -0
- /package/{src → dist}/workflows/plan-build-review.yaml +0 -0
- /package/{src → dist}/workflows/ralph-loop.yaml +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Config command handler. */
|
|
2
|
+
import { getConfigValue, setConfigValue } from "../config.js";
|
|
3
|
+
export function cmdConfig(configCommand, key, value) {
|
|
4
|
+
if (configCommand === "get") {
|
|
5
|
+
const result = getConfigValue(key);
|
|
6
|
+
if (result === null) {
|
|
7
|
+
process.stderr.write(`Key not found: ${key}\n`);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
if (typeof result === "object" && result !== null) {
|
|
11
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
process.stdout.write(`${result}\n`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else if (configCommand === "set") {
|
|
18
|
+
if (value === undefined) {
|
|
19
|
+
process.stderr.write("Usage: agentic-forge config set <key> <value>\n");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
setConfigValue(key, value);
|
|
23
|
+
process.stdout.write(`Set ${key} = ${value}\n`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
process.stderr.write("Usage: agentic-forge config get|set <key> [value]\n");
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=config-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,SAAS,CAAC,aAAqB,EAAE,GAAW,EAAE,KAAc;IAC3E,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;SAAM,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
/** Command handler exports. */
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
cmdRun,
|
|
5
|
-
discoverWorkflow,
|
|
6
|
-
listAvailableWorkflows,
|
|
7
|
-
resolveWorkflowPath,
|
|
8
|
-
getBundledWorkflowsDir,
|
|
9
|
-
getUserWorkflowsDir,
|
|
10
|
-
getProjectWorkflowsDir,
|
|
11
|
-
} from "./run.js";
|
|
2
|
+
export { CliExitError, cmdRun, discoverWorkflow, listAvailableWorkflows, resolveWorkflowPath, getBundledWorkflowsDir, getUserWorkflowsDir, getProjectWorkflowsDir, } from "./run.js";
|
|
12
3
|
export { cmdResume } from "./resume.js";
|
|
13
4
|
export { cmdStatus, cmdCancel, cmdList } from "./status.js";
|
|
14
5
|
export { cmdInit, cmdConfigure } from "./init.js";
|
|
@@ -17,5 +8,6 @@ export { cmdVersion, getVersion } from "./version.js";
|
|
|
17
8
|
export { cmdUpdate } from "./update.js";
|
|
18
9
|
export { cmdReleaseNotes } from "./release-notes.js";
|
|
19
10
|
export { cmdSkillsDir } from "./skills-dir.js";
|
|
11
|
+
export { cmdAuthoringDir } from "./authoring-dir.js";
|
|
20
12
|
export { cmdWorkflows } from "./workflows.js";
|
|
21
13
|
export { cmdInput } from "./shortcuts.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Command handler exports. */
|
|
2
|
+
export { CliExitError, cmdRun, discoverWorkflow, listAvailableWorkflows, resolveWorkflowPath, getBundledWorkflowsDir, getUserWorkflowsDir, getProjectWorkflowsDir, } from "./run.js";
|
|
3
|
+
export { cmdResume } from "./resume.js";
|
|
4
|
+
export { cmdStatus, cmdCancel, cmdList } from "./status.js";
|
|
5
|
+
export { cmdInit, cmdConfigure } from "./init.js";
|
|
6
|
+
export { cmdConfig } from "./config-cmd.js";
|
|
7
|
+
export { cmdVersion, getVersion } from "./version.js";
|
|
8
|
+
export { cmdUpdate } from "./update.js";
|
|
9
|
+
export { cmdReleaseNotes } from "./release-notes.js";
|
|
10
|
+
export { cmdSkillsDir } from "./skills-dir.js";
|
|
11
|
+
export { cmdAuthoringDir } from "./authoring-dir.js";
|
|
12
|
+
export { cmdWorkflows } from "./workflows.js";
|
|
13
|
+
export { cmdInput } from "./shortcuts.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EACN,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Init and configure command handlers. */
|
|
2
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { getDefaultConfig, loadConfig } from "../config.js";
|
|
5
|
+
import { getBundledWorkflowsDir } from "./run.js";
|
|
6
|
+
export function cmdInit(options) {
|
|
7
|
+
const bundledDir = getBundledWorkflowsDir();
|
|
8
|
+
if (!existsSync(bundledDir)) {
|
|
9
|
+
process.stderr.write("Error: Bundled workflows directory not found.\n");
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const bundledWorkflows = readdirSync(bundledDir)
|
|
13
|
+
.filter((f) => f.endsWith(".yaml"))
|
|
14
|
+
.sort();
|
|
15
|
+
if (bundledWorkflows.length === 0) {
|
|
16
|
+
process.stderr.write("No bundled workflows found.\n");
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// List only mode
|
|
20
|
+
if (options.listOnly) {
|
|
21
|
+
process.stdout.write("Available bundled workflows:\n\n");
|
|
22
|
+
for (const wf of bundledWorkflows) {
|
|
23
|
+
process.stdout.write(` ${wf}\n`);
|
|
24
|
+
}
|
|
25
|
+
process.stdout.write("\nUse 'agentic-forge init' to copy these to agentic/workflows/\n");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Copy workflows to local directory
|
|
29
|
+
const targetDir = path.join(process.cwd(), "agentic", "workflows");
|
|
30
|
+
mkdirSync(targetDir, { recursive: true });
|
|
31
|
+
const copied = [];
|
|
32
|
+
const skipped = [];
|
|
33
|
+
for (const wf of bundledWorkflows) {
|
|
34
|
+
const targetPath = path.join(targetDir, wf);
|
|
35
|
+
if (existsSync(targetPath) && !options.force) {
|
|
36
|
+
skipped.push(wf);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
copyFileSync(path.join(bundledDir, wf), targetPath);
|
|
40
|
+
copied.push(wf);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (copied.length > 0) {
|
|
44
|
+
process.stdout.write(`Copied ${copied.length} workflow(s) to ${targetDir}/\n`);
|
|
45
|
+
for (const name of copied) {
|
|
46
|
+
process.stdout.write(` + ${name}\n`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (skipped.length > 0) {
|
|
50
|
+
process.stdout.write(`\nSkipped ${skipped.length} existing workflow(s):\n`);
|
|
51
|
+
for (const name of skipped) {
|
|
52
|
+
process.stdout.write(` - ${name}\n`);
|
|
53
|
+
}
|
|
54
|
+
process.stdout.write("\nUse --force to overwrite existing files.\n");
|
|
55
|
+
}
|
|
56
|
+
// Create config.json next to workflows
|
|
57
|
+
initConfig(path.join(process.cwd(), "agentic"), options.force ?? false);
|
|
58
|
+
if (copied.length > 0) {
|
|
59
|
+
process.stdout.write("\nYou can now run workflows with:\n");
|
|
60
|
+
process.stdout.write(" agentic-forge run agentic/workflows/<workflow>.yaml\n");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function initConfig(agenticDir, force) {
|
|
64
|
+
const configPath = path.join(agenticDir, "config.json");
|
|
65
|
+
if (existsSync(configPath) && !force) {
|
|
66
|
+
process.stdout.write(`\nConfig already exists: ${configPath}\n`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
mkdirSync(agenticDir, { recursive: true });
|
|
70
|
+
const config = getDefaultConfig();
|
|
71
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
72
|
+
process.stdout.write(`\nCreated config: ${configPath}\n`);
|
|
73
|
+
}
|
|
74
|
+
export function cmdConfigure() {
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
process.stdout.write("Agentic Workflows Configuration\n");
|
|
77
|
+
process.stdout.write(`${"=".repeat(40)}\n`);
|
|
78
|
+
process.stdout.write("\nCurrent settings:\n");
|
|
79
|
+
process.stdout.write(`${JSON.stringify(config, null, 2)}\n`);
|
|
80
|
+
process.stdout.write("\nUse 'agentic-forge config set <key> <value>' to modify settings.\n");
|
|
81
|
+
process.stdout.write("Example: agentic-forge config set defaults.maxRetry 5\n");
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Release notes command handler. */
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
export function cmdReleaseNotes(options) {
|
|
7
|
+
let changelogPath = null;
|
|
8
|
+
// Try to find CHANGELOG.md relative to the package
|
|
9
|
+
const candidate = path.join(__dirname, "..", "..", "CHANGELOG.md");
|
|
10
|
+
if (existsSync(candidate)) {
|
|
11
|
+
changelogPath = candidate;
|
|
12
|
+
}
|
|
13
|
+
// Fallback: try current directory
|
|
14
|
+
if (changelogPath === null) {
|
|
15
|
+
const cwdCandidate = path.join(process.cwd(), "CHANGELOG.md");
|
|
16
|
+
if (existsSync(cwdCandidate)) {
|
|
17
|
+
changelogPath = cwdCandidate;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (changelogPath === null) {
|
|
21
|
+
process.stdout.write("CHANGELOG.md not found\n");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const content = readFileSync(changelogPath, "utf-8");
|
|
25
|
+
if (options.specificVersion) {
|
|
26
|
+
const section = extractVersionSection(content, options.specificVersion);
|
|
27
|
+
if (section) {
|
|
28
|
+
process.stdout.write(`${section.trim()}\n`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
process.stdout.write(`Version ${options.specificVersion} not found in CHANGELOG.md\n`);
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (options.latest) {
|
|
36
|
+
const section = extractLatestVersion(content);
|
|
37
|
+
if (section) {
|
|
38
|
+
process.stdout.write(`${section.trim()}\n`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
process.stdout.write("No version information found in CHANGELOG.md\n");
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
process.stdout.write(content);
|
|
46
|
+
}
|
|
47
|
+
function extractVersionSection(content, version) {
|
|
48
|
+
const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
49
|
+
const pattern = new RegExp(`^## \\[${escaped}\\].*$`, "m");
|
|
50
|
+
const match = pattern.exec(content);
|
|
51
|
+
if (!match) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const start = match.index;
|
|
55
|
+
const nextPattern = /^## \[[\d.]+\]/m;
|
|
56
|
+
const nextMatch = nextPattern.exec(content.slice(match.index + match[0].length));
|
|
57
|
+
const end = nextMatch ? match.index + match[0].length + nextMatch.index : content.length;
|
|
58
|
+
return content.slice(start, end);
|
|
59
|
+
}
|
|
60
|
+
function extractLatestVersion(content) {
|
|
61
|
+
const pattern = /^## \[([\d.]+)\].*$/m;
|
|
62
|
+
const match = pattern.exec(content);
|
|
63
|
+
if (!match) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return extractVersionSection(content, match[1]);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=release-notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/commands/release-notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** Resume command handler. */
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { WORKFLOW_STATUS, loadProgress, prepareForResume, saveProgress } from "../progress.js";
|
|
5
|
+
import { discoverWorkflow } from "./run.js";
|
|
6
|
+
export async function cmdResume(options) {
|
|
7
|
+
const { WorkflowExecutor } = await import("../executor.js");
|
|
8
|
+
const { WorkflowParser, WorkflowParseError } = await import("../parser.js");
|
|
9
|
+
const progress = loadProgress(options.workflowId);
|
|
10
|
+
if (progress === null) {
|
|
11
|
+
process.stderr.write(`Error: Workflow not found: ${options.workflowId}\n`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
// Only reject completed workflows
|
|
15
|
+
if (progress.status === WORKFLOW_STATUS.COMPLETED) {
|
|
16
|
+
process.stderr.write(`Error: Cannot resume a completed workflow (status: '${progress.status}')\n`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// Resolve workflow YAML file
|
|
20
|
+
let workflowPath = null;
|
|
21
|
+
// Try stored workflow_file first
|
|
22
|
+
if (progress.workflowFile) {
|
|
23
|
+
if (existsSync(progress.workflowFile)) {
|
|
24
|
+
workflowPath = progress.workflowFile;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Fall back to discovery by workflow name
|
|
28
|
+
if (workflowPath === null) {
|
|
29
|
+
const [discovered] = discoverWorkflow(progress.workflowName);
|
|
30
|
+
if (discovered !== null) {
|
|
31
|
+
workflowPath = discovered;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (workflowPath === null) {
|
|
35
|
+
process.stderr.write(`Error: Cannot find workflow file for '${progress.workflowName}'.\nProvide the workflow YAML at one of the standard locations or re-run with 'agentic-forge run <path>'.\n`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
// Parse workflow
|
|
39
|
+
let workflow;
|
|
40
|
+
try {
|
|
41
|
+
const parser = new WorkflowParser();
|
|
42
|
+
workflow = parser.parseFile(workflowPath);
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
if (e instanceof WorkflowParseError) {
|
|
46
|
+
process.stderr.write(`Error parsing workflow: ${e.message}\n`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
throw e;
|
|
50
|
+
}
|
|
51
|
+
// Normalize state for resume
|
|
52
|
+
prepareForResume(progress);
|
|
53
|
+
saveProgress(progress);
|
|
54
|
+
// Execute with resume
|
|
55
|
+
const executor = new WorkflowExecutor();
|
|
56
|
+
try {
|
|
57
|
+
let terminalOutput = "base";
|
|
58
|
+
if (options.terminalOutput != null) {
|
|
59
|
+
terminalOutput = options.terminalOutput;
|
|
60
|
+
}
|
|
61
|
+
else if (workflow.settings?.terminalOutput) {
|
|
62
|
+
terminalOutput = workflow.settings.terminalOutput;
|
|
63
|
+
}
|
|
64
|
+
const result = await executor.run(workflow, progress.variables, null, terminalOutput, path.resolve(workflowPath), progress);
|
|
65
|
+
process.stdout.write(`\nWorkflow ${result.status}: ${result.workflowId}\n`);
|
|
66
|
+
if (result.errors && result.errors.length > 0) {
|
|
67
|
+
process.stdout.write("\nErrors:\n");
|
|
68
|
+
for (const error of result.errors) {
|
|
69
|
+
process.stdout.write(` - ${error.step}: ${error.error}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
75
|
+
process.stderr.write(`Error running workflow: ${msg}\n`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Run and resume command handlers with workflow discovery. */
|
|
2
|
+
/** Error that signals the CLI should exit with a specific code. */
|
|
3
|
+
export declare class CliExitError extends Error {
|
|
4
|
+
readonly exitCode: number;
|
|
5
|
+
constructor(message: string, exitCode?: number);
|
|
6
|
+
}
|
|
7
|
+
export declare function getBundledWorkflowsDir(): string;
|
|
8
|
+
export declare function getUserWorkflowsDir(): string;
|
|
9
|
+
export declare function getProjectWorkflowsDir(): string;
|
|
10
|
+
export declare function discoverWorkflow(name: string): [string | null, string];
|
|
11
|
+
export declare function listAvailableWorkflows(): [string, string, string][];
|
|
12
|
+
export declare function resolveWorkflowPath(workflowArg: string): [string, string];
|
|
13
|
+
/**
|
|
14
|
+
* Parse bare key=value strings and --var flag strings into a variables record.
|
|
15
|
+
* Bare args are processed first; --var flags override them for the same key.
|
|
16
|
+
* Throws an Error with a human-readable message on invalid format.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseVars(bareVars?: string[], vars?: string[]): Record<string, string>;
|
|
19
|
+
export declare function cmdRun(options: {
|
|
20
|
+
workflow?: string;
|
|
21
|
+
listWorkflows?: boolean;
|
|
22
|
+
vars?: string[];
|
|
23
|
+
bareVars?: string[];
|
|
24
|
+
fromStep?: string;
|
|
25
|
+
interactive?: boolean;
|
|
26
|
+
terminalOutput?: string;
|
|
27
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/** Run and resume command handlers with workflow discovery. */
|
|
2
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import confirm from "@inquirer/confirm";
|
|
7
|
+
import input from "@inquirer/input";
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
/** Error that signals the CLI should exit with a specific code. */
|
|
10
|
+
export class CliExitError extends Error {
|
|
11
|
+
exitCode;
|
|
12
|
+
constructor(message, exitCode = 1) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.exitCode = exitCode;
|
|
15
|
+
this.name = "CliExitError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function getBundledWorkflowsDir() {
|
|
19
|
+
return path.join(__dirname, "..", "workflows");
|
|
20
|
+
}
|
|
21
|
+
export function getUserWorkflowsDir() {
|
|
22
|
+
if (process.platform === "win32") {
|
|
23
|
+
const base = process.env.APPDATA ?? path.join(homedir(), "AppData", "Roaming");
|
|
24
|
+
return path.join(base, "agentic-forge", "workflows");
|
|
25
|
+
}
|
|
26
|
+
const base = process.env.XDG_CONFIG_HOME ?? path.join(homedir(), ".config");
|
|
27
|
+
return path.join(base, "agentic-forge", "workflows");
|
|
28
|
+
}
|
|
29
|
+
export function getProjectWorkflowsDir() {
|
|
30
|
+
return path.join(process.cwd(), "agentic", "workflows");
|
|
31
|
+
}
|
|
32
|
+
export function discoverWorkflow(name) {
|
|
33
|
+
const fileName = name.endsWith(".yaml") ? name : `${name}.yaml`;
|
|
34
|
+
const searchLocations = [
|
|
35
|
+
[getProjectWorkflowsDir(), "project-local"],
|
|
36
|
+
[getUserWorkflowsDir(), "user-global"],
|
|
37
|
+
[getBundledWorkflowsDir(), "bundled"],
|
|
38
|
+
];
|
|
39
|
+
for (const [directory, locationType] of searchLocations) {
|
|
40
|
+
const workflowPath = path.join(directory, fileName);
|
|
41
|
+
if (existsSync(workflowPath)) {
|
|
42
|
+
return [workflowPath, locationType];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return [null, "not found"];
|
|
46
|
+
}
|
|
47
|
+
export function listAvailableWorkflows() {
|
|
48
|
+
const workflows = [];
|
|
49
|
+
const searchLocations = [
|
|
50
|
+
[getProjectWorkflowsDir(), "project-local"],
|
|
51
|
+
[getUserWorkflowsDir(), "user-global"],
|
|
52
|
+
[getBundledWorkflowsDir(), "bundled"],
|
|
53
|
+
];
|
|
54
|
+
for (const [directory, locationType] of searchLocations) {
|
|
55
|
+
if (existsSync(directory)) {
|
|
56
|
+
const files = readdirSync(directory)
|
|
57
|
+
.filter((f) => f.endsWith(".yaml"))
|
|
58
|
+
.sort();
|
|
59
|
+
for (const file of files) {
|
|
60
|
+
const name = path.basename(file, ".yaml");
|
|
61
|
+
workflows.push([name, path.join(directory, file), locationType]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return workflows;
|
|
66
|
+
}
|
|
67
|
+
export function resolveWorkflowPath(workflowArg) {
|
|
68
|
+
// Check if it's an absolute path
|
|
69
|
+
if (path.isAbsolute(workflowArg)) {
|
|
70
|
+
return [workflowArg, "absolute"];
|
|
71
|
+
}
|
|
72
|
+
// Check if it exists as a relative path from cwd
|
|
73
|
+
const localPath = path.resolve(process.cwd(), workflowArg);
|
|
74
|
+
if (existsSync(localPath)) {
|
|
75
|
+
return [localPath, "relative"];
|
|
76
|
+
}
|
|
77
|
+
// If the input looks like a bare name (no path separators), try discovery
|
|
78
|
+
if (!workflowArg.includes("/") && !workflowArg.includes("\\")) {
|
|
79
|
+
const [discovered, locationType] = discoverWorkflow(workflowArg);
|
|
80
|
+
if (discovered) {
|
|
81
|
+
return [discovered, locationType];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Fallback: return the resolved path (will fail with appropriate error)
|
|
85
|
+
return [path.resolve(workflowArg), "not found"];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Parse bare key=value strings and --var flag strings into a variables record.
|
|
89
|
+
* Bare args are processed first; --var flags override them for the same key.
|
|
90
|
+
* Throws an Error with a human-readable message on invalid format.
|
|
91
|
+
*/
|
|
92
|
+
export function parseVars(bareVars, vars) {
|
|
93
|
+
const variables = {};
|
|
94
|
+
function parseOne(v) {
|
|
95
|
+
if (!v.includes("=")) {
|
|
96
|
+
throw new CliExitError(`Error: Invalid variable format: ${v}\nExpected format: key=value`);
|
|
97
|
+
}
|
|
98
|
+
const eqIndex = v.indexOf("=");
|
|
99
|
+
variables[v.slice(0, eqIndex)] = v.slice(eqIndex + 1);
|
|
100
|
+
}
|
|
101
|
+
if (bareVars)
|
|
102
|
+
for (const v of bareVars)
|
|
103
|
+
parseOne(v);
|
|
104
|
+
if (vars)
|
|
105
|
+
for (const v of vars)
|
|
106
|
+
parseOne(v);
|
|
107
|
+
return variables;
|
|
108
|
+
}
|
|
109
|
+
export async function cmdRun(options) {
|
|
110
|
+
// Handle --list flag
|
|
111
|
+
if (options.listWorkflows) {
|
|
112
|
+
process.stdout.write("Available workflows:\n\n");
|
|
113
|
+
const workflows = listAvailableWorkflows();
|
|
114
|
+
if (workflows.length === 0) {
|
|
115
|
+
process.stdout.write("No workflows found.\n");
|
|
116
|
+
process.stdout.write("\nSearched locations:\n");
|
|
117
|
+
process.stdout.write(` - Project: ${getProjectWorkflowsDir()}\n`);
|
|
118
|
+
process.stdout.write(` - User: ${getUserWorkflowsDir()}\n`);
|
|
119
|
+
process.stdout.write(` - Bundled: ${getBundledWorkflowsDir()}\n`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Group by location
|
|
123
|
+
const byLocation = {};
|
|
124
|
+
for (const [name, wfPath, location] of workflows) {
|
|
125
|
+
if (!byLocation[location]) {
|
|
126
|
+
byLocation[location] = [];
|
|
127
|
+
}
|
|
128
|
+
byLocation[location].push([name, wfPath]);
|
|
129
|
+
}
|
|
130
|
+
for (const location of ["project-local", "user-global", "bundled"]) {
|
|
131
|
+
if (byLocation[location]) {
|
|
132
|
+
const label = location.replace("-", " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
133
|
+
process.stdout.write(`${label}:\n`);
|
|
134
|
+
for (const [name] of byLocation[location]) {
|
|
135
|
+
process.stdout.write(` ${name}\n`);
|
|
136
|
+
}
|
|
137
|
+
process.stdout.write("\n");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
process.stdout.write(`Total: ${workflows.length} workflow(s)\n`);
|
|
141
|
+
process.stdout.write("\nUsage: agentic-forge run <workflow> [key=value ...]\n");
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Validate workflow argument is provided
|
|
145
|
+
if (!options.workflow) {
|
|
146
|
+
throw new CliExitError("Error: workflow name or path is required\nUse 'agentic-forge run --list' to see available workflows");
|
|
147
|
+
}
|
|
148
|
+
const { WorkflowExecutor } = await import("../executor.js");
|
|
149
|
+
const { WorkflowParser, WorkflowParseError } = await import("../parser.js");
|
|
150
|
+
const [workflowPath, locationType] = resolveWorkflowPath(options.workflow);
|
|
151
|
+
if (!existsSync(workflowPath)) {
|
|
152
|
+
const lines = [`Error: Workflow not found: ${options.workflow}`, "", "Available workflows:"];
|
|
153
|
+
const workflows = listAvailableWorkflows();
|
|
154
|
+
if (workflows.length > 0) {
|
|
155
|
+
for (const [name, , location] of workflows.slice(0, 10)) {
|
|
156
|
+
lines.push(` ${name} (${location})`);
|
|
157
|
+
}
|
|
158
|
+
if (workflows.length > 10) {
|
|
159
|
+
lines.push(` ... and ${workflows.length - 10} more`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
lines.push(" (no workflows found)");
|
|
164
|
+
}
|
|
165
|
+
lines.push("", "Use 'agentic-forge run --list' to see all workflows.");
|
|
166
|
+
lines.push("Use 'agentic-forge init' to copy bundled workflows locally.");
|
|
167
|
+
throw new CliExitError(lines.join("\n"));
|
|
168
|
+
}
|
|
169
|
+
// Show which workflow is being used
|
|
170
|
+
if (["project-local", "user-global", "bundled"].includes(locationType)) {
|
|
171
|
+
process.stdout.write(`Using ${locationType} workflow: ${path.basename(workflowPath)}\n`);
|
|
172
|
+
}
|
|
173
|
+
// Parse variables
|
|
174
|
+
const variables = parseVars(options.bareVars, options.vars);
|
|
175
|
+
let workflow;
|
|
176
|
+
try {
|
|
177
|
+
const parser = new WorkflowParser();
|
|
178
|
+
workflow = parser.parseFile(workflowPath);
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
if (e instanceof WorkflowParseError) {
|
|
182
|
+
throw new CliExitError(`Error parsing workflow: ${e.message}`);
|
|
183
|
+
}
|
|
184
|
+
throw e;
|
|
185
|
+
}
|
|
186
|
+
// Prompt for missing required variables (interactive mode only)
|
|
187
|
+
const isInteractive = options.interactive !== false && process.stdin.isTTY;
|
|
188
|
+
for (const v of workflow.variables) {
|
|
189
|
+
if (v.name in variables)
|
|
190
|
+
continue;
|
|
191
|
+
if (!v.required)
|
|
192
|
+
continue;
|
|
193
|
+
if (v.default !== undefined)
|
|
194
|
+
continue;
|
|
195
|
+
// Required variable is missing
|
|
196
|
+
if (!isInteractive) {
|
|
197
|
+
const lines = [`Error: Missing required variable: ${v.name}`];
|
|
198
|
+
if (v.description) {
|
|
199
|
+
lines.push(` Description: ${v.description}`);
|
|
200
|
+
}
|
|
201
|
+
lines.push(` Usage: agentic-forge run ${options.workflow} ${v.name}="<value>"`);
|
|
202
|
+
throw new CliExitError(lines.join("\n"));
|
|
203
|
+
}
|
|
204
|
+
const label = v.description || v.name;
|
|
205
|
+
if (v.type === "boolean") {
|
|
206
|
+
const answer = await confirm({
|
|
207
|
+
message: `${label}:`,
|
|
208
|
+
default: false,
|
|
209
|
+
});
|
|
210
|
+
variables[v.name] = String(answer);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const answer = await input({
|
|
214
|
+
message: `${label}:`,
|
|
215
|
+
});
|
|
216
|
+
variables[v.name] = answer;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const executor = new WorkflowExecutor();
|
|
220
|
+
try {
|
|
221
|
+
// Resolve terminal_output: CLI override > workflow settings > default "base"
|
|
222
|
+
let terminalOutput = "base";
|
|
223
|
+
if (options.terminalOutput != null) {
|
|
224
|
+
terminalOutput = options.terminalOutput;
|
|
225
|
+
}
|
|
226
|
+
else if (workflow.settings?.terminalOutput) {
|
|
227
|
+
terminalOutput = workflow.settings.terminalOutput;
|
|
228
|
+
}
|
|
229
|
+
const progress = await executor.run(workflow, variables, options.fromStep ?? null, terminalOutput, path.resolve(workflowPath));
|
|
230
|
+
process.stdout.write(`\nWorkflow ${progress.status}: ${progress.workflowId}\n`);
|
|
231
|
+
if (progress.errors && progress.errors.length > 0) {
|
|
232
|
+
process.stdout.write("\nErrors:\n");
|
|
233
|
+
for (const error of progress.errors) {
|
|
234
|
+
process.stdout.write(` - ${error.step}: ${error.error}\n`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (e) {
|
|
239
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
240
|
+
throw new CliExitError(`Error running workflow: ${msg}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|