oh-my-claude-sisyphus 2.6.0 → 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 -708
  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 +39 -20
  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
@@ -7,9 +7,22 @@
7
7
  */
8
8
 
9
9
  import { existsSync, readFileSync, writeFileSync, readdirSync } from 'fs';
10
- import { join } from 'path';
10
+ import { join, dirname } from 'path';
11
11
  import { homedir } from 'os';
12
- import { pruneOldEntries } from '../dist/hooks/notepad/index.js';
12
+ import { fileURLToPath } from 'url';
13
+
14
+ // Dynamic import for notepad with fallback
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+ let pruneOldEntries = null;
18
+
19
+ try {
20
+ const notepadModule = await import(join(__dirname, '../dist/hooks/notepad/index.js'));
21
+ pruneOldEntries = notepadModule.pruneOldEntries;
22
+ } catch (err) {
23
+ // Notepad module not available - pruning will be skipped
24
+ // This can happen in older versions or if build failed
25
+ }
13
26
 
14
27
  // Read all stdin
15
28
  async function readStdin() {
@@ -45,7 +58,7 @@ function getPrdStatus(projectDir) {
45
58
  // Check both root and .sisyphus for prd.json
46
59
  const paths = [
47
60
  join(projectDir, 'prd.json'),
48
- join(projectDir, '.sisyphus', 'prd.json')
61
+ join(projectDir, '.omc', 'prd.json')
49
62
  ];
50
63
 
51
64
  for (const prdPath of paths) {
@@ -75,7 +88,7 @@ function getPrdStatus(projectDir) {
75
88
  function getProgressPatterns(projectDir) {
76
89
  const paths = [
77
90
  join(projectDir, 'progress.txt'),
78
- join(projectDir, '.sisyphus', 'progress.txt')
91
+ join(projectDir, '.omc', 'progress.txt')
79
92
  ];
80
93
 
81
94
  for (const progressPath of paths) {
@@ -130,7 +143,7 @@ function countIncompleteTodos(todosDir, projectDir) {
130
143
 
131
144
  // Check project todos
132
145
  for (const path of [
133
- join(projectDir, '.sisyphus', 'todos.json'),
146
+ join(projectDir, '.omc', 'todos.json'),
134
147
  join(projectDir, '.claude', 'todos.json')
135
148
  ]) {
136
149
  const data = readJsonFile(path);
@@ -153,14 +166,14 @@ async function main() {
153
166
  const todosDir = join(homedir(), '.claude', 'todos');
154
167
 
155
168
  // Check for ultrawork state
156
- let ultraworkState = readJsonFile(join(directory, '.sisyphus', 'ultrawork-state.json'))
169
+ let ultraworkState = readJsonFile(join(directory, '.omc', 'ultrawork-state.json'))
157
170
  || readJsonFile(join(homedir(), '.claude', 'ultrawork-state.json'));
158
171
 
159
172
  // Check for ralph loop state
160
- const ralphState = readJsonFile(join(directory, '.sisyphus', 'ralph-state.json'));
173
+ const ralphState = readJsonFile(join(directory, '.omc', 'ralph-state.json'));
161
174
 
162
175
  // Check for verification state
163
- const verificationState = readJsonFile(join(directory, '.sisyphus', 'ralph-verification.json'));
176
+ const verificationState = readJsonFile(join(directory, '.omc', 'ralph-verification.json'));
164
177
 
165
178
  // Count incomplete todos
166
179
  const incompleteCount = countIncompleteTodos(todosDir, directory);
@@ -178,9 +191,11 @@ async function main() {
178
191
  if (prdStatus.hasPrd && prdStatus.allComplete) {
179
192
  // Prune old notepad entries on clean session stop
180
193
  try {
181
- const pruneResult = pruneOldEntries(directory, 7);
182
- if (pruneResult.pruned > 0) {
183
- // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
194
+ if (pruneOldEntries) {
195
+ const pruneResult = pruneOldEntries(directory, 7);
196
+ if (pruneResult.pruned > 0) {
197
+ // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
198
+ }
184
199
  }
185
200
  } catch (err) {
186
201
  // Silently ignore prune errors
@@ -241,7 +256,7 @@ ${verificationState.oracle_feedback}
241
256
  if (iteration < maxIter) {
242
257
  const newIter = iteration + 1;
243
258
  ralphState.iteration = newIter;
244
- writeJsonFile(join(directory, '.sisyphus', 'ralph-state.json'), ralphState);
259
+ writeJsonFile(join(directory, '.omc', 'ralph-state.json'), ralphState);
245
260
 
246
261
  // Build continuation message with PRD context if available
247
262
  let prdContext = '';
@@ -314,9 +329,11 @@ ${ralphState.prompt ? `Original task: ${ralphState.prompt}` : ''}
314
329
  if (newCount > maxReinforcements) {
315
330
  // Prune old notepad entries on clean session stop
316
331
  try {
317
- const pruneResult = pruneOldEntries(directory, 7);
318
- if (pruneResult.pruned > 0) {
319
- // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
332
+ if (pruneOldEntries) {
333
+ const pruneResult = pruneOldEntries(directory, 7);
334
+ if (pruneResult.pruned > 0) {
335
+ // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
336
+ }
320
337
  }
321
338
  } catch (err) {
322
339
  // Silently ignore prune errors
@@ -332,7 +349,7 @@ ${ralphState.prompt ? `Original task: ${ralphState.prompt}` : ''}
332
349
  ultraworkState.reinforcement_count = newCount;
333
350
  ultraworkState.last_checked_at = new Date().toISOString();
334
351
 
335
- writeJsonFile(join(directory, '.sisyphus', 'ultrawork-state.json'), ultraworkState);
352
+ writeJsonFile(join(directory, '.omc', 'ultrawork-state.json'), ultraworkState);
336
353
 
337
354
  console.log(JSON.stringify({
338
355
  continue: false,
@@ -364,7 +381,7 @@ ${ultraworkState.original_prompt ? `Original task: ${ultraworkState.original_pro
364
381
  // Priority 3: Todo Continuation (with escape mechanism)
365
382
  if (incompleteCount > 0) {
366
383
  // Track continuation attempts in a lightweight way
367
- const contFile = join(directory, '.sisyphus', 'continuation-count.json');
384
+ const contFile = join(directory, '.omc', 'continuation-count.json');
368
385
  let contState = readJsonFile(contFile) || { count: 0 };
369
386
  contState.count = (contState.count || 0) + 1;
370
387
  contState.last_checked_at = new Date().toISOString();
@@ -376,9 +393,11 @@ ${ultraworkState.original_prompt ? `Original task: ${ultraworkState.original_pro
376
393
  if (contState.count > maxContinuations) {
377
394
  // Prune old notepad entries on clean session stop
378
395
  try {
379
- const pruneResult = pruneOldEntries(directory, 7);
380
- if (pruneResult.pruned > 0) {
381
- // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
396
+ if (pruneOldEntries) {
397
+ const pruneResult = pruneOldEntries(directory, 7);
398
+ if (pruneResult.pruned > 0) {
399
+ // Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
400
+ }
382
401
  }
383
402
  } catch (err) {
384
403
  // Silently ignore prune errors
@@ -21,22 +21,22 @@ fi
21
21
 
22
22
  # Check for active ultrawork state
23
23
  ULTRAWORK_STATE=""
24
- if [ -f "$DIRECTORY/.sisyphus/ultrawork-state.json" ]; then
25
- ULTRAWORK_STATE=$(cat "$DIRECTORY/.sisyphus/ultrawork-state.json" 2>/dev/null)
24
+ if [ -f "$DIRECTORY/.omc/ultrawork-state.json" ]; then
25
+ ULTRAWORK_STATE=$(cat "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null)
26
26
  elif [ -f "$HOME/.claude/ultrawork-state.json" ]; then
27
27
  ULTRAWORK_STATE=$(cat "$HOME/.claude/ultrawork-state.json" 2>/dev/null)
28
28
  fi
29
29
 
30
30
  # Check for active ralph loop
31
31
  RALPH_STATE=""
32
- if [ -f "$DIRECTORY/.sisyphus/ralph-state.json" ]; then
33
- RALPH_STATE=$(cat "$DIRECTORY/.sisyphus/ralph-state.json" 2>/dev/null)
32
+ if [ -f "$DIRECTORY/.omc/ralph-state.json" ]; then
33
+ RALPH_STATE=$(cat "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null)
34
34
  fi
35
35
 
36
36
  # Check for verification state (oracle verification)
37
37
  VERIFICATION_STATE=""
38
- if [ -f "$DIRECTORY/.sisyphus/ralph-verification.json" ]; then
39
- VERIFICATION_STATE=$(cat "$DIRECTORY/.sisyphus/ralph-verification.json" 2>/dev/null)
38
+ if [ -f "$DIRECTORY/.omc/ralph-verification.json" ]; then
39
+ VERIFICATION_STATE=$(cat "$DIRECTORY/.omc/ralph-verification.json" 2>/dev/null)
40
40
  fi
41
41
 
42
42
  # Check for incomplete todos
@@ -58,7 +58,7 @@ if [ -d "$TODOS_DIR" ]; then
58
58
  fi
59
59
 
60
60
  # Check project todos as well
61
- for todo_path in "$DIRECTORY/.sisyphus/todos.json" "$DIRECTORY/.claude/todos.json"; do
61
+ for todo_path in "$DIRECTORY/.omc/todos.json" "$DIRECTORY/.claude/todos.json"; do
62
62
  if [ -f "$todo_path" ]; then
63
63
  if command -v jq &> /dev/null; then
64
64
  COUNT=$(jq 'if type == "array" then [.[] | select(.status != "completed" and .status != "cancelled")] | length else 0 end' "$todo_path" 2>/dev/null || echo "0")
@@ -106,11 +106,22 @@ EOF
106
106
  if [ "$ITERATION" -lt "$MAX_ITER" ]; then
107
107
  # Increment iteration
108
108
  NEW_ITER=$((ITERATION + 1))
109
- echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.sisyphus/ralph-state.json" 2>/dev/null
109
+ echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null
110
110
 
111
- cat << EOF
111
+ # Check if ultrawork is linked (auto-activated with ralph)
112
+ LINKED_ULTRAWORK=$(echo "$RALPH_STATE" | jq -r '.linked_ultrawork // false' 2>/dev/null)
113
+
114
+ if [ "$LINKED_ULTRAWORK" = "true" ]; then
115
+ # Combined ralph+ultrawork message with parallel execution rules
116
+ cat << EOF
117
+ {"continue": false, "reason": "<ralph-ultrawork-continuation>\n\n[RALPH + ULTRAWORK - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\n## ULTRAWORK RULES (ACTIVE)\n- **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially\n- **BACKGROUND FIRST**: Use Task(run_in_background=true) for long operations\n- **DELEGATE**: Route tasks to specialist agents immediately\n- **SMART ROUTING**: Use haiku for lookups, sonnet for standard work, opus for complex analysis\n- **TODO**: Track EVERY step. Mark complete IMMEDIATELY.\n\n## COMPLETION REQUIREMENTS\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off using PARALLEL execution\n4. Get Architect verification when ready\n5. When FULLY complete AND verified, output: <promise>$PROMISE</promise>\n6. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-ultrawork-continuation>\n\n---\n"}
118
+ EOF
119
+ else
120
+ # Standard ralph-only message
121
+ cat << EOF
112
122
  {"continue": false, "reason": "<ralph-loop-continuation>\n\n[RALPH LOOP - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\nCRITICAL INSTRUCTIONS:\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off\n4. When FULLY complete, output: <promise>$PROMISE</promise>\n5. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-loop-continuation>\n\n---\n"}
113
123
  EOF
124
+ fi
114
125
  exit 0
115
126
  fi
116
127
  fi
@@ -277,7 +288,7 @@ if [ -n "$ULTRAWORK_STATE" ] && [ "$INCOMPLETE_COUNT" -gt 0 ]; then
277
288
 
278
289
  # Update state file (best effort)
279
290
  if command -v jq &> /dev/null; then
280
- echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.sisyphus/ultrawork-state.json" 2>/dev/null
291
+ echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null
281
292
  fi
282
293
 
283
294
  cat << EOF
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Plugin Post-Install Setup
4
+ *
5
+ * Configures HUD statusline when plugin is installed.
6
+ * This runs after `claude plugin install oh-my-claudecode@oh-my-claudecode`
7
+ */
8
+
9
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, chmodSync } from 'node:fs';
10
+ import { homedir } from 'node:os';
11
+ import { join, dirname } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ const CLAUDE_DIR = join(homedir(), '.claude');
18
+ const HUD_DIR = join(CLAUDE_DIR, 'hud');
19
+ const SETTINGS_FILE = join(CLAUDE_DIR, 'settings.json');
20
+
21
+ console.log('[Sisyphus] Running post-install setup...');
22
+
23
+ // 1. Create HUD directory
24
+ if (!existsSync(HUD_DIR)) {
25
+ mkdirSync(HUD_DIR, { recursive: true });
26
+ }
27
+
28
+ // 2. Create HUD wrapper script
29
+ const hudScriptPath = join(HUD_DIR, 'sisyphus-hud.mjs');
30
+ const hudScript = `#!/usr/bin/env node
31
+ /**
32
+ * Sisyphus HUD - Statusline Script
33
+ * Wrapper that imports from plugin cache or development paths
34
+ */
35
+
36
+ import { existsSync, readdirSync } from "node:fs";
37
+ import { homedir } from "node:os";
38
+ import { join } from "node:path";
39
+
40
+ async function main() {
41
+ const home = homedir();
42
+
43
+ // 1. Try plugin cache first (preferred for 3.0.0+)
44
+ const pluginCacheBase = join(home, ".claude/plugins/cache/oh-my-claudecode/oh-my-claudecode");
45
+ if (existsSync(pluginCacheBase)) {
46
+ try {
47
+ const versions = readdirSync(pluginCacheBase);
48
+ if (versions.length > 0) {
49
+ const latestVersion = versions.sort().reverse()[0];
50
+ const pluginPath = join(pluginCacheBase, latestVersion, "dist/hud/index.js");
51
+ if (existsSync(pluginPath)) {
52
+ await import(pluginPath);
53
+ return;
54
+ }
55
+ }
56
+ } catch { /* continue */ }
57
+ }
58
+
59
+ // 2. Development paths
60
+ const devPaths = [
61
+ join(home, "Workspace/oh-my-claudecode/dist/hud/index.js"),
62
+ join(home, "workspace/oh-my-claudecode/dist/hud/index.js"),
63
+ ];
64
+
65
+ for (const devPath of devPaths) {
66
+ if (existsSync(devPath)) {
67
+ try {
68
+ await import(devPath);
69
+ return;
70
+ } catch { /* continue */ }
71
+ }
72
+ }
73
+
74
+ // 3. Fallback
75
+ console.log("[SISYPHUS] active");
76
+ }
77
+
78
+ main();
79
+ `;
80
+
81
+ writeFileSync(hudScriptPath, hudScript);
82
+ try {
83
+ chmodSync(hudScriptPath, 0o755);
84
+ } catch { /* Windows doesn't need this */ }
85
+ console.log('[Sisyphus] Installed HUD wrapper script');
86
+
87
+ // 3. Configure settings.json
88
+ try {
89
+ let settings = {};
90
+ if (existsSync(SETTINGS_FILE)) {
91
+ settings = JSON.parse(readFileSync(SETTINGS_FILE, 'utf-8'));
92
+ }
93
+
94
+ // Add statusLine if not configured
95
+ if (!settings.statusLine) {
96
+ settings.statusLine = {
97
+ type: 'command',
98
+ command: `node ${hudScriptPath}`
99
+ };
100
+ writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
101
+ console.log('[Sisyphus] Configured HUD statusLine in settings.json');
102
+ } else {
103
+ console.log('[Sisyphus] statusLine already configured, skipping');
104
+ }
105
+ } catch (e) {
106
+ console.log('[Sisyphus] Warning: Could not configure settings.json:', e.message);
107
+ }
108
+
109
+ console.log('[Sisyphus] Setup complete! Restart Claude Code to activate HUD.');
@@ -38,7 +38,7 @@ function getTodoStatus(directory) {
38
38
 
39
39
  // Check project-local todos
40
40
  const localPaths = [
41
- join(directory, '.sisyphus', 'todos.json'),
41
+ join(directory, '.omc', 'todos.json'),
42
42
  join(directory, '.claude', 'todos.json')
43
43
  ];
44
44
 
@@ -19,7 +19,7 @@ toolName=$(extract_json_field "toolName" "unknown")
19
19
  directory=$(extract_json_field "directory" "")
20
20
 
21
21
  # Try to get todo count from todo list file (if exists)
22
- todo_file="${directory}/.sisyphus/todos.json"
22
+ todo_file="${directory}/.omc/todos.json"
23
23
  todo_status=""
24
24
  if [[ -f "$todo_file" ]] && command -v jq &> /dev/null; then
25
25
  pending=$(jq -r '[.todos[] | select(.status == "pending")] | length' "$todo_file" 2>/dev/null || echo "0")
@@ -46,6 +46,33 @@ function countIncompleteTodos(todosDir) {
46
46
  return count;
47
47
  }
48
48
 
49
+ // Check if HUD is properly installed
50
+ function checkHudInstallation() {
51
+ const hudScript = join(homedir(), '.claude', 'hud', 'sisyphus-hud.mjs');
52
+ const settingsFile = join(homedir(), '.claude', 'settings.json');
53
+
54
+ // Check if HUD script exists
55
+ if (!existsSync(hudScript)) {
56
+ return { installed: false, reason: 'HUD script missing' };
57
+ }
58
+
59
+ // Check if statusLine is configured
60
+ try {
61
+ if (existsSync(settingsFile)) {
62
+ const settings = JSON.parse(readFileSync(settingsFile, 'utf-8'));
63
+ if (!settings.statusLine) {
64
+ return { installed: false, reason: 'statusLine not configured' };
65
+ }
66
+ } else {
67
+ return { installed: false, reason: 'settings.json missing' };
68
+ }
69
+ } catch {
70
+ return { installed: false, reason: 'Could not read settings' };
71
+ }
72
+
73
+ return { installed: true };
74
+ }
75
+
49
76
  // Main
50
77
  async function main() {
51
78
  try {
@@ -56,8 +83,16 @@ async function main() {
56
83
  const directory = data.directory || process.cwd();
57
84
  const messages = [];
58
85
 
86
+ // Check HUD installation (one-time setup guidance)
87
+ const hudCheck = checkHudInstallation();
88
+ if (!hudCheck.installed) {
89
+ messages.push(`<system-reminder>
90
+ [Sisyphus] HUD not configured (${hudCheck.reason}). Run /hud setup then restart Claude Code.
91
+ </system-reminder>`);
92
+ }
93
+
59
94
  // Check for ultrawork state
60
- const ultraworkState = readJsonFile(join(directory, '.sisyphus', 'ultrawork-state.json'))
95
+ const ultraworkState = readJsonFile(join(directory, '.omc', 'ultrawork-state.json'))
61
96
  || readJsonFile(join(homedir(), '.claude', 'ultrawork-state.json'));
62
97
 
63
98
  if (ultraworkState?.active) {
@@ -77,7 +112,7 @@ Continue working in ultrawork mode until all tasks are complete.
77
112
  }
78
113
 
79
114
  // Check for ralph loop state
80
- const ralphState = readJsonFile(join(directory, '.sisyphus', 'ralph-state.json'));
115
+ const ralphState = readJsonFile(join(directory, '.omc', 'ralph-state.json'));
81
116
  if (ralphState?.active) {
82
117
  messages.push(`<session-restore>
83
118
 
@@ -114,7 +149,7 @@ Please continue working on these tasks.
114
149
  }
115
150
 
116
151
  // Check for notepad Priority Context
117
- const notepadPath = join(directory, '.sisyphus', 'notepad.md');
152
+ const notepadPath = join(directory, '.omc', 'notepad.md');
118
153
  if (existsSync(notepadPath)) {
119
154
  try {
120
155
  const notepadContent = readFileSync(notepadPath, 'utf-8');
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Skill Injector Hook (UserPromptSubmit)
5
+ * Injects relevant learned skills into context based on prompt triggers.
6
+ *
7
+ * STANDALONE SCRIPT - does not import from dist/
8
+ * Follows pattern of keyword-detector.mjs and session-start.mjs
9
+ */
10
+
11
+ import { existsSync, readdirSync, readFileSync, realpathSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { homedir } from 'os';
14
+
15
+ // Constants
16
+ const USER_SKILLS_DIR = join(homedir(), '.claude', 'skills', 'omc-learned');
17
+ const PROJECT_SKILLS_SUBDIR = '.omc/skills';
18
+ const SKILL_EXTENSION = '.md';
19
+ const MAX_SKILLS_PER_SESSION = 5;
20
+
21
+ // Session cache to avoid re-injecting same skills
22
+ const injectedCache = new Map();
23
+
24
+ // Read all stdin
25
+ async function readStdin() {
26
+ const chunks = [];
27
+ for await (const chunk of process.stdin) {
28
+ chunks.push(chunk);
29
+ }
30
+ return Buffer.concat(chunks).toString('utf-8');
31
+ }
32
+
33
+ // Parse YAML frontmatter from skill file
34
+ function parseSkillFrontmatter(content) {
35
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
36
+ if (!match) return null;
37
+
38
+ const yamlContent = match[1];
39
+ const body = match[2].trim();
40
+
41
+ // Simple YAML parsing for triggers
42
+ const triggers = [];
43
+ const triggerMatch = yamlContent.match(/triggers:\s*\n((?:\s+-\s*.+\n?)*)/);
44
+ if (triggerMatch) {
45
+ const lines = triggerMatch[1].split('\n');
46
+ for (const line of lines) {
47
+ const itemMatch = line.match(/^\s+-\s*["']?([^"'\n]+)["']?\s*$/);
48
+ if (itemMatch) triggers.push(itemMatch[1].trim().toLowerCase());
49
+ }
50
+ }
51
+
52
+ // Extract name
53
+ const nameMatch = yamlContent.match(/name:\s*["']?([^"'\n]+)["']?/);
54
+ const name = nameMatch ? nameMatch[1].trim() : 'Unnamed Skill';
55
+
56
+ return { name, triggers, content: body };
57
+ }
58
+
59
+ // Find all skill files
60
+ function findSkillFiles(directory) {
61
+ const candidates = [];
62
+ const seenPaths = new Set();
63
+
64
+ // Project-level skills (higher priority)
65
+ const projectDir = join(directory, PROJECT_SKILLS_SUBDIR);
66
+ if (existsSync(projectDir)) {
67
+ try {
68
+ const files = readdirSync(projectDir, { withFileTypes: true });
69
+ for (const file of files) {
70
+ if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
71
+ const fullPath = join(projectDir, file.name);
72
+ try {
73
+ const realPath = realpathSync(fullPath);
74
+ if (!seenPaths.has(realPath)) {
75
+ seenPaths.add(realPath);
76
+ candidates.push({ path: fullPath, scope: 'project' });
77
+ }
78
+ } catch {
79
+ // Ignore symlink resolution errors
80
+ }
81
+ }
82
+ }
83
+ } catch {
84
+ // Ignore directory read errors
85
+ }
86
+ }
87
+
88
+ // User-level skills
89
+ if (existsSync(USER_SKILLS_DIR)) {
90
+ try {
91
+ const files = readdirSync(USER_SKILLS_DIR, { withFileTypes: true });
92
+ for (const file of files) {
93
+ if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
94
+ const fullPath = join(USER_SKILLS_DIR, file.name);
95
+ try {
96
+ const realPath = realpathSync(fullPath);
97
+ if (!seenPaths.has(realPath)) {
98
+ seenPaths.add(realPath);
99
+ candidates.push({ path: fullPath, scope: 'user' });
100
+ }
101
+ } catch {
102
+ // Ignore symlink resolution errors
103
+ }
104
+ }
105
+ }
106
+ } catch {
107
+ // Ignore directory read errors
108
+ }
109
+ }
110
+
111
+ return candidates;
112
+ }
113
+
114
+ // Find matching skills by trigger keywords
115
+ function findMatchingSkills(prompt, directory, sessionId) {
116
+ const promptLower = prompt.toLowerCase();
117
+ const candidates = findSkillFiles(directory);
118
+ const matches = [];
119
+
120
+ // Get or create session cache
121
+ if (!injectedCache.has(sessionId)) {
122
+ injectedCache.set(sessionId, new Set());
123
+ }
124
+ const alreadyInjected = injectedCache.get(sessionId);
125
+
126
+ for (const candidate of candidates) {
127
+ // Skip if already injected this session
128
+ if (alreadyInjected.has(candidate.path)) continue;
129
+
130
+ try {
131
+ const content = readFileSync(candidate.path, 'utf-8');
132
+ const skill = parseSkillFrontmatter(content);
133
+ if (!skill) continue;
134
+
135
+ // Check if any trigger matches
136
+ let score = 0;
137
+ for (const trigger of skill.triggers) {
138
+ if (promptLower.includes(trigger)) {
139
+ score += 10;
140
+ }
141
+ }
142
+
143
+ if (score > 0) {
144
+ matches.push({
145
+ path: candidate.path,
146
+ name: skill.name,
147
+ content: skill.content,
148
+ score,
149
+ scope: candidate.scope
150
+ });
151
+ }
152
+ } catch {
153
+ // Ignore file read errors
154
+ }
155
+ }
156
+
157
+ // Sort by score (descending) and limit
158
+ matches.sort((a, b) => b.score - a.score);
159
+ const selected = matches.slice(0, MAX_SKILLS_PER_SESSION);
160
+
161
+ // Mark as injected
162
+ for (const skill of selected) {
163
+ alreadyInjected.add(skill.path);
164
+ }
165
+
166
+ return selected;
167
+ }
168
+
169
+ // Format skills for injection
170
+ function formatSkillsMessage(skills) {
171
+ const lines = [
172
+ '<mnemosyne>',
173
+ '',
174
+ '## Relevant Learned Skills',
175
+ '',
176
+ 'The following skills from previous sessions may help:',
177
+ ''
178
+ ];
179
+
180
+ for (const skill of skills) {
181
+ lines.push(`### ${skill.name} (${skill.scope})`);
182
+ lines.push('');
183
+ lines.push(skill.content);
184
+ lines.push('');
185
+ lines.push('---');
186
+ lines.push('');
187
+ }
188
+
189
+ lines.push('</mnemosyne>');
190
+ return lines.join('\n');
191
+ }
192
+
193
+ // Main
194
+ async function main() {
195
+ try {
196
+ const input = await readStdin();
197
+ if (!input.trim()) {
198
+ console.log(JSON.stringify({ continue: true }));
199
+ return;
200
+ }
201
+
202
+ let data = {};
203
+ try { data = JSON.parse(input); } catch { /* ignore parse errors */ }
204
+
205
+ const prompt = data.prompt || '';
206
+ const sessionId = data.sessionId || 'unknown';
207
+ const directory = data.cwd || process.cwd();
208
+
209
+ // Skip if no prompt
210
+ if (!prompt) {
211
+ console.log(JSON.stringify({ continue: true }));
212
+ return;
213
+ }
214
+
215
+ const matchingSkills = findMatchingSkills(prompt, directory, sessionId);
216
+
217
+ if (matchingSkills.length > 0) {
218
+ console.log(JSON.stringify({
219
+ continue: true,
220
+ message: formatSkillsMessage(matchingSkills)
221
+ }));
222
+ } else {
223
+ console.log(JSON.stringify({ continue: true }));
224
+ }
225
+ } catch (error) {
226
+ // On any error, allow continuation
227
+ console.log(JSON.stringify({ continue: true }));
228
+ }
229
+ }
230
+
231
+ main();
@@ -90,10 +90,10 @@ rm -f "$CLAUDE_CONFIG_DIR/hooks/silent-auto-update.sh"
90
90
 
91
91
  # Remove version, state, and config files
92
92
  echo -e "${BLUE}Removing state and config files...${NC}"
93
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-version.json"
94
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-silent-update.json"
95
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-update.log"
96
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-config.json"
93
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-version.json"
94
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-silent-update.json"
95
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-update.log"
96
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-config.json"
97
97
 
98
98
  # Remove hook configurations from settings.json
99
99
  SETTINGS_FILE="$CLAUDE_CONFIG_DIR/settings.json"
@@ -154,11 +154,11 @@ else
154
154
  fi
155
155
  fi
156
156
 
157
- # Remove .sisyphus directory if it exists (plans, notepads, drafts)
158
- if [ -d "$CLAUDE_CONFIG_DIR/../.sisyphus" ] || [ -d ".sisyphus" ]; then
159
- echo -e "${YELLOW}Note: .sisyphus directory (plans/notepads) was not removed.${NC}"
157
+ # Remove .omc directory if it exists (plans, notepads, drafts)
158
+ if [ -d "$CLAUDE_CONFIG_DIR/../.omc" ] || [ -d ".omc" ]; then
159
+ echo -e "${YELLOW}Note: .omc directory (plans/notepads) was not removed.${NC}"
160
160
  echo " To remove project plans and notepads, run:"
161
- echo " rm -rf .sisyphus"
161
+ echo " rm -rf .omc"
162
162
  fi
163
163
 
164
164
  echo ""