rlph-cli 1.3.0 → 1.4.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAe5D,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CActE;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAUvE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAU/D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAmB1D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBvD;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiFzD;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC1C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAW5D,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CActE;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAUvE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAU/D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAmB1D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBvD;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DzD;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC1C"}
@@ -2,7 +2,7 @@ import chalk from 'chalk';
2
2
  import { select, confirm } from '@inquirer/prompts';
3
3
  import { access, mkdir, writeFile } from 'node:fs/promises';
4
4
  import { join } from 'node:path';
5
- import { getClaudeDir, getSourceSkillPath, getSourceCommandPath, getTargetSkillDir, getTargetSkillPath, getTargetCommandPath, readSourceSkill, readSourceCommand, transformSkillContent, transformCommandContent, SourceFileNotFoundError, } from '../init/index.js';
5
+ import { getClaudeDir, getTargetSkillDir, getTargetSkillPath, getTargetCommandPath, loadBundledSkill, loadBundledCommand, BundledTemplateNotFoundError, } from '../init/index.js';
6
6
  export async function promptAgentSelection() {
7
7
  try {
8
8
  return await select({
@@ -135,43 +135,26 @@ export async function installClaudeSkills() {
135
135
  console.error(chalk.red(`Failed to create Claude directories: ${error.message}`));
136
136
  throw err;
137
137
  }
138
- // Read and transform skill
138
+ // Load bundled templates
139
139
  let skillContent;
140
- try {
141
- skillContent = await readSourceSkill();
142
- }
143
- catch (err) {
144
- if (err instanceof SourceFileNotFoundError) {
145
- console.error(chalk.red(`Source skill not found: ${getSourceSkillPath()}`));
146
- console.error(chalk.gray('Install the prd skill globally first:'));
147
- console.error(chalk.gray(' mkdir -p ~/.claude/skills/prd'));
148
- console.error(chalk.gray(' # Copy SKILL.md to ~/.claude/skills/prd/'));
149
- throw err;
150
- }
151
- throw err;
152
- }
153
- const transformedSkill = transformSkillContent(skillContent);
154
- // Read and transform command
155
140
  let commandContent;
156
141
  try {
157
- commandContent = await readSourceCommand();
142
+ skillContent = await loadBundledSkill();
143
+ commandContent = await loadBundledCommand();
158
144
  }
159
145
  catch (err) {
160
- if (err instanceof SourceFileNotFoundError) {
161
- console.error(chalk.red(`Source command not found: ${getSourceCommandPath()}`));
162
- console.error(chalk.gray('Install the complete-next-task command globally first:'));
163
- console.error(chalk.gray(' # Copy complete-next-task.md to ~/.claude/commands/'));
164
- throw err;
146
+ if (err instanceof BundledTemplateNotFoundError) {
147
+ console.error(chalk.red('Failed to load bundled templates'));
148
+ console.error(chalk.gray('This may indicate a corrupted installation. Try reinstalling ralph.'));
165
149
  }
166
150
  throw err;
167
151
  }
168
- const transformedCommand = transformCommandContent(commandContent);
169
- // Write transformed skill
152
+ // Write skill
170
153
  const targetSkillDir = getTargetSkillDir();
171
154
  const targetSkillPath = getTargetSkillPath();
172
155
  try {
173
156
  await mkdir(targetSkillDir, { recursive: true });
174
- await writeFile(targetSkillPath, transformedSkill);
157
+ await writeFile(targetSkillPath, skillContent);
175
158
  console.log(chalk.green(`✓ Installed skill: ${targetSkillPath}`));
176
159
  }
177
160
  catch (err) {
@@ -184,10 +167,10 @@ export async function installClaudeSkills() {
184
167
  }
185
168
  throw err;
186
169
  }
187
- // Write transformed command
170
+ // Write command
188
171
  const targetCommandPath = getTargetCommandPath();
189
172
  try {
190
- await writeFile(targetCommandPath, transformedCommand);
173
+ await writeFile(targetCommandPath, commandContent);
191
174
  console.log(chalk.green(`✓ Installed command: ${targetCommandPath}`));
192
175
  }
193
176
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAA;AAEzC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AAazB,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAY;YAC7B,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACnC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;gBACjC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;aACxC;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;QACT,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;YACnB,OAAO,EAAE,+DAA+D;YACxE,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;QACT,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;YACnB,OAAO,EAAE,yCAAyC;YAClD,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;QACT,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACjE,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAA;IAEzB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM,uBAAuB,EAAE,CAAA;QACrD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACvD,CAAC;QACD,aAAa,GAAG,aAAa,CAAA;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,KAAK,EAAE,CAAC,CAAC,CAAA;IAChF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAA;QAEjD,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAA;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC,CAAA;YACxE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAA;QACxE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAgB;IAChD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,MAAM,GAAe;QACzB,KAAK;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAA;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAA;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC,CAAA;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAE/C,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAA;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACjF,MAAM,GAAG,CAAA;IACX,CAAC;IAED,2BAA2B;IAC3B,IAAI,YAAoB,CAAA;IACxB,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,eAAe,EAAE,CAAA;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAA;YAC3E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAA;YAClE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAA;YAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAA;YACvE,MAAM,GAAG,CAAA;QACX,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAA;IAE5D,6BAA6B;IAC7B,IAAI,cAAsB,CAAA;IAC1B,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAA;YAC/E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAA;YACnF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAA;YAClF,MAAM,GAAG,CAAA;QACX,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAA;IAElE,0BAA0B;IAC1B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAE5C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,MAAM,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAA;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,eAAe,EAAE,CAAC,CAAC,CAAA;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,4BAA4B;IAC5B,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAA;IAEhD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,iBAAiB,EAAE,CAAC,CAAC,CAAA;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAA;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,iBAAiB,EAAE,CAAC,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,oCAAoC;IACpC,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAA;QACzC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,SAAS;YACT,OAAM;QACR,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAM;IACR,CAAC;IAED,6BAA6B;IAC7B,MAAM,iBAAiB,EAAE,CAAA;IAEzB,8BAA8B;IAC9B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,mBAAmB,EAAE,CAAA;IAC7B,CAAC;IAED,eAAe;IACf,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAE/B,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IACtC,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAA;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAA;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export interface PrdAddOptions {
2
2
  agent: string;
3
3
  }
4
+ export declare function promptOverride(name: string, location: string): Promise<boolean>;
4
5
  export declare function prdAdd(path: string, name: string, opts: PrdAddOptions): Promise<void>;
5
6
  //# sourceMappingURL=prd-add.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prd-add.d.ts","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Ef"}
1
+ {"version":3,"file":"prd-add.d.ts","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAyFf"}
@@ -1,9 +1,22 @@
1
1
  import chalk from 'chalk';
2
+ import { confirm } from '@inquirer/prompts';
2
3
  import { access, writeFile } from 'node:fs/promises';
3
4
  import { join } from 'node:path';
4
5
  import { getAgent, isValidAgent } from '../agents/index.js';
5
- import { createPrdFolder, copyMarkdown, getPrdDir, isProjectInitialized, prdExists, } from '../prd/index.js';
6
+ import { createPrdFolder, copyMarkdown, getPrdDir, getPrdFileStatus, isProjectInitialized, } from '../prd/index.js';
6
7
  import { ensureTemplates, loadTemplate, substituteVars } from '../templates/index.js';
8
+ export async function promptOverride(name, location) {
9
+ try {
10
+ return await confirm({
11
+ message: `PRD '${name}' already exists (${location}). Override?`,
12
+ default: false,
13
+ });
14
+ }
15
+ catch {
16
+ // Ctrl+C
17
+ return false;
18
+ }
19
+ }
7
20
  export async function prdAdd(path, name, opts) {
8
21
  // Validate agent
9
22
  if (!isValidAgent(opts.agent)) {
@@ -19,23 +32,33 @@ export async function prdAdd(path, name, opts) {
19
32
  console.error(chalk.red(`File not found: ${path}`));
20
33
  process.exit(1);
21
34
  }
22
- // Check if PRD already exists in target location
23
- // For initialized projects, only check local; otherwise check global
35
+ // Check PRD file status in target location
24
36
  const isInitialized = await isProjectInitialized();
25
37
  const checkLocation = isInitialized ? 'local' : 'global';
26
- if (await prdExists(name, checkLocation)) {
27
- const locationLabel = isInitialized ? 'local' : 'global';
28
- console.error(chalk.red(`PRD already exists (${locationLabel}): ${name}`));
29
- process.exit(1);
30
- }
38
+ const fileStatus = await getPrdFileStatus(name, checkLocation);
31
39
  const prdDir = await getPrdDir(name, 'write');
32
40
  const prdJsonPath = join(prdDir, 'prd.json');
33
41
  const progressPath = join(prdDir, 'progress.txt');
42
+ // Handle based on file status
43
+ if (fileStatus === 'complete') {
44
+ // Fully registered PRD exists - prompt for override
45
+ const locationLabel = isInitialized ? 'local' : 'global';
46
+ const shouldOverride = await promptOverride(name, locationLabel);
47
+ if (!shouldOverride) {
48
+ console.log(chalk.gray('PRD creation cancelled'));
49
+ return;
50
+ }
51
+ }
34
52
  console.log(chalk.blue(`Creating PRD: ${name}`));
35
- // Create folder and copy markdown
53
+ // Create folder and copy markdown (skip copy if partial - md already exists)
36
54
  await createPrdFolder(name);
37
- await copyMarkdown(path, name);
38
- console.log(chalk.gray(` Copied ${path} → prd.md`));
55
+ if (fileStatus !== 'partial') {
56
+ await copyMarkdown(path, name);
57
+ console.log(chalk.gray(` Copied ${path} → prd.md`));
58
+ }
59
+ else {
60
+ console.log(chalk.gray(` Using existing prd.md`));
61
+ }
39
62
  // Ensure templates and load prd-md-to-json
40
63
  await ensureTemplates();
41
64
  const template = await loadTemplate('prd-md-to-json');
@@ -1 +1 @@
1
- {"version":3,"file":"prd-add.js","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prd-add.js","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,13 @@
1
- export declare class SourceFileNotFoundError extends Error {
1
+ export declare class BundledTemplateNotFoundError extends Error {
2
2
  readonly path: string;
3
3
  constructor(path: string);
4
4
  }
5
5
  export declare function getClaudeDir(): string;
6
- export declare function getSourceSkillPath(): string;
7
- export declare function getSourceCommandPath(): string;
8
6
  export declare function getTargetSkillDir(): string;
9
7
  export declare function getTargetSkillPath(): string;
10
8
  export declare function getTargetCommandPath(): string;
11
- export declare function readSourceSkill(): Promise<string>;
12
- export declare function readSourceCommand(): Promise<string>;
13
- export declare function transformSkillContent(content: string): string;
14
- export declare function transformCommandContent(content: string): string;
9
+ export declare function getBundledSkillPath(): string;
10
+ export declare function getBundledCommandPath(): string;
11
+ export declare function loadBundledSkill(): Promise<string>;
12
+ export declare function loadBundledCommand(): Promise<string>;
15
13
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAIA,qBAAa,uBAAwB,SAAQ,KAAK;aACpB,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAIzC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAOvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAOzD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAwC7D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkC/D"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAQA,qBAAa,4BAA6B,SAAQ,KAAK;aACzB,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAIzC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAOxD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAO1D"}
@@ -1,23 +1,20 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
2
+ import { join, dirname } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
- export class SourceFileNotFoundError extends Error {
4
+ import { fileURLToPath } from 'node:url';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ export class BundledTemplateNotFoundError extends Error {
5
8
  path;
6
9
  constructor(path) {
7
- super(`Source file not found: ${path}`);
10
+ super(`Bundled template not found: ${path}. This is a packaging error.`);
8
11
  this.path = path;
9
- this.name = 'SourceFileNotFoundError';
12
+ this.name = 'BundledTemplateNotFoundError';
10
13
  }
11
14
  }
12
15
  export function getClaudeDir() {
13
16
  return join(homedir(), '.claude');
14
17
  }
15
- export function getSourceSkillPath() {
16
- return join(getClaudeDir(), 'skills', 'prd', 'SKILL.md');
17
- }
18
- export function getSourceCommandPath() {
19
- return join(getClaudeDir(), 'commands', 'complete-next-task.md');
20
- }
21
18
  export function getTargetSkillDir() {
22
19
  return join(getClaudeDir(), 'skills', 'ralph-prd');
23
20
  }
@@ -27,52 +24,28 @@ export function getTargetSkillPath() {
27
24
  export function getTargetCommandPath() {
28
25
  return join(getClaudeDir(), 'commands', 'ralph-complete-next-task.md');
29
26
  }
30
- export async function readSourceSkill() {
31
- const path = getSourceSkillPath();
27
+ export function getBundledSkillPath() {
28
+ return join(__dirname, '../../templates/ralph-prd-skill.md');
29
+ }
30
+ export function getBundledCommandPath() {
31
+ return join(__dirname, '../../templates/ralph-complete-next-task-command.md');
32
+ }
33
+ export async function loadBundledSkill() {
34
+ const path = getBundledSkillPath();
32
35
  try {
33
36
  return await readFile(path, 'utf-8');
34
37
  }
35
38
  catch {
36
- throw new SourceFileNotFoundError(path);
39
+ throw new BundledTemplateNotFoundError(path);
37
40
  }
38
41
  }
39
- export async function readSourceCommand() {
40
- const path = getSourceCommandPath();
42
+ export async function loadBundledCommand() {
43
+ const path = getBundledCommandPath();
41
44
  try {
42
45
  return await readFile(path, 'utf-8');
43
46
  }
44
47
  catch {
45
- throw new SourceFileNotFoundError(path);
48
+ throw new BundledTemplateNotFoundError(path);
46
49
  }
47
50
  }
48
- export function transformSkillContent(content) {
49
- // Transform skill to output PRDs to .ralph/prd/ instead of project root
50
- let transformed = content;
51
- // Update skill name and description
52
- transformed = transformed.replace(/^---\nname: prd\n/m, '---\nname: ralph-prd\n');
53
- // Update output path: prd-<feature-name>.md -> .ralph/prd/<name>/prd.md
54
- transformed = transformed.replace(/`prd-<feature-name>\.md`/g, '`.ralph/prd/<feature-name>/prd.md`');
55
- transformed = transformed.replace(/`prd-<name>\.md`/g, '`.ralph/prd/<name>/prd.md`');
56
- // Update "Generate markdown PRD to..." instructions
57
- transformed = transformed.replace(/Generate markdown PRD to `prd-<feature-name>\.md` in project root/g, 'Generate markdown PRD to `.ralph/prd/<feature-name>/prd.md`');
58
- // Update "Save to" instructions
59
- transformed = transformed.replace(/Save to `prd-<feature-name>\.md` \(project root\):/g, 'Save to `.ralph/prd/<feature-name>/prd.md`:');
60
- // Update post-creation message
61
- transformed = transformed.replace(/PRD saved to prd-<name>\.md/g, 'PRD saved to .ralph/prd/<name>/prd.md');
62
- return transformed;
63
- }
64
- export function transformCommandContent(content) {
65
- // Transform command to read from .ralph/ instead of .claude/state/
66
- let transformed = content;
67
- // Update command name in usage
68
- transformed = transformed.replace(/\/complete-next-task/g, '/ralph-complete-next-task');
69
- // Update state directory references
70
- transformed = transformed.replace(/\.claude\/state\//g, '.ralph/prd/');
71
- transformed = transformed.replace(/\.claude\/state/g, '.ralph/prd');
72
- // Update the bash find function
73
- transformed = transformed.replace(/find_claude_state/g, 'find_ralph_state');
74
- // Update <state-dir> references
75
- transformed = transformed.replace(/<state-dir>/g, '<ralph-dir>');
76
- return transformed;
77
- }
78
51
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACzB;IAA5B,YAA4B,IAAY;QACtC,KAAK,CAAC,+BAA+B,IAAI,8BAA8B,CAAC,CAAA;QAD9C,SAAI,GAAJ,IAAI,CAAQ;QAEtC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,SAAS,EAAE,qDAAqD,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAA;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC"}
@@ -4,6 +4,14 @@ export declare function getGlobalPrdsDir(): string;
4
4
  export declare function getPrdsDir(): string;
5
5
  export declare function getLocalPrdDir(name: string): string;
6
6
  export declare function getGlobalPrdDir(name: string): string;
7
+ export type PrdFileStatus = 'none' | 'partial' | 'complete';
8
+ /**
9
+ * Check what PRD files exist in the target directory.
10
+ * - 'none': directory doesn't exist or is empty
11
+ * - 'partial': only prd.md exists (skill-created scenario)
12
+ * - 'complete': prd.md + prd.json + progress.txt all exist (fully registered)
13
+ */
14
+ export declare function getPrdFileStatus(name: string, location: 'local' | 'global'): Promise<PrdFileStatus>;
7
15
  export declare function isProjectInitialized(): Promise<boolean>;
8
16
  export declare function getPrdDir(name: string, mode?: PrdDirMode): Promise<string>;
9
17
  export declare function prdExists(name: string, location?: 'local' | 'global'): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,SAAS,EAEV,MAAM,YAAY,CAAA;AAEnB,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAWD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG7D;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAC5B,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,WAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB3D;AA8BD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAiDrD"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,SAAS,EAEV,MAAM,YAAY,CAAA;AAEnB,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAoBD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAE3D;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAC3B,OAAO,CAAC,aAAa,CAAC,CAoBxB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG7D;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAC5B,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,WAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB3D;AA8BD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAiDrD"}
@@ -25,6 +25,37 @@ async function dirExists(path) {
25
25
  return false;
26
26
  }
27
27
  }
28
+ async function fileExists(path) {
29
+ try {
30
+ await access(path);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Check what PRD files exist in the target directory.
39
+ * - 'none': directory doesn't exist or is empty
40
+ * - 'partial': only prd.md exists (skill-created scenario)
41
+ * - 'complete': prd.md + prd.json + progress.txt all exist (fully registered)
42
+ */
43
+ export async function getPrdFileStatus(name, location) {
44
+ const dir = location === 'local' ? getLocalPrdDir(name) : getGlobalPrdDir(name);
45
+ if (!(await dirExists(dir))) {
46
+ return 'none';
47
+ }
48
+ const hasMd = await fileExists(join(dir, 'prd.md'));
49
+ const hasJson = await fileExists(join(dir, 'prd.json'));
50
+ const hasProgress = await fileExists(join(dir, 'progress.txt'));
51
+ if (hasMd && hasJson && hasProgress) {
52
+ return 'complete';
53
+ }
54
+ if (hasMd) {
55
+ return 'partial';
56
+ }
57
+ return 'none';
58
+ }
28
59
  export async function isProjectInitialized() {
29
60
  const localRalphDir = join(process.cwd(), '.ralph');
30
61
  return dirExists(localRalphDir);
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "rlph-cli",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Loop coding agent CLI - run agents headlessly in a loop",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "ralph": "./dist/index.js"
8
8
  },
9
9
  "files": [
10
- "dist"
10
+ "dist",
11
+ "templates"
11
12
  ],
12
13
  "engines": {
13
14
  "node": ">=18"
@@ -19,7 +20,8 @@
19
20
  "test:watch": "vitest",
20
21
  "test:coverage": "vitest run --coverage",
21
22
  "prepublishOnly": "bun run build",
22
- "release": "semantic-release"
23
+ "release": "semantic-release",
24
+ "docker-test": "./scripts/docker-test.sh"
23
25
  },
24
26
  "keywords": [
25
27
  "cli",
@@ -0,0 +1,75 @@
1
+ # Complete Next Task
2
+
3
+ Complete the next incomplete task from a PRD.
4
+
5
+ ## Context
6
+
7
+ - PRD Name: `$PRD_NAME`
8
+ - PRD Path: `$PRD_PATH`
9
+ - PRD Markdown: `$PRD_MD_PATH`
10
+ - Working Directory: `$CWD`
11
+
12
+ ## Process
13
+
14
+ ### 1. Get Bearings
15
+
16
+ - Read progress file at `$PRD_PATH/../progress.txt` - check "Codebase Patterns" section first
17
+ - Read PRD markdown at `$PRD_MD_PATH` for full context and intent
18
+ - Read PRD JSON at `$PRD_PATH` - find next task with `passes: false`
19
+ - Check recent git history: `git log --oneline -10`
20
+
21
+ ### 2. Branch Setup
22
+
23
+ If not on the `$PRD_NAME` branch:
24
+ - `git checkout $PRD_NAME` (or `git checkout -b $PRD_NAME` if new)
25
+
26
+ ### 3. Implement Task
27
+
28
+ Work on the single task. Follow steps in the task definition.
29
+
30
+ ### 4. Feedback Loops (REQUIRED)
31
+
32
+ Before committing, run ALL applicable:
33
+ - Type checking
34
+ - Tests
35
+ - Linting
36
+ - Formatting
37
+
38
+ Do NOT commit if any fail. Fix issues first.
39
+
40
+ ### 5. Update PRD
41
+
42
+ Set the completed task's `passes` field to `true` in the PRD file.
43
+
44
+ ### 6. Update Progress
45
+
46
+ Append to progress.txt:
47
+
48
+ ```markdown
49
+ ## Task - [task.id]
50
+ - What was implemented
51
+ - Files changed
52
+ - **Learnings:** patterns, gotchas
53
+ ```
54
+
55
+ If you discover a reusable pattern, also add to `## Codebase Patterns` at the top.
56
+
57
+ ### 7. Commit
58
+
59
+ ```bash
60
+ git add -A && git commit -m 'feat(<scope>): <description>'
61
+ ```
62
+
63
+ ## Completion
64
+
65
+ If all tasks have `passes: true`, output:
66
+
67
+ ```
68
+ <tasks>COMPLETE</tasks>
69
+ ```
70
+
71
+ ## Philosophy
72
+
73
+ This codebase will outlive you. Every shortcut becomes someone else's burden. Patterns you establish will be copied. Corners you cut will be cut again.
74
+
75
+ Fight entropy. Leave the codebase better than you found it.
@@ -0,0 +1,61 @@
1
+ # PRD to JSON Conversion
2
+
3
+ Convert the PRD markdown file to structured JSON.
4
+
5
+ ## Input
6
+
7
+ PRD markdown file: `$PRD_PATH`
8
+
9
+ ## Output
10
+
11
+ Write JSON to: `$OUTPUT_PATH`
12
+
13
+ Output ONLY the JSON file. No explanations, no markdown, no code blocks.
14
+
15
+ ## JSON Schema
16
+
17
+ ```json
18
+ {
19
+ "prdName": "string - kebab-case identifier",
20
+ "tasks": [
21
+ {
22
+ "id": "string - category-number (e.g., types-1)",
23
+ "category": "string - logical grouping",
24
+ "description": "string - what this task accomplishes",
25
+ "steps": ["string - specific verification step"],
26
+ "passes": false
27
+ }
28
+ ],
29
+ "context": {
30
+ "patterns": ["string - codebase patterns to follow"],
31
+ "keyFiles": ["string - important file paths"],
32
+ "nonGoals": ["string - explicitly out of scope"]
33
+ }
34
+ }
35
+ ```
36
+
37
+ ## Conversion Rules
38
+
39
+ 1. **Task Extraction**
40
+ - Each major feature/component = separate task
41
+ - Tasks must be independently completable
42
+ - Order by dependency: foundations first
43
+
44
+ 2. **Task IDs**
45
+ - Format: `<category>-<number>`
46
+ - Categories: types, templates, manager, command, cli, testing, cleanup
47
+ - Number sequentially within category
48
+
49
+ 3. **Steps**
50
+ - Concrete, verifiable outcomes
51
+ - Should be testable/checkable
52
+ - Include "tests pass" where applicable
53
+
54
+ 4. **passes Field**
55
+ - Always set to `false` for new tasks
56
+ - Agent marks `true` after completing task
57
+
58
+ 5. **Context**
59
+ - Extract patterns from PRD intro/overview
60
+ - List key files mentioned in PRD
61
+ - Extract non-goals/out-of-scope items
@@ -0,0 +1,150 @@
1
+ ---
2
+ description: Complete the next incomplete task from a PRD
3
+ ---
4
+
5
+ Complete one task from a PRD file. Implements the next task with `passes: false`, runs feedback loops, and commits.
6
+
7
+ ## Usage
8
+
9
+ ```
10
+ /ralph-complete-next-task <prd-name>
11
+ ```
12
+
13
+ Where `<prd-name>` matches `.ralph/prd/<prd-name>/prd.json`
14
+
15
+ ## Before Starting
16
+
17
+ First, invoke the skill tool to detect the VCS:
18
+
19
+ ```
20
+ skill({ name: 'vcs-detect' })
21
+ ```
22
+
23
+ Use the detected VCS (jj or git) for all version control operations.
24
+
25
+ ## File Locations
26
+
27
+ **IMPORTANT**: The `.ralph/prd/` directory may not be at cwd. Search for it:
28
+
29
+ 1. Start at cwd
30
+ 2. Check if `.ralph/prd/<prd-name>/prd.json` exists
31
+ 3. If not, go up one directory
32
+ 4. Repeat until found or reaching filesystem root
33
+
34
+ Use this bash to find the state directory:
35
+
36
+ ```bash
37
+ find_ralph_state() {
38
+ local prd="$1"
39
+ local dir="$PWD"
40
+ while [[ "$dir" != "/" ]]; do
41
+ if [[ -f "$dir/.ralph/prd/$prd/prd.json" ]]; then
42
+ echo "$dir/.ralph/prd/$prd"
43
+ return 0
44
+ fi
45
+ dir="$(dirname "$dir")"
46
+ done
47
+ return 1
48
+ }
49
+ ```
50
+
51
+ Once found, use **absolute paths** for all file operations:
52
+
53
+ ```
54
+ <ralph-dir>/
55
+ ├── prd.json # Task list with passes field
56
+ └── progress.txt # Cross-iteration memory
57
+ ```
58
+
59
+ ## Process
60
+
61
+ ### 1. Get Bearings
62
+
63
+ - Read progress file - **CHECK 'Codebase Patterns' SECTION FIRST**
64
+ - Read PRD - find next task with `passes: false`
65
+ - **Task Priority** (highest to lowest):
66
+ 1. Architecture/core abstractions
67
+ 2. Integration points
68
+ 3. Spikes/unknowns
69
+ 4. Standard features
70
+ 5. Polish/cleanup
71
+ - Check recent history (jj: `jj log --limit 10`, git: `git log --oneline -10`)
72
+
73
+ ### 2. Initialize Progress (if needed)
74
+
75
+ If progress.txt doesn't exist, create it:
76
+
77
+ ```markdown
78
+ # Progress Log
79
+ PRD: <prdName from PRD>
80
+ Started: <YYYY-MM-DD>
81
+
82
+ ## Codebase Patterns
83
+ <!-- Consolidate reusable patterns here -->
84
+
85
+ ---
86
+ <!-- Task logs below - APPEND ONLY -->
87
+ ```
88
+
89
+ ### 3. Branch Setup
90
+
91
+ Extract `prdName` from PRD, then:
92
+ - jj: `jj new -m '<prdName>'`
93
+ - git: `git checkout -b <prdName>` (or checkout if exists)
94
+
95
+ ### 4. Implement Task
96
+
97
+ Work on the single task until verification steps pass.
98
+
99
+
100
+ ### 5. Feedback Loops (REQUIRED)
101
+
102
+ Before committing, run ALL applicable:
103
+ - Type checking
104
+ - Tests
105
+ - Linting
106
+ - Formatting
107
+
108
+ **Do NOT commit if any fail.** Fix issues first.
109
+
110
+ ### 6. Update PRD
111
+
112
+ Set the task's `passes` field to `true` in the PRD file.
113
+
114
+ ### 7. Update Progress
115
+
116
+ Append to progress.txt:
117
+
118
+ ```markdown
119
+ ## Task - [task.id]
120
+ - What was implemented
121
+ - Files changed
122
+ - **Learnings:** patterns, gotchas
123
+ ```
124
+
125
+ If you discover a **reusable pattern**, also add to `## Codebase Patterns` at the TOP.
126
+
127
+ ### 8. Commit
128
+
129
+ - jj: `jj describe -m 'feat(<scope>): <description>' && jj bookmark create <prdName>/<task-id> && jj new`
130
+ - git: `git add -A && git commit -m 'feat(<scope>): <description>'`
131
+
132
+ Bookmark format: `<prdName>/<task-id>` (e.g., `lib-relay-implementation/types-2`)
133
+
134
+ ## Completion
135
+
136
+ If all tasks have `passes: true`, output:
137
+
138
+ ```
139
+ <tasks>COMPLETE</tasks>
140
+ ```
141
+
142
+ ## Philosophy
143
+
144
+ This codebase will outlive you. Every shortcut becomes someone else's burden. Patterns you establish will be copied. Corners you cut will be cut again.
145
+
146
+ Fight entropy. Leave the codebase better than you found it.
147
+
148
+ <user-request>
149
+ $ARGUMENTS
150
+ </user-request>
@@ -0,0 +1,388 @@
1
+ ---
2
+ name: ralph-prd
3
+ description: Create Product Requirements Documents (PRDs) that define the end state of a feature. Use when planning new features, migrations, or refactors. Generates structured PRDs with acceptance criteria.
4
+ ---
5
+
6
+ # PRD Creation Skill
7
+
8
+ Create Product Requirements Documents suitable for RFC review by Principal Engineers, Designers, and Product Owners.
9
+
10
+ The PRD describes WHAT to build and WHY, not HOW or in WHAT ORDER.
11
+
12
+ ## Workflow
13
+
14
+ 1. User requests: "Load the prd skill and create a PRD for [feature]"
15
+ 2. **Ask clarifying questions** to build full understanding
16
+ 3. **Explore codebase** to understand patterns, constraints, and dependencies
17
+ 4. Generate markdown PRD to `.ralph/prd/<feature-name>/prd.md`
18
+
19
+ ## Clarifying Questions
20
+
21
+ Ask questions across these domains.
22
+
23
+ ### Problem & Motivation
24
+ - What problem does this solve? Who experiences it?
25
+ - What's the cost of NOT solving this? (user pain, revenue, tech debt)
26
+ - Why now? What triggered this work?
27
+
28
+ ### Users & Stakeholders
29
+ - Who are the primary users? Secondary users?
30
+
31
+ ### End State & Success
32
+ - What does "done" look like? How will users interact with it?
33
+
34
+ ### Scope & Boundaries
35
+ - What's explicitly OUT of scope?
36
+ - What's deferred to future iterations?
37
+ - Are there adjacent features that must NOT be affected?
38
+
39
+ ### Constraints & Requirements
40
+ - Performance requirements?
41
+ - Security requirements? (auth, data sensitivity, compliance)
42
+ - Compatibility requirements? (browsers, versions, APIs)
43
+ - Accessibility requirements? (WCAG level, screen readers)
44
+
45
+ ### Risks & Dependencies
46
+ - What could go wrong? Technical risks?
47
+ - External service dependencies?
48
+ - What decisions are still open/contentious?
49
+
50
+ Keep questions concise. 5-7 at most.
51
+
52
+ ## Output Format
53
+
54
+ Save to `.ralph/prd/<feature-name>/prd.md`:
55
+
56
+ ```markdown
57
+ # PRD: <Feature Name>
58
+
59
+ **Date:** <YYYY-MM-DD>
60
+
61
+ ---
62
+
63
+ ## Problem Statement
64
+
65
+ ### What problem are we solving?
66
+ Clear description of the problem. Include user impact and business impact.
67
+
68
+ ### Why now?
69
+ What triggered this work? Cost of inaction?
70
+
71
+ ### Who is affected?
72
+ - **Primary users:** Description
73
+ - **Secondary users:** Description
74
+
75
+ ---
76
+
77
+ ## Proposed Solution
78
+
79
+ ### Overview
80
+ One paragraph describing what this feature does when complete.
81
+
82
+ ### User Experience (if applicable)
83
+ <!-- Include for user-facing features -->
84
+ How will users interact with this feature? Include user flows for primary scenarios.
85
+
86
+ #### User Flow: <Scenario Name>
87
+ 1. User does X
88
+ 2. System responds with Y
89
+ 3. User sees Z
90
+
91
+ ### Design Considerations (if applicable)
92
+ <!-- Include for features with UI/UX components -->
93
+ - Visual/interaction requirements
94
+ - Accessibility requirements (WCAG level)
95
+ - Platform-specific considerations
96
+
97
+ ---
98
+
99
+ ## End State
100
+
101
+ When this PRD is complete, the following will be true:
102
+
103
+ - [ ] Capability 1 exists and works
104
+ - [ ] Capability 2 exists and works
105
+ - [ ] All acceptance criteria pass
106
+ - [ ] Tests cover the new functionality
107
+ - [ ] Documentation is updated
108
+ - [ ] Observability/monitoring is in place
109
+
110
+ ---
111
+
112
+ ## Success Metrics
113
+
114
+ ### Quantitative
115
+ | Metric | Current | Target | Measurement Method |
116
+ |--------|---------|--------|-------------------|
117
+ | Metric 1 | X | Y | How measured |
118
+ | Metric 2 | X | Y | How measured |
119
+
120
+ ### Qualitative
121
+ - User feedback criteria
122
+ - Team/process improvements expected
123
+
124
+ ---
125
+
126
+ ## Acceptance Criteria
127
+
128
+ ### Feature: <Name>
129
+ - [ ] Criterion 1
130
+ - [ ] Criterion 2
131
+ - [ ] Criterion 3
132
+
133
+ ### Feature: <Name>
134
+ - [ ] Criterion 1
135
+ - [ ] Criterion 2
136
+
137
+ ---
138
+
139
+ ## Technical Context
140
+
141
+ ### Existing Patterns
142
+ - Pattern 1: `src/path/to/example.ts` - Why relevant
143
+ - Pattern 2: `src/path/to/example.ts` - Why relevant
144
+
145
+ ### Key Files
146
+ - `src/relevant/file.ts` - Description of relevance
147
+ - `src/another/file.ts` - Description of relevance
148
+
149
+ ### System Dependencies
150
+ - External services/APIs
151
+ - Package requirements
152
+ - Infrastructure requirements
153
+
154
+ ### Data Model Changes
155
+ <!-- If applicable -->
156
+ - New entities/tables
157
+ - Schema migrations required
158
+ - Data backfill considerations
159
+
160
+ ---
161
+
162
+ ## Risks & Mitigations
163
+
164
+ | Risk | Likelihood | Impact | Mitigation |
165
+ |------|------------|--------|------------|
166
+ | Risk 1 | High/Med/Low | High/Med/Low | How to mitigate |
167
+ | Risk 2 | High/Med/Low | High/Med/Low | How to mitigate |
168
+
169
+ ---
170
+
171
+ ## Alternatives Considered
172
+
173
+ ### Alternative 1: <Name>
174
+ - **Description:** Brief description
175
+ - **Pros:** What's good about it
176
+ - **Cons:** Why we didn't choose it
177
+ - **Decision:** Why rejected
178
+
179
+ ### Alternative 2: <Name>
180
+ - **Description:** Brief description
181
+ - **Pros:** What's good about it
182
+ - **Cons:** Why we didn't choose it
183
+ - **Decision:** Why rejected
184
+ ---
185
+
186
+ ## Non-Goals (v1)
187
+
188
+ Explicitly out of scope for this PRD:
189
+ - Thing we're not building - why deferred
190
+ - Future enhancement - why deferred
191
+ - Related feature that's separate - why separate
192
+
193
+ ---
194
+
195
+ ## Interface Specifications
196
+
197
+ ### CLI (if applicable)
198
+ ```
199
+ command-name [args] [options]
200
+
201
+ Options:
202
+ --flag Description
203
+ ```
204
+
205
+ ### API (if applicable)
206
+ ```
207
+ POST /api/endpoint
208
+ Request: { field: type }
209
+ Response: { field: type }
210
+ Errors: 4xx/5xx scenarios
211
+ ```
212
+
213
+ ### UI (if applicable)
214
+ Component behavior, states, and error handling.
215
+
216
+ ---
217
+
218
+ ## Documentation Requirements
219
+
220
+ - [ ] User-facing documentation updates
221
+ - [ ] API documentation updates
222
+ - [ ] Internal runbook/playbook updates
223
+ - [ ] Architecture decision records (ADRs)
224
+
225
+ ---
226
+
227
+ ## Open Questions
228
+
229
+ | Question | Owner | Due Date | Status |
230
+ |----------|-------|----------|--------|
231
+ | Question 1 | Name | Date | Open/Resolved |
232
+ | Question 2 | Name | Date | Open/Resolved |
233
+
234
+ ---
235
+
236
+ ## Appendix
237
+
238
+ ### Glossary
239
+ - **Term:** Definition
240
+
241
+ ### References
242
+ - Link to related PRDs, ADRs, designs
243
+ ```
244
+
245
+ ## Key Principles
246
+
247
+ ### Problem Before Solution
248
+ - Lead with the problem, not the solution
249
+ - Quantify the impact of NOT solving this
250
+ - Make the case for why this work matters
251
+
252
+ ### Define End State, Not Process
253
+ - Describe WHAT exists when done
254
+ - Don't prescribe implementation order
255
+ - Don't assign priorities
256
+ - Don't create phases
257
+
258
+ ### Technical Context Enables Autonomy
259
+ - Show existing patterns to follow
260
+ - Reference key files agent should explore
261
+ - Agent uses this to make informed decisions
262
+
263
+ ### Non-Goals Prevent Scope Creep
264
+ - Explicit boundaries help agent stay focused
265
+ - Agent won't accidentally build deferred features
266
+
267
+ ### Risks & Alternatives Show Rigor
268
+ - Demonstrate you've thought through what could go wrong
269
+ - Show alternatives considered and why rejected
270
+ - Builds confidence in the proposed approach
271
+
272
+ ## Bad vs Good Examples
273
+
274
+ ### Bad (Prescriptive / Thin)
275
+ ```markdown
276
+ ## Implementation Phases
277
+
278
+ ### Phase 1: Database
279
+ 1. Create users table
280
+ 2. Add indexes
281
+
282
+ ### Phase 2: API
283
+ 1. Build registration endpoint
284
+ 2. Build login endpoint
285
+
286
+ ### Phase 3: Tests
287
+ 1. Write unit tests
288
+ 2. Write integration tests
289
+ ```
290
+
291
+ ### Bad (Missing RFC Context)
292
+ ```markdown
293
+ ## Overview
294
+ We need user authentication.
295
+
296
+ ## Acceptance Criteria
297
+ - [ ] Users can register
298
+ - [ ] Users can log in
299
+ ```
300
+ Missing: Why? What problem? Success metrics? Risks? Alternatives?
301
+
302
+ ### Good (RFC-Ready)
303
+ ```markdown
304
+ ## Problem Statement
305
+
306
+ ### What problem are we solving?
307
+ Users currently can't persist data across sessions. 47% of users drop off
308
+ when asked to re-enter information. This costs ~$50k/month in lost conversions.
309
+
310
+ ### Why now?
311
+ Q4 retention initiative. Competitor X launched auth last month.
312
+
313
+ ### Who is affected?
314
+ - **Primary users:** End users who want persistent sessions
315
+ - **Secondary users:** Support team handling "lost data" tickets (~200/week)
316
+
317
+ ---
318
+ ## End State
319
+
320
+ When complete:
321
+ - [ ] Users can register with email/password
322
+ - [ ] Users can log in and receive JWT
323
+ - [ ] Auth endpoints have >80% test coverage
324
+ - [ ] Monitoring dashboards track auth success/failure rates
325
+
326
+ ---
327
+
328
+ ## Acceptance Criteria
329
+
330
+ ### Registration
331
+ - [ ] POST /api/auth/register creates user
332
+ - [ ] Password is hashed (bcrypt, cost factor 12)
333
+ - [ ] Duplicate email returns 409
334
+ - [ ] Invalid input returns 400 with details
335
+
336
+ ### Login
337
+ - [ ] POST /api/auth/login returns JWT
338
+ - [ ] Invalid credentials return 401 (no user enumeration)
339
+ - [ ] Token expires in 24h, refresh token in 7d
340
+ ---
341
+ ## Risks & Mitigations
342
+
343
+ | Risk | Likelihood | Impact | Mitigation |
344
+ |------|------------|--------|------------|
345
+ | Credential stuffing | High | High | Rate limiting + CAPTCHA after 3 failures |
346
+ | Token theft | Med | High | Short expiry + secure cookie flags |
347
+
348
+ ---
349
+
350
+ ## Alternatives Considered
351
+
352
+ ### Alternative 1: OAuth-only (Google/GitHub)
353
+ - **Pros:** No password storage liability
354
+ - **Cons:** Some users don't have/want social accounts
355
+ - **Decision:** Rejected. Add OAuth in v2, but need email/password baseline.
356
+
357
+ ---
358
+ ## After PRD Creation
359
+
360
+ ### RFC Review Checklist
361
+
362
+ Before marking PRD ready for review and sharing with the user, verify:
363
+
364
+ - [ ] Technical risks identified and mitigated
365
+ - [ ] User flows documented (if applicable)
366
+ - [ ] Edge cases and error states covered (if applicable)
367
+ - [ ] Accessibility requirements specified (if applicable)
368
+ - [ ] Design considerations captured (if applicable)
369
+ - [ ] Problem statement is clear and compelling
370
+ - [ ] Scope boundaries explicit
371
+
372
+ ### Register the PRD
373
+
374
+ After writing the PRD markdown file, register it with ralph:
375
+
376
+ ```bash
377
+ ralph prd add .ralph/prd/<feature-name>/prd.md <feature-name>
378
+ ```
379
+
380
+ This converts the markdown to a structured format for task execution.
381
+
382
+ ### Ask About Execution
383
+
384
+ After registration, ask the user:
385
+
386
+ "PRD '<feature-name>' is registered. Would you like to start task execution now?
387
+
388
+ Run `ralph run <feature-name>` from the CLI"