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
package/dist/runner.js ADDED
@@ -0,0 +1,529 @@
1
+ /** Claude CLI runner for workflow orchestration. */
2
+ import { execFileSync, spawn } from "node:child_process";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ // --- Path constants ---
7
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
+ /** Path to the bundled skills directory for --add-dir. */
9
+ export const SKILLS_DIR = path.join(__dirname, "claude");
10
+ /** Path to the agentic system prompt file. */
11
+ export const AGENTIC_SYSTEM_PROMPT_FILE = path.join(__dirname, "prompts", "agentic-system.md");
12
+ // --- Model mapping ---
13
+ export const MODEL_MAP = {
14
+ sonnet: "sonnet",
15
+ haiku: "haiku",
16
+ opus: "opus",
17
+ };
18
+ // --- Executable resolution ---
19
+ /**
20
+ * Resolve executable path for cross-platform subprocess calls.
21
+ *
22
+ * Uses `where` on Windows and `which` on Unix to find the full path,
23
+ * allowing shell=false in subprocess calls.
24
+ */
25
+ export function getExecutable(name) {
26
+ try {
27
+ const cmd = process.platform === "win32" ? "where" : "which";
28
+ const result = execFileSync(cmd, [name], {
29
+ encoding: "utf-8",
30
+ stdio: ["pipe", "pipe", "pipe"],
31
+ });
32
+ const firstLine = result.trim().split(/\r?\n/)[0];
33
+ if (firstLine) {
34
+ return firstLine;
35
+ }
36
+ }
37
+ catch {
38
+ // Fall through to error
39
+ }
40
+ throw new FileNotFoundError(`Executable not found in PATH: ${name}`);
41
+ }
42
+ /** Custom error for missing executables. */
43
+ export class FileNotFoundError extends Error {
44
+ constructor(message) {
45
+ super(message);
46
+ this.name = "FileNotFoundError";
47
+ }
48
+ }
49
+ // --- Stream-JSON parsing ---
50
+ /** Parse a single line of stream-json output. */
51
+ export function parseStreamJsonLine(line) {
52
+ const trimmed = line.trim();
53
+ if (!trimmed.startsWith("{")) {
54
+ return null;
55
+ }
56
+ try {
57
+ const parsed = JSON.parse(trimmed);
58
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
59
+ return null;
60
+ }
61
+ return parsed;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /** Extract model name from an assistant or system message. */
68
+ export function extractModelFromMessage(data) {
69
+ const msgType = data.type;
70
+ if (msgType === "assistant") {
71
+ const message = data.message;
72
+ if (typeof message !== "object" || message === null)
73
+ return null;
74
+ const model = message.model;
75
+ return typeof model === "string" ? model : null;
76
+ }
77
+ if (msgType === "system") {
78
+ const model = data.model;
79
+ return typeof model === "string" ? model : null;
80
+ }
81
+ return null;
82
+ }
83
+ /** Format model name for display. */
84
+ export function formatModelName(model) {
85
+ if (!model) {
86
+ return "";
87
+ }
88
+ // Pattern 1: claude-{tier}-{major}-{minor}-{date}
89
+ const pattern1 = /^claude-(sonnet|opus|haiku)-(\d+)-(\d+)-\d{8}$/;
90
+ let match = pattern1.exec(model);
91
+ if (match) {
92
+ const [, tier, major, minor] = match;
93
+ return `${tier}-${major}.${minor}`;
94
+ }
95
+ // Pattern 2: claude-{major}-{minor}-{tier}-{date}
96
+ const pattern2 = /^claude-(\d+)-(\d+)-(sonnet|opus|haiku)-\d{8}$/;
97
+ match = pattern2.exec(model);
98
+ if (match) {
99
+ const [, major, minor, tier] = match;
100
+ return `${tier}-${major}.${minor}`;
101
+ }
102
+ // Pattern 3: claude-{tier}-{date} (no version)
103
+ const pattern3 = /^claude-(sonnet|opus|haiku)-\d{8}$/;
104
+ match = pattern3.exec(model);
105
+ if (match) {
106
+ return match[1];
107
+ }
108
+ return model;
109
+ }
110
+ /**
111
+ * Extract text content from an assistant message.
112
+ *
113
+ * Handles two stream-json formats:
114
+ * 1. Verbose format: {"type": "assistant", "message": {"content": [...]}}
115
+ * 2. Stream event format: {"type": "stream_event", "event": {"type": "content_block_delta", ...}}
116
+ *
117
+ * Returns array of [content_block_index, text] tuples.
118
+ */
119
+ export function extractTextFromMessage(data) {
120
+ const msgType = data.type;
121
+ const results = [];
122
+ if (msgType === "assistant") {
123
+ const message = data.message;
124
+ if (typeof message !== "object" || message === null)
125
+ return results;
126
+ const msg = message;
127
+ const contentRaw = msg.content;
128
+ if (!Array.isArray(contentRaw))
129
+ return results;
130
+ for (let idx = 0; idx < contentRaw.length; idx++) {
131
+ const block = contentRaw[idx];
132
+ if (typeof block === "object" &&
133
+ block !== null &&
134
+ block.type === "text") {
135
+ const text = block.text;
136
+ if (typeof text === "string" && text) {
137
+ results.push([idx, text]);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ else if (msgType === "stream_event") {
143
+ const eventRaw = data.event;
144
+ if (typeof eventRaw !== "object" || eventRaw === null)
145
+ return results;
146
+ const event = eventRaw;
147
+ const eventType = event.type;
148
+ if (eventType === "content_block_delta") {
149
+ const idx = typeof event.index === "number" ? event.index : 0;
150
+ const deltaRaw = event.delta;
151
+ if (typeof deltaRaw !== "object" || deltaRaw === null)
152
+ return results;
153
+ const delta = deltaRaw;
154
+ if (delta.type === "text_delta") {
155
+ const text = delta.text;
156
+ if (typeof text === "string" && text) {
157
+ results.push([idx, text]);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ return results;
163
+ }
164
+ /** Extract text content from a user message. */
165
+ export function extractUserText(data) {
166
+ if (data.type !== "user") {
167
+ return null;
168
+ }
169
+ const message = data.message;
170
+ if (typeof message !== "object" || message === null)
171
+ return null;
172
+ const msg = message;
173
+ const contentRaw = msg.content;
174
+ if (!Array.isArray(contentRaw))
175
+ return null;
176
+ const texts = [];
177
+ for (const block of contentRaw) {
178
+ if (typeof block === "object" &&
179
+ block !== null &&
180
+ block.type === "text") {
181
+ const text = block.text;
182
+ if (typeof text === "string" && text) {
183
+ texts.push(text);
184
+ }
185
+ }
186
+ else if (typeof block === "string") {
187
+ texts.push(block);
188
+ }
189
+ }
190
+ return texts.length > 0 ? texts.join("\n") : null;
191
+ }
192
+ /** Extract the final result text from a result message. */
193
+ export function extractResultText(data) {
194
+ if (data.type !== "result") {
195
+ return null;
196
+ }
197
+ return data.result ?? null;
198
+ }
199
+ // --- System prompt ---
200
+ /** Load the agentic system prompt from file. */
201
+ export function getAgenticSystemPrompt() {
202
+ if (existsSync(AGENTIC_SYSTEM_PROMPT_FILE)) {
203
+ return readFileSync(AGENTIC_SYSTEM_PROMPT_FILE, "utf-8");
204
+ }
205
+ return null;
206
+ }
207
+ // --- SessionOutput ---
208
+ export class SessionOutput {
209
+ sessionId;
210
+ isSuccess;
211
+ context;
212
+ extra;
213
+ rawJson;
214
+ constructor(sessionId = null, isSuccess = false, context = "", extra = {}, rawJson = null) {
215
+ this.sessionId = sessionId;
216
+ this.isSuccess = isSuccess;
217
+ this.context = context;
218
+ this.extra = extra;
219
+ this.rawJson = rawJson;
220
+ }
221
+ /**
222
+ * Extract the session output JSON from Claude's stdout.
223
+ *
224
+ * Looks for the last JSON block that contains the required base keys
225
+ * (sessionId, isSuccess, context).
226
+ */
227
+ static fromStdout(stdout) {
228
+ if (!stdout) {
229
+ return new SessionOutput(null, false, "No output received from Claude session");
230
+ }
231
+ // Find all JSON blocks in code blocks
232
+ const jsonPattern = /```(?:json)?\s*(\{[^`]*\})\s*```/gs;
233
+ const codeBlockMatches = [...stdout.matchAll(jsonPattern)].map((m) => m[1]);
234
+ // Also look for bare JSON objects with sessionId
235
+ const bareJsonPattern = /\{[^{}]*"sessionId"[^{}]*\}/gs;
236
+ const bareMatches = [...stdout.matchAll(bareJsonPattern)].map((m) => m[0]);
237
+ const allMatches = [...codeBlockMatches, ...bareMatches];
238
+ // Try to parse each match, starting from the last (most recent)
239
+ for (let i = allMatches.length - 1; i >= 0; i--) {
240
+ try {
241
+ const data = JSON.parse(allMatches[i]);
242
+ if ("sessionId" in data && "isSuccess" in data && "context" in data) {
243
+ const extra = {};
244
+ for (const [k, v] of Object.entries(data)) {
245
+ if (k !== "sessionId" && k !== "isSuccess" && k !== "context") {
246
+ extra[k] = v;
247
+ }
248
+ }
249
+ return new SessionOutput(data.sessionId, Boolean(data.isSuccess), data.context ?? "", extra, data);
250
+ }
251
+ }
252
+ catch {
253
+ // Invalid JSON, try next match
254
+ }
255
+ }
256
+ return new SessionOutput(null, false, "No valid session output JSON found in Claude response");
257
+ }
258
+ }
259
+ // --- ClaudeResult ---
260
+ export class ClaudeResult {
261
+ returncode;
262
+ stdout;
263
+ stderr;
264
+ prompt;
265
+ cwd;
266
+ model;
267
+ _sessionOutput = null;
268
+ constructor(returncode, stdout, stderr, prompt, cwd, model = null) {
269
+ this.returncode = returncode;
270
+ this.stdout = stdout;
271
+ this.stderr = stderr;
272
+ this.prompt = prompt;
273
+ this.cwd = cwd;
274
+ this.model = model;
275
+ }
276
+ get success() {
277
+ return this.returncode === 0;
278
+ }
279
+ get sessionOutput() {
280
+ if (this._sessionOutput === null) {
281
+ this._sessionOutput = SessionOutput.fromStdout(this.stdout);
282
+ }
283
+ return this._sessionOutput;
284
+ }
285
+ toString() {
286
+ const status = this.success ? "SUCCESS" : "FAILED";
287
+ const modelStr = this.model ? `, model=${this.model}` : "";
288
+ return `ClaudeResult(${status}${modelStr})`;
289
+ }
290
+ }
291
+ // --- Main run function ---
292
+ /** Run claude with the given prompt. */
293
+ export function runClaude(options) {
294
+ const { prompt, cwd = null, model = "sonnet", timeout = 300, printOutput = false, skipPermissions = false, allowedTools = null, console: consoleOutput = null, appendSystemPrompt = true, workflowId = null, } = options;
295
+ const claudePath = getExecutable("claude");
296
+ const cmd = [claudePath, "--print"];
297
+ // Add bundled skills directory for skill discovery
298
+ if (existsSync(SKILLS_DIR)) {
299
+ cmd.push("--add-dir", SKILLS_DIR);
300
+ }
301
+ // Use stream-json format when streaming output for real-time parsing
302
+ if (printOutput) {
303
+ cmd.push("--output-format", "stream-json", "--verbose");
304
+ }
305
+ if (model && model in MODEL_MAP) {
306
+ cmd.push("--model", MODEL_MAP[model]);
307
+ }
308
+ if (skipPermissions) {
309
+ cmd.push("--dangerously-skip-permissions");
310
+ }
311
+ if (allowedTools) {
312
+ for (const tool of allowedTools) {
313
+ cmd.push("--allowedTools", tool);
314
+ }
315
+ }
316
+ // Append agentic system prompt for standardized output format
317
+ if (appendSystemPrompt) {
318
+ const systemPrompt = getAgenticSystemPrompt();
319
+ if (systemPrompt) {
320
+ cmd.push("--append-system-prompt", systemPrompt);
321
+ }
322
+ }
323
+ const cwdStr = cwd ?? undefined;
324
+ // Set up environment with OTEL tracing if workflow_id is provided
325
+ const env = workflowId
326
+ ? { ...process.env, OTEL_RESOURCE_ATTRIBUTES: `session=${workflowId}` }
327
+ : undefined;
328
+ if (printOutput) {
329
+ return runClaudeStreaming(cmd, prompt, cwdStr, env, timeout, consoleOutput, model, cwd);
330
+ }
331
+ return runClaudeNonStreaming(cmd, prompt, cwdStr, env, timeout, model, cwd);
332
+ }
333
+ function runClaudeStreaming(cmd, prompt, cwdStr, env, timeout, consoleOutput, model, cwd) {
334
+ return new Promise((resolve) => {
335
+ const [executable, ...args] = cmd;
336
+ const proc = spawn(executable, args, {
337
+ cwd: cwdStr,
338
+ env,
339
+ stdio: ["pipe", "pipe", "pipe"],
340
+ });
341
+ if (proc.stdin) {
342
+ proc.stdin.write(prompt);
343
+ proc.stdin.end();
344
+ }
345
+ // Show user prompt at start in ALL mode
346
+ if (consoleOutput) {
347
+ consoleOutput.streamText(prompt, "user");
348
+ consoleOutput.streamComplete();
349
+ }
350
+ const collectedText = [];
351
+ let resultText = null;
352
+ const accumulatedText = new Map();
353
+ let currentModel = null;
354
+ let hasStreamedContent = false;
355
+ let stderrData = "";
356
+ if (proc.stderr) {
357
+ proc.stderr.on("data", (chunk) => {
358
+ stderrData += chunk.toString("utf-8");
359
+ });
360
+ proc.stderr.on("error", () => {
361
+ // Stream error during process execution; stderr data already captured
362
+ });
363
+ }
364
+ let lineBuffer = "";
365
+ if (proc.stdout) {
366
+ proc.stdout.on("data", (chunk) => {
367
+ lineBuffer += chunk.toString("utf-8");
368
+ const lines = lineBuffer.split("\n");
369
+ // Keep the last partial line in the buffer
370
+ lineBuffer = lines.pop() ?? "";
371
+ for (const line of lines) {
372
+ const data = parseStreamJsonLine(line);
373
+ if (data === null)
374
+ continue;
375
+ // Extract model from assistant messages
376
+ const extractedModel = extractModelFromMessage(data);
377
+ if (extractedModel) {
378
+ currentModel = extractedModel;
379
+ }
380
+ const msgType = data.type;
381
+ // When a new assistant message starts, complete the previous one
382
+ if (msgType === "assistant" && hasStreamedContent && consoleOutput) {
383
+ consoleOutput.streamComplete();
384
+ hasStreamedContent = false;
385
+ accumulatedText.clear();
386
+ }
387
+ // Handle user messages (tool results in stream-json)
388
+ const userText = extractUserText(data);
389
+ if (userText && consoleOutput) {
390
+ if (hasStreamedContent) {
391
+ consoleOutput.streamComplete();
392
+ hasStreamedContent = false;
393
+ }
394
+ consoleOutput.streamText(userText, "user");
395
+ consoleOutput.streamComplete();
396
+ }
397
+ // Extract text from assistant messages for streaming
398
+ const isStreamEvent = msgType === "stream_event";
399
+ for (const [idx, text] of extractTextFromMessage(data)) {
400
+ let delta;
401
+ if (isStreamEvent) {
402
+ delta = text;
403
+ }
404
+ else {
405
+ const prevText = accumulatedText.get(idx) ?? "";
406
+ delta = text.startsWith(prevText) ? text.slice(prevText.length) : text;
407
+ accumulatedText.set(idx, text);
408
+ }
409
+ if (delta) {
410
+ if (consoleOutput) {
411
+ consoleOutput.streamText(delta, "assistant", currentModel);
412
+ hasStreamedContent = true;
413
+ }
414
+ else {
415
+ process.stdout.write(delta);
416
+ }
417
+ collectedText.push(delta);
418
+ }
419
+ }
420
+ // Capture final result
421
+ const result = extractResultText(data);
422
+ if (result !== null) {
423
+ resultText = result;
424
+ }
425
+ }
426
+ });
427
+ }
428
+ if (proc.stdout) {
429
+ proc.stdout.on("error", () => {
430
+ // Stream error during process execution; stdout data already captured
431
+ });
432
+ }
433
+ // Handle timeout
434
+ let timeoutId = null;
435
+ if (timeout) {
436
+ timeoutId = setTimeout(() => {
437
+ proc.stdout?.destroy();
438
+ proc.stderr?.destroy();
439
+ proc.kill();
440
+ }, timeout * 1000);
441
+ }
442
+ proc.on("close", (code) => {
443
+ if (timeoutId)
444
+ clearTimeout(timeoutId);
445
+ // Process any remaining data in the line buffer
446
+ if (lineBuffer.trim()) {
447
+ const data = parseStreamJsonLine(lineBuffer);
448
+ if (data) {
449
+ const result = extractResultText(data);
450
+ if (result !== null) {
451
+ resultText = result;
452
+ }
453
+ }
454
+ }
455
+ if (consoleOutput && hasStreamedContent) {
456
+ consoleOutput.streamComplete();
457
+ }
458
+ const finalOutput = resultText ?? collectedText.join("");
459
+ resolve(new ClaudeResult(code ?? 1, finalOutput, stderrData, prompt, cwd, model));
460
+ });
461
+ });
462
+ }
463
+ function runClaudeNonStreaming(cmd, prompt, cwdStr, env, timeout, model, cwd) {
464
+ return new Promise((resolve) => {
465
+ const [executable, ...args] = cmd;
466
+ const proc = spawn(executable, args, {
467
+ cwd: cwdStr,
468
+ env,
469
+ stdio: ["pipe", "pipe", "pipe"],
470
+ });
471
+ if (proc.stdin) {
472
+ proc.stdin.write(prompt);
473
+ proc.stdin.end();
474
+ }
475
+ const stdoutChunks = [];
476
+ const stderrChunks = [];
477
+ if (proc.stdout) {
478
+ proc.stdout.on("data", (chunk) => {
479
+ stdoutChunks.push(chunk.toString("utf-8"));
480
+ });
481
+ proc.stdout.on("error", () => { });
482
+ }
483
+ if (proc.stderr) {
484
+ proc.stderr.on("data", (chunk) => {
485
+ stderrChunks.push(chunk.toString("utf-8"));
486
+ });
487
+ proc.stderr.on("error", () => { });
488
+ }
489
+ let timeoutId = null;
490
+ let timedOut = false;
491
+ if (timeout) {
492
+ timeoutId = setTimeout(() => {
493
+ timedOut = true;
494
+ proc.stdout?.destroy();
495
+ proc.stderr?.destroy();
496
+ proc.kill();
497
+ }, timeout * 1000);
498
+ }
499
+ proc.on("close", (code) => {
500
+ if (timeoutId)
501
+ clearTimeout(timeoutId);
502
+ if (timedOut) {
503
+ resolve(new ClaudeResult(1, "", `Command timed out after ${timeout} seconds`, prompt, cwd, model));
504
+ return;
505
+ }
506
+ resolve(new ClaudeResult(code ?? 1, stdoutChunks.join(""), stderrChunks.join(""), prompt, cwd, model));
507
+ });
508
+ });
509
+ }
510
+ /** Check if the claude CLI is available. */
511
+ export function checkClaudeAvailable() {
512
+ try {
513
+ const claudePath = getExecutable("claude");
514
+ const result = execFileSync(claudePath, ["--version"], {
515
+ encoding: "utf-8",
516
+ stdio: ["pipe", "pipe", "pipe"],
517
+ timeout: 10000,
518
+ });
519
+ return result !== undefined;
520
+ }
521
+ catch (err) {
522
+ if (err instanceof FileNotFoundError) {
523
+ return false;
524
+ }
525
+ // execFileSync throws on non-zero exit or timeout
526
+ return false;
527
+ }
528
+ }
529
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Signal handling for graceful shutdown. */
2
+ import type { WorkflowProgress } from "./types.js";
3
+ export declare class SignalManager {
4
+ private _shutdownRequested;
5
+ private readonly _onShutdown;
6
+ private readonly _handler;
7
+ constructor(onShutdown?: () => void);
8
+ private _installHandlers;
9
+ dispose(): void;
10
+ private _handleShutdown;
11
+ get shutdownRequested(): boolean;
12
+ requestShutdown(): void;
13
+ }
14
+ export declare function handleGracefulShutdown(progress: WorkflowProgress, logger: {
15
+ info: (step: string, message: string) => void;
16
+ }, repoRoot: string): Promise<void>;
@@ -0,0 +1,50 @@
1
+ /** Signal handling for graceful shutdown. */
2
+ export class SignalManager {
3
+ _shutdownRequested = false;
4
+ _onShutdown;
5
+ _handler;
6
+ constructor(onShutdown) {
7
+ this._onShutdown = onShutdown ?? null;
8
+ this._handler = () => this._handleShutdown();
9
+ this._installHandlers();
10
+ }
11
+ _installHandlers() {
12
+ process.on("SIGINT", this._handler);
13
+ if (process.platform !== "win32") {
14
+ process.on("SIGTERM", this._handler);
15
+ }
16
+ else {
17
+ process.on("SIGBREAK", this._handler);
18
+ }
19
+ }
20
+ dispose() {
21
+ process.removeListener("SIGINT", this._handler);
22
+ if (process.platform !== "win32") {
23
+ process.removeListener("SIGTERM", this._handler);
24
+ }
25
+ else {
26
+ process.removeListener("SIGBREAK", this._handler);
27
+ }
28
+ }
29
+ _handleShutdown() {
30
+ this._shutdownRequested = true;
31
+ console.log("\nShutdown requested, cleaning up...");
32
+ if (this._onShutdown) {
33
+ this._onShutdown();
34
+ }
35
+ }
36
+ get shutdownRequested() {
37
+ return this._shutdownRequested;
38
+ }
39
+ requestShutdown() {
40
+ this._shutdownRequested = true;
41
+ }
42
+ }
43
+ export async function handleGracefulShutdown(progress, logger, repoRoot) {
44
+ // Lazy import to avoid circular dependencies
45
+ const { pruneOrphaned } = await import("./git/worktree.js");
46
+ logger.info("orchestrator", "Performing graceful shutdown");
47
+ progress.status = "canceled";
48
+ pruneOrphaned(repoRoot);
49
+ }
50
+ //# sourceMappingURL=signal-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-manager.js","sourceRoot":"","sources":["../src/signal-manager.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAI7C,MAAM,OAAO,aAAa;IACjB,kBAAkB,GAAG,KAAK,CAAC;IAClB,WAAW,CAAsB;IACjC,QAAQ,CAAa;IAEtC,YAAY,UAAuB;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAEO,gBAAgB;QACvB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;IAEO,eAAe;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;IACF,CAAC;IAED,IAAI,iBAAiB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,eAAe;QACd,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,CAAC;CACD;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,QAA0B,EAC1B,MAAyD,EACzD,QAAgB;IAEhB,6CAA6C;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE5D,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;IAE7B,aAAa,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** Base class and types for step executors. */
2
+ import type { ConsoleOutput } from "../console.js";
3
+ import type { WorkflowLogger } from "../logging/logger.js";
4
+ import type { TemplateRenderer } from "../renderer.js";
5
+ import type { StepDefinition, WorkflowProgress, WorkflowSettings } from "../types.js";
6
+ export interface StepContext {
7
+ repoRoot: string;
8
+ config: Record<string, unknown>;
9
+ renderer: TemplateRenderer;
10
+ workflowSettings: WorkflowSettings | null;
11
+ workflowId: string;
12
+ variables: Record<string, unknown>;
13
+ outputs: Record<string, unknown>;
14
+ cwdOverride?: string | null;
15
+ }
16
+ export declare function buildTemplateContext(context: StepContext): Record<string, unknown>;
17
+ export declare function resolveModel(context: StepContext, stepModel?: string | null): string;
18
+ export interface StepResult {
19
+ success: boolean;
20
+ outputSummary?: string;
21
+ fullOutput?: string;
22
+ error?: string;
23
+ }
24
+ export declare abstract class StepExecutor {
25
+ abstract execute(step: StepDefinition, progress: WorkflowProgress, context: StepContext, logger: WorkflowLogger, console: ConsoleOutput): Promise<StepResult>;
26
+ }
27
+ /** Callable type for executing a single step within a composite executor. */
28
+ export type BranchStepExecutor = (step: StepDefinition, progress: WorkflowProgress, context: StepContext, logger: WorkflowLogger, console: ConsoleOutput) => Promise<StepResult>;