@su-record/vibe 2.8.52 → 2.8.53

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 (417) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +294 -294
  13. package/agents/event/event-comms.md +78 -78
  14. package/agents/event/event-content.md +68 -68
  15. package/agents/event/event-image.md +95 -95
  16. package/agents/event/event-ops.md +84 -84
  17. package/agents/event/event-scheduler.md +69 -69
  18. package/agents/event/event-speaker.md +86 -86
  19. package/agents/explorer-low.md +42 -42
  20. package/agents/explorer-medium.md +59 -59
  21. package/agents/explorer.md +48 -48
  22. package/agents/implementer-low.md +43 -43
  23. package/agents/implementer-medium.md +52 -52
  24. package/agents/implementer.md +54 -54
  25. package/agents/junior-mentor.md +141 -141
  26. package/agents/planning/requirements-analyst.md +84 -84
  27. package/agents/planning/ux-advisor.md +83 -83
  28. package/agents/qa/acceptance-tester.md +86 -86
  29. package/agents/qa/edge-case-finder.md +93 -93
  30. package/agents/qa/qa-coordinator.md +131 -131
  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 +102 -102
  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.docs.md +32 -32
  62. package/commands/vibe.event.md +163 -163
  63. package/commands/vibe.figma.md +69 -69
  64. package/commands/vibe.review.md +686 -686
  65. package/commands/vibe.run.md +2276 -2276
  66. package/commands/vibe.spec.md +1195 -1195
  67. package/commands/vibe.spec.review.md +609 -609
  68. package/commands/vibe.trace.md +259 -259
  69. package/commands/vibe.utils.md +413 -413
  70. package/commands/vibe.verify.md +510 -510
  71. package/dist/cli/collaborator.js +52 -52
  72. package/dist/cli/commands/config.js +9 -9
  73. package/dist/cli/commands/evolution.js +12 -12
  74. package/dist/cli/commands/figma.js +20 -20
  75. package/dist/cli/commands/info.js +53 -53
  76. package/dist/cli/commands/init.js +5 -5
  77. package/dist/cli/commands/remove.js +14 -14
  78. package/dist/cli/commands/sentinel.js +27 -27
  79. package/dist/cli/commands/skills.js +5 -5
  80. package/dist/cli/commands/slack.js +10 -10
  81. package/dist/cli/commands/stats.js +6 -6
  82. package/dist/cli/commands/telegram.js +12 -12
  83. package/dist/cli/detect.js +32 -32
  84. package/dist/cli/index.js +51 -51
  85. package/dist/cli/llm/claude-commands.js +16 -16
  86. package/dist/cli/llm/config.js +18 -18
  87. package/dist/cli/llm/gemini-commands.js +16 -16
  88. package/dist/cli/llm/gpt-commands.js +19 -19
  89. package/dist/cli/llm/help.js +21 -21
  90. package/dist/cli/postinstall/cursor-agents.js +32 -32
  91. package/dist/cli/postinstall/cursor-rules.js +83 -83
  92. package/dist/cli/postinstall/cursor-skills.js +743 -743
  93. package/dist/cli/setup/Provisioner.js +42 -42
  94. package/dist/infra/lib/DeepInit.js +24 -24
  95. package/dist/infra/lib/IterationTracker.js +11 -11
  96. package/dist/infra/lib/PythonParser.js +108 -108
  97. package/dist/infra/lib/ReviewRace.js +96 -96
  98. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  99. package/dist/infra/lib/SkillQualityGate.js +9 -9
  100. package/dist/infra/lib/SkillRepository.js +159 -159
  101. package/dist/infra/lib/TokenBudgetTracker.d.ts +13 -0
  102. package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -1
  103. package/dist/infra/lib/TokenBudgetTracker.js +44 -3
  104. package/dist/infra/lib/TokenBudgetTracker.js.map +1 -1
  105. package/dist/infra/lib/UltraQA.js +99 -99
  106. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  107. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  108. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  109. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  110. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  111. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  112. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  113. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  114. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  115. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  116. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  117. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  118. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  119. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  120. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  121. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  122. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  123. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  124. package/dist/infra/lib/gemini/orchestration.js +5 -5
  125. package/dist/infra/lib/gpt/orchestration.js +4 -4
  126. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  127. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  128. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  129. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  130. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  131. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  132. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  133. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  134. package/dist/infra/orchestrator/AgentManager.js +12 -12
  135. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  136. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  137. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  138. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  139. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  140. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  141. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  142. package/dist/tools/memory/getMemoryGraph.js +12 -12
  143. package/dist/tools/memory/getSessionContext.js +9 -9
  144. package/dist/tools/memory/linkMemories.js +14 -14
  145. package/dist/tools/memory/listMemories.js +4 -4
  146. package/dist/tools/memory/recallMemory.js +4 -4
  147. package/dist/tools/memory/saveMemory.js +4 -4
  148. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  149. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  150. package/dist/tools/semantic/astGrep.test.js +6 -6
  151. package/dist/tools/spec/prdParser.test.js +171 -171
  152. package/dist/tools/spec/specGenerator.js +169 -169
  153. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  154. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  155. package/hooks/gemini-hooks.json +73 -73
  156. package/hooks/hooks.json +174 -174
  157. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  158. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  159. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  160. package/hooks/scripts/auto-commit.js +97 -97
  161. package/hooks/scripts/auto-format.js +64 -64
  162. package/hooks/scripts/auto-test.js +81 -81
  163. package/hooks/scripts/code-check.js +268 -268
  164. package/hooks/scripts/codex-detect.js +46 -46
  165. package/hooks/scripts/codex-review-gate.js +80 -80
  166. package/hooks/scripts/command-log.js +32 -32
  167. package/hooks/scripts/context-save.js +353 -353
  168. package/hooks/scripts/evolution-engine.js +91 -91
  169. package/hooks/scripts/figma-extract.js +635 -477
  170. package/hooks/scripts/hud-status.js +321 -321
  171. package/hooks/scripts/keyword-detector.js +214 -214
  172. package/hooks/scripts/llm-orchestrate.js +572 -572
  173. package/hooks/scripts/post-edit.js +32 -32
  174. package/hooks/scripts/pr-test-gate.js +52 -52
  175. package/hooks/scripts/pre-tool-guard.js +214 -159
  176. package/hooks/scripts/prompt-dispatcher.js +185 -185
  177. package/hooks/scripts/sentinel-guard.js +131 -131
  178. package/hooks/scripts/session-start.js +177 -177
  179. package/hooks/scripts/skill-injector.js +83 -83
  180. package/hooks/scripts/stop-notify.js +209 -209
  181. package/hooks/scripts/utils.js +243 -243
  182. package/languages/csharp-unity.md +515 -515
  183. package/languages/gdscript-godot.md +470 -470
  184. package/languages/ruby-rails.md +489 -489
  185. package/languages/typescript-angular.md +433 -433
  186. package/languages/typescript-astro.md +416 -416
  187. package/languages/typescript-electron.md +406 -406
  188. package/languages/typescript-nestjs.md +524 -524
  189. package/languages/typescript-svelte.md +407 -407
  190. package/languages/typescript-tauri.md +365 -365
  191. package/package.json +101 -101
  192. package/skills/agents-md/SKILL.md +121 -121
  193. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  194. package/skills/agents-md/templates/agents-md.md +36 -36
  195. package/skills/arch-guard/SKILL.md +181 -181
  196. package/skills/arch-guard/agents/detector.md +48 -48
  197. package/skills/arch-guard/agents/reporter.md +48 -48
  198. package/skills/arch-guard/agents/rule-generator.md +49 -49
  199. package/skills/arch-guard/agents/violation-checker.md +51 -51
  200. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  201. package/skills/arch-guard/frameworks/solid.md +102 -102
  202. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  203. package/skills/arch-guard/templates/arch-rules.json +47 -47
  204. package/skills/arch-guard/templates/violation-report.md +53 -53
  205. package/skills/brand-assets/SKILL.md +147 -147
  206. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  207. package/skills/brand-assets/templates/brand-guide.md +161 -161
  208. package/skills/capability-loop/SKILL.md +168 -168
  209. package/skills/capability-loop/agents/capability-designer.md +61 -61
  210. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  211. package/skills/capability-loop/agents/implementer.md +50 -50
  212. package/skills/capability-loop/agents/tester.md +53 -53
  213. package/skills/capability-loop/templates/capability-spec.md +118 -118
  214. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  215. package/skills/characterization-test/SKILL.md +207 -207
  216. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  217. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  218. package/skills/characterization-test/agents/reporter.md +50 -50
  219. package/skills/characterization-test/agents/test-writer.md +49 -49
  220. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  221. package/skills/characterization-test/templates/test-template.ts +101 -101
  222. package/skills/chub-usage/SKILL.md +139 -139
  223. package/skills/claude-md-guide/SKILL.md +351 -351
  224. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  225. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  226. package/skills/commerce-patterns/SKILL.md +64 -64
  227. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  228. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  229. package/skills/commit-push-pr/SKILL.md +77 -77
  230. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  231. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  232. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  233. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  234. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  235. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  236. package/skills/context7-usage/SKILL.md +106 -106
  237. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  238. package/skills/create-prd/SKILL.md +90 -90
  239. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  240. package/skills/create-prd/agents/prioritizer.md +60 -60
  241. package/skills/create-prd/agents/requirements-writer.md +48 -48
  242. package/skills/create-prd/agents/researcher.md +55 -55
  243. package/skills/create-prd/agents/reviewer.md +54 -54
  244. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  245. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  246. package/skills/create-prd/orchestrator.md +70 -70
  247. package/skills/create-prd/rubrics/completeness.md +58 -58
  248. package/skills/create-prd/templates/prd.md +139 -139
  249. package/skills/design-audit/SKILL.md +152 -152
  250. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  251. package/skills/design-audit/agents/performance-auditor.md +46 -46
  252. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  253. package/skills/design-audit/agents/scorer.md +47 -47
  254. package/skills/design-audit/agents/slop-detector.md +47 -47
  255. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  256. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  257. package/skills/design-audit/orchestrator.md +64 -64
  258. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  259. package/skills/design-audit/rubrics/scoring.md +63 -63
  260. package/skills/design-audit/templates/report.md +88 -88
  261. package/skills/design-critique/SKILL.md +139 -139
  262. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  263. package/skills/design-critique/templates/critique-report.md +86 -86
  264. package/skills/design-distill/SKILL.md +130 -130
  265. package/skills/design-distill/templates/design-system.md +132 -132
  266. package/skills/design-normalize/SKILL.md +133 -133
  267. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  268. package/skills/design-normalize/templates/token-audit.md +89 -89
  269. package/skills/design-polish/SKILL.md +131 -131
  270. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  271. package/skills/design-polish/templates/polish-report.md +64 -64
  272. package/skills/design-teach/SKILL.md +182 -182
  273. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  274. package/skills/design-teach/templates/design-context.json +36 -36
  275. package/skills/e2e-commerce/SKILL.md +62 -62
  276. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  277. package/skills/event-comms/SKILL.md +162 -162
  278. package/skills/event-comms/templates/email-invite.md +99 -99
  279. package/skills/event-comms/templates/sns-post.md +133 -133
  280. package/skills/event-ops/SKILL.md +198 -198
  281. package/skills/event-ops/rubrics/contingency.md +85 -85
  282. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  283. package/skills/event-planning/SKILL.md +132 -132
  284. package/skills/event-planning/rubrics/timeline.md +70 -70
  285. package/skills/event-planning/templates/event-plan.md +91 -91
  286. package/skills/exec-plan/SKILL.md +149 -149
  287. package/skills/exec-plan/agents/decomposer.md +47 -47
  288. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  289. package/skills/exec-plan/agents/estimator.md +43 -43
  290. package/skills/exec-plan/agents/validator.md +55 -55
  291. package/skills/exec-plan/orchestrator.md +70 -70
  292. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  293. package/skills/exec-plan/templates/plan.md +147 -147
  294. package/skills/git-worktree/SKILL.md +73 -73
  295. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  296. package/skills/handoff/SKILL.md +110 -110
  297. package/skills/handoff/agents/context-summarizer.md +51 -51
  298. package/skills/handoff/agents/document-writer.md +63 -63
  299. package/skills/handoff/agents/state-collector.md +53 -53
  300. package/skills/handoff/agents/verifier.md +48 -48
  301. package/skills/handoff/rubrics/completeness.md +62 -62
  302. package/skills/handoff/templates/handoff.md +107 -107
  303. package/skills/parallel-research/SKILL.md +89 -89
  304. package/skills/parallel-research/agents/best-practices.md +43 -43
  305. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  306. package/skills/parallel-research/agents/framework-docs.md +45 -45
  307. package/skills/parallel-research/agents/security-advisory.md +46 -46
  308. package/skills/parallel-research/agents/synthesizer.md +52 -52
  309. package/skills/parallel-research/experts/best-practices.md +50 -50
  310. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  311. package/skills/parallel-research/experts/framework-docs.md +65 -65
  312. package/skills/parallel-research/experts/security-advisory.md +69 -69
  313. package/skills/parallel-research/orchestrator.md +65 -65
  314. package/skills/parallel-research/templates/synthesis.md +101 -101
  315. package/skills/prioritization-frameworks/SKILL.md +87 -87
  316. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  317. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  318. package/skills/priority-todos/SKILL.md +64 -64
  319. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  320. package/skills/priority-todos/templates/todo-board.md +59 -59
  321. package/skills/seo-checklist/SKILL.md +58 -58
  322. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  323. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  324. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  325. package/skills/techdebt/SKILL.md +124 -124
  326. package/skills/techdebt/agents/analyzer.md +50 -50
  327. package/skills/techdebt/agents/fixer.md +41 -41
  328. package/skills/techdebt/agents/reviewer.md +47 -47
  329. package/skills/techdebt/agents/scanner.md +44 -44
  330. package/skills/techdebt/orchestrator.md +70 -70
  331. package/skills/techdebt/rubrics/severity.md +51 -51
  332. package/skills/techdebt/scripts/scan.js +90 -90
  333. package/skills/techdebt/templates/report.md +86 -86
  334. package/skills/tool-fallback/SKILL.md +104 -104
  335. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  336. package/skills/typescript-advanced-types/SKILL.md +67 -67
  337. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  338. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  339. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  340. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  341. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  342. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  343. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  344. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  345. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  346. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  347. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  348. package/skills/user-personas/SKILL.md +75 -75
  349. package/skills/user-personas/rubrics/research-methods.md +56 -56
  350. package/skills/user-personas/templates/persona.md +89 -89
  351. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  352. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  353. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  354. package/skills/vibe.docs/SKILL.md +171 -171
  355. package/skills/vibe.docs/templates/architecture.md +80 -80
  356. package/skills/vibe.docs/templates/readme.md +84 -84
  357. package/skills/vibe.docs/templates/release-notes.md +74 -74
  358. package/skills/vibe.figma/SKILL.md +215 -982
  359. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  360. package/skills/vibe.figma/templates/component-index.md +126 -126
  361. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  362. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  363. package/skills/vibe.figma.convert/SKILL.md +188 -511
  364. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +129 -113
  365. package/skills/vibe.figma.convert/templates/component.md +140 -140
  366. package/skills/vibe.figma.extract/SKILL.md +179 -300
  367. package/skills/vibe.figma.extract/rubrics/image-rules.md +145 -137
  368. package/skills/video-production/SKILL.md +52 -52
  369. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  370. package/skills/video-production/templates/production-plan.md +104 -104
  371. package/vibe/config.json +29 -29
  372. package/vibe/constitution.md +227 -227
  373. package/vibe/rules/principles/communication-guide.md +98 -98
  374. package/vibe/rules/principles/development-philosophy.md +52 -52
  375. package/vibe/rules/principles/quick-start.md +102 -102
  376. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  377. package/vibe/rules/quality/checklist.md +276 -276
  378. package/vibe/rules/quality/performance.md +236 -236
  379. package/vibe/rules/quality/testing-strategy.md +440 -440
  380. package/vibe/rules/standards/anti-patterns.md +541 -541
  381. package/vibe/rules/standards/code-structure.md +291 -291
  382. package/vibe/rules/standards/complexity-metrics.md +313 -313
  383. package/vibe/rules/standards/git-workflow.md +237 -237
  384. package/vibe/rules/standards/naming-conventions.md +198 -198
  385. package/vibe/rules/standards/security.md +305 -305
  386. package/vibe/rules/writing/document-style.md +74 -74
  387. package/vibe/setup.sh +31 -31
  388. package/vibe/templates/constitution-template.md +252 -252
  389. package/vibe/templates/contract-backend-template.md +526 -526
  390. package/vibe/templates/contract-frontend-template.md +599 -599
  391. package/vibe/templates/feature-template.md +96 -96
  392. package/vibe/templates/spec-template.md +221 -221
  393. package/vibe/ui-ux-data/charts.csv +26 -26
  394. package/vibe/ui-ux-data/colors.csv +97 -97
  395. package/vibe/ui-ux-data/icons.csv +101 -101
  396. package/vibe/ui-ux-data/landing.csv +31 -31
  397. package/vibe/ui-ux-data/products.csv +96 -96
  398. package/vibe/ui-ux-data/react-performance.csv +45 -45
  399. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  400. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  401. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  402. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  403. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  404. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  405. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  406. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  407. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  408. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  409. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  410. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  411. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  412. package/vibe/ui-ux-data/styles.csv +68 -68
  413. package/vibe/ui-ux-data/typography.csv +57 -57
  414. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  415. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  416. package/vibe/ui-ux-data/version.json +31 -31
  417. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -4,10 +4,10 @@ import { validateCodeQuality } from './validateCodeQuality.js';
4
4
  describe('validateCodeQuality', () => {
5
5
  describe('code validation', () => {
6
6
  it('should validate simple clean code', async () => {
7
- const code = `
8
- function add(a: number, b: number): number {
9
- return a + b;
10
- }
7
+ const code = `
8
+ function add(a: number, b: number): number {
9
+ return a + b;
10
+ }
11
11
  `;
12
12
  const result = await validateCodeQuality({ code });
13
13
  expect(result.content[0].type).toBe('text');
@@ -15,56 +15,56 @@ function add(a: number, b: number): number {
15
15
  expect(result.content[0].text).toContain('Grade');
16
16
  });
17
17
  it('should detect high nesting depth', async () => {
18
- const code = `
19
- function nested() {
20
- if (true) {
21
- if (true) {
22
- if (true) {
23
- if (true) {
24
- console.log('deep');
25
- }
26
- }
27
- }
28
- }
29
- }
18
+ const code = `
19
+ function nested() {
20
+ if (true) {
21
+ if (true) {
22
+ if (true) {
23
+ if (true) {
24
+ console.log('deep');
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
30
  `;
31
31
  const result = await validateCodeQuality({ code });
32
32
  expect(result.content[0].text).toContain('Nesting');
33
33
  });
34
34
  it('should detect any type usage', async () => {
35
- const code = `
36
- function process(data: any): any {
37
- return data;
38
- }
35
+ const code = `
36
+ function process(data: any): any {
37
+ return data;
38
+ }
39
39
  `;
40
40
  const result = await validateCodeQuality({ code });
41
41
  expect(result.content[0].text).toContain('type');
42
42
  });
43
43
  it('should detect loose equality', async () => {
44
- const code = `
45
- function compare(a, b) {
46
- return a == b;
47
- }
44
+ const code = `
45
+ function compare(a, b) {
46
+ return a == b;
47
+ }
48
48
  `;
49
49
  const result = await validateCodeQuality({ code });
50
50
  expect(result.content[0].text).toContain('Issues');
51
51
  });
52
52
  it('should detect var usage', async () => {
53
- const code = `
54
- function oldStyle() {
55
- var x = 1;
56
- var y = 2;
57
- return x + y;
58
- }
53
+ const code = `
54
+ function oldStyle() {
55
+ var x = 1;
56
+ var y = 2;
57
+ return x + y;
58
+ }
59
59
  `;
60
60
  const result = await validateCodeQuality({ code });
61
61
  expect(result.content[0].text).toContain('Issues');
62
62
  });
63
63
  it('should detect magic numbers', async () => {
64
- const code = `
65
- function calculate(value) {
66
- return value * 123 + 456;
67
- }
64
+ const code = `
65
+ function calculate(value) {
66
+ return value * 123 + 456;
67
+ }
68
68
  `;
69
69
  const result = await validateCodeQuality({ code });
70
70
  expect(result.content[0].text).toContain('Issues');
@@ -72,26 +72,26 @@ function calculate(value) {
72
72
  });
73
73
  describe('async code validation', () => {
74
74
  it('should warn about missing error handling in async', async () => {
75
- const code = `
76
- async function fetchData() {
77
- const response = await fetch('/api');
78
- return response.json();
79
- }
75
+ const code = `
76
+ async function fetchData() {
77
+ const response = await fetch('/api');
78
+ return response.json();
79
+ }
80
80
  `;
81
81
  const result = await validateCodeQuality({ code });
82
82
  expect(result.content[0].text).toContain('Issues');
83
83
  });
84
84
  it('should not warn when error handling exists', async () => {
85
- const code = `
86
- async function fetchData() {
87
- try {
88
- const response = await fetch('/api');
89
- return response.json();
90
- } catch (error) {
91
- console.error(error);
92
- throw error;
93
- }
94
- }
85
+ const code = `
86
+ async function fetchData() {
87
+ try {
88
+ const response = await fetch('/api');
89
+ return response.json();
90
+ } catch (error) {
91
+ console.error(error);
92
+ throw error;
93
+ }
94
+ }
95
95
  `;
96
96
  const result = await validateCodeQuality({ code });
97
97
  // Should have fewer issues or no error handling issue
@@ -100,27 +100,27 @@ async function fetchData() {
100
100
  });
101
101
  describe('React component validation', () => {
102
102
  it('should validate React component with type', async () => {
103
- const code = `
104
- import React from 'react';
105
-
106
- function MyComponent({ name }) {
107
- return <div>Hello, {name}!</div>;
108
- }
103
+ const code = `
104
+ import React from 'react';
105
+
106
+ function MyComponent({ name }) {
107
+ return <div>Hello, {name}!</div>;
108
+ }
109
109
  `;
110
110
  const result = await validateCodeQuality({ code, type: 'component' });
111
111
  expect(result.content[0].text).toContain('Type: component');
112
112
  });
113
113
  it('should suggest memo for React components', async () => {
114
- const code = `
115
- import React from 'react';
116
-
117
- function ExpensiveComponent({ data }) {
118
- return (
119
- <div>
120
- {data.map(item => <span key={item.id}>{item.name}</span>)}
121
- </div>
122
- );
123
- }
114
+ const code = `
115
+ import React from 'react';
116
+
117
+ function ExpensiveComponent({ data }) {
118
+ return (
119
+ <div>
120
+ {data.map(item => <span key={item.id}>{item.name}</span>)}
121
+ </div>
122
+ );
123
+ }
124
124
  `;
125
125
  const result = await validateCodeQuality({ code, type: 'component' });
126
126
  // Should mention performance optimization
@@ -144,27 +144,27 @@ function ExpensiveComponent({ data }) {
144
144
  });
145
145
  describe('grading system', () => {
146
146
  it('should give A grade for excellent code', async () => {
147
- const code = `
148
- const add = (a: number, b: number): number => a + b;
147
+ const code = `
148
+ const add = (a: number, b: number): number => a + b;
149
149
  `;
150
150
  const result = await validateCodeQuality({ code });
151
151
  expect(result.content[0].text).toContain('Grade: A');
152
152
  });
153
153
  it('should give lower grade for problematic code', async () => {
154
- const code = `
155
- function badCode(data: any) {
156
- var result;
157
- if (data == null) {
158
- if (true) {
159
- if (true) {
160
- if (true) {
161
- result = data * 123456;
162
- }
163
- }
164
- }
165
- }
166
- return result;
167
- }
154
+ const code = `
155
+ function badCode(data: any) {
156
+ var result;
157
+ if (data == null) {
158
+ if (true) {
159
+ if (true) {
160
+ if (true) {
161
+ result = data * 123456;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ return result;
167
+ }
168
168
  `;
169
169
  const result = await validateCodeQuality({ code });
170
170
  // Should not be grade A
@@ -173,10 +173,10 @@ function badCode(data: any) {
173
173
  });
174
174
  describe('strict mode', () => {
175
175
  it('should accept strict flag', async () => {
176
- const code = `
177
- function test() {
178
- return 1;
179
- }
176
+ const code = `
177
+ function test() {
178
+ return 1;
179
+ }
180
180
  `;
181
181
  const result = await validateCodeQuality({ code, strict: true });
182
182
  expect(result.content[0].text).toContain('Score');
@@ -184,23 +184,23 @@ function test() {
184
184
  });
185
185
  describe('metrics option', () => {
186
186
  it('should accept complexity metrics', async () => {
187
- const code = `
188
- function test() {
189
- return 1;
190
- }
187
+ const code = `
188
+ function test() {
189
+ return 1;
190
+ }
191
191
  `;
192
192
  const result = await validateCodeQuality({ code, metrics: 'complexity' });
193
193
  expect(result.content[0].text).toContain('Complexity');
194
194
  });
195
195
  it('should accept all metrics', async () => {
196
- const code = `
197
- function test() {
198
- if (true) {
199
- for (let i = 0; i < 10; i++) {
200
- console.log(i);
201
- }
202
- }
203
- }
196
+ const code = `
197
+ function test() {
198
+ if (true) {
199
+ for (let i = 0; i < 10; i++) {
200
+ console.log(i);
201
+ }
202
+ }
203
+ }
204
204
  `;
205
205
  const result = await validateCodeQuality({ code, metrics: 'all' });
206
206
  expect(result.content[0].text).toContain('Score');
@@ -208,18 +208,18 @@ function test() {
208
208
  });
209
209
  describe('deductions', () => {
210
210
  it('should show deduction details', async () => {
211
- const code = `
212
- async function process(data: any) {
213
- var x = data == null ? 0 : data;
214
- return x * 12345;
215
- }
211
+ const code = `
212
+ async function process(data: any) {
213
+ var x = data == null ? 0 : data;
214
+ return x * 12345;
215
+ }
216
216
  `;
217
217
  const result = await validateCodeQuality({ code });
218
218
  expect(result.content[0].text).toContain('Deductions');
219
219
  });
220
220
  it('should calculate score correctly', async () => {
221
- const code = `
222
- const clean = (x: number): number => x + 1;
221
+ const code = `
222
+ const clean = (x: number): number => x + 1;
223
223
  `;
224
224
  const result = await validateCodeQuality({ code });
225
225
  // Clean code should have high score (90+)
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const createMemoryTimelineDefinition = {
4
4
  name: 'create_memory_timeline',
5
- description: `Creates a memory timeline visualization.
6
-
7
- Keywords: timeline, history, chronological, time-based
8
-
9
- Examples:
10
- - "Show me the recent memory timeline"
5
+ description: `Creates a memory timeline visualization.
6
+
7
+ Keywords: timeline, history, chronological, time-based
8
+
9
+ Examples:
10
+ - "Show me the recent memory timeline"
11
11
  - "Memory history for the last 7 days"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -61,10 +61,10 @@ export async function createMemoryTimeline(args) {
61
61
  return {
62
62
  content: [{
63
63
  type: 'text',
64
- text: `✗ No memories found in the specified period.
65
-
66
- ${startDate ? `**Start date**: ${startDate}` : ''}
67
- ${endDate ? `**End date**: ${endDate}` : ''}
64
+ text: `✗ No memories found in the specified period.
65
+
66
+ ${startDate ? `**Start date**: ${startDate}` : ''}
67
+ ${endDate ? `**End date**: ${endDate}` : ''}
68
68
  ${category ? `**Category**: ${category}` : ''}`
69
69
  }]
70
70
  };
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const getMemoryGraphDefinition = {
4
4
  name: 'get_memory_graph',
5
- description: `Retrieves the memory knowledge graph.
6
-
7
- Keywords: graph, relations, connections, memory graph, knowledge graph
8
-
9
- Examples:
10
- - "Show me the relation graph for project-architecture"
5
+ description: `Retrieves the memory knowledge graph.
6
+
7
+ Keywords: graph, relations, connections, memory graph, knowledge graph
8
+
9
+ Examples:
10
+ - "Show me the relation graph for project-architecture"
11
11
  - "View the entire memory graph"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -79,12 +79,12 @@ export async function getMemoryGraph(args) {
79
79
  output = generateTreeFormat(key, graph.nodes, filteredEdges);
80
80
  }
81
81
  // Add statistics
82
- const stats = `
83
- ---
84
- **Statistics**
85
- - Nodes: ${graph.nodes.length}
86
- - Relations: ${filteredEdges.length}
87
- - Clusters: ${graph.clusters.length}
82
+ const stats = `
83
+ ---
84
+ **Statistics**
85
+ - Nodes: ${graph.nodes.length}
86
+ - Relations: ${filteredEdges.length}
87
+ - Clusters: ${graph.clusters.length}
88
88
  ${graph.clusters.length > 0 ? `- Cluster members: ${graph.clusters.map(c => `[${c.join(', ')}]`).join(', ')}` : ''}`;
89
89
  return {
90
90
  content: [{
@@ -3,15 +3,15 @@
3
3
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
4
4
  export const getSessionContextDefinition = {
5
5
  name: 'get_session_context',
6
- description: `[Recommended at session/conversation start] Retrieves memories, knowledge graph, and recent work history from previous sessions at once.
7
-
8
- This tool is best run first when starting a new conversation. It helps quickly understand the project context.
9
-
10
- Keywords: session start, context, previous work, what did we do, history, resume
11
-
12
- Examples:
13
- - "What did we work on before?"
14
- - "Show me the project context"
6
+ description: `[Recommended at session/conversation start] Retrieves memories, knowledge graph, and recent work history from previous sessions at once.
7
+
8
+ This tool is best run first when starting a new conversation. It helps quickly understand the project context.
9
+
10
+ Keywords: session start, context, previous work, what did we do, history, resume
11
+
12
+ Examples:
13
+ - "What did we work on before?"
14
+ - "Show me the project context"
15
15
  - "Get session context"`,
16
16
  inputSchema: {
17
17
  type: 'object',
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const linkMemoriesDefinition = {
4
4
  name: 'link_memories',
5
- description: `Links relationships between memories (knowledge graph).
6
-
7
- Keywords: connect memories, link, relate, set relationship
8
-
9
- Usage examples:
10
- - "connect project-architecture and design-patterns"
5
+ description: `Links relationships between memories (knowledge graph).
6
+
7
+ Keywords: connect memories, link, relate, set relationship
8
+
9
+ Usage examples:
10
+ - "connect project-architecture and design-patterns"
11
11
  - "link these two memories with related_to"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -88,14 +88,14 @@ export async function linkMemories(args) {
88
88
  if (bidirectional) {
89
89
  memoryManager.linkMemories(targetKey, sourceKey, relationType, strength);
90
90
  }
91
- const result = `✓ Memory relationship linked
92
-
93
- **Source**: ${sourceKey}
94
- **Target**: ${targetKey}
95
- **Relationship type**: ${relationType}
96
- **Strength**: ${strength}
97
- **Bidirectional**: ${bidirectional ? 'Yes' : 'No'}
98
-
91
+ const result = `✓ Memory relationship linked
92
+
93
+ **Source**: ${sourceKey}
94
+ **Target**: ${targetKey}
95
+ **Relationship type**: ${relationType}
96
+ **Strength**: ${strength}
97
+ **Bidirectional**: ${bidirectional ? 'Yes' : 'No'}
98
+
99
99
  You can now visualize the relationship with get_memory_graph.`;
100
100
  return {
101
101
  content: [{
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const listMemoriesDefinition = {
4
4
  name: 'list_memories',
5
- description: `저장된 메모리 목록을 조회합니다. 카테고리별 필터링 가능.
6
-
7
- 키워드: 뭐 있었지, 저장된 거, 목록, what did I save, list memories, show saved
8
-
5
+ description: `저장된 메모리 목록을 조회합니다. 카테고리별 필터링 가능.
6
+
7
+ 키워드: 뭐 있었지, 저장된 거, 목록, what did I save, list memories, show saved
8
+
9
9
  💡 세션 시작 시 전체 컨텍스트가 필요하면 get_session_context를 사용하세요.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const recallMemoryDefinition = {
4
4
  name: 'recall_memory',
5
- description: `특정 메모리를 키로 조회합니다.
6
-
7
- 키워드: 떠올려, recall, 기억나, remember what, what was, remind
8
-
5
+ description: `특정 메모리를 키로 조회합니다.
6
+
7
+ 키워드: 떠올려, recall, 기억나, remember what, what was, remind
8
+
9
9
  💡 전체 컨텍스트가 필요하면 get_session_context를 먼저 사용하세요.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const saveMemoryDefinition = {
4
4
  name: 'save_memory',
5
- description: `중요한 정보를 장기 메모리에 저장합니다. 프로젝트 결정사항, 아키텍처, 설정 등을 기록하세요.
6
-
7
- 키워드: 기억해, remember, 저장해, save, memorize, keep
8
-
5
+ description: `중요한 정보를 장기 메모리에 저장합니다. 프로젝트 결정사항, 아키텍처, 설정 등을 기록하세요.
6
+
7
+ 키워드: 기억해, remember, 저장해, save, memorize, keep
8
+
9
9
  💡 저장 후 link_memories로 관련 메모리를 연결하면 지식 그래프가 구축됩니다.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,20 +2,20 @@
2
2
  import { MemoryManager } from '../../infra/lib/MemoryManager.js';
3
3
  export const searchMemoriesAdvancedDefinition = {
4
4
  name: 'search_memories_advanced',
5
- description: `Performs advanced multi-strategy memory search.
6
-
7
- Keywords: advanced search, find memories, smart search
8
-
9
- **Search strategies:**
10
- - keyword: Traditional keyword search (FTS5 enhanced)
11
- - fulltext: Full-text search with bm25 ranking (FTS5)
12
- - graph_traversal: Graph-based related memory exploration
13
- - temporal: Sort by time
14
- - priority: Priority-based
15
- - context_aware: Combined strategy (FTS5 rank + priority + recency)
16
-
17
- Usage examples:
18
- - "advanced search for authentication-related memories"
5
+ description: `Performs advanced multi-strategy memory search.
6
+
7
+ Keywords: advanced search, find memories, smart search
8
+
9
+ **Search strategies:**
10
+ - keyword: Traditional keyword search (FTS5 enhanced)
11
+ - fulltext: Full-text search with bm25 ranking (FTS5)
12
+ - graph_traversal: Graph-based related memory exploration
13
+ - temporal: Sort by time
14
+ - priority: Priority-based
15
+ - context_aware: Combined strategy (FTS5 rank + priority + recency)
16
+
17
+ Usage examples:
18
+ - "advanced search for authentication-related memories"
19
19
  - "find memories related to project-architecture using graph traversal"`,
20
20
  inputSchema: {
21
21
  type: 'object',
@@ -80,15 +80,15 @@ export async function searchMemoriesAdvanced(args) {
80
80
  return {
81
81
  content: [{
82
82
  type: 'text',
83
- text: `✗ No search results for "${query}".
84
-
85
- **Strategy used**: ${strategy}
86
- ${category ? `**Category filter**: ${category}` : ''}
87
-
88
- Try a different search strategy:
89
- - keyword: Basic keyword matching
90
- - temporal: Newest memories first
91
- - priority: Important memories first
83
+ text: `✗ No search results for "${query}".
84
+
85
+ **Strategy used**: ${strategy}
86
+ ${category ? `**Category filter**: ${category}` : ''}
87
+
88
+ Try a different search strategy:
89
+ - keyword: Basic keyword matching
90
+ - temporal: Newest memories first
91
+ - priority: Important memories first
92
92
  - context_aware: Combined score`
93
93
  }]
94
94
  };
@@ -2,18 +2,18 @@
2
2
  import { ProjectCache } from '../../infra/lib/ProjectCache.js';
3
3
  export const analyzeDependencyGraphDefinition = {
4
4
  name: 'analyze_dependency_graph',
5
- description: `Analyzes code dependency graphs.
6
-
7
- Keywords: dependency, relationship analysis, circular reference, dependency graph, circular dependency
8
-
9
- **Analysis includes:**
10
- - Import/export relationships between files
11
- - Circular dependency detection
12
- - Module cluster identification
13
- - Code coupling analysis
14
-
15
- Usage examples:
16
- - "Analyze dependency graph in src folder"
5
+ description: `Analyzes code dependency graphs.
6
+
7
+ Keywords: dependency, relationship analysis, circular reference, dependency graph, circular dependency
8
+
9
+ **Analysis includes:**
10
+ - Import/export relationships between files
11
+ - Circular dependency detection
12
+ - Module cluster identification
13
+ - Code coupling analysis
14
+
15
+ Usage examples:
16
+ - "Analyze dependency graph in src folder"
17
17
  - "Show dependencies of index.ts"`,
18
18
  inputSchema: {
19
19
  type: 'object',
@@ -15,12 +15,12 @@ describe.skipIf(!astGrepAvailable)('ast-grep tools', () => {
15
15
  const testDir = path.join(os.tmpdir(), 'ast-grep-test-' + Date.now());
16
16
  beforeAll(async () => {
17
17
  await mkdir(testDir, { recursive: true });
18
- await writeFile(path.join(testDir, 'test.ts'), `
19
- console.log("hello");
20
- console.log("world");
21
- function greet(name: string) {
22
- console.log(\`Hello, \${name}\`);
23
- }
18
+ await writeFile(path.join(testDir, 'test.ts'), `
19
+ console.log("hello");
20
+ console.log("world");
21
+ function greet(name: string) {
22
+ console.log(\`Hello, \${name}\`);
23
+ }
24
24
  `);
25
25
  });
26
26
  afterAll(async () => {