oh-my-claude-sisyphus 3.0.11 → 3.1.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 (233) hide show
  1. package/README.md +23 -1
  2. package/agents/build-fixer-low.md +83 -0
  3. package/agents/build-fixer.md +160 -0
  4. package/agents/code-reviewer-low.md +82 -0
  5. package/agents/code-reviewer.md +115 -0
  6. package/agents/planner.md +83 -0
  7. package/agents/security-reviewer-low.md +83 -0
  8. package/agents/security-reviewer.md +186 -0
  9. package/agents/tdd-guide-low.md +81 -0
  10. package/agents/tdd-guide.md +165 -0
  11. package/commands/build-fix.md +55 -0
  12. package/commands/code-review.md +47 -0
  13. package/commands/ralph.md +9 -0
  14. package/commands/security-review.md +47 -0
  15. package/commands/tdd.md +54 -0
  16. package/dist/__tests__/hud-agents.test.js +13 -10
  17. package/dist/__tests__/hud-agents.test.js.map +1 -1
  18. package/dist/__tests__/installer.test.js +1 -1
  19. package/dist/cli/index.js +0 -0
  20. package/dist/hooks/bridge.d.ts.map +1 -1
  21. package/dist/hooks/bridge.js +15 -3
  22. package/dist/hooks/bridge.js.map +1 -1
  23. package/dist/hooks/keyword-detector/index.d.ts +1 -1
  24. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  25. package/dist/hooks/keyword-detector/index.js +2 -1
  26. package/dist/hooks/keyword-detector/index.js.map +1 -1
  27. package/dist/hooks/ralph-loop/index.d.ts +0 -20
  28. package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
  29. package/dist/hooks/ralph-loop/index.js +6 -40
  30. package/dist/hooks/ralph-loop/index.js.map +1 -1
  31. package/dist/hooks/ultrawork-state/index.d.ts +3 -1
  32. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -1
  33. package/dist/hooks/ultrawork-state/index.js +3 -2
  34. package/dist/hooks/ultrawork-state/index.js.map +1 -1
  35. package/dist/hud/elements/limits.d.ts +1 -1
  36. package/dist/hud/elements/limits.d.ts.map +1 -1
  37. package/dist/hud/elements/limits.js +35 -2
  38. package/dist/hud/elements/limits.js.map +1 -1
  39. package/dist/hud/elements/todos.d.ts +1 -1
  40. package/dist/hud/elements/todos.js +3 -3
  41. package/dist/hud/elements/todos.js.map +1 -1
  42. package/dist/hud/render.js +6 -6
  43. package/dist/hud/render.js.map +1 -1
  44. package/dist/hud/types.d.ts +4 -0
  45. package/dist/hud/types.d.ts.map +1 -1
  46. package/dist/hud/types.js.map +1 -1
  47. package/dist/hud/usage-api.d.ts.map +1 -1
  48. package/dist/hud/usage-api.js +32 -6
  49. package/dist/hud/usage-api.js.map +1 -1
  50. package/dist/installer/hooks.d.ts +5 -0
  51. package/dist/installer/hooks.d.ts.map +1 -1
  52. package/dist/installer/hooks.js +20 -0
  53. package/dist/installer/hooks.js.map +1 -1
  54. package/dist/installer/index.d.ts +1 -1
  55. package/dist/installer/index.js +2 -2
  56. package/dist/installer/index.js.map +1 -1
  57. package/docs/CLAUDE.md +13 -1
  58. package/package.json +1 -1
  59. package/skills/omc-setup/SKILL.md +95 -0
  60. package/skills/ralph/SKILL.md +9 -0
  61. package/skills/ultrawork/SKILL.md +9 -5
  62. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  63. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  64. package/dist/__tests__/learned-skills/config.test.js +0 -37
  65. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  66. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  67. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  68. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  69. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  70. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  71. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  72. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  73. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  74. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  75. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  76. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  77. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  78. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  79. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  80. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  81. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  82. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  83. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  84. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  85. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  86. package/dist/agents/document-writer.d.ts +0 -11
  87. package/dist/agents/document-writer.d.ts.map +0 -1
  88. package/dist/agents/document-writer.js +0 -209
  89. package/dist/agents/document-writer.js.map +0 -1
  90. package/dist/agents/frontend-engineer.d.ts +0 -11
  91. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  92. package/dist/agents/frontend-engineer.js +0 -115
  93. package/dist/agents/frontend-engineer.js.map +0 -1
  94. package/dist/agents/librarian.d.ts +0 -12
  95. package/dist/agents/librarian.d.ts.map +0 -1
  96. package/dist/agents/librarian.js +0 -103
  97. package/dist/agents/librarian.js.map +0 -1
  98. package/dist/agents/metis.d.ts +0 -12
  99. package/dist/agents/metis.d.ts.map +0 -1
  100. package/dist/agents/metis.js +0 -117
  101. package/dist/agents/metis.js.map +0 -1
  102. package/dist/agents/momus.d.ts +0 -12
  103. package/dist/agents/momus.d.ts.map +0 -1
  104. package/dist/agents/momus.js +0 -128
  105. package/dist/agents/momus.js.map +0 -1
  106. package/dist/agents/multimodal-looker.d.ts +0 -11
  107. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  108. package/dist/agents/multimodal-looker.js +0 -70
  109. package/dist/agents/multimodal-looker.js.map +0 -1
  110. package/dist/agents/oracle.d.ts +0 -13
  111. package/dist/agents/oracle.d.ts.map +0 -1
  112. package/dist/agents/oracle.js +0 -191
  113. package/dist/agents/oracle.js.map +0 -1
  114. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  115. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  116. package/dist/agents/orchestrator-sisyphus.js +0 -115
  117. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  118. package/dist/agents/prometheus.d.ts +0 -12
  119. package/dist/agents/prometheus.d.ts.map +0 -1
  120. package/dist/agents/prometheus.js +0 -195
  121. package/dist/agents/prometheus.js.map +0 -1
  122. package/dist/agents/sisyphus-junior.d.ts +0 -12
  123. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  124. package/dist/agents/sisyphus-junior.js +0 -93
  125. package/dist/agents/sisyphus-junior.js.map +0 -1
  126. package/dist/hooks/learned-skills/config.d.ts +0 -53
  127. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  128. package/dist/hooks/learned-skills/config.js +0 -103
  129. package/dist/hooks/learned-skills/config.js.map +0 -1
  130. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  131. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  132. package/dist/hooks/learned-skills/constants.js +0 -26
  133. package/dist/hooks/learned-skills/constants.js.map +0 -1
  134. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  135. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  136. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  137. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  138. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  139. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  140. package/dist/hooks/learned-skills/detector.js +0 -150
  141. package/dist/hooks/learned-skills/detector.js.map +0 -1
  142. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  143. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  144. package/dist/hooks/learned-skills/finder.js +0 -117
  145. package/dist/hooks/learned-skills/finder.js.map +0 -1
  146. package/dist/hooks/learned-skills/index.d.ts +0 -62
  147. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  148. package/dist/hooks/learned-skills/index.js +0 -137
  149. package/dist/hooks/learned-skills/index.js.map +0 -1
  150. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  151. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  152. package/dist/hooks/learned-skills/loader.js +0 -107
  153. package/dist/hooks/learned-skills/loader.js.map +0 -1
  154. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  155. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  156. package/dist/hooks/learned-skills/parser.js +0 -190
  157. package/dist/hooks/learned-skills/parser.js.map +0 -1
  158. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  159. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  160. package/dist/hooks/learned-skills/promotion.js +0 -87
  161. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  162. package/dist/hooks/learned-skills/types.d.ts +0 -109
  163. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  164. package/dist/hooks/learned-skills/types.js +0 -8
  165. package/dist/hooks/learned-skills/types.js.map +0 -1
  166. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  167. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  168. package/dist/hooks/learned-skills/validator.js +0 -87
  169. package/dist/hooks/learned-skills/validator.js.map +0 -1
  170. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  171. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  172. package/dist/hooks/learned-skills/writer.js +0 -126
  173. package/dist/hooks/learned-skills/writer.js.map +0 -1
  174. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  175. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  176. package/dist/hooks/mnemosyne/config.js +0 -103
  177. package/dist/hooks/mnemosyne/config.js.map +0 -1
  178. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  179. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  180. package/dist/hooks/mnemosyne/constants.js +0 -26
  181. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  182. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  183. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  184. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  185. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  186. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  187. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  188. package/dist/hooks/mnemosyne/detector.js +0 -150
  189. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  190. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  191. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  192. package/dist/hooks/mnemosyne/finder.js +0 -117
  193. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  194. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  195. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  196. package/dist/hooks/mnemosyne/index.js +0 -137
  197. package/dist/hooks/mnemosyne/index.js.map +0 -1
  198. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  199. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  200. package/dist/hooks/mnemosyne/loader.js +0 -113
  201. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  202. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  203. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  204. package/dist/hooks/mnemosyne/parser.js +0 -190
  205. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  206. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  207. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  208. package/dist/hooks/mnemosyne/promotion.js +0 -87
  209. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  210. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  211. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  212. package/dist/hooks/mnemosyne/types.js +0 -8
  213. package/dist/hooks/mnemosyne/types.js.map +0 -1
  214. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  215. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  216. package/dist/hooks/mnemosyne/validator.js +0 -87
  217. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  218. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  219. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  220. package/dist/hooks/mnemosyne/writer.js +0 -126
  221. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  222. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  223. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  224. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  225. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  226. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  227. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  228. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  229. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  230. package/dist/hud/sisyphus-state.d.ts +0 -31
  231. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  232. package/dist/hud/sisyphus-state.js +0 -163
  233. package/dist/hud/sisyphus-state.js.map +0 -1
@@ -1,309 +0,0 @@
1
- /**
2
- * Sisyphus Orchestrator Hook
3
- *
4
- * Enforces orchestrator behavior - delegation over direct implementation.
5
- * When an orchestrator agent tries to directly modify files outside .sisyphus/,
6
- * this hook injects reminders to delegate to subagents instead.
7
- *
8
- * Adapted from oh-my-opencode's sisyphus-orchestrator hook for shell-based hooks.
9
- */
10
- import { execSync } from 'child_process';
11
- import { HOOK_NAME, ALLOWED_PATH_PREFIX, WRITE_EDIT_TOOLS, DIRECT_WORK_REMINDER, ORCHESTRATOR_DELEGATION_REQUIRED, BOULDER_CONTINUATION_PROMPT, VERIFICATION_REMINDER, SINGLE_TASK_DIRECTIVE, } from './constants.js';
12
- import { readBoulderState, getPlanProgress, } from '../../features/boulder-state/index.js';
13
- import { addWorkingMemoryEntry, setPriorityContext, } from '../notepad/index.js';
14
- // Re-export constants
15
- export * from './constants.js';
16
- /**
17
- * Check if a file path is allowed for direct orchestrator modification
18
- */
19
- export function isAllowedPath(filePath) {
20
- if (!filePath)
21
- return true;
22
- return filePath.includes(ALLOWED_PATH_PREFIX);
23
- }
24
- /**
25
- * Check if a tool is a write/edit tool
26
- */
27
- export function isWriteEditTool(toolName) {
28
- return WRITE_EDIT_TOOLS.includes(toolName);
29
- }
30
- /**
31
- * Get git diff statistics for the working directory
32
- */
33
- export function getGitDiffStats(directory) {
34
- try {
35
- const output = execSync('git diff --numstat HEAD', {
36
- cwd: directory,
37
- encoding: 'utf-8',
38
- timeout: 5000,
39
- }).trim();
40
- if (!output)
41
- return [];
42
- const statusOutput = execSync('git status --porcelain', {
43
- cwd: directory,
44
- encoding: 'utf-8',
45
- timeout: 5000,
46
- }).trim();
47
- const statusMap = new Map();
48
- for (const line of statusOutput.split('\n')) {
49
- if (!line)
50
- continue;
51
- const status = line.substring(0, 2).trim();
52
- const filePath = line.substring(3);
53
- if (status === 'A' || status === '??') {
54
- statusMap.set(filePath, 'added');
55
- }
56
- else if (status === 'D') {
57
- statusMap.set(filePath, 'deleted');
58
- }
59
- else {
60
- statusMap.set(filePath, 'modified');
61
- }
62
- }
63
- const stats = [];
64
- for (const line of output.split('\n')) {
65
- const parts = line.split('\t');
66
- if (parts.length < 3)
67
- continue;
68
- const [addedStr, removedStr, path] = parts;
69
- const added = addedStr === '-' ? 0 : parseInt(addedStr, 10);
70
- const removed = removedStr === '-' ? 0 : parseInt(removedStr, 10);
71
- stats.push({
72
- path,
73
- added,
74
- removed,
75
- status: statusMap.get(path) ?? 'modified',
76
- });
77
- }
78
- return stats;
79
- }
80
- catch {
81
- return [];
82
- }
83
- }
84
- /**
85
- * Format file changes for display
86
- */
87
- export function formatFileChanges(stats) {
88
- if (stats.length === 0)
89
- return '[FILE CHANGES SUMMARY]\nNo file changes detected.\n';
90
- const modified = stats.filter((s) => s.status === 'modified');
91
- const added = stats.filter((s) => s.status === 'added');
92
- const deleted = stats.filter((s) => s.status === 'deleted');
93
- const lines = ['[FILE CHANGES SUMMARY]'];
94
- if (modified.length > 0) {
95
- lines.push('Modified files:');
96
- for (const f of modified) {
97
- lines.push(` ${f.path} (+${f.added}, -${f.removed})`);
98
- }
99
- lines.push('');
100
- }
101
- if (added.length > 0) {
102
- lines.push('Created files:');
103
- for (const f of added) {
104
- lines.push(` ${f.path} (+${f.added})`);
105
- }
106
- lines.push('');
107
- }
108
- if (deleted.length > 0) {
109
- lines.push('Deleted files:');
110
- for (const f of deleted) {
111
- lines.push(` ${f.path} (-${f.removed})`);
112
- }
113
- lines.push('');
114
- }
115
- return lines.join('\n');
116
- }
117
- /**
118
- * Build verification reminder with session context
119
- */
120
- export function buildVerificationReminder(sessionId) {
121
- let reminder = VERIFICATION_REMINDER;
122
- if (sessionId) {
123
- reminder += `
124
-
125
- ---
126
-
127
- **If ANY verification fails, resume the subagent with the fix:**
128
- Task tool with resume="${sessionId}", prompt="fix: [describe the specific failure]"`;
129
- }
130
- return reminder;
131
- }
132
- /**
133
- * Build orchestrator reminder with plan progress
134
- */
135
- export function buildOrchestratorReminder(planName, progress, sessionId) {
136
- const remaining = progress.total - progress.completed;
137
- return `
138
- ---
139
-
140
- **State:** Plan: ${planName} | ${progress.completed}/${progress.total} done, ${remaining} left
141
-
142
- ---
143
-
144
- ${buildVerificationReminder(sessionId)}
145
-
146
- ALL pass? → commit atomic unit, mark \`[x]\`, next task.`;
147
- }
148
- /**
149
- * Build boulder continuation message
150
- */
151
- export function buildBoulderContinuation(planName, remaining, total) {
152
- return BOULDER_CONTINUATION_PROMPT.replace(/{PLAN_NAME}/g, planName) +
153
- `\n\n[Status: ${total - remaining}/${total} completed, ${remaining} remaining]`;
154
- }
155
- /**
156
- * Detect and process <remember> tags from agent output
157
- * <remember>content</remember> -> Working Memory
158
- * <remember priority>content</remember> -> Priority Context
159
- */
160
- function processRememberTags(output, directory) {
161
- // Match priority remember tags
162
- const priorityMatches = output.matchAll(/<remember\s+priority>([\s\S]*?)<\/remember>/gi);
163
- for (const match of priorityMatches) {
164
- const content = match[1].trim();
165
- if (content) {
166
- setPriorityContext(directory, content);
167
- }
168
- }
169
- // Match regular remember tags
170
- const regularMatches = output.matchAll(/<remember>([\s\S]*?)<\/remember>/gi);
171
- for (const match of regularMatches) {
172
- const content = match[1].trim();
173
- if (content) {
174
- addWorkingMemoryEntry(directory, content);
175
- }
176
- }
177
- }
178
- /**
179
- * Process pre-tool-use hook for orchestrator
180
- * Returns warning message if orchestrator tries to modify non-allowed paths
181
- */
182
- export function processOrchestratorPreTool(input) {
183
- const { toolName, toolInput } = input;
184
- // Only check write/edit tools
185
- if (!isWriteEditTool(toolName)) {
186
- return { continue: true };
187
- }
188
- // Extract file path from tool input
189
- const filePath = (toolInput?.filePath ?? toolInput?.path ?? toolInput?.file);
190
- // Allow if path is in allowed prefix
191
- if (!filePath || isAllowedPath(filePath)) {
192
- return { continue: true };
193
- }
194
- // Inject warning for non-allowed path modifications
195
- const warning = ORCHESTRATOR_DELEGATION_REQUIRED.replace('$FILE_PATH', filePath);
196
- return {
197
- continue: true,
198
- message: warning,
199
- };
200
- }
201
- /**
202
- * Process post-tool-use hook for orchestrator
203
- * Adds reminders after file modifications and Task delegations
204
- */
205
- export function processOrchestratorPostTool(input, output) {
206
- const { toolName, toolInput, directory } = input;
207
- const workDir = directory || process.cwd();
208
- // Handle write/edit tools
209
- if (isWriteEditTool(toolName)) {
210
- const filePath = (toolInput?.filePath ?? toolInput?.path ?? toolInput?.file);
211
- if (filePath && !isAllowedPath(filePath)) {
212
- return {
213
- continue: true,
214
- modifiedOutput: output + DIRECT_WORK_REMINDER,
215
- };
216
- }
217
- }
218
- // Handle Task tool completion
219
- if (toolName === 'Task' || toolName === 'task') {
220
- // Check for background task launch
221
- const isBackgroundLaunch = output.includes('Background task launched') || output.includes('Background task resumed');
222
- if (isBackgroundLaunch) {
223
- return { continue: true };
224
- }
225
- // Process <remember> tags from agent output
226
- processRememberTags(output, workDir);
227
- // Get git stats and build enhanced output
228
- const gitStats = getGitDiffStats(workDir);
229
- const fileChanges = formatFileChanges(gitStats);
230
- // Check for boulder state
231
- const boulderState = readBoulderState(workDir);
232
- if (boulderState) {
233
- const progress = getPlanProgress(boulderState.active_plan);
234
- const enhancedOutput = `
235
- ## SUBAGENT WORK COMPLETED
236
-
237
- ${fileChanges}
238
- <system-reminder>
239
- ${buildOrchestratorReminder(boulderState.plan_name, progress)}
240
- </system-reminder>`;
241
- return {
242
- continue: true,
243
- modifiedOutput: enhancedOutput,
244
- };
245
- }
246
- // No boulder state - add standalone verification reminder
247
- return {
248
- continue: true,
249
- modifiedOutput: output + `\n<system-reminder>\n${buildVerificationReminder()}\n</system-reminder>`,
250
- };
251
- }
252
- return { continue: true };
253
- }
254
- /**
255
- * Check if boulder has incomplete tasks and build continuation prompt
256
- */
257
- export function checkBoulderContinuation(directory) {
258
- const boulderState = readBoulderState(directory);
259
- if (!boulderState) {
260
- return { shouldContinue: false };
261
- }
262
- const progress = getPlanProgress(boulderState.active_plan);
263
- if (progress.isComplete) {
264
- return { shouldContinue: false };
265
- }
266
- const remaining = progress.total - progress.completed;
267
- return {
268
- shouldContinue: true,
269
- message: buildBoulderContinuation(boulderState.plan_name, remaining, progress.total),
270
- };
271
- }
272
- /**
273
- * Create sisyphus orchestrator hook handlers
274
- */
275
- export function createSisyphusOrchestratorHook(directory) {
276
- return {
277
- /**
278
- * Hook name identifier
279
- */
280
- name: HOOK_NAME,
281
- /**
282
- * Pre-tool execution handler
283
- */
284
- preTool: (toolName, toolInput) => {
285
- return processOrchestratorPreTool({
286
- toolName,
287
- toolInput,
288
- directory,
289
- });
290
- },
291
- /**
292
- * Post-tool execution handler
293
- */
294
- postTool: (toolName, toolInput, output) => {
295
- return processOrchestratorPostTool({ toolName, toolInput, directory }, output);
296
- },
297
- /**
298
- * Check for boulder continuation on session idle
299
- */
300
- checkContinuation: () => {
301
- return checkBoulderContinuation(directory);
302
- },
303
- /**
304
- * Get single task directive for subagent prompts
305
- */
306
- getSingleTaskDirective: () => SINGLE_TASK_DIRECTIVE,
307
- };
308
- }
309
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/sisyphus-orchestrator/index.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Sisyphus HUD - State Readers
3
- *
4
- * Read ralph, ultrawork, and PRD state from existing Sisyphus files.
5
- * These are read-only functions that don't modify the state files.
6
- */
7
- import type { RalphStateForHud, UltraworkStateForHud, PrdStateForHud } from './types.js';
8
- /**
9
- * Read Ralph Loop state for HUD display.
10
- * Returns null if no state file exists or on error.
11
- */
12
- export declare function readRalphStateForHud(directory: string): RalphStateForHud | null;
13
- /**
14
- * Read Ultrawork state for HUD display.
15
- * Checks both local .sisyphus and global ~/.claude locations.
16
- */
17
- export declare function readUltraworkStateForHud(directory: string): UltraworkStateForHud | null;
18
- /**
19
- * Read PRD state for HUD display.
20
- * Checks both root prd.json and .sisyphus/prd.json.
21
- */
22
- export declare function readPrdStateForHud(directory: string): PrdStateForHud | null;
23
- /**
24
- * Check if any Sisyphus mode is currently active
25
- */
26
- export declare function isAnyModeActive(directory: string): boolean;
27
- /**
28
- * Get active skill names for display
29
- */
30
- export declare function getActiveSkills(directory: string): string[];
31
- //# sourceMappingURL=sisyphus-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sisyphus-state.d.ts","sourceRoot":"","sources":["../../src/hud/sisyphus-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACf,MAAM,YAAY,CAAC;AAiCpB;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA8B/E;AAWD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAwC7B;AAgBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAsC3E;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3D"}
@@ -1,163 +0,0 @@
1
- /**
2
- * Sisyphus HUD - State Readers
3
- *
4
- * Read ralph, ultrawork, and PRD state from existing Sisyphus files.
5
- * These are read-only functions that don't modify the state files.
6
- */
7
- import { existsSync, readFileSync, statSync } from 'fs';
8
- import { join } from 'path';
9
- /**
10
- * Maximum age for state files to be considered "active".
11
- * Files older than this are treated as stale/abandoned.
12
- */
13
- const MAX_STATE_AGE_MS = 2 * 60 * 60 * 1000; // 2 hours
14
- /**
15
- * Check if a state file is stale based on file modification time.
16
- */
17
- function isStateFileStale(filePath) {
18
- try {
19
- const stat = statSync(filePath);
20
- const age = Date.now() - stat.mtimeMs;
21
- return age > MAX_STATE_AGE_MS;
22
- }
23
- catch {
24
- return true; // Treat errors as stale
25
- }
26
- }
27
- /**
28
- * Read Ralph Loop state for HUD display.
29
- * Returns null if no state file exists or on error.
30
- */
31
- export function readRalphStateForHud(directory) {
32
- const stateFile = join(directory, '.sisyphus', 'ralph-state.json');
33
- if (!existsSync(stateFile)) {
34
- return null;
35
- }
36
- // Check for stale state file (abandoned session)
37
- if (isStateFileStale(stateFile)) {
38
- return null;
39
- }
40
- try {
41
- const content = readFileSync(stateFile, 'utf-8');
42
- const state = JSON.parse(content);
43
- if (!state.active) {
44
- return null;
45
- }
46
- return {
47
- active: state.active,
48
- iteration: state.iteration,
49
- maxIterations: state.max_iterations,
50
- prdMode: state.prd_mode,
51
- currentStoryId: state.current_story_id,
52
- };
53
- }
54
- catch {
55
- return null;
56
- }
57
- }
58
- /**
59
- * Read Ultrawork state for HUD display.
60
- * Checks both local .sisyphus and global ~/.claude locations.
61
- */
62
- export function readUltraworkStateForHud(directory) {
63
- // Check local state first
64
- const localFile = join(directory, '.sisyphus', 'ultrawork-state.json');
65
- let state = null;
66
- let stateFile = null;
67
- if (existsSync(localFile) && !isStateFileStale(localFile)) {
68
- try {
69
- const content = readFileSync(localFile, 'utf-8');
70
- state = JSON.parse(content);
71
- stateFile = localFile;
72
- }
73
- catch {
74
- // Try global
75
- }
76
- }
77
- // Check global state if local not found or stale
78
- if (!state) {
79
- const homeDir = process.env.HOME || process.env.USERPROFILE || '';
80
- const globalFile = join(homeDir, '.claude', 'ultrawork-state.json');
81
- if (existsSync(globalFile) && !isStateFileStale(globalFile)) {
82
- try {
83
- const content = readFileSync(globalFile, 'utf-8');
84
- state = JSON.parse(content);
85
- stateFile = globalFile;
86
- }
87
- catch {
88
- return null;
89
- }
90
- }
91
- }
92
- if (!state || !state.active) {
93
- return null;
94
- }
95
- return {
96
- active: state.active,
97
- reinforcementCount: state.reinforcement_count,
98
- };
99
- }
100
- /**
101
- * Read PRD state for HUD display.
102
- * Checks both root prd.json and .sisyphus/prd.json.
103
- */
104
- export function readPrdStateForHud(directory) {
105
- // Check root first
106
- let prdPath = join(directory, 'prd.json');
107
- if (!existsSync(prdPath)) {
108
- // Check .sisyphus
109
- prdPath = join(directory, '.sisyphus', 'prd.json');
110
- if (!existsSync(prdPath)) {
111
- return null;
112
- }
113
- }
114
- try {
115
- const content = readFileSync(prdPath, 'utf-8');
116
- const prd = JSON.parse(content);
117
- if (!prd.userStories || !Array.isArray(prd.userStories)) {
118
- return null;
119
- }
120
- const stories = prd.userStories;
121
- const completed = stories.filter((s) => s.passes).length;
122
- const total = stories.length;
123
- // Find current story (first incomplete, sorted by priority)
124
- const incomplete = stories
125
- .filter((s) => !s.passes)
126
- .sort((a, b) => a.priority - b.priority);
127
- return {
128
- currentStoryId: incomplete[0]?.id || null,
129
- completed,
130
- total,
131
- };
132
- }
133
- catch {
134
- return null;
135
- }
136
- }
137
- // ============================================================================
138
- // Combined State Check
139
- // ============================================================================
140
- /**
141
- * Check if any Sisyphus mode is currently active
142
- */
143
- export function isAnyModeActive(directory) {
144
- const ralph = readRalphStateForHud(directory);
145
- const ultrawork = readUltraworkStateForHud(directory);
146
- return (ralph?.active ?? false) || (ultrawork?.active ?? false);
147
- }
148
- /**
149
- * Get active skill names for display
150
- */
151
- export function getActiveSkills(directory) {
152
- const skills = [];
153
- const ralph = readRalphStateForHud(directory);
154
- if (ralph?.active) {
155
- skills.push('ralph');
156
- }
157
- const ultrawork = readUltraworkStateForHud(directory);
158
- if (ultrawork?.active) {
159
- skills.push('ultrawork');
160
- }
161
- return skills;
162
- }
163
- //# sourceMappingURL=sisyphus-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sisyphus-state.js","sourceRoot":"","sources":["../../src/hud/sisyphus-state.ts"],"names":[],"mappings":"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"}