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.
Files changed (84) hide show
  1. package/dist/cli/index.js +0 -0
  2. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  3. package/dist/features/builtin-skills/skills.js +144 -11
  4. package/dist/features/builtin-skills/skills.js.map +1 -1
  5. package/dist/hooks/bridge.d.ts +1 -1
  6. package/dist/hooks/bridge.d.ts.map +1 -1
  7. package/dist/hooks/bridge.js +71 -0
  8. package/dist/hooks/bridge.js.map +1 -1
  9. package/dist/hooks/index.d.ts +4 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +12 -0
  12. package/dist/hooks/index.js.map +1 -1
  13. package/dist/hooks/persistent-mode/index.d.ts +40 -0
  14. package/dist/hooks/persistent-mode/index.d.ts.map +1 -0
  15. package/dist/hooks/persistent-mode/index.js +200 -0
  16. package/dist/hooks/persistent-mode/index.js.map +1 -0
  17. package/dist/hooks/plugin-patterns/index.d.ts +107 -0
  18. package/dist/hooks/plugin-patterns/index.d.ts.map +1 -0
  19. package/dist/hooks/plugin-patterns/index.js +286 -0
  20. package/dist/hooks/plugin-patterns/index.js.map +1 -0
  21. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  22. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  23. package/dist/hooks/ralph-verifier/index.js +223 -0
  24. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  25. package/dist/hooks/ultrawork-state/index.d.ts +60 -0
  26. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  27. package/dist/hooks/ultrawork-state/index.js +207 -0
  28. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  29. package/dist/installer/hooks.d.ts +38 -2
  30. package/dist/installer/hooks.d.ts.map +1 -1
  31. package/dist/installer/hooks.js +599 -8
  32. package/dist/installer/hooks.js.map +1 -1
  33. package/dist/installer/index.d.ts.map +1 -1
  34. package/dist/installer/index.js +123 -7
  35. package/dist/installer/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/agents/model-lists.d.ts +0 -26
  38. package/dist/agents/model-lists.d.ts.map +0 -1
  39. package/dist/agents/model-lists.js +0 -62
  40. package/dist/agents/model-lists.js.map +0 -1
  41. package/dist/auth/index.d.ts +0 -10
  42. package/dist/auth/index.d.ts.map +0 -1
  43. package/dist/auth/index.js +0 -13
  44. package/dist/auth/index.js.map +0 -1
  45. package/dist/auth/manager.d.ts +0 -54
  46. package/dist/auth/manager.d.ts.map +0 -1
  47. package/dist/auth/manager.js +0 -248
  48. package/dist/auth/manager.js.map +0 -1
  49. package/dist/auth/oauth-google.d.ts +0 -47
  50. package/dist/auth/oauth-google.d.ts.map +0 -1
  51. package/dist/auth/oauth-google.js +0 -280
  52. package/dist/auth/oauth-google.js.map +0 -1
  53. package/dist/auth/oauth-openai.d.ts +0 -46
  54. package/dist/auth/oauth-openai.d.ts.map +0 -1
  55. package/dist/auth/oauth-openai.js +0 -264
  56. package/dist/auth/oauth-openai.js.map +0 -1
  57. package/dist/auth/pkce.d.ts +0 -14
  58. package/dist/auth/pkce.d.ts.map +0 -1
  59. package/dist/auth/pkce.js +0 -35
  60. package/dist/auth/pkce.js.map +0 -1
  61. package/dist/auth/storage.d.ts +0 -52
  62. package/dist/auth/storage.d.ts.map +0 -1
  63. package/dist/auth/storage.js +0 -230
  64. package/dist/auth/storage.js.map +0 -1
  65. package/dist/auth/types.d.ts +0 -76
  66. package/dist/auth/types.d.ts.map +0 -1
  67. package/dist/auth/types.js +0 -5
  68. package/dist/auth/types.js.map +0 -1
  69. package/dist/providers/index.d.ts +0 -8
  70. package/dist/providers/index.d.ts.map +0 -1
  71. package/dist/providers/index.js +0 -10
  72. package/dist/providers/index.js.map +0 -1
  73. package/dist/providers/registry.d.ts +0 -29
  74. package/dist/providers/registry.d.ts.map +0 -1
  75. package/dist/providers/registry.js +0 -162
  76. package/dist/providers/registry.js.map +0 -1
  77. package/dist/providers/router.d.ts +0 -40
  78. package/dist/providers/router.d.ts.map +0 -1
  79. package/dist/providers/router.js +0 -88
  80. package/dist/providers/router.js.map +0 -1
  81. package/dist/providers/types.d.ts +0 -92
  82. package/dist/providers/types.d.ts.map +0 -1
  83. package/dist/providers/types.js +0 -27
  84. 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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"}