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.
Files changed (212) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +64 -24
  3. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/SKILL.md +2 -2
  4. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/REFERENCE.md +9 -3
  5. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/workflow-example.yaml +15 -8
  6. package/dist/checkpoints/manager.d.ts +5 -0
  7. package/dist/checkpoints/manager.js +87 -0
  8. package/dist/checkpoints/manager.js.map +1 -0
  9. package/{src → dist}/claude/.claude/skills/analyze/SKILL.md +1 -1
  10. package/{src → dist}/claude/.claude/skills/create-checkpoint/SKILL.md +1 -1
  11. package/{src → dist}/claude/.claude/skills/create-log/SKILL.md +1 -1
  12. package/{src → dist}/claude/.claude/skills/fix-analyze/SKILL.md +1 -1
  13. package/{src → dist}/claude/.claude/skills/git-branch/SKILL.md +1 -1
  14. package/{src → dist}/claude/.claude/skills/git-commit/SKILL.md +1 -1
  15. package/{src → dist}/claude/.claude/skills/git-pr/SKILL.md +1 -1
  16. package/{src → dist}/claude/.claude/skills/sdlc-plan/SKILL.md +1 -1
  17. package/{src → dist}/claude/.claude/skills/sdlc-review/SKILL.md +1 -1
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.js +173 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/authoring-dir.d.ts +2 -0
  22. package/dist/commands/authoring-dir.js +9 -0
  23. package/dist/commands/authoring-dir.js.map +1 -0
  24. package/dist/commands/config-cmd.d.ts +2 -0
  25. package/dist/commands/config-cmd.js +30 -0
  26. package/dist/commands/config-cmd.js.map +1 -0
  27. package/{src/commands/index.ts → dist/commands/index.d.ts} +2 -10
  28. package/dist/commands/index.js +14 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/init.d.ts +6 -0
  31. package/dist/commands/init.js +83 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/release-notes.d.ts +5 -0
  34. package/dist/commands/release-notes.js +68 -0
  35. package/dist/commands/release-notes.js.map +1 -0
  36. package/dist/commands/resume.d.ts +5 -0
  37. package/dist/commands/resume.js +79 -0
  38. package/dist/commands/resume.js.map +1 -0
  39. package/dist/commands/run.d.ts +27 -0
  40. package/dist/commands/run.js +243 -0
  41. package/dist/commands/run.js.map +1 -0
  42. package/dist/commands/shortcuts.d.ts +2 -0
  43. package/dist/commands/shortcuts.js +11 -0
  44. package/dist/commands/shortcuts.js.map +1 -0
  45. package/dist/commands/skills-dir.d.ts +2 -0
  46. package/dist/commands/skills-dir.js +9 -0
  47. package/dist/commands/skills-dir.js.map +1 -0
  48. package/dist/commands/status.d.ts +4 -0
  49. package/dist/commands/status.js +99 -0
  50. package/dist/commands/status.js.map +1 -0
  51. package/dist/commands/update.d.ts +4 -0
  52. package/dist/commands/update.js +65 -0
  53. package/dist/commands/update.js.map +1 -0
  54. package/dist/commands/version.d.ts +3 -0
  55. package/dist/commands/version.js +26 -0
  56. package/dist/commands/version.js.map +1 -0
  57. package/dist/commands/workflows.d.ts +4 -0
  58. package/dist/commands/workflows.js +111 -0
  59. package/dist/commands/workflows.js.map +1 -0
  60. package/dist/config.d.ts +8 -0
  61. package/dist/config.js +110 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/console.d.ts +103 -0
  64. package/dist/console.js +670 -0
  65. package/dist/console.js.map +1 -0
  66. package/dist/executor.d.ts +27 -0
  67. package/dist/executor.js +236 -0
  68. package/dist/executor.js.map +1 -0
  69. package/dist/git/worktree.d.ts +23 -0
  70. package/dist/git/worktree.js +170 -0
  71. package/dist/git/worktree.js.map +1 -0
  72. package/dist/logging/logger.d.ts +27 -0
  73. package/dist/logging/logger.js +69 -0
  74. package/dist/logging/logger.js.map +1 -0
  75. package/dist/orchestrator.d.ts +44 -0
  76. package/dist/orchestrator.js +587 -0
  77. package/dist/orchestrator.js.map +1 -0
  78. package/dist/parser.d.ts +17 -0
  79. package/dist/parser.js +184 -0
  80. package/dist/parser.js.map +1 -0
  81. package/dist/progress.d.ts +29 -0
  82. package/dist/progress.js +275 -0
  83. package/dist/progress.js.map +1 -0
  84. package/dist/ralph-loop.d.ts +26 -0
  85. package/dist/ralph-loop.js +194 -0
  86. package/dist/ralph-loop.js.map +1 -0
  87. package/dist/renderer.d.ts +15 -0
  88. package/dist/renderer.js +123 -0
  89. package/dist/renderer.js.map +1 -0
  90. package/dist/runner.d.ts +84 -0
  91. package/dist/runner.js +529 -0
  92. package/dist/runner.js.map +1 -0
  93. package/dist/signal-manager.d.ts +16 -0
  94. package/dist/signal-manager.js +50 -0
  95. package/dist/signal-manager.js.map +1 -0
  96. package/dist/steps/base.d.ts +28 -0
  97. package/dist/steps/base.js +23 -0
  98. package/dist/steps/base.js.map +1 -0
  99. package/dist/steps/conditional-step.d.ts +12 -0
  100. package/dist/steps/conditional-step.js +106 -0
  101. package/dist/steps/conditional-step.js.map +1 -0
  102. package/{src/steps/index.ts → dist/steps/index.d.ts} +1 -9
  103. package/dist/steps/index.js +8 -0
  104. package/dist/steps/index.js.map +1 -0
  105. package/dist/steps/parallel-step.d.ts +11 -0
  106. package/dist/steps/parallel-step.js +166 -0
  107. package/dist/steps/parallel-step.js.map +1 -0
  108. package/dist/steps/prompt-step.d.ts +8 -0
  109. package/dist/steps/prompt-step.js +94 -0
  110. package/dist/steps/prompt-step.js.map +1 -0
  111. package/dist/steps/ralph-loop-step.d.ts +8 -0
  112. package/dist/steps/ralph-loop-step.js +132 -0
  113. package/dist/steps/ralph-loop-step.js.map +1 -0
  114. package/dist/steps/serial-step.d.ts +10 -0
  115. package/dist/steps/serial-step.js +57 -0
  116. package/dist/steps/serial-step.js.map +1 -0
  117. package/dist/types.d.ts +118 -0
  118. package/dist/types.js +10 -0
  119. package/dist/types.js.map +1 -0
  120. package/package.json +59 -2
  121. package/.gitattributes +0 -24
  122. package/.github/workflows/ci.yml +0 -70
  123. package/.markdownlint-cli2.jsonc +0 -16
  124. package/.prettierignore +0 -3
  125. package/.prettierrc +0 -6
  126. package/.vscode/agentic-forge.code-workspace +0 -26
  127. package/CHANGELOG.md +0 -100
  128. package/CLAUDE.md +0 -158
  129. package/CONTRIBUTING.md +0 -152
  130. package/biome.json +0 -21
  131. package/scripts/copy-assets.js +0 -21
  132. package/src/checkpoints/manager.ts +0 -119
  133. package/src/cli.ts +0 -182
  134. package/src/commands/config-cmd.ts +0 -28
  135. package/src/commands/init.ts +0 -96
  136. package/src/commands/release-notes.ts +0 -85
  137. package/src/commands/resume.ts +0 -103
  138. package/src/commands/run.ts +0 -234
  139. package/src/commands/shortcuts.ts +0 -11
  140. package/src/commands/skills-dir.ts +0 -11
  141. package/src/commands/status.ts +0 -112
  142. package/src/commands/update.ts +0 -64
  143. package/src/commands/version.ts +0 -27
  144. package/src/commands/workflows.ts +0 -129
  145. package/src/config.ts +0 -129
  146. package/src/console.ts +0 -790
  147. package/src/executor.ts +0 -354
  148. package/src/git/worktree.ts +0 -236
  149. package/src/logging/logger.ts +0 -95
  150. package/src/orchestrator.ts +0 -815
  151. package/src/parser.ts +0 -225
  152. package/src/progress.ts +0 -306
  153. package/src/ralph-loop.ts +0 -260
  154. package/src/renderer.ts +0 -164
  155. package/src/runner.ts +0 -634
  156. package/src/signal-manager.ts +0 -55
  157. package/src/steps/base.ts +0 -71
  158. package/src/steps/conditional-step.ts +0 -144
  159. package/src/steps/parallel-step.ts +0 -213
  160. package/src/steps/prompt-step.ts +0 -121
  161. package/src/steps/ralph-loop-step.ts +0 -186
  162. package/src/steps/serial-step.ts +0 -84
  163. package/src/types.ts +0 -141
  164. package/tests/config.test.ts +0 -219
  165. package/tests/console.test.ts +0 -506
  166. package/tests/executor.test.ts +0 -339
  167. package/tests/init.test.ts +0 -86
  168. package/tests/logger.test.ts +0 -110
  169. package/tests/parser.test.ts +0 -290
  170. package/tests/progress.test.ts +0 -345
  171. package/tests/ralph-loop.test.ts +0 -418
  172. package/tests/renderer.test.ts +0 -350
  173. package/tests/runner.test.ts +0 -497
  174. package/tests/setup.test.ts +0 -7
  175. package/tests/signal-manager.test.ts +0 -26
  176. package/tests/steps.test.ts +0 -412
  177. package/tests/worktree.test.ts +0 -411
  178. package/tsconfig.json +0 -18
  179. package/vitest.config.ts +0 -8
  180. /package/{src → dist}/agents/explorer.md +0 -0
  181. /package/{src → dist}/agents/reviewer.md +0 -0
  182. /package/{src → dist}/claude/.claude/skills/analyze/references/bug.md +0 -0
  183. /package/{src → dist}/claude/.claude/skills/analyze/references/debt.md +0 -0
  184. /package/{src → dist}/claude/.claude/skills/analyze/references/doc.md +0 -0
  185. /package/{src → dist}/claude/.claude/skills/analyze/references/security.md +0 -0
  186. /package/{src → dist}/claude/.claude/skills/analyze/references/style.md +0 -0
  187. /package/{src → dist}/claude/.claude/skills/orchestrate/SKILL.md +0 -0
  188. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/bug.md +0 -0
  189. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/chore.md +0 -0
  190. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/feature.md +0 -0
  191. /package/{src → dist}/prompts/agentic-system.md +0 -0
  192. /package/{src → dist}/templates/analysis/bug.md.j2 +0 -0
  193. /package/{src → dist}/templates/analysis/debt.md.j2 +0 -0
  194. /package/{src → dist}/templates/analysis/doc.md.j2 +0 -0
  195. /package/{src → dist}/templates/analysis/security.md.j2 +0 -0
  196. /package/{src → dist}/templates/analysis/style.md.j2 +0 -0
  197. /package/{src → dist}/templates/analysis-summary.md.j2 +0 -0
  198. /package/{src → dist}/templates/checkpoint.md.j2 +0 -0
  199. /package/{src → dist}/templates/implementation-report.md.j2 +0 -0
  200. /package/{src → dist}/templates/memory.md.j2 +0 -0
  201. /package/{src → dist}/templates/plan-bug.md.j2 +0 -0
  202. /package/{src → dist}/templates/plan-chore.md.j2 +0 -0
  203. /package/{src → dist}/templates/plan-feature.md.j2 +0 -0
  204. /package/{src → dist}/templates/progress.json.j2 +0 -0
  205. /package/{src → dist}/templates/ralph-report.md.j2 +0 -0
  206. /package/{src → dist}/workflows/analyze-codebase-merge.yaml +0 -0
  207. /package/{src → dist}/workflows/analyze-codebase.yaml +0 -0
  208. /package/{src → dist}/workflows/analyze-single.yaml +0 -0
  209. /package/{src → dist}/workflows/demo.yaml +0 -0
  210. /package/{src → dist}/workflows/one-shot.yaml +0 -0
  211. /package/{src → dist}/workflows/plan-build-review.yaml +0 -0
  212. /package/{src → dist}/workflows/ralph-loop.yaml +0 -0
@@ -0,0 +1,194 @@
1
+ /** Ralph Wiggum loop state management and completion detection. */
2
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import yaml from "js-yaml";
5
+ // --- State path ---
6
+ export function getRalphStatePath(workflowId, stepName, repoRoot) {
7
+ const safeName = stepName.replace(/[^\w-]/g, "_");
8
+ return path.join(repoRoot, "agentic", "outputs", workflowId, `ralph-${safeName}.md`);
9
+ }
10
+ // --- State management ---
11
+ export function createRalphState(workflowId, stepName, prompt, maxIterations, completionPromise, repoRoot) {
12
+ const state = {
13
+ active: true,
14
+ iteration: 1,
15
+ maxIterations,
16
+ completionPromise,
17
+ startedAt: new Date().toISOString(),
18
+ prompt,
19
+ };
20
+ saveRalphState(workflowId, stepName, state, repoRoot);
21
+ return state;
22
+ }
23
+ export function loadRalphState(workflowId, stepName, repoRoot) {
24
+ const statePath = getRalphStatePath(workflowId, stepName, repoRoot);
25
+ if (!existsSync(statePath))
26
+ return null;
27
+ const content = readFileSync(statePath, "utf-8");
28
+ return parseRalphState(content);
29
+ }
30
+ export function updateRalphIteration(workflowId, stepName, repoRoot) {
31
+ const state = loadRalphState(workflowId, stepName, repoRoot);
32
+ if (!state)
33
+ return null;
34
+ state.iteration += 1;
35
+ saveRalphState(workflowId, stepName, state, repoRoot);
36
+ return state;
37
+ }
38
+ export function deactivateRalphState(workflowId, stepName, repoRoot) {
39
+ const state = loadRalphState(workflowId, stepName, repoRoot);
40
+ if (state) {
41
+ state.active = false;
42
+ saveRalphState(workflowId, stepName, state, repoRoot);
43
+ }
44
+ }
45
+ export function deleteRalphState(workflowId, stepName, repoRoot) {
46
+ const statePath = getRalphStatePath(workflowId, stepName, repoRoot);
47
+ if (existsSync(statePath)) {
48
+ unlinkSync(statePath);
49
+ }
50
+ }
51
+ // --- Internal helpers ---
52
+ function saveRalphState(workflowId, stepName, state, repoRoot) {
53
+ const statePath = getRalphStatePath(workflowId, stepName, repoRoot);
54
+ const dir = path.dirname(statePath);
55
+ mkdirSync(dir, { recursive: true });
56
+ const frontmatter = {
57
+ active: state.active,
58
+ iteration: state.iteration,
59
+ max_iterations: state.maxIterations,
60
+ completion_promise: state.completionPromise,
61
+ started_at: state.startedAt,
62
+ };
63
+ const yamlStr = yaml.dump(frontmatter, { flowLevel: -1 }).trim();
64
+ const content = `---
65
+ ${yamlStr}
66
+ ---
67
+
68
+ # Ralph Loop Prompt
69
+
70
+ ${state.prompt}
71
+ `;
72
+ writeFileSync(statePath, content, "utf-8");
73
+ }
74
+ export function parseRalphState(content) {
75
+ if (!content.startsWith("---"))
76
+ return null;
77
+ const parts = content.split("---");
78
+ if (parts.length < 3)
79
+ return null;
80
+ let frontmatter;
81
+ try {
82
+ frontmatter = yaml.load(parts[1]);
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ const promptSection = parts.slice(2).join("---").trim();
88
+ let prompt;
89
+ if (promptSection.includes("# Ralph Loop Prompt")) {
90
+ prompt = promptSection.split("# Ralph Loop Prompt")[1].trim();
91
+ }
92
+ else {
93
+ prompt = promptSection;
94
+ }
95
+ return {
96
+ active: frontmatter.active ?? false,
97
+ iteration: frontmatter.iteration ?? 1,
98
+ maxIterations: frontmatter.max_iterations ?? 5,
99
+ completionPromise: frontmatter.completion_promise ?? "COMPLETE",
100
+ startedAt: frontmatter.started_at ?? "",
101
+ prompt,
102
+ };
103
+ }
104
+ // --- Completion detection ---
105
+ export function detectCompletionPromise(output, expectedPromise) {
106
+ const jsonPatterns = [
107
+ /```json\s*\n?(.*?)\n?```/gis,
108
+ /```\s*\n?(\{.*?\})\n?```/gis,
109
+ /(\{[^{}]*"ralph_complete"[^{}]*\})/gi,
110
+ /(\{[^{}]*"ralph_failed"[^{}]*\})/gi,
111
+ ];
112
+ for (const pattern of jsonPatterns) {
113
+ pattern.lastIndex = 0;
114
+ const matches = [...output.matchAll(pattern)];
115
+ for (const match of matches) {
116
+ try {
117
+ const data = JSON.parse(match[1].trim());
118
+ if (typeof data !== "object" || data === null)
119
+ continue;
120
+ // Check for completion signal
121
+ if (data.ralph_complete) {
122
+ const promiseValue = String(data.promise ?? "");
123
+ const promiseMatched = promiseValue.trim().toUpperCase() === expectedPromise.trim().toUpperCase();
124
+ return {
125
+ isComplete: true,
126
+ promiseMatched,
127
+ promiseValue,
128
+ output,
129
+ isFailed: false,
130
+ failureReason: null,
131
+ };
132
+ }
133
+ // Check for failure signal
134
+ if (data.ralph_failed) {
135
+ const failureReason = String(data.reason ?? "Unknown error");
136
+ return {
137
+ isComplete: true,
138
+ promiseMatched: false,
139
+ promiseValue: null,
140
+ output,
141
+ isFailed: true,
142
+ failureReason,
143
+ };
144
+ }
145
+ }
146
+ catch {
147
+ // Invalid JSON, skip
148
+ }
149
+ }
150
+ }
151
+ return {
152
+ isComplete: false,
153
+ promiseMatched: false,
154
+ promiseValue: null,
155
+ output,
156
+ isFailed: false,
157
+ failureReason: null,
158
+ };
159
+ }
160
+ // --- System message builder ---
161
+ export function buildRalphSystemMessage(iteration, maxIterations, completionPromise) {
162
+ return `## Ralph Wiggum Loop - Iteration ${iteration}/${maxIterations}
163
+
164
+ You are in a Ralph Wiggum iterative loop. Each iteration starts a fresh session.
165
+
166
+ **Completion Signal:**
167
+ When your task is FULLY complete, output a JSON block:
168
+ \`\`\`json
169
+ {
170
+ "ralph_complete": true,
171
+ "promise": "${completionPromise}"
172
+ }
173
+ \`\`\`
174
+
175
+ **Failure Signal:**
176
+ If you encounter a BLOCKING error that prevents completion (e.g., missing permissions, cannot write files, access denied), output a failure JSON block:
177
+ \`\`\`json
178
+ {
179
+ "ralph_failed": true,
180
+ "reason": "<brief description of the blocking error>"
181
+ }
182
+ \`\`\`
183
+
184
+ **IMPORTANT:**
185
+ - Only output the completion JSON when the task is genuinely finished
186
+ - Do not output false promises to exit early
187
+ - Output the FAILURE JSON immediately if you encounter permission errors or other unrecoverable blocking issues - do NOT continue iterating
188
+ - If the task is incomplete but can still progress, continue working - you have ${maxIterations - iteration} iterations remaining
189
+
190
+ ---
191
+
192
+ `;
193
+ }
194
+ //# sourceMappingURL=ralph-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-loop.js","sourceRoot":"","sources":["../src/ralph-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Nunjucks template rendering for workflows. */
2
+ export declare class TemplateRenderer {
3
+ templateDirs: string[];
4
+ strictMode: boolean;
5
+ private env;
6
+ constructor(templateDirs?: string[], strictMode?: boolean);
7
+ render(templateName: string, context: Record<string, unknown>): string;
8
+ renderString(templateStr: string, context: Record<string, unknown>): string;
9
+ hasVariables(text: string): boolean;
10
+ addTemplateDir(dirPath: string): void;
11
+ }
12
+ export declare function extractAnalysisSteps(stepOutputs: Record<string, Record<string, unknown>>): Record<string, Record<string, unknown>>;
13
+ export declare function extractFixSteps(stepOutputs: Record<string, Record<string, unknown>>): Record<string, Record<string, unknown>>;
14
+ export declare function buildTemplateContext(workflowName: string, workflowId: string, startedAt: string, completedAt: string | null, stepOutputs: Record<string, Record<string, unknown>>, filesChanged: string[], branches: string[], pullRequests: Record<string, unknown>[], inputs: Record<string, unknown>): Record<string, unknown>;
15
+ export declare function renderWorkflowOutput(templatePath: string, outputPath: string, context: Record<string, unknown>, templateDirs?: string[], strictMode?: boolean): void;
@@ -0,0 +1,123 @@
1
+ /** Nunjucks template rendering for workflows. */
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import nunjucks from "nunjucks";
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ /** Set of variable names already warned about (reset per render). */
8
+ const warnedVars = new Set();
9
+ /**
10
+ * Custom nunjucks loader that warns on undefined variables instead of failing.
11
+ * Returns the original `{{ variable_name }}` syntax for undefined variables.
12
+ */
13
+ function createLenientEnvironment(templateDirs) {
14
+ const loader = new nunjucks.FileSystemLoader(templateDirs, { noCache: true });
15
+ const env = new nunjucks.Environment(loader, { autoescape: false });
16
+ // Install a global that intercepts missing variables
17
+ // Nunjucks doesn't have a direct WarnOnUndefined equivalent,
18
+ // so we use a custom extension approach
19
+ return env;
20
+ }
21
+ function createStrictEnvironment(templateDirs) {
22
+ const loader = new nunjucks.FileSystemLoader(templateDirs, { noCache: true });
23
+ return new nunjucks.Environment(loader, {
24
+ autoescape: false,
25
+ throwOnUndefined: true,
26
+ });
27
+ }
28
+ export class TemplateRenderer {
29
+ templateDirs;
30
+ strictMode;
31
+ env;
32
+ constructor(templateDirs, strictMode = false) {
33
+ const dirs = templateDirs ?? [path.join(__dirname, "templates")];
34
+ this.templateDirs = dirs;
35
+ this.strictMode = strictMode;
36
+ const existingDirs = dirs.filter((d) => existsSync(d));
37
+ this.env = strictMode
38
+ ? createStrictEnvironment(existingDirs)
39
+ : createLenientEnvironment(existingDirs);
40
+ }
41
+ render(templateName, context) {
42
+ if (!this.strictMode) {
43
+ warnedVars.clear();
44
+ }
45
+ return this.env.render(templateName, context);
46
+ }
47
+ renderString(templateStr, context) {
48
+ if (!this.strictMode) {
49
+ warnedVars.clear();
50
+ }
51
+ return this.env.renderString(templateStr, context);
52
+ }
53
+ hasVariables(text) {
54
+ return text.includes("{{") || text.includes("{%");
55
+ }
56
+ addTemplateDir(dirPath) {
57
+ if (existsSync(dirPath) && !this.templateDirs.includes(dirPath)) {
58
+ this.templateDirs.push(dirPath);
59
+ const existingDirs = this.templateDirs.filter((d) => existsSync(d));
60
+ this.env = this.strictMode
61
+ ? createStrictEnvironment(existingDirs)
62
+ : createLenientEnvironment(existingDirs);
63
+ }
64
+ }
65
+ }
66
+ // --- Helper functions ---
67
+ const ANALYSIS_TYPES = ["bug", "debt", "doc", "security", "style"];
68
+ export function extractAnalysisSteps(stepOutputs) {
69
+ const result = {};
70
+ for (const [name, data] of Object.entries(stepOutputs)) {
71
+ if (name.startsWith("analyze-")) {
72
+ const analysisType = name.slice("analyze-".length);
73
+ if (ANALYSIS_TYPES.includes(analysisType)) {
74
+ result[name] = data;
75
+ }
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ export function extractFixSteps(stepOutputs) {
81
+ const result = {};
82
+ for (const [name, data] of Object.entries(stepOutputs)) {
83
+ if (name.startsWith("fix-") || name.startsWith("apply-")) {
84
+ result[name] = data;
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ export function buildTemplateContext(workflowName, workflowId, startedAt, completedAt, stepOutputs, filesChanged, branches, pullRequests, inputs) {
90
+ const analysisSteps = extractAnalysisSteps(stepOutputs);
91
+ const fixSteps = extractFixSteps(stepOutputs);
92
+ return {
93
+ workflow: {
94
+ name: workflowName,
95
+ id: workflowId,
96
+ started_at: startedAt,
97
+ completed_at: completedAt,
98
+ },
99
+ workflow_id: workflowId,
100
+ steps: stepOutputs,
101
+ analysis_steps: analysisSteps,
102
+ fix_steps: fixSteps,
103
+ files_changed: filesChanged,
104
+ branches,
105
+ pull_requests: pullRequests,
106
+ inputs,
107
+ };
108
+ }
109
+ export function renderWorkflowOutput(templatePath, outputPath, context, templateDirs, strictMode = false) {
110
+ const renderer = new TemplateRenderer(templateDirs, strictMode);
111
+ let rendered;
112
+ if (path.isAbsolute(templatePath)) {
113
+ const content = readFileSync(templatePath, "utf-8");
114
+ rendered = renderer.renderString(content, context);
115
+ }
116
+ else {
117
+ rendered = renderer.render(templatePath, context);
118
+ }
119
+ const dir = path.dirname(outputPath);
120
+ mkdirSync(dir, { recursive: true });
121
+ writeFileSync(outputPath, rendered, "utf-8");
122
+ }
123
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /** Claude CLI runner for workflow orchestration. */
2
+ import type { ConsoleOutput } from "./console.js";
3
+ /** Path to the bundled skills directory for --add-dir. */
4
+ export declare const SKILLS_DIR: string;
5
+ /** Path to the agentic system prompt file. */
6
+ export declare const AGENTIC_SYSTEM_PROMPT_FILE: string;
7
+ export declare const MODEL_MAP: Record<string, string>;
8
+ /**
9
+ * Resolve executable path for cross-platform subprocess calls.
10
+ *
11
+ * Uses `where` on Windows and `which` on Unix to find the full path,
12
+ * allowing shell=false in subprocess calls.
13
+ */
14
+ export declare function getExecutable(name: string): string;
15
+ /** Custom error for missing executables. */
16
+ export declare class FileNotFoundError extends Error {
17
+ constructor(message: string);
18
+ }
19
+ /** Parse a single line of stream-json output. */
20
+ export declare function parseStreamJsonLine(line: string): Record<string, unknown> | null;
21
+ /** Extract model name from an assistant or system message. */
22
+ export declare function extractModelFromMessage(data: Record<string, unknown>): string | null;
23
+ /** Format model name for display. */
24
+ export declare function formatModelName(model: string | null): string;
25
+ /**
26
+ * Extract text content from an assistant message.
27
+ *
28
+ * Handles two stream-json formats:
29
+ * 1. Verbose format: {"type": "assistant", "message": {"content": [...]}}
30
+ * 2. Stream event format: {"type": "stream_event", "event": {"type": "content_block_delta", ...}}
31
+ *
32
+ * Returns array of [content_block_index, text] tuples.
33
+ */
34
+ export declare function extractTextFromMessage(data: Record<string, unknown>): Array<[number, string]>;
35
+ /** Extract text content from a user message. */
36
+ export declare function extractUserText(data: Record<string, unknown>): string | null;
37
+ /** Extract the final result text from a result message. */
38
+ export declare function extractResultText(data: Record<string, unknown>): string | null;
39
+ /** Load the agentic system prompt from file. */
40
+ export declare function getAgenticSystemPrompt(): string | null;
41
+ export declare class SessionOutput {
42
+ sessionId: string | null;
43
+ isSuccess: boolean;
44
+ context: string;
45
+ extra: Record<string, unknown>;
46
+ rawJson: Record<string, unknown> | null;
47
+ constructor(sessionId?: string | null, isSuccess?: boolean, context?: string, extra?: Record<string, unknown>, rawJson?: Record<string, unknown> | null);
48
+ /**
49
+ * Extract the session output JSON from Claude's stdout.
50
+ *
51
+ * Looks for the last JSON block that contains the required base keys
52
+ * (sessionId, isSuccess, context).
53
+ */
54
+ static fromStdout(stdout: string): SessionOutput;
55
+ }
56
+ export declare class ClaudeResult {
57
+ returncode: number;
58
+ stdout: string;
59
+ stderr: string;
60
+ prompt: string;
61
+ cwd: string | null;
62
+ model: string | null;
63
+ private _sessionOutput;
64
+ constructor(returncode: number, stdout: string, stderr: string, prompt: string, cwd: string | null, model?: string | null);
65
+ get success(): boolean;
66
+ get sessionOutput(): SessionOutput;
67
+ toString(): string;
68
+ }
69
+ export interface RunClaudeOptions {
70
+ prompt: string;
71
+ cwd?: string | null;
72
+ model?: string;
73
+ timeout?: number | null;
74
+ printOutput?: boolean;
75
+ skipPermissions?: boolean;
76
+ allowedTools?: string[] | null;
77
+ console?: ConsoleOutput | null;
78
+ appendSystemPrompt?: boolean;
79
+ workflowId?: string | null;
80
+ }
81
+ /** Run claude with the given prompt. */
82
+ export declare function runClaude(options: RunClaudeOptions): Promise<ClaudeResult>;
83
+ /** Check if the claude CLI is available. */
84
+ export declare function checkClaudeAvailable(): boolean;