rlph-cli 1.1.0 → 1.2.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.
- package/dist/commands/init.d.ts +23 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +242 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/prd-add.js +1 -1
- package/dist/commands/prd-add.js.map +1 -1
- package/dist/commands/run.js +1 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +2 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +15 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +78 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/prd/manager.d.ts +5 -1
- package/dist/prd/manager.d.ts.map +1 -1
- package/dist/prd/manager.js +41 -13
- package/dist/prd/manager.js.map +1 -1
- package/dist/prd/types.d.ts +5 -0
- package/dist/prd/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AgentType } from '../prd/types.js';
|
|
2
|
+
export interface InitOptions {
|
|
3
|
+
agent?: AgentType;
|
|
4
|
+
installSkills?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface InitResult {
|
|
7
|
+
agent: AgentType;
|
|
8
|
+
installSkills: boolean;
|
|
9
|
+
aborted: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function promptAgentSelection(): Promise<AgentType | null>;
|
|
12
|
+
export declare function promptSkillInstallation(): Promise<boolean | null>;
|
|
13
|
+
export declare function promptOverwrite(): Promise<boolean | null>;
|
|
14
|
+
export declare function runInitPrompts(): Promise<InitResult>;
|
|
15
|
+
export declare function getRalphDir(): string;
|
|
16
|
+
export declare function getRalphPrdDir(): string;
|
|
17
|
+
export declare function getConfigPath(): string;
|
|
18
|
+
export declare function ralphDirExists(): Promise<boolean>;
|
|
19
|
+
export declare function createProjectDirs(): Promise<void>;
|
|
20
|
+
export declare function writeConfig(agent: AgentType): Promise<void>;
|
|
21
|
+
export declare function installClaudeSkills(): Promise<void>;
|
|
22
|
+
export declare function init(): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { select, confirm } from '@inquirer/prompts';
|
|
3
|
+
import { access, mkdir, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { getClaudeDir, getSourceSkillPath, getSourceCommandPath, getTargetSkillDir, getTargetSkillPath, getTargetCommandPath, readSourceSkill, readSourceCommand, transformSkillContent, transformCommandContent, SourceFileNotFoundError, } from '../init/index.js';
|
|
6
|
+
export async function promptAgentSelection() {
|
|
7
|
+
try {
|
|
8
|
+
return await select({
|
|
9
|
+
message: 'Which agent are you using?',
|
|
10
|
+
choices: [
|
|
11
|
+
{ value: 'claude', name: 'claude' },
|
|
12
|
+
{ value: 'codex', name: 'codex' },
|
|
13
|
+
{ value: 'opencode', name: 'opencode' },
|
|
14
|
+
],
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Ctrl+C
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function promptSkillInstallation() {
|
|
23
|
+
try {
|
|
24
|
+
return await confirm({
|
|
25
|
+
message: 'Install ralph-prd skill and ralph-complete-next-task command?',
|
|
26
|
+
default: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Ctrl+C
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function promptOverwrite() {
|
|
35
|
+
try {
|
|
36
|
+
return await confirm({
|
|
37
|
+
message: 'Project already initialized. Overwrite?',
|
|
38
|
+
default: false,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Ctrl+C
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function runInitPrompts() {
|
|
47
|
+
const agent = await promptAgentSelection();
|
|
48
|
+
if (agent === null) {
|
|
49
|
+
return { agent: 'claude', installSkills: false, aborted: true };
|
|
50
|
+
}
|
|
51
|
+
let installSkills = false;
|
|
52
|
+
if (agent === 'claude') {
|
|
53
|
+
const shouldInstall = await promptSkillInstallation();
|
|
54
|
+
if (shouldInstall === null) {
|
|
55
|
+
return { agent, installSkills: false, aborted: true };
|
|
56
|
+
}
|
|
57
|
+
installSkills = shouldInstall;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(chalk.yellow(`Skill installation not yet supported for ${agent}`));
|
|
61
|
+
}
|
|
62
|
+
return { agent, installSkills, aborted: false };
|
|
63
|
+
}
|
|
64
|
+
export function getRalphDir() {
|
|
65
|
+
return join(process.cwd(), '.ralph');
|
|
66
|
+
}
|
|
67
|
+
export function getRalphPrdDir() {
|
|
68
|
+
return join(getRalphDir(), 'prd');
|
|
69
|
+
}
|
|
70
|
+
export function getConfigPath() {
|
|
71
|
+
return join(getRalphDir(), 'config.json');
|
|
72
|
+
}
|
|
73
|
+
export async function ralphDirExists() {
|
|
74
|
+
try {
|
|
75
|
+
await access(getRalphDir());
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function createProjectDirs() {
|
|
83
|
+
const ralphDir = getRalphDir();
|
|
84
|
+
const prdDir = getRalphPrdDir();
|
|
85
|
+
try {
|
|
86
|
+
await mkdir(ralphDir, { recursive: true });
|
|
87
|
+
console.log(chalk.green(`✓ Created ${ralphDir}`));
|
|
88
|
+
await mkdir(prdDir, { recursive: true });
|
|
89
|
+
console.log(chalk.green(`✓ Created ${prdDir}`));
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const error = err;
|
|
93
|
+
if (error.code === 'EACCES') {
|
|
94
|
+
console.error(chalk.red(`Permission denied: Cannot create ${ralphDir}`));
|
|
95
|
+
console.error(chalk.gray('Check directory permissions and try again'));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.error(chalk.red(`Failed to create directories: ${error.message}`));
|
|
99
|
+
}
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export async function writeConfig(agent) {
|
|
104
|
+
const configPath = getConfigPath();
|
|
105
|
+
const config = {
|
|
106
|
+
agent,
|
|
107
|
+
initialized: new Date().toISOString(),
|
|
108
|
+
};
|
|
109
|
+
try {
|
|
110
|
+
await writeFile(configPath, JSON.stringify(config, null, 2));
|
|
111
|
+
console.log(chalk.green(`✓ Saved config: ${configPath}`));
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
const error = err;
|
|
115
|
+
if (error.code === 'EACCES') {
|
|
116
|
+
console.error(chalk.red(`Permission denied: Cannot write ${configPath}`));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.error(chalk.red(`Failed to write config: ${error.message}`));
|
|
120
|
+
}
|
|
121
|
+
throw err;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export async function installClaudeSkills() {
|
|
125
|
+
const claudeDir = getClaudeDir();
|
|
126
|
+
const skillsDir = join(claudeDir, 'skills');
|
|
127
|
+
const commandsDir = join(claudeDir, 'commands');
|
|
128
|
+
// Create directories if they don't exist
|
|
129
|
+
try {
|
|
130
|
+
await mkdir(skillsDir, { recursive: true });
|
|
131
|
+
await mkdir(commandsDir, { recursive: true });
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
const error = err;
|
|
135
|
+
console.error(chalk.red(`Failed to create Claude directories: ${error.message}`));
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
// Read and transform skill
|
|
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
|
+
let commandContent;
|
|
156
|
+
try {
|
|
157
|
+
commandContent = await readSourceCommand();
|
|
158
|
+
}
|
|
159
|
+
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;
|
|
165
|
+
}
|
|
166
|
+
throw err;
|
|
167
|
+
}
|
|
168
|
+
const transformedCommand = transformCommandContent(commandContent);
|
|
169
|
+
// Write transformed skill
|
|
170
|
+
const targetSkillDir = getTargetSkillDir();
|
|
171
|
+
const targetSkillPath = getTargetSkillPath();
|
|
172
|
+
try {
|
|
173
|
+
await mkdir(targetSkillDir, { recursive: true });
|
|
174
|
+
await writeFile(targetSkillPath, transformedSkill);
|
|
175
|
+
console.log(chalk.green(`✓ Installed skill: ${targetSkillPath}`));
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const error = err;
|
|
179
|
+
if (error.code === 'EACCES') {
|
|
180
|
+
console.error(chalk.red(`Permission denied: Cannot write ${targetSkillPath}`));
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.error(chalk.red(`Failed to install skill: ${error.message}`));
|
|
184
|
+
}
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
// Write transformed command
|
|
188
|
+
const targetCommandPath = getTargetCommandPath();
|
|
189
|
+
try {
|
|
190
|
+
await writeFile(targetCommandPath, transformedCommand);
|
|
191
|
+
console.log(chalk.green(`✓ Installed command: ${targetCommandPath}`));
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
const error = err;
|
|
195
|
+
if (error.code === 'EACCES') {
|
|
196
|
+
console.error(chalk.red(`Permission denied: Cannot write ${targetCommandPath}`));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.error(chalk.red(`Failed to install command: ${error.message}`));
|
|
200
|
+
}
|
|
201
|
+
throw err;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export async function init() {
|
|
205
|
+
// Check for existing initialization
|
|
206
|
+
if (await ralphDirExists()) {
|
|
207
|
+
const overwrite = await promptOverwrite();
|
|
208
|
+
if (overwrite === null) {
|
|
209
|
+
// Ctrl+C
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (!overwrite) {
|
|
213
|
+
console.log(chalk.gray('Initialization cancelled'));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Run prompts
|
|
218
|
+
const result = await runInitPrompts();
|
|
219
|
+
if (result.aborted) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Create project directories
|
|
223
|
+
await createProjectDirs();
|
|
224
|
+
// Install skills if requested
|
|
225
|
+
if (result.installSkills) {
|
|
226
|
+
await installClaudeSkills();
|
|
227
|
+
}
|
|
228
|
+
// Write config
|
|
229
|
+
await writeConfig(result.agent);
|
|
230
|
+
// Success message
|
|
231
|
+
console.log();
|
|
232
|
+
console.log(chalk.cyan('Next steps:'));
|
|
233
|
+
if (result.agent === 'claude' && result.installSkills) {
|
|
234
|
+
console.log(chalk.gray(' 1. Create a PRD: /ralph-prd <feature-name>'));
|
|
235
|
+
console.log(chalk.gray(' 2. Run tasks: /ralph-complete-next-task <prd-name>'));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
console.log(chalk.gray(' 1. Create PRDs in .ralph/prd/'));
|
|
239
|
+
console.log(chalk.gray(' 2. Run: ralph run <prd-name>'));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prd-add.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function prdAdd(path, name, opts) {
|
|
|
24
24
|
console.error(chalk.red(`PRD already exists: ${name}`));
|
|
25
25
|
process.exit(1);
|
|
26
26
|
}
|
|
27
|
-
const prdDir = getPrdDir(name);
|
|
27
|
+
const prdDir = await getPrdDir(name);
|
|
28
28
|
const prdJsonPath = join(prdDir, 'prd.json');
|
|
29
29
|
const progressPath = join(prdDir, 'progress.txt');
|
|
30
30
|
console.log(chalk.blue(`Creating PRD: ${name}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-add.js","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAMrF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,IAAY,EACZ,IAAmB;IAEnB,iBAAiB;IACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACxD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"prd-add.js","sourceRoot":"","sources":["../../src/commands/prd-add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAMrF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,IAAY,EACZ,IAAmB;IAEnB,iBAAiB;IACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACxD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAA;IAEhD,kCAAkC;IAClC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,CAAC,CAAA;IAEpD,2CAA2C;IAC3C,MAAM,eAAe,EAAE,CAAA;IACvB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE;QACtC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChC,WAAW,EAAE,WAAW;KACzB,CAAC,CAAA;IAEF,wCAAwC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAA;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;QACxD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;KACjD,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAEjC,8BAA8B;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAA;IAExC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC"}
|
package/dist/commands/run.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function run(prdName, opts) {
|
|
|
24
24
|
process.exit(1);
|
|
25
25
|
}
|
|
26
26
|
const prd = await getPrd(prdName);
|
|
27
|
-
const prdDir = getPrdDir(prdName);
|
|
27
|
+
const prdDir = await getPrdDir(prdName);
|
|
28
28
|
const prdJsonPath = join(prdDir, 'prd.json');
|
|
29
29
|
const iterationsDir = join(prdDir, 'iterations');
|
|
30
30
|
// Create iterations directory
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAErF,MAAM,qBAAqB,GAAG,yBAAyB,CAAA;AAOvD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAe,EAAE,IAAgB;IACzD,iBAAiB;IACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACxD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAChD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,15 @@ import { program } from 'commander';
|
|
|
3
3
|
import { run } from './commands/run.js';
|
|
4
4
|
import { prdAdd } from './commands/prd-add.js';
|
|
5
5
|
import { prdList } from './commands/prd-list.js';
|
|
6
|
+
import { init } from './commands/init.js';
|
|
6
7
|
program
|
|
7
8
|
.name('ralph')
|
|
8
9
|
.description('Loop coding agent CLI - run agents headlessly in a loop')
|
|
9
10
|
.version('0.1.0');
|
|
11
|
+
program
|
|
12
|
+
.command('init')
|
|
13
|
+
.description('Initialize ralph in current project')
|
|
14
|
+
.action(init);
|
|
10
15
|
program
|
|
11
16
|
.command('run')
|
|
12
17
|
.description('Run PRD tasks in a loop')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,IAAI,CAAC,CAAA;AAEf,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,YAAY,EAAE,QAAQ,CAAC;KACrD,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,GAAG,CAAC;KAChE,MAAM,CAAC,GAAG,CAAC,CAAA;AAEd,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;AAE7D,GAAG;KACA,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,kCAAkC,CAAC;KAC/C,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACtC,MAAM,CAAC,qBAAqB,EAAE,YAAY,EAAE,QAAQ,CAAC;KACrD,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAEhE,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class SourceFileNotFoundError extends Error {
|
|
2
|
+
readonly path: string;
|
|
3
|
+
constructor(path: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function getClaudeDir(): string;
|
|
6
|
+
export declare function getSourceSkillPath(): string;
|
|
7
|
+
export declare function getSourceCommandPath(): string;
|
|
8
|
+
export declare function getTargetSkillDir(): string;
|
|
9
|
+
export declare function getTargetSkillPath(): string;
|
|
10
|
+
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;
|
|
15
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
export class SourceFileNotFoundError extends Error {
|
|
5
|
+
path;
|
|
6
|
+
constructor(path) {
|
|
7
|
+
super(`Source file not found: ${path}`);
|
|
8
|
+
this.path = path;
|
|
9
|
+
this.name = 'SourceFileNotFoundError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function getClaudeDir() {
|
|
13
|
+
return join(homedir(), '.claude');
|
|
14
|
+
}
|
|
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
|
+
export function getTargetSkillDir() {
|
|
22
|
+
return join(getClaudeDir(), 'skills', 'ralph-prd');
|
|
23
|
+
}
|
|
24
|
+
export function getTargetSkillPath() {
|
|
25
|
+
return join(getTargetSkillDir(), 'SKILL.md');
|
|
26
|
+
}
|
|
27
|
+
export function getTargetCommandPath() {
|
|
28
|
+
return join(getClaudeDir(), 'commands', 'ralph-complete-next-task.md');
|
|
29
|
+
}
|
|
30
|
+
export async function readSourceSkill() {
|
|
31
|
+
const path = getSourceSkillPath();
|
|
32
|
+
try {
|
|
33
|
+
return await readFile(path, 'utf-8');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
throw new SourceFileNotFoundError(path);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function readSourceCommand() {
|
|
40
|
+
const path = getSourceCommandPath();
|
|
41
|
+
try {
|
|
42
|
+
return await readFile(path, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
throw new SourceFileNotFoundError(path);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
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
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/prd/manager.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { PrdJson, PrdStatus } from './types.js';
|
|
2
|
+
export declare function getLocalPrdsDir(): string;
|
|
3
|
+
export declare function getGlobalPrdsDir(): string;
|
|
2
4
|
export declare function getPrdsDir(): string;
|
|
3
|
-
export declare function
|
|
5
|
+
export declare function getLocalPrdDir(name: string): string;
|
|
6
|
+
export declare function getGlobalPrdDir(name: string): string;
|
|
7
|
+
export declare function getPrdDir(name: string): Promise<string>;
|
|
4
8
|
export declare function prdExists(name: string): Promise<boolean>;
|
|
5
9
|
export declare function createPrdFolder(name: string): Promise<void>;
|
|
6
10
|
export declare function copyMarkdown(src: string, name: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAA;AAEnE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAA;AAEnE,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,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9D;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;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,CAK3D;AAiBD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CA2BrD"}
|
package/dist/prd/manager.js
CHANGED
|
@@ -1,30 +1,54 @@
|
|
|
1
1
|
import { access, copyFile, mkdir, readdir, readFile } from 'node:fs/promises';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
export function
|
|
4
|
+
export function getLocalPrdsDir() {
|
|
5
|
+
return join(process.cwd(), '.ralph', 'prd');
|
|
6
|
+
}
|
|
7
|
+
export function getGlobalPrdsDir() {
|
|
5
8
|
return join(homedir(), '.ralph', 'prd');
|
|
6
9
|
}
|
|
7
|
-
export function
|
|
8
|
-
return
|
|
10
|
+
export function getPrdsDir() {
|
|
11
|
+
return getGlobalPrdsDir();
|
|
9
12
|
}
|
|
10
|
-
export
|
|
13
|
+
export function getLocalPrdDir(name) {
|
|
14
|
+
return join(getLocalPrdsDir(), name);
|
|
15
|
+
}
|
|
16
|
+
export function getGlobalPrdDir(name) {
|
|
17
|
+
return join(getGlobalPrdsDir(), name);
|
|
18
|
+
}
|
|
19
|
+
async function dirExists(path) {
|
|
11
20
|
try {
|
|
12
|
-
await access(
|
|
21
|
+
await access(path);
|
|
13
22
|
return true;
|
|
14
23
|
}
|
|
15
24
|
catch {
|
|
16
25
|
return false;
|
|
17
26
|
}
|
|
18
27
|
}
|
|
28
|
+
export async function getPrdDir(name) {
|
|
29
|
+
const localDir = getLocalPrdDir(name);
|
|
30
|
+
if (await dirExists(localDir)) {
|
|
31
|
+
return localDir;
|
|
32
|
+
}
|
|
33
|
+
return getGlobalPrdDir(name);
|
|
34
|
+
}
|
|
35
|
+
export async function prdExists(name) {
|
|
36
|
+
const localDir = getLocalPrdDir(name);
|
|
37
|
+
const globalDir = getGlobalPrdDir(name);
|
|
38
|
+
return (await dirExists(localDir)) || (await dirExists(globalDir));
|
|
39
|
+
}
|
|
19
40
|
export async function createPrdFolder(name) {
|
|
20
|
-
await
|
|
41
|
+
const prdDir = await getPrdDir(name);
|
|
42
|
+
await mkdir(prdDir, { recursive: true });
|
|
21
43
|
}
|
|
22
44
|
export async function copyMarkdown(src, name) {
|
|
23
|
-
const
|
|
45
|
+
const prdDir = await getPrdDir(name);
|
|
46
|
+
const dest = join(prdDir, 'prd.md');
|
|
24
47
|
await copyFile(src, dest);
|
|
25
48
|
}
|
|
26
49
|
export async function getPrd(name) {
|
|
27
|
-
const
|
|
50
|
+
const prdDir = await getPrdDir(name);
|
|
51
|
+
const prdPath = join(prdDir, 'prd.json');
|
|
28
52
|
const content = await readFile(prdPath, 'utf-8');
|
|
29
53
|
return JSON.parse(content);
|
|
30
54
|
}
|
|
@@ -36,17 +60,21 @@ function computeStatus(prd) {
|
|
|
36
60
|
return 'completed';
|
|
37
61
|
return 'in_progress';
|
|
38
62
|
}
|
|
39
|
-
|
|
40
|
-
const prdsDir = getPrdsDir();
|
|
41
|
-
let entries;
|
|
63
|
+
async function readPrdEntries(dir) {
|
|
42
64
|
try {
|
|
43
|
-
|
|
65
|
+
return await readdir(dir);
|
|
44
66
|
}
|
|
45
67
|
catch {
|
|
46
68
|
return [];
|
|
47
69
|
}
|
|
70
|
+
}
|
|
71
|
+
export async function listPrds() {
|
|
72
|
+
const localEntries = await readPrdEntries(getLocalPrdsDir());
|
|
73
|
+
const globalEntries = await readPrdEntries(getGlobalPrdsDir());
|
|
74
|
+
// Dedupe: local takes precedence
|
|
75
|
+
const allEntries = [...new Set([...localEntries, ...globalEntries])];
|
|
48
76
|
const results = [];
|
|
49
|
-
for (const entry of
|
|
77
|
+
for (const entry of allEntries) {
|
|
50
78
|
try {
|
|
51
79
|
const prd = await getPrd(entry);
|
|
52
80
|
const status = computeStatus(prd);
|
package/dist/prd/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,UAAU,UAAU;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/prd/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/prd/types.d.ts
CHANGED
package/dist/prd/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prd/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAA;CACF;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;AAEnE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;CACvB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prd/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;AAEvD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAA;CACF;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;AAEnE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rlph-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Loop coding agent CLI - run agents headlessly in a loop",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"url": "git+https://github.com/rem4ik4ever/ralph.git"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
+
"@inquirer/prompts": "^7.10.1",
|
|
37
38
|
"chalk": "^5.3.0",
|
|
38
39
|
"commander": "^12.1.0",
|
|
39
40
|
"nanoid": "^5.0.9"
|