oh-my-claude-sisyphus 1.9.0 → 1.10.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/cli/index.js +0 -0
- package/dist/features/builtin-skills/skills.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.js +144 -11
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/hooks/bridge.d.ts +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +71 -0
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/persistent-mode/index.d.ts +40 -0
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/index.js +200 -0
- package/dist/hooks/persistent-mode/index.js.map +1 -0
- package/dist/hooks/plugin-patterns/index.d.ts +107 -0
- package/dist/hooks/plugin-patterns/index.d.ts.map +1 -0
- package/dist/hooks/plugin-patterns/index.js +286 -0
- package/dist/hooks/plugin-patterns/index.js.map +1 -0
- package/dist/hooks/ralph-verifier/index.d.ts +72 -0
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ralph-verifier/index.js +223 -0
- package/dist/hooks/ralph-verifier/index.js.map +1 -0
- package/dist/hooks/ultrawork-state/index.d.ts +60 -0
- package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork-state/index.js +207 -0
- package/dist/hooks/ultrawork-state/index.js.map +1 -0
- package/dist/installer/hooks.d.ts +38 -2
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +599 -8
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +123 -7
- package/dist/installer/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/agents/model-lists.d.ts +0 -26
- package/dist/agents/model-lists.d.ts.map +0 -1
- package/dist/agents/model-lists.js +0 -62
- package/dist/agents/model-lists.js.map +0 -1
- package/dist/auth/index.d.ts +0 -10
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -13
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/manager.d.ts +0 -54
- package/dist/auth/manager.d.ts.map +0 -1
- package/dist/auth/manager.js +0 -248
- package/dist/auth/manager.js.map +0 -1
- package/dist/auth/oauth-google.d.ts +0 -47
- package/dist/auth/oauth-google.d.ts.map +0 -1
- package/dist/auth/oauth-google.js +0 -280
- package/dist/auth/oauth-google.js.map +0 -1
- package/dist/auth/oauth-openai.d.ts +0 -46
- package/dist/auth/oauth-openai.d.ts.map +0 -1
- package/dist/auth/oauth-openai.js +0 -264
- package/dist/auth/oauth-openai.js.map +0 -1
- package/dist/auth/pkce.d.ts +0 -14
- package/dist/auth/pkce.d.ts.map +0 -1
- package/dist/auth/pkce.js +0 -35
- package/dist/auth/pkce.js.map +0 -1
- package/dist/auth/storage.d.ts +0 -52
- package/dist/auth/storage.d.ts.map +0 -1
- package/dist/auth/storage.js +0 -230
- package/dist/auth/storage.js.map +0 -1
- package/dist/auth/types.d.ts +0 -76
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -5
- package/dist/auth/types.js.map +0 -1
- package/dist/providers/index.d.ts +0 -8
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -10
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/registry.d.ts +0 -29
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/registry.js +0 -162
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/router.d.ts +0 -40
- package/dist/providers/router.d.ts.map +0 -1
- package/dist/providers/router.js +0 -88
- package/dist/providers/router.js.map +0 -1
- package/dist/providers/types.d.ts +0 -92
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -27
- package/dist/providers/types.js.map +0 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ralph Loop Verifier
|
|
3
|
+
*
|
|
4
|
+
* Adds oracle verification to ralph-loop completion claims.
|
|
5
|
+
* When ralph-loop outputs a completion promise, instead of immediately
|
|
6
|
+
* accepting it, we trigger an oracle verification phase.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Ralph-loop outputs <promise>TASK_COMPLETE</promise>
|
|
10
|
+
* 2. System detects this and enters verification mode
|
|
11
|
+
* 3. Oracle agent is invoked to verify the work
|
|
12
|
+
* 4. If oracle approves -> truly complete
|
|
13
|
+
* 5. If oracle finds flaws -> continue ralph-loop with oracle feedback
|
|
14
|
+
*/
|
|
15
|
+
export interface VerificationState {
|
|
16
|
+
/** Whether verification is pending */
|
|
17
|
+
pending: boolean;
|
|
18
|
+
/** The completion claim that triggered verification */
|
|
19
|
+
completion_claim: string;
|
|
20
|
+
/** Number of verification attempts */
|
|
21
|
+
verification_attempts: number;
|
|
22
|
+
/** Max verification attempts before force-accepting */
|
|
23
|
+
max_verification_attempts: number;
|
|
24
|
+
/** Oracle feedback from last verification */
|
|
25
|
+
oracle_feedback?: string;
|
|
26
|
+
/** Whether oracle approved */
|
|
27
|
+
oracle_approved?: boolean;
|
|
28
|
+
/** Timestamp of verification request */
|
|
29
|
+
requested_at: string;
|
|
30
|
+
/** Original ralph-loop task */
|
|
31
|
+
original_task: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read verification state
|
|
35
|
+
*/
|
|
36
|
+
export declare function readVerificationState(directory: string): VerificationState | null;
|
|
37
|
+
/**
|
|
38
|
+
* Write verification state
|
|
39
|
+
*/
|
|
40
|
+
export declare function writeVerificationState(directory: string, state: VerificationState): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Clear verification state
|
|
43
|
+
*/
|
|
44
|
+
export declare function clearVerificationState(directory: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Start verification process
|
|
47
|
+
*/
|
|
48
|
+
export declare function startVerification(directory: string, completionClaim: string, originalTask: string): VerificationState;
|
|
49
|
+
/**
|
|
50
|
+
* Record oracle feedback
|
|
51
|
+
*/
|
|
52
|
+
export declare function recordOracleFeedback(directory: string, approved: boolean, feedback: string): VerificationState | null;
|
|
53
|
+
/**
|
|
54
|
+
* Generate oracle verification prompt
|
|
55
|
+
*/
|
|
56
|
+
export declare function getOracleVerificationPrompt(state: VerificationState): string;
|
|
57
|
+
/**
|
|
58
|
+
* Generate continuation prompt after oracle rejection
|
|
59
|
+
*/
|
|
60
|
+
export declare function getOracleRejectionContinuationPrompt(state: VerificationState): string;
|
|
61
|
+
/**
|
|
62
|
+
* Check if text contains oracle approval
|
|
63
|
+
*/
|
|
64
|
+
export declare function detectOracleApproval(text: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Check if text contains oracle rejection indicators
|
|
67
|
+
*/
|
|
68
|
+
export declare function detectOracleRejection(text: string): {
|
|
69
|
+
rejected: boolean;
|
|
70
|
+
feedback: string;
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ralph-verifier/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,yBAAyB,EAAE,MAAM,CAAC;IAClC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAWD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAUjF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAkB3F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAWjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,iBAAiB,CAYnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,GACf,iBAAiB,GAAG,IAAI,CAyB1B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAwC5E;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA2BrF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAuB3F"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ralph Loop Verifier
|
|
3
|
+
*
|
|
4
|
+
* Adds oracle verification to ralph-loop completion claims.
|
|
5
|
+
* When ralph-loop outputs a completion promise, instead of immediately
|
|
6
|
+
* accepting it, we trigger an oracle verification phase.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Ralph-loop outputs <promise>TASK_COMPLETE</promise>
|
|
10
|
+
* 2. System detects this and enters verification mode
|
|
11
|
+
* 3. Oracle agent is invoked to verify the work
|
|
12
|
+
* 4. If oracle approves -> truly complete
|
|
13
|
+
* 5. If oracle finds flaws -> continue ralph-loop with oracle feedback
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'fs';
|
|
16
|
+
import { join } from 'path';
|
|
17
|
+
const DEFAULT_MAX_VERIFICATION_ATTEMPTS = 3;
|
|
18
|
+
/**
|
|
19
|
+
* Get verification state file path
|
|
20
|
+
*/
|
|
21
|
+
function getVerificationStatePath(directory) {
|
|
22
|
+
return join(directory, '.sisyphus', 'ralph-verification.json');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read verification state
|
|
26
|
+
*/
|
|
27
|
+
export function readVerificationState(directory) {
|
|
28
|
+
const statePath = getVerificationStatePath(directory);
|
|
29
|
+
if (!existsSync(statePath)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return JSON.parse(readFileSync(statePath, 'utf-8'));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Write verification state
|
|
41
|
+
*/
|
|
42
|
+
export function writeVerificationState(directory, state) {
|
|
43
|
+
const statePath = getVerificationStatePath(directory);
|
|
44
|
+
const stateDir = join(directory, '.sisyphus');
|
|
45
|
+
if (!existsSync(stateDir)) {
|
|
46
|
+
try {
|
|
47
|
+
mkdirSync(stateDir, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
writeFileSync(statePath, JSON.stringify(state, null, 2));
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clear verification state
|
|
63
|
+
*/
|
|
64
|
+
export function clearVerificationState(directory) {
|
|
65
|
+
const statePath = getVerificationStatePath(directory);
|
|
66
|
+
if (existsSync(statePath)) {
|
|
67
|
+
try {
|
|
68
|
+
unlinkSync(statePath);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Start verification process
|
|
79
|
+
*/
|
|
80
|
+
export function startVerification(directory, completionClaim, originalTask) {
|
|
81
|
+
const state = {
|
|
82
|
+
pending: true,
|
|
83
|
+
completion_claim: completionClaim,
|
|
84
|
+
verification_attempts: 0,
|
|
85
|
+
max_verification_attempts: DEFAULT_MAX_VERIFICATION_ATTEMPTS,
|
|
86
|
+
requested_at: new Date().toISOString(),
|
|
87
|
+
original_task: originalTask
|
|
88
|
+
};
|
|
89
|
+
writeVerificationState(directory, state);
|
|
90
|
+
return state;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Record oracle feedback
|
|
94
|
+
*/
|
|
95
|
+
export function recordOracleFeedback(directory, approved, feedback) {
|
|
96
|
+
const state = readVerificationState(directory);
|
|
97
|
+
if (!state) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
state.verification_attempts += 1;
|
|
101
|
+
state.oracle_approved = approved;
|
|
102
|
+
state.oracle_feedback = feedback;
|
|
103
|
+
if (approved) {
|
|
104
|
+
// Clear state on approval
|
|
105
|
+
clearVerificationState(directory);
|
|
106
|
+
return { ...state, pending: false };
|
|
107
|
+
}
|
|
108
|
+
// Check if max attempts reached
|
|
109
|
+
if (state.verification_attempts >= state.max_verification_attempts) {
|
|
110
|
+
clearVerificationState(directory);
|
|
111
|
+
return { ...state, pending: false };
|
|
112
|
+
}
|
|
113
|
+
// Continue verification loop
|
|
114
|
+
writeVerificationState(directory, state);
|
|
115
|
+
return state;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate oracle verification prompt
|
|
119
|
+
*/
|
|
120
|
+
export function getOracleVerificationPrompt(state) {
|
|
121
|
+
return `<ralph-verification>
|
|
122
|
+
|
|
123
|
+
[ORACLE VERIFICATION REQUIRED - Attempt ${state.verification_attempts + 1}/${state.max_verification_attempts}]
|
|
124
|
+
|
|
125
|
+
The agent claims the task is complete. Before accepting, YOU MUST verify with Oracle.
|
|
126
|
+
|
|
127
|
+
**Original Task:**
|
|
128
|
+
${state.original_task}
|
|
129
|
+
|
|
130
|
+
**Completion Claim:**
|
|
131
|
+
${state.completion_claim}
|
|
132
|
+
|
|
133
|
+
${state.oracle_feedback ? `**Previous Oracle Feedback (rejected):**\n${state.oracle_feedback}\n` : ''}
|
|
134
|
+
|
|
135
|
+
## MANDATORY VERIFICATION STEPS
|
|
136
|
+
|
|
137
|
+
1. **Spawn Oracle Agent** for verification:
|
|
138
|
+
\`\`\`
|
|
139
|
+
Task(subagent_type="oracle", prompt="Verify this task completion claim...")
|
|
140
|
+
\`\`\`
|
|
141
|
+
|
|
142
|
+
2. **Oracle must check:**
|
|
143
|
+
- Are ALL requirements from the original task met?
|
|
144
|
+
- Is the implementation complete, not partial?
|
|
145
|
+
- Are there any obvious bugs or issues?
|
|
146
|
+
- Does the code compile/run without errors?
|
|
147
|
+
- Are tests passing (if applicable)?
|
|
148
|
+
|
|
149
|
+
3. **Based on Oracle's response:**
|
|
150
|
+
- If APPROVED: Output \`<oracle-approved>VERIFIED_COMPLETE</oracle-approved>\`
|
|
151
|
+
- If REJECTED: Continue working on the identified issues
|
|
152
|
+
|
|
153
|
+
DO NOT output the completion promise again until Oracle approves.
|
|
154
|
+
|
|
155
|
+
</ralph-verification>
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Generate continuation prompt after oracle rejection
|
|
163
|
+
*/
|
|
164
|
+
export function getOracleRejectionContinuationPrompt(state) {
|
|
165
|
+
return `<ralph-continuation-after-rejection>
|
|
166
|
+
|
|
167
|
+
[ORACLE REJECTED - Continue Working]
|
|
168
|
+
|
|
169
|
+
Oracle found issues with your completion claim. You must address them.
|
|
170
|
+
|
|
171
|
+
**Oracle Feedback:**
|
|
172
|
+
${state.oracle_feedback}
|
|
173
|
+
|
|
174
|
+
**Original Task:**
|
|
175
|
+
${state.original_task}
|
|
176
|
+
|
|
177
|
+
## INSTRUCTIONS
|
|
178
|
+
|
|
179
|
+
1. Address ALL issues identified by Oracle
|
|
180
|
+
2. Do NOT claim completion again until issues are fixed
|
|
181
|
+
3. When truly done, output the completion promise again
|
|
182
|
+
4. Another Oracle verification will be triggered
|
|
183
|
+
|
|
184
|
+
Continue working now.
|
|
185
|
+
|
|
186
|
+
</ralph-continuation-after-rejection>
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
`;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Check if text contains oracle approval
|
|
194
|
+
*/
|
|
195
|
+
export function detectOracleApproval(text) {
|
|
196
|
+
return /<oracle-approved>.*?VERIFIED_COMPLETE.*?<\/oracle-approved>/is.test(text);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if text contains oracle rejection indicators
|
|
200
|
+
*/
|
|
201
|
+
export function detectOracleRejection(text) {
|
|
202
|
+
// Look for explicit rejection patterns
|
|
203
|
+
const rejectionPatterns = [
|
|
204
|
+
/oracle.*?(rejected|found issues|not complete|incomplete)/i,
|
|
205
|
+
/issues? (found|identified|detected)/i,
|
|
206
|
+
/not yet complete/i,
|
|
207
|
+
/missing.*?(implementation|feature|test)/i,
|
|
208
|
+
/bug.*?(found|detected|identified)/i,
|
|
209
|
+
/error.*?(found|detected|identified)/i
|
|
210
|
+
];
|
|
211
|
+
for (const pattern of rejectionPatterns) {
|
|
212
|
+
if (pattern.test(text)) {
|
|
213
|
+
// Extract feedback (rough heuristic)
|
|
214
|
+
const feedbackMatch = text.match(/(?:oracle|feedback|issue|problem|error|bug)[:\s]+([^.]+\.)/i);
|
|
215
|
+
return {
|
|
216
|
+
rejected: true,
|
|
217
|
+
feedback: feedbackMatch ? feedbackMatch[1] : 'Oracle found issues with the implementation.'
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { rejected: false, feedback: '' };
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ralph-verifier/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultrawork State Management
|
|
3
|
+
*
|
|
4
|
+
* Manages persistent ultrawork mode state across sessions.
|
|
5
|
+
* When ultrawork is activated and todos remain incomplete,
|
|
6
|
+
* this module ensures the mode persists until all work is done.
|
|
7
|
+
*/
|
|
8
|
+
export interface UltraworkState {
|
|
9
|
+
/** Whether ultrawork mode is currently active */
|
|
10
|
+
active: boolean;
|
|
11
|
+
/** When ultrawork was activated */
|
|
12
|
+
started_at: string;
|
|
13
|
+
/** The original prompt that triggered ultrawork */
|
|
14
|
+
original_prompt: string;
|
|
15
|
+
/** Session ID the mode is bound to */
|
|
16
|
+
session_id?: string;
|
|
17
|
+
/** Number of times the mode has been reinforced (for metrics) */
|
|
18
|
+
reinforcement_count: number;
|
|
19
|
+
/** Last time the mode was checked/reinforced */
|
|
20
|
+
last_checked_at: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read Ultrawork state from disk (checks both local and global)
|
|
24
|
+
*/
|
|
25
|
+
export declare function readUltraworkState(directory?: string): UltraworkState | null;
|
|
26
|
+
/**
|
|
27
|
+
* Write Ultrawork state to disk (both local and global for redundancy)
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeUltraworkState(state: UltraworkState, directory?: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Activate ultrawork mode
|
|
32
|
+
*/
|
|
33
|
+
export declare function activateUltrawork(prompt: string, sessionId?: string, directory?: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Deactivate ultrawork mode
|
|
36
|
+
*/
|
|
37
|
+
export declare function deactivateUltrawork(directory?: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Increment reinforcement count (called when mode is reinforced on stop)
|
|
40
|
+
*/
|
|
41
|
+
export declare function incrementReinforcement(directory?: string): UltraworkState | null;
|
|
42
|
+
/**
|
|
43
|
+
* Check if ultrawork should be reinforced (active with pending todos)
|
|
44
|
+
*/
|
|
45
|
+
export declare function shouldReinforceUltrawork(sessionId?: string, directory?: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Get ultrawork persistence message for injection
|
|
48
|
+
*/
|
|
49
|
+
export declare function getUltraworkPersistenceMessage(state: UltraworkState): string;
|
|
50
|
+
/**
|
|
51
|
+
* Create an Ultrawork State hook instance
|
|
52
|
+
*/
|
|
53
|
+
export declare function createUltraworkStateHook(directory: string): {
|
|
54
|
+
activate: (prompt: string, sessionId?: string) => boolean;
|
|
55
|
+
deactivate: () => boolean;
|
|
56
|
+
getState: () => UltraworkState | null;
|
|
57
|
+
shouldReinforce: (sessionId?: string) => boolean;
|
|
58
|
+
incrementReinforcement: () => UltraworkState | null;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/ultrawork-state/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;CACzB;AA+CD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAwB5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAgBtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAuB/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAehF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAuB5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM;uBAEnC,MAAM,cAAc,MAAM;;;kCAIf,MAAM;;EAIvC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultrawork State Management
|
|
3
|
+
*
|
|
4
|
+
* Manages persistent ultrawork mode state across sessions.
|
|
5
|
+
* When ultrawork is activated and todos remain incomplete,
|
|
6
|
+
* this module ensures the mode persists until all work is done.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
const DEFAULT_STATE = {
|
|
12
|
+
active: false,
|
|
13
|
+
started_at: '',
|
|
14
|
+
original_prompt: '',
|
|
15
|
+
reinforcement_count: 0,
|
|
16
|
+
last_checked_at: ''
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Get the state file path for Ultrawork
|
|
20
|
+
*/
|
|
21
|
+
function getStateFilePath(directory) {
|
|
22
|
+
const baseDir = directory || process.cwd();
|
|
23
|
+
const sisyphusDir = join(baseDir, '.sisyphus');
|
|
24
|
+
return join(sisyphusDir, 'ultrawork-state.json');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get global state file path (for cross-session persistence)
|
|
28
|
+
*/
|
|
29
|
+
function getGlobalStateFilePath() {
|
|
30
|
+
return join(homedir(), '.claude', 'ultrawork-state.json');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensure the .sisyphus directory exists
|
|
34
|
+
*/
|
|
35
|
+
function ensureStateDir(directory) {
|
|
36
|
+
const baseDir = directory || process.cwd();
|
|
37
|
+
const sisyphusDir = join(baseDir, '.sisyphus');
|
|
38
|
+
if (!existsSync(sisyphusDir)) {
|
|
39
|
+
mkdirSync(sisyphusDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ensure the ~/.claude directory exists
|
|
44
|
+
*/
|
|
45
|
+
function ensureGlobalStateDir() {
|
|
46
|
+
const claudeDir = join(homedir(), '.claude');
|
|
47
|
+
if (!existsSync(claudeDir)) {
|
|
48
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read Ultrawork state from disk (checks both local and global)
|
|
53
|
+
*/
|
|
54
|
+
export function readUltraworkState(directory) {
|
|
55
|
+
// Check local state first
|
|
56
|
+
const localStateFile = getStateFilePath(directory);
|
|
57
|
+
if (existsSync(localStateFile)) {
|
|
58
|
+
try {
|
|
59
|
+
const content = readFileSync(localStateFile, 'utf-8');
|
|
60
|
+
return JSON.parse(content);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Fall through to global check
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Check global state
|
|
67
|
+
const globalStateFile = getGlobalStateFilePath();
|
|
68
|
+
if (existsSync(globalStateFile)) {
|
|
69
|
+
try {
|
|
70
|
+
const content = readFileSync(globalStateFile, 'utf-8');
|
|
71
|
+
return JSON.parse(content);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Write Ultrawork state to disk (both local and global for redundancy)
|
|
81
|
+
*/
|
|
82
|
+
export function writeUltraworkState(state, directory) {
|
|
83
|
+
try {
|
|
84
|
+
// Write to local .sisyphus
|
|
85
|
+
ensureStateDir(directory);
|
|
86
|
+
const localStateFile = getStateFilePath(directory);
|
|
87
|
+
writeFileSync(localStateFile, JSON.stringify(state, null, 2));
|
|
88
|
+
// Write to global ~/.claude for cross-session persistence
|
|
89
|
+
ensureGlobalStateDir();
|
|
90
|
+
const globalStateFile = getGlobalStateFilePath();
|
|
91
|
+
writeFileSync(globalStateFile, JSON.stringify(state, null, 2));
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Activate ultrawork mode
|
|
100
|
+
*/
|
|
101
|
+
export function activateUltrawork(prompt, sessionId, directory) {
|
|
102
|
+
const state = {
|
|
103
|
+
active: true,
|
|
104
|
+
started_at: new Date().toISOString(),
|
|
105
|
+
original_prompt: prompt,
|
|
106
|
+
session_id: sessionId,
|
|
107
|
+
reinforcement_count: 0,
|
|
108
|
+
last_checked_at: new Date().toISOString()
|
|
109
|
+
};
|
|
110
|
+
return writeUltraworkState(state, directory);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Deactivate ultrawork mode
|
|
114
|
+
*/
|
|
115
|
+
export function deactivateUltrawork(directory) {
|
|
116
|
+
// Remove local state
|
|
117
|
+
const localStateFile = getStateFilePath(directory);
|
|
118
|
+
if (existsSync(localStateFile)) {
|
|
119
|
+
try {
|
|
120
|
+
unlinkSync(localStateFile);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Continue to global cleanup
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Remove global state
|
|
127
|
+
const globalStateFile = getGlobalStateFilePath();
|
|
128
|
+
if (existsSync(globalStateFile)) {
|
|
129
|
+
try {
|
|
130
|
+
unlinkSync(globalStateFile);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Increment reinforcement count (called when mode is reinforced on stop)
|
|
141
|
+
*/
|
|
142
|
+
export function incrementReinforcement(directory) {
|
|
143
|
+
const state = readUltraworkState(directory);
|
|
144
|
+
if (!state || !state.active) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
state.reinforcement_count += 1;
|
|
148
|
+
state.last_checked_at = new Date().toISOString();
|
|
149
|
+
if (writeUltraworkState(state, directory)) {
|
|
150
|
+
return state;
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Check if ultrawork should be reinforced (active with pending todos)
|
|
156
|
+
*/
|
|
157
|
+
export function shouldReinforceUltrawork(sessionId, directory) {
|
|
158
|
+
const state = readUltraworkState(directory);
|
|
159
|
+
if (!state || !state.active) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
// If bound to a session, only reinforce for that session
|
|
163
|
+
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get ultrawork persistence message for injection
|
|
170
|
+
*/
|
|
171
|
+
export function getUltraworkPersistenceMessage(state) {
|
|
172
|
+
return `<ultrawork-persistence>
|
|
173
|
+
|
|
174
|
+
[ULTRAWORK MODE STILL ACTIVE - Reinforcement #${state.reinforcement_count + 1}]
|
|
175
|
+
|
|
176
|
+
Your ultrawork session is NOT complete. Incomplete todos remain.
|
|
177
|
+
|
|
178
|
+
REMEMBER THE ULTRAWORK RULES:
|
|
179
|
+
- **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially
|
|
180
|
+
- **BACKGROUND FIRST**: Use Task(run_in_background=true) for exploration (10+ concurrent)
|
|
181
|
+
- **TODO**: Track EVERY step. Mark complete IMMEDIATELY after each
|
|
182
|
+
- **VERIFY**: Check ALL requirements met before done
|
|
183
|
+
- **NO Premature Stopping**: ALL TODOs must be complete
|
|
184
|
+
|
|
185
|
+
Continue working on the next pending task. DO NOT STOP until all tasks are marked complete.
|
|
186
|
+
|
|
187
|
+
Original task: ${state.original_prompt}
|
|
188
|
+
|
|
189
|
+
</ultrawork-persistence>
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create an Ultrawork State hook instance
|
|
197
|
+
*/
|
|
198
|
+
export function createUltraworkStateHook(directory) {
|
|
199
|
+
return {
|
|
200
|
+
activate: (prompt, sessionId) => activateUltrawork(prompt, sessionId, directory),
|
|
201
|
+
deactivate: () => deactivateUltrawork(directory),
|
|
202
|
+
getState: () => readUltraworkState(directory),
|
|
203
|
+
shouldReinforce: (sessionId) => shouldReinforceUltrawork(sessionId, directory),
|
|
204
|
+
incrementReinforcement: () => incrementReinforcement(directory)
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/ultrawork-state/index.ts"],"names":[],"mappings":"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"}
|