@su-record/vibe 2.7.18 → 2.7.20

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 (345) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +153 -153
  3. package/LICENSE +21 -21
  4. package/README.md +451 -449
  5. package/agents/architect-low.md +41 -41
  6. package/agents/architect-medium.md +59 -59
  7. package/agents/architect.md +80 -80
  8. package/agents/build-error-resolver.md +115 -115
  9. package/agents/compounder.md +261 -261
  10. package/agents/diagrammer.md +178 -178
  11. package/agents/docs/api-documenter.md +99 -99
  12. package/agents/docs/changelog-writer.md +93 -93
  13. package/agents/e2e-tester.md +294 -294
  14. package/agents/event/event-comms.md +78 -0
  15. package/agents/event/event-content.md +68 -0
  16. package/agents/event/event-image.md +95 -0
  17. package/agents/event/event-ops.md +84 -0
  18. package/agents/event/event-scheduler.md +69 -0
  19. package/agents/event/event-speaker.md +86 -0
  20. package/agents/explorer-low.md +42 -42
  21. package/agents/explorer-medium.md +59 -59
  22. package/agents/explorer.md +48 -48
  23. package/agents/implementer-low.md +43 -43
  24. package/agents/implementer-medium.md +52 -52
  25. package/agents/implementer.md +54 -54
  26. package/agents/junior-mentor.md +141 -141
  27. package/agents/planning/requirements-analyst.md +84 -84
  28. package/agents/planning/ux-advisor.md +83 -83
  29. package/agents/qa/acceptance-tester.md +86 -86
  30. package/agents/qa/edge-case-finder.md +93 -93
  31. package/agents/refactor-cleaner.md +143 -143
  32. package/agents/research/best-practices-agent.md +199 -199
  33. package/agents/research/codebase-patterns-agent.md +157 -157
  34. package/agents/research/framework-docs-agent.md +188 -188
  35. package/agents/research/security-advisory-agent.md +213 -213
  36. package/agents/review/architecture-reviewer.md +107 -107
  37. package/agents/review/complexity-reviewer.md +116 -116
  38. package/agents/review/data-integrity-reviewer.md +88 -88
  39. package/agents/review/git-history-reviewer.md +103 -103
  40. package/agents/review/performance-reviewer.md +86 -86
  41. package/agents/review/python-reviewer.md +150 -150
  42. package/agents/review/rails-reviewer.md +139 -139
  43. package/agents/review/react-reviewer.md +144 -144
  44. package/agents/review/security-reviewer.md +80 -80
  45. package/agents/review/simplicity-reviewer.md +140 -140
  46. package/agents/review/test-coverage-reviewer.md +116 -116
  47. package/agents/review/typescript-reviewer.md +127 -127
  48. package/agents/searcher.md +54 -54
  49. package/agents/simplifier.md +120 -120
  50. package/agents/tester.md +49 -49
  51. package/agents/ui/ui-a11y-auditor.md +93 -93
  52. package/agents/ui/ui-antipattern-detector.md +94 -94
  53. package/agents/ui/ui-dataviz-advisor.md +69 -69
  54. package/agents/ui/ui-design-system-gen.md +57 -57
  55. package/agents/ui/ui-industry-analyzer.md +49 -49
  56. package/agents/ui/ui-layout-architect.md +65 -65
  57. package/agents/ui/ui-stack-implementer.md +68 -68
  58. package/agents/ui/ux-compliance-reviewer.md +81 -81
  59. package/agents/ui-previewer.md +258 -258
  60. package/commands/vibe.analyze.md +379 -379
  61. package/commands/vibe.event.md +163 -0
  62. package/commands/vibe.review.md +607 -607
  63. package/commands/vibe.run.md +2217 -2124
  64. package/commands/vibe.spec.md +1195 -1195
  65. package/commands/vibe.spec.review.md +569 -569
  66. package/commands/vibe.trace.md +50 -0
  67. package/commands/vibe.utils.md +413 -413
  68. package/commands/vibe.verify.md +484 -484
  69. package/dist/__tests__/architecture.test.d.ts +2 -0
  70. package/dist/__tests__/architecture.test.d.ts.map +1 -0
  71. package/dist/__tests__/architecture.test.js +207 -0
  72. package/dist/__tests__/architecture.test.js.map +1 -0
  73. package/dist/cli/auth.js +3 -3
  74. package/dist/cli/auth.js.map +1 -1
  75. package/dist/cli/collaborator.js +52 -52
  76. package/dist/cli/commands/evolution.js +12 -12
  77. package/dist/cli/commands/info.d.ts.map +1 -1
  78. package/dist/cli/commands/info.js +45 -81
  79. package/dist/cli/commands/info.js.map +1 -1
  80. package/dist/cli/commands/init.js +5 -5
  81. package/dist/cli/commands/remove.js +14 -14
  82. package/dist/cli/commands/sentinel.js +27 -27
  83. package/dist/cli/commands/skills.js +5 -5
  84. package/dist/cli/commands/slack.js +10 -10
  85. package/dist/cli/commands/telegram.js +12 -12
  86. package/dist/cli/detect.d.ts.map +1 -1
  87. package/dist/cli/detect.js +55 -32
  88. package/dist/cli/detect.js.map +1 -1
  89. package/dist/cli/index.d.ts +1 -1
  90. package/dist/cli/index.d.ts.map +1 -1
  91. package/dist/cli/index.js +52 -52
  92. package/dist/cli/index.js.map +1 -1
  93. package/dist/cli/llm/claude-commands.js +16 -16
  94. package/dist/cli/llm/config.js +18 -18
  95. package/dist/cli/llm/gemini-commands.js +16 -16
  96. package/dist/cli/llm/gpt-commands.js +19 -19
  97. package/dist/cli/llm/help.js +21 -21
  98. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  99. package/dist/cli/postinstall/constants.js +24 -0
  100. package/dist/cli/postinstall/constants.js.map +1 -1
  101. package/dist/cli/postinstall/cursor-agents.js +32 -32
  102. package/dist/cli/postinstall/cursor-rules.js +83 -83
  103. package/dist/cli/postinstall/cursor-skills.js +743 -743
  104. package/dist/cli/setup/Provisioner.js +42 -42
  105. package/dist/infra/lib/AutomationLevel.d.ts +48 -0
  106. package/dist/infra/lib/AutomationLevel.d.ts.map +1 -0
  107. package/dist/infra/lib/AutomationLevel.js +157 -0
  108. package/dist/infra/lib/AutomationLevel.js.map +1 -0
  109. package/dist/infra/lib/DecisionTracer.d.ts +81 -0
  110. package/dist/infra/lib/DecisionTracer.d.ts.map +1 -0
  111. package/dist/infra/lib/DecisionTracer.js +135 -0
  112. package/dist/infra/lib/DecisionTracer.js.map +1 -0
  113. package/dist/infra/lib/DeepInit.js +24 -24
  114. package/dist/infra/lib/InteractiveCheckpoint.d.ts +75 -0
  115. package/dist/infra/lib/InteractiveCheckpoint.d.ts.map +1 -0
  116. package/dist/infra/lib/InteractiveCheckpoint.js +179 -0
  117. package/dist/infra/lib/InteractiveCheckpoint.js.map +1 -0
  118. package/dist/infra/lib/IterationTracker.d.ts +44 -0
  119. package/dist/infra/lib/IterationTracker.d.ts.map +1 -1
  120. package/dist/infra/lib/IterationTracker.js +267 -12
  121. package/dist/infra/lib/IterationTracker.js.map +1 -1
  122. package/dist/infra/lib/LoopBreaker.d.ts +56 -0
  123. package/dist/infra/lib/LoopBreaker.d.ts.map +1 -0
  124. package/dist/infra/lib/LoopBreaker.js +109 -0
  125. package/dist/infra/lib/LoopBreaker.js.map +1 -0
  126. package/dist/infra/lib/PythonParser.js +108 -108
  127. package/dist/infra/lib/ReviewRace.js +96 -96
  128. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  129. package/dist/infra/lib/SkillQualityGate.js +9 -9
  130. package/dist/infra/lib/SkillRepository.js +159 -159
  131. package/dist/infra/lib/UltraQA.js +99 -99
  132. package/dist/infra/lib/VerificationLoop.d.ts +105 -0
  133. package/dist/infra/lib/VerificationLoop.d.ts.map +1 -0
  134. package/dist/infra/lib/VerificationLoop.js +189 -0
  135. package/dist/infra/lib/VerificationLoop.js.map +1 -0
  136. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts +2 -0
  137. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts.map +1 -0
  138. package/dist/infra/lib/__tests__/AutomationLevel.test.js +297 -0
  139. package/dist/infra/lib/__tests__/AutomationLevel.test.js.map +1 -0
  140. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts +2 -0
  141. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts.map +1 -0
  142. package/dist/infra/lib/__tests__/DecisionTracer.test.js +274 -0
  143. package/dist/infra/lib/__tests__/DecisionTracer.test.js.map +1 -0
  144. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts +2 -0
  145. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts.map +1 -0
  146. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js +350 -0
  147. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js.map +1 -0
  148. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts +2 -0
  149. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts.map +1 -0
  150. package/dist/infra/lib/__tests__/LoopBreaker.test.js +340 -0
  151. package/dist/infra/lib/__tests__/LoopBreaker.test.js.map +1 -0
  152. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts +2 -0
  153. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts.map +1 -0
  154. package/dist/infra/lib/__tests__/VerificationLoop.test.js +486 -0
  155. package/dist/infra/lib/__tests__/VerificationLoop.test.js.map +1 -0
  156. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  157. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  158. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  159. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  160. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  161. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  162. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  163. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  164. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js +4 -0
  165. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +1 -1
  166. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  167. package/dist/infra/lib/evolution/DeprecationDetector.d.ts +68 -0
  168. package/dist/infra/lib/evolution/DeprecationDetector.d.ts.map +1 -0
  169. package/dist/infra/lib/evolution/DeprecationDetector.js +207 -0
  170. package/dist/infra/lib/evolution/DeprecationDetector.js.map +1 -0
  171. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  172. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  173. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  174. package/dist/infra/lib/evolution/ParityTester.d.ts +74 -0
  175. package/dist/infra/lib/evolution/ParityTester.d.ts.map +1 -0
  176. package/dist/infra/lib/evolution/ParityTester.js +238 -0
  177. package/dist/infra/lib/evolution/ParityTester.js.map +1 -0
  178. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  179. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  180. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  181. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  182. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  183. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts +2 -0
  184. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts.map +1 -0
  185. package/dist/infra/lib/evolution/__tests__/deprecation.test.js +251 -0
  186. package/dist/infra/lib/evolution/__tests__/deprecation.test.js.map +1 -0
  187. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts +2 -0
  188. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts.map +1 -0
  189. package/dist/infra/lib/evolution/__tests__/parity.test.js +319 -0
  190. package/dist/infra/lib/evolution/__tests__/parity.test.js.map +1 -0
  191. package/dist/infra/lib/evolution/index.d.ts +4 -0
  192. package/dist/infra/lib/evolution/index.d.ts.map +1 -1
  193. package/dist/infra/lib/evolution/index.js +3 -0
  194. package/dist/infra/lib/evolution/index.js.map +1 -1
  195. package/dist/infra/lib/gemini/orchestration.js +5 -5
  196. package/dist/infra/lib/gpt/orchestration.js +4 -4
  197. package/dist/infra/lib/gpt/specializations.d.ts +1 -1
  198. package/dist/infra/lib/gpt/specializations.js +1 -1
  199. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  200. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  201. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  202. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  203. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  204. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  205. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  206. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  207. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts +6 -0
  208. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
  209. package/dist/infra/lib/telemetry/SkillTelemetry.js +11 -0
  210. package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
  211. package/dist/infra/orchestrator/AgentManager.js +12 -12
  212. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  213. package/dist/infra/orchestrator/BackgroundManager.d.ts.map +1 -1
  214. package/dist/infra/orchestrator/BackgroundManager.js +2 -0
  215. package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
  216. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  217. package/dist/infra/orchestrator/PhasePipeline.js +1 -1
  218. package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
  219. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  220. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  221. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  222. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  223. package/dist/tools/index.d.ts +16 -19
  224. package/dist/tools/index.d.ts.map +1 -1
  225. package/dist/tools/index.js +15 -27
  226. package/dist/tools/index.js.map +1 -1
  227. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  228. package/dist/tools/memory/getMemoryGraph.js +12 -12
  229. package/dist/tools/memory/getSessionContext.js +9 -9
  230. package/dist/tools/memory/linkMemories.js +14 -14
  231. package/dist/tools/memory/listMemories.js +4 -4
  232. package/dist/tools/memory/recallMemory.js +4 -4
  233. package/dist/tools/memory/saveMemory.js +4 -4
  234. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  235. package/dist/tools/memory/startSession.js +1 -1
  236. package/dist/tools/memory/startSession.js.map +1 -1
  237. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  238. package/dist/tools/semantic/astGrep.test.js +6 -6
  239. package/dist/tools/spec/index.d.ts +0 -4
  240. package/dist/tools/spec/index.d.ts.map +1 -1
  241. package/dist/tools/spec/index.js +0 -4
  242. package/dist/tools/spec/index.js.map +1 -1
  243. package/dist/tools/spec/prdParser.test.js +171 -171
  244. package/dist/tools/spec/specGenerator.js +169 -169
  245. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  246. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  247. package/hooks/gemini-hooks.json +73 -73
  248. package/hooks/hooks.json +137 -137
  249. package/hooks/scripts/code-check.js +77 -77
  250. package/hooks/scripts/context-save.js +212 -212
  251. package/hooks/scripts/evolution-engine.js +69 -0
  252. package/hooks/scripts/hud-status.js +291 -291
  253. package/hooks/scripts/keyword-detector.js +214 -214
  254. package/hooks/scripts/llm-orchestrate.js +475 -475
  255. package/hooks/scripts/post-edit.js +32 -32
  256. package/hooks/scripts/pre-tool-guard.js +125 -125
  257. package/hooks/scripts/prompt-dispatcher.js +185 -185
  258. package/hooks/scripts/sentinel-guard.js +104 -104
  259. package/hooks/scripts/session-start.js +106 -106
  260. package/hooks/scripts/skill-injector.js +83 -0
  261. package/hooks/scripts/stop-notify.js +209 -209
  262. package/hooks/scripts/utils.js +100 -100
  263. package/languages/csharp-unity.md +515 -515
  264. package/languages/gdscript-godot.md +470 -470
  265. package/languages/ruby-rails.md +489 -489
  266. package/languages/typescript-angular.md +433 -433
  267. package/languages/typescript-astro.md +416 -416
  268. package/languages/typescript-electron.md +406 -406
  269. package/languages/typescript-nestjs.md +524 -524
  270. package/languages/typescript-svelte.md +407 -407
  271. package/languages/typescript-tauri.md +365 -365
  272. package/package.json +101 -123
  273. package/skills/agents-md/SKILL.md +120 -120
  274. package/skills/arch-guard/SKILL.md +180 -180
  275. package/skills/brand-assets/SKILL.md +146 -146
  276. package/skills/capability-loop/SKILL.md +167 -167
  277. package/skills/characterization-test/SKILL.md +206 -206
  278. package/skills/commerce-patterns/SKILL.md +63 -63
  279. package/skills/commit-push-pr/SKILL.md +75 -75
  280. package/skills/context7-usage/SKILL.md +105 -105
  281. package/skills/core-capabilities/SKILL.md +13 -13
  282. package/skills/e2e-commerce/SKILL.md +61 -61
  283. package/skills/event-comms/SKILL.md +161 -0
  284. package/skills/event-ops/SKILL.md +197 -0
  285. package/skills/event-planning/SKILL.md +131 -0
  286. package/skills/exec-plan/SKILL.md +147 -147
  287. package/skills/frontend-design/SKILL.md +12 -12
  288. package/skills/git-worktree/SKILL.md +72 -72
  289. package/skills/handoff/SKILL.md +109 -109
  290. package/skills/parallel-research/SKILL.md +87 -87
  291. package/skills/priority-todos/SKILL.md +63 -63
  292. package/skills/seo-checklist/SKILL.md +57 -57
  293. package/skills/techdebt/SKILL.md +122 -122
  294. package/skills/tool-fallback/SKILL.md +103 -103
  295. package/skills/typescript-advanced-types/SKILL.md +66 -66
  296. package/skills/ui-ux-pro-max/SKILL.md +221 -221
  297. package/skills/vercel-react-best-practices/SKILL.md +59 -59
  298. package/skills/video-production/SKILL.md +51 -51
  299. package/vibe/config.json +29 -29
  300. package/vibe/constitution.md +227 -227
  301. package/vibe/rules/principles/communication-guide.md +98 -98
  302. package/vibe/rules/principles/development-philosophy.md +52 -52
  303. package/vibe/rules/principles/quick-start.md +102 -102
  304. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  305. package/vibe/rules/quality/checklist.md +276 -276
  306. package/vibe/rules/quality/performance.md +236 -236
  307. package/vibe/rules/quality/testing-strategy.md +440 -440
  308. package/vibe/rules/standards/anti-patterns.md +541 -541
  309. package/vibe/rules/standards/code-structure.md +291 -291
  310. package/vibe/rules/standards/complexity-metrics.md +313 -313
  311. package/vibe/rules/standards/git-workflow.md +237 -237
  312. package/vibe/rules/standards/naming-conventions.md +198 -198
  313. package/vibe/rules/standards/security.md +305 -305
  314. package/vibe/rules/writing/document-style.md +74 -74
  315. package/vibe/setup.sh +31 -31
  316. package/vibe/templates/constitution-template.md +252 -252
  317. package/vibe/templates/contract-backend-template.md +526 -526
  318. package/vibe/templates/contract-frontend-template.md +599 -599
  319. package/vibe/templates/feature-template.md +96 -96
  320. package/vibe/templates/spec-template.md +221 -221
  321. package/vibe/ui-ux-data/charts.csv +26 -26
  322. package/vibe/ui-ux-data/colors.csv +97 -97
  323. package/vibe/ui-ux-data/icons.csv +101 -101
  324. package/vibe/ui-ux-data/landing.csv +31 -31
  325. package/vibe/ui-ux-data/products.csv +96 -96
  326. package/vibe/ui-ux-data/react-performance.csv +45 -45
  327. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  328. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  329. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  330. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  331. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  332. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  333. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  334. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  335. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  336. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  337. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  338. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  339. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  340. package/vibe/ui-ux-data/styles.csv +68 -68
  341. package/vibe/ui-ux-data/typography.csv +57 -57
  342. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  343. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  344. package/vibe/ui-ux-data/version.json +31 -31
  345. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -1,180 +1,180 @@
1
- ---
2
- name: arch-guard
3
- description: "Generate architecture boundary tests that mechanically enforce layer constraints."
4
- triggers: [arch guard, architecture test, layer test, boundary test, structural test, arch validation]
5
- priority: 60
6
- ---
7
-
8
- # Arch Guard — Architecture Boundary Test Generator
9
-
10
- > **Principle**: "Mechanical enforcement over documentation." If a rule exists only in docs, it will be violated. Turn architecture constraints into failing tests.
11
-
12
- ## When to Use
13
-
14
- | Scenario | Signal |
15
- |----------|--------|
16
- | `vibe init` / `vibe update` | Auto-generate for detected stack |
17
- | New layer/module added | Boundaries need enforcement |
18
- | Architecture violation found in review | Prevent recurrence with test |
19
- | "Services should not import UI" type rules | Turn into automated check |
20
-
21
- ## Core Flow
22
-
23
- ```
24
- DETECT → INFER → GENERATE → VERIFY
25
- ```
26
-
27
- ### Step 1: DETECT — Identify Project Architecture
28
-
29
- Analyze the project to determine its layer structure:
30
-
31
- ```
32
- Parallel exploration:
33
- - Agent 1: Scan directory structure (src/, app/, lib/, etc.)
34
- - Agent 2: Read existing architecture docs (CLAUDE.md, README, ADR)
35
- - Agent 3: Analyze import graph (which files import what)
36
- ```
37
-
38
- **Common patterns to detect:**
39
-
40
- | Pattern | Layers | Typical Stacks |
41
- |---------|--------|----------------|
42
- | MVC | Controller → Service → Model | Rails, NestJS, Spring |
43
- | Clean Architecture | UI → Application → Domain → Infrastructure | General |
44
- | Feature-based | Feature A ↛ Feature B internals | Next.js, React |
45
- | Hexagonal | Adapters → Ports → Domain | DDD projects |
46
- | Component hierarchy | Page → Feature → Shared → UI Primitives | Frontend |
47
-
48
- ### Step 2: INFER — Define Boundary Rules
49
-
50
- From detected structure, generate rules:
51
-
52
- ```typescript
53
- // Rule format
54
- interface ArchRule {
55
- name: string; // "service-no-ui-import"
56
- from: string; // Glob pattern: "src/services/**"
57
- cannotImport: string[]; // ["src/components/**", "src/pages/**"]
58
- canImport: string[]; // ["src/models/**", "src/utils/**"]
59
- reason: string; // "Services must be UI-agnostic"
60
- }
61
- ```
62
-
63
- **Default rules by stack:**
64
-
65
- | Stack | Rule |
66
- |-------|------|
67
- | Next.js / React | `components/` cannot import from `pages/` or `app/` |
68
- | Next.js / React | `lib/` cannot import from `components/` |
69
- | NestJS | `*.service.ts` cannot import from `*.controller.ts` |
70
- | NestJS | `*.module.ts` is the only valid cross-boundary import |
71
- | General TS | `src/domain/` cannot import from `src/infra/` |
72
- | General TS | No circular dependencies between top-level dirs |
73
- | Python Django | `models.py` cannot import from `views.py` |
74
- | Python FastAPI | `schemas/` cannot import from `routers/` |
75
-
76
- ### Step 3: GENERATE — Create Test File
77
-
78
- Output: `tests/arch-guard.test.ts` (or equivalent for stack)
79
-
80
- ```typescript
81
- /**
82
- * Architecture Boundary Tests
83
- * Generated by arch-guard skill
84
- *
85
- * These tests enforce architectural constraints mechanically.
86
- * If a test fails, it means an import violates the intended architecture.
87
- */
88
- import { describe, it, expect } from 'vitest';
89
- import fs from 'fs';
90
- import path from 'path';
91
-
92
- // Helper: extract imports from a file
93
- function extractImports(filePath: string): string[] {
94
- const content = fs.readFileSync(filePath, 'utf-8');
95
- const importRegex = /(?:import|require)\s*\(?['"]([^'"]+)['"]\)?/g;
96
- const imports: string[] = [];
97
- let match;
98
- while ((match = importRegex.exec(content)) !== null) {
99
- imports.push(match[1]);
100
- }
101
- return imports;
102
- }
103
-
104
- // Helper: resolve relative import to absolute path
105
- function resolveImport(fromFile: string, importPath: string): string {
106
- if (importPath.startsWith('.')) {
107
- return path.resolve(path.dirname(fromFile), importPath);
108
- }
109
- return importPath; // external package
110
- }
111
-
112
- // Helper: glob files matching pattern
113
- function globFiles(pattern: string, baseDir: string): string[] {
114
- // Use fast-glob or manual recursive scan
115
- // Implementation depends on available dependencies
116
- }
117
-
118
- describe('Architecture Boundaries', () => {
119
- // GENERATED RULES GO HERE
120
- // Each rule becomes a test case:
121
-
122
- it('services cannot import UI components', () => {
123
- const serviceFiles = globFiles('src/services/**/*.ts', process.cwd());
124
- const violations: string[] = [];
125
-
126
- for (const file of serviceFiles) {
127
- const imports = extractImports(file);
128
- for (const imp of imports) {
129
- const resolved = resolveImport(file, imp);
130
- if (resolved.includes('/components/') || resolved.includes('/pages/')) {
131
- violations.push(`${file} imports ${imp}`);
132
- }
133
- }
134
- }
135
-
136
- expect(violations).toEqual([]);
137
- });
138
- });
139
- ```
140
-
141
- ### Step 4: VERIFY — Run and Fix
142
-
143
- 1. Run the generated tests: `npx vitest run tests/arch-guard.test.ts`
144
- 2. If violations found:
145
- - Report each violation with file:line
146
- - Suggest fix (move shared code to appropriate layer)
147
- - Do NOT auto-fix — violations need human review
148
-
149
- ## Output Files
150
-
151
- | File | Purpose |
152
- |------|---------|
153
- | `tests/arch-guard.test.ts` | Executable boundary tests |
154
- | `.claude/vibe/arch-rules.json` | Machine-readable rules (for CI) |
155
-
156
- ## Customization
157
-
158
- Users can add custom rules to `.claude/vibe/arch-rules.json`:
159
-
160
- ```json
161
- {
162
- "rules": [
163
- {
164
- "name": "no-direct-db-in-handlers",
165
- "from": "src/handlers/**",
166
- "cannotImport": ["src/db/**"],
167
- "reason": "Handlers must use services, not direct DB access"
168
- }
169
- ]
170
- }
171
- ```
172
-
173
- The test generator reads this file and adds custom rules to the test suite.
174
-
175
- ## Integration
176
-
177
- - `vibe init` → auto-detect and generate initial arch-guard tests
178
- - `vibe update` → refresh rules if directory structure changed
179
- - Pre-commit hook → run arch-guard tests before commit
180
- - `/vibe.review` → architecture-reviewer checks against arch-rules.json
1
+ ---
2
+ name: arch-guard
3
+ description: "Generate architecture boundary tests that mechanically enforce layer constraints."
4
+ triggers: [arch guard, architecture test, layer test, boundary test, structural test, arch validation]
5
+ priority: 60
6
+ ---
7
+
8
+ # Arch Guard — Architecture Boundary Test Generator
9
+
10
+ > **Principle**: "Mechanical enforcement over documentation." If a rule exists only in docs, it will be violated. Turn architecture constraints into failing tests.
11
+
12
+ ## When to Use
13
+
14
+ | Scenario | Signal |
15
+ |----------|--------|
16
+ | `vibe init` / `vibe update` | Auto-generate for detected stack |
17
+ | New layer/module added | Boundaries need enforcement |
18
+ | Architecture violation found in review | Prevent recurrence with test |
19
+ | "Services should not import UI" type rules | Turn into automated check |
20
+
21
+ ## Core Flow
22
+
23
+ ```
24
+ DETECT → INFER → GENERATE → VERIFY
25
+ ```
26
+
27
+ ### Step 1: DETECT — Identify Project Architecture
28
+
29
+ Analyze the project to determine its layer structure:
30
+
31
+ ```
32
+ Parallel exploration:
33
+ - Agent 1: Scan directory structure (src/, app/, lib/, etc.)
34
+ - Agent 2: Read existing architecture docs (CLAUDE.md, README, ADR)
35
+ - Agent 3: Analyze import graph (which files import what)
36
+ ```
37
+
38
+ **Common patterns to detect:**
39
+
40
+ | Pattern | Layers | Typical Stacks |
41
+ |---------|--------|----------------|
42
+ | MVC | Controller → Service → Model | Rails, NestJS, Spring |
43
+ | Clean Architecture | UI → Application → Domain → Infrastructure | General |
44
+ | Feature-based | Feature A ↛ Feature B internals | Next.js, React |
45
+ | Hexagonal | Adapters → Ports → Domain | DDD projects |
46
+ | Component hierarchy | Page → Feature → Shared → UI Primitives | Frontend |
47
+
48
+ ### Step 2: INFER — Define Boundary Rules
49
+
50
+ From detected structure, generate rules:
51
+
52
+ ```typescript
53
+ // Rule format
54
+ interface ArchRule {
55
+ name: string; // "service-no-ui-import"
56
+ from: string; // Glob pattern: "src/services/**"
57
+ cannotImport: string[]; // ["src/components/**", "src/pages/**"]
58
+ canImport: string[]; // ["src/models/**", "src/utils/**"]
59
+ reason: string; // "Services must be UI-agnostic"
60
+ }
61
+ ```
62
+
63
+ **Default rules by stack:**
64
+
65
+ | Stack | Rule |
66
+ |-------|------|
67
+ | Next.js / React | `components/` cannot import from `pages/` or `app/` |
68
+ | Next.js / React | `lib/` cannot import from `components/` |
69
+ | NestJS | `*.service.ts` cannot import from `*.controller.ts` |
70
+ | NestJS | `*.module.ts` is the only valid cross-boundary import |
71
+ | General TS | `src/domain/` cannot import from `src/infra/` |
72
+ | General TS | No circular dependencies between top-level dirs |
73
+ | Python Django | `models.py` cannot import from `views.py` |
74
+ | Python FastAPI | `schemas/` cannot import from `routers/` |
75
+
76
+ ### Step 3: GENERATE — Create Test File
77
+
78
+ Output: `tests/arch-guard.test.ts` (or equivalent for stack)
79
+
80
+ ```typescript
81
+ /**
82
+ * Architecture Boundary Tests
83
+ * Generated by arch-guard skill
84
+ *
85
+ * These tests enforce architectural constraints mechanically.
86
+ * If a test fails, it means an import violates the intended architecture.
87
+ */
88
+ import { describe, it, expect } from 'vitest';
89
+ import fs from 'fs';
90
+ import path from 'path';
91
+
92
+ // Helper: extract imports from a file
93
+ function extractImports(filePath: string): string[] {
94
+ const content = fs.readFileSync(filePath, 'utf-8');
95
+ const importRegex = /(?:import|require)\s*\(?['"]([^'"]+)['"]\)?/g;
96
+ const imports: string[] = [];
97
+ let match;
98
+ while ((match = importRegex.exec(content)) !== null) {
99
+ imports.push(match[1]);
100
+ }
101
+ return imports;
102
+ }
103
+
104
+ // Helper: resolve relative import to absolute path
105
+ function resolveImport(fromFile: string, importPath: string): string {
106
+ if (importPath.startsWith('.')) {
107
+ return path.resolve(path.dirname(fromFile), importPath);
108
+ }
109
+ return importPath; // external package
110
+ }
111
+
112
+ // Helper: glob files matching pattern
113
+ function globFiles(pattern: string, baseDir: string): string[] {
114
+ // Use fast-glob or manual recursive scan
115
+ // Implementation depends on available dependencies
116
+ }
117
+
118
+ describe('Architecture Boundaries', () => {
119
+ // GENERATED RULES GO HERE
120
+ // Each rule becomes a test case:
121
+
122
+ it('services cannot import UI components', () => {
123
+ const serviceFiles = globFiles('src/services/**/*.ts', process.cwd());
124
+ const violations: string[] = [];
125
+
126
+ for (const file of serviceFiles) {
127
+ const imports = extractImports(file);
128
+ for (const imp of imports) {
129
+ const resolved = resolveImport(file, imp);
130
+ if (resolved.includes('/components/') || resolved.includes('/pages/')) {
131
+ violations.push(`${file} imports ${imp}`);
132
+ }
133
+ }
134
+ }
135
+
136
+ expect(violations).toEqual([]);
137
+ });
138
+ });
139
+ ```
140
+
141
+ ### Step 4: VERIFY — Run and Fix
142
+
143
+ 1. Run the generated tests: `npx vitest run tests/arch-guard.test.ts`
144
+ 2. If violations found:
145
+ - Report each violation with file:line
146
+ - Suggest fix (move shared code to appropriate layer)
147
+ - Do NOT auto-fix — violations need human review
148
+
149
+ ## Output Files
150
+
151
+ | File | Purpose |
152
+ |------|---------|
153
+ | `tests/arch-guard.test.ts` | Executable boundary tests |
154
+ | `.claude/vibe/arch-rules.json` | Machine-readable rules (for CI) |
155
+
156
+ ## Customization
157
+
158
+ Users can add custom rules to `.claude/vibe/arch-rules.json`:
159
+
160
+ ```json
161
+ {
162
+ "rules": [
163
+ {
164
+ "name": "no-direct-db-in-handlers",
165
+ "from": "src/handlers/**",
166
+ "cannotImport": ["src/db/**"],
167
+ "reason": "Handlers must use services, not direct DB access"
168
+ }
169
+ ]
170
+ }
171
+ ```
172
+
173
+ The test generator reads this file and adds custom rules to the test suite.
174
+
175
+ ## Integration
176
+
177
+ - `vibe init` → auto-detect and generate initial arch-guard tests
178
+ - `vibe update` → refresh rules if directory structure changed
179
+ - Pre-commit hook → run arch-guard tests before commit
180
+ - `/vibe.review` → architecture-reviewer checks against arch-rules.json
@@ -1,146 +1,146 @@
1
- ---
2
- name: brand-assets
3
- description: "Auto-generate app icons and favicons from SPEC brand information using Gemini Image API"
4
- triggers: [icon, favicon, brand, logo, app icon, branding, assets]
5
- priority: 65
6
- ---
7
- # Brand Assets Generation Skill
8
-
9
- Auto-generate app icons and favicons based on SPEC brand information.
10
-
11
- ## When to Use
12
-
13
- - First-time project setup with `/vibe.run`
14
- - When SPEC contains brand/design information
15
- - When Gemini API key is configured
16
-
17
- ## Prerequisites
18
-
19
- - Gemini API key configured (`vibe gemini auth`)
20
- - SPEC with brand context (app name, colors, style)
21
-
22
- ## Generated Assets
23
-
24
- ### Web
25
- - `favicon.ico` (16x16, 32x32, 48x48)
26
- - `favicon-16x16.png`
27
- - `favicon-32x32.png`
28
- - `apple-touch-icon.png` (180x180)
29
- - `android-chrome-192x192.png`
30
- - `android-chrome-512x512.png`
31
-
32
- ### Mobile (if applicable)
33
- - iOS: `AppIcon.appiconset/` with all sizes
34
- - Android: `mipmap-*/` adaptive icons
35
-
36
- ## SPEC Brand Section
37
-
38
- For best results, include brand info in your SPEC:
39
-
40
- ```yaml
41
- <context>
42
- Brand:
43
- - App Name: MyApp
44
- - Primary Color: #2F6BFF
45
- - Style: Modern, minimal, flat design
46
- - Icon Concept: Abstract geometric shape representing connectivity
47
- </context>
48
- ```
49
-
50
- ## Generation Flow
51
-
52
- ```
53
- SPEC Brand Info
54
- |
55
- v
56
- Extract: name, colors, style keywords
57
- |
58
- v
59
- Generate Prompt: "App icon for [name], [style], [colors]..."
60
- |
61
- v
62
- Gemini Image API (gemini-2.5-flash-image)
63
- |
64
- v
65
- Resize & Convert: All platform sizes
66
- |
67
- v
68
- Save to: public/ or assets/
69
- ```
70
-
71
- ## Auto-Trigger Conditions
72
-
73
- 1. First `/vibe.run` execution (no existing icons)
74
- 2. SPEC contains brand/design context
75
- 3. Gemini API key is available
76
- 4. `--generate-icons` flag passed
77
-
78
- ## Skip Conditions
79
-
80
- - Icons already exist (unless `--regenerate-icons`)
81
- - No brand info in SPEC
82
- - Gemini API not configured
83
-
84
- ## Prompt Template
85
-
86
- ```
87
- Create a modern app icon for "[APP_NAME]".
88
-
89
- Style: [STYLE_KEYWORDS]
90
- Primary color: [PRIMARY_COLOR]
91
- Design: Minimalist, professional, suitable for mobile app
92
- Format: Square, clean edges, simple recognizable shape
93
- Background: Solid color or subtle gradient
94
-
95
- Requirements:
96
- - Works at small sizes (16x16 to 512x512)
97
- - No text or letters
98
- - Single focal element
99
- - High contrast for visibility
100
- ```
101
-
102
- ## Manual Usage
103
-
104
- ```bash
105
- # [LLM_SCRIPT] = {{CORE_PATH}}/hooks/scripts/llm-orchestrate.js
106
- # Generate via llm-orchestrate (when Gemini configured)
107
- node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, square format 1:1, simple recognizable design, works well at small sizes, no text or letters, solid or gradient background, modern minimalist" --output "./public/app-icon.png"
108
- ```
109
-
110
- ## Integration with /vibe.run
111
-
112
- During Phase 1 (Setup), if brand assets don't exist:
113
-
114
- 1. Parse SPEC for brand context
115
- 2. Generate icon via Gemini Image API
116
- 3. Create all size variants
117
- 4. Place in appropriate directories
118
- 5. Update manifest files if needed
119
-
120
- ## Fallback Strategy
121
-
122
- If Gemini Image fails:
123
- 1. Generate text-based monogram icon (first letter)
124
- 2. Use project primary color as background
125
- 3. Create simple geometric placeholder
126
-
127
- ## Output Structure
128
-
129
- ```
130
- public/
131
- favicon.ico
132
- favicon-16x16.png
133
- favicon-32x32.png
134
- apple-touch-icon.png
135
- android-chrome-192x192.png
136
- android-chrome-512x512.png
137
- site.webmanifest
138
- ```
139
-
140
- ## Done Criteria (K4)
141
-
142
- - [ ] All required sizes generated (16x16 through 512x512)
143
- - [ ] Icons work at small sizes (recognizable at 16x16)
144
- - [ ] No text/letters in icon (illegible at small sizes)
145
- - [ ] `site.webmanifest` updated with icon paths
146
- - [ ] Fallback generated if Gemini API unavailable
1
+ ---
2
+ name: brand-assets
3
+ description: "Auto-generate app icons and favicons from SPEC brand information using Gemini Image API"
4
+ triggers: [icon, favicon, brand, logo, app icon, branding, assets]
5
+ priority: 65
6
+ ---
7
+ # Brand Assets Generation Skill
8
+
9
+ Auto-generate app icons and favicons based on SPEC brand information.
10
+
11
+ ## When to Use
12
+
13
+ - First-time project setup with `/vibe.run`
14
+ - When SPEC contains brand/design information
15
+ - When Gemini API key is configured
16
+
17
+ ## Prerequisites
18
+
19
+ - Gemini API key configured (`vibe gemini auth`)
20
+ - SPEC with brand context (app name, colors, style)
21
+
22
+ ## Generated Assets
23
+
24
+ ### Web
25
+ - `favicon.ico` (16x16, 32x32, 48x48)
26
+ - `favicon-16x16.png`
27
+ - `favicon-32x32.png`
28
+ - `apple-touch-icon.png` (180x180)
29
+ - `android-chrome-192x192.png`
30
+ - `android-chrome-512x512.png`
31
+
32
+ ### Mobile (if applicable)
33
+ - iOS: `AppIcon.appiconset/` with all sizes
34
+ - Android: `mipmap-*/` adaptive icons
35
+
36
+ ## SPEC Brand Section
37
+
38
+ For best results, include brand info in your SPEC:
39
+
40
+ ```yaml
41
+ <context>
42
+ Brand:
43
+ - App Name: MyApp
44
+ - Primary Color: #2F6BFF
45
+ - Style: Modern, minimal, flat design
46
+ - Icon Concept: Abstract geometric shape representing connectivity
47
+ </context>
48
+ ```
49
+
50
+ ## Generation Flow
51
+
52
+ ```
53
+ SPEC Brand Info
54
+ |
55
+ v
56
+ Extract: name, colors, style keywords
57
+ |
58
+ v
59
+ Generate Prompt: "App icon for [name], [style], [colors]..."
60
+ |
61
+ v
62
+ Gemini Image API (gemini-2.5-flash-image)
63
+ |
64
+ v
65
+ Resize & Convert: All platform sizes
66
+ |
67
+ v
68
+ Save to: public/ or assets/
69
+ ```
70
+
71
+ ## Auto-Trigger Conditions
72
+
73
+ 1. First `/vibe.run` execution (no existing icons)
74
+ 2. SPEC contains brand/design context
75
+ 3. Gemini API key is available
76
+ 4. `--generate-icons` flag passed
77
+
78
+ ## Skip Conditions
79
+
80
+ - Icons already exist (unless `--regenerate-icons`)
81
+ - No brand info in SPEC
82
+ - Gemini API not configured
83
+
84
+ ## Prompt Template
85
+
86
+ ```
87
+ Create a modern app icon for "[APP_NAME]".
88
+
89
+ Style: [STYLE_KEYWORDS]
90
+ Primary color: [PRIMARY_COLOR]
91
+ Design: Minimalist, professional, suitable for mobile app
92
+ Format: Square, clean edges, simple recognizable shape
93
+ Background: Solid color or subtle gradient
94
+
95
+ Requirements:
96
+ - Works at small sizes (16x16 to 512x512)
97
+ - No text or letters
98
+ - Single focal element
99
+ - High contrast for visibility
100
+ ```
101
+
102
+ ## Manual Usage
103
+
104
+ ```bash
105
+ # [LLM_SCRIPT] = {{CORE_PATH}}/hooks/scripts/llm-orchestrate.js
106
+ # Generate via llm-orchestrate (when Gemini configured)
107
+ node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, square format 1:1, simple recognizable design, works well at small sizes, no text or letters, solid or gradient background, modern minimalist" --output "./public/app-icon.png"
108
+ ```
109
+
110
+ ## Integration with /vibe.run
111
+
112
+ During Phase 1 (Setup), if brand assets don't exist:
113
+
114
+ 1. Parse SPEC for brand context
115
+ 2. Generate icon via Gemini Image API
116
+ 3. Create all size variants
117
+ 4. Place in appropriate directories
118
+ 5. Update manifest files if needed
119
+
120
+ ## Fallback Strategy
121
+
122
+ If Gemini Image fails:
123
+ 1. Generate text-based monogram icon (first letter)
124
+ 2. Use project primary color as background
125
+ 3. Create simple geometric placeholder
126
+
127
+ ## Output Structure
128
+
129
+ ```
130
+ public/
131
+ favicon.ico
132
+ favicon-16x16.png
133
+ favicon-32x32.png
134
+ apple-touch-icon.png
135
+ android-chrome-192x192.png
136
+ android-chrome-512x512.png
137
+ site.webmanifest
138
+ ```
139
+
140
+ ## Done Criteria (K4)
141
+
142
+ - [ ] All required sizes generated (16x16 through 512x512)
143
+ - [ ] Icons work at small sizes (recognizable at 16x16)
144
+ - [ ] No text/letters in icon (illegible at small sizes)
145
+ - [ ] `site.webmanifest` updated with icon paths
146
+ - [ ] Fallback generated if Gemini API unavailable