nemonix-cli 1.0.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 (281) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/cli.js +6870 -0
  4. package/package.json +48 -0
  5. package/src/config/claude-code-config/.claude/commands/setup-tmux.md +0 -0
  6. package/src/config/claude-code-config/CHANGELOG.md +261 -0
  7. package/src/config/claude-code-config/README.md +1 -0
  8. package/src/config/claude-code-config/agents/action.md +36 -0
  9. package/src/config/claude-code-config/agents/clean-code-runner.md +61 -0
  10. package/src/config/claude-code-config/agents/code-reviewer.md +172 -0
  11. package/src/config/claude-code-config/agents/code-simplifier.md +49 -0
  12. package/src/config/claude-code-config/agents/explore-codebase.md +65 -0
  13. package/src/config/claude-code-config/agents/explore-docs.md +65 -0
  14. package/src/config/claude-code-config/agents/explore-fast.md +22 -0
  15. package/src/config/claude-code-config/agents/implementer.md +181 -0
  16. package/src/config/claude-code-config/agents/snipper.md +36 -0
  17. package/src/config/claude-code-config/agents/websearch.md +42 -0
  18. package/src/config/claude-code-config/commands/prompts/create-vitejs-app.md +272 -0
  19. package/src/config/claude-code-config/commands/prompts/nextjs-add-prisma-db.md +136 -0
  20. package/src/config/claude-code-config/commands/prompts/nextjs-setup-better-auth.md +173 -0
  21. package/src/config/claude-code-config/commands/prompts/nextjs-setup-project.md +200 -0
  22. package/src/config/claude-code-config/commands/prompts/prompt.md +55 -0
  23. package/src/config/claude-code-config/commands/prompts/saas-challenge-idea.md +135 -0
  24. package/src/config/claude-code-config/commands/prompts/saas-create-architecture.md +242 -0
  25. package/src/config/claude-code-config/commands/prompts/saas-create-headline.md +132 -0
  26. package/src/config/claude-code-config/commands/prompts/saas-create-landing-copywritting.md +267 -0
  27. package/src/config/claude-code-config/commands/prompts/saas-create-legals-docs.md +176 -0
  28. package/src/config/claude-code-config/commands/prompts/saas-create-logos.md +240 -0
  29. package/src/config/claude-code-config/commands/prompts/saas-create-prd.md +195 -0
  30. package/src/config/claude-code-config/commands/prompts/saas-create-tasks.md +240 -0
  31. package/src/config/claude-code-config/commands/prompts/saas-define-pricing.md +293 -0
  32. package/src/config/claude-code-config/commands/prompts/saas-find-domain-name.md +190 -0
  33. package/src/config/claude-code-config/commands/prompts/saas-implement-landing-page.md +257 -0
  34. package/src/config/claude-code-config/commands/prompts/setup-tmux.md +160 -0
  35. package/src/config/claude-code-config/commands/prompts/tools.md +148 -0
  36. package/src/config/claude-code-config/hooks/hook-post-file.ts +162 -0
  37. package/src/config/claude-code-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
  38. package/src/config/claude-code-config/scripts/CLAUDE.md +50 -0
  39. package/src/config/claude-code-config/scripts/auto-rename-session/CLAUDE.md +59 -0
  40. package/src/config/claude-code-config/scripts/auto-rename-session/__tests__/shared.test.ts +185 -0
  41. package/src/config/claude-code-config/scripts/auto-rename-session/__tests__/title-generation.test.ts +44 -0
  42. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/sample-transcript.jsonl +3 -0
  43. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/transcript-short-message.jsonl +2 -0
  44. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/transcript-with-title.jsonl +3 -0
  45. package/src/config/claude-code-config/scripts/auto-rename-session/src/index.ts +113 -0
  46. package/src/config/claude-code-config/scripts/auto-rename-session/src/rename-all.ts +148 -0
  47. package/src/config/claude-code-config/scripts/auto-rename-session/src/shared.ts +157 -0
  48. package/src/config/claude-code-config/scripts/auto-rename-session/src/worker.ts +58 -0
  49. package/src/config/claude-code-config/scripts/biome.json +37 -0
  50. package/src/config/claude-code-config/scripts/claude-code-ai/CLAUDE.md +84 -0
  51. package/src/config/claude-code-config/scripts/claude-code-ai/__tests__/claude.test.ts +19 -0
  52. package/src/config/claude-code-config/scripts/claude-code-ai/__tests__/paths.test.ts +68 -0
  53. package/src/config/claude-code-config/scripts/claude-code-ai/claude.ts +56 -0
  54. package/src/config/claude-code-config/scripts/claude-code-ai/cli.ts +46 -0
  55. package/src/config/claude-code-config/scripts/claude-code-ai/helper/credentials.ts +76 -0
  56. package/src/config/claude-code-config/scripts/claude-code-ai/helper/index.ts +9 -0
  57. package/src/config/claude-code-config/scripts/claude-code-ai/helper/paths.ts +51 -0
  58. package/src/config/claude-code-config/scripts/command-validator/CLAUDE.md +112 -0
  59. package/src/config/claude-code-config/scripts/command-validator/README.md +147 -0
  60. package/src/config/claude-code-config/scripts/command-validator/src/__tests__/validator.test.ts +99 -0
  61. package/src/config/claude-code-config/scripts/command-validator/src/cli.ts +121 -0
  62. package/src/config/claude-code-config/scripts/command-validator/src/lib/security-rules.ts +174 -0
  63. package/src/config/claude-code-config/scripts/command-validator/src/lib/types.ts +34 -0
  64. package/src/config/claude-code-config/scripts/command-validator/src/lib/validator.ts +90 -0
  65. package/src/config/claude-code-config/scripts/package.json +43 -0
  66. package/src/config/claude-code-config/scripts/statusline/CLAUDE.md +205 -0
  67. package/src/config/claude-code-config/scripts/statusline/README.md +193 -0
  68. package/src/config/claude-code-config/scripts/statusline/__tests__/context.test.ts +229 -0
  69. package/src/config/claude-code-config/scripts/statusline/__tests__/formatters.test.ts +108 -0
  70. package/src/config/claude-code-config/scripts/statusline/__tests__/statusline.test.ts +309 -0
  71. package/src/config/claude-code-config/scripts/statusline/data/.gitkeep +0 -0
  72. package/src/config/claude-code-config/scripts/statusline/defaults.json +82 -0
  73. package/src/config/claude-code-config/scripts/statusline/docs/ARCHITECTURE.md +166 -0
  74. package/src/config/claude-code-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -0
  75. package/src/config/claude-code-config/scripts/statusline/fixtures/test-input.json +35 -0
  76. package/src/config/claude-code-config/scripts/statusline/src/analyze-daily-usage.ts +151 -0
  77. package/src/config/claude-code-config/scripts/statusline/src/commands/interactive-config.ts +515 -0
  78. package/src/config/claude-code-config/scripts/statusline/src/debug-payloads.ts +195 -0
  79. package/src/config/claude-code-config/scripts/statusline/src/index.ts +224 -0
  80. package/src/config/claude-code-config/scripts/statusline/src/lib/config-types.ts +110 -0
  81. package/src/config/claude-code-config/scripts/statusline/src/lib/config.ts +21 -0
  82. package/src/config/claude-code-config/scripts/statusline/src/lib/context.ts +103 -0
  83. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
  84. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/index.ts +111 -0
  85. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
  86. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
  87. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
  88. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
  89. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
  90. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
  91. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
  92. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +161 -0
  93. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
  94. package/src/config/claude-code-config/scripts/statusline/src/lib/formatters.ts +426 -0
  95. package/src/config/claude-code-config/scripts/statusline/src/lib/git.ts +100 -0
  96. package/src/config/claude-code-config/scripts/statusline/src/lib/menu-factories.ts +224 -0
  97. package/src/config/claude-code-config/scripts/statusline/src/lib/presets.ts +177 -0
  98. package/src/config/claude-code-config/scripts/statusline/src/lib/render-pure.ts +516 -0
  99. package/src/config/claude-code-config/scripts/statusline/src/lib/types.ts +36 -0
  100. package/src/config/claude-code-config/scripts/statusline/src/lib/utils.ts +15 -0
  101. package/src/config/claude-code-config/scripts/statusline/src/stats.ts +119 -0
  102. package/src/config/claude-code-config/scripts/statusline/src/tests/spend-v2.test.ts +377 -0
  103. package/src/config/claude-code-config/scripts/statusline/src/tools/fixed-cost-calc.ts +317 -0
  104. package/src/config/claude-code-config/scripts/statusline/statusline.config.free.json +79 -0
  105. package/src/config/claude-code-config/scripts/statusline/statusline.config.json +100 -0
  106. package/src/config/claude-code-config/scripts/statusline/test-with-fixtures.ts +37 -0
  107. package/src/config/claude-code-config/scripts/statusline/test.ts +20 -0
  108. package/src/config/claude-code-config/scripts/statusline/tsconfig.json +27 -0
  109. package/src/config/claude-code-config/scripts/tsconfig.json +27 -0
  110. package/src/config/claude-code-config/settings.json +92 -0
  111. package/src/config/claude-code-config/skills/aibuilder-create-saas/SKILL.md +176 -0
  112. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/architecture-template.md +436 -0
  113. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/challenge-framework.md +289 -0
  114. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/discovery-framework.md +338 -0
  115. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/prd-template.md +452 -0
  116. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/task-template.md +263 -0
  117. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/tools.md +132 -0
  118. package/src/config/claude-code-config/skills/aibuilder-create-saas/scripts/rename-project.sh +42 -0
  119. package/src/config/claude-code-config/skills/aibuilder-create-saas/scripts/setup.sh +104 -0
  120. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-00-init.md +174 -0
  121. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-01-discovery.md +342 -0
  122. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-02-brainstorm.md +230 -0
  123. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-03-validate.md +372 -0
  124. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-04-prd.md +364 -0
  125. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-05-architecture.md +904 -0
  126. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-06-tasks.md +446 -0
  127. package/src/config/claude-code-config/skills/explore/SKILL.md +119 -0
  128. package/src/config/claude-code-config/skills/frontend-design/LICENSE.txt +177 -0
  129. package/src/config/claude-code-config/skills/frontend-design/SKILL.md +42 -0
  130. package/src/config/claude-code-config/skills/git-commit/SKILL.md +42 -0
  131. package/src/config/claude-code-config/skills/git-create-pr/SKILL.md +53 -0
  132. package/src/config/claude-code-config/skills/git-fix-pr-comments/SKILL.md +51 -0
  133. package/src/config/claude-code-config/skills/git-merge/SKILL.md +68 -0
  134. package/src/config/claude-code-config/skills/marketing-copywriting/SKILL.md +72 -0
  135. package/src/config/claude-code-config/skills/meta-claude-memory/SKILL.md +694 -0
  136. package/src/config/claude-code-config/skills/meta-claude-memory/references/comprehensive-example.md +175 -0
  137. package/src/config/claude-code-config/skills/meta-claude-memory/references/project-patterns.md +334 -0
  138. package/src/config/claude-code-config/skills/meta-claude-memory/references/prompting-techniques.md +411 -0
  139. package/src/config/claude-code-config/skills/meta-claude-memory/references/rules-directory-guide.md +298 -0
  140. package/src/config/claude-code-config/skills/meta-claude-memory/references/section-templates.md +347 -0
  141. package/src/config/claude-code-config/skills/meta-hooks-creator/SKILL.md +357 -0
  142. package/src/config/claude-code-config/skills/meta-hooks-creator/references/command-vs-prompt.md +287 -0
  143. package/src/config/claude-code-config/skills/meta-hooks-creator/references/examples.md +689 -0
  144. package/src/config/claude-code-config/skills/meta-hooks-creator/references/hook-types.md +495 -0
  145. package/src/config/claude-code-config/skills/meta-hooks-creator/references/input-output-schemas.md +503 -0
  146. package/src/config/claude-code-config/skills/meta-hooks-creator/references/matchers.md +517 -0
  147. package/src/config/claude-code-config/skills/meta-hooks-creator/references/troubleshooting.md +653 -0
  148. package/src/config/claude-code-config/skills/meta-prompt-creator/SKILL.md +285 -0
  149. package/src/config/claude-code-config/skills/meta-prompt-creator/references/anthropic-best-practices.md +126 -0
  150. package/src/config/claude-code-config/skills/meta-prompt-creator/references/anti-patterns.md +57 -0
  151. package/src/config/claude-code-config/skills/meta-prompt-creator/references/clarity-principles.md +54 -0
  152. package/src/config/claude-code-config/skills/meta-prompt-creator/references/context-management.md +389 -0
  153. package/src/config/claude-code-config/skills/meta-prompt-creator/references/few-shot-patterns.md +47 -0
  154. package/src/config/claude-code-config/skills/meta-prompt-creator/references/openai-best-practices.md +50 -0
  155. package/src/config/claude-code-config/skills/meta-prompt-creator/references/prompt-templates.md +110 -0
  156. package/src/config/claude-code-config/skills/meta-prompt-creator/references/reasoning-techniques.md +52 -0
  157. package/src/config/claude-code-config/skills/meta-prompt-creator/references/system-prompt-patterns.md +48 -0
  158. package/src/config/claude-code-config/skills/meta-prompt-creator/references/xml-structure.md +36 -0
  159. package/src/config/claude-code-config/skills/meta-skill-creator/LICENSE.txt +202 -0
  160. package/src/config/claude-code-config/skills/meta-skill-creator/SKILL.md +421 -0
  161. package/src/config/claude-code-config/skills/meta-skill-creator/package.json +5 -0
  162. package/src/config/claude-code-config/skills/meta-skill-creator/references/output-patterns.md +82 -0
  163. package/src/config/claude-code-config/skills/meta-skill-creator/references/progressive-disclosure-patterns.md +374 -0
  164. package/src/config/claude-code-config/skills/meta-skill-creator/references/prompting-integration.md +363 -0
  165. package/src/config/claude-code-config/skills/meta-skill-creator/references/real-world-examples.md +513 -0
  166. package/src/config/claude-code-config/skills/meta-skill-creator/references/script-patterns.md +385 -0
  167. package/src/config/claude-code-config/skills/meta-skill-creator/references/workflows.md +28 -0
  168. package/src/config/claude-code-config/skills/meta-skill-creator/references/xml-tag-guide.md +606 -0
  169. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/init-skill.ts +214 -0
  170. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/package-skill.ts +146 -0
  171. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/validate.ts +138 -0
  172. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/SKILL.md +390 -0
  173. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/ask-patterns.md +225 -0
  174. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/prompt-engineering.md +377 -0
  175. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/state-management.md +275 -0
  176. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/step-template.md +334 -0
  177. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/workflow-patterns.md +300 -0
  178. package/src/config/claude-code-config/skills/meta-subagent-creator/SKILL.md +451 -0
  179. package/src/config/claude-code-config/skills/meta-subagent-creator/references/context-management.md +567 -0
  180. package/src/config/claude-code-config/skills/meta-subagent-creator/references/debugging-agents.md +714 -0
  181. package/src/config/claude-code-config/skills/meta-subagent-creator/references/error-handling-and-recovery.md +502 -0
  182. package/src/config/claude-code-config/skills/meta-subagent-creator/references/evaluation-and-testing.md +374 -0
  183. package/src/config/claude-code-config/skills/meta-subagent-creator/references/orchestration-patterns.md +591 -0
  184. package/src/config/claude-code-config/skills/meta-subagent-creator/references/subagents.md +599 -0
  185. package/src/config/claude-code-config/skills/meta-subagent-creator/references/writing-subagent-prompts.md +513 -0
  186. package/src/config/claude-code-config/skills/ralph-loop/SKILL.md +117 -0
  187. package/src/config/claude-code-config/skills/ralph-loop/scripts/setup.sh +278 -0
  188. package/src/config/claude-code-config/skills/ralph-loop/steps/step-00-init.md +215 -0
  189. package/src/config/claude-code-config/skills/ralph-loop/steps/step-01-interactive-prd.md +366 -0
  190. package/src/config/claude-code-config/skills/ralph-loop/steps/step-02-create-stories.md +273 -0
  191. package/src/config/claude-code-config/skills/ralph-loop/steps/step-03-finish.md +245 -0
  192. package/src/config/claude-code-config/skills/ralph-tasks/SKILL.md +88 -0
  193. package/src/config/claude-code-config/skills/ralph-tasks/scripts/add-task.sh +36 -0
  194. package/src/config/claude-code-config/skills/ralph-tasks/scripts/list-tasks.sh +66 -0
  195. package/src/config/claude-code-config/skills/ralph-tasks/scripts/remove-task.sh +47 -0
  196. package/src/config/claude-code-config/skills/ralph-tasks/scripts/setup.sh +201 -0
  197. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-add-search.md +131 -0
  198. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-add.md +46 -0
  199. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-init.md +123 -0
  200. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-list.md +58 -0
  201. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-remove.md +48 -0
  202. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-setup.md +46 -0
  203. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-wake-up.md +62 -0
  204. package/src/config/claude-code-config/skills/utils-fix-errors/SKILL.md +61 -0
  205. package/src/config/claude-code-config/skills/utils-fix-grammar/SKILL.md +59 -0
  206. package/src/config/claude-code-config/skills/utils-oneshot/SKILL.md +56 -0
  207. package/src/config/claude-code-config/skills/utils-refactor/SKILL.md +89 -0
  208. package/src/config/claude-code-config/skills/utils-save-docs/SKILL.md +74 -0
  209. package/src/config/claude-code-config/skills/utils-ultrathink/SKILL.md +42 -0
  210. package/src/config/claude-code-config/skills/workflow-apex/SKILL.md +116 -0
  211. package/src/config/claude-code-config/skills/workflow-apex/scripts/setup-templates.sh +144 -0
  212. package/src/config/claude-code-config/skills/workflow-apex/scripts/update-progress.sh +80 -0
  213. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00-init.md +273 -0
  214. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-branch.md +126 -0
  215. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-economy.md +244 -0
  216. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-interactive.md +165 -0
  217. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-save.md +123 -0
  218. package/src/config/claude-code-config/skills/workflow-apex/steps/step-01-analyze.md +361 -0
  219. package/src/config/claude-code-config/skills/workflow-apex/steps/step-02-plan.md +422 -0
  220. package/src/config/claude-code-config/skills/workflow-apex/steps/step-02b-tasks.md +301 -0
  221. package/src/config/claude-code-config/skills/workflow-apex/steps/step-03-execute-teams.md +297 -0
  222. package/src/config/claude-code-config/skills/workflow-apex/steps/step-03-execute.md +239 -0
  223. package/src/config/claude-code-config/skills/workflow-apex/steps/step-04-validate.md +264 -0
  224. package/src/config/claude-code-config/skills/workflow-apex/steps/step-05-examine.md +294 -0
  225. package/src/config/claude-code-config/skills/workflow-apex/steps/step-06-resolve.md +237 -0
  226. package/src/config/claude-code-config/skills/workflow-apex/steps/step-07-tests.md +250 -0
  227. package/src/config/claude-code-config/skills/workflow-apex/steps/step-08-run-tests.md +308 -0
  228. package/src/config/claude-code-config/skills/workflow-apex/steps/step-09-finish.md +193 -0
  229. package/src/config/claude-code-config/skills/workflow-apex/templates/00-context.md +53 -0
  230. package/src/config/claude-code-config/skills/workflow-apex/templates/01-analyze.md +10 -0
  231. package/src/config/claude-code-config/skills/workflow-apex/templates/02-plan.md +10 -0
  232. package/src/config/claude-code-config/skills/workflow-apex/templates/03-execute.md +10 -0
  233. package/src/config/claude-code-config/skills/workflow-apex/templates/04-validate.md +10 -0
  234. package/src/config/claude-code-config/skills/workflow-apex/templates/05-examine.md +10 -0
  235. package/src/config/claude-code-config/skills/workflow-apex/templates/06-resolve.md +10 -0
  236. package/src/config/claude-code-config/skills/workflow-apex/templates/07-tests.md +10 -0
  237. package/src/config/claude-code-config/skills/workflow-apex/templates/08-run-tests.md +10 -0
  238. package/src/config/claude-code-config/skills/workflow-apex/templates/09-finish.md +10 -0
  239. package/src/config/claude-code-config/skills/workflow-apex/templates/README.md +195 -0
  240. package/src/config/claude-code-config/skills/workflow-apex/templates/step-complete.md +7 -0
  241. package/src/config/claude-code-config/skills/workflow-brainstorm/SKILL.md +127 -0
  242. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-01-explore.md +230 -0
  243. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-02-challenge.md +238 -0
  244. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-03-synthesize.md +337 -0
  245. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-04-action.md +285 -0
  246. package/src/config/claude-code-config/skills/workflow-ci-fixer/SKILL.md +150 -0
  247. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/cli-commands.md +122 -0
  248. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/github-cli.md +243 -0
  249. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/troubleshooting.md +362 -0
  250. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/vercel-cli.md +192 -0
  251. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-00-init.md +157 -0
  252. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-01-watch-ci.md +192 -0
  253. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-02-analyze-errors.md +263 -0
  254. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-03-fix-locally.md +312 -0
  255. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-04-commit-push.md +206 -0
  256. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-05-cleanup.md +196 -0
  257. package/src/config/claude-code-config/skills/workflow-clean-code/SKILL.md +129 -0
  258. package/src/config/claude-code-config/skills/workflow-clean-code/references/general-clean-code.md +347 -0
  259. package/src/config/claude-code-config/skills/workflow-clean-code/references/nextjs-clean-code.md +458 -0
  260. package/src/config/claude-code-config/skills/workflow-clean-code/references/react-clean-code.md +406 -0
  261. package/src/config/claude-code-config/skills/workflow-clean-code/references/tanstack-query-best-practices.md +516 -0
  262. package/src/config/claude-code-config/skills/workflow-clean-code/references/zustand-best-practices.md +491 -0
  263. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-01-scan.md +137 -0
  264. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-02-apply.md +152 -0
  265. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-03-verify.md +143 -0
  266. package/src/config/claude-code-config/skills/workflow-debug/SKILL.md +126 -0
  267. package/src/config/claude-code-config/skills/workflow-debug/references/log-technique.md +285 -0
  268. package/src/config/claude-code-config/skills/workflow-debug/steps/step-00-init.md +94 -0
  269. package/src/config/claude-code-config/skills/workflow-debug/steps/step-01-analyze.md +180 -0
  270. package/src/config/claude-code-config/skills/workflow-debug/steps/step-01b-log-instrumentation.md +271 -0
  271. package/src/config/claude-code-config/skills/workflow-debug/steps/step-02-find-solutions.md +141 -0
  272. package/src/config/claude-code-config/skills/workflow-debug/steps/step-03-propose.md +142 -0
  273. package/src/config/claude-code-config/skills/workflow-debug/steps/step-04-fix.md +176 -0
  274. package/src/config/claude-code-config/skills/workflow-debug/steps/step-05-verify.md +279 -0
  275. package/src/config/claude-code-config/skills/workflow-review-code/SKILL.md +219 -0
  276. package/src/config/claude-code-config/skills/workflow-review-code/references/clean-code-principles.md +140 -0
  277. package/src/config/claude-code-config/skills/workflow-review-code/references/code-quality-metrics.md +174 -0
  278. package/src/config/claude-code-config/skills/workflow-review-code/references/feedback-patterns.md +149 -0
  279. package/src/config/claude-code-config/skills/workflow-review-code/references/security-checklist.md +127 -0
  280. package/src/config/claude-code-config/song/finish.mp3 +0 -0
  281. package/src/config/claude-code-config/song/need-human.mp3 +0 -0
@@ -0,0 +1,56 @@
1
+ import { createAnthropic } from "@ai-sdk/anthropic";
2
+ import { generateText } from "ai";
3
+ import { getClaudeCodeToken } from "./helper/credentials";
4
+
5
+ export {
6
+ getClaudeCodeToken,
7
+ getClaudeCodeTokenSafe,
8
+ } from "./helper/credentials";
9
+
10
+ const SYSTEM_PROMPT =
11
+ "You are Claude Code, Anthropic's official CLI for Claude.";
12
+
13
+ export type Model = "haiku" | "sonnet" | "opus";
14
+
15
+ const MODEL_MAP: Record<Model, string> = {
16
+ haiku: "claude-haiku-4-5-20251001",
17
+ sonnet: "claude-sonnet-4-5-20250929",
18
+ opus: "claude-opus-4-5-20251101",
19
+ };
20
+
21
+ export async function generateTextCC({
22
+ prompt,
23
+ system,
24
+ model = "sonnet",
25
+ }: {
26
+ prompt: string;
27
+ system?: string;
28
+ model?: Model;
29
+ }): Promise<string> {
30
+ const token = await getClaudeCodeToken();
31
+
32
+ const anthropic = createAnthropic({
33
+ apiKey: "oauth-token",
34
+ headers: {
35
+ "anthropic-beta":
36
+ "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14",
37
+ "anthropic-dangerous-direct-browser-access": "true",
38
+ "x-app": "cli",
39
+ "User-Agent": "claude-cli/2.0.76 (external, cli)",
40
+ },
41
+ fetch: (async (url: RequestInfo | URL, options?: RequestInit) => {
42
+ const headers = new Headers(options?.headers);
43
+ headers.delete("x-api-key");
44
+ headers.set("Authorization", `Bearer ${token}`);
45
+ return fetch(url, { ...options, headers });
46
+ }) as typeof fetch,
47
+ });
48
+
49
+ const result = await generateText({
50
+ model: anthropic(MODEL_MAP[model]),
51
+ system,
52
+ prompt,
53
+ });
54
+
55
+ return result.text;
56
+ }
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env bun
2
+ import { parseArgs } from "util";
3
+ import { generateTextCC, type Model } from "./claude";
4
+
5
+ const { values, positionals } = parseArgs({
6
+ args: Bun.argv.slice(2),
7
+ options: {
8
+ model: {
9
+ type: "string",
10
+ short: "m",
11
+ default: "sonnet",
12
+ },
13
+ system: {
14
+ type: "string",
15
+ short: "s",
16
+ },
17
+ },
18
+ allowPositionals: true,
19
+ });
20
+
21
+ const prompt = positionals.join(" ");
22
+
23
+ if (!prompt) {
24
+ console.error(
25
+ "Usage: bun run cli.ts <prompt> [-m opus|sonnet|haiku] [-s system_prompt]",
26
+ );
27
+ process.exit(1);
28
+ }
29
+
30
+ const model = values.model as Model;
31
+ if (!["haiku", "sonnet", "opus"].includes(model)) {
32
+ console.error(`Invalid model: ${model}. Use: opus, sonnet, or haiku`);
33
+ process.exit(1);
34
+ }
35
+
36
+ try {
37
+ const response = await generateTextCC({
38
+ prompt,
39
+ model,
40
+ system: values.system,
41
+ });
42
+ console.log(response);
43
+ } catch (error) {
44
+ console.error("Error:", error);
45
+ process.exit(1);
46
+ }
@@ -0,0 +1,76 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { $ } from "bun";
6
+
7
+ interface Credentials {
8
+ claudeAiOauth: {
9
+ accessToken: string;
10
+ refreshToken: string;
11
+ expiresAt: number;
12
+ scopes: string[];
13
+ subscriptionType: string;
14
+ };
15
+ }
16
+
17
+ function getHomeDir(): string {
18
+ return homedir();
19
+ }
20
+
21
+ function getCredentialsFilePath(): string {
22
+ const home = getHomeDir();
23
+ return join(home, ".claude", ".credentials.json");
24
+ }
25
+
26
+ async function getMacOSKeychainCredentials(): Promise<string> {
27
+ const result =
28
+ // ank-121221
29
+ await $`security find-generic-password -s "Claude Code-credentials" -w`
30
+ .quiet()
31
+ .text();
32
+ const creds: Credentials = JSON.parse(result.trim());
33
+ return creds.claudeAiOauth.accessToken;
34
+ }
35
+
36
+ async function getFileCredentials(): Promise<string> {
37
+ const credentialsPath = getCredentialsFilePath();
38
+
39
+ if (!existsSync(credentialsPath)) {
40
+ throw new Error(`Credentials file not found at ${credentialsPath}`);
41
+ }
42
+
43
+ const content = await readFile(credentialsPath, "utf-8");
44
+ const creds: Credentials = JSON.parse(content);
45
+ return creds.claudeAiOauth.accessToken;
46
+ }
47
+
48
+ export async function getClaudeCodeToken(): Promise<string> {
49
+ const platform = process.platform;
50
+
51
+ if (platform === "darwin") {
52
+ try {
53
+ return await getMacOSKeychainCredentials();
54
+ } catch {
55
+ return await getFileCredentials();
56
+ }
57
+ }
58
+
59
+ if (platform === "linux") {
60
+ return await getFileCredentials();
61
+ }
62
+
63
+ if (platform === "win32") {
64
+ return await getFileCredentials();
65
+ }
66
+
67
+ throw new Error(`Unsupported platform: ${platform}`);
68
+ }
69
+
70
+ export async function getClaudeCodeTokenSafe(): Promise<string | null> {
71
+ try {
72
+ return await getClaudeCodeToken();
73
+ } catch {
74
+ return null;
75
+ }
76
+ }
@@ -0,0 +1,9 @@
1
+ export { getClaudeCodeToken, getClaudeCodeTokenSafe } from "./credentials";
2
+ export {
3
+ encodeProjectPath,
4
+ getClaudeConfigDir,
5
+ getClaudeCredentialsPath,
6
+ getClaudeProjectsDir,
7
+ getClaudeSettingsPath,
8
+ getHomeDir,
9
+ } from "./paths";
@@ -0,0 +1,51 @@
1
+ import { existsSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+
5
+ export function getHomeDir(): string {
6
+ return homedir();
7
+ }
8
+
9
+ export function getClaudeConfigDir(): string {
10
+ const home = getHomeDir();
11
+
12
+ const newPath = join(home, ".config", "claude");
13
+ if (existsSync(newPath)) {
14
+ return newPath;
15
+ }
16
+
17
+ const legacyPath = join(home, ".claude");
18
+ if (existsSync(legacyPath)) {
19
+ return legacyPath;
20
+ }
21
+
22
+ return newPath;
23
+ }
24
+
25
+ export function getClaudeCredentialsPath(): string {
26
+ const home = getHomeDir();
27
+ return join(home, ".claude", ".credentials.json");
28
+ }
29
+
30
+ export function getClaudeSettingsPath(): string {
31
+ return join(getClaudeConfigDir(), "settings.json");
32
+ }
33
+
34
+ export function getClaudeProjectsDir(): string {
35
+ return join(getClaudeConfigDir(), "projects");
36
+ }
37
+
38
+ export function encodeProjectPath(absolutePath: string): string {
39
+ const normalizedPath = absolutePath.replace(/[/\\]+$/, "");
40
+
41
+ const claudeProjectsDir = getClaudeProjectsDir();
42
+ if (normalizedPath.includes(join(".claude", "projects"))) {
43
+ return normalizedPath;
44
+ }
45
+
46
+ const encoded = normalizedPath
47
+ .replace(/[/\\]/g, "-")
48
+ .replace(/\./g, "-")
49
+ .replace(/:/g, "");
50
+ return join(claudeProjectsDir, encoded);
51
+ }
@@ -0,0 +1,112 @@
1
+ # Command Validator - CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code when working with the command-validator security package.
4
+
5
+ ## Project Purpose
6
+
7
+ **Command Validator** is a security validation package for Claude Code's PreToolUse hook. It validates bash commands before execution to prevent dangerous operations like:
8
+ - System destruction (rm -rf /, dd, mkfs)
9
+ - Privilege escalation (sudo, chmod, passwd)
10
+ - Network attacks (nc, nmap, telnet)
11
+ - Malicious patterns (fork bombs, backdoors)
12
+ - Sensitive file access (/etc/passwd, /etc/shadow)
13
+
14
+ The validator is integrated as a hook in Claude Code settings and blocks dangerous commands while allowing safe operations.
15
+
16
+ ## CRITICAL: This Project Uses BUN
17
+
18
+ **NEVER use npm or node commands. This project exclusively uses BUN.**
19
+
20
+ ## Development Commands
21
+
22
+ **CRITICAL**: Only use these BUN commands:
23
+
24
+ ### Testing (Primary Workflow)
25
+ - `bun test` - Run all tests with Vitest
26
+ - `bun test:ui` - Run tests with UI interface
27
+ - `bun run test` - Alternative test command
28
+
29
+ ### Code Quality
30
+ - `bun run lint` - Run Biome linter and auto-fix
31
+ - `bun run format` - Format code with Biome
32
+ - `bunx tsc --noEmit` - TypeScript type checking (no build)
33
+
34
+ ### Execution
35
+ - `bun src/cli.ts` - Run CLI validator directly
36
+ - `bun install` - Install dependencies
37
+
38
+ ## Development Workflow
39
+
40
+ **CRITICAL**: The majority of work on this project follows this simple cycle:
41
+
42
+ ### Test-Driven Development Cycle
43
+ 1. **Run tests**: `bun test`
44
+ 2. **Read errors**: Analyze test failures carefully
45
+ 3. **Fix the problem**: Make minimal changes to pass tests
46
+ 4. **Re-run tests**: `bun test` until ALL tests pass
47
+ 5. **Repeat**: Continue cycle until all tests are green
48
+
49
+ **ALWAYS follow this workflow:**
50
+ ```bash
51
+ bun test # See what's broken
52
+ # Fix the code
53
+ bun test # Verify fix works
54
+ # Repeat until green
55
+ ```
56
+
57
+ ## Architecture Overview
58
+
59
+ ```
60
+ src/
61
+ ├── cli.ts # CLI entry point (used by Claude Code hook)
62
+ ├── lib/
63
+ │ ├── types.ts # TypeScript interfaces
64
+ │ ├── security-rules.ts # Security rules database
65
+ │ └── validator.ts # Core validation logic
66
+ └── __tests__/
67
+ └── validator.test.ts # Comprehensive test suite (82+ tests)
68
+ ```
69
+
70
+ ### Key Files
71
+ - **@scripts/command-validator/src/lib/validator.ts** - Core CommandValidator class
72
+ - **@scripts/command-validator/src/lib/security-rules.ts** - Security rules database
73
+ - **@scripts/command-validator/src/__tests__/validator.test.ts** - All test cases
74
+
75
+ ## Code Conventions
76
+
77
+ - **TypeScript**: Strict mode enabled
78
+ - **Testing**: Vitest with comprehensive coverage (82+ tests)
79
+ - **Linting**: Biome for formatting and linting
80
+ - **Imports**: ESM module format only
81
+
82
+ ## Security Test Categories
83
+
84
+ The test suite validates:
85
+ 1. **Safe Commands**: ls, git, npm, cat, cp, mv, mkdir (must allow)
86
+ 2. **Dangerous Commands**: rm -rf /, dd, sudo, passwd (must block)
87
+ 3. **Special Cases**: rm -rf safety rules, protected paths, command chains
88
+ 4. **Malicious Patterns**: Fork bombs, backdoors, log manipulation
89
+
90
+ ## IMPORTANT: Workflow Rules
91
+
92
+ - **BEFORE making changes**: Run `bun test` to see current state
93
+ - **AFTER any code change**: Run `bun test` to verify
94
+ - **NEVER assume tests pass**: Always verify with `bun test`
95
+ - **Fix one test at a time**: Make minimal changes, then re-test
96
+ - **Use Bun ONLY**: No npm, node, or yarn commands
97
+
98
+ ## Common Modifications
99
+
100
+ Most changes involve:
101
+ 1. **Adding new security rules** → Update @scripts/command-validator/src/lib/security-rules.ts
102
+ 2. **Modifying validation logic** → Update @scripts/command-validator/src/lib/validator.ts
103
+ 3. **Adding test cases** → Update @scripts/command-validator/src/__tests__/validator.test.ts
104
+ 4. **Run tests after each change** → `bun test`
105
+
106
+ ## Test Execution Priority
107
+
108
+ **ALWAYS use the test-driven approach:**
109
+ - Tests define the requirements
110
+ - Code changes must make tests pass
111
+ - All 82+ tests must be green before committing
112
+ - Use `bun test` continuously during development
@@ -0,0 +1,147 @@
1
+ # Command Validator
2
+
3
+ A secure command validation package for Claude Code's PreToolUse hook. This package validates bash commands before execution to prevent dangerous operations.
4
+
5
+ ## Features
6
+
7
+ - **Comprehensive Security Rules**: Blocks dangerous commands (rm -rf /, dd, mkfs, etc.)
8
+ - **Pattern Matching**: Detects malicious patterns like fork bombs, backdoors, and data exfiltration
9
+ - **Path Protection**: Prevents writes to system directories (/etc, /usr, /bin, etc.)
10
+ - **Command Chaining**: Validates chained commands (&&, ||, ;)
11
+ - **Fully Tested**: 82+ tests with Vitest ensuring reliable validation
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ bun install
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### As a Claude Code Hook
22
+
23
+ The validator is configured as a PreToolUse hook in Claude Code settings:
24
+
25
+ ```json
26
+ {
27
+ "hooks": {
28
+ "PreToolUse": [
29
+ {
30
+ "matcher": "Bash",
31
+ "hooks": [
32
+ {
33
+ "type": "command",
34
+ "command": "bun /Users/melvynx/.claude/scripts/command-validator/src/cli.ts"
35
+ }
36
+ ]
37
+ }
38
+ ]
39
+ }
40
+ }
41
+ ```
42
+
43
+ ### Programmatic Usage
44
+
45
+ ```typescript
46
+ import { CommandValidator } from "./src/lib/validator";
47
+
48
+ const validator = new CommandValidator();
49
+ const result = validator.validate("rm -rf /");
50
+
51
+ if (!result.isValid) {
52
+ console.log(`Blocked: ${result.violations.join(", ")}`);
53
+ console.log(`Severity: ${result.severity}`);
54
+ }
55
+ ```
56
+
57
+ ## Testing
58
+
59
+ ```bash
60
+ # Run all tests
61
+ bun test
62
+
63
+ # Run tests with UI
64
+ bun test:ui
65
+ ```
66
+
67
+ ## Test Coverage
68
+
69
+ The test suite includes:
70
+
71
+ ### Safe Commands (Must Allow)
72
+ - Standard utilities: ls, git, npm, pnpm, node, python
73
+ - File operations: cat, cp, mv, mkdir, touch
74
+ - Safe command chains with &&
75
+
76
+ ### Dangerous Commands (Must Block)
77
+ - System destruction: rm -rf /, dd, mkfs, fdisk
78
+ - Privilege escalation: sudo, chmod, chown, passwd
79
+ - Network attacks: nc, nmap, telnet
80
+ - Malicious patterns: fork bombs, backdoors, log manipulation
81
+ - Sensitive file access: /etc/passwd, /etc/shadow, /etc/sudoers
82
+
83
+ ### Special Cases
84
+ - rm -rf safety: Allows deletions in safe paths (/Users/melvynx/Developer/, /tmp/)
85
+ - Protected paths: Blocks dangerous operations on /etc, /usr, /bin, etc.
86
+ - Binary content detection
87
+ - Command length limits
88
+
89
+ ## Architecture
90
+
91
+ ```
92
+ src/
93
+ ├── cli.ts # CLI entry point (used by Claude Code hook)
94
+ ├── lib/
95
+ │ ├── types.ts # TypeScript interfaces
96
+ │ ├── security-rules.ts # Security rules database
97
+ │ └── validator.ts # Core validation logic
98
+ └── __tests__/
99
+ └── validator.test.ts # Comprehensive test suite
100
+ ```
101
+
102
+ ## Security Rules
103
+
104
+ ### Critical Commands
105
+ - `del`, `format`, `mkfs`, `shred`, `dd`, `fdisk`, `parted`
106
+
107
+ ### Privilege Escalation
108
+ - `sudo`, `su`, `passwd`, `chpasswd`, `usermod`, `chmod`, `chown`
109
+
110
+ ### Network Commands
111
+ - `nc`, `netcat`, `nmap`, `telnet`, `ssh-keygen`, `iptables`
112
+
113
+ ### System Manipulation
114
+ - `systemctl`, `service`, `kill`, `killall`, `mount`, `umount`
115
+
116
+ ### Protected Paths
117
+ - `/etc/`, `/usr/`, `/sbin/`, `/boot/`, `/sys/`, `/proc/`, `/dev/`, `/root/`
118
+
119
+ ## Security Logs
120
+
121
+ Security events are logged to `data/security.log` inside the package directory. The log file contains:
122
+ - Timestamp
123
+ - Session ID
124
+ - Tool name
125
+ - Command (truncated to 500 chars)
126
+ - Blocked/allowed status
127
+ - Severity level
128
+ - Violations detected
129
+
130
+ The `data/` folder is gitignored to prevent committing sensitive log data.
131
+
132
+ ## Development
133
+
134
+ ```bash
135
+ # Run linter
136
+ bun run lint
137
+
138
+ # Format code
139
+ bun run format
140
+
141
+ # Type check
142
+ bunx tsc --noEmit
143
+ ```
144
+
145
+ ## License
146
+
147
+ MIT
@@ -0,0 +1,99 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { CommandValidator } from "../lib/validator";
3
+
4
+ describe("CommandValidator", () => {
5
+ const validator = new CommandValidator();
6
+
7
+ describe("Commands that MUST be ALLOWED (action: allow)", () => {
8
+ const allowedCommands = [
9
+ "ls -la",
10
+ "pwd",
11
+ "git status",
12
+ "git add -A && git commit -m 'Clé API Google gérée côté client'",
13
+ "npm install",
14
+ "rm file.txt",
15
+ "rm -r folder",
16
+ "rm -f file.txt",
17
+ "echo 'éàù accents français'",
18
+ "git commit -m '🚀 emoji test'",
19
+ "cat /etc/passwd",
20
+ "curl http://example.com",
21
+ ];
22
+
23
+ for (const command of allowedCommands) {
24
+ it(`should ALLOW: ${command}`, () => {
25
+ const result = validator.validate(command);
26
+ expect(result.isValid).toBe(true);
27
+ expect(result.action).toBe("allow");
28
+ expect(result.violations).toHaveLength(0);
29
+ });
30
+ }
31
+ });
32
+
33
+ describe("Commands that MUST be DENIED (action: deny) - rm -rf ONLY", () => {
34
+ const deniedCommands = [
35
+ "rm -rf /",
36
+ "rm -rf folder",
37
+ "rm -rf .",
38
+ "rm -rf /tmp/test",
39
+ "rm -fr folder",
40
+ "rm -r -f folder",
41
+ "rm -f -r folder",
42
+ "rm -rf /Users/test/.claude/skills",
43
+ "mkdir test && rm -rf test",
44
+ ];
45
+
46
+ for (const command of deniedCommands) {
47
+ it(`should DENY: ${command}`, () => {
48
+ const result = validator.validate(command);
49
+ expect(result.isValid).toBe(false);
50
+ expect(result.action).toBe("deny");
51
+ expect(result.severity).toBe("CRITICAL");
52
+ expect(result.violations[0]).toContain("rm -rf is forbidden");
53
+ });
54
+ }
55
+ });
56
+
57
+ describe("Commands that MUST ASK permission (action: ask)", () => {
58
+ const askCommands = [
59
+ { cmd: "sudo apt install", expected: "sudo" },
60
+ { cmd: "sudo rm something", expected: "sudo" },
61
+ { cmd: "chmod 777 file.txt", expected: "chmod" },
62
+ { cmd: "chown root file.txt", expected: "chown" },
63
+ { cmd: "dd if=/dev/zero of=test.img", expected: "dd" },
64
+ { cmd: "kill -9 1234", expected: "kill" },
65
+ { cmd: "killall node", expected: "killall" },
66
+ { cmd: "su root", expected: "su" },
67
+ ];
68
+
69
+ for (const { cmd, expected } of askCommands) {
70
+ it(`should ASK for: ${cmd}`, () => {
71
+ const result = validator.validate(cmd);
72
+ expect(result.isValid).toBe(false);
73
+ expect(result.action).toBe("ask");
74
+ expect(result.severity).toBe("HIGH");
75
+ expect(result.violations[0]).toContain(expected);
76
+ });
77
+ }
78
+ });
79
+
80
+ describe("Edge cases", () => {
81
+ it("should DENY empty commands", () => {
82
+ const result = validator.validate("");
83
+ expect(result.isValid).toBe(false);
84
+ expect(result.action).toBe("deny");
85
+ });
86
+
87
+ it("should ALLOW commands with accented characters", () => {
88
+ const result = validator.validate("git commit -m 'éàùç accents'");
89
+ expect(result.isValid).toBe(true);
90
+ expect(result.action).toBe("allow");
91
+ });
92
+
93
+ it("should ALLOW commands with emojis", () => {
94
+ const result = validator.validate("echo '🚀🎉'");
95
+ expect(result.isValid).toBe(true);
96
+ expect(result.action).toBe("allow");
97
+ });
98
+ });
99
+ });