@su-record/vibe 2.9.4 → 2.9.6

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 (479) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +190 -190
  3. package/LICENSE +21 -21
  4. package/README.ko.md +170 -170
  5. package/README.md +219 -219
  6. package/agents/architect-low.md +41 -41
  7. package/agents/architect-medium.md +59 -59
  8. package/agents/architect.md +80 -80
  9. package/agents/build-error-resolver.md +115 -115
  10. package/agents/compounder.md +261 -261
  11. package/agents/diagrammer.md +178 -178
  12. package/agents/docs/api-documenter.md +99 -99
  13. package/agents/docs/changelog-writer.md +93 -93
  14. package/agents/e2e-tester.md +294 -294
  15. package/agents/event/event-comms.md +78 -78
  16. package/agents/event/event-content.md +68 -68
  17. package/agents/event/event-image.md +95 -95
  18. package/agents/event/event-ops.md +84 -84
  19. package/agents/event/event-scheduler.md +69 -69
  20. package/agents/event/event-speaker.md +86 -86
  21. package/agents/explorer-low.md +42 -42
  22. package/agents/explorer-medium.md +59 -59
  23. package/agents/explorer.md +48 -48
  24. package/agents/implementer-low.md +43 -43
  25. package/agents/implementer-medium.md +52 -52
  26. package/agents/implementer.md +54 -54
  27. package/agents/junior-mentor.md +141 -141
  28. package/agents/planning/requirements-analyst.md +84 -84
  29. package/agents/planning/ux-advisor.md +83 -83
  30. package/agents/qa/acceptance-tester.md +86 -86
  31. package/agents/qa/edge-case-finder.md +93 -93
  32. package/agents/qa/qa-coordinator.md +131 -131
  33. package/agents/refactor-cleaner.md +143 -143
  34. package/agents/research/best-practices-agent.md +199 -199
  35. package/agents/research/codebase-patterns-agent.md +157 -157
  36. package/agents/research/framework-docs-agent.md +188 -188
  37. package/agents/research/security-advisory-agent.md +213 -213
  38. package/agents/review/architecture-reviewer.md +107 -107
  39. package/agents/review/complexity-reviewer.md +116 -116
  40. package/agents/review/data-integrity-reviewer.md +88 -88
  41. package/agents/review/git-history-reviewer.md +103 -103
  42. package/agents/review/performance-reviewer.md +86 -86
  43. package/agents/review/python-reviewer.md +150 -150
  44. package/agents/review/rails-reviewer.md +139 -139
  45. package/agents/review/react-reviewer.md +144 -144
  46. package/agents/review/security-reviewer.md +80 -80
  47. package/agents/review/simplicity-reviewer.md +140 -140
  48. package/agents/review/test-coverage-reviewer.md +116 -116
  49. package/agents/review/typescript-reviewer.md +127 -127
  50. package/agents/searcher.md +54 -54
  51. package/agents/simplifier.md +120 -120
  52. package/agents/teams/debug-team.md +70 -70
  53. package/agents/teams/dev-team.md +88 -88
  54. package/agents/teams/docs-team.md +80 -80
  55. package/agents/teams/figma/figma-analyst.md +52 -52
  56. package/agents/teams/figma/figma-architect.md +112 -112
  57. package/agents/teams/figma/figma-auditor.md +82 -82
  58. package/agents/teams/figma/figma-builder.md +100 -100
  59. package/agents/teams/figma-team.md +85 -85
  60. package/agents/teams/fullstack-team.md +83 -83
  61. package/agents/teams/lite-team.md +69 -69
  62. package/agents/teams/migration-team.md +78 -78
  63. package/agents/teams/refactor-team.md +94 -94
  64. package/agents/teams/research-team.md +86 -86
  65. package/agents/teams/review-debate-team.md +125 -125
  66. package/agents/teams/security-team.md +81 -81
  67. package/agents/tester.md +49 -49
  68. package/agents/ui/ui-a11y-auditor.md +93 -93
  69. package/agents/ui/ui-antipattern-detector.md +102 -102
  70. package/agents/ui/ui-dataviz-advisor.md +69 -69
  71. package/agents/ui/ui-design-system-gen.md +57 -57
  72. package/agents/ui/ui-industry-analyzer.md +49 -49
  73. package/agents/ui/ui-layout-architect.md +65 -65
  74. package/agents/ui/ui-stack-implementer.md +68 -68
  75. package/agents/ui/ux-compliance-reviewer.md +81 -81
  76. package/agents/ui-previewer.md +258 -258
  77. package/commands/vibe.analyze.md +533 -533
  78. package/commands/vibe.docs.md +32 -32
  79. package/commands/vibe.event.md +163 -163
  80. package/commands/vibe.figma.md +584 -584
  81. package/commands/vibe.harness.md +177 -177
  82. package/commands/vibe.review.md +624 -624
  83. package/commands/vibe.run.md +1925 -1925
  84. package/commands/vibe.scaffold.md +195 -195
  85. package/commands/vibe.spec.md +565 -565
  86. package/commands/vibe.trace.md +276 -276
  87. package/commands/vibe.utils.md +413 -413
  88. package/commands/vibe.verify.md +519 -519
  89. package/dist/cli/collaborator.js +52 -52
  90. package/dist/cli/commands/codex-proxy.d.ts +10 -0
  91. package/dist/cli/commands/codex-proxy.d.ts.map +1 -0
  92. package/dist/cli/commands/codex-proxy.js +228 -0
  93. package/dist/cli/commands/codex-proxy.js.map +1 -0
  94. package/dist/cli/commands/config.js +9 -9
  95. package/dist/cli/commands/evolution.js +12 -12
  96. package/dist/cli/commands/figma.js +20 -20
  97. package/dist/cli/commands/index.d.ts +1 -0
  98. package/dist/cli/commands/index.d.ts.map +1 -1
  99. package/dist/cli/commands/index.js +1 -0
  100. package/dist/cli/commands/index.js.map +1 -1
  101. package/dist/cli/commands/info.d.ts.map +1 -1
  102. package/dist/cli/commands/info.js +50 -53
  103. package/dist/cli/commands/info.js.map +1 -1
  104. package/dist/cli/commands/init.js +5 -5
  105. package/dist/cli/commands/remove.js +14 -14
  106. package/dist/cli/commands/sentinel.js +27 -27
  107. package/dist/cli/commands/skills.js +5 -5
  108. package/dist/cli/commands/slack.js +10 -10
  109. package/dist/cli/commands/stats.js +6 -6
  110. package/dist/cli/commands/telegram.js +12 -12
  111. package/dist/cli/detect.js +32 -32
  112. package/dist/cli/index.d.ts.map +1 -1
  113. package/dist/cli/index.js +67 -53
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/llm/claude-commands.js +16 -16
  116. package/dist/cli/llm/config.js +18 -18
  117. package/dist/cli/llm/gemini-commands.js +16 -16
  118. package/dist/cli/llm/gpt-commands.js +19 -19
  119. package/dist/cli/llm/help.js +21 -21
  120. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  121. package/dist/cli/postinstall/constants.js +17 -13
  122. package/dist/cli/postinstall/constants.js.map +1 -1
  123. package/dist/cli/postinstall/cursor-agents.js +32 -32
  124. package/dist/cli/postinstall/cursor-rules.js +83 -83
  125. package/dist/cli/postinstall/cursor-skills.js +743 -743
  126. package/dist/cli/postinstall/fs-utils.d.ts +6 -0
  127. package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
  128. package/dist/cli/postinstall/fs-utils.js +15 -0
  129. package/dist/cli/postinstall/fs-utils.js.map +1 -1
  130. package/dist/cli/postinstall/main.d.ts.map +1 -1
  131. package/dist/cli/postinstall/main.js +8 -8
  132. package/dist/cli/postinstall/main.js.map +1 -1
  133. package/dist/cli/setup/Provisioner.js +42 -42
  134. package/dist/cli/types.d.ts +8 -0
  135. package/dist/cli/types.d.ts.map +1 -1
  136. package/dist/infra/lib/DeepInit.js +24 -24
  137. package/dist/infra/lib/IterationTracker.js +11 -11
  138. package/dist/infra/lib/OrchestrateWorkflow.js +1 -1
  139. package/dist/infra/lib/PythonParser.js +108 -108
  140. package/dist/infra/lib/ReviewRace.js +96 -96
  141. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  142. package/dist/infra/lib/SkillQualityGate.js +9 -9
  143. package/dist/infra/lib/SkillRepository.js +159 -159
  144. package/dist/infra/lib/UltraQA.js +99 -99
  145. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  146. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  147. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  148. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  149. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  150. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  151. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  152. package/dist/infra/lib/codex-proxy.d.ts +21 -0
  153. package/dist/infra/lib/codex-proxy.d.ts.map +1 -0
  154. package/dist/infra/lib/codex-proxy.js +510 -0
  155. package/dist/infra/lib/codex-proxy.js.map +1 -0
  156. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  157. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  158. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  159. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  160. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  161. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  162. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  163. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  164. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  165. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  166. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  167. package/dist/infra/lib/gemini/orchestration.js +5 -5
  168. package/dist/infra/lib/gpt/orchestration.js +4 -4
  169. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  170. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  171. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  172. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  173. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  174. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  175. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  176. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  177. package/dist/infra/lib/telemetry/SkillTelemetry.test.js +4 -4
  178. package/dist/infra/orchestrator/AgentManager.js +12 -12
  179. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  180. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  181. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  182. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  183. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  184. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  185. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  186. package/dist/tools/memory/getMemoryGraph.js +12 -12
  187. package/dist/tools/memory/getSessionContext.js +9 -9
  188. package/dist/tools/memory/linkMemories.js +14 -14
  189. package/dist/tools/memory/listMemories.js +4 -4
  190. package/dist/tools/memory/recallMemory.js +4 -4
  191. package/dist/tools/memory/saveMemory.js +4 -4
  192. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  193. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  194. package/dist/tools/semantic/astGrep.test.js +6 -6
  195. package/dist/tools/spec/prdParser.test.js +171 -171
  196. package/dist/tools/spec/specGenerator.js +169 -169
  197. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  198. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  199. package/hooks/gemini-hooks.json +73 -73
  200. package/hooks/hooks.json +174 -174
  201. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  202. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  203. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  204. package/hooks/scripts/auto-commit.js +97 -97
  205. package/hooks/scripts/auto-format.js +64 -64
  206. package/hooks/scripts/auto-test.js +81 -81
  207. package/hooks/scripts/code-check.js +268 -268
  208. package/hooks/scripts/codex-detect.js +46 -46
  209. package/hooks/scripts/codex-review-gate.js +80 -80
  210. package/hooks/scripts/command-log.js +32 -32
  211. package/hooks/scripts/context-save.js +353 -353
  212. package/hooks/scripts/evolution-engine.js +91 -91
  213. package/hooks/scripts/figma-extract.js +635 -635
  214. package/hooks/scripts/figma-guard.js +220 -220
  215. package/hooks/scripts/figma-refine.js +315 -315
  216. package/hooks/scripts/figma-to-scss.js +394 -394
  217. package/hooks/scripts/figma-validate.js +353 -353
  218. package/hooks/scripts/hud-status.js +321 -321
  219. package/hooks/scripts/keyword-detector.js +214 -214
  220. package/hooks/scripts/llm-orchestrate.js +572 -572
  221. package/hooks/scripts/post-edit.js +32 -32
  222. package/hooks/scripts/pr-test-gate.js +52 -52
  223. package/hooks/scripts/pre-tool-guard.js +214 -214
  224. package/hooks/scripts/prompt-dispatcher.js +185 -185
  225. package/hooks/scripts/sentinel-guard.js +131 -131
  226. package/hooks/scripts/session-start.js +177 -177
  227. package/hooks/scripts/skill-injector.js +83 -83
  228. package/hooks/scripts/stop-notify.js +209 -209
  229. package/hooks/scripts/utils.js +243 -243
  230. package/languages/csharp-unity.md +515 -515
  231. package/languages/gdscript-godot.md +470 -470
  232. package/languages/ruby-rails.md +489 -489
  233. package/languages/typescript-angular.md +433 -433
  234. package/languages/typescript-astro.md +416 -416
  235. package/languages/typescript-electron.md +406 -406
  236. package/languages/typescript-nestjs.md +524 -524
  237. package/languages/typescript-svelte.md +407 -407
  238. package/languages/typescript-tauri.md +365 -365
  239. package/package.json +101 -101
  240. package/skills/agents-md/SKILL.md +121 -121
  241. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  242. package/skills/agents-md/templates/agents-md.md +36 -36
  243. package/skills/arch-guard/SKILL.md +181 -181
  244. package/skills/arch-guard/agents/detector.md +48 -48
  245. package/skills/arch-guard/agents/reporter.md +48 -48
  246. package/skills/arch-guard/agents/rule-generator.md +49 -49
  247. package/skills/arch-guard/agents/violation-checker.md +51 -51
  248. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  249. package/skills/arch-guard/frameworks/solid.md +102 -102
  250. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  251. package/skills/arch-guard/templates/arch-rules.json +47 -47
  252. package/skills/arch-guard/templates/violation-report.md +53 -53
  253. package/skills/brand-assets/SKILL.md +147 -147
  254. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  255. package/skills/brand-assets/templates/brand-guide.md +161 -161
  256. package/skills/capability-loop/SKILL.md +272 -272
  257. package/skills/capability-loop/agents/capability-designer.md +61 -61
  258. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  259. package/skills/capability-loop/agents/implementer.md +50 -50
  260. package/skills/capability-loop/agents/tester.md +53 -53
  261. package/skills/capability-loop/templates/capability-spec.md +118 -118
  262. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  263. package/skills/characterization-test/SKILL.md +207 -207
  264. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  265. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  266. package/skills/characterization-test/agents/reporter.md +50 -50
  267. package/skills/characterization-test/agents/test-writer.md +49 -49
  268. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  269. package/skills/characterization-test/templates/test-template.ts +101 -101
  270. package/skills/chub-usage/SKILL.md +139 -139
  271. package/skills/claude-md-guide/SKILL.md +351 -351
  272. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  273. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  274. package/skills/commerce-patterns/SKILL.md +64 -64
  275. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  276. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  277. package/skills/commit-push-pr/SKILL.md +77 -77
  278. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  279. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  280. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  281. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  282. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  283. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  284. package/skills/context7-usage/SKILL.md +106 -106
  285. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  286. package/skills/create-prd/SKILL.md +90 -90
  287. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  288. package/skills/create-prd/agents/prioritizer.md +60 -60
  289. package/skills/create-prd/agents/requirements-writer.md +48 -48
  290. package/skills/create-prd/agents/researcher.md +55 -55
  291. package/skills/create-prd/agents/reviewer.md +54 -54
  292. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  293. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  294. package/skills/create-prd/orchestrator.md +70 -70
  295. package/skills/create-prd/rubrics/completeness.md +58 -58
  296. package/skills/create-prd/templates/prd.md +139 -139
  297. package/skills/design-audit/SKILL.md +152 -152
  298. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  299. package/skills/design-audit/agents/performance-auditor.md +46 -46
  300. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  301. package/skills/design-audit/agents/scorer.md +47 -47
  302. package/skills/design-audit/agents/slop-detector.md +47 -47
  303. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  304. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  305. package/skills/design-audit/orchestrator.md +64 -64
  306. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  307. package/skills/design-audit/rubrics/scoring.md +63 -63
  308. package/skills/design-audit/templates/report.md +88 -88
  309. package/skills/design-critique/SKILL.md +139 -139
  310. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  311. package/skills/design-critique/templates/critique-report.md +86 -86
  312. package/skills/design-distill/SKILL.md +130 -130
  313. package/skills/design-distill/templates/design-system.md +132 -132
  314. package/skills/design-normalize/SKILL.md +133 -133
  315. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  316. package/skills/design-normalize/templates/token-audit.md +89 -89
  317. package/skills/design-polish/SKILL.md +131 -131
  318. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  319. package/skills/design-polish/templates/polish-report.md +64 -64
  320. package/skills/design-teach/SKILL.md +182 -182
  321. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  322. package/skills/design-teach/templates/design-context.json +36 -36
  323. package/skills/devlog/SKILL.md +143 -143
  324. package/skills/e2e-commerce/SKILL.md +62 -62
  325. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  326. package/skills/event-comms/SKILL.md +172 -172
  327. package/skills/event-comms/templates/email-invite.md +99 -99
  328. package/skills/event-comms/templates/sns-post.md +133 -133
  329. package/skills/event-ops/SKILL.md +207 -207
  330. package/skills/event-ops/rubrics/contingency.md +85 -85
  331. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  332. package/skills/event-planning/SKILL.md +144 -144
  333. package/skills/event-planning/rubrics/timeline.md +70 -70
  334. package/skills/event-planning/templates/event-plan.md +91 -91
  335. package/skills/exec-plan/SKILL.md +149 -149
  336. package/skills/exec-plan/agents/decomposer.md +47 -47
  337. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  338. package/skills/exec-plan/agents/estimator.md +43 -43
  339. package/skills/exec-plan/agents/validator.md +55 -55
  340. package/skills/exec-plan/orchestrator.md +70 -70
  341. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  342. package/skills/exec-plan/templates/plan.md +147 -147
  343. package/skills/git-worktree/SKILL.md +73 -73
  344. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  345. package/skills/handoff/SKILL.md +110 -110
  346. package/skills/handoff/agents/context-summarizer.md +51 -51
  347. package/skills/handoff/agents/document-writer.md +63 -63
  348. package/skills/handoff/agents/state-collector.md +53 -53
  349. package/skills/handoff/agents/verifier.md +48 -48
  350. package/skills/handoff/rubrics/completeness.md +62 -62
  351. package/skills/handoff/templates/handoff.md +107 -107
  352. package/skills/parallel-research/SKILL.md +89 -89
  353. package/skills/parallel-research/agents/best-practices.md +43 -43
  354. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  355. package/skills/parallel-research/agents/framework-docs.md +45 -45
  356. package/skills/parallel-research/agents/security-advisory.md +46 -46
  357. package/skills/parallel-research/agents/synthesizer.md +52 -52
  358. package/skills/parallel-research/experts/best-practices.md +50 -50
  359. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  360. package/skills/parallel-research/experts/framework-docs.md +65 -65
  361. package/skills/parallel-research/experts/security-advisory.md +69 -69
  362. package/skills/parallel-research/orchestrator.md +65 -65
  363. package/skills/parallel-research/templates/synthesis.md +101 -101
  364. package/skills/prioritization-frameworks/SKILL.md +87 -87
  365. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  366. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  367. package/skills/priority-todos/SKILL.md +64 -64
  368. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  369. package/skills/priority-todos/templates/todo-board.md +59 -59
  370. package/skills/seo-checklist/SKILL.md +58 -58
  371. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  372. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  373. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  374. package/skills/techdebt/SKILL.md +124 -124
  375. package/skills/techdebt/agents/analyzer.md +50 -50
  376. package/skills/techdebt/agents/fixer.md +41 -41
  377. package/skills/techdebt/agents/reviewer.md +47 -47
  378. package/skills/techdebt/agents/scanner.md +44 -44
  379. package/skills/techdebt/orchestrator.md +70 -70
  380. package/skills/techdebt/rubrics/severity.md +51 -51
  381. package/skills/techdebt/scripts/scan.js +90 -90
  382. package/skills/techdebt/templates/report.md +86 -86
  383. package/skills/tool-fallback/SKILL.md +104 -104
  384. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  385. package/skills/typescript-advanced-types/SKILL.md +67 -67
  386. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  387. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  388. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  389. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  390. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  391. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  392. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  393. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  394. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  395. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  396. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  397. package/skills/user-personas/SKILL.md +75 -75
  398. package/skills/user-personas/rubrics/research-methods.md +56 -56
  399. package/skills/user-personas/templates/persona.md +89 -89
  400. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  401. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  402. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  403. package/skills/{vibe.docs → vibe-docs}/SKILL.md +171 -171
  404. package/skills/{vibe.docs → vibe-docs}/templates/architecture.md +80 -80
  405. package/skills/{vibe.docs → vibe-docs}/templates/readme.md +84 -84
  406. package/skills/{vibe.docs → vibe-docs}/templates/release-notes.md +74 -74
  407. package/skills/{vibe.figma → vibe-figma}/SKILL.md +363 -363
  408. package/skills/{vibe.figma → vibe-figma}/rubrics/extraction-checklist.md +51 -51
  409. package/skills/{vibe.figma → vibe-figma}/templates/component-index.md +126 -126
  410. package/skills/{vibe.figma → vibe-figma}/templates/component-spec.md +168 -168
  411. package/skills/{vibe.figma → vibe-figma}/templates/figma-handoff.md +100 -100
  412. package/skills/{vibe.figma → vibe-figma}/templates/remapped-tree.md +277 -277
  413. package/skills/{vibe.figma.convert → vibe-figma-convert}/SKILL.md +235 -235
  414. package/skills/{vibe.figma.convert → vibe-figma-convert}/rubrics/conversion-rules.md +141 -141
  415. package/skills/{vibe.figma.convert → vibe-figma-convert}/templates/component.md +140 -140
  416. package/skills/{vibe.figma.extract → vibe-figma-extract}/SKILL.md +219 -219
  417. package/skills/{vibe.figma.extract → vibe-figma-extract}/rubrics/image-rules.md +157 -157
  418. package/skills/{vibe.interview → vibe-interview}/SKILL.md +358 -358
  419. package/skills/{vibe.interview → vibe-interview}/checklists/api.md +101 -101
  420. package/skills/{vibe.interview → vibe-interview}/checklists/feature.md +88 -88
  421. package/skills/{vibe.interview → vibe-interview}/checklists/library.md +95 -95
  422. package/skills/{vibe.interview → vibe-interview}/checklists/mobile.md +89 -89
  423. package/skills/{vibe.interview → vibe-interview}/checklists/webapp.md +97 -97
  424. package/skills/{vibe.interview → vibe-interview}/checklists/website.md +99 -99
  425. package/skills/{vibe.plan → vibe-plan}/SKILL.md +254 -254
  426. package/skills/{vibe.spec → vibe-spec}/SKILL.md +1155 -1155
  427. package/skills/{vibe.spec.review → vibe-spec-review}/SKILL.md +726 -726
  428. package/skills/video-production/SKILL.md +52 -52
  429. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  430. package/skills/video-production/templates/production-plan.md +104 -104
  431. package/vibe/config.json +29 -29
  432. package/vibe/constitution.md +227 -227
  433. package/vibe/rules/principles/communication-guide.md +98 -98
  434. package/vibe/rules/principles/development-philosophy.md +52 -52
  435. package/vibe/rules/principles/quick-start.md +102 -102
  436. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  437. package/vibe/rules/quality/checklist.md +276 -276
  438. package/vibe/rules/quality/performance.md +236 -236
  439. package/vibe/rules/quality/testing-strategy.md +440 -440
  440. package/vibe/rules/standards/anti-patterns.md +541 -541
  441. package/vibe/rules/standards/code-structure.md +291 -291
  442. package/vibe/rules/standards/complexity-metrics.md +313 -313
  443. package/vibe/rules/standards/git-workflow.md +237 -237
  444. package/vibe/rules/standards/naming-conventions.md +198 -198
  445. package/vibe/rules/standards/security.md +305 -305
  446. package/vibe/rules/writing/document-style.md +74 -74
  447. package/vibe/setup.sh +31 -31
  448. package/vibe/templates/claudemd-template.md +74 -74
  449. package/vibe/templates/constitution-template.md +267 -267
  450. package/vibe/templates/contract-backend-template.md +526 -526
  451. package/vibe/templates/contract-frontend-template.md +599 -599
  452. package/vibe/templates/feature-template.md +96 -96
  453. package/vibe/templates/plan-template.md +194 -194
  454. package/vibe/templates/spec-template.md +221 -221
  455. package/vibe/ui-ux-data/charts.csv +26 -26
  456. package/vibe/ui-ux-data/colors.csv +97 -97
  457. package/vibe/ui-ux-data/icons.csv +101 -101
  458. package/vibe/ui-ux-data/landing.csv +31 -31
  459. package/vibe/ui-ux-data/products.csv +96 -96
  460. package/vibe/ui-ux-data/react-performance.csv +45 -45
  461. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  462. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  463. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  464. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  465. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  466. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  467. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  468. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  469. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  470. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  471. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  472. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  473. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  474. package/vibe/ui-ux-data/styles.csv +68 -68
  475. package/vibe/ui-ux-data/typography.csv +57 -57
  476. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  477. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  478. package/vibe/ui-ux-data/version.json +31 -31
  479. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -16,92 +16,92 @@ export class SessionRAGStore {
16
16
  // Schema Initialization
17
17
  // ==========================================================================
18
18
  initializeTables() {
19
- this.db.exec(`
20
- CREATE TABLE IF NOT EXISTS session_decisions (
21
- id INTEGER PRIMARY KEY AUTOINCREMENT,
22
- sessionId TEXT,
23
- title TEXT NOT NULL,
24
- description TEXT,
25
- rationale TEXT,
26
- alternatives TEXT,
27
- impact TEXT,
28
- status TEXT DEFAULT 'active' CHECK(status IN ('active','superseded','cancelled')),
29
- priority INTEGER DEFAULT 1,
30
- relatedFiles TEXT,
31
- tags TEXT,
32
- timestamp TEXT NOT NULL
33
- );
34
-
35
- CREATE INDEX IF NOT EXISTS idx_sdec_session ON session_decisions(sessionId);
36
- CREATE INDEX IF NOT EXISTS idx_sdec_status ON session_decisions(status);
37
- CREATE INDEX IF NOT EXISTS idx_sdec_priority ON session_decisions(priority);
38
- CREATE INDEX IF NOT EXISTS idx_sdec_timestamp ON session_decisions(timestamp);
19
+ this.db.exec(`
20
+ CREATE TABLE IF NOT EXISTS session_decisions (
21
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
22
+ sessionId TEXT,
23
+ title TEXT NOT NULL,
24
+ description TEXT,
25
+ rationale TEXT,
26
+ alternatives TEXT,
27
+ impact TEXT,
28
+ status TEXT DEFAULT 'active' CHECK(status IN ('active','superseded','cancelled')),
29
+ priority INTEGER DEFAULT 1,
30
+ relatedFiles TEXT,
31
+ tags TEXT,
32
+ timestamp TEXT NOT NULL
33
+ );
34
+
35
+ CREATE INDEX IF NOT EXISTS idx_sdec_session ON session_decisions(sessionId);
36
+ CREATE INDEX IF NOT EXISTS idx_sdec_status ON session_decisions(status);
37
+ CREATE INDEX IF NOT EXISTS idx_sdec_priority ON session_decisions(priority);
38
+ CREATE INDEX IF NOT EXISTS idx_sdec_timestamp ON session_decisions(timestamp);
39
39
  `);
40
- this.db.exec(`
41
- CREATE TABLE IF NOT EXISTS session_constraints (
42
- id INTEGER PRIMARY KEY AUTOINCREMENT,
43
- sessionId TEXT,
44
- title TEXT NOT NULL,
45
- description TEXT,
46
- type TEXT NOT NULL CHECK(type IN ('technical','business','resource','quality')),
47
- severity TEXT DEFAULT 'medium' CHECK(severity IN ('low','medium','high','critical')),
48
- scope TEXT,
49
- timestamp TEXT NOT NULL
50
- );
51
-
52
- CREATE INDEX IF NOT EXISTS idx_scon_session ON session_constraints(sessionId);
53
- CREATE INDEX IF NOT EXISTS idx_scon_type ON session_constraints(type);
54
- CREATE INDEX IF NOT EXISTS idx_scon_severity ON session_constraints(severity);
40
+ this.db.exec(`
41
+ CREATE TABLE IF NOT EXISTS session_constraints (
42
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
43
+ sessionId TEXT,
44
+ title TEXT NOT NULL,
45
+ description TEXT,
46
+ type TEXT NOT NULL CHECK(type IN ('technical','business','resource','quality')),
47
+ severity TEXT DEFAULT 'medium' CHECK(severity IN ('low','medium','high','critical')),
48
+ scope TEXT,
49
+ timestamp TEXT NOT NULL
50
+ );
51
+
52
+ CREATE INDEX IF NOT EXISTS idx_scon_session ON session_constraints(sessionId);
53
+ CREATE INDEX IF NOT EXISTS idx_scon_type ON session_constraints(type);
54
+ CREATE INDEX IF NOT EXISTS idx_scon_severity ON session_constraints(severity);
55
55
  `);
56
- this.db.exec(`
57
- CREATE TABLE IF NOT EXISTS session_goals (
58
- id INTEGER PRIMARY KEY AUTOINCREMENT,
59
- sessionId TEXT,
60
- parentId INTEGER,
61
- title TEXT NOT NULL,
62
- description TEXT,
63
- status TEXT DEFAULT 'active' CHECK(status IN ('active','completed','blocked','cancelled')),
64
- priority INTEGER DEFAULT 1,
65
- progressPercent INTEGER DEFAULT 0 CHECK(progressPercent >= 0 AND progressPercent <= 100),
66
- successCriteria TEXT,
67
- timestamp TEXT NOT NULL,
68
- completedAt TEXT,
69
- FOREIGN KEY(parentId) REFERENCES session_goals(id)
70
- );
71
-
72
- CREATE INDEX IF NOT EXISTS idx_sgoal_session ON session_goals(sessionId);
73
- CREATE INDEX IF NOT EXISTS idx_sgoal_status ON session_goals(status);
74
- CREATE INDEX IF NOT EXISTS idx_sgoal_priority ON session_goals(priority);
75
- CREATE INDEX IF NOT EXISTS idx_sgoal_parent ON session_goals(parentId);
56
+ this.db.exec(`
57
+ CREATE TABLE IF NOT EXISTS session_goals (
58
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
59
+ sessionId TEXT,
60
+ parentId INTEGER,
61
+ title TEXT NOT NULL,
62
+ description TEXT,
63
+ status TEXT DEFAULT 'active' CHECK(status IN ('active','completed','blocked','cancelled')),
64
+ priority INTEGER DEFAULT 1,
65
+ progressPercent INTEGER DEFAULT 0 CHECK(progressPercent >= 0 AND progressPercent <= 100),
66
+ successCriteria TEXT,
67
+ timestamp TEXT NOT NULL,
68
+ completedAt TEXT,
69
+ FOREIGN KEY(parentId) REFERENCES session_goals(id)
70
+ );
71
+
72
+ CREATE INDEX IF NOT EXISTS idx_sgoal_session ON session_goals(sessionId);
73
+ CREATE INDEX IF NOT EXISTS idx_sgoal_status ON session_goals(status);
74
+ CREATE INDEX IF NOT EXISTS idx_sgoal_priority ON session_goals(priority);
75
+ CREATE INDEX IF NOT EXISTS idx_sgoal_parent ON session_goals(parentId);
76
76
  `);
77
- this.db.exec(`
78
- CREATE TABLE IF NOT EXISTS session_evidence (
79
- id INTEGER PRIMARY KEY AUTOINCREMENT,
80
- sessionId TEXT,
81
- type TEXT NOT NULL CHECK(type IN ('test','build','lint','coverage','hud','review')),
82
- title TEXT NOT NULL,
83
- status TEXT NOT NULL CHECK(status IN ('pass','fail','warning','info')),
84
- details TEXT,
85
- metrics TEXT,
86
- relatedGoals TEXT,
87
- timestamp TEXT NOT NULL
88
- );
89
-
90
- CREATE INDEX IF NOT EXISTS idx_sevi_session ON session_evidence(sessionId);
91
- CREATE INDEX IF NOT EXISTS idx_sevi_type ON session_evidence(type);
92
- CREATE INDEX IF NOT EXISTS idx_sevi_status ON session_evidence(status);
93
- CREATE INDEX IF NOT EXISTS idx_sevi_timestamp ON session_evidence(timestamp);
77
+ this.db.exec(`
78
+ CREATE TABLE IF NOT EXISTS session_evidence (
79
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
80
+ sessionId TEXT,
81
+ type TEXT NOT NULL CHECK(type IN ('test','build','lint','coverage','hud','review')),
82
+ title TEXT NOT NULL,
83
+ status TEXT NOT NULL CHECK(status IN ('pass','fail','warning','info')),
84
+ details TEXT,
85
+ metrics TEXT,
86
+ relatedGoals TEXT,
87
+ timestamp TEXT NOT NULL
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_sevi_session ON session_evidence(sessionId);
91
+ CREATE INDEX IF NOT EXISTS idx_sevi_type ON session_evidence(type);
92
+ CREATE INDEX IF NOT EXISTS idx_sevi_status ON session_evidence(status);
93
+ CREATE INDEX IF NOT EXISTS idx_sevi_timestamp ON session_evidence(timestamp);
94
94
  `);
95
95
  // Phase 5: Conversation history table
96
- this.db.exec(`
97
- CREATE TABLE IF NOT EXISTS conversation_history (
98
- id INTEGER PRIMARY KEY AUTOINCREMENT,
99
- chatId TEXT NOT NULL,
100
- role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),
101
- content TEXT NOT NULL,
102
- timestamp TEXT NOT NULL DEFAULT (datetime('now'))
103
- );
104
- CREATE INDEX IF NOT EXISTS idx_conv_chat_time ON conversation_history(chatId, timestamp);
96
+ this.db.exec(`
97
+ CREATE TABLE IF NOT EXISTS conversation_history (
98
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
99
+ chatId TEXT NOT NULL,
100
+ role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),
101
+ content TEXT NOT NULL,
102
+ timestamp TEXT NOT NULL DEFAULT (datetime('now'))
103
+ );
104
+ CREATE INDEX IF NOT EXISTS idx_conv_chat_time ON conversation_history(chatId, timestamp);
105
105
  `);
106
106
  // Schema migration: add taskId column to all session tables
107
107
  const tables = [
@@ -125,84 +125,84 @@ export class SessionRAGStore {
125
125
  return;
126
126
  try {
127
127
  // Decisions FTS
128
- this.db.exec(`
129
- CREATE VIRTUAL TABLE IF NOT EXISTS session_decisions_fts
130
- USING fts5(title, description, rationale, content=session_decisions, content_rowid=id);
131
-
132
- CREATE TRIGGER IF NOT EXISTS sdec_fts_ai AFTER INSERT ON session_decisions BEGIN
133
- INSERT INTO session_decisions_fts(rowid, title, description, rationale)
134
- VALUES (new.id, new.title, new.description, new.rationale);
135
- END;
136
- CREATE TRIGGER IF NOT EXISTS sdec_fts_ad AFTER DELETE ON session_decisions BEGIN
137
- INSERT INTO session_decisions_fts(session_decisions_fts, rowid, title, description, rationale)
138
- VALUES('delete', old.id, old.title, old.description, old.rationale);
139
- END;
140
- CREATE TRIGGER IF NOT EXISTS sdec_fts_au AFTER UPDATE ON session_decisions BEGIN
141
- INSERT INTO session_decisions_fts(session_decisions_fts, rowid, title, description, rationale)
142
- VALUES('delete', old.id, old.title, old.description, old.rationale);
143
- INSERT INTO session_decisions_fts(rowid, title, description, rationale)
144
- VALUES (new.id, new.title, new.description, new.rationale);
145
- END;
128
+ this.db.exec(`
129
+ CREATE VIRTUAL TABLE IF NOT EXISTS session_decisions_fts
130
+ USING fts5(title, description, rationale, content=session_decisions, content_rowid=id);
131
+
132
+ CREATE TRIGGER IF NOT EXISTS sdec_fts_ai AFTER INSERT ON session_decisions BEGIN
133
+ INSERT INTO session_decisions_fts(rowid, title, description, rationale)
134
+ VALUES (new.id, new.title, new.description, new.rationale);
135
+ END;
136
+ CREATE TRIGGER IF NOT EXISTS sdec_fts_ad AFTER DELETE ON session_decisions BEGIN
137
+ INSERT INTO session_decisions_fts(session_decisions_fts, rowid, title, description, rationale)
138
+ VALUES('delete', old.id, old.title, old.description, old.rationale);
139
+ END;
140
+ CREATE TRIGGER IF NOT EXISTS sdec_fts_au AFTER UPDATE ON session_decisions BEGIN
141
+ INSERT INTO session_decisions_fts(session_decisions_fts, rowid, title, description, rationale)
142
+ VALUES('delete', old.id, old.title, old.description, old.rationale);
143
+ INSERT INTO session_decisions_fts(rowid, title, description, rationale)
144
+ VALUES (new.id, new.title, new.description, new.rationale);
145
+ END;
146
146
  `);
147
147
  // Constraints FTS
148
- this.db.exec(`
149
- CREATE VIRTUAL TABLE IF NOT EXISTS session_constraints_fts
150
- USING fts5(title, description, content=session_constraints, content_rowid=id);
151
-
152
- CREATE TRIGGER IF NOT EXISTS scon_fts_ai AFTER INSERT ON session_constraints BEGIN
153
- INSERT INTO session_constraints_fts(rowid, title, description)
154
- VALUES (new.id, new.title, new.description);
155
- END;
156
- CREATE TRIGGER IF NOT EXISTS scon_fts_ad AFTER DELETE ON session_constraints BEGIN
157
- INSERT INTO session_constraints_fts(session_constraints_fts, rowid, title, description)
158
- VALUES('delete', old.id, old.title, old.description);
159
- END;
160
- CREATE TRIGGER IF NOT EXISTS scon_fts_au AFTER UPDATE ON session_constraints BEGIN
161
- INSERT INTO session_constraints_fts(session_constraints_fts, rowid, title, description)
162
- VALUES('delete', old.id, old.title, old.description);
163
- INSERT INTO session_constraints_fts(rowid, title, description)
164
- VALUES (new.id, new.title, new.description);
165
- END;
148
+ this.db.exec(`
149
+ CREATE VIRTUAL TABLE IF NOT EXISTS session_constraints_fts
150
+ USING fts5(title, description, content=session_constraints, content_rowid=id);
151
+
152
+ CREATE TRIGGER IF NOT EXISTS scon_fts_ai AFTER INSERT ON session_constraints BEGIN
153
+ INSERT INTO session_constraints_fts(rowid, title, description)
154
+ VALUES (new.id, new.title, new.description);
155
+ END;
156
+ CREATE TRIGGER IF NOT EXISTS scon_fts_ad AFTER DELETE ON session_constraints BEGIN
157
+ INSERT INTO session_constraints_fts(session_constraints_fts, rowid, title, description)
158
+ VALUES('delete', old.id, old.title, old.description);
159
+ END;
160
+ CREATE TRIGGER IF NOT EXISTS scon_fts_au AFTER UPDATE ON session_constraints BEGIN
161
+ INSERT INTO session_constraints_fts(session_constraints_fts, rowid, title, description)
162
+ VALUES('delete', old.id, old.title, old.description);
163
+ INSERT INTO session_constraints_fts(rowid, title, description)
164
+ VALUES (new.id, new.title, new.description);
165
+ END;
166
166
  `);
167
167
  // Goals FTS
168
- this.db.exec(`
169
- CREATE VIRTUAL TABLE IF NOT EXISTS session_goals_fts
170
- USING fts5(title, description, content=session_goals, content_rowid=id);
171
-
172
- CREATE TRIGGER IF NOT EXISTS sgoal_fts_ai AFTER INSERT ON session_goals BEGIN
173
- INSERT INTO session_goals_fts(rowid, title, description)
174
- VALUES (new.id, new.title, new.description);
175
- END;
176
- CREATE TRIGGER IF NOT EXISTS sgoal_fts_ad AFTER DELETE ON session_goals BEGIN
177
- INSERT INTO session_goals_fts(session_goals_fts, rowid, title, description)
178
- VALUES('delete', old.id, old.title, old.description);
179
- END;
180
- CREATE TRIGGER IF NOT EXISTS sgoal_fts_au AFTER UPDATE ON session_goals BEGIN
181
- INSERT INTO session_goals_fts(session_goals_fts, rowid, title, description)
182
- VALUES('delete', old.id, old.title, old.description);
183
- INSERT INTO session_goals_fts(rowid, title, description)
184
- VALUES (new.id, new.title, new.description);
185
- END;
168
+ this.db.exec(`
169
+ CREATE VIRTUAL TABLE IF NOT EXISTS session_goals_fts
170
+ USING fts5(title, description, content=session_goals, content_rowid=id);
171
+
172
+ CREATE TRIGGER IF NOT EXISTS sgoal_fts_ai AFTER INSERT ON session_goals BEGIN
173
+ INSERT INTO session_goals_fts(rowid, title, description)
174
+ VALUES (new.id, new.title, new.description);
175
+ END;
176
+ CREATE TRIGGER IF NOT EXISTS sgoal_fts_ad AFTER DELETE ON session_goals BEGIN
177
+ INSERT INTO session_goals_fts(session_goals_fts, rowid, title, description)
178
+ VALUES('delete', old.id, old.title, old.description);
179
+ END;
180
+ CREATE TRIGGER IF NOT EXISTS sgoal_fts_au AFTER UPDATE ON session_goals BEGIN
181
+ INSERT INTO session_goals_fts(session_goals_fts, rowid, title, description)
182
+ VALUES('delete', old.id, old.title, old.description);
183
+ INSERT INTO session_goals_fts(rowid, title, description)
184
+ VALUES (new.id, new.title, new.description);
185
+ END;
186
186
  `);
187
187
  // Evidence FTS
188
- this.db.exec(`
189
- CREATE VIRTUAL TABLE IF NOT EXISTS session_evidence_fts
190
- USING fts5(title, details, content=session_evidence, content_rowid=id);
191
-
192
- CREATE TRIGGER IF NOT EXISTS sevi_fts_ai AFTER INSERT ON session_evidence BEGIN
193
- INSERT INTO session_evidence_fts(rowid, title, details)
194
- VALUES (new.id, new.title, new.details);
195
- END;
196
- CREATE TRIGGER IF NOT EXISTS sevi_fts_ad AFTER DELETE ON session_evidence BEGIN
197
- INSERT INTO session_evidence_fts(session_evidence_fts, rowid, title, details)
198
- VALUES('delete', old.id, old.title, old.details);
199
- END;
200
- CREATE TRIGGER IF NOT EXISTS sevi_fts_au AFTER UPDATE ON session_evidence BEGIN
201
- INSERT INTO session_evidence_fts(session_evidence_fts, rowid, title, details)
202
- VALUES('delete', old.id, old.title, old.details);
203
- INSERT INTO session_evidence_fts(rowid, title, details)
204
- VALUES (new.id, new.title, new.details);
205
- END;
188
+ this.db.exec(`
189
+ CREATE VIRTUAL TABLE IF NOT EXISTS session_evidence_fts
190
+ USING fts5(title, details, content=session_evidence, content_rowid=id);
191
+
192
+ CREATE TRIGGER IF NOT EXISTS sevi_fts_ai AFTER INSERT ON session_evidence BEGIN
193
+ INSERT INTO session_evidence_fts(rowid, title, details)
194
+ VALUES (new.id, new.title, new.details);
195
+ END;
196
+ CREATE TRIGGER IF NOT EXISTS sevi_fts_ad AFTER DELETE ON session_evidence BEGIN
197
+ INSERT INTO session_evidence_fts(session_evidence_fts, rowid, title, details)
198
+ VALUES('delete', old.id, old.title, old.details);
199
+ END;
200
+ CREATE TRIGGER IF NOT EXISTS sevi_fts_au AFTER UPDATE ON session_evidence BEGIN
201
+ INSERT INTO session_evidence_fts(session_evidence_fts, rowid, title, details)
202
+ VALUES('delete', old.id, old.title, old.details);
203
+ INSERT INTO session_evidence_fts(rowid, title, details)
204
+ VALUES (new.id, new.title, new.details);
205
+ END;
206
206
  `);
207
207
  }
208
208
  catch {
@@ -214,9 +214,9 @@ export class SessionRAGStore {
214
214
  // ==========================================================================
215
215
  addDecision(input) {
216
216
  const timestamp = new Date().toISOString();
217
- const stmt = this.db.prepare(`
218
- INSERT INTO session_decisions (sessionId, taskId, title, description, rationale, alternatives, impact, status, priority, relatedFiles, tags, timestamp)
219
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
217
+ const stmt = this.db.prepare(`
218
+ INSERT INTO session_decisions (sessionId, taskId, title, description, rationale, alternatives, impact, status, priority, relatedFiles, tags, timestamp)
219
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
220
220
  `);
221
221
  const result = stmt.run(input.sessionId || null, input.taskId || null, input.title, input.description || null, input.rationale || null, input.alternatives ? JSON.stringify(input.alternatives) : null, input.impact || null, input.status || 'active', input.priority ?? 1, input.relatedFiles ? JSON.stringify(input.relatedFiles) : null, input.tags ? JSON.stringify(input.tags) : null, timestamp);
222
222
  return result.lastInsertRowid;
@@ -289,13 +289,13 @@ export class SessionRAGStore {
289
289
  searchDecisions(query, limit = 20) {
290
290
  if (this.fts5Available) {
291
291
  try {
292
- const rows = this.db.prepare(`
293
- SELECT d.*, bm25(session_decisions_fts) as rank
294
- FROM session_decisions_fts fts
295
- JOIN session_decisions d ON d.id = fts.rowid
296
- WHERE session_decisions_fts MATCH ?
297
- ORDER BY rank
298
- LIMIT ?
292
+ const rows = this.db.prepare(`
293
+ SELECT d.*, bm25(session_decisions_fts) as rank
294
+ FROM session_decisions_fts fts
295
+ JOIN session_decisions d ON d.id = fts.rowid
296
+ WHERE session_decisions_fts MATCH ?
297
+ ORDER BY rank
298
+ LIMIT ?
299
299
  `).all(MemoryStorage.sanitizeFTS5Query(query), limit);
300
300
  return rows.map(this.rowToDecision);
301
301
  }
@@ -304,10 +304,10 @@ export class SessionRAGStore {
304
304
  }
305
305
  }
306
306
  const pattern = `%${query}%`;
307
- const rows = this.db.prepare(`
308
- SELECT * FROM session_decisions
309
- WHERE title LIKE ? OR description LIKE ? OR rationale LIKE ?
310
- ORDER BY priority DESC, timestamp DESC LIMIT ?
307
+ const rows = this.db.prepare(`
308
+ SELECT * FROM session_decisions
309
+ WHERE title LIKE ? OR description LIKE ? OR rationale LIKE ?
310
+ ORDER BY priority DESC, timestamp DESC LIMIT ?
311
311
  `).all(pattern, pattern, pattern, limit);
312
312
  return rows.map(this.rowToDecision);
313
313
  }
@@ -336,9 +336,9 @@ export class SessionRAGStore {
336
336
  // ==========================================================================
337
337
  addConstraint(input) {
338
338
  const timestamp = new Date().toISOString();
339
- const stmt = this.db.prepare(`
340
- INSERT INTO session_constraints (sessionId, taskId, title, description, type, severity, scope, timestamp)
341
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
339
+ const stmt = this.db.prepare(`
340
+ INSERT INTO session_constraints (sessionId, taskId, title, description, type, severity, scope, timestamp)
341
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
342
342
  `);
343
343
  const result = stmt.run(input.sessionId || null, input.taskId || null, input.title, input.description || null, input.type, input.severity || 'medium', input.scope || null, timestamp);
344
344
  return result.lastInsertRowid;
@@ -399,13 +399,13 @@ export class SessionRAGStore {
399
399
  searchConstraints(query, limit = 20) {
400
400
  if (this.fts5Available) {
401
401
  try {
402
- const rows = this.db.prepare(`
403
- SELECT c.*, bm25(session_constraints_fts) as rank
404
- FROM session_constraints_fts fts
405
- JOIN session_constraints c ON c.id = fts.rowid
406
- WHERE session_constraints_fts MATCH ?
407
- ORDER BY rank
408
- LIMIT ?
402
+ const rows = this.db.prepare(`
403
+ SELECT c.*, bm25(session_constraints_fts) as rank
404
+ FROM session_constraints_fts fts
405
+ JOIN session_constraints c ON c.id = fts.rowid
406
+ WHERE session_constraints_fts MATCH ?
407
+ ORDER BY rank
408
+ LIMIT ?
409
409
  `).all(MemoryStorage.sanitizeFTS5Query(query), limit);
410
410
  return rows.map(this.rowToConstraint);
411
411
  }
@@ -414,10 +414,10 @@ export class SessionRAGStore {
414
414
  }
415
415
  }
416
416
  const pattern = `%${query}%`;
417
- const rows = this.db.prepare(`
418
- SELECT * FROM session_constraints
419
- WHERE title LIKE ? OR description LIKE ?
420
- ORDER BY timestamp DESC LIMIT ?
417
+ const rows = this.db.prepare(`
418
+ SELECT * FROM session_constraints
419
+ WHERE title LIKE ? OR description LIKE ?
420
+ ORDER BY timestamp DESC LIMIT ?
421
421
  `).all(pattern, pattern, limit);
422
422
  return rows.map(this.rowToConstraint);
423
423
  }
@@ -442,9 +442,9 @@ export class SessionRAGStore {
442
442
  // ==========================================================================
443
443
  addGoal(input) {
444
444
  const timestamp = new Date().toISOString();
445
- const stmt = this.db.prepare(`
446
- INSERT INTO session_goals (sessionId, taskId, parentId, title, description, status, priority, progressPercent, successCriteria, timestamp, completedAt)
447
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
445
+ const stmt = this.db.prepare(`
446
+ INSERT INTO session_goals (sessionId, taskId, parentId, title, description, status, priority, progressPercent, successCriteria, timestamp, completedAt)
447
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
448
448
  `);
449
449
  const result = stmt.run(input.sessionId || null, input.taskId || null, input.parentId || null, input.title, input.description || null, input.status || 'active', input.priority ?? 1, input.progressPercent ?? 0, input.successCriteria ? JSON.stringify(input.successCriteria) : null, timestamp, null);
450
450
  return result.lastInsertRowid;
@@ -511,41 +511,41 @@ export class SessionRAGStore {
511
511
  return rows.map(this.rowToGoal);
512
512
  }
513
513
  getActiveGoals(limit = 10) {
514
- const rows = this.db.prepare(`
515
- SELECT * FROM session_goals
516
- WHERE status = 'active'
517
- ORDER BY priority DESC, timestamp DESC
518
- LIMIT ?
514
+ const rows = this.db.prepare(`
515
+ SELECT * FROM session_goals
516
+ WHERE status = 'active'
517
+ ORDER BY priority DESC, timestamp DESC
518
+ LIMIT ?
519
519
  `).all(limit);
520
520
  return rows.map(this.rowToGoal);
521
521
  }
522
522
  getGoalHierarchy(rootId) {
523
523
  if (rootId) {
524
524
  // Get root + all descendants (max 3 levels)
525
- const rows = this.db.prepare(`
526
- SELECT * FROM session_goals
527
- WHERE id = ? OR parentId = ?
528
- ORDER BY parentId NULLS FIRST, priority DESC
525
+ const rows = this.db.prepare(`
526
+ SELECT * FROM session_goals
527
+ WHERE id = ? OR parentId = ?
528
+ ORDER BY parentId NULLS FIRST, priority DESC
529
529
  `).all(rootId, rootId);
530
530
  return rows.map(this.rowToGoal);
531
531
  }
532
532
  // Get all top-level goals with children
533
- const rows = this.db.prepare(`
534
- SELECT * FROM session_goals
535
- ORDER BY parentId NULLS FIRST, priority DESC, timestamp DESC
533
+ const rows = this.db.prepare(`
534
+ SELECT * FROM session_goals
535
+ ORDER BY parentId NULLS FIRST, priority DESC, timestamp DESC
536
536
  `).all();
537
537
  return rows.map(this.rowToGoal);
538
538
  }
539
539
  searchGoals(query, limit = 20) {
540
540
  if (this.fts5Available) {
541
541
  try {
542
- const rows = this.db.prepare(`
543
- SELECT g.*, bm25(session_goals_fts) as rank
544
- FROM session_goals_fts fts
545
- JOIN session_goals g ON g.id = fts.rowid
546
- WHERE session_goals_fts MATCH ?
547
- ORDER BY rank
548
- LIMIT ?
542
+ const rows = this.db.prepare(`
543
+ SELECT g.*, bm25(session_goals_fts) as rank
544
+ FROM session_goals_fts fts
545
+ JOIN session_goals g ON g.id = fts.rowid
546
+ WHERE session_goals_fts MATCH ?
547
+ ORDER BY rank
548
+ LIMIT ?
549
549
  `).all(MemoryStorage.sanitizeFTS5Query(query), limit);
550
550
  return rows.map(this.rowToGoal);
551
551
  }
@@ -554,10 +554,10 @@ export class SessionRAGStore {
554
554
  }
555
555
  }
556
556
  const pattern = `%${query}%`;
557
- const rows = this.db.prepare(`
558
- SELECT * FROM session_goals
559
- WHERE title LIKE ? OR description LIKE ?
560
- ORDER BY priority DESC, timestamp DESC LIMIT ?
557
+ const rows = this.db.prepare(`
558
+ SELECT * FROM session_goals
559
+ WHERE title LIKE ? OR description LIKE ?
560
+ ORDER BY priority DESC, timestamp DESC LIMIT ?
561
561
  `).all(pattern, pattern, limit);
562
562
  return rows.map(this.rowToGoal);
563
563
  }
@@ -585,9 +585,9 @@ export class SessionRAGStore {
585
585
  // ==========================================================================
586
586
  addEvidence(input) {
587
587
  const timestamp = new Date().toISOString();
588
- const stmt = this.db.prepare(`
589
- INSERT INTO session_evidence (sessionId, taskId, type, title, status, details, metrics, relatedGoals, timestamp)
590
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
588
+ const stmt = this.db.prepare(`
589
+ INSERT INTO session_evidence (sessionId, taskId, type, title, status, details, metrics, relatedGoals, timestamp)
590
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
591
591
  `);
592
592
  const result = stmt.run(input.sessionId || null, input.taskId || null, input.type, input.title, input.status, input.details ? JSON.stringify(input.details) : null, input.metrics ? JSON.stringify(input.metrics) : null, input.relatedGoals ? JSON.stringify(input.relatedGoals) : null, timestamp);
593
593
  return result.lastInsertRowid;
@@ -617,23 +617,23 @@ export class SessionRAGStore {
617
617
  return rows.map(this.rowToEvidence);
618
618
  }
619
619
  getRecentEvidence(limit = 10) {
620
- const rows = this.db.prepare(`
621
- SELECT * FROM session_evidence
622
- ORDER BY timestamp DESC
623
- LIMIT ?
620
+ const rows = this.db.prepare(`
621
+ SELECT * FROM session_evidence
622
+ ORDER BY timestamp DESC
623
+ LIMIT ?
624
624
  `).all(limit);
625
625
  return rows.map(this.rowToEvidence);
626
626
  }
627
627
  searchEvidence(query, limit = 20) {
628
628
  if (this.fts5Available) {
629
629
  try {
630
- const rows = this.db.prepare(`
631
- SELECT e.*, bm25(session_evidence_fts) as rank
632
- FROM session_evidence_fts fts
633
- JOIN session_evidence e ON e.id = fts.rowid
634
- WHERE session_evidence_fts MATCH ?
635
- ORDER BY rank
636
- LIMIT ?
630
+ const rows = this.db.prepare(`
631
+ SELECT e.*, bm25(session_evidence_fts) as rank
632
+ FROM session_evidence_fts fts
633
+ JOIN session_evidence e ON e.id = fts.rowid
634
+ WHERE session_evidence_fts MATCH ?
635
+ ORDER BY rank
636
+ LIMIT ?
637
637
  `).all(MemoryStorage.sanitizeFTS5Query(query), limit);
638
638
  return rows.map(this.rowToEvidence);
639
639
  }
@@ -642,10 +642,10 @@ export class SessionRAGStore {
642
642
  }
643
643
  }
644
644
  const pattern = `%${query}%`;
645
- const rows = this.db.prepare(`
646
- SELECT * FROM session_evidence
647
- WHERE title LIKE ? OR details LIKE ?
648
- ORDER BY timestamp DESC LIMIT ?
645
+ const rows = this.db.prepare(`
646
+ SELECT * FROM session_evidence
647
+ WHERE title LIKE ? OR details LIKE ?
648
+ ORDER BY timestamp DESC LIMIT ?
649
649
  `).all(pattern, pattern, limit);
650
650
  return rows.map(this.rowToEvidence);
651
651
  }
@@ -13,10 +13,10 @@ export class SessionSummarizer {
13
13
  */
14
14
  saveSummary(input) {
15
15
  const timestamp = new Date().toISOString();
16
- const stmt = this.db.prepare(`
17
- INSERT OR REPLACE INTO session_summaries
18
- (sessionId, request, investigated, learned, completed, nextSteps, filesRead, filesEdited, timestamp)
19
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
16
+ const stmt = this.db.prepare(`
17
+ INSERT OR REPLACE INTO session_summaries
18
+ (sessionId, request, investigated, learned, completed, nextSteps, filesRead, filesEdited, timestamp)
19
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
20
20
  `);
21
21
  const result = stmt.run(input.sessionId, input.request || null, input.investigated || null, input.learned || null, input.completed || null, input.nextSteps || null, input.filesRead ? JSON.stringify(input.filesRead) : null, input.filesEdited ? JSON.stringify(input.filesEdited) : null, timestamp);
22
22
  return result.lastInsertRowid;
@@ -25,9 +25,9 @@ export class SessionSummarizer {
25
25
  * Get recent session summaries
26
26
  */
27
27
  getRecentSummaries(limit = 3) {
28
- const rows = this.db.prepare(`
29
- SELECT * FROM session_summaries
30
- ORDER BY timestamp DESC LIMIT ?
28
+ const rows = this.db.prepare(`
29
+ SELECT * FROM session_summaries
30
+ ORDER BY timestamp DESC LIMIT ?
31
31
  `).all(limit);
32
32
  return rows.map(this.rowToSummary);
33
33
  }
@@ -35,8 +35,8 @@ export class SessionSummarizer {
35
35
  * Get summary for a specific session
36
36
  */
37
37
  getSummary(sessionId) {
38
- const row = this.db.prepare(`
39
- SELECT * FROM session_summaries WHERE sessionId = ?
38
+ const row = this.db.prepare(`
39
+ SELECT * FROM session_summaries WHERE sessionId = ?
40
40
  `).get(sessionId);
41
41
  return row ? this.rowToSummary(row) : null;
42
42
  }
@@ -20,7 +20,7 @@ describe('SkillTelemetry', () => {
20
20
  });
21
21
  it('should append events as JSONL', () => {
22
22
  telemetry.logSuccess('vibe.run', 12.5, '2.7.17');
23
- telemetry.logError('vibe.spec', 3.2, '2.7.17');
23
+ telemetry.logError('vibe-spec', 3.2, '2.7.17');
24
24
  const content = readFileSync(telemetry.getLogPath(), 'utf-8');
25
25
  const events = parseJsonl(content);
26
26
  expect(events).toHaveLength(2);
@@ -28,7 +28,7 @@ describe('SkillTelemetry', () => {
28
28
  expect(events[0].outcome).toBe('success');
29
29
  expect(events[0].v).toBe(1);
30
30
  expect(events[0].os).toBe(process.platform);
31
- expect(events[1].skill).toBe('vibe.spec');
31
+ expect(events[1].skill).toBe('vibe-spec');
32
32
  expect(events[1].outcome).toBe('error');
33
33
  });
34
34
  it('should include ISO timestamp', () => {
@@ -55,7 +55,7 @@ describe('SkillTelemetry', () => {
55
55
  telemetry.logSuccess('vibe.run', 10, '1.0.0');
56
56
  telemetry.logSuccess('vibe.run', 20, '1.0.0');
57
57
  telemetry.logError('vibe.run', 5, '1.0.0');
58
- telemetry.logSuccess('vibe.spec', 3, '1.0.0');
58
+ telemetry.logSuccess('vibe-spec', 3, '1.0.0');
59
59
  const summary = telemetry.summarize();
60
60
  expect(summary).toHaveLength(2);
61
61
  const vibeRun = summary.find(s => s.skill === 'vibe.run');
@@ -63,7 +63,7 @@ describe('SkillTelemetry', () => {
63
63
  expect(vibeRun?.successCount).toBe(2);
64
64
  expect(vibeRun?.errorCount).toBe(1);
65
65
  expect(vibeRun?.avgDurationS).toBeCloseTo(11.7, 0);
66
- const vibeSpec = summary.find(s => s.skill === 'vibe.spec');
66
+ const vibeSpec = summary.find(s => s.skill === 'vibe-spec');
67
67
  expect(vibeSpec?.count).toBe(1);
68
68
  });
69
69
  it('should sort by count descending', () => {