oh-my-claude-sisyphus 3.7.6 → 3.7.9

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 (428) hide show
  1. package/.claude-plugin/marketplace.json +24 -0
  2. package/.claude-plugin/plugin.json +7 -0
  3. package/.mcp.json +8 -0
  4. package/agents/AGENTS.md +144 -0
  5. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  6. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  7. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  8. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  9. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  10. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  11. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  12. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  13. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  14. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  15. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  16. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  17. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  18. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  20. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  21. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  22. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  23. package/dist/__tests__/learned-skills/config.test.js +37 -0
  24. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  25. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  26. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  27. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  28. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  29. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  30. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  31. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  32. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  33. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  34. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  35. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  36. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  37. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  38. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  39. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  40. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  41. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  42. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  43. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  44. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  45. package/dist/__tests__/omc-tools-server.test.d.ts +2 -0
  46. package/dist/__tests__/omc-tools-server.test.d.ts.map +1 -0
  47. package/dist/__tests__/omc-tools-server.test.js +52 -0
  48. package/dist/__tests__/omc-tools-server.test.js.map +1 -0
  49. package/dist/agents/architect.js +1 -1
  50. package/dist/agents/architect.js.map +1 -1
  51. package/dist/agents/codex-agents.d.ts +20 -0
  52. package/dist/agents/codex-agents.d.ts.map +1 -0
  53. package/dist/agents/codex-agents.js +36 -0
  54. package/dist/agents/codex-agents.js.map +1 -0
  55. package/dist/agents/definitions.js +13 -13
  56. package/dist/agents/definitions.js.map +1 -1
  57. package/dist/agents/document-writer.d.ts +11 -0
  58. package/dist/agents/document-writer.d.ts.map +1 -0
  59. package/dist/agents/document-writer.js +209 -0
  60. package/dist/agents/document-writer.js.map +1 -0
  61. package/dist/agents/executor.js +1 -1
  62. package/dist/agents/executor.js.map +1 -1
  63. package/dist/agents/explore.js +1 -1
  64. package/dist/agents/explore.js.map +1 -1
  65. package/dist/agents/frontend-engineer.d.ts +11 -0
  66. package/dist/agents/frontend-engineer.d.ts.map +1 -0
  67. package/dist/agents/frontend-engineer.js +115 -0
  68. package/dist/agents/frontend-engineer.js.map +1 -0
  69. package/dist/agents/librarian.d.ts +12 -0
  70. package/dist/agents/librarian.d.ts.map +1 -0
  71. package/dist/agents/librarian.js +103 -0
  72. package/dist/agents/librarian.js.map +1 -0
  73. package/dist/agents/metis.d.ts +12 -0
  74. package/dist/agents/metis.d.ts.map +1 -0
  75. package/dist/agents/metis.js +117 -0
  76. package/dist/agents/metis.js.map +1 -0
  77. package/dist/agents/momus.d.ts +12 -0
  78. package/dist/agents/momus.d.ts.map +1 -0
  79. package/dist/agents/momus.js +128 -0
  80. package/dist/agents/momus.js.map +1 -0
  81. package/dist/agents/multimodal-looker.d.ts +11 -0
  82. package/dist/agents/multimodal-looker.d.ts.map +1 -0
  83. package/dist/agents/multimodal-looker.js +70 -0
  84. package/dist/agents/multimodal-looker.js.map +1 -0
  85. package/dist/agents/oracle.d.ts +13 -0
  86. package/dist/agents/oracle.d.ts.map +1 -0
  87. package/dist/agents/oracle.js +191 -0
  88. package/dist/agents/oracle.js.map +1 -0
  89. package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
  90. package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
  91. package/dist/agents/orchestrator-sisyphus.js +115 -0
  92. package/dist/agents/orchestrator-sisyphus.js.map +1 -0
  93. package/dist/agents/prometheus.d.ts +12 -0
  94. package/dist/agents/prometheus.d.ts.map +1 -0
  95. package/dist/agents/prometheus.js +195 -0
  96. package/dist/agents/prometheus.js.map +1 -0
  97. package/dist/agents/qa-tester.js +1 -1
  98. package/dist/agents/qa-tester.js.map +1 -1
  99. package/dist/agents/sisyphus-junior.d.ts +12 -0
  100. package/dist/agents/sisyphus-junior.d.ts.map +1 -0
  101. package/dist/agents/sisyphus-junior.js +93 -0
  102. package/dist/agents/sisyphus-junior.js.map +1 -0
  103. package/dist/cli/analytics.js +0 -0
  104. package/dist/cli/components/CostDashboard.d.ts +15 -0
  105. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  106. package/dist/cli/components/CostDashboard.js +15 -0
  107. package/dist/cli/components/CostDashboard.js.map +1 -0
  108. package/dist/cli/components/LiveStats.d.ts +16 -0
  109. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  110. package/dist/cli/components/LiveStats.js +16 -0
  111. package/dist/cli/components/LiveStats.js.map +1 -0
  112. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  113. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  114. package/dist/cli/components/SessionBrowser.js +14 -0
  115. package/dist/cli/components/SessionBrowser.js.map +1 -0
  116. package/dist/cli/index.js +0 -0
  117. package/dist/cli/tui.d.ts +21 -0
  118. package/dist/cli/tui.d.ts.map +1 -0
  119. package/dist/cli/tui.js +21 -0
  120. package/dist/cli/tui.js.map +1 -0
  121. package/dist/hooks/autopilot/signals.d.ts +20 -0
  122. package/dist/hooks/autopilot/signals.d.ts.map +1 -0
  123. package/dist/hooks/autopilot/signals.js +75 -0
  124. package/dist/hooks/autopilot/signals.js.map +1 -0
  125. package/dist/hooks/autopilot/summary.d.ts +27 -0
  126. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  127. package/dist/hooks/autopilot/summary.js +160 -0
  128. package/dist/hooks/autopilot/summary.js.map +1 -0
  129. package/dist/hooks/autopilot/transition.d.ts +39 -0
  130. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  131. package/dist/hooks/autopilot/transition.js +216 -0
  132. package/dist/hooks/autopilot/transition.js.map +1 -0
  133. package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
  134. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
  135. package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
  136. package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
  137. package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
  138. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
  139. package/dist/hooks/context-window-limit-recovery/index.js +201 -0
  140. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
  141. package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
  142. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
  143. package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
  144. package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
  145. package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
  146. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
  147. package/dist/hooks/context-window-limit-recovery/types.js +34 -0
  148. package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
  149. package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
  150. package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
  151. package/dist/hooks/edit-error-recovery/index.js +89 -0
  152. package/dist/hooks/edit-error-recovery/index.js.map +1 -0
  153. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  154. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  155. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  156. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  157. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  158. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  159. package/dist/hooks/github-auto-responder/config.js +69 -0
  160. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  161. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  162. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  163. package/dist/hooks/github-auto-responder/constants.js +60 -0
  164. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  165. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  166. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  167. package/dist/hooks/github-auto-responder/filters.js +174 -0
  168. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  169. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  170. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  171. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  172. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  173. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  174. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  175. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  176. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  177. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  178. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  179. package/dist/hooks/github-auto-responder/index.js +145 -0
  180. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  181. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  182. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  183. package/dist/hooks/github-auto-responder/persona.js +99 -0
  184. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  185. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  186. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  187. package/dist/hooks/github-auto-responder/responder.js +264 -0
  188. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  189. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  190. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  191. package/dist/hooks/github-auto-responder/server.js +301 -0
  192. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  193. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  194. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  195. package/dist/hooks/github-auto-responder/signature.js +79 -0
  196. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  197. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  198. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  199. package/dist/hooks/github-auto-responder/templates.js +93 -0
  200. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  201. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  202. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  203. package/dist/hooks/github-auto-responder/types.js +7 -0
  204. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  205. package/dist/hooks/learned-skills/config.d.ts +53 -0
  206. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  207. package/dist/hooks/learned-skills/config.js +103 -0
  208. package/dist/hooks/learned-skills/config.js.map +1 -0
  209. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  210. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  211. package/dist/hooks/learned-skills/constants.js +26 -0
  212. package/dist/hooks/learned-skills/constants.js.map +1 -0
  213. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  214. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  215. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  216. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  217. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  218. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  219. package/dist/hooks/learned-skills/detector.js +150 -0
  220. package/dist/hooks/learned-skills/detector.js.map +1 -0
  221. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  222. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  223. package/dist/hooks/learned-skills/finder.js +117 -0
  224. package/dist/hooks/learned-skills/finder.js.map +1 -0
  225. package/dist/hooks/learned-skills/index.d.ts +62 -0
  226. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  227. package/dist/hooks/learned-skills/index.js +137 -0
  228. package/dist/hooks/learned-skills/index.js.map +1 -0
  229. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  230. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  231. package/dist/hooks/learned-skills/loader.js +107 -0
  232. package/dist/hooks/learned-skills/loader.js.map +1 -0
  233. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  234. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  235. package/dist/hooks/learned-skills/parser.js +190 -0
  236. package/dist/hooks/learned-skills/parser.js.map +1 -0
  237. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  238. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  239. package/dist/hooks/learned-skills/promotion.js +87 -0
  240. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  241. package/dist/hooks/learned-skills/types.d.ts +109 -0
  242. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  243. package/dist/hooks/learned-skills/types.js +8 -0
  244. package/dist/hooks/learned-skills/types.js.map +1 -0
  245. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  246. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  247. package/dist/hooks/learned-skills/validator.js +87 -0
  248. package/dist/hooks/learned-skills/validator.js.map +1 -0
  249. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  250. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  251. package/dist/hooks/learned-skills/writer.js +126 -0
  252. package/dist/hooks/learned-skills/writer.js.map +1 -0
  253. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  254. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  255. package/dist/hooks/mnemosyne/config.js +103 -0
  256. package/dist/hooks/mnemosyne/config.js.map +1 -0
  257. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  258. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  259. package/dist/hooks/mnemosyne/constants.js +26 -0
  260. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  261. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  262. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  263. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  264. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  265. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  266. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  267. package/dist/hooks/mnemosyne/detector.js +150 -0
  268. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  269. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  270. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  271. package/dist/hooks/mnemosyne/finder.js +117 -0
  272. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  273. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  274. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  275. package/dist/hooks/mnemosyne/index.js +137 -0
  276. package/dist/hooks/mnemosyne/index.js.map +1 -0
  277. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  278. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  279. package/dist/hooks/mnemosyne/loader.js +113 -0
  280. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  281. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  282. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  283. package/dist/hooks/mnemosyne/parser.js +190 -0
  284. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  285. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  286. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  287. package/dist/hooks/mnemosyne/promotion.js +87 -0
  288. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  289. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  290. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  291. package/dist/hooks/mnemosyne/types.js +8 -0
  292. package/dist/hooks/mnemosyne/types.js.map +1 -0
  293. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  294. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  295. package/dist/hooks/mnemosyne/validator.js +87 -0
  296. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  297. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  298. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  299. package/dist/hooks/mnemosyne/writer.js +126 -0
  300. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  301. package/dist/hooks/ralph-loop/index.d.ts +116 -0
  302. package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
  303. package/dist/hooks/ralph-loop/index.js +322 -0
  304. package/dist/hooks/ralph-loop/index.js.map +1 -0
  305. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  306. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  307. package/dist/hooks/ralph-prd/index.js +310 -0
  308. package/dist/hooks/ralph-prd/index.js.map +1 -0
  309. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  310. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  311. package/dist/hooks/ralph-progress/index.js +408 -0
  312. package/dist/hooks/ralph-progress/index.js.map +1 -0
  313. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  314. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  315. package/dist/hooks/ralph-verifier/index.js +223 -0
  316. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  317. package/dist/hooks/session-recovery/constants.d.ts +56 -0
  318. package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
  319. package/dist/hooks/session-recovery/constants.js +78 -0
  320. package/dist/hooks/session-recovery/constants.js.map +1 -0
  321. package/dist/hooks/session-recovery/index.d.ts +53 -0
  322. package/dist/hooks/session-recovery/index.d.ts.map +1 -0
  323. package/dist/hooks/session-recovery/index.js +321 -0
  324. package/dist/hooks/session-recovery/index.js.map +1 -0
  325. package/dist/hooks/session-recovery/storage.d.ts +76 -0
  326. package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
  327. package/dist/hooks/session-recovery/storage.js +383 -0
  328. package/dist/hooks/session-recovery/storage.js.map +1 -0
  329. package/dist/hooks/session-recovery/types.d.ts +145 -0
  330. package/dist/hooks/session-recovery/types.d.ts.map +1 -0
  331. package/dist/hooks/session-recovery/types.js +8 -0
  332. package/dist/hooks/session-recovery/types.js.map +1 -0
  333. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
  334. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
  335. package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
  336. package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
  337. package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
  338. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
  339. package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
  340. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
  341. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  342. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  343. package/dist/hooks/ultraqa-loop/index.js +216 -0
  344. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  345. package/dist/hooks/ultrawork-state/index.d.ts +62 -0
  346. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  347. package/dist/hooks/ultrawork-state/index.js +208 -0
  348. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  349. package/dist/hud/sisyphus-state.d.ts +31 -0
  350. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  351. package/dist/hud/sisyphus-state.js +163 -0
  352. package/dist/hud/sisyphus-state.js.map +1 -0
  353. package/dist/index.d.ts +1 -0
  354. package/dist/index.d.ts.map +1 -1
  355. package/dist/index.js +15 -3
  356. package/dist/index.js.map +1 -1
  357. package/dist/mcp/index.d.ts +1 -0
  358. package/dist/mcp/index.d.ts.map +1 -1
  359. package/dist/mcp/index.js +2 -0
  360. package/dist/mcp/index.js.map +1 -1
  361. package/dist/mcp/omc-tools-server.d.ts +25 -0
  362. package/dist/mcp/omc-tools-server.d.ts.map +1 -0
  363. package/dist/mcp/omc-tools-server.js +49 -0
  364. package/dist/mcp/omc-tools-server.js.map +1 -0
  365. package/dist/mcp/standalone-server.d.ts +11 -0
  366. package/dist/mcp/standalone-server.d.ts.map +1 -0
  367. package/dist/mcp/standalone-server.js +139 -0
  368. package/dist/mcp/standalone-server.js.map +1 -0
  369. package/dist/tools/ast-tools.d.ts.map +1 -1
  370. package/dist/tools/ast-tools.js +19 -39
  371. package/dist/tools/ast-tools.js.map +1 -1
  372. package/dist/tools/diagnostics/index.d.ts +7 -32
  373. package/dist/tools/diagnostics/index.d.ts.map +1 -1
  374. package/dist/tools/diagnostics/index.js +41 -171
  375. package/dist/tools/diagnostics/index.js.map +1 -1
  376. package/dist/tools/diagnostics/lsp-aggregator.d.ts +1 -13
  377. package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
  378. package/dist/tools/diagnostics/lsp-aggregator.js +4 -32
  379. package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
  380. package/dist/tools/diagnostics/tsc-runner.d.ts +0 -6
  381. package/dist/tools/diagnostics/tsc-runner.d.ts.map +1 -1
  382. package/dist/tools/diagnostics/tsc-runner.js +5 -32
  383. package/dist/tools/diagnostics/tsc-runner.js.map +1 -1
  384. package/dist/tools/lsp/client.d.ts.map +1 -1
  385. package/dist/tools/lsp/client.js +1 -26
  386. package/dist/tools/lsp/client.js.map +1 -1
  387. package/dist/tools/lsp/servers.d.ts +0 -3
  388. package/dist/tools/lsp/servers.d.ts.map +1 -1
  389. package/dist/tools/lsp/servers.js +4 -111
  390. package/dist/tools/lsp/servers.js.map +1 -1
  391. package/dist/tools/lsp-tools.d.ts +2 -2
  392. package/dist/tools/lsp-tools.d.ts.map +1 -1
  393. package/dist/tools/lsp-tools.js +2 -2
  394. package/dist/tools/lsp-tools.js.map +1 -1
  395. package/package.json +4 -2
  396. package/skills/AGENTS.md +187 -0
  397. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts +0 -5
  398. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts.map +0 -1
  399. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js +0 -42
  400. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js.map +0 -1
  401. package/dist/tools/diagnostics/__tests__/integration.test.d.ts +0 -5
  402. package/dist/tools/diagnostics/__tests__/integration.test.d.ts.map +0 -1
  403. package/dist/tools/diagnostics/__tests__/integration.test.js +0 -66
  404. package/dist/tools/diagnostics/__tests__/integration.test.js.map +0 -1
  405. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts +0 -5
  406. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts.map +0 -1
  407. package/dist/tools/diagnostics/__tests__/parser-tests.js +0 -86
  408. package/dist/tools/diagnostics/__tests__/parser-tests.js.map +0 -1
  409. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts +0 -5
  410. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts.map +0 -1
  411. package/dist/tools/diagnostics/__tests__/parsers.test.js +0 -199
  412. package/dist/tools/diagnostics/__tests__/parsers.test.js.map +0 -1
  413. package/dist/tools/diagnostics/constants.d.ts +0 -9
  414. package/dist/tools/diagnostics/constants.d.ts.map +0 -1
  415. package/dist/tools/diagnostics/constants.js +0 -9
  416. package/dist/tools/diagnostics/constants.js.map +0 -1
  417. package/dist/tools/diagnostics/go-runner.d.ts +0 -31
  418. package/dist/tools/diagnostics/go-runner.d.ts.map +0 -1
  419. package/dist/tools/diagnostics/go-runner.js +0 -78
  420. package/dist/tools/diagnostics/go-runner.js.map +0 -1
  421. package/dist/tools/diagnostics/python-runner.d.ts +0 -39
  422. package/dist/tools/diagnostics/python-runner.d.ts.map +0 -1
  423. package/dist/tools/diagnostics/python-runner.js +0 -200
  424. package/dist/tools/diagnostics/python-runner.js.map +0 -1
  425. package/dist/tools/diagnostics/rust-runner.d.ts +0 -34
  426. package/dist/tools/diagnostics/rust-runner.d.ts.map +0 -1
  427. package/dist/tools/diagnostics/rust-runner.js +0 -106
  428. package/dist/tools/diagnostics/rust-runner.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ <!-- Parent: ../AGENTS.md -->
2
+ <!-- Generated: 2026-01-28 | Updated: 2026-01-28 -->
3
+
4
+ # skills
5
+
6
+ 32 skill definitions for workflow automation and specialized behaviors.
7
+
8
+ ## Purpose
9
+
10
+ Skills are reusable workflow templates that can be invoked via `/oh-my-claudecode:skill-name`. Each skill provides:
11
+ - Structured prompts for specific workflows
12
+ - Activation triggers (manual or automatic)
13
+ - Integration with execution modes
14
+
15
+ ## Key Files
16
+
17
+ ### Execution Mode Skills
18
+ | File | Skill | Purpose |
19
+ |------|-------|---------|
20
+ | `autopilot.md` | autopilot | Full autonomous execution from idea to working code |
21
+ | `ultrawork.md` | ultrawork | Maximum parallel agent execution |
22
+ | `ralph.md` | ralph | Persistence until verified complete |
23
+ | `ultrapilot.md` | ultrapilot | Parallel autopilot with file ownership |
24
+ | `swarm.md` | swarm | N coordinated agents with task claiming |
25
+ | `pipeline.md` | pipeline | Sequential agent chaining |
26
+ | `ecomode.md` | ecomode | Token-efficient parallel execution |
27
+ | `ultraqa.md` | ultraqa | QA cycling until goal met |
28
+
29
+ ### Planning Skills
30
+ | File | Skill | Purpose |
31
+ |------|-------|---------|
32
+ | `plan.md` | plan | Strategic planning with interview workflow |
33
+ | `ralplan.md` | ralplan | Iterative planning (Planner+Architect+Critic) |
34
+ | `review.md` | review | Review plan with Critic |
35
+ | `analyze.md` | analyze | Deep analysis and investigation |
36
+ | `ralph-init.md` | ralph-init | Initialize PRD for structured ralph |
37
+
38
+ ### Code Quality Skills
39
+ | File | Skill | Purpose |
40
+ |------|-------|---------|
41
+ | `code-review.md` | code-review | Comprehensive code review |
42
+ | `security-review.md` | security-review | Security vulnerability detection |
43
+ | `tdd.md` | tdd | Test-driven development workflow |
44
+ | `build-fix.md` | build-fix | Fix build and TypeScript errors |
45
+
46
+ ### Exploration Skills
47
+ | File | Skill | Purpose |
48
+ |------|-------|---------|
49
+ | `deepsearch.md` | deepsearch | Thorough codebase search |
50
+ | `deepinit.md` | deepinit | Generate hierarchical AGENTS.md |
51
+ | `research.md` | research | Parallel scientist orchestration |
52
+
53
+ ### Utility Skills
54
+ | File | Skill | Purpose |
55
+ |------|-------|---------|
56
+ | `learner.md` | learner | Extract reusable skill from session |
57
+ | `note.md` | note | Save notes for compaction resilience |
58
+ | `cancel.md` | cancel | Cancel any active OMC mode |
59
+ | `hud.md` | hud | Configure HUD display |
60
+ | `doctor.md` | doctor | Diagnose installation issues |
61
+ | `omc-setup.md` | omc-setup | One-time setup wizard |
62
+ | `mcp-setup.md` | mcp-setup | Configure MCP servers |
63
+ | `help.md` | help | Usage guide |
64
+
65
+ ### Domain Skills
66
+ | File | Skill | Purpose |
67
+ |------|-------|---------|
68
+ | `frontend-ui-ux.md` | frontend-ui-ux | Designer-developer aesthetic |
69
+ | `git-master.md` | git-master | Git expertise, atomic commits |
70
+ | `project-session-manager.md` | psm | Isolated dev environments |
71
+ | `writer-memory.md` | writer-memory | Agentic memory for writers |
72
+ | `release.md` | release | Automated release workflow |
73
+ | `local-skills-setup.md` | local-skills-setup | Manage local skills |
74
+
75
+ ## For AI Agents
76
+
77
+ ### Working In This Directory
78
+
79
+ #### Skill Template Format
80
+
81
+ ```markdown
82
+ ---
83
+ name: skill-name
84
+ description: Brief description
85
+ triggers:
86
+ - "keyword1"
87
+ - "keyword2"
88
+ agent: executor # Optional: which agent to use
89
+ model: sonnet # Optional: model override
90
+ ---
91
+
92
+ # Skill Name
93
+
94
+ ## Purpose
95
+ What this skill accomplishes.
96
+
97
+ ## Workflow
98
+ 1. Step one
99
+ 2. Step two
100
+ 3. Step three
101
+
102
+ ## Usage
103
+ How to invoke this skill.
104
+
105
+ ## Configuration
106
+ Any configurable options.
107
+ ```
108
+
109
+ #### Skill Invocation
110
+
111
+ ```bash
112
+ # Manual invocation
113
+ /oh-my-claudecode:skill-name
114
+
115
+ # With arguments
116
+ /oh-my-claudecode:skill-name arg1 arg2
117
+
118
+ # Auto-detected from keywords
119
+ "autopilot build me a REST API" # Triggers autopilot skill
120
+ ```
121
+
122
+ #### Creating a New Skill
123
+
124
+ 1. Create `new-skill.md` with YAML frontmatter
125
+ 2. Define purpose, workflow, and usage
126
+ 3. Add to skill registry (auto-detected from frontmatter)
127
+ 4. Optionally add activation triggers
128
+
129
+ ### Common Patterns
130
+
131
+ **Skill chaining:**
132
+ ```markdown
133
+ ## Workflow
134
+ 1. Invoke `explore` agent for context
135
+ 2. Invoke `architect` for analysis
136
+ 3. Invoke `executor` for implementation
137
+ 4. Invoke `qa-tester` for verification
138
+ ```
139
+
140
+ **Conditional behavior:**
141
+ ```markdown
142
+ ## Workflow
143
+ 1. Check if tests exist
144
+ - If yes: Run tests first
145
+ - If no: Create test plan
146
+ 2. Proceed with implementation
147
+ ```
148
+
149
+ ### Testing Requirements
150
+
151
+ Skills are tested via integration tests that invoke skills and verify behavior.
152
+
153
+ ## Dependencies
154
+
155
+ ### Internal
156
+ - Loaded by skill bridge (`scripts/build-skill-bridge.mjs`)
157
+ - References agents from `agents/`
158
+ - Uses hooks from `src/hooks/`
159
+
160
+ ### External
161
+ None - pure markdown files.
162
+
163
+ ## Skill Categories
164
+
165
+ | Category | Skills | Trigger Keywords |
166
+ |----------|--------|------------------|
167
+ | Execution | autopilot, ultrawork, ralph, ultrapilot, swarm, pipeline, ecomode | "autopilot", "ulw", "ralph", "swarm", "eco" |
168
+ | Planning | plan, ralplan, review, analyze, ralph-init | "plan this", "analyze" |
169
+ | Quality | code-review, security-review, tdd, build-fix | "review", "security", "tdd" |
170
+ | Exploration | deepsearch, deepinit, research | "search", "research" |
171
+ | Utility | learner, note, cancel, hud, doctor, omc-setup, mcp-setup, help | "stop", "cancel" |
172
+ | Domain | frontend-ui-ux, git-master, psm, writer-memory, release | UI context, git context |
173
+
174
+ ## Auto-Activation
175
+
176
+ Some skills activate automatically based on context:
177
+
178
+ | Skill | Auto-Trigger Condition |
179
+ |-------|----------------------|
180
+ | autopilot | "autopilot", "build me", "I want a" |
181
+ | ultrawork | "ulw", "ultrawork" |
182
+ | ralph | "ralph", "don't stop until" |
183
+ | frontend-ui-ux | UI/component work detected |
184
+ | git-master | Git operations detected |
185
+ | cancel | "stop", "cancel", "abort" |
186
+
187
+ <!-- MANUAL: -->
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for detectProjectType function
3
- */
4
- export {};
5
- //# sourceMappingURL=detectProjectType.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detectProjectType.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/detectProjectType.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Unit tests for detectProjectType function
3
- */
4
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
- import { mkdtempSync, writeFileSync, rmSync } from 'fs';
6
- import { join } from 'path';
7
- import { tmpdir } from 'os';
8
- import { detectProjectType } from '../index.js';
9
- describe('detectProjectType', () => {
10
- let tempDir;
11
- beforeEach(() => {
12
- tempDir = mkdtempSync(join(tmpdir(), 'detect-test-'));
13
- });
14
- afterEach(() => {
15
- rmSync(tempDir, { recursive: true, force: true });
16
- });
17
- it('detects TypeScript project from tsconfig.json', () => {
18
- writeFileSync(join(tempDir, 'tsconfig.json'), '{}');
19
- expect(detectProjectType(tempDir)).toBe('typescript');
20
- });
21
- it('detects Go project from go.mod', () => {
22
- writeFileSync(join(tempDir, 'go.mod'), 'module test');
23
- expect(detectProjectType(tempDir)).toBe('go');
24
- });
25
- it('detects Rust project from Cargo.toml', () => {
26
- writeFileSync(join(tempDir, 'Cargo.toml'), '[package]');
27
- expect(detectProjectType(tempDir)).toBe('rust');
28
- });
29
- it('detects Python from pyproject.toml', () => {
30
- writeFileSync(join(tempDir, 'pyproject.toml'), '[project]');
31
- expect(detectProjectType(tempDir)).toBe('python');
32
- });
33
- it('returns unknown for empty directory', () => {
34
- expect(detectProjectType(tempDir)).toBe('unknown');
35
- });
36
- it('respects tsconfig.json priority over go.mod', () => {
37
- writeFileSync(join(tempDir, 'tsconfig.json'), '{}');
38
- writeFileSync(join(tempDir, 'go.mod'), 'module test');
39
- expect(detectProjectType(tempDir)).toBe('typescript');
40
- });
41
- });
42
- //# sourceMappingURL=detectProjectType.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detectProjectType.test.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/detectProjectType.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Integration tests for directory diagnostics
3
- */
4
- export {};
5
- //# sourceMappingURL=integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Integration tests for directory diagnostics
3
- */
4
- import { describe, it, expect, vi, beforeEach } from 'vitest';
5
- import * as path from 'path';
6
- import * as os from 'os';
7
- // Mock fs before importing the module under test
8
- vi.mock('fs', async () => {
9
- const actual = await vi.importActual('fs');
10
- return {
11
- ...actual,
12
- realpathSync: vi.fn(actual.realpathSync),
13
- };
14
- });
15
- import * as fs from 'fs';
16
- import { runDirectoryDiagnostics } from '../index.js';
17
- import { getAllSupportedExtensions, invalidateExtensionCache } from '../lsp-aggregator.js';
18
- describe('runDirectoryDiagnostics path validation', () => {
19
- beforeEach(() => {
20
- // Reset all mocks to their default implementation before each test
21
- vi.mocked(fs.realpathSync).mockRestore();
22
- });
23
- it('returns skipped strategy when realpathSync fails', async () => {
24
- // Create a valid temp directory
25
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'diag-test-'));
26
- try {
27
- // Mock realpathSync to throw for this specific path
28
- const actualFs = await vi.importActual('fs');
29
- vi.mocked(fs.realpathSync).mockImplementation((p) => {
30
- if (p === tmpDir || p.toString() === tmpDir) {
31
- throw new Error('Mock realpathSync failure');
32
- }
33
- // Call the real implementation for other paths
34
- return actualFs.realpathSync(p);
35
- });
36
- const result = await runDirectoryDiagnostics(tmpDir);
37
- expect(result.strategy).toBe('skipped');
38
- expect(result.success).toBe(true);
39
- expect(result.errorCount).toBe(0);
40
- expect(result.summary).toContain('cannot resolve directory path');
41
- }
42
- finally {
43
- fs.rmdirSync(tmpDir);
44
- }
45
- });
46
- it('returns skipped strategy for non-existent directory', async () => {
47
- const result = await runDirectoryDiagnostics('/nonexistent/path/that/does/not/exist');
48
- expect(result.strategy).toBe('skipped');
49
- expect(result.success).toBe(true);
50
- expect(result.errorCount).toBe(0);
51
- expect(result.summary).toContain('does not exist');
52
- });
53
- });
54
- describe('invalidateExtensionCache', () => {
55
- it('clears the cached extensions so next call recomputes', () => {
56
- // First call populates the cache
57
- const extensions1 = getAllSupportedExtensions();
58
- expect(extensions1.length).toBeGreaterThan(0);
59
- // Invalidate
60
- invalidateExtensionCache();
61
- // Second call should still return the same result (recomputed from same data)
62
- const extensions2 = getAllSupportedExtensions();
63
- expect(extensions2).toEqual(extensions1);
64
- });
65
- });
66
- //# sourceMappingURL=integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for diagnostic output parsers
3
- */
4
- export {};
5
- //# sourceMappingURL=parser-tests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-tests.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parser-tests.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Unit tests for diagnostic output parsers
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { parseGoOutput } from '../go-runner.js';
6
- import { parseRustOutput } from '../rust-runner.js';
7
- import { parseMypyOutput, parsePylintOutput } from '../python-runner.js';
8
- describe('parseGoOutput', () => {
9
- it('parses go vet output correctly', () => {
10
- const output = `main.go:10:5: unreachable code
11
- pkg/util.go:25:12: result of fmt.Sprintf call not used`;
12
- const result = parseGoOutput(output);
13
- expect(result.diagnostics).toHaveLength(2);
14
- expect(result.diagnostics[0]).toMatchObject({
15
- file: 'main.go',
16
- line: 10,
17
- column: 5,
18
- message: 'unreachable code',
19
- severity: 'warning'
20
- });
21
- expect(result.warningCount).toBe(2);
22
- });
23
- it('returns empty for clean output', () => {
24
- const result = parseGoOutput('');
25
- expect(result.diagnostics).toHaveLength(0);
26
- expect(result.success).toBe(true);
27
- });
28
- });
29
- describe('parseRustOutput', () => {
30
- it('parses cargo check errors', () => {
31
- const output = `error[E0382]: borrow of moved value: \`x\`
32
- --> src/main.rs:5:20
33
- warning: unused variable: \`y\`
34
- --> src/lib.rs:10:9`;
35
- const result = parseRustOutput(output);
36
- expect(result.diagnostics).toHaveLength(2);
37
- expect(result.errorCount).toBe(1);
38
- expect(result.warningCount).toBe(1);
39
- expect(result.diagnostics[0]).toMatchObject({
40
- file: 'src/main.rs',
41
- line: 5,
42
- column: 20,
43
- code: 'E0382',
44
- severity: 'error'
45
- });
46
- });
47
- it('returns empty for clean output', () => {
48
- const result = parseRustOutput('');
49
- expect(result.diagnostics).toHaveLength(0);
50
- expect(result.success).toBe(true);
51
- });
52
- });
53
- describe('parseMypyOutput', () => {
54
- it('parses mypy errors', () => {
55
- const output = `main.py:10:5: error: Incompatible types [arg-type]
56
- utils.py:25:1: warning: Unused variable [unused-variable]
57
- main.py:15:1: note: See docs for details`;
58
- const result = parseMypyOutput(output);
59
- expect(result.diagnostics).toHaveLength(2); // note should be skipped
60
- expect(result.errorCount).toBe(1);
61
- expect(result.warningCount).toBe(1);
62
- expect(result.tool).toBe('mypy');
63
- });
64
- it('returns empty for clean output', () => {
65
- const result = parseMypyOutput('');
66
- expect(result.diagnostics).toHaveLength(0);
67
- expect(result.success).toBe(true);
68
- });
69
- });
70
- describe('parsePylintOutput', () => {
71
- it('parses pylint errors', () => {
72
- const output = `main.py:10:5: E0001: syntax error
73
- main.py:20:0: W0611: Unused import`;
74
- const result = parsePylintOutput(output);
75
- expect(result.diagnostics).toHaveLength(2);
76
- expect(result.errorCount).toBe(1);
77
- expect(result.warningCount).toBe(1);
78
- expect(result.tool).toBe('pylint');
79
- });
80
- it('returns empty for clean output', () => {
81
- const result = parsePylintOutput('');
82
- expect(result.diagnostics).toHaveLength(0);
83
- expect(result.success).toBe(true);
84
- });
85
- });
86
- //# sourceMappingURL=parser-tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-tests.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parser-tests.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Unit tests for diagnostic output parsers
3
- */
4
- export {};
5
- //# sourceMappingURL=parsers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parsers.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parsers.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,199 +0,0 @@
1
- /**
2
- * Unit tests for diagnostic output parsers
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { parseGoOutput } from '../go-runner.js';
6
- import { parseTscOutput } from '../tsc-runner.js';
7
- import { parseRustOutput } from '../rust-runner.js';
8
- import { parseMypyOutput, parsePylintOutput } from '../python-runner.js';
9
- describe('parseGoOutput', () => {
10
- it('parses go vet output correctly', () => {
11
- const output = `main.go:10:5: unreachable code
12
- pkg/util.go:25:12: result of fmt.Sprintf call not used`;
13
- const result = parseGoOutput(output);
14
- expect(result.diagnostics).toHaveLength(2);
15
- expect(result.diagnostics[0]).toMatchObject({
16
- file: 'main.go',
17
- line: 10,
18
- column: 5,
19
- message: 'unreachable code',
20
- severity: 'warning'
21
- });
22
- expect(result.warningCount).toBe(2);
23
- });
24
- it('returns empty for clean output', () => {
25
- const result = parseGoOutput('');
26
- expect(result.diagnostics).toHaveLength(0);
27
- expect(result.success).toBe(true);
28
- });
29
- it('parses Windows-style paths correctly', () => {
30
- const output = `C:\\Users\\dev\\project\\main.go:10:5: unreachable code`;
31
- const result = parseGoOutput(output);
32
- expect(result.diagnostics).toHaveLength(1);
33
- expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\project\\main.go');
34
- expect(result.diagnostics[0].line).toBe(10);
35
- expect(result.diagnostics[0].column).toBe(5);
36
- });
37
- it('handles Unicode filenames', () => {
38
- const output = `pkg/日本語.go:5:3: unreachable code`;
39
- const result = parseGoOutput(output);
40
- expect(result.diagnostics).toHaveLength(1);
41
- expect(result.diagnostics[0].file).toBe('pkg/日本語.go');
42
- });
43
- it('handles malformed output gracefully', () => {
44
- const result = parseGoOutput('not valid output\nrandom noise\n');
45
- expect(result.diagnostics).toHaveLength(0);
46
- expect(result.success).toBe(true);
47
- });
48
- });
49
- describe('parseTscOutput', () => {
50
- it('parses tsc errors correctly', () => {
51
- const output = `src/index.ts(10,5): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
52
- src/utils.ts(25,12): error TS2304: Cannot find name 'foo'.`;
53
- const result = parseTscOutput(output);
54
- expect(result.diagnostics).toHaveLength(2);
55
- expect(result.errorCount).toBe(2);
56
- expect(result.warningCount).toBe(0);
57
- expect(result.success).toBe(false);
58
- expect(result.diagnostics[0]).toMatchObject({
59
- file: 'src/index.ts',
60
- line: 10,
61
- column: 5,
62
- code: 'TS2345',
63
- severity: 'error',
64
- message: "Argument of type 'string' is not assignable to parameter of type 'number'."
65
- });
66
- });
67
- it('parses tsc warnings correctly', () => {
68
- const output = `src/index.ts(5,1): warning TS6133: 'x' is declared but its value is never read.`;
69
- const result = parseTscOutput(output);
70
- expect(result.diagnostics).toHaveLength(1);
71
- expect(result.errorCount).toBe(0);
72
- expect(result.warningCount).toBe(1);
73
- expect(result.success).toBe(true);
74
- });
75
- it('returns empty for clean output', () => {
76
- const result = parseTscOutput('');
77
- expect(result.diagnostics).toHaveLength(0);
78
- expect(result.success).toBe(true);
79
- });
80
- it('parses Windows-style paths correctly', () => {
81
- const output = `C:\\Users\\dev\\src\\index.ts(10,5): error TS2345: Type mismatch.`;
82
- const result = parseTscOutput(output);
83
- expect(result.diagnostics).toHaveLength(1);
84
- expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\src\\index.ts');
85
- });
86
- });
87
- describe('parseRustOutput', () => {
88
- it('parses cargo check JSON errors', () => {
89
- // Cargo JSON format: one JSON object per line
90
- const output = [
91
- '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"borrow of moved value: `x`","code":{"code":"E0382","explanation":null},"level":"error","spans":[{"file_name":"src/main.rs","line_start":5,"line_end":5,"column_start":20,"column_end":21,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}',
92
- '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"unused variable: `y`","code":null,"level":"warning","spans":[{"file_name":"src/lib.rs","line_start":10,"line_end":10,"column_start":9,"column_end":10,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}'
93
- ].join('\n');
94
- const result = parseRustOutput(output);
95
- expect(result.diagnostics).toHaveLength(2);
96
- expect(result.errorCount).toBe(1);
97
- expect(result.warningCount).toBe(1);
98
- expect(result.diagnostics[0]).toMatchObject({
99
- file: 'src/main.rs',
100
- line: 5,
101
- column: 20,
102
- code: 'E0382',
103
- severity: 'error',
104
- message: 'borrow of moved value: `x`'
105
- });
106
- });
107
- it('returns empty for clean output', () => {
108
- // Empty output or only build-finished message
109
- const result = parseRustOutput('');
110
- expect(result.diagnostics).toHaveLength(0);
111
- expect(result.success).toBe(true);
112
- });
113
- it('ignores non-compiler-message JSON lines', () => {
114
- const output = [
115
- '{"reason":"compiler-artifact","package_id":"test","target":{"name":"test"}}',
116
- '{"reason":"build-finished","success":false}',
117
- '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"type mismatch","code":{"code":"E0308","explanation":null},"level":"error","spans":[{"file_name":"src/main.rs","line_start":3,"line_end":3,"column_start":18,"column_end":25,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}'
118
- ].join('\n');
119
- const result = parseRustOutput(output);
120
- expect(result.diagnostics).toHaveLength(1);
121
- expect(result.diagnostics[0].file).toBe('src/main.rs');
122
- expect(result.diagnostics[0].code).toBe('E0308');
123
- });
124
- it('handles warnings without error codes', () => {
125
- const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"unused variable: `x`","code":null,"level":"warning","spans":[{"file_name":"src/lib.rs","line_start":3,"line_end":3,"column_start":9,"column_end":10,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}';
126
- const result = parseRustOutput(output);
127
- expect(result.diagnostics).toHaveLength(1);
128
- expect(result.diagnostics[0].code).toBe('');
129
- expect(result.diagnostics[0].severity).toBe('warning');
130
- });
131
- it('skips messages without primary span', () => {
132
- // Message with no spans or no primary span should be skipped
133
- const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"some note","code":null,"level":"note","spans":[],"children":[],"rendered":null}}';
134
- const result = parseRustOutput(output);
135
- expect(result.diagnostics).toHaveLength(0);
136
- });
137
- it('uses primary span when multiple spans exist', () => {
138
- // Multiple spans, only primary should be used for location
139
- const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"mismatched types","code":{"code":"E0308","explanation":null},"level":"error","spans":[{"file_name":"src/other.rs","line_start":1,"line_end":1,"column_start":1,"column_end":2,"is_primary":false,"text":[],"label":"expected"},{"file_name":"src/main.rs","line_start":10,"line_end":10,"column_start":5,"column_end":15,"is_primary":true,"text":[],"label":"found"}],"children":[],"rendered":null}}';
140
- const result = parseRustOutput(output);
141
- expect(result.diagnostics).toHaveLength(1);
142
- expect(result.diagnostics[0].file).toBe('src/main.rs');
143
- expect(result.diagnostics[0].line).toBe(10);
144
- expect(result.diagnostics[0].column).toBe(5);
145
- });
146
- });
147
- describe('parseMypyOutput', () => {
148
- it('parses mypy errors', () => {
149
- const output = `main.py:10:5: error: Incompatible types [arg-type]
150
- utils.py:25:1: warning: Unused variable [unused-variable]
151
- main.py:15:1: note: See docs for details`;
152
- const result = parseMypyOutput(output);
153
- expect(result.diagnostics).toHaveLength(2); // note should be skipped
154
- expect(result.errorCount).toBe(1);
155
- expect(result.warningCount).toBe(1);
156
- expect(result.tool).toBe('mypy');
157
- });
158
- it('returns empty for clean output', () => {
159
- const result = parseMypyOutput('');
160
- expect(result.diagnostics).toHaveLength(0);
161
- expect(result.success).toBe(true);
162
- });
163
- it('parses Windows-style mypy paths', () => {
164
- const output = `C:\\Users\\dev\\main.py:10:5: error: Incompatible types [arg-type]`;
165
- const result = parseMypyOutput(output);
166
- expect(result.diagnostics).toHaveLength(1);
167
- expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\main.py');
168
- });
169
- });
170
- describe('parsePylintOutput', () => {
171
- it('parses pylint errors', () => {
172
- const output = `main.py:10:5: E0001: syntax error
173
- main.py:20:0: W0611: Unused import`;
174
- const result = parsePylintOutput(output);
175
- expect(result.diagnostics).toHaveLength(2);
176
- expect(result.errorCount).toBe(1);
177
- expect(result.warningCount).toBe(1);
178
- expect(result.tool).toBe('pylint');
179
- });
180
- it('returns empty for clean output', () => {
181
- const result = parsePylintOutput('');
182
- expect(result.diagnostics).toHaveLength(0);
183
- expect(result.success).toBe(true);
184
- });
185
- it('classifies F (Fatal) codes as errors', () => {
186
- const output = `main.py:1:0: F0001: error in module (fatal)`;
187
- const result = parsePylintOutput(output);
188
- expect(result.diagnostics).toHaveLength(1);
189
- expect(result.diagnostics[0].severity).toBe('error');
190
- expect(result.errorCount).toBe(1);
191
- });
192
- it('parses Windows-style pylint paths', () => {
193
- const output = `C:\\Users\\dev\\main.py:10:5: E0001: syntax error`;
194
- const result = parsePylintOutput(output);
195
- expect(result.diagnostics).toHaveLength(1);
196
- expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\main.py');
197
- });
198
- });
199
- //# sourceMappingURL=parsers.test.js.map