oh-my-claude-sisyphus 2.6.1 → 3.0.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 (548) hide show
  1. package/README.md +59 -785
  2. package/agents/analyst.md +85 -0
  3. package/agents/architect-low.md +88 -0
  4. package/agents/architect-medium.md +108 -0
  5. package/agents/architect.md +77 -0
  6. package/agents/critic.md +97 -0
  7. package/agents/designer-high.md +113 -0
  8. package/agents/designer-low.md +89 -0
  9. package/agents/designer.md +80 -0
  10. package/agents/executor-high.md +116 -0
  11. package/agents/executor-low.md +94 -0
  12. package/agents/executor.md +62 -0
  13. package/agents/explore-medium.md +113 -0
  14. package/agents/explore.md +86 -0
  15. package/agents/planner.md +164 -0
  16. package/agents/qa-tester.md +109 -0
  17. package/agents/researcher-low.md +84 -0
  18. package/agents/researcher.md +70 -0
  19. package/agents/vision.md +39 -0
  20. package/agents/writer.md +152 -0
  21. package/commands/.gitkeep +0 -0
  22. package/dist/__tests__/hooks.test.js +22 -22
  23. package/dist/__tests__/hooks.test.js.map +1 -1
  24. package/dist/__tests__/hud-agents.test.d.ts +7 -0
  25. package/dist/__tests__/hud-agents.test.d.ts.map +1 -0
  26. package/dist/__tests__/hud-agents.test.js +363 -0
  27. package/dist/__tests__/hud-agents.test.js.map +1 -0
  28. package/dist/__tests__/installer.test.js +184 -116
  29. package/dist/__tests__/installer.test.js.map +1 -1
  30. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  31. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  32. package/dist/__tests__/learned-skills/config.test.js +37 -0
  33. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  34. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  35. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  36. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  37. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  38. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  39. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  40. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  41. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  42. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  43. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  44. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  45. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  46. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  47. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  48. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  49. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  50. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  51. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  52. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  53. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  54. package/dist/__tests__/mnemosyne/config.test.d.ts +2 -0
  55. package/dist/__tests__/mnemosyne/config.test.d.ts.map +1 -0
  56. package/dist/__tests__/mnemosyne/config.test.js +37 -0
  57. package/dist/__tests__/mnemosyne/config.test.js.map +1 -0
  58. package/dist/__tests__/mnemosyne/detector.test.d.ts +2 -0
  59. package/dist/__tests__/mnemosyne/detector.test.d.ts.map +1 -0
  60. package/dist/__tests__/mnemosyne/detector.test.js +99 -0
  61. package/dist/__tests__/mnemosyne/detector.test.js.map +1 -0
  62. package/dist/__tests__/mnemosyne/finder.test.d.ts +2 -0
  63. package/dist/__tests__/mnemosyne/finder.test.d.ts.map +1 -0
  64. package/dist/__tests__/mnemosyne/finder.test.js +61 -0
  65. package/dist/__tests__/mnemosyne/finder.test.js.map +1 -0
  66. package/dist/__tests__/mnemosyne/loader.test.d.ts +2 -0
  67. package/dist/__tests__/mnemosyne/loader.test.d.ts.map +1 -0
  68. package/dist/__tests__/mnemosyne/loader.test.js +73 -0
  69. package/dist/__tests__/mnemosyne/loader.test.js.map +1 -0
  70. package/dist/__tests__/mnemosyne/parser.test.d.ts +2 -0
  71. package/dist/__tests__/mnemosyne/parser.test.d.ts.map +1 -0
  72. package/dist/__tests__/mnemosyne/parser.test.js +81 -0
  73. package/dist/__tests__/mnemosyne/parser.test.js.map +1 -0
  74. package/dist/__tests__/mnemosyne/validator.test.d.ts +2 -0
  75. package/dist/__tests__/mnemosyne/validator.test.d.ts.map +1 -0
  76. package/dist/__tests__/mnemosyne/validator.test.js +85 -0
  77. package/dist/__tests__/mnemosyne/validator.test.js.map +1 -0
  78. package/dist/__tests__/model-routing.test.js +34 -34
  79. package/dist/__tests__/model-routing.test.js.map +1 -1
  80. package/dist/__tests__/notepad.test.js +7 -7
  81. package/dist/__tests__/notepad.test.js.map +1 -1
  82. package/dist/__tests__/ralph-prd.test.js +12 -12
  83. package/dist/__tests__/ralph-prd.test.js.map +1 -1
  84. package/dist/__tests__/ralph-progress.test.js +12 -12
  85. package/dist/__tests__/ralph-progress.test.js.map +1 -1
  86. package/dist/__tests__/skills.test.js +50 -17
  87. package/dist/__tests__/skills.test.js.map +1 -1
  88. package/dist/__tests__/types.test.js +5 -5
  89. package/dist/__tests__/types.test.js.map +1 -1
  90. package/dist/agents/analyst.d.ts +11 -0
  91. package/dist/agents/analyst.d.ts.map +1 -0
  92. package/dist/agents/analyst.js +115 -0
  93. package/dist/agents/analyst.js.map +1 -0
  94. package/dist/agents/architect.d.ts +12 -0
  95. package/dist/agents/architect.d.ts.map +1 -0
  96. package/dist/agents/architect.js +189 -0
  97. package/dist/agents/architect.js.map +1 -0
  98. package/dist/agents/coordinator.d.ts +11 -0
  99. package/dist/agents/coordinator.d.ts.map +1 -0
  100. package/dist/agents/coordinator.js +115 -0
  101. package/dist/agents/coordinator.js.map +1 -0
  102. package/dist/agents/critic.d.ts +11 -0
  103. package/dist/agents/critic.d.ts.map +1 -0
  104. package/dist/agents/critic.js +127 -0
  105. package/dist/agents/critic.js.map +1 -0
  106. package/dist/agents/definitions.d.ts +33 -70
  107. package/dist/agents/definitions.d.ts.map +1 -1
  108. package/dist/agents/definitions.js +140 -1268
  109. package/dist/agents/definitions.js.map +1 -1
  110. package/dist/agents/designer.d.ts +11 -0
  111. package/dist/agents/designer.d.ts.map +1 -0
  112. package/dist/agents/designer.js +115 -0
  113. package/dist/agents/designer.js.map +1 -0
  114. package/dist/agents/executor.d.ts +12 -0
  115. package/dist/agents/executor.d.ts.map +1 -0
  116. package/dist/agents/executor.js +93 -0
  117. package/dist/agents/executor.js.map +1 -0
  118. package/dist/agents/explore.js +4 -4
  119. package/dist/agents/explore.js.map +1 -1
  120. package/dist/agents/index.d.ts +12 -11
  121. package/dist/agents/index.d.ts.map +1 -1
  122. package/dist/agents/index.js +15 -16
  123. package/dist/agents/index.js.map +1 -1
  124. package/dist/agents/planner.d.ts +11 -0
  125. package/dist/agents/planner.d.ts.map +1 -0
  126. package/dist/agents/planner.js +194 -0
  127. package/dist/agents/planner.js.map +1 -0
  128. package/dist/agents/qa-tester.js +16 -16
  129. package/dist/agents/qa-tester.js.map +1 -1
  130. package/dist/agents/researcher.d.ts +12 -0
  131. package/dist/agents/researcher.d.ts.map +1 -0
  132. package/dist/agents/researcher.js +103 -0
  133. package/dist/agents/researcher.js.map +1 -0
  134. package/dist/agents/vision.d.ts +11 -0
  135. package/dist/agents/vision.d.ts.map +1 -0
  136. package/dist/agents/vision.js +70 -0
  137. package/dist/agents/vision.js.map +1 -0
  138. package/dist/agents/writer.d.ts +11 -0
  139. package/dist/agents/writer.d.ts.map +1 -0
  140. package/dist/agents/writer.js +209 -0
  141. package/dist/agents/writer.js.map +1 -0
  142. package/dist/cli/index.js +32 -32
  143. package/dist/cli/index.js.map +1 -1
  144. package/dist/commands/index.d.ts +4 -4
  145. package/dist/commands/index.js +4 -4
  146. package/dist/config/loader.js +25 -25
  147. package/dist/config/loader.js.map +1 -1
  148. package/dist/features/auto-update.d.ts +5 -5
  149. package/dist/features/auto-update.d.ts.map +1 -1
  150. package/dist/features/auto-update.js +17 -17
  151. package/dist/features/auto-update.js.map +1 -1
  152. package/dist/features/background-agent/manager.js +1 -1
  153. package/dist/features/background-agent/manager.js.map +1 -1
  154. package/dist/features/boulder-state/constants.d.ts +5 -5
  155. package/dist/features/boulder-state/constants.d.ts.map +1 -1
  156. package/dist/features/boulder-state/constants.js +3 -3
  157. package/dist/features/boulder-state/constants.js.map +1 -1
  158. package/dist/features/boulder-state/index.d.ts +2 -2
  159. package/dist/features/boulder-state/index.d.ts.map +1 -1
  160. package/dist/features/boulder-state/index.js +2 -2
  161. package/dist/features/boulder-state/index.js.map +1 -1
  162. package/dist/features/boulder-state/storage.d.ts +3 -3
  163. package/dist/features/boulder-state/storage.d.ts.map +1 -1
  164. package/dist/features/boulder-state/storage.js +6 -6
  165. package/dist/features/boulder-state/storage.js.map +1 -1
  166. package/dist/features/builtin-skills/skills.d.ts +15 -1
  167. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  168. package/dist/features/builtin-skills/skills.js +100 -1110
  169. package/dist/features/builtin-skills/skills.js.map +1 -1
  170. package/dist/features/context-injector/types.d.ts +1 -1
  171. package/dist/features/context-injector/types.d.ts.map +1 -1
  172. package/dist/features/index.d.ts +1 -1
  173. package/dist/features/index.d.ts.map +1 -1
  174. package/dist/features/index.js +2 -2
  175. package/dist/features/index.js.map +1 -1
  176. package/dist/features/magic-keywords.js +14 -14
  177. package/dist/features/magic-keywords.js.map +1 -1
  178. package/dist/features/model-routing/prompts/opus.d.ts +1 -1
  179. package/dist/features/model-routing/prompts/opus.d.ts.map +1 -1
  180. package/dist/features/model-routing/prompts/opus.js +1 -1
  181. package/dist/features/model-routing/router.d.ts +1 -1
  182. package/dist/features/model-routing/router.js +14 -14
  183. package/dist/features/model-routing/router.js.map +1 -1
  184. package/dist/features/model-routing/rules.js +31 -31
  185. package/dist/features/model-routing/rules.js.map +1 -1
  186. package/dist/features/model-routing/types.js +1 -1
  187. package/dist/features/model-routing/types.js.map +1 -1
  188. package/dist/hooks/agent-usage-reminder/constants.d.ts +2 -2
  189. package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -1
  190. package/dist/hooks/agent-usage-reminder/constants.js +5 -5
  191. package/dist/hooks/agent-usage-reminder/constants.js.map +1 -1
  192. package/dist/hooks/auto-slash-command/constants.d.ts +1 -1
  193. package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -1
  194. package/dist/hooks/auto-slash-command/constants.js +9 -2
  195. package/dist/hooks/auto-slash-command/constants.js.map +1 -1
  196. package/dist/hooks/bridge.d.ts +2 -2
  197. package/dist/hooks/bridge.d.ts.map +1 -1
  198. package/dist/hooks/bridge.js +50 -18
  199. package/dist/hooks/bridge.js.map +1 -1
  200. package/dist/hooks/directory-readme-injector/constants.d.ts +1 -1
  201. package/dist/hooks/directory-readme-injector/constants.d.ts.map +1 -1
  202. package/dist/hooks/directory-readme-injector/constants.js +2 -2
  203. package/dist/hooks/directory-readme-injector/constants.js.map +1 -1
  204. package/dist/hooks/index.d.ts +3 -2
  205. package/dist/hooks/index.d.ts.map +1 -1
  206. package/dist/hooks/index.js +9 -4
  207. package/dist/hooks/index.js.map +1 -1
  208. package/dist/hooks/learned-skills/config.d.ts +53 -0
  209. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  210. package/dist/hooks/learned-skills/config.js +103 -0
  211. package/dist/hooks/learned-skills/config.js.map +1 -0
  212. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  213. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  214. package/dist/hooks/learned-skills/constants.js +26 -0
  215. package/dist/hooks/learned-skills/constants.js.map +1 -0
  216. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  217. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  218. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  219. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  220. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  221. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  222. package/dist/hooks/learned-skills/detector.js +150 -0
  223. package/dist/hooks/learned-skills/detector.js.map +1 -0
  224. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  225. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  226. package/dist/hooks/learned-skills/finder.js +117 -0
  227. package/dist/hooks/learned-skills/finder.js.map +1 -0
  228. package/dist/hooks/learned-skills/index.d.ts +62 -0
  229. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  230. package/dist/hooks/learned-skills/index.js +137 -0
  231. package/dist/hooks/learned-skills/index.js.map +1 -0
  232. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  233. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  234. package/dist/hooks/learned-skills/loader.js +107 -0
  235. package/dist/hooks/learned-skills/loader.js.map +1 -0
  236. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  237. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  238. package/dist/hooks/learned-skills/parser.js +190 -0
  239. package/dist/hooks/learned-skills/parser.js.map +1 -0
  240. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  241. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  242. package/dist/hooks/learned-skills/promotion.js +87 -0
  243. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  244. package/dist/hooks/learned-skills/types.d.ts +109 -0
  245. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  246. package/dist/hooks/learned-skills/types.js +8 -0
  247. package/dist/hooks/learned-skills/types.js.map +1 -0
  248. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  249. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  250. package/dist/hooks/learned-skills/validator.js +87 -0
  251. package/dist/hooks/learned-skills/validator.js.map +1 -0
  252. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  253. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  254. package/dist/hooks/learned-skills/writer.js +126 -0
  255. package/dist/hooks/learned-skills/writer.js.map +1 -0
  256. package/dist/hooks/learner/config.d.ts +53 -0
  257. package/dist/hooks/learner/config.d.ts.map +1 -0
  258. package/dist/hooks/learner/config.js +103 -0
  259. package/dist/hooks/learner/config.js.map +1 -0
  260. package/dist/hooks/learner/constants.d.ts +24 -0
  261. package/dist/hooks/learner/constants.d.ts.map +1 -0
  262. package/dist/hooks/learner/constants.js +26 -0
  263. package/dist/hooks/learner/constants.js.map +1 -0
  264. package/dist/hooks/learner/detection-hook.d.ts +39 -0
  265. package/dist/hooks/learner/detection-hook.d.ts.map +1 -0
  266. package/dist/hooks/learner/detection-hook.js +83 -0
  267. package/dist/hooks/learner/detection-hook.js.map +1 -0
  268. package/dist/hooks/learner/detector.d.ts +30 -0
  269. package/dist/hooks/learner/detector.d.ts.map +1 -0
  270. package/dist/hooks/learner/detector.js +150 -0
  271. package/dist/hooks/learner/detector.js.map +1 -0
  272. package/dist/hooks/learner/finder.d.ts +21 -0
  273. package/dist/hooks/learner/finder.d.ts.map +1 -0
  274. package/dist/hooks/learner/finder.js +117 -0
  275. package/dist/hooks/learner/finder.js.map +1 -0
  276. package/dist/hooks/learner/index.d.ts +62 -0
  277. package/dist/hooks/learner/index.d.ts.map +1 -0
  278. package/dist/hooks/learner/index.js +137 -0
  279. package/dist/hooks/learner/index.js.map +1 -0
  280. package/dist/hooks/learner/loader.d.ts +20 -0
  281. package/dist/hooks/learner/loader.d.ts.map +1 -0
  282. package/dist/hooks/learner/loader.js +113 -0
  283. package/dist/hooks/learner/loader.js.map +1 -0
  284. package/dist/hooks/learner/parser.d.ts +21 -0
  285. package/dist/hooks/learner/parser.d.ts.map +1 -0
  286. package/dist/hooks/learner/parser.js +190 -0
  287. package/dist/hooks/learner/parser.js.map +1 -0
  288. package/dist/hooks/learner/promotion.d.ts +29 -0
  289. package/dist/hooks/learner/promotion.d.ts.map +1 -0
  290. package/dist/hooks/learner/promotion.js +87 -0
  291. package/dist/hooks/learner/promotion.js.map +1 -0
  292. package/dist/hooks/learner/types.d.ts +109 -0
  293. package/dist/hooks/learner/types.d.ts.map +1 -0
  294. package/dist/hooks/learner/types.js +8 -0
  295. package/dist/hooks/learner/types.js.map +1 -0
  296. package/dist/hooks/learner/validator.d.ts +15 -0
  297. package/dist/hooks/learner/validator.d.ts.map +1 -0
  298. package/dist/hooks/learner/validator.js +87 -0
  299. package/dist/hooks/learner/validator.js.map +1 -0
  300. package/dist/hooks/learner/writer.d.ts +27 -0
  301. package/dist/hooks/learner/writer.d.ts.map +1 -0
  302. package/dist/hooks/learner/writer.js +126 -0
  303. package/dist/hooks/learner/writer.js.map +1 -0
  304. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  305. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  306. package/dist/hooks/mnemosyne/config.js +103 -0
  307. package/dist/hooks/mnemosyne/config.js.map +1 -0
  308. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  309. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  310. package/dist/hooks/mnemosyne/constants.js +26 -0
  311. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  312. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  313. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  314. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  315. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  316. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  317. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  318. package/dist/hooks/mnemosyne/detector.js +150 -0
  319. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  320. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  321. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  322. package/dist/hooks/mnemosyne/finder.js +117 -0
  323. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  324. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  325. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  326. package/dist/hooks/mnemosyne/index.js +137 -0
  327. package/dist/hooks/mnemosyne/index.js.map +1 -0
  328. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  329. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  330. package/dist/hooks/mnemosyne/loader.js +113 -0
  331. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  332. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  333. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  334. package/dist/hooks/mnemosyne/parser.js +190 -0
  335. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  336. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  337. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  338. package/dist/hooks/mnemosyne/promotion.js +87 -0
  339. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  340. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  341. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  342. package/dist/hooks/mnemosyne/types.js +8 -0
  343. package/dist/hooks/mnemosyne/types.js.map +1 -0
  344. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  345. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  346. package/dist/hooks/mnemosyne/validator.js +87 -0
  347. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  348. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  349. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  350. package/dist/hooks/mnemosyne/writer.js +126 -0
  351. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  352. package/dist/hooks/notepad/index.d.ts +2 -2
  353. package/dist/hooks/notepad/index.js +7 -7
  354. package/dist/hooks/notepad/index.js.map +1 -1
  355. package/dist/hooks/omc-orchestrator/constants.d.ts +23 -0
  356. package/dist/hooks/omc-orchestrator/constants.d.ts.map +1 -0
  357. package/dist/hooks/omc-orchestrator/constants.js +142 -0
  358. package/dist/hooks/omc-orchestrator/constants.js.map +1 -0
  359. package/dist/hooks/omc-orchestrator/index.d.ts +113 -0
  360. package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -0
  361. package/dist/hooks/omc-orchestrator/index.js +309 -0
  362. package/dist/hooks/omc-orchestrator/index.js.map +1 -0
  363. package/dist/hooks/persistent-mode/index.d.ts +4 -4
  364. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  365. package/dist/hooks/persistent-mode/index.js +37 -37
  366. package/dist/hooks/persistent-mode/index.js.map +1 -1
  367. package/dist/hooks/ralph-loop/index.d.ts +33 -5
  368. package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
  369. package/dist/hooks/ralph-loop/index.js +91 -17
  370. package/dist/hooks/ralph-loop/index.js.map +1 -1
  371. package/dist/hooks/ralph-prd/index.d.ts +4 -4
  372. package/dist/hooks/ralph-prd/index.d.ts.map +1 -1
  373. package/dist/hooks/ralph-prd/index.js +13 -13
  374. package/dist/hooks/ralph-prd/index.js.map +1 -1
  375. package/dist/hooks/ralph-progress/index.d.ts +5 -5
  376. package/dist/hooks/ralph-progress/index.d.ts.map +1 -1
  377. package/dist/hooks/ralph-progress/index.js +14 -14
  378. package/dist/hooks/ralph-progress/index.js.map +1 -1
  379. package/dist/hooks/ralph-verifier/index.d.ts +23 -23
  380. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -1
  381. package/dist/hooks/ralph-verifier/index.js +41 -41
  382. package/dist/hooks/ralph-verifier/index.js.map +1 -1
  383. package/dist/hooks/rules-injector/constants.d.ts +1 -1
  384. package/dist/hooks/rules-injector/constants.d.ts.map +1 -1
  385. package/dist/hooks/rules-injector/constants.js +2 -2
  386. package/dist/hooks/rules-injector/constants.js.map +1 -1
  387. package/dist/hooks/todo-continuation/index.js +1 -1
  388. package/dist/hooks/todo-continuation/index.js.map +1 -1
  389. package/dist/hooks/ultraqa-loop/index.d.ts +1 -1
  390. package/dist/hooks/ultraqa-loop/index.js +8 -8
  391. package/dist/hooks/ultraqa-loop/index.js.map +1 -1
  392. package/dist/hooks/ultrawork-state/index.js +7 -7
  393. package/dist/hooks/ultrawork-state/index.js.map +1 -1
  394. package/dist/hud/background-tasks.d.ts +26 -0
  395. package/dist/hud/background-tasks.d.ts.map +1 -0
  396. package/dist/hud/background-tasks.js +116 -0
  397. package/dist/hud/background-tasks.js.map +1 -0
  398. package/dist/hud/colors.d.ts +54 -0
  399. package/dist/hud/colors.d.ts.map +1 -0
  400. package/dist/hud/colors.js +156 -0
  401. package/dist/hud/colors.js.map +1 -0
  402. package/dist/hud/elements/agents.d.ts +73 -0
  403. package/dist/hud/elements/agents.d.ts.map +1 -0
  404. package/dist/hud/elements/agents.js +405 -0
  405. package/dist/hud/elements/agents.js.map +1 -0
  406. package/dist/hud/elements/background.d.ts +20 -0
  407. package/dist/hud/elements/background.d.ts.map +1 -0
  408. package/dist/hud/elements/background.js +70 -0
  409. package/dist/hud/elements/background.js.map +1 -0
  410. package/dist/hud/elements/context.d.ts +19 -0
  411. package/dist/hud/elements/context.d.ts.map +1 -0
  412. package/dist/hud/elements/context.js +58 -0
  413. package/dist/hud/elements/context.js.map +1 -0
  414. package/dist/hud/elements/index.d.ts +17 -0
  415. package/dist/hud/elements/index.d.ts.map +1 -0
  416. package/dist/hud/elements/index.js +17 -0
  417. package/dist/hud/elements/index.js.map +1 -0
  418. package/dist/hud/elements/limits.d.ts +19 -0
  419. package/dist/hud/elements/limits.d.ts.map +1 -0
  420. package/dist/hud/elements/limits.js +54 -0
  421. package/dist/hud/elements/limits.js.map +1 -0
  422. package/dist/hud/elements/permission.d.ts +13 -0
  423. package/dist/hud/elements/permission.d.ts.map +1 -0
  424. package/dist/hud/elements/permission.js +20 -0
  425. package/dist/hud/elements/permission.js.map +1 -0
  426. package/dist/hud/elements/prd.d.ts +20 -0
  427. package/dist/hud/elements/prd.d.ts.map +1 -0
  428. package/dist/hud/elements/prd.js +52 -0
  429. package/dist/hud/elements/prd.js.map +1 -0
  430. package/dist/hud/elements/ralph.d.ts +14 -0
  431. package/dist/hud/elements/ralph.d.ts.map +1 -0
  432. package/dist/hud/elements/ralph.js +36 -0
  433. package/dist/hud/elements/ralph.js.map +1 -0
  434. package/dist/hud/elements/session.d.ts +13 -0
  435. package/dist/hud/elements/session.d.ts.map +1 -0
  436. package/dist/hud/elements/session.js +24 -0
  437. package/dist/hud/elements/session.js.map +1 -0
  438. package/dist/hud/elements/skills.d.ts +24 -0
  439. package/dist/hud/elements/skills.d.ts.map +1 -0
  440. package/dist/hud/elements/skills.js +81 -0
  441. package/dist/hud/elements/skills.js.map +1 -0
  442. package/dist/hud/elements/thinking.d.ts +13 -0
  443. package/dist/hud/elements/thinking.d.ts.map +1 -0
  444. package/dist/hud/elements/thinking.js +19 -0
  445. package/dist/hud/elements/thinking.js.map +1 -0
  446. package/dist/hud/elements/todos.d.ts +20 -0
  447. package/dist/hud/elements/todos.d.ts.map +1 -0
  448. package/dist/hud/elements/todos.js +70 -0
  449. package/dist/hud/elements/todos.js.map +1 -0
  450. package/dist/hud/index.d.ts +9 -0
  451. package/dist/hud/index.d.ts.map +1 -0
  452. package/dist/hud/index.js +89 -0
  453. package/dist/hud/index.js.map +1 -0
  454. package/dist/hud/omc-state.d.ts +31 -0
  455. package/dist/hud/omc-state.d.ts.map +1 -0
  456. package/dist/hud/omc-state.js +163 -0
  457. package/dist/hud/omc-state.js.map +1 -0
  458. package/dist/hud/render.d.ts +11 -0
  459. package/dist/hud/render.d.ts.map +1 -0
  460. package/dist/hud/render.js +121 -0
  461. package/dist/hud/render.js.map +1 -0
  462. package/dist/hud/sisyphus-state.d.ts +31 -0
  463. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  464. package/dist/hud/sisyphus-state.js +163 -0
  465. package/dist/hud/sisyphus-state.js.map +1 -0
  466. package/dist/hud/state.d.ts +43 -0
  467. package/dist/hud/state.d.ts.map +1 -0
  468. package/dist/hud/state.js +201 -0
  469. package/dist/hud/state.js.map +1 -0
  470. package/dist/hud/stdin.d.ts +22 -0
  471. package/dist/hud/stdin.d.ts.map +1 -0
  472. package/dist/hud/stdin.js +65 -0
  473. package/dist/hud/stdin.js.map +1 -0
  474. package/dist/hud/transcript.d.ts +32 -0
  475. package/dist/hud/transcript.d.ts.map +1 -0
  476. package/dist/hud/transcript.js +364 -0
  477. package/dist/hud/transcript.js.map +1 -0
  478. package/dist/hud/types.d.ts +178 -0
  479. package/dist/hud/types.d.ts.map +1 -0
  480. package/dist/hud/types.js +119 -0
  481. package/dist/hud/types.js.map +1 -0
  482. package/dist/hud/usage-api.d.ts +24 -0
  483. package/dist/hud/usage-api.d.ts.map +1 -0
  484. package/dist/hud/usage-api.js +234 -0
  485. package/dist/hud/usage-api.js.map +1 -0
  486. package/dist/index.d.ts +7 -7
  487. package/dist/index.d.ts.map +1 -1
  488. package/dist/index.js +10 -12
  489. package/dist/index.js.map +1 -1
  490. package/dist/installer/hooks.d.ts +36 -64
  491. package/dist/installer/hooks.d.ts.map +1 -1
  492. package/dist/installer/hooks.js +91 -1298
  493. package/dist/installer/hooks.js.map +1 -1
  494. package/dist/installer/index.d.ts +23 -22
  495. package/dist/installer/index.d.ts.map +1 -1
  496. package/dist/installer/index.js +307 -2575
  497. package/dist/installer/index.js.map +1 -1
  498. package/dist/shared/types.d.ts +6 -6
  499. package/dist/shared/types.d.ts.map +1 -1
  500. package/docs/ARCHITECTURE.md +386 -0
  501. package/docs/CLAUDE.md +281 -0
  502. package/docs/FULL-README.md +822 -0
  503. package/docs/LOCAL_PLUGIN_INSTALL.md +94 -0
  504. package/docs/MIGRATION-v3.md +186 -0
  505. package/docs/MIGRATION.md +460 -0
  506. package/docs/TIERED_AGENTS_V2.md +322 -0
  507. package/hooks/hooks.json +70 -0
  508. package/hooks/keyword-detector.sh +102 -0
  509. package/hooks/persistent-mode.sh +172 -0
  510. package/hooks/session-start.sh +62 -0
  511. package/hooks/stop-continuation.sh +40 -0
  512. package/package.json +14 -8
  513. package/scripts/install.sh +90 -72
  514. package/scripts/keyword-detector.mjs +1 -1
  515. package/scripts/persistent-mode.mjs +9 -9
  516. package/scripts/persistent-mode.sh +21 -10
  517. package/scripts/plugin-setup.mjs +109 -0
  518. package/scripts/pre-tool-enforcer.mjs +1 -1
  519. package/scripts/pre-tool-enforcer.sh +1 -1
  520. package/scripts/session-start.mjs +38 -3
  521. package/scripts/skill-injector.mjs +231 -0
  522. package/scripts/uninstall.sh +8 -8
  523. package/skills/analyze/SKILL.md +47 -0
  524. package/skills/cancel-ralph/SKILL.md +43 -0
  525. package/skills/cancel-ultraqa/SKILL.md +29 -0
  526. package/skills/cancel-ultrawork/SKILL.md +42 -0
  527. package/skills/deepinit/SKILL.md +321 -0
  528. package/skills/deepsearch/SKILL.md +39 -0
  529. package/skills/doctor/SKILL.md +192 -0
  530. package/skills/frontend-ui-ux/SKILL.md +53 -0
  531. package/skills/git-master/SKILL.md +58 -0
  532. package/skills/help/SKILL.md +66 -0
  533. package/skills/hud/SKILL.md +142 -0
  534. package/skills/learner/SKILL.md +136 -0
  535. package/skills/note/SKILL.md +63 -0
  536. package/skills/omc-default/SKILL.md +78 -0
  537. package/skills/omc-default-global/SKILL.md +75 -0
  538. package/skills/omc-setup/SKILL.md +144 -0
  539. package/skills/orchestrate/SKILL.md +409 -0
  540. package/skills/plan/SKILL.md +37 -0
  541. package/skills/planner/SKILL.md +43 -0
  542. package/skills/ralph/SKILL.md +101 -0
  543. package/skills/ralph-init/SKILL.md +61 -0
  544. package/skills/ralplan/SKILL.md +219 -0
  545. package/skills/release/SKILL.md +84 -0
  546. package/skills/review/SKILL.md +37 -0
  547. package/skills/ultraqa/SKILL.md +123 -0
  548. package/skills/ultrawork/SKILL.md +89 -0
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Sisyphus HUD - Main Entry Point
4
+ *
5
+ * Statusline command that visualizes oh-my-claudecode state.
6
+ * Receives stdin JSON from Claude Code and outputs formatted statusline.
7
+ */
8
+ import { readStdin, getContextPercent, getModelName } from './stdin.js';
9
+ import { parseTranscript } from './transcript.js';
10
+ import { readHudState, readHudConfig, getRunningTasks } from './state.js';
11
+ import { readRalphStateForHud, readUltraworkStateForHud, readPrdStateForHud, } from './omc-state.js';
12
+ import { getUsage } from './usage-api.js';
13
+ import { render } from './render.js';
14
+ /**
15
+ * Calculate session health from session start time and context usage.
16
+ */
17
+ function calculateSessionHealth(sessionStart, contextPercent) {
18
+ if (!sessionStart)
19
+ return null;
20
+ const durationMs = Date.now() - sessionStart.getTime();
21
+ const durationMinutes = Math.floor(durationMs / 60_000);
22
+ let health = 'healthy';
23
+ if (durationMinutes > 120 || contextPercent > 85) {
24
+ health = 'critical';
25
+ }
26
+ else if (durationMinutes > 60 || contextPercent > 70) {
27
+ health = 'warning';
28
+ }
29
+ return { durationMinutes, messageCount: 0, health };
30
+ }
31
+ /**
32
+ * Main HUD entry point
33
+ */
34
+ async function main() {
35
+ try {
36
+ // Read stdin from Claude Code
37
+ const stdin = await readStdin();
38
+ if (!stdin) {
39
+ // No stdin - output placeholder
40
+ console.log('[SISYPHUS] waiting...');
41
+ return;
42
+ }
43
+ const cwd = stdin.cwd || process.cwd();
44
+ // Parse transcript for agents and todos
45
+ const transcriptData = await parseTranscript(stdin.transcript_path);
46
+ // Read Sisyphus state files
47
+ const ralph = readRalphStateForHud(cwd);
48
+ const ultrawork = readUltraworkStateForHud(cwd);
49
+ const prd = readPrdStateForHud(cwd);
50
+ // Read HUD state for background tasks
51
+ const hudState = readHudState(cwd);
52
+ const backgroundTasks = hudState?.backgroundTasks || [];
53
+ // Read configuration
54
+ const config = readHudConfig();
55
+ // Fetch rate limits from OAuth API (if available)
56
+ const rateLimits = config.elements.rateLimits !== false
57
+ ? await getUsage()
58
+ : null;
59
+ // Build render context
60
+ const context = {
61
+ contextPercent: getContextPercent(stdin),
62
+ modelName: getModelName(stdin),
63
+ ralph,
64
+ ultrawork,
65
+ prd,
66
+ activeAgents: transcriptData.agents.filter((a) => a.status === 'running'),
67
+ todos: transcriptData.todos,
68
+ backgroundTasks: getRunningTasks(hudState),
69
+ cwd,
70
+ lastSkill: transcriptData.lastActivatedSkill || null,
71
+ rateLimits,
72
+ pendingPermission: transcriptData.pendingPermission || null,
73
+ thinkingState: transcriptData.thinkingState || null,
74
+ sessionHealth: calculateSessionHealth(transcriptData.sessionStart, getContextPercent(stdin))
75
+ };
76
+ // Render and output
77
+ const output = render(context, config);
78
+ // Replace spaces with non-breaking spaces for terminal alignment
79
+ const formattedOutput = output.replace(/ /g, '\u00A0');
80
+ console.log(formattedOutput);
81
+ }
82
+ catch (error) {
83
+ // On any error, show minimal fallback
84
+ console.log('[SISYPHUS] error');
85
+ }
86
+ }
87
+ // Run main
88
+ main();
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hud/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
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 .omc 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 .omc/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=omc-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omc-state.d.ts","sourceRoot":"","sources":["../../src/hud/omc-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"}
@@ -0,0 +1,163 @@
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, '.omc', '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 .omc and global ~/.claude locations.
61
+ */
62
+ export function readUltraworkStateForHud(directory) {
63
+ // Check local state first
64
+ const localFile = join(directory, '.omc', '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 .omc/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 .omc
109
+ prdPath = join(directory, '.omc', '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=omc-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omc-state.js","sourceRoot":"","sources":["../../src/hud/omc-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sisyphus HUD - Main Renderer
3
+ *
4
+ * Composes statusline output from render context.
5
+ */
6
+ import type { HudRenderContext, HudConfig } from './types.js';
7
+ /**
8
+ * Render the complete statusline (single or multi-line)
9
+ */
10
+ export declare function render(context: HudRenderContext, config: HudConfig): string;
11
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAc9D;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CA0G3E"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Sisyphus HUD - Main Renderer
3
+ *
4
+ * Composes statusline output from render context.
5
+ */
6
+ import { bold, dim } from './colors.js';
7
+ import { renderRalph } from './elements/ralph.js';
8
+ import { renderAgentsByFormat, renderAgentsMultiLine } from './elements/agents.js';
9
+ import { renderTodos } from './elements/todos.js';
10
+ import { renderSkills, renderLastSkill } from './elements/skills.js';
11
+ import { renderContext } from './elements/context.js';
12
+ import { renderBackground } from './elements/background.js';
13
+ import { renderPrd } from './elements/prd.js';
14
+ import { renderRateLimits } from './elements/limits.js';
15
+ import { renderPermission } from './elements/permission.js';
16
+ import { renderThinking } from './elements/thinking.js';
17
+ import { renderSession } from './elements/session.js';
18
+ /**
19
+ * Render the complete statusline (single or multi-line)
20
+ */
21
+ export function render(context, config) {
22
+ const elements = [];
23
+ const detailLines = [];
24
+ const { elements: enabledElements } = config;
25
+ // [OMC] label
26
+ if (enabledElements.omcLabel) {
27
+ elements.push(bold('[OMC]'));
28
+ }
29
+ // Rate limits (5h and weekly)
30
+ if (enabledElements.rateLimits && context.rateLimits) {
31
+ const limits = renderRateLimits(context.rateLimits);
32
+ if (limits)
33
+ elements.push(limits);
34
+ }
35
+ // Permission status indicator (heuristic-based)
36
+ if (enabledElements.permissionStatus && context.pendingPermission) {
37
+ const permission = renderPermission(context.pendingPermission);
38
+ if (permission)
39
+ elements.push(permission);
40
+ }
41
+ // Extended thinking indicator
42
+ if (enabledElements.thinking && context.thinkingState) {
43
+ const thinking = renderThinking(context.thinkingState);
44
+ if (thinking)
45
+ elements.push(thinking);
46
+ }
47
+ // Session health indicator
48
+ if (enabledElements.sessionHealth && context.sessionHealth) {
49
+ const session = renderSession(context.sessionHealth);
50
+ if (session)
51
+ elements.push(session);
52
+ }
53
+ // Ralph loop state
54
+ if (enabledElements.ralph && context.ralph) {
55
+ const ralph = renderRalph(context.ralph, config.thresholds);
56
+ if (ralph)
57
+ elements.push(ralph);
58
+ }
59
+ // PRD story
60
+ if (enabledElements.prdStory && context.prd) {
61
+ const prd = renderPrd(context.prd);
62
+ if (prd)
63
+ elements.push(prd);
64
+ }
65
+ // Active skills (ultrawork, etc.) + last skill
66
+ if (enabledElements.activeSkills) {
67
+ const skills = renderSkills(context.ultrawork, context.ralph, (enabledElements.lastSkill ?? true) ? context.lastSkill : null);
68
+ if (skills)
69
+ elements.push(skills);
70
+ }
71
+ // Standalone last skill element (if activeSkills disabled but lastSkill enabled)
72
+ if ((enabledElements.lastSkill ?? true) && !enabledElements.activeSkills) {
73
+ const lastSkillElement = renderLastSkill(context.lastSkill);
74
+ if (lastSkillElement)
75
+ elements.push(lastSkillElement);
76
+ }
77
+ // Context window
78
+ if (enabledElements.contextBar) {
79
+ const ctx = renderContext(context.contextPercent, config.thresholds);
80
+ if (ctx)
81
+ elements.push(ctx);
82
+ }
83
+ // Active agents - handle multi-line format specially
84
+ if (enabledElements.agents) {
85
+ const format = enabledElements.agentsFormat || 'codes';
86
+ if (format === 'multiline') {
87
+ // Multi-line mode: get header part and detail lines
88
+ const maxLines = enabledElements.agentsMaxLines || 5;
89
+ const result = renderAgentsMultiLine(context.activeAgents, maxLines);
90
+ if (result.headerPart)
91
+ elements.push(result.headerPart);
92
+ detailLines.push(...result.detailLines);
93
+ }
94
+ else {
95
+ // Single-line mode: standard format
96
+ const agents = renderAgentsByFormat(context.activeAgents, format);
97
+ if (agents)
98
+ elements.push(agents);
99
+ }
100
+ }
101
+ // Background tasks
102
+ if (enabledElements.backgroundTasks) {
103
+ const bg = renderBackground(context.backgroundTasks);
104
+ if (bg)
105
+ elements.push(bg);
106
+ }
107
+ // Todos
108
+ if (enabledElements.todos) {
109
+ const todos = renderTodos(context.todos);
110
+ if (todos)
111
+ elements.push(todos);
112
+ }
113
+ // Compose output
114
+ const headerLine = elements.join(dim(' | '));
115
+ // If we have detail lines, output multi-line
116
+ if (detailLines.length > 0) {
117
+ return [headerLine, ...detailLines].join('\n');
118
+ }
119
+ return headerLine;
120
+ }
121
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,163 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sisyphus-state.js","sourceRoot":"","sources":["../../src/hud/sisyphus-state.ts"],"names":[],"mappings":"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"}