oh-my-claude-sisyphus 3.7.3 → 3.7.5

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 (387) hide show
  1. package/agents/build-fixer-low.md +2 -2
  2. package/agents/build-fixer.md +74 -19
  3. package/agents/code-reviewer.md +7 -7
  4. package/agents/designer-high.md +2 -2
  5. package/agents/designer-low.md +1 -1
  6. package/agents/designer.md +17 -2
  7. package/agents/security-reviewer.md +86 -17
  8. package/agents/tdd-guide.md +151 -12
  9. package/commands/hud.md +3 -1
  10. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  11. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  12. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  13. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  14. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  15. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  16. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  17. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  18. package/dist/__tests__/analytics/output-estimator.test.js +18 -0
  19. package/dist/__tests__/analytics/output-estimator.test.js.map +1 -1
  20. package/dist/__tests__/analytics/token-extractor.test.js +44 -0
  21. package/dist/__tests__/analytics/token-extractor.test.js.map +1 -1
  22. package/dist/__tests__/analytics/token-tracker.test.d.ts +2 -0
  23. package/dist/__tests__/analytics/token-tracker.test.d.ts.map +1 -0
  24. package/dist/__tests__/analytics/token-tracker.test.js +189 -0
  25. package/dist/__tests__/analytics/token-tracker.test.js.map +1 -0
  26. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  27. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  28. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  29. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  30. package/dist/__tests__/hud/analytics-display.test.js +3 -8
  31. package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
  32. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  33. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  34. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  35. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  36. package/dist/__tests__/hud/top-agents.test.d.ts +8 -0
  37. package/dist/__tests__/hud/top-agents.test.d.ts.map +1 -0
  38. package/dist/__tests__/hud/top-agents.test.js +157 -0
  39. package/dist/__tests__/hud/top-agents.test.js.map +1 -0
  40. package/dist/__tests__/installer.test.js +1 -1
  41. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  42. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  43. package/dist/__tests__/learned-skills/config.test.js +37 -0
  44. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  45. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  46. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  47. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  48. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  49. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  50. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  51. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  52. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  53. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  54. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  55. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  56. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  57. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  58. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  59. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  60. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  61. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  62. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  63. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  64. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  65. package/dist/__tests__/skills.test.js +6 -5
  66. package/dist/__tests__/skills.test.js.map +1 -1
  67. package/dist/agents/codex-agents.d.ts +20 -0
  68. package/dist/agents/codex-agents.d.ts.map +1 -0
  69. package/dist/agents/codex-agents.js +36 -0
  70. package/dist/agents/codex-agents.js.map +1 -0
  71. package/dist/agents/definitions.js +1 -1
  72. package/dist/agents/definitions.js.map +1 -1
  73. package/dist/agents/document-writer.d.ts +11 -0
  74. package/dist/agents/document-writer.d.ts.map +1 -0
  75. package/dist/agents/document-writer.js +209 -0
  76. package/dist/agents/document-writer.js.map +1 -0
  77. package/dist/agents/frontend-engineer.d.ts +11 -0
  78. package/dist/agents/frontend-engineer.d.ts.map +1 -0
  79. package/dist/agents/frontend-engineer.js +115 -0
  80. package/dist/agents/frontend-engineer.js.map +1 -0
  81. package/dist/agents/librarian.d.ts +12 -0
  82. package/dist/agents/librarian.d.ts.map +1 -0
  83. package/dist/agents/librarian.js +103 -0
  84. package/dist/agents/librarian.js.map +1 -0
  85. package/dist/agents/metis.d.ts +12 -0
  86. package/dist/agents/metis.d.ts.map +1 -0
  87. package/dist/agents/metis.js +117 -0
  88. package/dist/agents/metis.js.map +1 -0
  89. package/dist/agents/momus.d.ts +12 -0
  90. package/dist/agents/momus.d.ts.map +1 -0
  91. package/dist/agents/momus.js +128 -0
  92. package/dist/agents/momus.js.map +1 -0
  93. package/dist/agents/multimodal-looker.d.ts +11 -0
  94. package/dist/agents/multimodal-looker.d.ts.map +1 -0
  95. package/dist/agents/multimodal-looker.js +70 -0
  96. package/dist/agents/multimodal-looker.js.map +1 -0
  97. package/dist/agents/oracle.d.ts +13 -0
  98. package/dist/agents/oracle.d.ts.map +1 -0
  99. package/dist/agents/oracle.js +191 -0
  100. package/dist/agents/oracle.js.map +1 -0
  101. package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
  102. package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
  103. package/dist/agents/orchestrator-sisyphus.js +115 -0
  104. package/dist/agents/orchestrator-sisyphus.js.map +1 -0
  105. package/dist/agents/prometheus.d.ts +12 -0
  106. package/dist/agents/prometheus.d.ts.map +1 -0
  107. package/dist/agents/prometheus.js +195 -0
  108. package/dist/agents/prometheus.js.map +1 -0
  109. package/dist/agents/sisyphus-junior.d.ts +12 -0
  110. package/dist/agents/sisyphus-junior.d.ts.map +1 -0
  111. package/dist/agents/sisyphus-junior.js +93 -0
  112. package/dist/agents/sisyphus-junior.js.map +1 -0
  113. package/dist/analytics/output-estimator.d.ts.map +1 -1
  114. package/dist/analytics/output-estimator.js +5 -1
  115. package/dist/analytics/output-estimator.js.map +1 -1
  116. package/dist/analytics/token-extractor.js +2 -2
  117. package/dist/analytics/token-extractor.js.map +1 -1
  118. package/dist/cli/analytics.js +0 -0
  119. package/dist/cli/components/CostDashboard.d.ts +15 -0
  120. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  121. package/dist/cli/components/CostDashboard.js +15 -0
  122. package/dist/cli/components/CostDashboard.js.map +1 -0
  123. package/dist/cli/components/LiveStats.d.ts +16 -0
  124. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  125. package/dist/cli/components/LiveStats.js +16 -0
  126. package/dist/cli/components/LiveStats.js.map +1 -0
  127. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  128. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  129. package/dist/cli/components/SessionBrowser.js +14 -0
  130. package/dist/cli/components/SessionBrowser.js.map +1 -0
  131. package/dist/cli/index.js +0 -0
  132. package/dist/cli/tui.d.ts +21 -0
  133. package/dist/cli/tui.d.ts.map +1 -0
  134. package/dist/cli/tui.js +21 -0
  135. package/dist/cli/tui.js.map +1 -0
  136. package/dist/compatibility/discovery.d.ts.map +1 -1
  137. package/dist/compatibility/discovery.js +3 -1
  138. package/dist/compatibility/discovery.js.map +1 -1
  139. package/dist/hooks/autopilot/prompts.d.ts.map +1 -1
  140. package/dist/hooks/autopilot/prompts.js +17 -3
  141. package/dist/hooks/autopilot/prompts.js.map +1 -1
  142. package/dist/hooks/autopilot/signals.d.ts +20 -0
  143. package/dist/hooks/autopilot/signals.d.ts.map +1 -0
  144. package/dist/hooks/autopilot/signals.js +75 -0
  145. package/dist/hooks/autopilot/signals.js.map +1 -0
  146. package/dist/hooks/autopilot/summary.d.ts +27 -0
  147. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  148. package/dist/hooks/autopilot/summary.js +160 -0
  149. package/dist/hooks/autopilot/summary.js.map +1 -0
  150. package/dist/hooks/autopilot/transition.d.ts +39 -0
  151. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  152. package/dist/hooks/autopilot/transition.js +216 -0
  153. package/dist/hooks/autopilot/transition.js.map +1 -0
  154. package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
  155. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
  156. package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
  157. package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
  158. package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
  159. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
  160. package/dist/hooks/context-window-limit-recovery/index.js +201 -0
  161. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
  162. package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
  163. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
  164. package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
  165. package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
  166. package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
  167. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
  168. package/dist/hooks/context-window-limit-recovery/types.js +34 -0
  169. package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
  170. package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
  171. package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
  172. package/dist/hooks/edit-error-recovery/index.js +89 -0
  173. package/dist/hooks/edit-error-recovery/index.js.map +1 -0
  174. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  175. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  176. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  177. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  178. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  179. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  180. package/dist/hooks/github-auto-responder/config.js +69 -0
  181. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  182. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  183. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  184. package/dist/hooks/github-auto-responder/constants.js +60 -0
  185. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  186. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  187. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  188. package/dist/hooks/github-auto-responder/filters.js +174 -0
  189. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  190. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  191. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  192. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  193. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  194. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  195. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  196. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  197. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  198. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  199. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  200. package/dist/hooks/github-auto-responder/index.js +145 -0
  201. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  202. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  203. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  204. package/dist/hooks/github-auto-responder/persona.js +99 -0
  205. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  206. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  207. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  208. package/dist/hooks/github-auto-responder/responder.js +264 -0
  209. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  210. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  211. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  212. package/dist/hooks/github-auto-responder/server.js +301 -0
  213. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  214. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  215. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  216. package/dist/hooks/github-auto-responder/signature.js +79 -0
  217. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  218. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  219. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  220. package/dist/hooks/github-auto-responder/templates.js +93 -0
  221. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  222. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  223. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  224. package/dist/hooks/github-auto-responder/types.js +7 -0
  225. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  226. package/dist/hooks/learned-skills/config.d.ts +53 -0
  227. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  228. package/dist/hooks/learned-skills/config.js +103 -0
  229. package/dist/hooks/learned-skills/config.js.map +1 -0
  230. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  231. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  232. package/dist/hooks/learned-skills/constants.js +26 -0
  233. package/dist/hooks/learned-skills/constants.js.map +1 -0
  234. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  235. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  236. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  237. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  238. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  239. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  240. package/dist/hooks/learned-skills/detector.js +150 -0
  241. package/dist/hooks/learned-skills/detector.js.map +1 -0
  242. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  243. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  244. package/dist/hooks/learned-skills/finder.js +117 -0
  245. package/dist/hooks/learned-skills/finder.js.map +1 -0
  246. package/dist/hooks/learned-skills/index.d.ts +62 -0
  247. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  248. package/dist/hooks/learned-skills/index.js +137 -0
  249. package/dist/hooks/learned-skills/index.js.map +1 -0
  250. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  251. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  252. package/dist/hooks/learned-skills/loader.js +107 -0
  253. package/dist/hooks/learned-skills/loader.js.map +1 -0
  254. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  255. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  256. package/dist/hooks/learned-skills/parser.js +190 -0
  257. package/dist/hooks/learned-skills/parser.js.map +1 -0
  258. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  259. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  260. package/dist/hooks/learned-skills/promotion.js +87 -0
  261. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  262. package/dist/hooks/learned-skills/types.d.ts +109 -0
  263. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  264. package/dist/hooks/learned-skills/types.js +8 -0
  265. package/dist/hooks/learned-skills/types.js.map +1 -0
  266. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  267. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  268. package/dist/hooks/learned-skills/validator.js +87 -0
  269. package/dist/hooks/learned-skills/validator.js.map +1 -0
  270. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  271. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  272. package/dist/hooks/learned-skills/writer.js +126 -0
  273. package/dist/hooks/learned-skills/writer.js.map +1 -0
  274. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  275. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  276. package/dist/hooks/mnemosyne/config.js +103 -0
  277. package/dist/hooks/mnemosyne/config.js.map +1 -0
  278. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  279. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  280. package/dist/hooks/mnemosyne/constants.js +26 -0
  281. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  282. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  283. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  284. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  285. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  286. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  287. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  288. package/dist/hooks/mnemosyne/detector.js +150 -0
  289. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  290. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  291. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  292. package/dist/hooks/mnemosyne/finder.js +117 -0
  293. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  294. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  295. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  296. package/dist/hooks/mnemosyne/index.js +137 -0
  297. package/dist/hooks/mnemosyne/index.js.map +1 -0
  298. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  299. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  300. package/dist/hooks/mnemosyne/loader.js +113 -0
  301. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  302. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  303. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  304. package/dist/hooks/mnemosyne/parser.js +190 -0
  305. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  306. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  307. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  308. package/dist/hooks/mnemosyne/promotion.js +87 -0
  309. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  310. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  311. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  312. package/dist/hooks/mnemosyne/types.js +8 -0
  313. package/dist/hooks/mnemosyne/types.js.map +1 -0
  314. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  315. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  316. package/dist/hooks/mnemosyne/validator.js +87 -0
  317. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  318. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  319. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  320. package/dist/hooks/mnemosyne/writer.js +126 -0
  321. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  322. package/dist/hooks/pre-compact/index.d.ts +2 -4
  323. package/dist/hooks/pre-compact/index.d.ts.map +1 -1
  324. package/dist/hooks/pre-compact/index.js +3 -4
  325. package/dist/hooks/pre-compact/index.js.map +1 -1
  326. package/dist/hooks/ralph-loop/index.d.ts +116 -0
  327. package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
  328. package/dist/hooks/ralph-loop/index.js +322 -0
  329. package/dist/hooks/ralph-loop/index.js.map +1 -0
  330. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  331. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  332. package/dist/hooks/ralph-prd/index.js +310 -0
  333. package/dist/hooks/ralph-prd/index.js.map +1 -0
  334. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  335. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  336. package/dist/hooks/ralph-progress/index.js +408 -0
  337. package/dist/hooks/ralph-progress/index.js.map +1 -0
  338. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  339. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  340. package/dist/hooks/ralph-verifier/index.js +223 -0
  341. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  342. package/dist/hooks/session-recovery/constants.d.ts +56 -0
  343. package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
  344. package/dist/hooks/session-recovery/constants.js +78 -0
  345. package/dist/hooks/session-recovery/constants.js.map +1 -0
  346. package/dist/hooks/session-recovery/index.d.ts +53 -0
  347. package/dist/hooks/session-recovery/index.d.ts.map +1 -0
  348. package/dist/hooks/session-recovery/index.js +321 -0
  349. package/dist/hooks/session-recovery/index.js.map +1 -0
  350. package/dist/hooks/session-recovery/storage.d.ts +76 -0
  351. package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
  352. package/dist/hooks/session-recovery/storage.js +383 -0
  353. package/dist/hooks/session-recovery/storage.js.map +1 -0
  354. package/dist/hooks/session-recovery/types.d.ts +145 -0
  355. package/dist/hooks/session-recovery/types.d.ts.map +1 -0
  356. package/dist/hooks/session-recovery/types.js +8 -0
  357. package/dist/hooks/session-recovery/types.js.map +1 -0
  358. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
  359. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
  360. package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
  361. package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
  362. package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
  363. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
  364. package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
  365. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
  366. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  367. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  368. package/dist/hooks/ultraqa-loop/index.js +216 -0
  369. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  370. package/dist/hooks/ultrawork-state/index.d.ts +62 -0
  371. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  372. package/dist/hooks/ultrawork-state/index.js +208 -0
  373. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  374. package/dist/hud/analytics-display.d.ts.map +1 -1
  375. package/dist/hud/analytics-display.js +0 -1
  376. package/dist/hud/analytics-display.js.map +1 -1
  377. package/dist/hud/index.js +52 -3
  378. package/dist/hud/index.js.map +1 -1
  379. package/dist/hud/sisyphus-state.d.ts +31 -0
  380. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  381. package/dist/hud/sisyphus-state.js +163 -0
  382. package/dist/hud/sisyphus-state.js.map +1 -0
  383. package/dist/installer/index.d.ts +1 -1
  384. package/dist/installer/index.js +1 -1
  385. package/package.json +1 -1
  386. package/scripts/github-webhook-server.ts +141 -0
  387. package/skills/hud/SKILL.md +3 -1
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Session Recovery Hook
3
+ *
4
+ * Helps recover session state when Claude Code restarts or crashes.
5
+ * Detects and fixes various error conditions that can cause session failures.
6
+ *
7
+ * Adapted from oh-my-opencode's session-recovery hook for Claude Code's
8
+ * shell hook system.
9
+ *
10
+ * Recovery Strategies:
11
+ * 1. Tool Result Missing: Inject cancelled tool results for orphaned tool_use
12
+ * 2. Thinking Block Order: Fix messages where thinking isn't first
13
+ * 3. Thinking Disabled: Strip thinking blocks when model doesn't support them
14
+ * 4. Empty Content: Add placeholder text to empty messages
15
+ */
16
+ import { appendFileSync } from "node:fs";
17
+ import { findEmptyMessages, findEmptyMessageByIndex, findMessageByIndexNeedingThinking, findMessagesWithEmptyTextParts, findMessagesWithOrphanThinking, findMessagesWithThinkingBlocks, findMessagesWithThinkingOnly, injectTextPart, prependThinkingPart, readParts, replaceEmptyTextParts, stripThinkingParts, } from "./storage.js";
18
+ import { DEBUG, DEBUG_LOG_PATH, PLACEHOLDER_TEXT, RECOVERY_MESSAGES, } from "./constants.js";
19
+ /**
20
+ * Debug logging utility
21
+ */
22
+ function debugLog(...args) {
23
+ if (DEBUG) {
24
+ const msg = `[${new Date().toISOString()}] [session-recovery] ${args
25
+ .map((a) => (typeof a === "object" ? JSON.stringify(a, null, 2) : String(a)))
26
+ .join(" ")}\n`;
27
+ appendFileSync(DEBUG_LOG_PATH, msg);
28
+ }
29
+ }
30
+ /**
31
+ * Extract error message from various error formats
32
+ */
33
+ function getErrorMessage(error) {
34
+ if (!error)
35
+ return "";
36
+ if (typeof error === "string")
37
+ return error.toLowerCase();
38
+ const errorObj = error;
39
+ const paths = [
40
+ errorObj.data,
41
+ errorObj.error,
42
+ errorObj,
43
+ errorObj.data?.error,
44
+ ];
45
+ for (const obj of paths) {
46
+ if (obj && typeof obj === "object") {
47
+ const msg = obj.message;
48
+ if (typeof msg === "string" && msg.length > 0) {
49
+ return msg.toLowerCase();
50
+ }
51
+ }
52
+ }
53
+ try {
54
+ return JSON.stringify(error).toLowerCase();
55
+ }
56
+ catch {
57
+ return "";
58
+ }
59
+ }
60
+ /**
61
+ * Extract message index from error (e.g., "messages.5")
62
+ */
63
+ function extractMessageIndex(error) {
64
+ const message = getErrorMessage(error);
65
+ const match = message.match(/messages\.(\d+)/);
66
+ return match ? parseInt(match[1], 10) : null;
67
+ }
68
+ /**
69
+ * Detect the type of recoverable error
70
+ */
71
+ export function detectErrorType(error) {
72
+ const message = getErrorMessage(error);
73
+ if (message.includes("tool_use") && message.includes("tool_result")) {
74
+ return "tool_result_missing";
75
+ }
76
+ if (message.includes("thinking") &&
77
+ (message.includes("first block") ||
78
+ message.includes("must start with") ||
79
+ message.includes("preceeding") ||
80
+ message.includes("final block") ||
81
+ message.includes("cannot be thinking") ||
82
+ (message.includes("expected") && message.includes("found")))) {
83
+ return "thinking_block_order";
84
+ }
85
+ if (message.includes("thinking is disabled") && message.includes("cannot contain")) {
86
+ return "thinking_disabled_violation";
87
+ }
88
+ if (message.includes("empty") &&
89
+ (message.includes("content") || message.includes("message"))) {
90
+ return "empty_content";
91
+ }
92
+ return null;
93
+ }
94
+ /**
95
+ * Check if an error is recoverable
96
+ */
97
+ export function isRecoverableError(error) {
98
+ return detectErrorType(error) !== null;
99
+ }
100
+ /**
101
+ * Extract tool_use IDs from message parts
102
+ */
103
+ function extractToolUseIds(parts) {
104
+ return parts
105
+ .filter((p) => p.type === "tool_use" && !!p.id)
106
+ .map((p) => p.id);
107
+ }
108
+ /**
109
+ * Recover from missing tool results
110
+ */
111
+ async function recoverToolResultMissing(sessionID, failedAssistantMsg) {
112
+ debugLog("recoverToolResultMissing", { sessionID, msgId: failedAssistantMsg.info?.id });
113
+ // Try API parts first, fallback to filesystem if empty
114
+ let parts = failedAssistantMsg.parts || [];
115
+ if (parts.length === 0 && failedAssistantMsg.info?.id) {
116
+ const storedParts = readParts(failedAssistantMsg.info.id);
117
+ parts = storedParts.map((p) => ({
118
+ type: p.type === "tool" ? "tool_use" : p.type,
119
+ id: "callID" in p ? p.callID : p.id,
120
+ name: "tool" in p ? p.tool : undefined,
121
+ input: "state" in p
122
+ ? p.state?.input
123
+ : undefined,
124
+ }));
125
+ }
126
+ const toolUseIds = extractToolUseIds(parts);
127
+ if (toolUseIds.length === 0) {
128
+ debugLog("No tool_use IDs found");
129
+ return false;
130
+ }
131
+ debugLog("Found tool_use IDs to inject results for", toolUseIds);
132
+ // Note: In Claude Code's simplified architecture, we would need to
133
+ // integrate with the actual session/tool system to inject tool results.
134
+ // This is a placeholder showing the recovery intent.
135
+ // A full implementation would require access to the SDK client.
136
+ return true; // Indicate recovery was attempted
137
+ }
138
+ /**
139
+ * Recover from thinking block order errors
140
+ */
141
+ async function recoverThinkingBlockOrder(sessionID, _failedAssistantMsg, error) {
142
+ debugLog("recoverThinkingBlockOrder", { sessionID });
143
+ const targetIndex = extractMessageIndex(error);
144
+ if (targetIndex !== null) {
145
+ const targetMessageID = findMessageByIndexNeedingThinking(sessionID, targetIndex);
146
+ if (targetMessageID) {
147
+ debugLog("Found target message by index", { targetIndex, targetMessageID });
148
+ return prependThinkingPart(sessionID, targetMessageID);
149
+ }
150
+ }
151
+ const orphanMessages = findMessagesWithOrphanThinking(sessionID);
152
+ if (orphanMessages.length === 0) {
153
+ debugLog("No orphan thinking messages found");
154
+ return false;
155
+ }
156
+ debugLog("Found orphan thinking messages", orphanMessages);
157
+ let anySuccess = false;
158
+ for (const messageID of orphanMessages) {
159
+ if (prependThinkingPart(sessionID, messageID)) {
160
+ anySuccess = true;
161
+ }
162
+ }
163
+ return anySuccess;
164
+ }
165
+ /**
166
+ * Recover from thinking disabled violations
167
+ */
168
+ async function recoverThinkingDisabledViolation(sessionID, _failedAssistantMsg) {
169
+ debugLog("recoverThinkingDisabledViolation", { sessionID });
170
+ const messagesWithThinking = findMessagesWithThinkingBlocks(sessionID);
171
+ if (messagesWithThinking.length === 0) {
172
+ debugLog("No messages with thinking blocks found");
173
+ return false;
174
+ }
175
+ debugLog("Found messages with thinking blocks", messagesWithThinking);
176
+ let anySuccess = false;
177
+ for (const messageID of messagesWithThinking) {
178
+ if (stripThinkingParts(messageID)) {
179
+ anySuccess = true;
180
+ }
181
+ }
182
+ return anySuccess;
183
+ }
184
+ /**
185
+ * Recover from empty content messages
186
+ */
187
+ async function recoverEmptyContentMessage(sessionID, failedAssistantMsg, error) {
188
+ debugLog("recoverEmptyContentMessage", { sessionID });
189
+ const targetIndex = extractMessageIndex(error);
190
+ const failedID = failedAssistantMsg.info?.id;
191
+ let anySuccess = false;
192
+ // Fix messages with empty text parts
193
+ const messagesWithEmptyText = findMessagesWithEmptyTextParts(sessionID);
194
+ for (const messageID of messagesWithEmptyText) {
195
+ if (replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)) {
196
+ anySuccess = true;
197
+ }
198
+ }
199
+ // Fix messages with only thinking
200
+ const thinkingOnlyIDs = findMessagesWithThinkingOnly(sessionID);
201
+ for (const messageID of thinkingOnlyIDs) {
202
+ if (injectTextPart(sessionID, messageID, PLACEHOLDER_TEXT)) {
203
+ anySuccess = true;
204
+ }
205
+ }
206
+ // Try target index if provided
207
+ if (targetIndex !== null) {
208
+ const targetMessageID = findEmptyMessageByIndex(sessionID, targetIndex);
209
+ if (targetMessageID) {
210
+ if (replaceEmptyTextParts(targetMessageID, PLACEHOLDER_TEXT)) {
211
+ return true;
212
+ }
213
+ if (injectTextPart(sessionID, targetMessageID, PLACEHOLDER_TEXT)) {
214
+ return true;
215
+ }
216
+ }
217
+ }
218
+ // Try failed message ID
219
+ if (failedID) {
220
+ if (replaceEmptyTextParts(failedID, PLACEHOLDER_TEXT)) {
221
+ return true;
222
+ }
223
+ if (injectTextPart(sessionID, failedID, PLACEHOLDER_TEXT)) {
224
+ return true;
225
+ }
226
+ }
227
+ // Fix all empty messages as last resort
228
+ const emptyMessageIDs = findEmptyMessages(sessionID);
229
+ for (const messageID of emptyMessageIDs) {
230
+ if (replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)) {
231
+ anySuccess = true;
232
+ }
233
+ if (injectTextPart(sessionID, messageID, PLACEHOLDER_TEXT)) {
234
+ anySuccess = true;
235
+ }
236
+ }
237
+ return anySuccess;
238
+ }
239
+ /**
240
+ * Main recovery handler
241
+ */
242
+ export async function handleSessionRecovery(sessionID, error, failedMessage, config) {
243
+ debugLog("handleSessionRecovery", { sessionID, error });
244
+ const errorType = detectErrorType(error);
245
+ if (!errorType) {
246
+ debugLog("Not a recoverable error");
247
+ return {
248
+ attempted: false,
249
+ success: false,
250
+ };
251
+ }
252
+ debugLog("Detected recoverable error type", errorType);
253
+ try {
254
+ let success = false;
255
+ const failedMsg = failedMessage || { info: {}, parts: [] };
256
+ switch (errorType) {
257
+ case "tool_result_missing":
258
+ success = await recoverToolResultMissing(sessionID, failedMsg);
259
+ break;
260
+ case "thinking_block_order":
261
+ success = await recoverThinkingBlockOrder(sessionID, failedMsg, error);
262
+ break;
263
+ case "thinking_disabled_violation":
264
+ success = await recoverThinkingDisabledViolation(sessionID, failedMsg);
265
+ break;
266
+ case "empty_content":
267
+ success = await recoverEmptyContentMessage(sessionID, failedMsg, error);
268
+ break;
269
+ }
270
+ debugLog("Recovery result", { errorType, success });
271
+ const recoveryMessage = config?.customMessages?.[errorType] ||
272
+ RECOVERY_MESSAGES[errorType]?.message ||
273
+ `Session recovery attempted for ${errorType}`;
274
+ return {
275
+ attempted: true,
276
+ success,
277
+ message: success ? recoveryMessage : undefined,
278
+ errorType,
279
+ };
280
+ }
281
+ catch (err) {
282
+ debugLog("Recovery failed with error", err);
283
+ return {
284
+ attempted: true,
285
+ success: false,
286
+ errorType,
287
+ };
288
+ }
289
+ }
290
+ /**
291
+ * Create session recovery hook for Claude Code
292
+ */
293
+ export function createSessionRecoveryHook(config) {
294
+ debugLog("createSessionRecoveryHook", { config });
295
+ return {
296
+ /**
297
+ * Check for errors during tool execution or message processing
298
+ */
299
+ onError: async (input) => {
300
+ return handleSessionRecovery(input.session_id, input.error, input.message, config);
301
+ },
302
+ /**
303
+ * Check if an error is recoverable
304
+ */
305
+ isRecoverable: (error) => {
306
+ return isRecoverableError(error);
307
+ },
308
+ /**
309
+ * Get recovery message for an error type
310
+ */
311
+ getRecoveryMessage: (errorType) => {
312
+ if (!errorType)
313
+ return undefined;
314
+ return config?.customMessages?.[errorType] ||
315
+ RECOVERY_MESSAGES[errorType]?.message;
316
+ },
317
+ };
318
+ }
319
+ export { RECOVERY_MESSAGES, PLACEHOLDER_TEXT, } from "./constants.js";
320
+ export { findEmptyMessages, findMessagesWithThinkingBlocks, findMessagesWithOrphanThinking, readMessages, readParts, } from "./storage.js";
321
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/session-recovery/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Session Recovery Storage Operations
3
+ *
4
+ * Functions for reading and manipulating stored session data.
5
+ * Adapted from oh-my-opencode's session-recovery hook.
6
+ */
7
+ import type { StoredMessageMeta, StoredPart } from "./types.js";
8
+ /**
9
+ * Generate a unique part ID
10
+ */
11
+ export declare function generatePartId(): string;
12
+ /**
13
+ * Get the directory containing messages for a session
14
+ */
15
+ export declare function getMessageDir(sessionID: string): string;
16
+ /**
17
+ * Read all messages for a session
18
+ */
19
+ export declare function readMessages(sessionID: string): StoredMessageMeta[];
20
+ /**
21
+ * Read all parts for a message
22
+ */
23
+ export declare function readParts(messageID: string): StoredPart[];
24
+ /**
25
+ * Check if a part has content (not thinking/meta)
26
+ */
27
+ export declare function hasContent(part: StoredPart): boolean;
28
+ /**
29
+ * Check if a message has content
30
+ */
31
+ export declare function messageHasContent(messageID: string): boolean;
32
+ /**
33
+ * Inject a text part into a message
34
+ */
35
+ export declare function injectTextPart(sessionID: string, messageID: string, text: string): boolean;
36
+ /**
37
+ * Find all messages with empty content
38
+ */
39
+ export declare function findEmptyMessages(sessionID: string): string[];
40
+ /**
41
+ * Find empty message by index (with fuzzy matching)
42
+ */
43
+ export declare function findEmptyMessageByIndex(sessionID: string, targetIndex: number): string | null;
44
+ /**
45
+ * Find messages that have thinking blocks
46
+ */
47
+ export declare function findMessagesWithThinkingBlocks(sessionID: string): string[];
48
+ /**
49
+ * Find messages that have thinking but no content
50
+ */
51
+ export declare function findMessagesWithThinkingOnly(sessionID: string): string[];
52
+ /**
53
+ * Find messages with orphan thinking (thinking not first)
54
+ */
55
+ export declare function findMessagesWithOrphanThinking(sessionID: string): string[];
56
+ /**
57
+ * Prepend a thinking part to a message
58
+ */
59
+ export declare function prependThinkingPart(sessionID: string, messageID: string): boolean;
60
+ /**
61
+ * Strip all thinking parts from a message
62
+ */
63
+ export declare function stripThinkingParts(messageID: string): boolean;
64
+ /**
65
+ * Replace empty text parts with placeholder text
66
+ */
67
+ export declare function replaceEmptyTextParts(messageID: string, replacementText?: string): boolean;
68
+ /**
69
+ * Find messages with empty text parts
70
+ */
71
+ export declare function findMessagesWithEmptyTextParts(sessionID: string): string[];
72
+ /**
73
+ * Find message by index that needs thinking block
74
+ */
75
+ export declare function findMessageByIndexNeedingThinking(sessionID: string, targetIndex: number): string | null;
76
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-recovery/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgBvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAqBnE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CAgBzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAkBpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAuBT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAW7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CA0Bf;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAe1E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB1E;AAkCD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAqB7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,eAAe,GAAE,MAAyB,GACzC,OAAO,CA2BT;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB1E;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAoBf"}