oh-my-claude-sisyphus 2.5.0 → 2.6.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/__tests__/hooks.test.js +255 -1
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/notepad.test.d.ts +2 -0
- package/dist/__tests__/notepad.test.d.ts.map +1 -0
- package/dist/__tests__/notepad.test.js +374 -0
- package/dist/__tests__/notepad.test.js.map +1 -0
- package/dist/__tests__/ralph-prd.test.d.ts +2 -0
- package/dist/__tests__/ralph-prd.test.d.ts.map +1 -0
- package/dist/__tests__/ralph-prd.test.js +308 -0
- package/dist/__tests__/ralph-prd.test.js.map +1 -0
- package/dist/__tests__/ralph-progress.test.d.ts +2 -0
- package/dist/__tests__/ralph-progress.test.d.ts.map +1 -0
- package/dist/__tests__/ralph-progress.test.js +312 -0
- package/dist/__tests__/ralph-progress.test.js.map +1 -0
- package/dist/__tests__/skills.test.js +5 -3
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/agents/definitions.d.ts +4 -0
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +147 -3
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/prometheus.js +2 -2
- package/dist/agents/prometheus.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/features/builtin-skills/skills.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.js +61 -0
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/features/magic-keywords.js +1 -1
- package/dist/hooks/index.d.ts +5 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +15 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/notepad/index.d.ts +114 -0
- package/dist/hooks/notepad/index.d.ts.map +1 -0
- package/dist/hooks/notepad/index.js +372 -0
- package/dist/hooks/notepad/index.js.map +1 -0
- package/dist/hooks/persistent-mode/index.d.ts +5 -0
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +71 -5
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/ralph-loop/index.d.ts +48 -0
- package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
- package/dist/hooks/ralph-loop/index.js +127 -0
- package/dist/hooks/ralph-loop/index.js.map +1 -1
- package/dist/hooks/ralph-prd/index.d.ts +130 -0
- package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
- package/dist/hooks/ralph-prd/index.js +310 -0
- package/dist/hooks/ralph-prd/index.js.map +1 -0
- package/dist/hooks/ralph-progress/index.d.ts +102 -0
- package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
- package/dist/hooks/ralph-progress/index.js +408 -0
- package/dist/hooks/ralph-progress/index.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -1
- package/dist/hooks/sisyphus-orchestrator/index.js +26 -0
- package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -1
- package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
- package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
- package/dist/hooks/ultraqa-loop/index.js +216 -0
- package/dist/hooks/ultraqa-loop/index.js.map +1 -0
- package/dist/installer/hooks.d.ts +28 -0
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +262 -2
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +426 -12
- package/dist/installer/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/persistent-mode.mjs +167 -6
- package/scripts/post-tool-verifier.mjs +62 -1
- package/scripts/session-start.mjs +22 -0
- package/scripts/test-max-attempts.ts +94 -0
- package/scripts/test-mutual-exclusion.ts +152 -0
- package/scripts/test-notepad-integration.ts +495 -0
- package/scripts/test-remember-tags.ts +121 -0
- package/scripts/test-session-injection.ts +41 -0
|
@@ -13,10 +13,29 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
13
13
|
import { join } from 'path';
|
|
14
14
|
import { homedir } from 'os';
|
|
15
15
|
import { readUltraworkState, incrementReinforcement, deactivateUltrawork, getUltraworkPersistenceMessage } from '../ultrawork-state/index.js';
|
|
16
|
-
import { readRalphState, incrementRalphIteration, clearRalphState, detectCompletionPromise } from '../ralph-loop/index.js';
|
|
16
|
+
import { readRalphState, incrementRalphIteration, clearRalphState, detectCompletionPromise, getPrdCompletionStatus, getRalphContext } from '../ralph-loop/index.js';
|
|
17
17
|
import { readVerificationState, startVerification, recordOracleFeedback, getOracleVerificationPrompt, getOracleRejectionContinuationPrompt, detectOracleApproval, detectOracleRejection, clearVerificationState } from '../ralph-verifier/index.js';
|
|
18
18
|
import { checkIncompleteTodos, getNextPendingTodo } from '../todo-continuation/index.js';
|
|
19
19
|
import { TODO_CONTINUATION_PROMPT } from '../../installer/hooks.js';
|
|
20
|
+
/** Maximum todo-continuation attempts before giving up (prevents infinite loops) */
|
|
21
|
+
const MAX_TODO_CONTINUATION_ATTEMPTS = 5;
|
|
22
|
+
/** Track todo-continuation attempts per session to prevent infinite loops */
|
|
23
|
+
const todoContinuationAttempts = new Map();
|
|
24
|
+
/**
|
|
25
|
+
* Get or increment todo-continuation attempt counter
|
|
26
|
+
*/
|
|
27
|
+
function trackTodoContinuationAttempt(sessionId) {
|
|
28
|
+
const current = todoContinuationAttempts.get(sessionId) || 0;
|
|
29
|
+
const next = current + 1;
|
|
30
|
+
todoContinuationAttempts.set(sessionId, next);
|
|
31
|
+
return next;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Reset todo-continuation attempt counter (call when todos actually change)
|
|
35
|
+
*/
|
|
36
|
+
export function resetTodoContinuationAttempts(sessionId) {
|
|
37
|
+
todoContinuationAttempts.delete(sessionId);
|
|
38
|
+
}
|
|
20
39
|
/**
|
|
21
40
|
* Check for oracle approval in session transcript
|
|
22
41
|
*/
|
|
@@ -82,6 +101,19 @@ async function checkRalphLoop(sessionId, directory) {
|
|
|
82
101
|
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
83
102
|
return null;
|
|
84
103
|
}
|
|
104
|
+
// Check for PRD-based completion (all stories have passes: true)
|
|
105
|
+
const prdStatus = getPrdCompletionStatus(workingDir);
|
|
106
|
+
if (prdStatus.hasPrd && prdStatus.allComplete) {
|
|
107
|
+
// All PRD stories complete - allow completion
|
|
108
|
+
clearRalphState(workingDir);
|
|
109
|
+
clearVerificationState(workingDir);
|
|
110
|
+
deactivateUltrawork(workingDir);
|
|
111
|
+
return {
|
|
112
|
+
shouldBlock: false,
|
|
113
|
+
message: `[RALPH LOOP COMPLETE - PRD] All ${prdStatus.status?.total || 0} stories are complete! Great work!`,
|
|
114
|
+
mode: 'none'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
85
117
|
// Check for existing verification state (oracle verification in progress)
|
|
86
118
|
const verificationState = readVerificationState(workingDir);
|
|
87
119
|
if (verificationState?.pending) {
|
|
@@ -90,8 +122,10 @@ async function checkRalphLoop(sessionId, directory) {
|
|
|
90
122
|
// Check for oracle approval
|
|
91
123
|
if (checkOracleApprovalInTranscript(sessionId)) {
|
|
92
124
|
// Oracle approved - truly complete
|
|
125
|
+
// Also deactivate ultrawork if it was part of ultrawork-ralph
|
|
93
126
|
clearVerificationState(workingDir);
|
|
94
127
|
clearRalphState(workingDir);
|
|
128
|
+
deactivateUltrawork(workingDir);
|
|
95
129
|
return {
|
|
96
130
|
shouldBlock: false,
|
|
97
131
|
message: `[RALPH LOOP VERIFIED COMPLETE] Oracle verified task completion after ${state.iteration} iteration(s). Excellent work!`,
|
|
@@ -149,7 +183,9 @@ async function checkRalphLoop(sessionId, directory) {
|
|
|
149
183
|
};
|
|
150
184
|
}
|
|
151
185
|
// Fallback if verification state couldn't be created
|
|
186
|
+
// Also deactivate ultrawork if it was part of ultrawork-ralph
|
|
152
187
|
clearRalphState(workingDir);
|
|
188
|
+
deactivateUltrawork(workingDir);
|
|
153
189
|
return {
|
|
154
190
|
shouldBlock: false,
|
|
155
191
|
message: `[RALPH LOOP COMPLETE] Task completed after ${state.iteration} iteration(s). Great work!`,
|
|
@@ -158,8 +194,10 @@ async function checkRalphLoop(sessionId, directory) {
|
|
|
158
194
|
}
|
|
159
195
|
// Check max iterations
|
|
160
196
|
if (state.iteration >= state.max_iterations) {
|
|
197
|
+
// Also deactivate ultrawork if it was part of ultrawork-ralph
|
|
161
198
|
clearRalphState(workingDir);
|
|
162
199
|
clearVerificationState(workingDir);
|
|
200
|
+
deactivateUltrawork(workingDir);
|
|
163
201
|
return {
|
|
164
202
|
shouldBlock: false,
|
|
165
203
|
message: `[RALPH LOOP STOPPED] Max iterations (${state.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,
|
|
@@ -171,15 +209,20 @@ async function checkRalphLoop(sessionId, directory) {
|
|
|
171
209
|
if (!newState) {
|
|
172
210
|
return null;
|
|
173
211
|
}
|
|
212
|
+
// Get PRD context for injection
|
|
213
|
+
const ralphContext = getRalphContext(workingDir);
|
|
214
|
+
const prdInstruction = prdStatus.hasPrd
|
|
215
|
+
? `2. Check prd.json - are ALL stories marked passes: true?`
|
|
216
|
+
: `2. Check your todo list - are ALL items marked complete?`;
|
|
174
217
|
const continuationPrompt = `<ralph-loop-continuation>
|
|
175
218
|
|
|
176
219
|
[RALPH LOOP - ITERATION ${newState.iteration}/${newState.max_iterations}]
|
|
177
220
|
|
|
178
221
|
Your previous attempt did not output the completion promise. The work is NOT done yet.
|
|
179
|
-
|
|
222
|
+
${ralphContext}
|
|
180
223
|
CRITICAL INSTRUCTIONS:
|
|
181
224
|
1. Review your progress and the original task
|
|
182
|
-
|
|
225
|
+
${prdInstruction}
|
|
183
226
|
3. Continue from where you left off
|
|
184
227
|
4. When FULLY complete, output: <promise>${newState.completion_promise}</promise>
|
|
185
228
|
5. Do NOT stop until the task is truly done
|
|
@@ -239,21 +282,43 @@ async function checkUltrawork(sessionId, directory, hasIncompleteTodos) {
|
|
|
239
282
|
}
|
|
240
283
|
/**
|
|
241
284
|
* Check for incomplete todos (baseline enforcement)
|
|
285
|
+
* Includes max-attempts counter to prevent infinite loops when agent is stuck
|
|
242
286
|
*/
|
|
243
287
|
async function checkTodoContinuation(sessionId, directory) {
|
|
244
288
|
const result = await checkIncompleteTodos(sessionId, directory);
|
|
245
289
|
if (result.count === 0) {
|
|
290
|
+
// Reset counter when todos are cleared
|
|
291
|
+
if (sessionId) {
|
|
292
|
+
resetTodoContinuationAttempts(sessionId);
|
|
293
|
+
}
|
|
246
294
|
return null;
|
|
247
295
|
}
|
|
296
|
+
// Track continuation attempts to prevent infinite loops
|
|
297
|
+
const attemptCount = sessionId ? trackTodoContinuationAttempt(sessionId) : 1;
|
|
298
|
+
if (attemptCount > MAX_TODO_CONTINUATION_ATTEMPTS) {
|
|
299
|
+
// Too many attempts - agent appears stuck, allow stop but warn
|
|
300
|
+
return {
|
|
301
|
+
shouldBlock: false,
|
|
302
|
+
message: `[TODO CONTINUATION LIMIT] Attempted ${MAX_TODO_CONTINUATION_ATTEMPTS} continuations without progress. ${result.count} tasks remain incomplete. Consider reviewing the stuck tasks or asking the user for guidance.`,
|
|
303
|
+
mode: 'none',
|
|
304
|
+
metadata: {
|
|
305
|
+
todoCount: result.count,
|
|
306
|
+
todoContinuationAttempts: attemptCount
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
248
310
|
const nextTodo = getNextPendingTodo(result);
|
|
249
311
|
const nextTaskInfo = nextTodo
|
|
250
312
|
? `\n\nNext task: "${nextTodo.content}" (${nextTodo.status})`
|
|
251
313
|
: '';
|
|
314
|
+
const attemptInfo = attemptCount > 1
|
|
315
|
+
? `\n[Continuation attempt ${attemptCount}/${MAX_TODO_CONTINUATION_ATTEMPTS}]`
|
|
316
|
+
: '';
|
|
252
317
|
const message = `<todo-continuation>
|
|
253
318
|
|
|
254
319
|
${TODO_CONTINUATION_PROMPT}
|
|
255
320
|
|
|
256
|
-
[Status: ${result.count} of ${result.total} tasks remaining]${nextTaskInfo}
|
|
321
|
+
[Status: ${result.count} of ${result.total} tasks remaining]${nextTaskInfo}${attemptInfo}
|
|
257
322
|
|
|
258
323
|
</todo-continuation>
|
|
259
324
|
|
|
@@ -265,7 +330,8 @@ ${TODO_CONTINUATION_PROMPT}
|
|
|
265
330
|
message,
|
|
266
331
|
mode: 'todo-continuation',
|
|
267
332
|
metadata: {
|
|
268
|
-
todoCount: result.count
|
|
333
|
+
todoCount: result.count,
|
|
334
|
+
todoContinuationAttempts: attemptCount
|
|
269
335
|
}
|
|
270
336
|
};
|
|
271
337
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/persistent-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/persistent-mode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,13 @@
|
|
|
4
4
|
* Self-referential work loop that continues until a completion promise is detected.
|
|
5
5
|
* Named after the character who keeps working until the job is done.
|
|
6
6
|
*
|
|
7
|
+
* Enhanced with PRD (Product Requirements Document) support for structured task tracking.
|
|
8
|
+
* When a prd.json exists, completion is based on all stories having passes: true.
|
|
9
|
+
*
|
|
7
10
|
* Ported from oh-my-opencode's ralph-loop hook.
|
|
8
11
|
*/
|
|
12
|
+
import { type PRDStatus, type UserStory } from '../ralph-prd/index.js';
|
|
13
|
+
export declare function isUltraQAActive(directory: string): boolean;
|
|
9
14
|
export interface RalphLoopState {
|
|
10
15
|
/** Whether the loop is currently active */
|
|
11
16
|
active: boolean;
|
|
@@ -21,6 +26,10 @@ export interface RalphLoopState {
|
|
|
21
26
|
prompt: string;
|
|
22
27
|
/** Session ID the loop is bound to */
|
|
23
28
|
session_id?: string;
|
|
29
|
+
/** Whether PRD mode is active */
|
|
30
|
+
prd_mode?: boolean;
|
|
31
|
+
/** Current story being worked on */
|
|
32
|
+
current_story_id?: string;
|
|
24
33
|
}
|
|
25
34
|
export interface RalphLoopOptions {
|
|
26
35
|
/** Maximum iterations (default: 10) */
|
|
@@ -57,4 +66,43 @@ export declare function detectCompletionPromise(sessionId: string, promise: stri
|
|
|
57
66
|
* Create a Ralph Loop hook instance
|
|
58
67
|
*/
|
|
59
68
|
export declare function createRalphLoopHook(directory: string): RalphLoopHook;
|
|
69
|
+
/**
|
|
70
|
+
* Check if PRD mode is available (prd.json exists)
|
|
71
|
+
*/
|
|
72
|
+
export declare function hasPrd(directory: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get PRD completion status for ralph-loop
|
|
75
|
+
*/
|
|
76
|
+
export declare function getPrdCompletionStatus(directory: string): {
|
|
77
|
+
hasPrd: boolean;
|
|
78
|
+
allComplete: boolean;
|
|
79
|
+
status: PRDStatus | null;
|
|
80
|
+
nextStory: UserStory | null;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Get context injection for ralph-loop continuation
|
|
84
|
+
* Includes PRD current story and progress memory
|
|
85
|
+
*/
|
|
86
|
+
export declare function getRalphContext(directory: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Update ralph state with current story
|
|
89
|
+
*/
|
|
90
|
+
export declare function setCurrentStory(directory: string, storyId: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Enable PRD mode in ralph state
|
|
93
|
+
*/
|
|
94
|
+
export declare function enablePrdMode(directory: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Record progress after completing a story
|
|
97
|
+
*/
|
|
98
|
+
export declare function recordStoryProgress(directory: string, storyId: string, implementation: string[], filesChanged: string[], learnings: string[]): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Add a codebase pattern discovered during work
|
|
101
|
+
*/
|
|
102
|
+
export declare function recordPattern(directory: string, pattern: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Check if ralph-loop should complete based on PRD status
|
|
105
|
+
*/
|
|
106
|
+
export declare function shouldCompleteByPrd(directory: string): boolean;
|
|
107
|
+
export type { PRD, PRDStatus, UserStory } from '../ralph-prd/index.js';
|
|
60
108
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ralph-loop/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ralph-loop/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,32 @@
|
|
|
4
4
|
* Self-referential work loop that continues until a completion promise is detected.
|
|
5
5
|
* Named after the character who keeps working until the job is done.
|
|
6
6
|
*
|
|
7
|
+
* Enhanced with PRD (Product Requirements Document) support for structured task tracking.
|
|
8
|
+
* When a prd.json exists, completion is based on all stories having passes: true.
|
|
9
|
+
*
|
|
7
10
|
* Ported from oh-my-opencode's ralph-loop hook.
|
|
8
11
|
*/
|
|
9
12
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
|
|
10
13
|
import { join } from 'path';
|
|
11
14
|
import { homedir } from 'os';
|
|
15
|
+
import { readPrd, getPrdStatus, formatNextStoryPrompt, formatPrdStatus } from '../ralph-prd/index.js';
|
|
16
|
+
import { getProgressContext, appendProgress, initProgress, addPattern } from '../ralph-progress/index.js';
|
|
17
|
+
// Forward declaration to avoid circular import - check ultraqa state file directly
|
|
18
|
+
export function isUltraQAActive(directory) {
|
|
19
|
+
const sisyphusDir = join(directory, '.sisyphus');
|
|
20
|
+
const stateFile = join(sisyphusDir, 'ultraqa-state.json');
|
|
21
|
+
if (!existsSync(stateFile)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const content = readFileSync(stateFile, 'utf-8');
|
|
26
|
+
const state = JSON.parse(content);
|
|
27
|
+
return state && state.active === true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
12
33
|
const DEFAULT_MAX_ITERATIONS = 10;
|
|
13
34
|
const DEFAULT_COMPLETION_PROMISE = 'TASK_COMPLETE';
|
|
14
35
|
/**
|
|
@@ -125,6 +146,11 @@ function escapeRegex(str) {
|
|
|
125
146
|
*/
|
|
126
147
|
export function createRalphLoopHook(directory) {
|
|
127
148
|
const startLoop = (sessionId, prompt, options) => {
|
|
149
|
+
// Mutual exclusion check: cannot start Ralph Loop if UltraQA is active
|
|
150
|
+
if (isUltraQAActive(directory)) {
|
|
151
|
+
console.error('Cannot start Ralph Loop while UltraQA is active. Cancel UltraQA first with /cancel-ultraqa.');
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
128
154
|
const state = {
|
|
129
155
|
active: true,
|
|
130
156
|
iteration: 1,
|
|
@@ -152,4 +178,105 @@ export function createRalphLoopHook(directory) {
|
|
|
152
178
|
getState
|
|
153
179
|
};
|
|
154
180
|
}
|
|
181
|
+
// ============================================================================
|
|
182
|
+
// PRD Integration
|
|
183
|
+
// ============================================================================
|
|
184
|
+
/**
|
|
185
|
+
* Check if PRD mode is available (prd.json exists)
|
|
186
|
+
*/
|
|
187
|
+
export function hasPrd(directory) {
|
|
188
|
+
const prd = readPrd(directory);
|
|
189
|
+
return prd !== null;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get PRD completion status for ralph-loop
|
|
193
|
+
*/
|
|
194
|
+
export function getPrdCompletionStatus(directory) {
|
|
195
|
+
const prd = readPrd(directory);
|
|
196
|
+
if (!prd) {
|
|
197
|
+
return {
|
|
198
|
+
hasPrd: false,
|
|
199
|
+
allComplete: false,
|
|
200
|
+
status: null,
|
|
201
|
+
nextStory: null
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const status = getPrdStatus(prd);
|
|
205
|
+
return {
|
|
206
|
+
hasPrd: true,
|
|
207
|
+
allComplete: status.allComplete,
|
|
208
|
+
status,
|
|
209
|
+
nextStory: status.nextStory
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get context injection for ralph-loop continuation
|
|
214
|
+
* Includes PRD current story and progress memory
|
|
215
|
+
*/
|
|
216
|
+
export function getRalphContext(directory) {
|
|
217
|
+
const parts = [];
|
|
218
|
+
// Add progress context (patterns, learnings)
|
|
219
|
+
const progressContext = getProgressContext(directory);
|
|
220
|
+
if (progressContext) {
|
|
221
|
+
parts.push(progressContext);
|
|
222
|
+
}
|
|
223
|
+
// Add current story from PRD
|
|
224
|
+
const prdStatus = getPrdCompletionStatus(directory);
|
|
225
|
+
if (prdStatus.hasPrd && prdStatus.nextStory) {
|
|
226
|
+
parts.push(formatNextStoryPrompt(prdStatus.nextStory));
|
|
227
|
+
}
|
|
228
|
+
// Add PRD status summary
|
|
229
|
+
if (prdStatus.status) {
|
|
230
|
+
parts.push(`<prd-status>\n${formatPrdStatus(prdStatus.status)}\n</prd-status>\n`);
|
|
231
|
+
}
|
|
232
|
+
return parts.join('\n');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Update ralph state with current story
|
|
236
|
+
*/
|
|
237
|
+
export function setCurrentStory(directory, storyId) {
|
|
238
|
+
const state = readRalphState(directory);
|
|
239
|
+
if (!state) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
state.current_story_id = storyId;
|
|
243
|
+
return writeRalphState(directory, state);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Enable PRD mode in ralph state
|
|
247
|
+
*/
|
|
248
|
+
export function enablePrdMode(directory) {
|
|
249
|
+
const state = readRalphState(directory);
|
|
250
|
+
if (!state) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
state.prd_mode = true;
|
|
254
|
+
// Initialize progress.txt if it doesn't exist
|
|
255
|
+
initProgress(directory);
|
|
256
|
+
return writeRalphState(directory, state);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Record progress after completing a story
|
|
260
|
+
*/
|
|
261
|
+
export function recordStoryProgress(directory, storyId, implementation, filesChanged, learnings) {
|
|
262
|
+
return appendProgress(directory, {
|
|
263
|
+
storyId,
|
|
264
|
+
implementation,
|
|
265
|
+
filesChanged,
|
|
266
|
+
learnings
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Add a codebase pattern discovered during work
|
|
271
|
+
*/
|
|
272
|
+
export function recordPattern(directory, pattern) {
|
|
273
|
+
return addPattern(directory, pattern);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Check if ralph-loop should complete based on PRD status
|
|
277
|
+
*/
|
|
278
|
+
export function shouldCompleteByPrd(directory) {
|
|
279
|
+
const status = getPrdCompletionStatus(directory);
|
|
280
|
+
return status.hasPrd && status.allComplete;
|
|
281
|
+
}
|
|
155
282
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ralph-loop/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ralph-loop/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ralph PRD (Product Requirements Document) Support
|
|
3
|
+
*
|
|
4
|
+
* Implements structured task tracking using prd.json format from the original Ralph.
|
|
5
|
+
* Each user story has:
|
|
6
|
+
* - id: Unique identifier (e.g., "US-001")
|
|
7
|
+
* - title: Short description
|
|
8
|
+
* - description: User story format
|
|
9
|
+
* - acceptanceCriteria: List of criteria to pass
|
|
10
|
+
* - priority: Execution order (1 = highest)
|
|
11
|
+
* - passes: Boolean indicating completion
|
|
12
|
+
* - notes: Optional notes from implementation
|
|
13
|
+
*/
|
|
14
|
+
export interface UserStory {
|
|
15
|
+
/** Unique identifier (e.g., "US-001") */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Short title for the story */
|
|
18
|
+
title: string;
|
|
19
|
+
/** Full user story description */
|
|
20
|
+
description: string;
|
|
21
|
+
/** List of acceptance criteria that must be met */
|
|
22
|
+
acceptanceCriteria: string[];
|
|
23
|
+
/** Execution priority (1 = highest) */
|
|
24
|
+
priority: number;
|
|
25
|
+
/** Whether this story passes (complete and verified) */
|
|
26
|
+
passes: boolean;
|
|
27
|
+
/** Optional notes from implementation */
|
|
28
|
+
notes?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface PRD {
|
|
31
|
+
/** Project name */
|
|
32
|
+
project: string;
|
|
33
|
+
/** Git branch name for this work */
|
|
34
|
+
branchName: string;
|
|
35
|
+
/** Overall description of the feature/task */
|
|
36
|
+
description: string;
|
|
37
|
+
/** List of user stories */
|
|
38
|
+
userStories: UserStory[];
|
|
39
|
+
}
|
|
40
|
+
export interface PRDStatus {
|
|
41
|
+
/** Total number of stories */
|
|
42
|
+
total: number;
|
|
43
|
+
/** Number of completed (passes: true) stories */
|
|
44
|
+
completed: number;
|
|
45
|
+
/** Number of pending (passes: false) stories */
|
|
46
|
+
pending: number;
|
|
47
|
+
/** Whether all stories are complete */
|
|
48
|
+
allComplete: boolean;
|
|
49
|
+
/** The highest priority incomplete story, if any */
|
|
50
|
+
nextStory: UserStory | null;
|
|
51
|
+
/** List of incomplete story IDs */
|
|
52
|
+
incompleteIds: string[];
|
|
53
|
+
}
|
|
54
|
+
export declare const PRD_FILENAME = "prd.json";
|
|
55
|
+
export declare const PRD_EXAMPLE_FILENAME = "prd.example.json";
|
|
56
|
+
/**
|
|
57
|
+
* Get the path to the prd.json file in a directory
|
|
58
|
+
*/
|
|
59
|
+
export declare function getPrdPath(directory: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Get the path to the prd.json in .sisyphus subdirectory
|
|
62
|
+
*/
|
|
63
|
+
export declare function getSisyphusPrdPath(directory: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Find prd.json in a directory (checks both root and .sisyphus)
|
|
66
|
+
*/
|
|
67
|
+
export declare function findPrdPath(directory: string): string | null;
|
|
68
|
+
/**
|
|
69
|
+
* Read PRD from disk
|
|
70
|
+
*/
|
|
71
|
+
export declare function readPrd(directory: string): PRD | null;
|
|
72
|
+
/**
|
|
73
|
+
* Write PRD to disk
|
|
74
|
+
*/
|
|
75
|
+
export declare function writePrd(directory: string, prd: PRD): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get the status of a PRD
|
|
78
|
+
*/
|
|
79
|
+
export declare function getPrdStatus(prd: PRD): PRDStatus;
|
|
80
|
+
/**
|
|
81
|
+
* Mark a story as complete (passes: true)
|
|
82
|
+
*/
|
|
83
|
+
export declare function markStoryComplete(directory: string, storyId: string, notes?: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Mark a story as incomplete (passes: false)
|
|
86
|
+
*/
|
|
87
|
+
export declare function markStoryIncomplete(directory: string, storyId: string, notes?: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Get a specific story by ID
|
|
90
|
+
*/
|
|
91
|
+
export declare function getStory(directory: string, storyId: string): UserStory | null;
|
|
92
|
+
/**
|
|
93
|
+
* Get the next incomplete story (highest priority)
|
|
94
|
+
*/
|
|
95
|
+
export declare function getNextStory(directory: string): UserStory | null;
|
|
96
|
+
/**
|
|
97
|
+
* Input type for creating user stories (priority is optional)
|
|
98
|
+
*/
|
|
99
|
+
export type UserStoryInput = Omit<UserStory, 'passes' | 'priority'> & {
|
|
100
|
+
priority?: number;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Create a new PRD with user stories from a task description
|
|
104
|
+
*/
|
|
105
|
+
export declare function createPrd(project: string, branchName: string, description: string, stories: UserStoryInput[]): PRD;
|
|
106
|
+
/**
|
|
107
|
+
* Create a simple PRD from a task description (single story)
|
|
108
|
+
*/
|
|
109
|
+
export declare function createSimplePrd(project: string, branchName: string, taskDescription: string): PRD;
|
|
110
|
+
/**
|
|
111
|
+
* Initialize a PRD in a directory
|
|
112
|
+
*/
|
|
113
|
+
export declare function initPrd(directory: string, project: string, branchName: string, description: string, stories?: UserStoryInput[]): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Format PRD status as a string for display
|
|
116
|
+
*/
|
|
117
|
+
export declare function formatPrdStatus(status: PRDStatus): string;
|
|
118
|
+
/**
|
|
119
|
+
* Format a story for display
|
|
120
|
+
*/
|
|
121
|
+
export declare function formatStory(story: UserStory): string;
|
|
122
|
+
/**
|
|
123
|
+
* Format entire PRD for display
|
|
124
|
+
*/
|
|
125
|
+
export declare function formatPrd(prd: PRD): string;
|
|
126
|
+
/**
|
|
127
|
+
* Format next story prompt for injection into ralph-loop
|
|
128
|
+
*/
|
|
129
|
+
export declare function formatNextStoryPrompt(story: UserStory): string;
|
|
130
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ralph-prd/index.ts"],"names":[],"mappings":"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"}
|