poe-code 3.0.93 → 3.0.95
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/dist/SYSTEM_PROMPT.md +15 -0
- package/dist/cli/commands/spawn.js +21 -2
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/options.js +0 -11
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/program.js +17 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +28395 -29276
- package/dist/index.js.map +4 -4
- package/dist/providers/claude-code.js.map +2 -2
- package/dist/providers/codex.js.map +2 -2
- package/dist/providers/kimi.js.map +2 -2
- package/dist/providers/opencode.js.map +2 -2
- package/dist/providers/poe-agent.d.ts +3 -3
- package/dist/providers/poe-agent.js +5151 -3487
- package/dist/providers/poe-agent.js.map +4 -4
- package/dist/sdk/spawn.js +3 -22
- package/dist/sdk/spawn.js.map +1 -1
- package/dist/sdk/types.d.ts +2 -0
- package/dist/templates/pipeline/SKILL_plan.md +53 -0
- package/dist/templates/pipeline/steps.yaml.hbs +36 -0
- package/package.json +1 -1
- package/dist/cli/commands/ralph-worktree.d.ts +0 -3
- package/dist/cli/commands/ralph-worktree.js +0 -73
- package/dist/cli/commands/ralph-worktree.js.map +0 -1
- package/dist/cli/commands/ralph.d.ts +0 -3
- package/dist/cli/commands/ralph.js +0 -559
- package/dist/cli/commands/ralph.js.map +0 -1
|
@@ -1,559 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { select, isCancel, cancel, promptText, confirm } from "@poe-code/design-system";
|
|
3
|
-
import { loadConfig, ralphBuild, logActivity, resolvePlanPath, parsePlan } from "@poe-code/ralph";
|
|
4
|
-
import { supportedAgents, resolveAgentSupport, installSkill } from "@poe-code/agent-skill-config";
|
|
5
|
-
import { renderTemplate } from "@poe-code/config-mutations";
|
|
6
|
-
import { ValidationError } from "../errors.js";
|
|
7
|
-
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
8
|
-
import { registerRalphWorktreeCommand } from "./ralph-worktree.js";
|
|
9
|
-
// Template imports are lazy to avoid breaking tsx/tsc output
|
|
10
|
-
// (Node.js can't resolve .md/.log as ESM modules)
|
|
11
|
-
const templateImports = {
|
|
12
|
-
promptPartialPlan: () => import("../../templates/ralph/PROMPT_PARTIAL_plan.md"),
|
|
13
|
-
skillPlan: () => import("../../templates/ralph/SKILL_plan.md"),
|
|
14
|
-
promptPlan: () => import("../../templates/ralph/PROMPT_plan.md"),
|
|
15
|
-
promptBuild: () => import("../../templates/ralph/PROMPT_build.md"),
|
|
16
|
-
refGuardrails: () => import("../../templates/ralph/references/GUARDRAILS.md"),
|
|
17
|
-
refContextEngineering: () => import("../../templates/ralph/references/CONTEXT_ENGINEERING.md"),
|
|
18
|
-
stateProgress: () => import("../../templates/ralph/state/progress.md"),
|
|
19
|
-
stateGuardrails: () => import("../../templates/ralph/state/guardrails.md"),
|
|
20
|
-
stateErrors: () => import("../../templates/ralph/state/errors.log"),
|
|
21
|
-
stateActivity: () => import("../../templates/ralph/state/activity.log"),
|
|
22
|
-
};
|
|
23
|
-
async function loadRalphTemplates() {
|
|
24
|
-
const [promptPartialPlan, skillPlan, promptPlan, promptBuild, refGuardrails, refContextEngineering, stateProgress, stateGuardrails, stateErrors, stateActivity] = await Promise.all([
|
|
25
|
-
templateImports.promptPartialPlan(),
|
|
26
|
-
templateImports.skillPlan(),
|
|
27
|
-
templateImports.promptPlan(),
|
|
28
|
-
templateImports.promptBuild(),
|
|
29
|
-
templateImports.refGuardrails(),
|
|
30
|
-
templateImports.refContextEngineering(),
|
|
31
|
-
templateImports.stateProgress(),
|
|
32
|
-
templateImports.stateGuardrails(),
|
|
33
|
-
templateImports.stateErrors(),
|
|
34
|
-
templateImports.stateActivity(),
|
|
35
|
-
]);
|
|
36
|
-
return {
|
|
37
|
-
promptPartialPlan: promptPartialPlan.default,
|
|
38
|
-
skillPlan: skillPlan.default,
|
|
39
|
-
promptPlan: promptPlan.default,
|
|
40
|
-
promptBuild: promptBuild.default,
|
|
41
|
-
refGuardrails: refGuardrails.default,
|
|
42
|
-
refContextEngineering: refContextEngineering.default,
|
|
43
|
-
stateProgress: stateProgress.default,
|
|
44
|
-
stateGuardrails: stateGuardrails.default,
|
|
45
|
-
stateErrors: stateErrors.default,
|
|
46
|
-
stateActivity: stateActivity.default,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
const DEFAULT_RALPH_AGENT = "claude-code";
|
|
50
|
-
async function pathExists(fs, filePath) {
|
|
51
|
-
try {
|
|
52
|
-
await fs.stat(filePath);
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
if (error &&
|
|
57
|
-
typeof error === "object" &&
|
|
58
|
-
"code" in error &&
|
|
59
|
-
error.code === "ENOENT") {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
throw error;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function formatDuration(ms) {
|
|
66
|
-
const totalSeconds = Math.round(ms / 1000);
|
|
67
|
-
const minutes = Math.floor(totalSeconds / 60);
|
|
68
|
-
const seconds = totalSeconds % 60;
|
|
69
|
-
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
70
|
-
}
|
|
71
|
-
function resolveIterations(value) {
|
|
72
|
-
const parsed = Number.parseInt(value, 10);
|
|
73
|
-
if (!Number.isFinite(parsed) || parsed < 1) {
|
|
74
|
-
throw new ValidationError(`Invalid iterations "${value}". Expected a positive integer.`);
|
|
75
|
-
}
|
|
76
|
-
return parsed;
|
|
77
|
-
}
|
|
78
|
-
function computeMaxIterations(openCount) {
|
|
79
|
-
return Math.max(openCount * 2, openCount + 10);
|
|
80
|
-
}
|
|
81
|
-
function resolveMaxFailures(value) {
|
|
82
|
-
if (value == null) {
|
|
83
|
-
return 3;
|
|
84
|
-
}
|
|
85
|
-
const parsed = Number.parseInt(value, 10);
|
|
86
|
-
if (!Number.isFinite(parsed) || parsed < 1) {
|
|
87
|
-
throw new ValidationError(`Invalid max failures "${value}". Expected a positive integer.`);
|
|
88
|
-
}
|
|
89
|
-
return parsed;
|
|
90
|
-
}
|
|
91
|
-
async function writeFileOrSkip(args) {
|
|
92
|
-
const exists = await pathExists(args.fs, args.filePath);
|
|
93
|
-
if (exists && !args.force) {
|
|
94
|
-
args.logger.info(`Skip: ${args.displayPath} (already exists)`);
|
|
95
|
-
return "skipped";
|
|
96
|
-
}
|
|
97
|
-
await args.fs.mkdir(path.dirname(args.filePath), { recursive: true });
|
|
98
|
-
await args.fs.writeFile(args.filePath, args.contents, { encoding: "utf8" });
|
|
99
|
-
args.logger.info(`${exists ? "Overwrite" : "Create"}: ${args.displayPath}`);
|
|
100
|
-
return "written";
|
|
101
|
-
}
|
|
102
|
-
async function installRalphTemplates(args) {
|
|
103
|
-
const resources = createExecutionResources(args.container, args.flags, "ralph:install");
|
|
104
|
-
try {
|
|
105
|
-
resources.logger.intro(`ralph install (${args.agent}, ${args.scope})`);
|
|
106
|
-
const cwd = args.container.env.cwd;
|
|
107
|
-
const force = args.force;
|
|
108
|
-
const support = resolveAgentSupport(args.agent);
|
|
109
|
-
if (support.status !== "supported" || !support.config) {
|
|
110
|
-
throw new ValidationError(`Unsupported agent: ${args.agent}`);
|
|
111
|
-
}
|
|
112
|
-
const templates = await loadRalphTemplates();
|
|
113
|
-
// Install /plan skill to agent's skill directory
|
|
114
|
-
const skillContents = renderTemplate(templates.skillPlan, { PROMPT_PARTIAL_PLAN: templates.promptPartialPlan });
|
|
115
|
-
const skillResult = await installSkill(args.agent, { name: "poe-code-ralph-plan", content: skillContents }, {
|
|
116
|
-
fs: resources.context.fs,
|
|
117
|
-
cwd,
|
|
118
|
-
homeDir: args.container.env.homeDir,
|
|
119
|
-
scope: args.scope,
|
|
120
|
-
dryRun: args.flags.dryRun
|
|
121
|
-
});
|
|
122
|
-
resources.logger.info(`Create: ${skillResult.displayPath}`);
|
|
123
|
-
// Install project templates to .agents/poe-code-ralph
|
|
124
|
-
// PROMPT_plan.md: use string replace to preserve {{REQUEST}} and {{OUT_PATH}} as runtime variables
|
|
125
|
-
const promptPlanContents = templates.promptPlan.replace("{{{PROMPT_PARTIAL_PLAN}}}", templates.promptPartialPlan);
|
|
126
|
-
const templateWrites = [
|
|
127
|
-
{
|
|
128
|
-
targetPath: path.join(cwd, ".agents", "poe-code-ralph", "PROMPT_plan.md"),
|
|
129
|
-
displayPath: ".agents/poe-code-ralph/PROMPT_plan.md",
|
|
130
|
-
contents: promptPlanContents
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
targetPath: path.join(cwd, ".agents", "poe-code-ralph", "PROMPT_build.md"),
|
|
134
|
-
displayPath: ".agents/poe-code-ralph/PROMPT_build.md",
|
|
135
|
-
contents: templates.promptBuild
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
targetPath: path.join(cwd, ".agents", "poe-code-ralph", "references", "GUARDRAILS.md"),
|
|
139
|
-
displayPath: ".agents/poe-code-ralph/references/GUARDRAILS.md",
|
|
140
|
-
contents: templates.refGuardrails
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
targetPath: path.join(cwd, ".agents", "poe-code-ralph", "references", "CONTEXT_ENGINEERING.md"),
|
|
144
|
-
displayPath: ".agents/poe-code-ralph/references/CONTEXT_ENGINEERING.md",
|
|
145
|
-
contents: templates.refContextEngineering
|
|
146
|
-
}
|
|
147
|
-
];
|
|
148
|
-
for (const entry of templateWrites) {
|
|
149
|
-
await writeFileOrSkip({
|
|
150
|
-
fs: resources.context.fs,
|
|
151
|
-
filePath: entry.targetPath,
|
|
152
|
-
contents: entry.contents,
|
|
153
|
-
force,
|
|
154
|
-
logger: resources.logger,
|
|
155
|
-
displayPath: entry.displayPath
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
// Install state files to .poe-code-ralph
|
|
159
|
-
const stateFiles = [
|
|
160
|
-
{
|
|
161
|
-
contents: templates.stateProgress,
|
|
162
|
-
targetPath: path.join(cwd, ".poe-code-ralph", "progress.md"),
|
|
163
|
-
displayPath: ".poe-code-ralph/progress.md"
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
contents: templates.stateGuardrails,
|
|
167
|
-
targetPath: path.join(cwd, ".poe-code-ralph", "guardrails.md"),
|
|
168
|
-
displayPath: ".poe-code-ralph/guardrails.md"
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
contents: templates.stateErrors,
|
|
172
|
-
targetPath: path.join(cwd, ".poe-code-ralph", "errors.log"),
|
|
173
|
-
displayPath: ".poe-code-ralph/errors.log"
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
contents: templates.stateActivity,
|
|
177
|
-
targetPath: path.join(cwd, ".poe-code-ralph", "activity.log"),
|
|
178
|
-
displayPath: ".poe-code-ralph/activity.log"
|
|
179
|
-
}
|
|
180
|
-
];
|
|
181
|
-
for (const entry of stateFiles) {
|
|
182
|
-
await writeFileOrSkip({
|
|
183
|
-
fs: resources.context.fs,
|
|
184
|
-
filePath: entry.targetPath,
|
|
185
|
-
contents: entry.contents,
|
|
186
|
-
force,
|
|
187
|
-
logger: resources.logger,
|
|
188
|
-
displayPath: entry.displayPath
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
resources.context.complete({
|
|
192
|
-
success: `Installed Ralph templates for ${args.agent}.`,
|
|
193
|
-
dry: `Dry run: would install Ralph templates for ${args.agent}.`
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
resources.context.finalize();
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
export function registerRalphCommand(program, container) {
|
|
201
|
-
const ralph = program
|
|
202
|
-
.command("ralph")
|
|
203
|
-
.description("Run Ralph iterations for a plan.");
|
|
204
|
-
const agent = ralph.command("agent").description("Agent helper commands.");
|
|
205
|
-
agent
|
|
206
|
-
.command("log")
|
|
207
|
-
.description("Append a message to the Ralph activity log.")
|
|
208
|
-
.option("--activity-log <path>", "Custom activity log path")
|
|
209
|
-
.argument("<message>", "Message to append to the activity log")
|
|
210
|
-
.action(async function (message) {
|
|
211
|
-
const flags = resolveCommandFlags(program);
|
|
212
|
-
if (flags.dryRun) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
const options = this.opts();
|
|
216
|
-
const trimmedMessage = typeof message === "string" ? message.trim() : "";
|
|
217
|
-
if (trimmedMessage.length === 0) {
|
|
218
|
-
throw new ValidationError("Activity log message cannot be empty.");
|
|
219
|
-
}
|
|
220
|
-
let configActivityLogPath;
|
|
221
|
-
try {
|
|
222
|
-
const configResult = await loadConfig(container.env.cwd, {
|
|
223
|
-
fs: container.fs,
|
|
224
|
-
homeDir: container.env.homeDir
|
|
225
|
-
});
|
|
226
|
-
configActivityLogPath = configResult.config.activityLogPath;
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
230
|
-
throw new ValidationError(message);
|
|
231
|
-
}
|
|
232
|
-
const rawPath = options.activityLog?.trim() || configActivityLogPath || ".poe-code-ralph/activity.log";
|
|
233
|
-
const resolvedPath = path.isAbsolute(rawPath)
|
|
234
|
-
? rawPath
|
|
235
|
-
: path.resolve(container.env.cwd, rawPath);
|
|
236
|
-
await logActivity(resolvedPath, trimmedMessage, {
|
|
237
|
-
fs: container.fs
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
agent
|
|
241
|
-
.command("validate-plan")
|
|
242
|
-
.description("Validate a Ralph plan YAML file.")
|
|
243
|
-
.option("--plan <path>", "Path to the plan file")
|
|
244
|
-
.action(async function () {
|
|
245
|
-
const options = this.opts();
|
|
246
|
-
const cwd = container.env.cwd;
|
|
247
|
-
const planPath = options.plan?.trim();
|
|
248
|
-
if (!planPath) {
|
|
249
|
-
throw new ValidationError("--plan <path> is required.");
|
|
250
|
-
}
|
|
251
|
-
const resolvedPath = path.isAbsolute(planPath)
|
|
252
|
-
? planPath
|
|
253
|
-
: path.resolve(cwd, planPath);
|
|
254
|
-
let content;
|
|
255
|
-
try {
|
|
256
|
-
content = await container.fs.readFile(resolvedPath, "utf8");
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
if (error &&
|
|
260
|
-
typeof error === "object" &&
|
|
261
|
-
"code" in error &&
|
|
262
|
-
error.code === "ENOENT") {
|
|
263
|
-
throw new ValidationError(`Plan file not found: ${planPath}`);
|
|
264
|
-
}
|
|
265
|
-
throw error;
|
|
266
|
-
}
|
|
267
|
-
try {
|
|
268
|
-
parsePlan(content);
|
|
269
|
-
console.log(`Plan valid: ${planPath}`);
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
273
|
-
throw new ValidationError(`Invalid plan: ${message}`);
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
ralph
|
|
277
|
-
.command("install")
|
|
278
|
-
.description("Install Ralph templates and /plan skill.")
|
|
279
|
-
.option("--force", "Overwrite existing files")
|
|
280
|
-
.option("--agent <name>", "Agent to install skills for")
|
|
281
|
-
.option("--local", "Use local scope (in the current project)")
|
|
282
|
-
.option("--global", "Use global scope (in the user home directory)")
|
|
283
|
-
.action(async function () {
|
|
284
|
-
const flags = resolveCommandFlags(program);
|
|
285
|
-
const options = this.opts();
|
|
286
|
-
if (options.local && options.global) {
|
|
287
|
-
throw new ValidationError("Use either --local or --global, not both.");
|
|
288
|
-
}
|
|
289
|
-
let agent = options.agent;
|
|
290
|
-
if (!agent) {
|
|
291
|
-
if (flags.assumeYes) {
|
|
292
|
-
agent = DEFAULT_RALPH_AGENT;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
const selected = await select({
|
|
296
|
-
message: "Select agent to install Ralph for:",
|
|
297
|
-
options: supportedAgents.map((a) => ({ value: a, label: a }))
|
|
298
|
-
});
|
|
299
|
-
if (isCancel(selected)) {
|
|
300
|
-
cancel("Operation cancelled");
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
agent = selected;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
const support = resolveAgentSupport(agent);
|
|
307
|
-
if (support.status === "unknown") {
|
|
308
|
-
throw new ValidationError(`Unknown agent: ${agent}`);
|
|
309
|
-
}
|
|
310
|
-
if (support.status === "unsupported") {
|
|
311
|
-
throw new ValidationError(`Skills not supported for ${support.id}.`);
|
|
312
|
-
}
|
|
313
|
-
let scope;
|
|
314
|
-
if (options.local) {
|
|
315
|
-
scope = "local";
|
|
316
|
-
}
|
|
317
|
-
else if (options.global) {
|
|
318
|
-
scope = "global";
|
|
319
|
-
}
|
|
320
|
-
else if (flags.assumeYes) {
|
|
321
|
-
scope = "local";
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
const selected = await select({
|
|
325
|
-
message: "Select scope:",
|
|
326
|
-
options: [
|
|
327
|
-
{ value: "local", label: "Local (project)" },
|
|
328
|
-
{ value: "global", label: "Global (user home)" }
|
|
329
|
-
]
|
|
330
|
-
});
|
|
331
|
-
if (isCancel(selected)) {
|
|
332
|
-
cancel("Operation cancelled");
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
scope = selected;
|
|
336
|
-
}
|
|
337
|
-
await installRalphTemplates({
|
|
338
|
-
container,
|
|
339
|
-
flags,
|
|
340
|
-
force: Boolean(options.force),
|
|
341
|
-
agent: support.id ?? agent,
|
|
342
|
-
scope
|
|
343
|
-
});
|
|
344
|
-
});
|
|
345
|
-
ralph
|
|
346
|
-
.command("build")
|
|
347
|
-
.description("Run the Ralph build loop for the selected plan.")
|
|
348
|
-
.option("--plan <path>", "Path to the plan file")
|
|
349
|
-
.option("--agent <name>", "Agent name to run (default: codex)")
|
|
350
|
-
.option("--model <model>", "Model override passed to the agent for the entire run")
|
|
351
|
-
.option("--commit", "Instruct the agent to commit changes")
|
|
352
|
-
.option("--no-commit", "Instruct the agent not to commit changes")
|
|
353
|
-
.option("--max-failures <n>", "Warn after <n> consecutive failures (default 3)")
|
|
354
|
-
.option("--pause-on-overbake", "Pause and prompt when overbaking is detected")
|
|
355
|
-
.option("--worktree", "Run the build loop in an isolated git worktree")
|
|
356
|
-
.option("--worktree-name <name>", "Name for the worktree (default: derived from plan file name)")
|
|
357
|
-
.argument("[iterations]", "Number of iterations to run (default 25)")
|
|
358
|
-
.action(async function (iterations) {
|
|
359
|
-
const flags = resolveCommandFlags(program);
|
|
360
|
-
const options = this.opts();
|
|
361
|
-
const resources = createExecutionResources(container, flags, "ralph:build");
|
|
362
|
-
try {
|
|
363
|
-
resources.logger.intro("ralph build");
|
|
364
|
-
let configResult;
|
|
365
|
-
try {
|
|
366
|
-
configResult = await loadConfig(container.env.cwd, {
|
|
367
|
-
fs: container.fs,
|
|
368
|
-
homeDir: container.env.homeDir
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
catch (error) {
|
|
372
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
373
|
-
throw new ValidationError(message);
|
|
374
|
-
}
|
|
375
|
-
const config = configResult.config;
|
|
376
|
-
const explicitIterations = typeof iterations === "string" ? resolveIterations(iterations) : undefined;
|
|
377
|
-
const rawAgent = options.agent?.trim() ? options.agent.trim() : config.agent ?? "codex";
|
|
378
|
-
const agentSupport = resolveAgentSupport(rawAgent);
|
|
379
|
-
if (agentSupport.status === "unknown") {
|
|
380
|
-
throw new ValidationError(`Unknown agent: ${rawAgent}`);
|
|
381
|
-
}
|
|
382
|
-
const agent = agentSupport.id ?? rawAgent;
|
|
383
|
-
const configuredCommit = config.commit;
|
|
384
|
-
let commit;
|
|
385
|
-
if (options.commit !== undefined) {
|
|
386
|
-
// --commit or --no-commit explicitly passed
|
|
387
|
-
commit = options.commit;
|
|
388
|
-
}
|
|
389
|
-
else if (flags.assumeYes) {
|
|
390
|
-
// --yes accepts configured default, else true
|
|
391
|
-
commit = configuredCommit ?? true;
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
const answer = await confirm({
|
|
395
|
-
message: "Should the agent commit changes? (--commit)",
|
|
396
|
-
initialValue: configuredCommit ?? true
|
|
397
|
-
});
|
|
398
|
-
if (isCancel(answer)) {
|
|
399
|
-
cancel("Operation cancelled");
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
commit = Boolean(answer);
|
|
403
|
-
}
|
|
404
|
-
const staleSeconds = config.staleSeconds ?? 60;
|
|
405
|
-
const maxFailures = typeof options.maxFailures === "string" ? resolveMaxFailures(options.maxFailures) : undefined;
|
|
406
|
-
const pauseOnOverbake = Boolean(options.pauseOnOverbake);
|
|
407
|
-
const worktreeEnabled = Boolean(options.worktree);
|
|
408
|
-
const worktree = worktreeEnabled
|
|
409
|
-
? { enabled: true, name: options.worktreeName?.trim() || undefined }
|
|
410
|
-
: undefined;
|
|
411
|
-
const cwd = container.env.cwd;
|
|
412
|
-
let planPath;
|
|
413
|
-
if (flags.dryRun && !options.plan && !config.planPath) {
|
|
414
|
-
planPath = null;
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
try {
|
|
418
|
-
planPath = await resolvePlanPath({
|
|
419
|
-
cwd: container.env.cwd,
|
|
420
|
-
plan: options.plan ?? config.planPath,
|
|
421
|
-
assumeYes: flags.assumeYes,
|
|
422
|
-
fs: container.fs
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
catch (error) {
|
|
426
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
427
|
-
throw new ValidationError(message);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
let dummyPlanUsed = false;
|
|
431
|
-
if (!planPath) {
|
|
432
|
-
if (flags.dryRun) {
|
|
433
|
-
dummyPlanUsed = true;
|
|
434
|
-
}
|
|
435
|
-
else if (flags.assumeYes) {
|
|
436
|
-
throw new ValidationError("No plan found. Provide --plan <path> to an existing plan file.");
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
const entered = await promptText({
|
|
440
|
-
message: "Enter path to plan file:",
|
|
441
|
-
placeholder: ".agents/poe-code-ralph/plans/plan.yaml"
|
|
442
|
-
});
|
|
443
|
-
if (isCancel(entered)) {
|
|
444
|
-
cancel("Operation cancelled");
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
planPath = entered;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
const dummyStories = dummyPlanUsed
|
|
451
|
-
? [
|
|
452
|
-
{ id: "US-001", title: "Sample story: scaffold the feature", status: "open" },
|
|
453
|
-
{ id: "US-002", title: "Sample story: implement core logic", status: "in_progress" },
|
|
454
|
-
{ id: "US-003", title: "Sample story: add tests and cleanup", status: "open" }
|
|
455
|
-
]
|
|
456
|
-
: undefined;
|
|
457
|
-
let maxIterations;
|
|
458
|
-
if (explicitIterations !== undefined) {
|
|
459
|
-
maxIterations = explicitIterations;
|
|
460
|
-
}
|
|
461
|
-
else if (config.maxIterations !== undefined) {
|
|
462
|
-
maxIterations = config.maxIterations;
|
|
463
|
-
}
|
|
464
|
-
else if (dummyPlanUsed) {
|
|
465
|
-
maxIterations = computeMaxIterations(2);
|
|
466
|
-
}
|
|
467
|
-
else {
|
|
468
|
-
try {
|
|
469
|
-
const planContent = await container.fs.readFile(path.resolve(cwd, planPath), "utf8");
|
|
470
|
-
const plan = parsePlan(planContent);
|
|
471
|
-
const done = plan.stories.filter((s) => s.status === "done").length;
|
|
472
|
-
const inProgress = plan.stories.filter((s) => s.status === "in_progress").length;
|
|
473
|
-
const open = plan.stories.length - done - inProgress;
|
|
474
|
-
maxIterations = computeMaxIterations(open);
|
|
475
|
-
}
|
|
476
|
-
catch {
|
|
477
|
-
maxIterations = 25;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
const model = options.model?.trim() || undefined;
|
|
481
|
-
const configLines = [
|
|
482
|
-
`Agent: ${agent}`,
|
|
483
|
-
`Iterations: ${maxIterations}`
|
|
484
|
-
];
|
|
485
|
-
if (model)
|
|
486
|
-
configLines.push(`Model: ${model}`);
|
|
487
|
-
if (!commit)
|
|
488
|
-
configLines.push("Commit: false");
|
|
489
|
-
if (worktree)
|
|
490
|
-
configLines.push(`Worktree: ${worktree.name ?? "(auto)"}`);
|
|
491
|
-
for (const source of configResult.sources) {
|
|
492
|
-
configLines.push(`${source.scope}: ${source.path}`);
|
|
493
|
-
}
|
|
494
|
-
resources.logger.resolved("Config", configLines.join("\n "));
|
|
495
|
-
if (dummyPlanUsed) {
|
|
496
|
-
const stories = dummyStories;
|
|
497
|
-
const total = stories.length;
|
|
498
|
-
const done = stories.filter((s) => s.status === "done").length;
|
|
499
|
-
const inProgress = stories.filter((s) => s.status === "in_progress").length;
|
|
500
|
-
const open = total - done - inProgress;
|
|
501
|
-
resources.logger.resolved("Stories", `${done}/${total} done${inProgress ? `, ${inProgress} in progress` : ""}${open ? `, ${open} open` : ""} (dummy plan)`);
|
|
502
|
-
}
|
|
503
|
-
else {
|
|
504
|
-
try {
|
|
505
|
-
const planContent = await container.fs.readFile(path.resolve(cwd, planPath), "utf8");
|
|
506
|
-
const plan = parsePlan(planContent);
|
|
507
|
-
const total = plan.stories.length;
|
|
508
|
-
const done = plan.stories.filter((s) => s.status === "done").length;
|
|
509
|
-
const inProgress = plan.stories.filter((s) => s.status === "in_progress").length;
|
|
510
|
-
const open = total - done - inProgress;
|
|
511
|
-
resources.logger.resolved("Stories", `${done}/${total} done${inProgress ? `, ${inProgress} in progress` : ""}${open ? `, ${open} open` : ""}`);
|
|
512
|
-
}
|
|
513
|
-
catch {
|
|
514
|
-
// Plan file may not be parseable yet
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
if (flags.dryRun) {
|
|
518
|
-
resources.logger.success("Dry run complete. No agents spawned.");
|
|
519
|
-
return;
|
|
520
|
-
}
|
|
521
|
-
const buildResult = await ralphBuild({
|
|
522
|
-
planPath: planPath,
|
|
523
|
-
progressPath: config.progressPath,
|
|
524
|
-
guardrailsPath: config.guardrailsPath,
|
|
525
|
-
errorsLogPath: config.errorsLogPath,
|
|
526
|
-
activityLogPath: config.activityLogPath,
|
|
527
|
-
maxIterations,
|
|
528
|
-
maxFailures,
|
|
529
|
-
pauseOnOverbake,
|
|
530
|
-
agent,
|
|
531
|
-
model,
|
|
532
|
-
commit,
|
|
533
|
-
staleSeconds,
|
|
534
|
-
cwd,
|
|
535
|
-
worktree,
|
|
536
|
-
deps: { stdout: process.stdout }
|
|
537
|
-
});
|
|
538
|
-
resources.logger.resolved("Run summary", [
|
|
539
|
-
`Iterations: ${buildResult.iterationsCompleted}/${maxIterations}`,
|
|
540
|
-
`Stories done: ${buildResult.storiesDone.length}`,
|
|
541
|
-
`Duration: ${formatDuration(buildResult.totalDurationMs)}`
|
|
542
|
-
].join("\n "));
|
|
543
|
-
resources.logger.success("Ralph run finished.");
|
|
544
|
-
}
|
|
545
|
-
finally {
|
|
546
|
-
resources.context.finalize();
|
|
547
|
-
}
|
|
548
|
-
});
|
|
549
|
-
registerRalphWorktreeCommand(ralph, container);
|
|
550
|
-
ralph
|
|
551
|
-
.command("plan")
|
|
552
|
-
.description("Generate a plan file via an agent.")
|
|
553
|
-
.option("--out <path>", "Output path for generated plan YAML")
|
|
554
|
-
.argument("[request]", "Inline plan request")
|
|
555
|
-
.action(async function () {
|
|
556
|
-
throw new ValidationError("Interactive planning is not yet available. Create your plan YAML manually or use the poe-code-ralph-plan skill inside your agent.");
|
|
557
|
-
});
|
|
558
|
-
}
|
|
559
|
-
//# sourceMappingURL=ralph.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../../src/cli/commands/ralph.ts"],"names":[],"mappings":"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"}
|