oh-my-claude-sisyphus 3.8.15 → 3.9.0

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 (259) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.mcp.json +1 -1
  4. package/README.md +9 -11
  5. package/agents/analyst.md +41 -0
  6. package/agents/architect.md +45 -0
  7. package/agents/critic.md +42 -0
  8. package/agents/deep-executor.md +193 -0
  9. package/agents/planner.md +82 -0
  10. package/bridge/mcp-server.cjs +1 -1
  11. package/commands/autopilot.md +2 -6
  12. package/commands/hud.md +7 -2
  13. package/commands/ralph.md +3 -3
  14. package/commands/ultrapilot.md +2 -6
  15. package/dist/__tests__/agent-registry.test.js +1 -1
  16. package/dist/__tests__/delegation-enforcement-levels.test.js +0 -1
  17. package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -1
  18. package/dist/__tests__/hooks/learner/parser.test.d.ts +5 -0
  19. package/dist/__tests__/hooks/learner/parser.test.d.ts.map +1 -0
  20. package/dist/__tests__/hooks/learner/parser.test.js +201 -0
  21. package/dist/__tests__/hooks/learner/parser.test.js.map +1 -0
  22. package/dist/__tests__/hud/cwd.test.d.ts +2 -0
  23. package/dist/__tests__/hud/cwd.test.d.ts.map +1 -0
  24. package/dist/__tests__/hud/cwd.test.js +62 -0
  25. package/dist/__tests__/hud/cwd.test.js.map +1 -0
  26. package/dist/__tests__/hud/defaults.test.d.ts +2 -0
  27. package/dist/__tests__/hud/defaults.test.d.ts.map +1 -0
  28. package/dist/__tests__/hud/defaults.test.js +21 -0
  29. package/dist/__tests__/hud/defaults.test.js.map +1 -0
  30. package/dist/__tests__/hud/render.test.d.ts +2 -0
  31. package/dist/__tests__/hud/render.test.d.ts.map +1 -0
  32. package/dist/__tests__/hud/render.test.js +141 -0
  33. package/dist/__tests__/hud/render.test.js.map +1 -0
  34. package/dist/__tests__/hud/thinking.test.d.ts +2 -0
  35. package/dist/__tests__/hud/thinking.test.d.ts.map +1 -0
  36. package/dist/__tests__/hud/thinking.test.js +32 -0
  37. package/dist/__tests__/hud/thinking.test.js.map +1 -0
  38. package/dist/__tests__/installer.test.js +8 -8
  39. package/dist/__tests__/installer.test.js.map +1 -1
  40. package/dist/__tests__/mnemosyne/parser.test.js +1 -1
  41. package/dist/__tests__/mnemosyne/parser.test.js.map +1 -1
  42. package/dist/__tests__/omc-tools-server.test.js +2 -2
  43. package/dist/__tests__/omc-tools-server.test.js.map +1 -1
  44. package/dist/__tests__/skills.test.js +5 -4
  45. package/dist/__tests__/skills.test.js.map +1 -1
  46. package/dist/agents/deep-executor.d.ts +15 -0
  47. package/dist/agents/deep-executor.d.ts.map +1 -0
  48. package/dist/agents/deep-executor.js +47 -0
  49. package/dist/agents/deep-executor.js.map +1 -0
  50. package/dist/agents/definitions.d.ts +15 -0
  51. package/dist/agents/definitions.d.ts.map +1 -1
  52. package/dist/agents/definitions.js +25 -0
  53. package/dist/agents/definitions.js.map +1 -1
  54. package/dist/agents/index.d.ts +1 -0
  55. package/dist/agents/index.d.ts.map +1 -1
  56. package/dist/agents/index.js +1 -0
  57. package/dist/agents/index.js.map +1 -1
  58. package/dist/cli/commands/doctor-conflicts.d.ts +55 -0
  59. package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -0
  60. package/dist/cli/commands/doctor-conflicts.js +261 -0
  61. package/dist/cli/commands/doctor-conflicts.js.map +1 -0
  62. package/dist/cli/index.js +16 -1
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/features/auto-update.d.ts +12 -0
  65. package/dist/features/auto-update.d.ts.map +1 -1
  66. package/dist/features/auto-update.js +4 -1
  67. package/dist/features/auto-update.js.map +1 -1
  68. package/dist/features/context-injector/types.d.ts +1 -1
  69. package/dist/features/context-injector/types.d.ts.map +1 -1
  70. package/dist/features/continuation-enforcement.js +1 -1
  71. package/dist/features/state-manager/index.d.ts.map +1 -1
  72. package/dist/features/state-manager/index.js +7 -4
  73. package/dist/features/state-manager/index.js.map +1 -1
  74. package/dist/features/verification/example.d.ts.map +1 -1
  75. package/dist/features/verification/example.js +4 -2
  76. package/dist/features/verification/example.js.map +1 -1
  77. package/dist/hooks/__tests__/bridge.test.d.ts +2 -0
  78. package/dist/hooks/__tests__/bridge.test.d.ts.map +1 -0
  79. package/dist/hooks/__tests__/bridge.test.js +199 -0
  80. package/dist/hooks/__tests__/bridge.test.js.map +1 -0
  81. package/dist/hooks/beads-context/__tests__/index.test.d.ts +2 -0
  82. package/dist/hooks/beads-context/__tests__/index.test.d.ts.map +1 -0
  83. package/dist/hooks/beads-context/__tests__/index.test.js +150 -0
  84. package/dist/hooks/beads-context/__tests__/index.test.js.map +1 -0
  85. package/dist/hooks/beads-context/constants.d.ts +3 -0
  86. package/dist/hooks/beads-context/constants.d.ts.map +1 -0
  87. package/dist/hooks/beads-context/constants.js +35 -0
  88. package/dist/hooks/beads-context/constants.js.map +1 -0
  89. package/dist/hooks/beads-context/index.d.ts +21 -0
  90. package/dist/hooks/beads-context/index.d.ts.map +1 -0
  91. package/dist/hooks/beads-context/index.js +62 -0
  92. package/dist/hooks/beads-context/index.js.map +1 -0
  93. package/dist/hooks/beads-context/types.d.ts +7 -0
  94. package/dist/hooks/beads-context/types.d.ts.map +1 -0
  95. package/dist/hooks/beads-context/types.js +2 -0
  96. package/dist/hooks/beads-context/types.js.map +1 -0
  97. package/dist/hooks/bridge.d.ts +4 -0
  98. package/dist/hooks/bridge.d.ts.map +1 -1
  99. package/dist/hooks/bridge.js +80 -47
  100. package/dist/hooks/bridge.js.map +1 -1
  101. package/dist/hooks/index.d.ts +2 -1
  102. package/dist/hooks/index.d.ts.map +1 -1
  103. package/dist/hooks/index.js +4 -1
  104. package/dist/hooks/index.js.map +1 -1
  105. package/dist/hooks/learner/parser.d.ts.map +1 -1
  106. package/dist/hooks/learner/parser.js +12 -5
  107. package/dist/hooks/learner/parser.js.map +1 -1
  108. package/dist/hooks/mode-registry/index.d.ts +2 -0
  109. package/dist/hooks/mode-registry/index.d.ts.map +1 -1
  110. package/dist/hooks/mode-registry/index.js +8 -19
  111. package/dist/hooks/mode-registry/index.js.map +1 -1
  112. package/dist/hooks/permission-handler/index.d.ts.map +1 -1
  113. package/dist/hooks/permission-handler/index.js +3 -1
  114. package/dist/hooks/permission-handler/index.js.map +1 -1
  115. package/dist/hooks/persistent-mode/index.d.ts +1 -1
  116. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  117. package/dist/hooks/persistent-mode/index.js +5 -33
  118. package/dist/hooks/persistent-mode/index.js.map +1 -1
  119. package/dist/hooks/ralph/index.d.ts +1 -1
  120. package/dist/hooks/ralph/index.d.ts.map +1 -1
  121. package/dist/hooks/ralph/index.js +1 -1
  122. package/dist/hooks/ralph/index.js.map +1 -1
  123. package/dist/hooks/ralph/loop.d.ts +1 -9
  124. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  125. package/dist/hooks/ralph/loop.js +1 -37
  126. package/dist/hooks/ralph/loop.js.map +1 -1
  127. package/dist/hooks/ralph/prd.js +1 -1
  128. package/dist/hooks/ralph/verifier.d.ts +4 -5
  129. package/dist/hooks/ralph/verifier.d.ts.map +1 -1
  130. package/dist/hooks/ralph/verifier.js +7 -10
  131. package/dist/hooks/ralph/verifier.js.map +1 -1
  132. package/dist/hooks/session-end/index.d.ts +13 -0
  133. package/dist/hooks/session-end/index.d.ts.map +1 -1
  134. package/dist/hooks/session-end/index.js +69 -0
  135. package/dist/hooks/session-end/index.js.map +1 -1
  136. package/dist/hooks/setup/index.d.ts.map +1 -1
  137. package/dist/hooks/setup/index.js +12 -5
  138. package/dist/hooks/setup/index.js.map +1 -1
  139. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  140. package/dist/hooks/subagent-tracker/index.js +25 -9
  141. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  142. package/dist/hooks/ultrawork/index.d.ts +2 -2
  143. package/dist/hooks/ultrawork/index.d.ts.map +1 -1
  144. package/dist/hooks/ultrawork/index.js +2 -46
  145. package/dist/hooks/ultrawork/index.js.map +1 -1
  146. package/dist/hud/elements/cwd.d.ts +15 -0
  147. package/dist/hud/elements/cwd.d.ts.map +1 -0
  148. package/dist/hud/elements/cwd.js +39 -0
  149. package/dist/hud/elements/cwd.js.map +1 -0
  150. package/dist/hud/elements/index.d.ts +1 -0
  151. package/dist/hud/elements/index.d.ts.map +1 -1
  152. package/dist/hud/elements/index.js +1 -0
  153. package/dist/hud/elements/index.js.map +1 -1
  154. package/dist/hud/elements/thinking.d.ts +7 -5
  155. package/dist/hud/elements/thinking.d.ts.map +1 -1
  156. package/dist/hud/elements/thinking.js +18 -6
  157. package/dist/hud/elements/thinking.js.map +1 -1
  158. package/dist/hud/index.js +5 -3
  159. package/dist/hud/index.js.map +1 -1
  160. package/dist/hud/omc-state.d.ts +1 -1
  161. package/dist/hud/omc-state.d.ts.map +1 -1
  162. package/dist/hud/omc-state.js +14 -31
  163. package/dist/hud/omc-state.js.map +1 -1
  164. package/dist/hud/render.d.ts +9 -0
  165. package/dist/hud/render.d.ts.map +1 -1
  166. package/dist/hud/render.js +27 -7
  167. package/dist/hud/render.js.map +1 -1
  168. package/dist/hud/state.d.ts +2 -2
  169. package/dist/hud/state.d.ts.map +1 -1
  170. package/dist/hud/state.js +4 -33
  171. package/dist/hud/state.js.map +1 -1
  172. package/dist/hud/transcript.d.ts +4 -1
  173. package/dist/hud/transcript.d.ts.map +1 -1
  174. package/dist/hud/transcript.js +4 -9
  175. package/dist/hud/transcript.js.map +1 -1
  176. package/dist/hud/types.d.ts +20 -1
  177. package/dist/hud/types.d.ts.map +1 -1
  178. package/dist/hud/types.js +38 -9
  179. package/dist/hud/types.js.map +1 -1
  180. package/dist/index.js +1 -1
  181. package/dist/index.js.map +1 -1
  182. package/dist/installer/__tests__/claude-md-merge.test.d.ts +6 -0
  183. package/dist/installer/__tests__/claude-md-merge.test.d.ts.map +1 -0
  184. package/dist/installer/__tests__/claude-md-merge.test.js +220 -0
  185. package/dist/installer/__tests__/claude-md-merge.test.js.map +1 -0
  186. package/dist/installer/__tests__/safe-installer.test.d.ts +6 -0
  187. package/dist/installer/__tests__/safe-installer.test.d.ts.map +1 -0
  188. package/dist/installer/__tests__/safe-installer.test.js +172 -0
  189. package/dist/installer/__tests__/safe-installer.test.js.map +1 -0
  190. package/dist/installer/hooks.d.ts +1 -1
  191. package/dist/installer/hooks.d.ts.map +1 -1
  192. package/dist/installer/hooks.js +4 -2
  193. package/dist/installer/hooks.js.map +1 -1
  194. package/dist/installer/index.d.ts +27 -1
  195. package/dist/installer/index.d.ts.map +1 -1
  196. package/dist/installer/index.js +209 -85
  197. package/dist/installer/index.js.map +1 -1
  198. package/dist/mcp/omc-tools-server.d.ts +1 -1
  199. package/dist/mcp/omc-tools-server.d.ts.map +1 -1
  200. package/dist/mcp/omc-tools-server.js +3 -3
  201. package/dist/mcp/omc-tools-server.js.map +1 -1
  202. package/dist/mcp/standalone-server.js +1 -1
  203. package/dist/mcp/standalone-server.js.map +1 -1
  204. package/dist/verification/tier-selector.d.ts +40 -0
  205. package/dist/verification/tier-selector.d.ts.map +1 -0
  206. package/dist/verification/tier-selector.js +95 -0
  207. package/dist/verification/tier-selector.js.map +1 -0
  208. package/dist/verification/tier-selector.test.d.ts +2 -0
  209. package/dist/verification/tier-selector.test.d.ts.map +1 -0
  210. package/dist/verification/tier-selector.test.js +282 -0
  211. package/dist/verification/tier-selector.test.js.map +1 -0
  212. package/docs/AGENTS.md +100 -0
  213. package/docs/ARCHITECTURE.md +11 -7
  214. package/docs/CLAUDE.md +89 -379
  215. package/docs/DELEGATION-ENFORCER.md +1 -2
  216. package/docs/MIGRATION.md +1 -1
  217. package/docs/REFERENCE.md +29 -9
  218. package/docs/SYNC-SYSTEM.md +0 -2
  219. package/docs/partials/agent-tiers.md +165 -0
  220. package/docs/partials/features.md +131 -0
  221. package/docs/partials/mode-hierarchy.md +120 -0
  222. package/docs/partials/mode-selection-guide.md +82 -0
  223. package/docs/partials/verification-tiers.md +107 -0
  224. package/docs/shared/agent-tiers.md +165 -0
  225. package/docs/shared/features.md +131 -0
  226. package/docs/shared/mode-hierarchy.md +120 -0
  227. package/docs/shared/mode-selection-guide.md +82 -0
  228. package/docs/shared/verification-tiers.md +107 -0
  229. package/package.json +4 -3
  230. package/scripts/compose-docs.mjs +44 -0
  231. package/scripts/keyword-detector.mjs +13 -3
  232. package/scripts/persistent-mode.mjs +78 -47
  233. package/scripts/test-mutual-exclusion.ts +3 -3
  234. package/skills/AGENTS.md +59 -44
  235. package/skills/autopilot/SKILL.md +0 -2
  236. package/skills/cancel/SKILL.md +13 -32
  237. package/skills/deep-executor/SKILL.md +50 -0
  238. package/skills/ecomode/SKILL.md +58 -104
  239. package/skills/hud/SKILL.md +3 -2
  240. package/skills/omc-setup/SKILL.md +197 -20
  241. package/skills/plan/SKILL.md +62 -0
  242. package/skills/project-session-manager/SKILL.md +87 -4
  243. package/skills/project-session-manager/lib/config.sh +54 -5
  244. package/skills/project-session-manager/lib/parse.sh +65 -11
  245. package/skills/project-session-manager/lib/providers/github.sh +52 -0
  246. package/skills/project-session-manager/lib/providers/interface.sh +76 -0
  247. package/skills/project-session-manager/lib/providers/jira.sh +79 -0
  248. package/skills/project-session-manager/lib/session.sh +49 -12
  249. package/skills/project-session-manager/lib/worktree.sh +37 -4
  250. package/skills/project-session-manager/psm.sh +116 -51
  251. package/skills/ralph/SKILL.md +48 -44
  252. package/skills/ultrawork/SKILL.md +56 -67
  253. package/templates/hooks/keyword-detector.mjs +21 -13
  254. package/templates/hooks/lib/stdin.mjs +62 -0
  255. package/templates/hooks/persistent-mode.mjs +75 -34
  256. package/templates/hooks/post-tool-use.mjs +8 -10
  257. package/templates/hooks/pre-tool-use.mjs +9 -6
  258. package/templates/hooks/session-start.mjs +7 -8
  259. package/agents/AGENTS.md +0 -144
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Verification Tier Selector
3
+ *
4
+ * Scales verification effort with task complexity to optimize cost
5
+ * while maintaining quality. Used by ralph, autopilot, and ultrapilot.
6
+ */
7
+ const TIER_AGENTS = {
8
+ LIGHT: {
9
+ agent: 'architect-low',
10
+ model: 'haiku',
11
+ evidenceRequired: ['lsp_diagnostics clean'],
12
+ },
13
+ STANDARD: {
14
+ agent: 'architect-medium',
15
+ model: 'sonnet',
16
+ evidenceRequired: ['lsp_diagnostics clean', 'build pass'],
17
+ },
18
+ THOROUGH: {
19
+ agent: 'architect',
20
+ model: 'opus',
21
+ evidenceRequired: ['full architect review', 'all tests pass', 'no regressions'],
22
+ },
23
+ };
24
+ /**
25
+ * Select appropriate verification tier based on change metadata.
26
+ */
27
+ export function selectVerificationTier(changes) {
28
+ // Security and architectural changes always require thorough review
29
+ if (changes.hasSecurityImplications || changes.hasArchitecturalChanges) {
30
+ return 'THOROUGH';
31
+ }
32
+ // Large scope changes require thorough review
33
+ if (changes.filesChanged > 20) {
34
+ return 'THOROUGH';
35
+ }
36
+ // Small, well-tested changes can use light verification
37
+ if (changes.filesChanged < 5 &&
38
+ changes.linesChanged < 100 &&
39
+ changes.testCoverage === 'full') {
40
+ return 'LIGHT';
41
+ }
42
+ // Default to standard verification
43
+ return 'STANDARD';
44
+ }
45
+ /**
46
+ * Get the verification agent configuration for a tier.
47
+ */
48
+ export function getVerificationAgent(tier) {
49
+ return TIER_AGENTS[tier];
50
+ }
51
+ /**
52
+ * Detect if any files represent architectural changes.
53
+ */
54
+ export function detectArchitecturalChanges(files) {
55
+ const architecturalPatterns = [
56
+ /config\.(ts|js|json)$/i,
57
+ /schema\.(ts|prisma|sql)$/i,
58
+ /definitions\.ts$/i,
59
+ /types\.ts$/i,
60
+ /package\.json$/i,
61
+ /tsconfig\.json$/i,
62
+ ];
63
+ return files.some((file) => architecturalPatterns.some((pattern) => pattern.test(file)));
64
+ }
65
+ /**
66
+ * Detect if any files have security implications.
67
+ */
68
+ export function detectSecurityImplications(files) {
69
+ const securityPatterns = [
70
+ /\/auth\//i, // auth directory
71
+ /\/security\//i, // security directory
72
+ /(^|[\/-])permissions?\.(ts|js)$/i, // permission.ts, permissions.ts
73
+ /(^|[\/-])credentials?\.(ts|js|json)$/i, // credential.ts, credentials.json
74
+ /(^|[\/-])secrets?\.(ts|js|json|ya?ml)$/i, // secret.ts, secrets.yaml
75
+ /(^|[\/-])tokens?\.(ts|js|json)$/i, // token.ts, auth-token.ts
76
+ /\.(env|pem|key)(\.|$)/i, // .env, .env.local, cert.pem, private.key
77
+ /(^|[\/-])passwords?\.(ts|js|json)$/i, // password.ts
78
+ /(^|[\/-])oauth/i, // oauth.ts, oauth-config.ts, oauth2.ts
79
+ /(^|[\/-])jwt/i, // jwt.ts, jwt-utils.ts, jwt_utils.ts
80
+ ];
81
+ return files.some((file) => securityPatterns.some((pattern) => pattern.test(file)));
82
+ }
83
+ /**
84
+ * Build change metadata from a list of changed files and line count.
85
+ */
86
+ export function buildChangeMetadata(files, linesChanged, testCoverage = 'partial') {
87
+ return {
88
+ filesChanged: files.length,
89
+ linesChanged,
90
+ hasArchitecturalChanges: detectArchitecturalChanges(files),
91
+ hasSecurityImplications: detectSecurityImplications(files),
92
+ testCoverage,
93
+ };
94
+ }
95
+ //# sourceMappingURL=tier-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.js","sourceRoot":"","sources":["../../src/verification/tier-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,WAAW,GAAgD;IAC/D,KAAK,EAAE;QACL,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;KAC5C;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,YAAY,CAAC;KAC1D;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,MAAM;QACb,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;KAChF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,oEAAoE;IACpE,IAAI,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;QACvE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,wDAAwD;IACxD,IACE,OAAO,CAAC,YAAY,GAAG,CAAC;QACxB,OAAO,CAAC,YAAY,GAAG,GAAG;QAC1B,OAAO,CAAC,YAAY,KAAK,MAAM,EAC/B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mCAAmC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAsB;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAe;IACxD,MAAM,qBAAqB,GAAG;QAC5B,wBAAwB;QACxB,2BAA2B;QAC3B,mBAAmB;QACnB,aAAa;QACb,iBAAiB;QACjB,kBAAkB;KACnB,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAe;IACxD,MAAM,gBAAgB,GAAG;QACvB,WAAW,EAA+B,iBAAiB;QAC3D,eAAe,EAA2B,qBAAqB;QAC/D,kCAAkC,EAAQ,gCAAgC;QAC1E,uCAAuC,EAAG,kCAAkC;QAC5E,yCAAyC,EAAE,0BAA0B;QACrE,kCAAkC,EAAQ,0BAA0B;QACpE,wBAAwB,EAAkB,0CAA0C;QACpF,qCAAqC,EAAK,cAAc;QACxD,iBAAiB,EAAyB,uCAAuC;QACjF,eAAe,EAA2B,qCAAqC;KAChF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAe,EACf,YAAoB,EACpB,eAA4C,SAAS;IAErD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,YAAY;QACZ,uBAAuB,EAAE,0BAA0B,CAAC,KAAK,CAAC;QAC1D,uBAAuB,EAAE,0BAA0B,CAAC,KAAK,CAAC;QAC1D,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tier-selector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.test.d.ts","sourceRoot":"","sources":["../../src/verification/tier-selector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,282 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { selectVerificationTier, getVerificationAgent, detectArchitecturalChanges, detectSecurityImplications, buildChangeMetadata, } from './tier-selector.js';
3
+ describe('selectVerificationTier', () => {
4
+ it('returns LIGHT for small, well-tested changes', () => {
5
+ const changes = {
6
+ filesChanged: 2,
7
+ linesChanged: 50,
8
+ hasArchitecturalChanges: false,
9
+ hasSecurityImplications: false,
10
+ testCoverage: 'full',
11
+ };
12
+ expect(selectVerificationTier(changes)).toBe('LIGHT');
13
+ });
14
+ it('returns THOROUGH for security changes regardless of size', () => {
15
+ const changes = {
16
+ filesChanged: 1,
17
+ linesChanged: 5,
18
+ hasArchitecturalChanges: false,
19
+ hasSecurityImplications: true,
20
+ testCoverage: 'full',
21
+ };
22
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
23
+ });
24
+ it('returns THOROUGH for architectural changes', () => {
25
+ const changes = {
26
+ filesChanged: 3,
27
+ linesChanged: 80,
28
+ hasArchitecturalChanges: true,
29
+ hasSecurityImplications: false,
30
+ testCoverage: 'partial',
31
+ };
32
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
33
+ });
34
+ it('returns STANDARD for medium changes without special flags', () => {
35
+ const changes = {
36
+ filesChanged: 10,
37
+ linesChanged: 200,
38
+ hasArchitecturalChanges: false,
39
+ hasSecurityImplications: false,
40
+ testCoverage: 'partial',
41
+ };
42
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
43
+ });
44
+ it('returns THOROUGH for >20 files', () => {
45
+ const changes = {
46
+ filesChanged: 25,
47
+ linesChanged: 100,
48
+ hasArchitecturalChanges: false,
49
+ hasSecurityImplications: false,
50
+ testCoverage: 'full',
51
+ };
52
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
53
+ });
54
+ it('returns STANDARD when test coverage is not full', () => {
55
+ const changes = {
56
+ filesChanged: 2,
57
+ linesChanged: 50,
58
+ hasArchitecturalChanges: false,
59
+ hasSecurityImplications: false,
60
+ testCoverage: 'partial',
61
+ };
62
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
63
+ });
64
+ it('returns STANDARD when lines exceed 100', () => {
65
+ const changes = {
66
+ filesChanged: 3,
67
+ linesChanged: 150,
68
+ hasArchitecturalChanges: false,
69
+ hasSecurityImplications: false,
70
+ testCoverage: 'full',
71
+ };
72
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
73
+ });
74
+ });
75
+ describe('getVerificationAgent', () => {
76
+ it('returns architect-low for LIGHT tier', () => {
77
+ const agent = getVerificationAgent('LIGHT');
78
+ expect(agent.agent).toBe('architect-low');
79
+ expect(agent.model).toBe('haiku');
80
+ });
81
+ it('returns architect-medium for STANDARD tier', () => {
82
+ const agent = getVerificationAgent('STANDARD');
83
+ expect(agent.agent).toBe('architect-medium');
84
+ expect(agent.model).toBe('sonnet');
85
+ });
86
+ it('returns architect for THOROUGH tier', () => {
87
+ const agent = getVerificationAgent('THOROUGH');
88
+ expect(agent.agent).toBe('architect');
89
+ expect(agent.model).toBe('opus');
90
+ });
91
+ });
92
+ describe('detectArchitecturalChanges', () => {
93
+ it('detects config files', () => {
94
+ expect(detectArchitecturalChanges(['src/config.ts'])).toBe(true);
95
+ expect(detectArchitecturalChanges(['app.config.json'])).toBe(true);
96
+ });
97
+ it('detects schema files', () => {
98
+ expect(detectArchitecturalChanges(['prisma/schema.prisma'])).toBe(true);
99
+ expect(detectArchitecturalChanges(['db/schema.sql'])).toBe(true);
100
+ });
101
+ it('detects definitions and types', () => {
102
+ expect(detectArchitecturalChanges(['src/definitions.ts'])).toBe(true);
103
+ expect(detectArchitecturalChanges(['src/types.ts'])).toBe(true);
104
+ });
105
+ it('detects package files', () => {
106
+ expect(detectArchitecturalChanges(['package.json'])).toBe(true);
107
+ expect(detectArchitecturalChanges(['tsconfig.json'])).toBe(true);
108
+ });
109
+ it('ignores regular source files', () => {
110
+ expect(detectArchitecturalChanges(['src/utils/helper.ts'])).toBe(false);
111
+ expect(detectArchitecturalChanges(['src/components/Button.tsx'])).toBe(false);
112
+ });
113
+ });
114
+ describe('detectSecurityImplications', () => {
115
+ it('detects auth files', () => {
116
+ expect(detectSecurityImplications(['src/auth/login.ts'])).toBe(true);
117
+ expect(detectSecurityImplications(['lib/auth/jwt.ts'])).toBe(true);
118
+ });
119
+ it('detects security-related paths', () => {
120
+ expect(detectSecurityImplications(['src/security/encrypt.ts'])).toBe(true);
121
+ expect(detectSecurityImplications(['src/permissions.ts'])).toBe(true);
122
+ });
123
+ it('detects credential and secret files', () => {
124
+ expect(detectSecurityImplications(['credentials.json'])).toBe(true);
125
+ expect(detectSecurityImplications(['secrets.ts'])).toBe(true);
126
+ });
127
+ it('detects env files', () => {
128
+ expect(detectSecurityImplications(['.env'])).toBe(true);
129
+ expect(detectSecurityImplications(['.env.local'])).toBe(true);
130
+ });
131
+ it('ignores regular source files', () => {
132
+ expect(detectSecurityImplications(['src/utils/helper.ts'])).toBe(false);
133
+ expect(detectSecurityImplications(['src/components/Button.tsx'])).toBe(false);
134
+ });
135
+ });
136
+ describe('buildChangeMetadata', () => {
137
+ it('builds metadata with auto-detection', () => {
138
+ const files = ['src/auth/login.ts', 'src/config.ts'];
139
+ const metadata = buildChangeMetadata(files, 100, 'full');
140
+ expect(metadata.filesChanged).toBe(2);
141
+ expect(metadata.linesChanged).toBe(100);
142
+ expect(metadata.hasArchitecturalChanges).toBe(true);
143
+ expect(metadata.hasSecurityImplications).toBe(true);
144
+ expect(metadata.testCoverage).toBe('full');
145
+ });
146
+ it('defaults test coverage to partial', () => {
147
+ const metadata = buildChangeMetadata(['src/util.ts'], 50);
148
+ expect(metadata.testCoverage).toBe('partial');
149
+ });
150
+ });
151
+ describe('boundary values', () => {
152
+ it('returns STANDARD for exactly 5 files with full test coverage', () => {
153
+ const changes = {
154
+ filesChanged: 5,
155
+ linesChanged: 50,
156
+ hasArchitecturalChanges: false,
157
+ hasSecurityImplications: false,
158
+ testCoverage: 'full',
159
+ };
160
+ // 5 files is at the boundary - should NOT qualify for LIGHT (which requires < 5)
161
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
162
+ });
163
+ it('returns STANDARD for exactly 100 lines with full test coverage', () => {
164
+ const changes = {
165
+ filesChanged: 3,
166
+ linesChanged: 100,
167
+ hasArchitecturalChanges: false,
168
+ hasSecurityImplications: false,
169
+ testCoverage: 'full',
170
+ };
171
+ // 100 lines is at the boundary - should NOT qualify for LIGHT (which requires < 100)
172
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
173
+ });
174
+ it('returns THOROUGH for exactly 21 files', () => {
175
+ const changes = {
176
+ filesChanged: 21,
177
+ linesChanged: 100,
178
+ hasArchitecturalChanges: false,
179
+ hasSecurityImplications: false,
180
+ testCoverage: 'full',
181
+ };
182
+ // 21 files exceeds > 20 threshold
183
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
184
+ });
185
+ it('returns STANDARD for exactly 20 files', () => {
186
+ const changes = {
187
+ filesChanged: 20,
188
+ linesChanged: 100,
189
+ hasArchitecturalChanges: false,
190
+ hasSecurityImplications: false,
191
+ testCoverage: 'full',
192
+ };
193
+ // 20 files does NOT exceed > 20 threshold
194
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
195
+ });
196
+ });
197
+ describe('edge cases', () => {
198
+ it('handles testCoverage: none', () => {
199
+ const changes = {
200
+ filesChanged: 2,
201
+ linesChanged: 50,
202
+ hasArchitecturalChanges: false,
203
+ hasSecurityImplications: false,
204
+ testCoverage: 'none',
205
+ };
206
+ // No test coverage means it can't qualify for LIGHT
207
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
208
+ });
209
+ it('handles empty file list in buildChangeMetadata', () => {
210
+ const metadata = buildChangeMetadata([], 0);
211
+ expect(metadata.filesChanged).toBe(0);
212
+ expect(metadata.linesChanged).toBe(0);
213
+ expect(metadata.hasArchitecturalChanges).toBe(false);
214
+ expect(metadata.hasSecurityImplications).toBe(false);
215
+ });
216
+ it('handles zero files and zero lines', () => {
217
+ const changes = {
218
+ filesChanged: 0,
219
+ linesChanged: 0,
220
+ hasArchitecturalChanges: false,
221
+ hasSecurityImplications: false,
222
+ testCoverage: 'full',
223
+ };
224
+ // 0 files and 0 lines with full coverage qualifies for LIGHT
225
+ expect(selectVerificationTier(changes)).toBe('LIGHT');
226
+ });
227
+ });
228
+ describe('false-positive prevention', () => {
229
+ describe('detectSecurityImplications', () => {
230
+ it('does NOT flag tokenizer.ts as security file', () => {
231
+ expect(detectSecurityImplications(['src/utils/tokenizer.ts'])).toBe(false);
232
+ });
233
+ it('does NOT flag StringTokenizer.ts as security file', () => {
234
+ expect(detectSecurityImplications(['src/lexer/StringTokenizer.ts'])).toBe(false);
235
+ });
236
+ it('does NOT flag secretariat.ts as security file', () => {
237
+ expect(detectSecurityImplications(['src/admin/secretariat.ts'])).toBe(false);
238
+ });
239
+ it('does NOT flag permissionless.ts as security file', () => {
240
+ expect(detectSecurityImplications(['src/blockchain/permissionless.ts'])).toBe(false);
241
+ });
242
+ it('DOES flag auth/token.ts as security file', () => {
243
+ expect(detectSecurityImplications(['src/auth/token.ts'])).toBe(true);
244
+ });
245
+ it('DOES flag secrets.yaml as security file', () => {
246
+ expect(detectSecurityImplications(['config/secrets.yaml'])).toBe(true);
247
+ });
248
+ it('DOES flag .env.local as security file', () => {
249
+ expect(detectSecurityImplications(['.env.local'])).toBe(true);
250
+ });
251
+ it('DOES flag permissions.ts as security file', () => {
252
+ expect(detectSecurityImplications(['src/permissions.ts'])).toBe(true);
253
+ });
254
+ it('DOES flag oauth2.ts as security file', () => {
255
+ expect(detectSecurityImplications(['src/auth/oauth2.ts'])).toBe(true);
256
+ });
257
+ it('DOES flag oauth2-client.ts as security file', () => {
258
+ expect(detectSecurityImplications(['src/oauth2-client.ts'])).toBe(true);
259
+ });
260
+ it('DOES flag jwt_utils.ts as security file', () => {
261
+ expect(detectSecurityImplications(['src/jwt_utils.ts'])).toBe(true);
262
+ });
263
+ });
264
+ describe('detectArchitecturalChanges', () => {
265
+ it('does NOT flag barrel index.ts as architectural', () => {
266
+ expect(detectArchitecturalChanges(['src/components/index.ts'])).toBe(false);
267
+ });
268
+ it('does NOT flag nested barrel index.ts as architectural', () => {
269
+ expect(detectArchitecturalChanges(['src/utils/helpers/index.ts'])).toBe(false);
270
+ });
271
+ it('DOES still flag config.ts as architectural', () => {
272
+ expect(detectArchitecturalChanges(['src/config.ts'])).toBe(true);
273
+ });
274
+ it('DOES still flag package.json as architectural', () => {
275
+ expect(detectArchitecturalChanges(['package.json'])).toBe(true);
276
+ });
277
+ it('DOES still flag tsconfig.json as architectural', () => {
278
+ expect(detectArchitecturalChanges(['tsconfig.json'])).toBe(true);
279
+ });
280
+ });
281
+ });
282
+ //# sourceMappingURL=tier-selector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.test.js","sourceRoot":"","sources":["../../src/verification/tier-selector.test.ts"],"names":[],"mappings":"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"}
package/docs/AGENTS.md ADDED
@@ -0,0 +1,100 @@
1
+ <!-- Parent: ../AGENTS.md -->
2
+ <!-- Generated: 2026-01-31 | Updated: 2026-01-31 -->
3
+
4
+ # docs
5
+
6
+ User documentation and technical guides for oh-my-claudecode.
7
+
8
+ ## Purpose
9
+
10
+ This directory contains documentation for end-users and developers:
11
+
12
+ - **End-user guides**: How to use oh-my-claudecode features
13
+ - **Technical reference**: Architecture, compatibility, migration
14
+ - **Design documents**: Feature design specifications
15
+
16
+ ## Key Files
17
+
18
+ | File | Description |
19
+ |------|-------------|
20
+ | `CLAUDE.md` | End-user orchestration instructions (installed to user projects) |
21
+ | `FEATURES.md` | Developer API reference for internal features |
22
+ | `REFERENCE.md` | API reference and configuration options |
23
+ | `ARCHITECTURE.md` | System architecture overview |
24
+ | `MIGRATION.md` | Version migration guides |
25
+ | `COMPATIBILITY.md` | Compatibility matrix and requirements |
26
+ | `TIERED_AGENTS_V2.md` | Model routing and tiered agent design |
27
+ | `DELEGATION-ENFORCER.md` | Delegation protocol documentation |
28
+ | `SYNC-SYSTEM.md` | State synchronization system |
29
+ | `ANALYTICS-SYSTEM.md` | Analytics collection documentation |
30
+ | `LOCAL_PLUGIN_INSTALL.md` | Plugin installation guide |
31
+
32
+ ## Subdirectories
33
+
34
+ | Directory | Purpose |
35
+ |-----------|---------|
36
+ | `design/` | Feature design specifications |
37
+
38
+ ## For AI Agents
39
+
40
+ ### Working In This Directory
41
+
42
+ 1. **End-User Focus**: CLAUDE.md is installed to user projects - write for end-users, not developers
43
+ 2. **Keep Links Accessible**: Use raw GitHub URLs for links in CLAUDE.md (agents can't navigate GitHub UI)
44
+ 3. **Version Consistency**: Update version numbers across all docs when releasing
45
+
46
+ ### When to Update Each File
47
+
48
+ | Trigger | File to Update |
49
+ |---------|---------------|
50
+ | Agent count or list changes | `REFERENCE.md` (Agents section) |
51
+ | Skill count or list changes | `REFERENCE.md` (Skills section) |
52
+ | Hook count or list changes | `REFERENCE.md` (Hooks System section) |
53
+ | Magic keywords change | `REFERENCE.md` (Magic Keywords section) |
54
+ | Agent tool assignments change | `CLAUDE.md` (Agent Tool Matrix) |
55
+ | Skill composition or architecture changes | `ARCHITECTURE.md` |
56
+ | New internal API or feature | `FEATURES.md` |
57
+ | Breaking changes or migrations | `MIGRATION.md` |
58
+ | Tiered agent design updates | `TIERED_AGENTS_V2.md` |
59
+ | Platform or version support changes | `COMPATIBILITY.md` |
60
+ | End-user instructions change | `CLAUDE.md` |
61
+ | Major user-facing features | `../README.md` |
62
+
63
+ ### Testing Requirements
64
+
65
+ - Verify markdown renders correctly
66
+ - Check all internal links resolve
67
+ - Validate code examples in documentation
68
+
69
+ ### Common Patterns
70
+
71
+ #### Linking to Raw Content
72
+
73
+ Use raw GitHub URLs for external accessibility:
74
+
75
+ [Migration Guide](https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/MIGRATION.md)
76
+
77
+ #### Version References
78
+
79
+ Use consistent version heading format with blank line after heading:
80
+
81
+ ```markdown
82
+ ## v3.8.17 Changes
83
+
84
+ - Feature A
85
+ - Feature B
86
+ ```
87
+
88
+ ## Dependencies
89
+
90
+ ### Internal
91
+
92
+ - References agents from `agents/`
93
+ - References skills from `skills/`
94
+ - References tools from `src/tools/`
95
+
96
+ ### External
97
+
98
+ None - pure markdown files.
99
+
100
+ <!-- MANUAL: -->
@@ -62,7 +62,7 @@ Skills: ultrawork + default + git-master
62
62
  | MEDIUM | Sonnet | Standard implementations |
63
63
  | HIGH | Opus | Complex reasoning, architecture |
64
64
 
65
- See [FEATURES.md](./FEATURES.md) for the complete agent roster.
65
+ See [REFERENCE.md](./REFERENCE.md) for the complete agent roster.
66
66
 
67
67
  ### Delegation
68
68
 
@@ -118,13 +118,16 @@ Legacy locations are auto-migrated on read.
118
118
 
119
119
  ## Hooks
120
120
 
121
- oh-my-claudecode uses Claude Code's hooks system for lifecycle events:
121
+ oh-my-claudecode includes 31 hooks in `src/hooks/` for lifecycle events:
122
122
 
123
- - **conversationStart**: Initialize OMC, check for active modes
124
- - **beforeRequest**: Task delegation, skill routing
125
- - **afterResponse**: State updates, verification checks
123
+ | Event | Purpose |
124
+ |-------|---------|
125
+ | `UserPromptSubmit` | Keyword detection, mode activation |
126
+ | `Stop` | Continuation enforcement, session end |
127
+ | `PreToolUse` | Permission validation |
128
+ | `PostToolUse` | Error recovery, rules injection |
126
129
 
127
- Hooks are defined in `.claude/hooks/` and managed through the plugin system.
130
+ See [REFERENCE.md](./REFERENCE.md) for the complete hooks list.
128
131
 
129
132
  ## Verification Protocol
130
133
 
@@ -143,6 +146,7 @@ Evidence must be fresh (within 5 minutes) and include actual command output.
143
146
 
144
147
  ## For More Details
145
148
 
146
- - **API Reference**: See [FEATURES.md](./FEATURES.md)
149
+ - **Complete Reference**: See [REFERENCE.md](./REFERENCE.md)
150
+ - **Internal API**: See [FEATURES.md](./FEATURES.md)
147
151
  - **User Guide**: See [README.md](../README.md)
148
152
  - **Skills Reference**: See CLAUDE.md in your project