oh-my-claude-sisyphus 3.8.9 → 3.8.10

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 (445) 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/ultrapilot/decomposer.d.ts +1 -1
  97. package/dist/hooks/ultrapilot/decomposer.js +2 -2
  98. package/dist/index.d.ts +1 -1
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +4 -2
  101. package/dist/index.js.map +1 -1
  102. package/docs/CLAUDE.md +44 -4
  103. package/docs/FEATURES.md +1 -1
  104. package/docs/MIGRATION.md +5 -5
  105. package/docs/REFERENCE.md +6 -2
  106. package/package.json +1 -1
  107. package/skills/help/SKILL.md +1 -1
  108. package/skills/omc-setup/SKILL.md +1 -1
  109. package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
  110. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
  111. package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
  112. package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
  113. package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
  114. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
  115. package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
  116. package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
  117. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
  118. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
  119. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
  120. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
  121. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
  122. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
  123. package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
  124. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
  125. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  126. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  127. package/dist/__tests__/learned-skills/config.test.js +0 -37
  128. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  129. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  130. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  131. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  132. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  133. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  134. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  135. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  136. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  137. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  138. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  139. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  140. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  141. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  142. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  143. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  144. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  145. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  146. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  147. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  148. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  149. package/dist/agents/codex-agents.d.ts +0 -20
  150. package/dist/agents/codex-agents.d.ts.map +0 -1
  151. package/dist/agents/codex-agents.js +0 -36
  152. package/dist/agents/codex-agents.js.map +0 -1
  153. package/dist/agents/coordinator.d.ts +0 -11
  154. package/dist/agents/coordinator.d.ts.map +0 -1
  155. package/dist/agents/coordinator.js +0 -115
  156. package/dist/agents/coordinator.js.map +0 -1
  157. package/dist/agents/document-writer.d.ts +0 -11
  158. package/dist/agents/document-writer.d.ts.map +0 -1
  159. package/dist/agents/document-writer.js +0 -209
  160. package/dist/agents/document-writer.js.map +0 -1
  161. package/dist/agents/frontend-engineer.d.ts +0 -11
  162. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  163. package/dist/agents/frontend-engineer.js +0 -115
  164. package/dist/agents/frontend-engineer.js.map +0 -1
  165. package/dist/agents/librarian.d.ts +0 -12
  166. package/dist/agents/librarian.d.ts.map +0 -1
  167. package/dist/agents/librarian.js +0 -103
  168. package/dist/agents/librarian.js.map +0 -1
  169. package/dist/agents/metis.d.ts +0 -12
  170. package/dist/agents/metis.d.ts.map +0 -1
  171. package/dist/agents/metis.js +0 -117
  172. package/dist/agents/metis.js.map +0 -1
  173. package/dist/agents/momus.d.ts +0 -12
  174. package/dist/agents/momus.d.ts.map +0 -1
  175. package/dist/agents/momus.js +0 -128
  176. package/dist/agents/momus.js.map +0 -1
  177. package/dist/agents/multimodal-looker.d.ts +0 -11
  178. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  179. package/dist/agents/multimodal-looker.js +0 -70
  180. package/dist/agents/multimodal-looker.js.map +0 -1
  181. package/dist/agents/oracle.d.ts +0 -13
  182. package/dist/agents/oracle.d.ts.map +0 -1
  183. package/dist/agents/oracle.js +0 -191
  184. package/dist/agents/oracle.js.map +0 -1
  185. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  186. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  187. package/dist/agents/orchestrator-sisyphus.js +0 -115
  188. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  189. package/dist/agents/prometheus.d.ts +0 -12
  190. package/dist/agents/prometheus.d.ts.map +0 -1
  191. package/dist/agents/prometheus.js +0 -195
  192. package/dist/agents/prometheus.js.map +0 -1
  193. package/dist/agents/sisyphus-junior.d.ts +0 -12
  194. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  195. package/dist/agents/sisyphus-junior.js +0 -93
  196. package/dist/agents/sisyphus-junior.js.map +0 -1
  197. package/dist/cli/components/CostDashboard.d.ts +0 -15
  198. package/dist/cli/components/CostDashboard.d.ts.map +0 -1
  199. package/dist/cli/components/CostDashboard.js +0 -15
  200. package/dist/cli/components/CostDashboard.js.map +0 -1
  201. package/dist/cli/components/LiveStats.d.ts +0 -16
  202. package/dist/cli/components/LiveStats.d.ts.map +0 -1
  203. package/dist/cli/components/LiveStats.js +0 -16
  204. package/dist/cli/components/LiveStats.js.map +0 -1
  205. package/dist/cli/components/SessionBrowser.d.ts +0 -14
  206. package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
  207. package/dist/cli/components/SessionBrowser.js +0 -14
  208. package/dist/cli/components/SessionBrowser.js.map +0 -1
  209. package/dist/cli/tui.d.ts +0 -21
  210. package/dist/cli/tui.d.ts.map +0 -1
  211. package/dist/cli/tui.js +0 -21
  212. package/dist/cli/tui.js.map +0 -1
  213. package/dist/hooks/autopilot/signals.d.ts +0 -20
  214. package/dist/hooks/autopilot/signals.d.ts.map +0 -1
  215. package/dist/hooks/autopilot/signals.js +0 -75
  216. package/dist/hooks/autopilot/signals.js.map +0 -1
  217. package/dist/hooks/autopilot/summary.d.ts +0 -27
  218. package/dist/hooks/autopilot/summary.d.ts.map +0 -1
  219. package/dist/hooks/autopilot/summary.js +0 -160
  220. package/dist/hooks/autopilot/summary.js.map +0 -1
  221. package/dist/hooks/autopilot/transition.d.ts +0 -39
  222. package/dist/hooks/autopilot/transition.d.ts.map +0 -1
  223. package/dist/hooks/autopilot/transition.js +0 -216
  224. package/dist/hooks/autopilot/transition.js.map +0 -1
  225. package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
  226. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
  227. package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
  228. package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
  229. package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
  230. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
  231. package/dist/hooks/context-window-limit-recovery/index.js +0 -201
  232. package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
  233. package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
  234. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
  235. package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
  236. package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
  237. package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
  238. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
  239. package/dist/hooks/context-window-limit-recovery/types.js +0 -34
  240. package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
  241. package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
  242. package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
  243. package/dist/hooks/edit-error-recovery/index.js +0 -89
  244. package/dist/hooks/edit-error-recovery/index.js.map +0 -1
  245. package/dist/hooks/github-auto-responder/classifier.d.ts +0 -43
  246. package/dist/hooks/github-auto-responder/classifier.d.ts.map +0 -1
  247. package/dist/hooks/github-auto-responder/classifier.js +0 -150
  248. package/dist/hooks/github-auto-responder/classifier.js.map +0 -1
  249. package/dist/hooks/github-auto-responder/config.d.ts +0 -109
  250. package/dist/hooks/github-auto-responder/config.d.ts.map +0 -1
  251. package/dist/hooks/github-auto-responder/config.js +0 -69
  252. package/dist/hooks/github-auto-responder/config.js.map +0 -1
  253. package/dist/hooks/github-auto-responder/constants.d.ts +0 -45
  254. package/dist/hooks/github-auto-responder/constants.d.ts.map +0 -1
  255. package/dist/hooks/github-auto-responder/constants.js +0 -60
  256. package/dist/hooks/github-auto-responder/constants.js.map +0 -1
  257. package/dist/hooks/github-auto-responder/filters.d.ts +0 -95
  258. package/dist/hooks/github-auto-responder/filters.d.ts.map +0 -1
  259. package/dist/hooks/github-auto-responder/filters.js +0 -174
  260. package/dist/hooks/github-auto-responder/filters.js.map +0 -1
  261. package/dist/hooks/github-auto-responder/github-client.d.ts +0 -65
  262. package/dist/hooks/github-auto-responder/github-client.d.ts.map +0 -1
  263. package/dist/hooks/github-auto-responder/github-client.js +0 -128
  264. package/dist/hooks/github-auto-responder/github-client.js.map +0 -1
  265. package/dist/hooks/github-auto-responder/idempotency.d.ts +0 -68
  266. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +0 -1
  267. package/dist/hooks/github-auto-responder/idempotency.js +0 -147
  268. package/dist/hooks/github-auto-responder/idempotency.js.map +0 -1
  269. package/dist/hooks/github-auto-responder/index.d.ts +0 -140
  270. package/dist/hooks/github-auto-responder/index.d.ts.map +0 -1
  271. package/dist/hooks/github-auto-responder/index.js +0 -145
  272. package/dist/hooks/github-auto-responder/index.js.map +0 -1
  273. package/dist/hooks/github-auto-responder/persona.d.ts +0 -40
  274. package/dist/hooks/github-auto-responder/persona.d.ts.map +0 -1
  275. package/dist/hooks/github-auto-responder/persona.js +0 -99
  276. package/dist/hooks/github-auto-responder/persona.js.map +0 -1
  277. package/dist/hooks/github-auto-responder/responder.d.ts +0 -122
  278. package/dist/hooks/github-auto-responder/responder.d.ts.map +0 -1
  279. package/dist/hooks/github-auto-responder/responder.js +0 -264
  280. package/dist/hooks/github-auto-responder/responder.js.map +0 -1
  281. package/dist/hooks/github-auto-responder/server.d.ts +0 -140
  282. package/dist/hooks/github-auto-responder/server.d.ts.map +0 -1
  283. package/dist/hooks/github-auto-responder/server.js +0 -301
  284. package/dist/hooks/github-auto-responder/server.js.map +0 -1
  285. package/dist/hooks/github-auto-responder/signature.d.ts +0 -34
  286. package/dist/hooks/github-auto-responder/signature.d.ts.map +0 -1
  287. package/dist/hooks/github-auto-responder/signature.js +0 -79
  288. package/dist/hooks/github-auto-responder/signature.js.map +0 -1
  289. package/dist/hooks/github-auto-responder/templates.d.ts +0 -16
  290. package/dist/hooks/github-auto-responder/templates.d.ts.map +0 -1
  291. package/dist/hooks/github-auto-responder/templates.js +0 -93
  292. package/dist/hooks/github-auto-responder/templates.js.map +0 -1
  293. package/dist/hooks/github-auto-responder/types.d.ts +0 -246
  294. package/dist/hooks/github-auto-responder/types.d.ts.map +0 -1
  295. package/dist/hooks/github-auto-responder/types.js +0 -7
  296. package/dist/hooks/github-auto-responder/types.js.map +0 -1
  297. package/dist/hooks/learned-skills/config.d.ts +0 -53
  298. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  299. package/dist/hooks/learned-skills/config.js +0 -103
  300. package/dist/hooks/learned-skills/config.js.map +0 -1
  301. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  302. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  303. package/dist/hooks/learned-skills/constants.js +0 -26
  304. package/dist/hooks/learned-skills/constants.js.map +0 -1
  305. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  306. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  307. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  308. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  309. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  310. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  311. package/dist/hooks/learned-skills/detector.js +0 -150
  312. package/dist/hooks/learned-skills/detector.js.map +0 -1
  313. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  314. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  315. package/dist/hooks/learned-skills/finder.js +0 -117
  316. package/dist/hooks/learned-skills/finder.js.map +0 -1
  317. package/dist/hooks/learned-skills/index.d.ts +0 -62
  318. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  319. package/dist/hooks/learned-skills/index.js +0 -137
  320. package/dist/hooks/learned-skills/index.js.map +0 -1
  321. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  322. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  323. package/dist/hooks/learned-skills/loader.js +0 -107
  324. package/dist/hooks/learned-skills/loader.js.map +0 -1
  325. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  326. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  327. package/dist/hooks/learned-skills/parser.js +0 -190
  328. package/dist/hooks/learned-skills/parser.js.map +0 -1
  329. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  330. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  331. package/dist/hooks/learned-skills/promotion.js +0 -87
  332. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  333. package/dist/hooks/learned-skills/types.d.ts +0 -109
  334. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  335. package/dist/hooks/learned-skills/types.js +0 -8
  336. package/dist/hooks/learned-skills/types.js.map +0 -1
  337. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  338. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  339. package/dist/hooks/learned-skills/validator.js +0 -87
  340. package/dist/hooks/learned-skills/validator.js.map +0 -1
  341. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  342. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  343. package/dist/hooks/learned-skills/writer.js +0 -126
  344. package/dist/hooks/learned-skills/writer.js.map +0 -1
  345. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  346. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  347. package/dist/hooks/mnemosyne/config.js +0 -103
  348. package/dist/hooks/mnemosyne/config.js.map +0 -1
  349. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  350. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  351. package/dist/hooks/mnemosyne/constants.js +0 -26
  352. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  353. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  354. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  355. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  356. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  357. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  358. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  359. package/dist/hooks/mnemosyne/detector.js +0 -150
  360. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  361. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  362. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  363. package/dist/hooks/mnemosyne/finder.js +0 -117
  364. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  365. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  366. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  367. package/dist/hooks/mnemosyne/index.js +0 -137
  368. package/dist/hooks/mnemosyne/index.js.map +0 -1
  369. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  370. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  371. package/dist/hooks/mnemosyne/loader.js +0 -113
  372. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  373. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  374. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  375. package/dist/hooks/mnemosyne/parser.js +0 -190
  376. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  377. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  378. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  379. package/dist/hooks/mnemosyne/promotion.js +0 -87
  380. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  381. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  382. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  383. package/dist/hooks/mnemosyne/types.js +0 -8
  384. package/dist/hooks/mnemosyne/types.js.map +0 -1
  385. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  386. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  387. package/dist/hooks/mnemosyne/validator.js +0 -87
  388. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  389. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  390. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  391. package/dist/hooks/mnemosyne/writer.js +0 -126
  392. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  393. package/dist/hooks/ralph-loop/index.d.ts +0 -116
  394. package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
  395. package/dist/hooks/ralph-loop/index.js +0 -322
  396. package/dist/hooks/ralph-loop/index.js.map +0 -1
  397. package/dist/hooks/ralph-prd/index.d.ts +0 -130
  398. package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
  399. package/dist/hooks/ralph-prd/index.js +0 -310
  400. package/dist/hooks/ralph-prd/index.js.map +0 -1
  401. package/dist/hooks/ralph-progress/index.d.ts +0 -102
  402. package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
  403. package/dist/hooks/ralph-progress/index.js +0 -408
  404. package/dist/hooks/ralph-progress/index.js.map +0 -1
  405. package/dist/hooks/ralph-verifier/index.d.ts +0 -72
  406. package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
  407. package/dist/hooks/ralph-verifier/index.js +0 -223
  408. package/dist/hooks/ralph-verifier/index.js.map +0 -1
  409. package/dist/hooks/session-recovery/constants.d.ts +0 -56
  410. package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
  411. package/dist/hooks/session-recovery/constants.js +0 -78
  412. package/dist/hooks/session-recovery/constants.js.map +0 -1
  413. package/dist/hooks/session-recovery/index.d.ts +0 -53
  414. package/dist/hooks/session-recovery/index.d.ts.map +0 -1
  415. package/dist/hooks/session-recovery/index.js +0 -321
  416. package/dist/hooks/session-recovery/index.js.map +0 -1
  417. package/dist/hooks/session-recovery/storage.d.ts +0 -76
  418. package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
  419. package/dist/hooks/session-recovery/storage.js +0 -383
  420. package/dist/hooks/session-recovery/storage.js.map +0 -1
  421. package/dist/hooks/session-recovery/types.d.ts +0 -145
  422. package/dist/hooks/session-recovery/types.d.ts.map +0 -1
  423. package/dist/hooks/session-recovery/types.js +0 -8
  424. package/dist/hooks/session-recovery/types.js.map +0 -1
  425. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  426. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  427. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  428. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  429. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  430. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  431. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  432. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  433. package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
  434. package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
  435. package/dist/hooks/ultraqa-loop/index.js +0 -216
  436. package/dist/hooks/ultraqa-loop/index.js.map +0 -1
  437. package/dist/hooks/ultrawork-state/index.d.ts +0 -62
  438. package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
  439. package/dist/hooks/ultrawork-state/index.js +0 -208
  440. package/dist/hooks/ultrawork-state/index.js.map +0 -1
  441. package/dist/hud/sisyphus-state.d.ts +0 -31
  442. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  443. package/dist/hud/sisyphus-state.js +0 -163
  444. package/dist/hud/sisyphus-state.js.map +0 -1
  445. 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.9",
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.10",
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');