oh-my-claude-sisyphus 3.8.9 → 3.8.11

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 (456) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -1
  4. package/agents/architect.md +78 -0
  5. package/agents/explore.md +15 -0
  6. package/agents/qa-tester.md +159 -1
  7. package/agents/writer.md +20 -0
  8. package/commands/help.md +1 -1
  9. package/commands/omc-setup.md +1 -1
  10. package/dist/__tests__/agent-registry.test.d.ts +2 -0
  11. package/dist/__tests__/agent-registry.test.d.ts.map +1 -0
  12. package/dist/__tests__/agent-registry.test.js +39 -0
  13. package/dist/__tests__/agent-registry.test.js.map +1 -0
  14. package/dist/__tests__/load-agent-prompt.test.d.ts +2 -0
  15. package/dist/__tests__/load-agent-prompt.test.d.ts.map +1 -0
  16. package/dist/__tests__/load-agent-prompt.test.js +68 -0
  17. package/dist/__tests__/load-agent-prompt.test.js.map +1 -0
  18. package/dist/__tests__/model-routing.test.js +5 -34
  19. package/dist/__tests__/model-routing.test.js.map +1 -1
  20. package/dist/agents/analyst.d.ts.map +1 -1
  21. package/dist/agents/analyst.js +2 -77
  22. package/dist/agents/analyst.js.map +1 -1
  23. package/dist/agents/architect.d.ts.map +1 -1
  24. package/dist/agents/architect.js +3 -148
  25. package/dist/agents/architect.js.map +1 -1
  26. package/dist/agents/coordinator-deprecated.d.ts +18 -0
  27. package/dist/agents/coordinator-deprecated.d.ts.map +1 -0
  28. package/dist/agents/coordinator-deprecated.js +34 -0
  29. package/dist/agents/coordinator-deprecated.js.map +1 -0
  30. package/dist/agents/critic.d.ts.map +1 -1
  31. package/dist/agents/critic.js +2 -90
  32. package/dist/agents/critic.js.map +1 -1
  33. package/dist/agents/definitions.d.ts +2 -0
  34. package/dist/agents/definitions.d.ts.map +1 -1
  35. package/dist/agents/definitions.js +3 -32
  36. package/dist/agents/definitions.js.map +1 -1
  37. package/dist/agents/designer.d.ts.map +1 -1
  38. package/dist/agents/designer.js +2 -73
  39. package/dist/agents/designer.js.map +1 -1
  40. package/dist/agents/executor.d.ts +1 -0
  41. package/dist/agents/executor.d.ts.map +1 -1
  42. package/dist/agents/executor.js +3 -56
  43. package/dist/agents/executor.js.map +1 -1
  44. package/dist/agents/explore.d.ts.map +1 -1
  45. package/dist/agents/explore.js +2 -64
  46. package/dist/agents/explore.js.map +1 -1
  47. package/dist/agents/index.d.ts +4 -3
  48. package/dist/agents/index.d.ts.map +1 -1
  49. package/dist/agents/index.js +6 -3
  50. package/dist/agents/index.js.map +1 -1
  51. package/dist/agents/planner.d.ts.map +1 -1
  52. package/dist/agents/planner.js +2 -157
  53. package/dist/agents/planner.js.map +1 -1
  54. package/dist/agents/qa-tester.d.ts.map +1 -1
  55. package/dist/agents/qa-tester.js +2 -324
  56. package/dist/agents/qa-tester.js.map +1 -1
  57. package/dist/agents/researcher.d.ts.map +1 -1
  58. package/dist/agents/researcher.js +2 -65
  59. package/dist/agents/researcher.js.map +1 -1
  60. package/dist/agents/scientist.d.ts.map +1 -1
  61. package/dist/agents/scientist.js +2 -293
  62. package/dist/agents/scientist.js.map +1 -1
  63. package/dist/agents/utils.d.ts +7 -0
  64. package/dist/agents/utils.d.ts.map +1 -1
  65. package/dist/agents/utils.js +50 -0
  66. package/dist/agents/utils.js.map +1 -1
  67. package/dist/agents/vision.d.ts.map +1 -1
  68. package/dist/agents/vision.js +2 -32
  69. package/dist/agents/vision.js.map +1 -1
  70. package/dist/agents/writer.d.ts.map +1 -1
  71. package/dist/agents/writer.js +2 -171
  72. package/dist/agents/writer.js.map +1 -1
  73. package/dist/cli/analytics.js +0 -0
  74. package/dist/cli/index.js +0 -0
  75. package/dist/features/model-routing/index.d.ts +1 -1
  76. package/dist/features/model-routing/index.d.ts.map +1 -1
  77. package/dist/features/model-routing/index.js +1 -1
  78. package/dist/features/model-routing/index.js.map +1 -1
  79. package/dist/features/model-routing/router.d.ts +1 -15
  80. package/dist/features/model-routing/router.d.ts.map +1 -1
  81. package/dist/features/model-routing/router.js +2 -33
  82. package/dist/features/model-routing/router.js.map +1 -1
  83. package/dist/features/model-routing/rules.d.ts.map +1 -1
  84. package/dist/features/model-routing/rules.js +0 -8
  85. package/dist/features/model-routing/rules.js.map +1 -1
  86. package/dist/features/model-routing/types.d.ts +1 -2
  87. package/dist/features/model-routing/types.d.ts.map +1 -1
  88. package/dist/features/model-routing/types.js +2 -6
  89. package/dist/features/model-routing/types.js.map +1 -1
  90. package/dist/features/task-decomposer/index.d.ts +1 -1
  91. package/dist/features/task-decomposer/index.d.ts.map +1 -1
  92. package/dist/features/task-decomposer/index.js +5 -8
  93. package/dist/features/task-decomposer/index.js.map +1 -1
  94. package/dist/features/task-decomposer/types.d.ts +4 -4
  95. package/dist/features/task-decomposer/types.d.ts.map +1 -1
  96. package/dist/hooks/bridge.d.ts.map +1 -1
  97. package/dist/hooks/bridge.js +56 -49
  98. package/dist/hooks/bridge.js.map +1 -1
  99. package/dist/hooks/keyword-detector/__tests__/index.test.js +89 -1
  100. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
  101. package/dist/hooks/keyword-detector/index.d.ts +5 -1
  102. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  103. package/dist/hooks/keyword-detector/index.js +32 -11
  104. package/dist/hooks/keyword-detector/index.js.map +1 -1
  105. package/dist/hooks/ultrapilot/decomposer.d.ts +1 -1
  106. package/dist/hooks/ultrapilot/decomposer.js +2 -2
  107. package/dist/index.d.ts +1 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +4 -2
  110. package/dist/index.js.map +1 -1
  111. package/docs/CLAUDE.md +44 -4
  112. package/docs/FEATURES.md +1 -1
  113. package/docs/MIGRATION.md +5 -5
  114. package/docs/REFERENCE.md +6 -2
  115. package/package.json +1 -1
  116. package/scripts/keyword-detector.mjs +140 -59
  117. package/skills/help/SKILL.md +1 -1
  118. package/skills/omc-setup/SKILL.md +1 -1
  119. package/templates/hooks/keyword-detector.mjs +280 -118
  120. package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
  121. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
  122. package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
  123. package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
  124. package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
  125. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
  126. package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
  127. package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
  128. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
  129. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
  130. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
  131. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
  132. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
  133. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
  134. package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
  135. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
  136. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  137. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  138. package/dist/__tests__/learned-skills/config.test.js +0 -37
  139. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  140. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  141. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  142. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  143. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  144. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  145. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  146. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  147. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  148. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  149. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  150. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  151. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  152. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  153. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  154. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  155. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  156. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  157. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  158. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  159. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  160. package/dist/agents/codex-agents.d.ts +0 -20
  161. package/dist/agents/codex-agents.d.ts.map +0 -1
  162. package/dist/agents/codex-agents.js +0 -36
  163. package/dist/agents/codex-agents.js.map +0 -1
  164. package/dist/agents/coordinator.d.ts +0 -11
  165. package/dist/agents/coordinator.d.ts.map +0 -1
  166. package/dist/agents/coordinator.js +0 -115
  167. package/dist/agents/coordinator.js.map +0 -1
  168. package/dist/agents/document-writer.d.ts +0 -11
  169. package/dist/agents/document-writer.d.ts.map +0 -1
  170. package/dist/agents/document-writer.js +0 -209
  171. package/dist/agents/document-writer.js.map +0 -1
  172. package/dist/agents/frontend-engineer.d.ts +0 -11
  173. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  174. package/dist/agents/frontend-engineer.js +0 -115
  175. package/dist/agents/frontend-engineer.js.map +0 -1
  176. package/dist/agents/librarian.d.ts +0 -12
  177. package/dist/agents/librarian.d.ts.map +0 -1
  178. package/dist/agents/librarian.js +0 -103
  179. package/dist/agents/librarian.js.map +0 -1
  180. package/dist/agents/metis.d.ts +0 -12
  181. package/dist/agents/metis.d.ts.map +0 -1
  182. package/dist/agents/metis.js +0 -117
  183. package/dist/agents/metis.js.map +0 -1
  184. package/dist/agents/momus.d.ts +0 -12
  185. package/dist/agents/momus.d.ts.map +0 -1
  186. package/dist/agents/momus.js +0 -128
  187. package/dist/agents/momus.js.map +0 -1
  188. package/dist/agents/multimodal-looker.d.ts +0 -11
  189. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  190. package/dist/agents/multimodal-looker.js +0 -70
  191. package/dist/agents/multimodal-looker.js.map +0 -1
  192. package/dist/agents/oracle.d.ts +0 -13
  193. package/dist/agents/oracle.d.ts.map +0 -1
  194. package/dist/agents/oracle.js +0 -191
  195. package/dist/agents/oracle.js.map +0 -1
  196. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  197. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  198. package/dist/agents/orchestrator-sisyphus.js +0 -115
  199. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  200. package/dist/agents/prometheus.d.ts +0 -12
  201. package/dist/agents/prometheus.d.ts.map +0 -1
  202. package/dist/agents/prometheus.js +0 -195
  203. package/dist/agents/prometheus.js.map +0 -1
  204. package/dist/agents/sisyphus-junior.d.ts +0 -12
  205. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  206. package/dist/agents/sisyphus-junior.js +0 -93
  207. package/dist/agents/sisyphus-junior.js.map +0 -1
  208. package/dist/cli/components/CostDashboard.d.ts +0 -15
  209. package/dist/cli/components/CostDashboard.d.ts.map +0 -1
  210. package/dist/cli/components/CostDashboard.js +0 -15
  211. package/dist/cli/components/CostDashboard.js.map +0 -1
  212. package/dist/cli/components/LiveStats.d.ts +0 -16
  213. package/dist/cli/components/LiveStats.d.ts.map +0 -1
  214. package/dist/cli/components/LiveStats.js +0 -16
  215. package/dist/cli/components/LiveStats.js.map +0 -1
  216. package/dist/cli/components/SessionBrowser.d.ts +0 -14
  217. package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
  218. package/dist/cli/components/SessionBrowser.js +0 -14
  219. package/dist/cli/components/SessionBrowser.js.map +0 -1
  220. package/dist/cli/tui.d.ts +0 -21
  221. package/dist/cli/tui.d.ts.map +0 -1
  222. package/dist/cli/tui.js +0 -21
  223. package/dist/cli/tui.js.map +0 -1
  224. package/dist/hooks/autopilot/signals.d.ts +0 -20
  225. package/dist/hooks/autopilot/signals.d.ts.map +0 -1
  226. package/dist/hooks/autopilot/signals.js +0 -75
  227. package/dist/hooks/autopilot/signals.js.map +0 -1
  228. package/dist/hooks/autopilot/summary.d.ts +0 -27
  229. package/dist/hooks/autopilot/summary.d.ts.map +0 -1
  230. package/dist/hooks/autopilot/summary.js +0 -160
  231. package/dist/hooks/autopilot/summary.js.map +0 -1
  232. package/dist/hooks/autopilot/transition.d.ts +0 -39
  233. package/dist/hooks/autopilot/transition.d.ts.map +0 -1
  234. package/dist/hooks/autopilot/transition.js +0 -216
  235. package/dist/hooks/autopilot/transition.js.map +0 -1
  236. package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
  237. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
  238. package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
  239. package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
  240. package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
  241. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
  242. package/dist/hooks/context-window-limit-recovery/index.js +0 -201
  243. package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
  244. package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
  245. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
  246. package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
  247. package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
  248. package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
  249. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
  250. package/dist/hooks/context-window-limit-recovery/types.js +0 -34
  251. package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
  252. package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
  253. package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
  254. package/dist/hooks/edit-error-recovery/index.js +0 -89
  255. package/dist/hooks/edit-error-recovery/index.js.map +0 -1
  256. package/dist/hooks/github-auto-responder/classifier.d.ts +0 -43
  257. package/dist/hooks/github-auto-responder/classifier.d.ts.map +0 -1
  258. package/dist/hooks/github-auto-responder/classifier.js +0 -150
  259. package/dist/hooks/github-auto-responder/classifier.js.map +0 -1
  260. package/dist/hooks/github-auto-responder/config.d.ts +0 -109
  261. package/dist/hooks/github-auto-responder/config.d.ts.map +0 -1
  262. package/dist/hooks/github-auto-responder/config.js +0 -69
  263. package/dist/hooks/github-auto-responder/config.js.map +0 -1
  264. package/dist/hooks/github-auto-responder/constants.d.ts +0 -45
  265. package/dist/hooks/github-auto-responder/constants.d.ts.map +0 -1
  266. package/dist/hooks/github-auto-responder/constants.js +0 -60
  267. package/dist/hooks/github-auto-responder/constants.js.map +0 -1
  268. package/dist/hooks/github-auto-responder/filters.d.ts +0 -95
  269. package/dist/hooks/github-auto-responder/filters.d.ts.map +0 -1
  270. package/dist/hooks/github-auto-responder/filters.js +0 -174
  271. package/dist/hooks/github-auto-responder/filters.js.map +0 -1
  272. package/dist/hooks/github-auto-responder/github-client.d.ts +0 -65
  273. package/dist/hooks/github-auto-responder/github-client.d.ts.map +0 -1
  274. package/dist/hooks/github-auto-responder/github-client.js +0 -128
  275. package/dist/hooks/github-auto-responder/github-client.js.map +0 -1
  276. package/dist/hooks/github-auto-responder/idempotency.d.ts +0 -68
  277. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +0 -1
  278. package/dist/hooks/github-auto-responder/idempotency.js +0 -147
  279. package/dist/hooks/github-auto-responder/idempotency.js.map +0 -1
  280. package/dist/hooks/github-auto-responder/index.d.ts +0 -140
  281. package/dist/hooks/github-auto-responder/index.d.ts.map +0 -1
  282. package/dist/hooks/github-auto-responder/index.js +0 -145
  283. package/dist/hooks/github-auto-responder/index.js.map +0 -1
  284. package/dist/hooks/github-auto-responder/persona.d.ts +0 -40
  285. package/dist/hooks/github-auto-responder/persona.d.ts.map +0 -1
  286. package/dist/hooks/github-auto-responder/persona.js +0 -99
  287. package/dist/hooks/github-auto-responder/persona.js.map +0 -1
  288. package/dist/hooks/github-auto-responder/responder.d.ts +0 -122
  289. package/dist/hooks/github-auto-responder/responder.d.ts.map +0 -1
  290. package/dist/hooks/github-auto-responder/responder.js +0 -264
  291. package/dist/hooks/github-auto-responder/responder.js.map +0 -1
  292. package/dist/hooks/github-auto-responder/server.d.ts +0 -140
  293. package/dist/hooks/github-auto-responder/server.d.ts.map +0 -1
  294. package/dist/hooks/github-auto-responder/server.js +0 -301
  295. package/dist/hooks/github-auto-responder/server.js.map +0 -1
  296. package/dist/hooks/github-auto-responder/signature.d.ts +0 -34
  297. package/dist/hooks/github-auto-responder/signature.d.ts.map +0 -1
  298. package/dist/hooks/github-auto-responder/signature.js +0 -79
  299. package/dist/hooks/github-auto-responder/signature.js.map +0 -1
  300. package/dist/hooks/github-auto-responder/templates.d.ts +0 -16
  301. package/dist/hooks/github-auto-responder/templates.d.ts.map +0 -1
  302. package/dist/hooks/github-auto-responder/templates.js +0 -93
  303. package/dist/hooks/github-auto-responder/templates.js.map +0 -1
  304. package/dist/hooks/github-auto-responder/types.d.ts +0 -246
  305. package/dist/hooks/github-auto-responder/types.d.ts.map +0 -1
  306. package/dist/hooks/github-auto-responder/types.js +0 -7
  307. package/dist/hooks/github-auto-responder/types.js.map +0 -1
  308. package/dist/hooks/learned-skills/config.d.ts +0 -53
  309. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  310. package/dist/hooks/learned-skills/config.js +0 -103
  311. package/dist/hooks/learned-skills/config.js.map +0 -1
  312. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  313. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  314. package/dist/hooks/learned-skills/constants.js +0 -26
  315. package/dist/hooks/learned-skills/constants.js.map +0 -1
  316. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  317. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  318. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  319. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  320. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  321. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  322. package/dist/hooks/learned-skills/detector.js +0 -150
  323. package/dist/hooks/learned-skills/detector.js.map +0 -1
  324. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  325. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  326. package/dist/hooks/learned-skills/finder.js +0 -117
  327. package/dist/hooks/learned-skills/finder.js.map +0 -1
  328. package/dist/hooks/learned-skills/index.d.ts +0 -62
  329. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  330. package/dist/hooks/learned-skills/index.js +0 -137
  331. package/dist/hooks/learned-skills/index.js.map +0 -1
  332. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  333. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  334. package/dist/hooks/learned-skills/loader.js +0 -107
  335. package/dist/hooks/learned-skills/loader.js.map +0 -1
  336. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  337. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  338. package/dist/hooks/learned-skills/parser.js +0 -190
  339. package/dist/hooks/learned-skills/parser.js.map +0 -1
  340. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  341. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  342. package/dist/hooks/learned-skills/promotion.js +0 -87
  343. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  344. package/dist/hooks/learned-skills/types.d.ts +0 -109
  345. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  346. package/dist/hooks/learned-skills/types.js +0 -8
  347. package/dist/hooks/learned-skills/types.js.map +0 -1
  348. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  349. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  350. package/dist/hooks/learned-skills/validator.js +0 -87
  351. package/dist/hooks/learned-skills/validator.js.map +0 -1
  352. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  353. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  354. package/dist/hooks/learned-skills/writer.js +0 -126
  355. package/dist/hooks/learned-skills/writer.js.map +0 -1
  356. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  357. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  358. package/dist/hooks/mnemosyne/config.js +0 -103
  359. package/dist/hooks/mnemosyne/config.js.map +0 -1
  360. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  361. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  362. package/dist/hooks/mnemosyne/constants.js +0 -26
  363. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  364. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  365. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  366. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  367. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  368. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  369. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  370. package/dist/hooks/mnemosyne/detector.js +0 -150
  371. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  372. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  373. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  374. package/dist/hooks/mnemosyne/finder.js +0 -117
  375. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  376. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  377. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  378. package/dist/hooks/mnemosyne/index.js +0 -137
  379. package/dist/hooks/mnemosyne/index.js.map +0 -1
  380. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  381. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  382. package/dist/hooks/mnemosyne/loader.js +0 -113
  383. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  384. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  385. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  386. package/dist/hooks/mnemosyne/parser.js +0 -190
  387. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  388. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  389. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  390. package/dist/hooks/mnemosyne/promotion.js +0 -87
  391. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  392. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  393. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  394. package/dist/hooks/mnemosyne/types.js +0 -8
  395. package/dist/hooks/mnemosyne/types.js.map +0 -1
  396. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  397. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  398. package/dist/hooks/mnemosyne/validator.js +0 -87
  399. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  400. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  401. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  402. package/dist/hooks/mnemosyne/writer.js +0 -126
  403. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  404. package/dist/hooks/ralph-loop/index.d.ts +0 -116
  405. package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
  406. package/dist/hooks/ralph-loop/index.js +0 -322
  407. package/dist/hooks/ralph-loop/index.js.map +0 -1
  408. package/dist/hooks/ralph-prd/index.d.ts +0 -130
  409. package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
  410. package/dist/hooks/ralph-prd/index.js +0 -310
  411. package/dist/hooks/ralph-prd/index.js.map +0 -1
  412. package/dist/hooks/ralph-progress/index.d.ts +0 -102
  413. package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
  414. package/dist/hooks/ralph-progress/index.js +0 -408
  415. package/dist/hooks/ralph-progress/index.js.map +0 -1
  416. package/dist/hooks/ralph-verifier/index.d.ts +0 -72
  417. package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
  418. package/dist/hooks/ralph-verifier/index.js +0 -223
  419. package/dist/hooks/ralph-verifier/index.js.map +0 -1
  420. package/dist/hooks/session-recovery/constants.d.ts +0 -56
  421. package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
  422. package/dist/hooks/session-recovery/constants.js +0 -78
  423. package/dist/hooks/session-recovery/constants.js.map +0 -1
  424. package/dist/hooks/session-recovery/index.d.ts +0 -53
  425. package/dist/hooks/session-recovery/index.d.ts.map +0 -1
  426. package/dist/hooks/session-recovery/index.js +0 -321
  427. package/dist/hooks/session-recovery/index.js.map +0 -1
  428. package/dist/hooks/session-recovery/storage.d.ts +0 -76
  429. package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
  430. package/dist/hooks/session-recovery/storage.js +0 -383
  431. package/dist/hooks/session-recovery/storage.js.map +0 -1
  432. package/dist/hooks/session-recovery/types.d.ts +0 -145
  433. package/dist/hooks/session-recovery/types.d.ts.map +0 -1
  434. package/dist/hooks/session-recovery/types.js +0 -8
  435. package/dist/hooks/session-recovery/types.js.map +0 -1
  436. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  437. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  438. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  439. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  440. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  441. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  442. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  443. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  444. package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
  445. package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
  446. package/dist/hooks/ultraqa-loop/index.js +0 -216
  447. package/dist/hooks/ultraqa-loop/index.js.map +0 -1
  448. package/dist/hooks/ultrawork-state/index.d.ts +0 -62
  449. package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
  450. package/dist/hooks/ultrawork-state/index.js +0 -208
  451. package/dist/hooks/ultrawork-state/index.js.map +0 -1
  452. package/dist/hud/sisyphus-state.d.ts +0 -31
  453. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  454. package/dist/hud/sisyphus-state.js +0 -163
  455. package/dist/hud/sisyphus-state.js.map +0 -1
  456. package/dist/mcp/standalone-server.cjs +0 -19135
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "oh-my-claudecode",
12
12
  "description": "Claude Code native multi-agent orchestration with intelligent model routing, 28 agent variants, and 30 powerful skills. Zero learning curve. Maximum power.",
13
- "version": "3.8.8",
13
+ "version": "3.8.11",
14
14
  "author": {
15
15
  "name": "Yeachan Heo",
16
16
  "email": "hurrc04@gmail.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-claudecode",
3
- "version": "3.8.9",
3
+ "version": "3.8.11",
4
4
  "description": "Multi-agent orchestration system for Claude Code",
5
5
  "author": {
6
6
  "name": "oh-my-claudecode contributors"
package/README.md CHANGED
@@ -102,7 +102,7 @@ Optional shortcuts for power users. Natural language works fine without them.
102
102
  | `eco` | Token-efficient execution | `eco: migrate database` |
103
103
  | `plan` | Planning interview | `plan the API` |
104
104
 
105
- **Combine them:** `ralph ulw: migrate database` = persistence + parallelism
105
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
106
106
 
107
107
  ---
108
108
 
@@ -76,6 +76,84 @@ ALWAYS:
76
76
  - Acknowledge trade-offs
77
77
  </Anti_Patterns>
78
78
 
79
+ <Response_Requirements>
80
+ ## MANDATORY OUTPUT STRUCTURE
81
+
82
+ ```
83
+ ## Summary
84
+ [2-3 sentences: what you found and main recommendation]
85
+
86
+ ## Analysis
87
+ [Detailed findings with file:line references]
88
+
89
+ ## Root Cause
90
+ [The fundamental issue, not symptoms]
91
+
92
+ ## Recommendations
93
+ 1. [Highest priority] - [effort level] - [impact]
94
+ 2. [Next priority] - [effort level] - [impact]
95
+ ...
96
+
97
+ ## Trade-offs
98
+ | Option | Pros | Cons |
99
+ |--------|------|------|
100
+ | A | ... | ... |
101
+ | B | ... | ... |
102
+
103
+ ## References
104
+ - `path/to/file.ts:42` - [what it shows]
105
+ - `path/to/other.ts:108` - [what it shows]
106
+ ```
107
+
108
+ ## QUALITY REQUIREMENTS
109
+ - Every claim backed by file:line reference
110
+ - No vague advice ("consider refactoring")
111
+ - Concrete, implementable recommendations
112
+ - Acknowledge uncertainty when present
113
+ </Response_Requirements>
114
+
115
+ <QA_Tester_Handoff>
116
+ ## Verification via QA-Tester Agent
117
+
118
+ For bugs and fixes involving CLI applications or services, recommend **qa-tester** for verification.
119
+
120
+ ### When to Recommend QA-Tester
121
+
122
+ - Bug requires running the actual service to verify
123
+ - Fix involves CLI behavior or interactive input
124
+ - Need to test startup/shutdown sequences
125
+ - Regression testing of command outputs
126
+ - Service integration verification
127
+
128
+ ### Test Plan Format (provide to orchestrator for qa-tester)
129
+
130
+ ```
131
+ VERIFY: [what behavior to test]
132
+ SETUP: [prerequisites - build, install, etc.]
133
+ COMMANDS:
134
+ 1. [command] → expect [expected output/behavior]
135
+ 2. [command] → expect [expected output/behavior]
136
+ FAIL_IF: [conditions indicating the fix didn't work]
137
+ ```
138
+
139
+ ### Example Handoff
140
+
141
+ ```
142
+ ## Recommendations
143
+ 1. Fix the race condition in src/server.ts:142
144
+ 2. **Verify with qa-tester**:
145
+ VERIFY: Server handles concurrent connections
146
+ SETUP: npm run build
147
+ COMMANDS:
148
+ 1. Start server → expect "Listening on port 3000"
149
+ 2. Send 10 concurrent requests → expect all return 200
150
+ 3. Check logs → expect no "race condition" errors
151
+ FAIL_IF: Any request fails or errors in logs
152
+ ```
153
+
154
+ This creates a **diagnosis → fix → verify** loop with qa-tester as the verification arm.
155
+ </QA_Tester_Handoff>
156
+
79
157
  <Verification_Before_Completion>
80
158
  ## Iron Law: NO CLAIMS WITHOUT FRESH EVIDENCE
81
159
 
package/agents/explore.md CHANGED
@@ -74,6 +74,14 @@ Your response has **FAILED** if:
74
74
  - **No emojis**: Keep output clean and parseable
75
75
  - **No file creation**: Report findings as message text, never write files
76
76
 
77
+ ## Thoroughness Levels
78
+
79
+ | Level | Approach |
80
+ |-------|----------|
81
+ | Quick | 1-2 targeted searches |
82
+ | Medium | 3-5 parallel searches, different angles |
83
+ | Very Thorough | 5-10 searches, alternative naming conventions, related files |
84
+
77
85
  ## Tool Strategy
78
86
 
79
87
  Use the right tool for the job:
@@ -84,3 +92,10 @@ Use the right tool for the job:
84
92
  - **History/evolution** (when added, who changed): git commands
85
93
 
86
94
  Flood with parallel calls. Cross-validate findings across multiple tools.
95
+
96
+ ## Critical Rules
97
+
98
+ - NEVER single search - always launch parallel searches
99
+ - Report ALL findings, not just first match
100
+ - Note patterns and conventions discovered during exploration
101
+ - Suggest related areas to explore if relevant
@@ -8,6 +8,11 @@ model: sonnet
8
8
 
9
9
  Interactive CLI testing specialist using tmux for session management.
10
10
 
11
+ ## Critical Identity
12
+
13
+ You TEST applications, you don't IMPLEMENT them.
14
+ Your job is to verify behavior, capture outputs, and report findings.
15
+
11
16
  ## Purpose
12
17
 
13
18
  Tests CLI applications and background services by:
@@ -16,6 +21,24 @@ Tests CLI applications and background services by:
16
21
  - Verifying behavior against expected patterns
17
22
  - Ensuring clean teardown
18
23
 
24
+ ## Prerequisites Check
25
+
26
+ Before testing, verify:
27
+
28
+ ```bash
29
+ # 1. tmux is available
30
+ command -v tmux &>/dev/null || { echo "FAIL: tmux not installed"; exit 1; }
31
+
32
+ # 2. Port availability (before starting services)
33
+ PORT=<your-port>
34
+ nc -z localhost $PORT 2>/dev/null && { echo "FAIL: Port $PORT in use"; exit 1; }
35
+
36
+ # 3. Working directory exists
37
+ [ -d "<project-dir>" ] || { echo "FAIL: Project directory not found"; exit 1; }
38
+ ```
39
+
40
+ Run these checks BEFORE creating tmux sessions to fail fast.
41
+
19
42
  ## Tmux Command Reference
20
43
 
21
44
  ### Session Management
@@ -99,10 +122,145 @@ Format: `qa-<service>-<test>-<timestamp>`
99
122
 
100
123
  Example: `qa-api-health-1704067200`
101
124
 
125
+ ## Verification Patterns
126
+
127
+ ### Assert output contains pattern
128
+
129
+ ```bash
130
+ OUTPUT=$(tmux capture-pane -t <session> -p -S -50)
131
+ if echo "$OUTPUT" | grep -q '<expected>'; then
132
+ echo "PASS: Found expected output"
133
+ else
134
+ echo "FAIL: Expected output not found"
135
+ echo "Actual output:"
136
+ echo "$OUTPUT"
137
+ fi
138
+ ```
139
+
140
+ ### Assert output does NOT contain pattern
141
+
142
+ ```bash
143
+ OUTPUT=$(tmux capture-pane -t <session> -p -S -50)
144
+ if echo "$OUTPUT" | grep -q '<forbidden>'; then
145
+ echo "FAIL: Found forbidden output"
146
+ else
147
+ echo "PASS: No forbidden output"
148
+ fi
149
+ ```
150
+
151
+ ### Assert exit code
152
+
153
+ ```bash
154
+ tmux send-keys -t <session> 'echo $?' Enter
155
+ sleep 0.5
156
+ EXIT_CODE=$(tmux capture-pane -t <session> -p | tail -2 | head -1)
157
+ ```
158
+
159
+ ## Output Format
160
+
161
+ ```
162
+ ## QA Test Report: [Test Name]
163
+
164
+ ### Environment
165
+ - Session: [tmux session name]
166
+ - Service: [what was tested]
167
+ - Started: [timestamp]
168
+
169
+ ### Test Cases
170
+
171
+ #### TC1: [Test Case Name]
172
+ - **Command**: `<command sent>`
173
+ - **Expected**: [what should happen]
174
+ - **Actual**: [what happened]
175
+ - **Status**: PASS/FAIL
176
+
177
+ ### Summary
178
+ - Total: N tests
179
+ - Passed: X
180
+ - Failed: Y
181
+
182
+ ### Cleanup
183
+ - Session killed: YES/NO
184
+ - Artifacts removed: YES/NO
185
+ ```
186
+
102
187
  ## Rules
103
188
 
104
- - ALWAYS clean up sessions
189
+ - ALWAYS clean up sessions - never leave orphan tmux sessions
105
190
  - Use unique names to prevent collisions
106
191
  - Wait for readiness before sending commands
107
192
  - Capture output before assertions
108
193
  - Report actual vs expected on failure
194
+ - Handle timeouts gracefully with reasonable limits
195
+ - Check session exists before sending commands
196
+
197
+ ## Anti-Patterns
198
+
199
+ NEVER:
200
+ - Leave sessions running after tests complete
201
+ - Use generic session names that might conflict
202
+ - Skip cleanup even on test failure
203
+ - Send commands without waiting for previous to complete
204
+ - Assume immediate output (always add small delays)
205
+
206
+ ALWAYS:
207
+ - Kill sessions in finally/cleanup block
208
+ - Use descriptive session names
209
+ - Capture full output for debugging
210
+ - Report both success and failure cases
211
+
212
+ ## Architect Collaboration
213
+
214
+ You are the VERIFICATION ARM of the architect diagnosis workflow.
215
+
216
+ ### The Architect -> QA-Tester Pipeline
217
+
218
+ 1. Architect diagnoses a bug or architectural issue
219
+ 2. Architect recommends specific test scenarios to verify the fix
220
+ 3. YOU execute those test scenarios using tmux
221
+ 4. YOU report pass/fail results with captured evidence
222
+
223
+ ### When Receiving Architect Test Plans
224
+
225
+ Architect may provide:
226
+ - Specific commands to run
227
+ - Expected outputs to verify
228
+ - Error conditions to check
229
+ - Regression scenarios to test
230
+
231
+ Your job: Execute EXACTLY what architect specifies and report objective results.
232
+
233
+ ### Test Plan Format (from Architect)
234
+
235
+ ```
236
+ VERIFY: [what to test]
237
+ SETUP: [any prerequisites]
238
+ COMMANDS:
239
+ 1. [command 1] -> expect [output 1]
240
+ 2. [command 2] -> expect [output 2]
241
+ FAIL_IF: [conditions that indicate failure]
242
+ ```
243
+
244
+ ### Reporting Back to Architect
245
+
246
+ ```
247
+ ## Verification Results for: [Architect's test plan]
248
+
249
+ ### Executed Tests
250
+ - [command]: [PASS/FAIL] - [actual output snippet]
251
+
252
+ ### Evidence
253
+ [Captured tmux output]
254
+
255
+ ### Verdict
256
+ [VERIFIED / NOT VERIFIED / PARTIALLY VERIFIED]
257
+ [Brief explanation]
258
+ ```
259
+
260
+ ### Debug Cycle
261
+
262
+ If architect's fix doesn't work:
263
+ 1. Report exact failure with full output
264
+ 2. Architect re-diagnoses with new evidence
265
+ 3. You re-test the revised fix
266
+ 4. Repeat until VERIFIED
package/agents/writer.md CHANGED
@@ -102,6 +102,26 @@ Create documentation that is accurate, comprehensive, and genuinely useful. Exec
102
102
  - Check all links (internal and external)
103
103
  - Verify API request/response examples against actual API
104
104
  - If verification fails: Fix documentation and re-verify
105
+
106
+ ### **4. Generate completion report**
107
+
108
+ **TASK COMPLETION REPORT**
109
+ ```
110
+ COMPLETED TASK: [exact task description]
111
+ STATUS: SUCCESS/FAILED/BLOCKED
112
+
113
+ WHAT WAS DOCUMENTED:
114
+ - [Detailed list of all documentation created]
115
+ - [Files created/modified with paths]
116
+
117
+ FILES CHANGED:
118
+ - Created: [list of new files]
119
+ - Modified: [list of modified files]
120
+
121
+ VERIFICATION RESULTS:
122
+ - [Code examples tested: X/Y working]
123
+ - [Links checked: X/Y valid]
124
+ ```
105
125
  </workflow>
106
126
 
107
127
  <guide>
package/commands/help.md CHANGED
@@ -27,7 +27,7 @@ You can include these words naturally in your request for explicit control:
27
27
  | **ulw** | Max parallelism | "ulw refactor the API" |
28
28
  | **plan** | Planning interview | "plan the new endpoints" |
29
29
 
30
- **Combine them:** "ralph ulw: migrate the database"
30
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
31
31
 
32
32
  ## Stopping Things
33
33
 
@@ -276,7 +276,7 @@ Just include these words naturally in your request:
276
276
  | ulw | Max parallelism | "ulw refactor the API" |
277
277
  | plan | Planning interview | "plan the new endpoints" |
278
278
 
279
- Combine them: "ralph ulw: migrate the database"
279
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
280
280
 
281
281
  MCP SERVERS:
282
282
  Run /oh-my-claudecode:mcp-setup to add tools like web search, GitHub, etc.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/agent-registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { getAgentDefinitions } from '../agents/definitions.js';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ describe('Agent Registry Validation', () => {
9
+ test('agent count matches documentation', () => {
10
+ const agents = getAgentDefinitions();
11
+ expect(Object.keys(agents).length).toBe(32);
12
+ });
13
+ test('all agents have .md prompt files', () => {
14
+ const agents = Object.keys(getAgentDefinitions());
15
+ const agentsDir = path.join(__dirname, '../../agents');
16
+ for (const name of agents) {
17
+ const mdPath = path.join(agentsDir, `${name}.md`);
18
+ expect(fs.existsSync(mdPath), `Missing .md file for agent: ${name}`).toBe(true);
19
+ }
20
+ });
21
+ test('all registry agents are exported from index.ts', async () => {
22
+ const registryAgents = Object.keys(getAgentDefinitions());
23
+ const exports = await import('../agents/index.js');
24
+ for (const name of registryAgents) {
25
+ const exportName = name.replace(/-([a-z])/g, (_, c) => c.toUpperCase()) + 'Agent';
26
+ expect(exports[exportName], `Missing export for agent: ${name} (expected ${exportName})`).toBeDefined();
27
+ }
28
+ });
29
+ test('no hardcoded prompts in base agent .ts files', () => {
30
+ const baseAgents = ['architect', 'executor', 'explore', 'designer', 'researcher',
31
+ 'writer', 'vision', 'planner', 'critic', 'analyst', 'scientist', 'qa-tester'];
32
+ const agentsDir = path.join(__dirname, '../agents');
33
+ for (const name of baseAgents) {
34
+ const content = fs.readFileSync(path.join(agentsDir, `${name}.ts`), 'utf-8');
35
+ expect(content, `Hardcoded prompt found in ${name}.ts`).not.toMatch(/const\s+\w+_PROMPT\s*=\s*`/);
36
+ }
37
+ });
38
+ });
39
+ //# sourceMappingURL=agent-registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,+BAA+B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAA4B,CAAC;QAC9E,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC;YAClG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,6BAA6B,IAAI,cAAc,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1G,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY;YAC5D,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7E,MAAM,CAAC,OAAO,EAAE,6BAA6B,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACpG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load-agent-prompt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-agent-prompt.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/load-agent-prompt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import { loadAgentPrompt } from '../agents/utils.js';
3
+ describe('loadAgentPrompt', () => {
4
+ describe('valid agent names', () => {
5
+ test('loads an existing agent prompt with frontmatter', () => {
6
+ const prompt = loadAgentPrompt('architect');
7
+ expect(prompt).toBeTruthy();
8
+ expect(prompt.length).toBeGreaterThan(100);
9
+ // Should NOT contain frontmatter
10
+ expect(prompt).not.toMatch(/^---/);
11
+ // Should contain actual prompt content
12
+ expect(prompt).toMatch(/architect|Oracle|debugging/i);
13
+ });
14
+ test('loads different agents correctly', () => {
15
+ const executor = loadAgentPrompt('executor');
16
+ const explore = loadAgentPrompt('explore');
17
+ expect(executor).toBeTruthy();
18
+ expect(explore).toBeTruthy();
19
+ expect(executor).not.toBe(explore);
20
+ });
21
+ test('handles agent names with hyphens', () => {
22
+ const prompt = loadAgentPrompt('qa-tester');
23
+ expect(prompt).toBeTruthy();
24
+ expect(prompt.length).toBeGreaterThan(100);
25
+ });
26
+ });
27
+ describe('security: path traversal prevention', () => {
28
+ test('rejects agent names with path traversal sequences', () => {
29
+ expect(() => loadAgentPrompt('../etc/passwd')).toThrow('Invalid agent name');
30
+ expect(() => loadAgentPrompt('../../etc/passwd')).toThrow('Invalid agent name');
31
+ expect(() => loadAgentPrompt('foo/../bar')).toThrow('Invalid agent name');
32
+ });
33
+ test('rejects agent names with forward slashes', () => {
34
+ expect(() => loadAgentPrompt('foo/bar')).toThrow('Invalid agent name');
35
+ expect(() => loadAgentPrompt('/etc/passwd')).toThrow('Invalid agent name');
36
+ });
37
+ test('rejects agent names with backslashes', () => {
38
+ expect(() => loadAgentPrompt('foo\\bar')).toThrow('Invalid agent name');
39
+ expect(() => loadAgentPrompt('..\\..\\etc\\passwd')).toThrow('Invalid agent name');
40
+ });
41
+ test('rejects agent names with special characters', () => {
42
+ expect(() => loadAgentPrompt('foo@bar')).toThrow('Invalid agent name');
43
+ expect(() => loadAgentPrompt('foo$bar')).toThrow('Invalid agent name');
44
+ expect(() => loadAgentPrompt('foo bar')).toThrow('Invalid agent name');
45
+ expect(() => loadAgentPrompt('foo.bar')).toThrow('Invalid agent name');
46
+ });
47
+ test('allows valid agent names only', () => {
48
+ // These should not throw
49
+ expect(() => loadAgentPrompt('architect')).not.toThrow();
50
+ expect(() => loadAgentPrompt('qa-tester')).not.toThrow();
51
+ expect(() => loadAgentPrompt('explore-high')).not.toThrow();
52
+ });
53
+ });
54
+ describe('error handling', () => {
55
+ test('returns fallback for nonexistent agent', () => {
56
+ const result = loadAgentPrompt('nonexistent-agent-xyz');
57
+ expect(result).toContain('Agent: nonexistent-agent-xyz');
58
+ expect(result).toContain('Prompt unavailable');
59
+ });
60
+ test('fallback does not leak internal paths', () => {
61
+ const result = loadAgentPrompt('nonexistent-agent-xyz');
62
+ expect(result).not.toContain('/home');
63
+ expect(result).not.toContain('agents/');
64
+ expect(result).not.toContain('.md');
65
+ });
66
+ });
67
+ });
68
+ //# sourceMappingURL=load-agent-prompt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-agent-prompt.test.js","sourceRoot":"","sources":["../../src/__tests__/load-agent-prompt.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { describe, it, expect } from 'vitest';
2
2
  import { extractLexicalSignals, extractStructuralSignals, extractContextSignals, extractAllSignals, } from '../features/model-routing/signals.js';
3
3
  import { calculateComplexityScore, scoreToTier, calculateComplexityTier, getScoreBreakdown, calculateConfidence, } from '../features/model-routing/scorer.js';
4
4
  import { evaluateRules, getMatchingRules, createRule, mergeRules, DEFAULT_ROUTING_RULES, } from '../features/model-routing/rules.js';
5
- import { routeTask, escalateModel, canEscalate, getModelForTask, quickTierForAgent, isFixedTierAgent, analyzeTaskComplexity, } from '../features/model-routing/router.js';
5
+ import { routeTask, escalateModel, canEscalate, getModelForTask, quickTierForAgent, analyzeTaskComplexity, } from '../features/model-routing/router.js';
6
6
  // ============ Signal Extraction Tests ============
7
7
  describe('Signal Extraction', () => {
8
8
  describe('extractLexicalSignals', () => {
@@ -410,16 +410,6 @@ describe('Routing Rules', () => {
410
410
  expect(result.tier).toBe('EXPLICIT');
411
411
  expect(result.ruleName).toBe('explicit-model-specified');
412
412
  });
413
- it('should evaluate orchestrator rule', () => {
414
- const context = {
415
- taskPrompt: 'test',
416
- agentType: 'coordinator',
417
- };
418
- const signals = extractAllSignals(context.taskPrompt, context);
419
- const result = evaluateRules(context, signals);
420
- expect(result.tier).toBe('HIGH');
421
- expect(result.ruleName).toBe('orchestrator-fixed-opus');
422
- });
423
413
  it('should evaluate architect complex debugging rule', () => {
424
414
  const context = {
425
415
  taskPrompt: 'Debug this issue and find the root cause',
@@ -471,11 +461,11 @@ describe('Routing Rules', () => {
471
461
  const context = {
472
462
  taskPrompt: 'test',
473
463
  explicitModel: 'haiku',
474
- agentType: 'coordinator',
464
+ agentType: 'architect',
475
465
  };
476
466
  const signals = extractAllSignals(context.taskPrompt, context);
477
467
  const result = evaluateRules(context, signals);
478
- // Explicit model (priority 100) should win over orchestrator (priority 90)
468
+ // Explicit model (priority 100) should win over other rules
479
469
  expect(result.tier).toBe('EXPLICIT');
480
470
  expect(result.ruleName).toBe('explicit-model-specified');
481
471
  });
@@ -555,11 +545,11 @@ describe('Router', () => {
555
545
  it('should respect agent overrides', () => {
556
546
  const context = {
557
547
  taskPrompt: 'test',
558
- agentType: 'coordinator',
548
+ agentType: 'custom-agent',
559
549
  };
560
550
  const decision = routeTask(context, {
561
551
  agentOverrides: {
562
- 'coordinator': { tier: 'HIGH', reason: 'Test override' },
552
+ 'custom-agent': { tier: 'HIGH', reason: 'Test override' },
563
553
  },
564
554
  });
565
555
  expect(decision.tier).toBe('HIGH');
@@ -627,26 +617,7 @@ describe('Router', () => {
627
617
  expect(quickTierForAgent('unknown-agent')).toBeNull();
628
618
  });
629
619
  });
630
- describe('isFixedTierAgent', () => {
631
- it('should return true for coordinator', () => {
632
- expect(isFixedTierAgent('coordinator')).toBe(true);
633
- });
634
- it('should return false for architect', () => {
635
- expect(isFixedTierAgent('architect')).toBe(false);
636
- });
637
- it('should return false for executor', () => {
638
- expect(isFixedTierAgent('executor')).toBe(false);
639
- });
640
- it('should return false for unknown agent', () => {
641
- expect(isFixedTierAgent('unknown-agent')).toBe(false);
642
- });
643
- });
644
620
  describe('getModelForTask', () => {
645
- it('should return opus for orchestrator', () => {
646
- const result = getModelForTask('coordinator', 'test task');
647
- expect(result.model).toBe('opus');
648
- expect(result.tier).toBe('HIGH');
649
- });
650
621
  it('should return adaptive model for architect with simple task', () => {
651
622
  const result = getModelForTask('architect', 'find the file');
652
623
  expect(result.model).toBe('haiku');