oh-my-claude-sisyphus 3.7.6 → 3.7.8

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 (421) hide show
  1. package/agents/AGENTS.md +144 -0
  2. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  3. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  4. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  5. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  6. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  7. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  8. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  9. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  10. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  11. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  12. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  13. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  14. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  15. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  16. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  17. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  18. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  19. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  20. package/dist/__tests__/learned-skills/config.test.js +37 -0
  21. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  22. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  23. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  24. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  25. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  26. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  27. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  28. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  29. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  30. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  31. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  32. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  33. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  34. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  35. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  36. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  37. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  38. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  39. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  40. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  41. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  42. package/dist/__tests__/omc-tools-server.test.d.ts +2 -0
  43. package/dist/__tests__/omc-tools-server.test.d.ts.map +1 -0
  44. package/dist/__tests__/omc-tools-server.test.js +52 -0
  45. package/dist/__tests__/omc-tools-server.test.js.map +1 -0
  46. package/dist/agents/architect.js +1 -1
  47. package/dist/agents/architect.js.map +1 -1
  48. package/dist/agents/codex-agents.d.ts +20 -0
  49. package/dist/agents/codex-agents.d.ts.map +1 -0
  50. package/dist/agents/codex-agents.js +36 -0
  51. package/dist/agents/codex-agents.js.map +1 -0
  52. package/dist/agents/definitions.js +13 -13
  53. package/dist/agents/definitions.js.map +1 -1
  54. package/dist/agents/document-writer.d.ts +11 -0
  55. package/dist/agents/document-writer.d.ts.map +1 -0
  56. package/dist/agents/document-writer.js +209 -0
  57. package/dist/agents/document-writer.js.map +1 -0
  58. package/dist/agents/executor.js +1 -1
  59. package/dist/agents/executor.js.map +1 -1
  60. package/dist/agents/explore.js +1 -1
  61. package/dist/agents/explore.js.map +1 -1
  62. package/dist/agents/frontend-engineer.d.ts +11 -0
  63. package/dist/agents/frontend-engineer.d.ts.map +1 -0
  64. package/dist/agents/frontend-engineer.js +115 -0
  65. package/dist/agents/frontend-engineer.js.map +1 -0
  66. package/dist/agents/librarian.d.ts +12 -0
  67. package/dist/agents/librarian.d.ts.map +1 -0
  68. package/dist/agents/librarian.js +103 -0
  69. package/dist/agents/librarian.js.map +1 -0
  70. package/dist/agents/metis.d.ts +12 -0
  71. package/dist/agents/metis.d.ts.map +1 -0
  72. package/dist/agents/metis.js +117 -0
  73. package/dist/agents/metis.js.map +1 -0
  74. package/dist/agents/momus.d.ts +12 -0
  75. package/dist/agents/momus.d.ts.map +1 -0
  76. package/dist/agents/momus.js +128 -0
  77. package/dist/agents/momus.js.map +1 -0
  78. package/dist/agents/multimodal-looker.d.ts +11 -0
  79. package/dist/agents/multimodal-looker.d.ts.map +1 -0
  80. package/dist/agents/multimodal-looker.js +70 -0
  81. package/dist/agents/multimodal-looker.js.map +1 -0
  82. package/dist/agents/oracle.d.ts +13 -0
  83. package/dist/agents/oracle.d.ts.map +1 -0
  84. package/dist/agents/oracle.js +191 -0
  85. package/dist/agents/oracle.js.map +1 -0
  86. package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
  87. package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
  88. package/dist/agents/orchestrator-sisyphus.js +115 -0
  89. package/dist/agents/orchestrator-sisyphus.js.map +1 -0
  90. package/dist/agents/prometheus.d.ts +12 -0
  91. package/dist/agents/prometheus.d.ts.map +1 -0
  92. package/dist/agents/prometheus.js +195 -0
  93. package/dist/agents/prometheus.js.map +1 -0
  94. package/dist/agents/qa-tester.js +1 -1
  95. package/dist/agents/qa-tester.js.map +1 -1
  96. package/dist/agents/sisyphus-junior.d.ts +12 -0
  97. package/dist/agents/sisyphus-junior.d.ts.map +1 -0
  98. package/dist/agents/sisyphus-junior.js +93 -0
  99. package/dist/agents/sisyphus-junior.js.map +1 -0
  100. package/dist/cli/analytics.js +0 -0
  101. package/dist/cli/components/CostDashboard.d.ts +15 -0
  102. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  103. package/dist/cli/components/CostDashboard.js +15 -0
  104. package/dist/cli/components/CostDashboard.js.map +1 -0
  105. package/dist/cli/components/LiveStats.d.ts +16 -0
  106. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  107. package/dist/cli/components/LiveStats.js +16 -0
  108. package/dist/cli/components/LiveStats.js.map +1 -0
  109. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  110. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  111. package/dist/cli/components/SessionBrowser.js +14 -0
  112. package/dist/cli/components/SessionBrowser.js.map +1 -0
  113. package/dist/cli/index.js +0 -0
  114. package/dist/cli/tui.d.ts +21 -0
  115. package/dist/cli/tui.d.ts.map +1 -0
  116. package/dist/cli/tui.js +21 -0
  117. package/dist/cli/tui.js.map +1 -0
  118. package/dist/hooks/autopilot/signals.d.ts +20 -0
  119. package/dist/hooks/autopilot/signals.d.ts.map +1 -0
  120. package/dist/hooks/autopilot/signals.js +75 -0
  121. package/dist/hooks/autopilot/signals.js.map +1 -0
  122. package/dist/hooks/autopilot/summary.d.ts +27 -0
  123. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  124. package/dist/hooks/autopilot/summary.js +160 -0
  125. package/dist/hooks/autopilot/summary.js.map +1 -0
  126. package/dist/hooks/autopilot/transition.d.ts +39 -0
  127. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  128. package/dist/hooks/autopilot/transition.js +216 -0
  129. package/dist/hooks/autopilot/transition.js.map +1 -0
  130. package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
  131. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
  132. package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
  133. package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
  134. package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
  135. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
  136. package/dist/hooks/context-window-limit-recovery/index.js +201 -0
  137. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
  138. package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
  139. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
  140. package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
  141. package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
  142. package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
  143. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
  144. package/dist/hooks/context-window-limit-recovery/types.js +34 -0
  145. package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
  146. package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
  147. package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
  148. package/dist/hooks/edit-error-recovery/index.js +89 -0
  149. package/dist/hooks/edit-error-recovery/index.js.map +1 -0
  150. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  151. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  152. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  153. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  154. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  155. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  156. package/dist/hooks/github-auto-responder/config.js +69 -0
  157. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  158. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  159. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  160. package/dist/hooks/github-auto-responder/constants.js +60 -0
  161. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  162. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  163. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  164. package/dist/hooks/github-auto-responder/filters.js +174 -0
  165. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  166. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  167. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  168. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  169. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  170. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  171. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  172. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  173. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  174. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  175. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  176. package/dist/hooks/github-auto-responder/index.js +145 -0
  177. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  178. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  179. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  180. package/dist/hooks/github-auto-responder/persona.js +99 -0
  181. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  182. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  183. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  184. package/dist/hooks/github-auto-responder/responder.js +264 -0
  185. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  186. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  187. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  188. package/dist/hooks/github-auto-responder/server.js +301 -0
  189. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  190. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  191. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  192. package/dist/hooks/github-auto-responder/signature.js +79 -0
  193. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  194. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  195. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  196. package/dist/hooks/github-auto-responder/templates.js +93 -0
  197. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  198. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  199. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  200. package/dist/hooks/github-auto-responder/types.js +7 -0
  201. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  202. package/dist/hooks/learned-skills/config.d.ts +53 -0
  203. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  204. package/dist/hooks/learned-skills/config.js +103 -0
  205. package/dist/hooks/learned-skills/config.js.map +1 -0
  206. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  207. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  208. package/dist/hooks/learned-skills/constants.js +26 -0
  209. package/dist/hooks/learned-skills/constants.js.map +1 -0
  210. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  211. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  212. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  213. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  214. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  215. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  216. package/dist/hooks/learned-skills/detector.js +150 -0
  217. package/dist/hooks/learned-skills/detector.js.map +1 -0
  218. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  219. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  220. package/dist/hooks/learned-skills/finder.js +117 -0
  221. package/dist/hooks/learned-skills/finder.js.map +1 -0
  222. package/dist/hooks/learned-skills/index.d.ts +62 -0
  223. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  224. package/dist/hooks/learned-skills/index.js +137 -0
  225. package/dist/hooks/learned-skills/index.js.map +1 -0
  226. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  227. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  228. package/dist/hooks/learned-skills/loader.js +107 -0
  229. package/dist/hooks/learned-skills/loader.js.map +1 -0
  230. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  231. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  232. package/dist/hooks/learned-skills/parser.js +190 -0
  233. package/dist/hooks/learned-skills/parser.js.map +1 -0
  234. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  235. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  236. package/dist/hooks/learned-skills/promotion.js +87 -0
  237. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  238. package/dist/hooks/learned-skills/types.d.ts +109 -0
  239. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  240. package/dist/hooks/learned-skills/types.js +8 -0
  241. package/dist/hooks/learned-skills/types.js.map +1 -0
  242. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  243. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  244. package/dist/hooks/learned-skills/validator.js +87 -0
  245. package/dist/hooks/learned-skills/validator.js.map +1 -0
  246. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  247. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  248. package/dist/hooks/learned-skills/writer.js +126 -0
  249. package/dist/hooks/learned-skills/writer.js.map +1 -0
  250. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  251. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  252. package/dist/hooks/mnemosyne/config.js +103 -0
  253. package/dist/hooks/mnemosyne/config.js.map +1 -0
  254. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  255. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  256. package/dist/hooks/mnemosyne/constants.js +26 -0
  257. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  258. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  259. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  260. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  261. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  262. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  263. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  264. package/dist/hooks/mnemosyne/detector.js +150 -0
  265. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  266. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  267. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  268. package/dist/hooks/mnemosyne/finder.js +117 -0
  269. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  270. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  271. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  272. package/dist/hooks/mnemosyne/index.js +137 -0
  273. package/dist/hooks/mnemosyne/index.js.map +1 -0
  274. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  275. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  276. package/dist/hooks/mnemosyne/loader.js +113 -0
  277. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  278. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  279. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  280. package/dist/hooks/mnemosyne/parser.js +190 -0
  281. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  282. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  283. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  284. package/dist/hooks/mnemosyne/promotion.js +87 -0
  285. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  286. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  287. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  288. package/dist/hooks/mnemosyne/types.js +8 -0
  289. package/dist/hooks/mnemosyne/types.js.map +1 -0
  290. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  291. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  292. package/dist/hooks/mnemosyne/validator.js +87 -0
  293. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  294. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  295. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  296. package/dist/hooks/mnemosyne/writer.js +126 -0
  297. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  298. package/dist/hooks/ralph-loop/index.d.ts +116 -0
  299. package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
  300. package/dist/hooks/ralph-loop/index.js +322 -0
  301. package/dist/hooks/ralph-loop/index.js.map +1 -0
  302. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  303. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  304. package/dist/hooks/ralph-prd/index.js +310 -0
  305. package/dist/hooks/ralph-prd/index.js.map +1 -0
  306. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  307. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  308. package/dist/hooks/ralph-progress/index.js +408 -0
  309. package/dist/hooks/ralph-progress/index.js.map +1 -0
  310. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  311. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  312. package/dist/hooks/ralph-verifier/index.js +223 -0
  313. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  314. package/dist/hooks/session-recovery/constants.d.ts +56 -0
  315. package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
  316. package/dist/hooks/session-recovery/constants.js +78 -0
  317. package/dist/hooks/session-recovery/constants.js.map +1 -0
  318. package/dist/hooks/session-recovery/index.d.ts +53 -0
  319. package/dist/hooks/session-recovery/index.d.ts.map +1 -0
  320. package/dist/hooks/session-recovery/index.js +321 -0
  321. package/dist/hooks/session-recovery/index.js.map +1 -0
  322. package/dist/hooks/session-recovery/storage.d.ts +76 -0
  323. package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
  324. package/dist/hooks/session-recovery/storage.js +383 -0
  325. package/dist/hooks/session-recovery/storage.js.map +1 -0
  326. package/dist/hooks/session-recovery/types.d.ts +145 -0
  327. package/dist/hooks/session-recovery/types.d.ts.map +1 -0
  328. package/dist/hooks/session-recovery/types.js +8 -0
  329. package/dist/hooks/session-recovery/types.js.map +1 -0
  330. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
  331. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
  332. package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
  333. package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
  334. package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
  335. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
  336. package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
  337. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
  338. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  339. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  340. package/dist/hooks/ultraqa-loop/index.js +216 -0
  341. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  342. package/dist/hooks/ultrawork-state/index.d.ts +62 -0
  343. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  344. package/dist/hooks/ultrawork-state/index.js +208 -0
  345. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  346. package/dist/hud/sisyphus-state.d.ts +31 -0
  347. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  348. package/dist/hud/sisyphus-state.js +163 -0
  349. package/dist/hud/sisyphus-state.js.map +1 -0
  350. package/dist/index.d.ts +1 -0
  351. package/dist/index.d.ts.map +1 -1
  352. package/dist/index.js +15 -3
  353. package/dist/index.js.map +1 -1
  354. package/dist/mcp/index.d.ts +1 -0
  355. package/dist/mcp/index.d.ts.map +1 -1
  356. package/dist/mcp/index.js +2 -0
  357. package/dist/mcp/index.js.map +1 -1
  358. package/dist/mcp/omc-tools-server.d.ts +25 -0
  359. package/dist/mcp/omc-tools-server.d.ts.map +1 -0
  360. package/dist/mcp/omc-tools-server.js +49 -0
  361. package/dist/mcp/omc-tools-server.js.map +1 -0
  362. package/dist/tools/ast-tools.d.ts.map +1 -1
  363. package/dist/tools/ast-tools.js +19 -39
  364. package/dist/tools/ast-tools.js.map +1 -1
  365. package/dist/tools/diagnostics/index.d.ts +7 -32
  366. package/dist/tools/diagnostics/index.d.ts.map +1 -1
  367. package/dist/tools/diagnostics/index.js +41 -171
  368. package/dist/tools/diagnostics/index.js.map +1 -1
  369. package/dist/tools/diagnostics/lsp-aggregator.d.ts +1 -13
  370. package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
  371. package/dist/tools/diagnostics/lsp-aggregator.js +4 -32
  372. package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
  373. package/dist/tools/diagnostics/tsc-runner.d.ts +0 -6
  374. package/dist/tools/diagnostics/tsc-runner.d.ts.map +1 -1
  375. package/dist/tools/diagnostics/tsc-runner.js +5 -32
  376. package/dist/tools/diagnostics/tsc-runner.js.map +1 -1
  377. package/dist/tools/lsp/client.d.ts.map +1 -1
  378. package/dist/tools/lsp/client.js +1 -26
  379. package/dist/tools/lsp/client.js.map +1 -1
  380. package/dist/tools/lsp/servers.d.ts +0 -3
  381. package/dist/tools/lsp/servers.d.ts.map +1 -1
  382. package/dist/tools/lsp/servers.js +4 -111
  383. package/dist/tools/lsp/servers.js.map +1 -1
  384. package/dist/tools/lsp-tools.d.ts +2 -2
  385. package/dist/tools/lsp-tools.d.ts.map +1 -1
  386. package/dist/tools/lsp-tools.js +2 -2
  387. package/dist/tools/lsp-tools.js.map +1 -1
  388. package/package.json +1 -1
  389. package/skills/AGENTS.md +187 -0
  390. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts +0 -5
  391. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts.map +0 -1
  392. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js +0 -42
  393. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js.map +0 -1
  394. package/dist/tools/diagnostics/__tests__/integration.test.d.ts +0 -5
  395. package/dist/tools/diagnostics/__tests__/integration.test.d.ts.map +0 -1
  396. package/dist/tools/diagnostics/__tests__/integration.test.js +0 -66
  397. package/dist/tools/diagnostics/__tests__/integration.test.js.map +0 -1
  398. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts +0 -5
  399. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts.map +0 -1
  400. package/dist/tools/diagnostics/__tests__/parser-tests.js +0 -86
  401. package/dist/tools/diagnostics/__tests__/parser-tests.js.map +0 -1
  402. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts +0 -5
  403. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts.map +0 -1
  404. package/dist/tools/diagnostics/__tests__/parsers.test.js +0 -199
  405. package/dist/tools/diagnostics/__tests__/parsers.test.js.map +0 -1
  406. package/dist/tools/diagnostics/constants.d.ts +0 -9
  407. package/dist/tools/diagnostics/constants.d.ts.map +0 -1
  408. package/dist/tools/diagnostics/constants.js +0 -9
  409. package/dist/tools/diagnostics/constants.js.map +0 -1
  410. package/dist/tools/diagnostics/go-runner.d.ts +0 -31
  411. package/dist/tools/diagnostics/go-runner.d.ts.map +0 -1
  412. package/dist/tools/diagnostics/go-runner.js +0 -78
  413. package/dist/tools/diagnostics/go-runner.js.map +0 -1
  414. package/dist/tools/diagnostics/python-runner.d.ts +0 -39
  415. package/dist/tools/diagnostics/python-runner.d.ts.map +0 -1
  416. package/dist/tools/diagnostics/python-runner.js +0 -200
  417. package/dist/tools/diagnostics/python-runner.js.map +0 -1
  418. package/dist/tools/diagnostics/rust-runner.d.ts +0 -34
  419. package/dist/tools/diagnostics/rust-runner.d.ts.map +0 -1
  420. package/dist/tools/diagnostics/rust-runner.js +0 -106
  421. package/dist/tools/diagnostics/rust-runner.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, writeFileSync, rmSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { findSkillFiles, getSkillsDir, ensureSkillsDir } from '../../hooks/learned-skills/finder.js';
6
+ describe('Skill Finder', () => {
7
+ let testDir;
8
+ let projectRoot;
9
+ beforeEach(() => {
10
+ testDir = join(tmpdir(), `skill-test-${Date.now()}`);
11
+ projectRoot = join(testDir, 'project');
12
+ mkdirSync(join(projectRoot, '.sisyphus', 'skills'), { recursive: true });
13
+ });
14
+ afterEach(() => {
15
+ rmSync(testDir, { recursive: true, force: true });
16
+ });
17
+ it('should find project-level skills', () => {
18
+ const skillPath = join(projectRoot, '.sisyphus', 'skills', 'test-skill.md');
19
+ writeFileSync(skillPath, '# Test Skill');
20
+ const candidates = findSkillFiles(projectRoot);
21
+ expect(candidates.length).toBe(1);
22
+ expect(candidates[0].scope).toBe('project');
23
+ expect(candidates[0].path).toBe(skillPath);
24
+ });
25
+ it('should prioritize project skills over user skills', () => {
26
+ // Create project skill
27
+ const projectSkillPath = join(projectRoot, '.sisyphus', 'skills', 'skill.md');
28
+ writeFileSync(projectSkillPath, '# Project Skill');
29
+ const candidates = findSkillFiles(projectRoot);
30
+ // Project skill should come first
31
+ const projectSkill = candidates.find(c => c.scope === 'project');
32
+ expect(projectSkill).toBeDefined();
33
+ });
34
+ it('should handle missing directories gracefully', () => {
35
+ const emptyProject = join(testDir, 'empty');
36
+ mkdirSync(emptyProject);
37
+ const candidates = findSkillFiles(emptyProject);
38
+ // Should return empty array, not throw
39
+ expect(Array.isArray(candidates)).toBe(true);
40
+ });
41
+ it('should get skills directory for user scope', () => {
42
+ const userDir = getSkillsDir('user');
43
+ expect(userDir).toContain('.claude');
44
+ expect(userDir).toContain('sisyphus-learned');
45
+ });
46
+ it('should get skills directory for project scope', () => {
47
+ const projectDir = getSkillsDir('project', projectRoot);
48
+ expect(projectDir).toContain('.sisyphus');
49
+ expect(projectDir).toContain('skills');
50
+ });
51
+ it('should throw for project scope without root', () => {
52
+ expect(() => getSkillsDir('project')).toThrow();
53
+ });
54
+ it('should ensure skills directory exists', () => {
55
+ const result = ensureSkillsDir('project', projectRoot);
56
+ expect(result).toBe(true);
57
+ });
58
+ });
59
+ //# sourceMappingURL=finder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finder.test.js","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/finder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, writeFileSync, rmSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { tmpdir } from 'os';
5
+ import { loadAllSkills, findMatchingSkills } from '../../hooks/learned-skills/loader.js';
6
+ describe('Skill Loader', () => {
7
+ let testDir;
8
+ let projectRoot;
9
+ beforeEach(() => {
10
+ testDir = join(tmpdir(), `skill-loader-test-${Date.now()}`);
11
+ projectRoot = join(testDir, 'project');
12
+ mkdirSync(join(projectRoot, '.sisyphus', 'skills'), { recursive: true });
13
+ });
14
+ afterEach(() => {
15
+ rmSync(testDir, { recursive: true, force: true });
16
+ });
17
+ const createSkillFile = (name, metadata) => {
18
+ const content = `---
19
+ id: "${metadata.id || name}"
20
+ name: "${metadata.name || name}"
21
+ description: "${metadata.description || 'Test skill'}"
22
+ source: ${metadata.source || 'manual'}
23
+ createdAt: "2024-01-19T12:00:00Z"
24
+ triggers:
25
+ ${(metadata.triggers || ['test']).map(t => ` - "${t}"`).join('\n')}
26
+ ---
27
+
28
+ # ${name}
29
+
30
+ Test content for ${name}.
31
+ `;
32
+ const skillPath = join(projectRoot, '.sisyphus', 'skills', `${name}.md`);
33
+ writeFileSync(skillPath, content);
34
+ return skillPath;
35
+ };
36
+ it('should load all valid skills', () => {
37
+ createSkillFile('skill-a', { triggers: ['alpha'] });
38
+ createSkillFile('skill-b', { triggers: ['beta'] });
39
+ const skills = loadAllSkills(projectRoot);
40
+ expect(skills.length).toBe(2);
41
+ });
42
+ it('should find matching skills by trigger', () => {
43
+ createSkillFile('react-skill', { triggers: ['react', 'component'] });
44
+ createSkillFile('python-skill', { triggers: ['python', 'django'] });
45
+ const matches = findMatchingSkills('How do I create a React component?', projectRoot);
46
+ expect(matches.length).toBe(1);
47
+ expect(matches[0].metadata.id).toBe('react-skill');
48
+ });
49
+ it('should return empty array when no triggers match', () => {
50
+ createSkillFile('react-skill', { triggers: ['react'] });
51
+ const matches = findMatchingSkills('How do I use Rust?', projectRoot);
52
+ expect(matches.length).toBe(0);
53
+ });
54
+ it('should limit results to specified count', () => {
55
+ createSkillFile('skill-1', { triggers: ['test'] });
56
+ createSkillFile('skill-2', { triggers: ['test'] });
57
+ createSkillFile('skill-3', { triggers: ['test'] });
58
+ const matches = findMatchingSkills('This is a test message', projectRoot, 2);
59
+ expect(matches.length).toBeLessThanOrEqual(2);
60
+ });
61
+ it('should boost by quality score', () => {
62
+ createSkillFile('low-quality', { triggers: ['test'], quality: 30 });
63
+ createSkillFile('high-quality', { triggers: ['test'], quality: 90 });
64
+ const matches = findMatchingSkills('test', projectRoot);
65
+ // High quality should be first
66
+ expect(matches[0].metadata.id).toBe('high-quality');
67
+ });
68
+ });
69
+ //# sourceMappingURL=loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAEzF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAe,CAAC;IACpB,IAAI,WAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,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,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,QAAiC,EAAE,EAAE;QAC1E,MAAM,OAAO,GAAG;OACb,QAAQ,CAAC,EAAE,IAAI,IAAI;SACjB,QAAQ,CAAC,IAAI,IAAI,IAAI;gBACd,QAAQ,CAAC,WAAW,IAAI,YAAY;UAC1C,QAAQ,CAAC,MAAM,IAAI,QAAQ;;;EAGnC,CAAC,QAAQ,CAAC,QAAoB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAG3E,IAAI;;mBAEW,IAAI;CACtB,CAAC;QACE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QACzE,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpD,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAE1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACrE,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEpE,MAAM,OAAO,GAAG,kBAAkB,CAAC,oCAAoC,EAAE,WAAW,CAAC,CAAC;QAEtF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAEtE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,kBAAkB,CAAC,wBAAwB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAE7E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,eAAe,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAErE,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAExD,+BAA+B;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseSkillFile, generateSkillFrontmatter } from '../../hooks/learned-skills/parser.js';
3
+ describe('Skill Parser', () => {
4
+ it('should parse valid skill frontmatter', () => {
5
+ const content = `---
6
+ id: "test-skill-001"
7
+ name: "Test Skill"
8
+ description: "A test skill"
9
+ source: extracted
10
+ createdAt: "2024-01-19T12:00:00Z"
11
+ triggers:
12
+ - "test"
13
+ - "demo"
14
+ tags:
15
+ - "testing"
16
+ ---
17
+
18
+ # Test Skill Content
19
+
20
+ This is the skill content.
21
+ `;
22
+ const result = parseSkillFile(content);
23
+ expect(result.valid).toBe(true);
24
+ expect(result.metadata.id).toBe('test-skill-001');
25
+ expect(result.metadata.name).toBe('Test Skill');
26
+ expect(result.metadata.triggers).toEqual(['test', 'demo']);
27
+ expect(result.content).toContain('Test Skill Content');
28
+ });
29
+ it('should reject skill without required fields', () => {
30
+ const content = `---
31
+ name: "Incomplete Skill"
32
+ ---
33
+
34
+ Content without required fields.
35
+ `;
36
+ const result = parseSkillFile(content);
37
+ expect(result.valid).toBe(false);
38
+ expect(result.errors).toContain('Missing required field: id');
39
+ expect(result.errors).toContain('Missing required field: triggers');
40
+ });
41
+ it('should generate valid frontmatter', () => {
42
+ const metadata = {
43
+ id: 'gen-skill-001',
44
+ name: 'Generated Skill',
45
+ description: 'A generated skill',
46
+ source: 'extracted',
47
+ createdAt: '2024-01-19T12:00:00Z',
48
+ triggers: ['generate', 'create'],
49
+ tags: ['automation'],
50
+ };
51
+ const frontmatter = generateSkillFrontmatter(metadata);
52
+ expect(frontmatter).toContain('id: "gen-skill-001"');
53
+ expect(frontmatter).toContain('triggers:');
54
+ expect(frontmatter).toContain(' - "generate"');
55
+ });
56
+ it('should reject content without frontmatter', () => {
57
+ const content = `# Just content
58
+
59
+ No frontmatter here.
60
+ `;
61
+ const result = parseSkillFile(content);
62
+ expect(result.valid).toBe(false);
63
+ expect(result.errors).toContain('Missing YAML frontmatter');
64
+ });
65
+ it('should handle inline array triggers', () => {
66
+ const content = `---
67
+ id: "inline-array"
68
+ name: "Inline Array Skill"
69
+ description: "Test inline arrays"
70
+ source: manual
71
+ triggers: ["alpha", "beta", "gamma"]
72
+ ---
73
+
74
+ Content
75
+ `;
76
+ const result = parseSkillFile(content);
77
+ expect(result.valid).toBe(true);
78
+ expect(result.metadata.triggers).toEqual(['alpha', 'beta', 'gamma']);
79
+ });
80
+ });
81
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/validator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateExtractionRequest, validateSkillMetadata } from '../../hooks/learned-skills/validator.js';
3
+ describe('Skill Validator', () => {
4
+ describe('validateExtractionRequest', () => {
5
+ it('should pass valid extraction request', () => {
6
+ const request = {
7
+ problem: 'How to handle React state updates correctly',
8
+ solution: 'Use the functional form of setState when the new state depends on the previous state. This ensures you always have the latest state value.',
9
+ triggers: ['react', 'state', 'setState'],
10
+ targetScope: 'user',
11
+ };
12
+ const result = validateExtractionRequest(request);
13
+ expect(result.valid).toBe(true);
14
+ expect(result.score).toBeGreaterThanOrEqual(50);
15
+ });
16
+ it('should fail with missing problem', () => {
17
+ const request = {
18
+ problem: '',
19
+ solution: 'Use functional setState for dependent updates',
20
+ triggers: ['react'],
21
+ targetScope: 'user',
22
+ };
23
+ const result = validateExtractionRequest(request);
24
+ expect(result.valid).toBe(false);
25
+ expect(result.missingFields).toContain('problem (minimum 10 characters)');
26
+ });
27
+ it('should warn about generic triggers', () => {
28
+ const request = {
29
+ problem: 'How to handle data correctly',
30
+ solution: 'Always validate and sanitize input data before processing',
31
+ triggers: ['the', 'data', 'this'],
32
+ targetScope: 'user',
33
+ };
34
+ const result = validateExtractionRequest(request);
35
+ expect(result.warnings.length).toBeGreaterThan(0);
36
+ expect(result.warnings.some(w => w.includes('Generic triggers'))).toBe(true);
37
+ });
38
+ it('should fail with short solution', () => {
39
+ const request = {
40
+ problem: 'Valid problem statement here',
41
+ solution: 'Too short',
42
+ triggers: ['test'],
43
+ targetScope: 'user',
44
+ };
45
+ const result = validateExtractionRequest(request);
46
+ expect(result.valid).toBe(false);
47
+ expect(result.missingFields).toContain('solution (minimum 20 characters)');
48
+ });
49
+ it('should fail with empty triggers', () => {
50
+ const request = {
51
+ problem: 'Valid problem statement here',
52
+ solution: 'Valid solution that is long enough',
53
+ triggers: [],
54
+ targetScope: 'user',
55
+ };
56
+ const result = validateExtractionRequest(request);
57
+ expect(result.valid).toBe(false);
58
+ expect(result.missingFields).toContain('triggers (at least one required)');
59
+ });
60
+ });
61
+ describe('validateSkillMetadata', () => {
62
+ it('should pass valid metadata', () => {
63
+ const metadata = {
64
+ id: 'skill-001',
65
+ name: 'Test Skill',
66
+ description: 'A test skill',
67
+ source: 'extracted',
68
+ triggers: ['test'],
69
+ createdAt: '2024-01-19T12:00:00Z',
70
+ };
71
+ const result = validateSkillMetadata(metadata);
72
+ expect(result.valid).toBe(true);
73
+ });
74
+ it('should fail with missing required fields', () => {
75
+ const metadata = {
76
+ name: 'Incomplete',
77
+ };
78
+ const result = validateSkillMetadata(metadata);
79
+ expect(result.valid).toBe(false);
80
+ expect(result.missingFields).toContain('id');
81
+ expect(result.missingFields).toContain('triggers');
82
+ });
83
+ });
84
+ });
85
+ //# sourceMappingURL=validator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.test.js","sourceRoot":"","sources":["../../../src/__tests__/learned-skills/validator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=omc-tools-server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omc-tools-server.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/omc-tools-server.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { omcToolsServer, omcToolNames, getOmcToolNames } from '../mcp/omc-tools-server.js';
3
+ describe('omc-tools-server', () => {
4
+ describe('omcToolNames', () => {
5
+ it('should export 15 tools total', () => {
6
+ expect(omcToolNames).toHaveLength(15);
7
+ });
8
+ it('should have 12 LSP tools', () => {
9
+ const lspTools = omcToolNames.filter(n => n.includes('lsp_'));
10
+ expect(lspTools).toHaveLength(12);
11
+ });
12
+ it('should have 2 AST tools', () => {
13
+ const astTools = omcToolNames.filter(n => n.includes('ast_'));
14
+ expect(astTools).toHaveLength(2);
15
+ });
16
+ it('should have python_repl tool', () => {
17
+ expect(omcToolNames).toContain('mcp__omc-tools__python_repl');
18
+ });
19
+ it('should use correct MCP naming format', () => {
20
+ omcToolNames.forEach(name => {
21
+ expect(name).toMatch(/^mcp__omc-tools__/);
22
+ });
23
+ });
24
+ });
25
+ describe('getOmcToolNames', () => {
26
+ it('should return all tools by default', () => {
27
+ const tools = getOmcToolNames();
28
+ expect(tools).toHaveLength(15);
29
+ });
30
+ it('should filter out LSP tools when includeLsp is false', () => {
31
+ const tools = getOmcToolNames({ includeLsp: false });
32
+ expect(tools.some(t => t.includes('lsp_'))).toBe(false);
33
+ expect(tools).toHaveLength(3); // 2 AST + 1 python
34
+ });
35
+ it('should filter out AST tools when includeAst is false', () => {
36
+ const tools = getOmcToolNames({ includeAst: false });
37
+ expect(tools.some(t => t.includes('ast_'))).toBe(false);
38
+ expect(tools).toHaveLength(13); // 12 LSP + 1 python
39
+ });
40
+ it('should filter out python_repl when includePython is false', () => {
41
+ const tools = getOmcToolNames({ includePython: false });
42
+ expect(tools.some(t => t.includes('python_repl'))).toBe(false);
43
+ expect(tools).toHaveLength(14); // 12 LSP + 2 AST
44
+ });
45
+ });
46
+ describe('omcToolsServer', () => {
47
+ it('should be defined', () => {
48
+ expect(omcToolsServer).toBeDefined();
49
+ });
50
+ });
51
+ });
52
+ //# sourceMappingURL=omc-tools-server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omc-tools-server.test.js","sourceRoot":"","sources":["../../src/__tests__/omc-tools-server.test.ts"],"names":[],"mappings":"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"}
@@ -182,7 +182,7 @@ export const architectAgent = {
182
182
  name: 'architect',
183
183
  description: 'Read-only consultation agent. High-IQ reasoning specialist for debugging hard problems and high-difficulty architecture design.',
184
184
  prompt: ARCHITECT_PROMPT,
185
- tools: ['Read', 'Grep', 'Glob', 'Bash', 'WebSearch'],
185
+ tools: ['Read', 'Grep', 'Glob', 'Bash', 'WebSearch', 'lsp_diagnostics', 'lsp_diagnostics_directory', 'ast_grep_search'],
186
186
  model: 'opus',
187
187
  defaultModel: 'opus',
188
188
  metadata: ARCHITECT_PROMPT_METADATA
@@ -1 +1 @@
1
- {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,6CAA6C,EAAE;QAC5F,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,6CAA6C,EAAE;QACjF,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,8BAA8B,EAAE;KACtE;IACD,OAAO,EAAE;QACP,6BAA6B;QAC7B,mCAAmC;QACnC,wBAAwB;QACxB,0BAA0B;QAC1B,+BAA+B;QAC/B,wBAAwB;KACzB;IACD,SAAS,EAAE;QACT,2CAA2C;QAC3C,+CAA+C;QAC/C,6CAA6C;QAC7C,gDAAgD;QAChD,kDAAkD;KACnD;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAkJJ,CAAC;AAEtB,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,iIAAiI;IAC9I,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;IACpD,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,yBAAyB;CACpC,CAAC"}
1
+ {"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,6CAA6C,EAAE;QAC5F,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,6CAA6C,EAAE;QACjF,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,8BAA8B,EAAE;KACtE;IACD,OAAO,EAAE;QACP,6BAA6B;QAC7B,mCAAmC;QACnC,wBAAwB;QACxB,0BAA0B;QAC1B,+BAA+B;QAC/B,wBAAwB;KACzB;IACD,SAAS,EAAE;QACT,2CAA2C;QAC3C,+CAA+C;QAC/C,6CAA6C;QAC7C,gDAAgD;QAChD,kDAAkD;KACnD;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAkJJ,CAAC;AAEtB,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,iIAAiI;IAC9I,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,iBAAiB,CAAC;IACvH,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,yBAAyB;CACpC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Codex Agent Definitions
3
+ * These agents route through the execute_codex MCP tool instead of Claude
4
+ */
5
+ export interface CodexAgentDefinition {
6
+ name: string;
7
+ description: string;
8
+ systemPrompt?: string;
9
+ model: string;
10
+ }
11
+ export declare const CODEX_AGENTS: Record<string, CodexAgentDefinition>;
12
+ /**
13
+ * Check if an agent type should be routed through Codex
14
+ */
15
+ export declare function isCodexAgent(agentType: string): boolean;
16
+ /**
17
+ * Get the Codex agent definition
18
+ */
19
+ export declare function getCodexAgent(agentType: string): CodexAgentDefinition | undefined;
20
+ //# sourceMappingURL=codex-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-agents.d.ts","sourceRoot":"","sources":["../../src/agents/codex-agents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAkB7D,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAGjF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Codex Agent Definitions
3
+ * These agents route through the execute_codex MCP tool instead of Claude
4
+ */
5
+ export const CODEX_AGENTS = {
6
+ 'architect-codex': {
7
+ name: 'architect-codex',
8
+ description: 'Codex-powered Architecture & Debugging Advisor (Opus tier, uses OpenAI Codex CLI)',
9
+ model: 'gpt-5.2'
10
+ },
11
+ 'planner-codex': {
12
+ name: 'planner-codex',
13
+ description: 'Codex-powered Strategic Planner (Opus tier, uses OpenAI Codex CLI)',
14
+ model: 'gpt-5.2'
15
+ },
16
+ 'critic-codex': {
17
+ name: 'critic-codex',
18
+ description: 'Codex-powered Plan Reviewer and Critic (Opus tier, uses OpenAI Codex CLI)',
19
+ model: 'gpt-5.2'
20
+ }
21
+ };
22
+ /**
23
+ * Check if an agent type should be routed through Codex
24
+ */
25
+ export function isCodexAgent(agentType) {
26
+ const normalizedType = agentType.replace('oh-my-claudecode:', '');
27
+ return Object.hasOwn(CODEX_AGENTS, normalizedType);
28
+ }
29
+ /**
30
+ * Get the Codex agent definition
31
+ */
32
+ export function getCodexAgent(agentType) {
33
+ const normalizedType = agentType.replace('oh-my-claudecode:', '');
34
+ return CODEX_AGENTS[normalizedType];
35
+ }
36
+ //# sourceMappingURL=codex-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-agents.js","sourceRoot":"","sources":["../../src/agents/codex-agents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,YAAY,GAAyC;IAChE,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mFAAmF;QAChG,KAAK,EAAE,SAAS;KACjB;IAED,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oEAAoE;QACjF,KAAK,EAAE,SAAS;KACjB;IAED,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2EAA2E;QACxF,KAAK,EAAE,SAAS;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC"}
@@ -79,7 +79,7 @@ export const architectMediumAgent = {
79
79
  name: 'architect-medium',
80
80
  description: 'Architecture & Debugging Advisor - Medium complexity (Sonnet). Use for moderate analysis.',
81
81
  prompt: loadAgentPrompt('architect-medium'),
82
- tools: ['Read', 'Glob', 'Grep', 'WebSearch', 'WebFetch'],
82
+ tools: ['Read', 'Glob', 'Grep', 'WebSearch', 'WebFetch', 'lsp_diagnostics', 'lsp_diagnostics_directory', 'ast_grep_search'],
83
83
  model: 'sonnet',
84
84
  defaultModel: 'sonnet'
85
85
  };
@@ -90,7 +90,7 @@ export const architectLowAgent = {
90
90
  name: 'architect-low',
91
91
  description: 'Quick code questions & simple lookups (Haiku). Use for simple questions that need fast answers.',
92
92
  prompt: loadAgentPrompt('architect-low'),
93
- tools: ['Read', 'Glob', 'Grep'],
93
+ tools: ['Read', 'Glob', 'Grep', 'lsp_diagnostics'],
94
94
  model: 'haiku',
95
95
  defaultModel: 'haiku'
96
96
  };
@@ -101,7 +101,7 @@ export const executorHighAgent = {
101
101
  name: 'executor-high',
102
102
  description: 'Complex task executor for multi-file changes (Opus). Use for tasks requiring deep reasoning.',
103
103
  prompt: loadAgentPrompt('executor-high'),
104
- tools: ['Read', 'Glob', 'Grep', 'Edit', 'Write', 'Bash', 'TodoWrite'],
104
+ tools: ['Read', 'Glob', 'Grep', 'Edit', 'Write', 'Bash', 'TodoWrite', 'lsp_diagnostics', 'lsp_diagnostics_directory', 'ast_grep_search', 'ast_grep_replace'],
105
105
  model: 'opus',
106
106
  defaultModel: 'opus'
107
107
  };
@@ -112,7 +112,7 @@ export const executorLowAgent = {
112
112
  name: 'executor-low',
113
113
  description: 'Simple single-file task executor (Haiku). Use for trivial tasks.',
114
114
  prompt: loadAgentPrompt('executor-low'),
115
- tools: ['Read', 'Glob', 'Grep', 'Edit', 'Write', 'Bash', 'TodoWrite'],
115
+ tools: ['Read', 'Glob', 'Grep', 'Edit', 'Write', 'Bash', 'TodoWrite', 'lsp_diagnostics'],
116
116
  model: 'haiku',
117
117
  defaultModel: 'haiku'
118
118
  };
@@ -134,7 +134,7 @@ export const exploreMediumAgent = {
134
134
  name: 'explore-medium',
135
135
  description: 'Thorough codebase search with reasoning (Sonnet). Use when search requires more reasoning.',
136
136
  prompt: loadAgentPrompt('explore-medium'),
137
- tools: ['Read', 'Glob', 'Grep'],
137
+ tools: ['Read', 'Glob', 'Grep', 'ast_grep_search', 'lsp_document_symbols', 'lsp_workspace_symbols'],
138
138
  model: 'sonnet',
139
139
  defaultModel: 'sonnet'
140
140
  };
@@ -145,7 +145,7 @@ export const exploreHighAgent = {
145
145
  name: 'explore-high',
146
146
  description: 'Complex architectural search for deep system understanding (Opus). Use for architectural mapping and design pattern discovery.',
147
147
  prompt: loadAgentPrompt('explore-high'),
148
- tools: ['Read', 'Glob', 'Grep'],
148
+ tools: ['Read', 'Glob', 'Grep', 'ast_grep_search', 'lsp_document_symbols', 'lsp_workspace_symbols', 'lsp_find_references'],
149
149
  model: 'opus',
150
150
  defaultModel: 'opus'
151
151
  };
@@ -178,7 +178,7 @@ export const qaTesterHighAgent = {
178
178
  name: 'qa-tester-high',
179
179
  description: 'Comprehensive production-ready QA testing with Opus. Use for thorough verification, edge case detection, security testing, and high-stakes releases.',
180
180
  prompt: loadAgentPrompt('qa-tester-high'),
181
- tools: ['Bash', 'Read', 'Grep', 'Glob', 'TodoWrite'],
181
+ tools: ['Bash', 'Read', 'Grep', 'Glob', 'TodoWrite', 'lsp_diagnostics'],
182
182
  model: 'opus',
183
183
  defaultModel: 'opus'
184
184
  };
@@ -236,7 +236,7 @@ export const buildFixerAgent = {
236
236
  name: 'build-fixer',
237
237
  description: 'Build and compilation error resolution specialist (Sonnet). Use for fixing build/type errors in any language.',
238
238
  prompt: loadAgentPrompt('build-fixer'),
239
- tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash'],
239
+ tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash', 'lsp_diagnostics', 'lsp_diagnostics_directory'],
240
240
  model: 'sonnet',
241
241
  defaultModel: 'sonnet'
242
242
  };
@@ -247,7 +247,7 @@ export const buildFixerLowAgent = {
247
247
  name: 'build-fixer-low',
248
248
  description: 'Simple build error fixer (Haiku). Use for trivial type errors and single-line fixes.',
249
249
  prompt: loadAgentPrompt('build-fixer-low'),
250
- tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash'],
250
+ tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash', 'lsp_diagnostics', 'lsp_diagnostics_directory'],
251
251
  model: 'haiku',
252
252
  defaultModel: 'haiku'
253
253
  };
@@ -258,7 +258,7 @@ export const tddGuideAgent = {
258
258
  name: 'tdd-guide',
259
259
  description: 'Test-Driven Development specialist (Sonnet). Use for TDD workflows and test coverage.',
260
260
  prompt: loadAgentPrompt('tdd-guide'),
261
- tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash'],
261
+ tools: ['Read', 'Grep', 'Glob', 'Edit', 'Write', 'Bash', 'lsp_diagnostics'],
262
262
  model: 'sonnet',
263
263
  defaultModel: 'sonnet'
264
264
  };
@@ -269,7 +269,7 @@ export const tddGuideLowAgent = {
269
269
  name: 'tdd-guide-low',
270
270
  description: 'Quick test suggestion specialist (Haiku). Use for simple test case ideas.',
271
271
  prompt: loadAgentPrompt('tdd-guide-low'),
272
- tools: ['Read', 'Grep', 'Glob', 'Bash'],
272
+ tools: ['Read', 'Grep', 'Glob', 'Bash', 'lsp_diagnostics'],
273
273
  model: 'haiku',
274
274
  defaultModel: 'haiku'
275
275
  };
@@ -280,7 +280,7 @@ export const codeReviewerAgent = {
280
280
  name: 'code-reviewer',
281
281
  description: 'Expert code review specialist (Opus). Use for comprehensive code quality review.',
282
282
  prompt: loadAgentPrompt('code-reviewer'),
283
- tools: ['Read', 'Grep', 'Glob', 'Bash'],
283
+ tools: ['Read', 'Grep', 'Glob', 'Bash', 'lsp_diagnostics', 'ast_grep_search'],
284
284
  model: 'opus',
285
285
  defaultModel: 'opus'
286
286
  };
@@ -291,7 +291,7 @@ export const codeReviewerLowAgent = {
291
291
  name: 'code-reviewer-low',
292
292
  description: 'Quick code quality checker (Haiku). Use for fast review of small changes.',
293
293
  prompt: loadAgentPrompt('code-reviewer-low'),
294
- tools: ['Read', 'Grep', 'Glob', 'Bash'],
294
+ tools: ['Read', 'Grep', 'Glob', 'Bash', 'lsp_diagnostics'],
295
295
  model: 'haiku',
296
296
  defaultModel: 'haiku'
297
297
  };