@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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=architecture.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/architecture.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,207 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { globSync } from 'glob';
5
+ const SRC_DIR = path.resolve(__dirname, '..');
6
+ /** Extract all static and dynamic import paths from a TypeScript source file */
7
+ function extractImports(filePath) {
8
+ const content = fs.readFileSync(filePath, 'utf-8');
9
+ const results = [];
10
+ const staticRegex = /(?:import|export)\s+(?:(?:type\s+)?(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"]([^'"]+)['"]/g;
11
+ const dynamicRegex = /import\(\s*['"]([^'"]+)['"]\s*\)/g;
12
+ let match;
13
+ while ((match = staticRegex.exec(content)) !== null) {
14
+ results.push(match[1]);
15
+ }
16
+ while ((match = dynamicRegex.exec(content)) !== null) {
17
+ results.push(match[1]);
18
+ }
19
+ return results.filter((p) => p.startsWith('.') || p.startsWith('/'));
20
+ }
21
+ /**
22
+ * Check whether every import of a given path in a file is type-only.
23
+ * Returns true only if all matching import statements use `import type`.
24
+ */
25
+ function importsAreTypeOnly(filePath, importPath) {
26
+ const content = fs.readFileSync(filePath, 'utf-8');
27
+ const lines = content.split('\n');
28
+ for (const line of lines) {
29
+ if (!line.includes(importPath))
30
+ continue;
31
+ // Must match an import statement containing this path
32
+ if (!/(?:import|export)/.test(line))
33
+ continue;
34
+ // If the line is NOT a type-only import, return false
35
+ if (/^\s*import\s+(?!type[\s{])/.test(line)) {
36
+ return false;
37
+ }
38
+ }
39
+ return true;
40
+ }
41
+ /** Resolve a relative import path to a layer category */
42
+ function categorizeImport(fromFile, importPath) {
43
+ const fromDir = path.dirname(fromFile);
44
+ // Strip .js extension for resolution
45
+ const cleanImport = importPath.replace(/\.js$/, '');
46
+ const resolved = path.resolve(fromDir, cleanImport);
47
+ const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
48
+ if (relative.startsWith('cli/'))
49
+ return 'cli';
50
+ if (relative.startsWith('tools/'))
51
+ return 'tools';
52
+ if (relative.startsWith('infra/orchestrator/') || relative.startsWith('infra/lib/orchestrator'))
53
+ return 'infra/orchestrator';
54
+ if (relative.startsWith('infra/lib/') || relative.startsWith('infra/'))
55
+ return 'infra/lib';
56
+ if (relative.startsWith('test-helpers/'))
57
+ return 'test-helpers';
58
+ return null;
59
+ }
60
+ /** Collect all non-test .ts files in a layer directory (if it exists) */
61
+ function filesInLayer(layerRelPath) {
62
+ const layerDir = path.join(SRC_DIR, layerRelPath);
63
+ if (!fs.existsSync(layerDir))
64
+ return [];
65
+ return globSync('**/*.ts', { cwd: layerDir, absolute: true }).filter((f) => !f.includes('__tests__') && !f.endsWith('.test.ts') && !f.endsWith('.spec.ts'));
66
+ }
67
+ /** Build a layer-level dependency graph from all source files */
68
+ function buildLayerGraph() {
69
+ const layers = ['cli', 'tools', 'infra/lib', 'infra/orchestrator', 'test-helpers'];
70
+ const graph = new Map();
71
+ for (const layer of layers) {
72
+ graph.set(layer, new Set());
73
+ }
74
+ const layerDirMap = {
75
+ 'cli': 'cli',
76
+ 'tools': 'tools',
77
+ 'infra/lib': 'infra/lib',
78
+ 'infra/orchestrator': 'infra/orchestrator',
79
+ 'test-helpers': 'test-helpers',
80
+ };
81
+ for (const [layer, relDir] of Object.entries(layerDirMap)) {
82
+ const files = filesInLayer(relDir);
83
+ for (const file of files) {
84
+ const imports = extractImports(file);
85
+ for (const imp of imports) {
86
+ const target = categorizeImport(file, imp);
87
+ if (target === null || target === layer)
88
+ continue;
89
+ // infra/lib may use type-only imports from cli/types — skip that edge
90
+ if (layer === 'infra/lib' && target === 'cli') {
91
+ const resolved = path.resolve(path.dirname(file), imp.replace(/\.js$/, ''));
92
+ const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
93
+ if (relative.startsWith('cli/types') && importsAreTypeOnly(file, imp)) {
94
+ continue;
95
+ }
96
+ }
97
+ graph.get(layer).add(target);
98
+ }
99
+ }
100
+ }
101
+ return graph;
102
+ }
103
+ /** Detect cycles in a directed graph using DFS; returns cycle path or null */
104
+ function findCycle(graph) {
105
+ const visited = new Set();
106
+ const stack = new Set();
107
+ const stackArr = [];
108
+ function dfs(node) {
109
+ visited.add(node);
110
+ stack.add(node);
111
+ stackArr.push(node);
112
+ for (const neighbor of graph.get(node) ?? []) {
113
+ if (!visited.has(neighbor)) {
114
+ const cycle = dfs(neighbor);
115
+ if (cycle)
116
+ return cycle;
117
+ }
118
+ else if (stack.has(neighbor)) {
119
+ const cycleStart = stackArr.indexOf(neighbor);
120
+ return [...stackArr.slice(cycleStart), neighbor];
121
+ }
122
+ }
123
+ stack.delete(node);
124
+ stackArr.pop();
125
+ return null;
126
+ }
127
+ for (const node of graph.keys()) {
128
+ if (!visited.has(node)) {
129
+ const cycle = dfs(node);
130
+ if (cycle)
131
+ return cycle;
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // Helpers for violation collection
138
+ // ---------------------------------------------------------------------------
139
+ function collectViolations(layerRelPath, forbiddenLayer) {
140
+ const violations = [];
141
+ const files = filesInLayer(layerRelPath);
142
+ for (const file of files) {
143
+ const imports = extractImports(file);
144
+ for (const imp of imports) {
145
+ const target = categorizeImport(file, imp);
146
+ if (target === forbiddenLayer) {
147
+ violations.push(`${path.relative(SRC_DIR, file)} → ${imp}`);
148
+ }
149
+ }
150
+ }
151
+ return violations;
152
+ }
153
+ function collectViolationsExceptTypeOnly(layerRelPath, forbiddenLayer, allowedTypesPath) {
154
+ const violations = [];
155
+ const files = filesInLayer(layerRelPath);
156
+ for (const file of files) {
157
+ const imports = extractImports(file);
158
+ for (const imp of imports) {
159
+ const target = categorizeImport(file, imp);
160
+ if (target !== forbiddenLayer)
161
+ continue;
162
+ // Allow type-only imports from cli/types
163
+ const resolved = path.resolve(path.dirname(file), imp.replace(/\.js$/, ''));
164
+ const relative = path.relative(SRC_DIR, resolved).replace(/\\/g, '/');
165
+ if (relative.startsWith(allowedTypesPath) && importsAreTypeOnly(file, imp)) {
166
+ continue;
167
+ }
168
+ violations.push(`${path.relative(SRC_DIR, file)} → ${imp}`);
169
+ }
170
+ }
171
+ return violations;
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Tests
175
+ // ---------------------------------------------------------------------------
176
+ describe('Architecture boundary tests', () => {
177
+ it('tools/ never imports from cli/', () => {
178
+ const violations = collectViolations('tools', 'cli');
179
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
180
+ });
181
+ it('tools/ never imports from infra/orchestrator/', () => {
182
+ const violations = collectViolations('tools', 'infra/orchestrator');
183
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
184
+ });
185
+ it('infra/lib/ never imports from cli/ (except type-only from cli/types)', () => {
186
+ const violations = collectViolationsExceptTypeOnly('infra/lib', 'cli', 'cli/types');
187
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
188
+ });
189
+ it('infra/lib/ never imports from tools/', () => {
190
+ const violations = collectViolations('infra/lib', 'tools');
191
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
192
+ });
193
+ it('infra/orchestrator/ never imports from cli/', () => {
194
+ const violations = collectViolations('infra/orchestrator', 'cli');
195
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
196
+ });
197
+ it('infra/orchestrator/ never imports from tools/', () => {
198
+ const violations = collectViolations('infra/orchestrator', 'tools');
199
+ expect(violations, `Forbidden imports found:\n${violations.join('\n')}`).toHaveLength(0);
200
+ });
201
+ it('no circular module dependencies between layers', () => {
202
+ const graph = buildLayerGraph();
203
+ const cycle = findCycle(graph);
204
+ expect(cycle, `Circular dependency detected: ${cycle?.join(' → ')}`).toBeNull();
205
+ });
206
+ });
207
+ //# sourceMappingURL=architecture.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture.test.js","sourceRoot":"","sources":["../../src/__tests__/architecture.test.ts"],"names":[],"mappings":"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"}
package/dist/cli/auth.js CHANGED
@@ -80,8 +80,8 @@ export function formatClaudeCodeStatus(status) {
80
80
  */
81
81
  export function formatAuthMethods(auths, cliInstalled) {
82
82
  const parts = [];
83
- if (cliInstalled !== undefined) {
84
- parts.push(cliInstalled ? '✓ CLI' : '✗ CLI');
83
+ if (cliInstalled !== undefined && cliInstalled) {
84
+ parts.push('✓ CLI');
85
85
  }
86
86
  parts.push(...auths.map(a => {
87
87
  const icon = a.valid ? '✓' : '⚠';
@@ -89,7 +89,7 @@ export function formatAuthMethods(auths, cliInstalled) {
89
89
  return `${icon} ${method}`;
90
90
  }));
91
91
  if (parts.length === 0)
92
- return ' Not configured';
92
+ return ' Not connected';
93
93
  return parts.join(', ');
94
94
  }
95
95
  export function formatLLMStatus(claudeStatus) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -56,64 +56,64 @@ export function setupCollaboratorAutoInstall(projectRoot) {
56
56
  fs.mkdirSync(coreDir, { recursive: true });
57
57
  }
58
58
  if (!fs.existsSync(setupShPath)) {
59
- const setupScript = `#!/bin/bash
60
- # Core collaborator auto-install script
61
- # Usage: ./.claude/vibe/setup.sh
62
-
63
- set -e
64
-
65
- echo "🔧 Checking Core installation..."
66
-
67
- # Check npm/npx
68
- if ! command -v npx &> /dev/null; then
69
- echo "❌ Node.js/npm is not installed."
70
- echo " Please install from https://nodejs.org"
71
- exit 1
72
- fi
73
-
74
- # Check core installation and update
75
- if command -v vibe &> /dev/null; then
76
- echo "✅ Core is already installed."
77
- vibe update --silent
78
- echo "✅ Core updated!"
79
- else
80
- echo "📦 Installing Core..."
81
- npm install -g @su-record/vibe
82
- vibe update --silent
83
- echo "✅ Core installed and configured!"
84
- fi
85
-
86
- echo ""
87
- echo "Get started with:"
88
- echo " /vibe.spec \\"feature\\" Create SPEC"
89
- echo " /vibe.run \\"feature\\" Implement"
59
+ const setupScript = `#!/bin/bash
60
+ # Core collaborator auto-install script
61
+ # Usage: ./.claude/vibe/setup.sh
62
+
63
+ set -e
64
+
65
+ echo "🔧 Checking Core installation..."
66
+
67
+ # Check npm/npx
68
+ if ! command -v npx &> /dev/null; then
69
+ echo "❌ Node.js/npm is not installed."
70
+ echo " Please install from https://nodejs.org"
71
+ exit 1
72
+ fi
73
+
74
+ # Check core installation and update
75
+ if command -v vibe &> /dev/null; then
76
+ echo "✅ Core is already installed."
77
+ vibe update --silent
78
+ echo "✅ Core updated!"
79
+ else
80
+ echo "📦 Installing Core..."
81
+ npm install -g @su-record/vibe
82
+ vibe update --silent
83
+ echo "✅ Core installed and configured!"
84
+ fi
85
+
86
+ echo ""
87
+ echo "Get started with:"
88
+ echo " /vibe.spec \\"feature\\" Create SPEC"
89
+ echo " /vibe.run \\"feature\\" Implement"
90
90
  `;
91
91
  fs.writeFileSync(setupShPath, setupScript);
92
92
  fs.chmodSync(setupShPath, '755');
93
93
  }
94
94
  // 3. README.md에 협업자 안내 추가
95
95
  const readmePath = path.join(projectRoot, 'README.md');
96
- const coreSetupSection = `
97
- ## Core Setup (AI Coding)
98
-
99
- This project uses [VIBE](https://github.com/su-record/vibe) AI coding framework.
100
-
101
- ### Collaborator Install
102
-
103
- \`\`\`bash
104
- # Global install (recommended)
105
- npm install -g @su-record/vibe
106
- vibe update
107
-
108
- # Or use vibe init to setup
109
- vibe init
110
- \`\`\`
111
-
112
- ### Usage
113
-
114
- Use slash commands in Claude Code:
115
- - \`/vibe.spec "feature"\` - Create SPEC document
116
- - \`/vibe.run "feature"\` - Execute implementation
96
+ const coreSetupSection = `
97
+ ## Core Setup (AI Coding)
98
+
99
+ This project uses [VIBE](https://github.com/su-record/vibe) AI coding framework.
100
+
101
+ ### Collaborator Install
102
+
103
+ \`\`\`bash
104
+ # Global install (recommended)
105
+ npm install -g @su-record/vibe
106
+ vibe update
107
+
108
+ # Or use vibe init to setup
109
+ vibe init
110
+ \`\`\`
111
+
112
+ ### Usage
113
+
114
+ Use slash commands in Claude Code:
115
+ - \`/vibe.spec "feature"\` - Create SPEC document
116
+ - \`/vibe.run "feature"\` - Execute implementation
117
117
  `;
118
118
  if (fs.existsSync(readmePath)) {
119
119
  const readme = fs.readFileSync(readmePath, 'utf-8');
@@ -193,18 +193,18 @@ export function evolutionGaps() {
193
193
  }
194
194
  }
195
195
  export function evolutionHelp() {
196
- console.log(`
197
- Evolution Commands:
198
- vibe evolution status Show overall status
199
- vibe evolution list List all generations
200
- vibe evolution approve <id> Approve draft → testing
201
- vibe evolution reject <id> Reject draft
202
- vibe evolution disable <id> Disable a generation
203
- vibe evolution rollback <id> Rollback to previous version
204
- vibe evolution disable-all Emergency disable all
205
- vibe evolution run Manual evolution cycle
206
- vibe evolution insights Show confirmed insights
207
- vibe evolution gaps Show detected skill gaps
196
+ console.log(`
197
+ Evolution Commands:
198
+ vibe evolution status Show overall status
199
+ vibe evolution list List all generations
200
+ vibe evolution approve <id> Approve draft → testing
201
+ vibe evolution reject <id> Reject draft
202
+ vibe evolution disable <id> Disable a generation
203
+ vibe evolution rollback <id> Rollback to previous version
204
+ vibe evolution disable-all Emergency disable all
205
+ vibe evolution run Manual evolution cycle
206
+ vibe evolution insights Show confirmed insights
207
+ vibe evolution gaps Show detected skill gaps
208
208
  `);
209
209
  }
210
210
  //# sourceMappingURL=evolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAqC/B;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA4EjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAqC/B;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAsCjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
@@ -10,41 +10,41 @@ import { detectCodexCli, detectGeminiCli } from '../utils/cli-detector.js';
10
10
  * 도움말 표시
11
11
  */
12
12
  export function showHelp() {
13
- console.log(`
14
- VIBE - Personalized AI Agent (Claude Code exclusive)
15
-
16
- Commands:
17
- vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
18
- vibe init [project] 프로젝트 초기화
19
- vibe update 설정 업데이트
20
- vibe upgrade 최신 버전으로 업그레이드
21
- vibe remove 프로젝트에서 제거
22
- vibe status 전체 상태 확인
23
-
24
- LLM:
25
- vibe claude <cmd> Claude (key, status, logout)
26
- vibe gpt <cmd> GPT (auth, key, status, logout)
27
- vibe gemini <cmd> Gemini (auth, key, status, logout)
28
- vibe env import [path] .env → ~/.vibe/config.json 가져오기
29
-
30
- Skills:
31
- vibe skills add <pkg> Install skill from skills.sh
32
-
33
- Channels:
34
- vibe telegram <cmd> Telegram (setup, chat, status)
35
- vibe slack <cmd> Slack (setup, channel, status)
36
-
37
- Slash Commands (Claude Code):
38
- /vibe.spec "feature" SPEC 작성 + 리서치
39
- /vibe.run "feature" 구현 실행
40
- /vibe.verify "feature" BDD 검증
41
- /vibe.review 병렬 코드 리뷰 (13+ agents)
42
- /vibe.reason "problem" 체계적 추론
43
- /vibe.analyze 프로젝트 분석
44
- /vibe.trace "feature" 요구사항 추적 매트릭스
45
- /vibe.utils 유틸리티 (--e2e, --diagram, --continue)
46
-
47
- Docs: https://github.com/su-record/vibe
13
+ console.log(`
14
+ VIBE - Personalized AI Agent (Claude Code exclusive)
15
+
16
+ Commands:
17
+ vibe setup 셋업 위자드 (인증, 채널, 설정 한번에)
18
+ vibe init [project] 프로젝트 초기화
19
+ vibe update 설정 업데이트
20
+ vibe upgrade 최신 버전으로 업그레이드
21
+ vibe remove 프로젝트에서 제거
22
+ vibe status 전체 상태 확인
23
+
24
+ LLM:
25
+ vibe claude <cmd> Claude (key, status, logout)
26
+ vibe gpt <cmd> GPT (auth, key, status, logout)
27
+ vibe gemini <cmd> Gemini (auth, key, status, logout)
28
+ vibe env import [path] .env → ~/.vibe/config.json 가져오기
29
+
30
+ Skills:
31
+ vibe skills add <pkg> Install skill from skills.sh
32
+
33
+ Channels:
34
+ vibe telegram <cmd> Telegram (setup, chat, status)
35
+ vibe slack <cmd> Slack (setup, channel, status)
36
+
37
+ Slash Commands (Claude Code):
38
+ /vibe.spec "feature" SPEC 작성 + 리서치
39
+ /vibe.run "feature" 구현 실행
40
+ /vibe.verify "feature" BDD 검증
41
+ /vibe.review 병렬 코드 리뷰 (13+ agents)
42
+ /vibe.reason "problem" 체계적 추론
43
+ /vibe.analyze 프로젝트 분석
44
+ /vibe.trace "feature" 요구사항 추적 매트릭스
45
+ /vibe.utils 유틸리티 (--e2e, --diagram, --continue)
46
+
47
+ Docs: https://github.com/su-record/vibe
48
48
  `);
49
49
  }
50
50
  /**
@@ -70,52 +70,16 @@ export function showStatus() {
70
70
  const projectStatus = isCoreProject
71
71
  ? `✅ ${projectRoot}`
72
72
  : `⬚ Not a core project (run: vibe init)`;
73
- // Autonomy / Sentinel 상태 (config.json에서 읽기)
74
- const autonomyCfg = config.autonomy;
75
- const sentinelCfg = config.sentinel;
76
- const autonomyMode = autonomyCfg?.mode || 'suggest';
77
- const sentinelOn = sentinelCfg?.enabled !== false;
78
- const proactiveCfg = autonomyCfg?.proactive;
79
- const proactiveOn = proactiveCfg?.enabled !== false;
80
- // DB 통계 (가능하면)
81
- let dbStats = '';
82
- try {
83
- const dbPath = path.join(coreDir, 'memory.db');
84
- if (fs.existsSync(dbPath)) {
85
- // eslint-disable-next-line @typescript-eslint/no-require-imports
86
- const Database = require('better-sqlite3');
87
- const db = new Database(dbPath, { readonly: true });
88
- const last24h = new Date(Date.now() - 86_400_000).toISOString();
89
- let totalActions = 0;
90
- let blockedActions = 0;
91
- try {
92
- totalActions = db.prepare('SELECT COUNT(*) as c FROM audit_events WHERE createdAt >= ?').get(last24h)?.c ?? 0;
93
- blockedActions = db.prepare("SELECT COUNT(*) as c FROM audit_events WHERE createdAt >= ? AND outcome = 'blocked'").get(last24h)?.c ?? 0;
94
- }
95
- catch { /* table may not exist */ }
96
- if (totalActions > 0) {
97
- dbStats = ` Last 24h: ${totalActions} actions (${blockedActions} blocked)\n`;
98
- }
99
- db.close();
100
- }
101
- }
102
- catch { /* DB not available */ }
103
- console.log(`
104
- VIBE Status (v${packageJson.version})
105
-
106
- Project: ${projectStatus}
107
- ${isCoreProject ? `Language: ${config.language || 'ko'}` : ''}
108
-
109
- LLM:
110
- Claude ${claudeStatusText}
111
- GPT ${gptStatusText}
112
- Gemini ${geminiStatusText}
113
-
114
- Agent:
115
- Autonomy ${autonomyMode} mode
116
- Sentinel ${sentinelOn ? 'ON' : 'OFF'}
117
- Proactive ${proactiveOn ? 'ON' : 'OFF'}
118
- ${dbStats}
73
+ console.log(`
74
+ VIBE Status (v${packageJson.version})
75
+
76
+ Project: ${projectStatus}
77
+ ${isCoreProject ? `Language: ${config.language || 'ko'}` : ''}
78
+
79
+ LLM:
80
+ Claude ${claudeStatusText}
81
+ GPT ${gptStatusText}
82
+ Gemini ${geminiStatusText}
119
83
  `);
120
84
  }
121
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,MAAM,GAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClF,IAAI,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEnF,UAAU;IACV,MAAM,aAAa,GAAG,aAAa;QACjC,CAAC,CAAC,KAAK,WAAW,EAAE;QACpB,CAAC,CAAC,uCAAuC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC;gBACE,WAAW,CAAC,OAAO;;WAExB,aAAa;EACtB,aAAa,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;oBAGzC,gBAAgB;oBAChB,aAAa;oBACb,gBAAgB;GACjC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -264,11 +264,11 @@ export async function init(projectName) {
264
264
  const packageJson = getPackageJson();
265
265
  const authStatus = getLLMAuthStatus();
266
266
  const claudeStatus = getClaudeCodeStatus(true);
267
- log(`✅ vibe initialized (v${packageJson.version})
268
- ${formatLLMStatus(claudeStatus)}
269
- 📦 Context7 plugin (recommended): /plugin install context7
270
-
271
- Next: ${isNewProject ? `cd ${projectName} && ` : ''}/vibe.spec "feature"
267
+ log(`✅ vibe initialized (v${packageJson.version})
268
+ ${formatLLMStatus(claudeStatus)}
269
+ 📦 Context7 plugin (recommended): /plugin install context7
270
+
271
+ Next: ${isNewProject ? `cd ${projectName} && ` : ''}/vibe.spec "feature"
272
272
  `);
273
273
  }
274
274
  catch (error) {
@@ -123,20 +123,20 @@ export function remove() {
123
123
  console.log(` ✅ Cursor rules template removed (${removedRules})\n`);
124
124
  }
125
125
  }
126
- console.log(`
127
- ✅ vibe removed!
128
-
129
- Removed:
130
- - MCP server (context7)
131
- - .claude/vibe/ folder
132
- - Slash commands (7)
133
- - Subagents (5)
134
- - Hooks settings
135
- - Cursor agents (12)
136
- - Cursor skills (7)
137
- - Cursor rules template (5)
138
-
139
- To reinstall: vibe init
126
+ console.log(`
127
+ ✅ vibe removed!
128
+
129
+ Removed:
130
+ - MCP server (context7)
131
+ - .claude/vibe/ folder
132
+ - Slash commands (7)
133
+ - Subagents (5)
134
+ - Hooks settings
135
+ - Cursor agents (12)
136
+ - Cursor skills (7)
137
+ - Cursor rules template (5)
138
+
139
+ To reinstall: vibe init
140
140
  `);
141
141
  }
142
142
  //# sourceMappingURL=remove.js.map