@su-record/vibe 2.9.32 → 2.9.34

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 (487) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +109 -109
  3. package/LICENSE +21 -21
  4. package/README.en.md +220 -220
  5. package/README.md +171 -171
  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.contract.md +105 -105
  79. package/commands/vibe.docs.md +33 -33
  80. package/commands/vibe.event.md +163 -163
  81. package/commands/vibe.figma.md +600 -600
  82. package/commands/vibe.harness.md +177 -177
  83. package/commands/vibe.regress.md +73 -73
  84. package/commands/vibe.review.md +624 -624
  85. package/commands/vibe.run.md +1946 -1946
  86. package/commands/vibe.scaffold.md +195 -195
  87. package/commands/vibe.spec.md +577 -577
  88. package/commands/vibe.test.md +49 -49
  89. package/commands/vibe.trace.md +276 -276
  90. package/commands/vibe.utils.md +413 -413
  91. package/commands/vibe.verify.md +572 -572
  92. package/dist/cli/collaborator.js +52 -52
  93. package/dist/cli/commands/codex-proxy.js +15 -15
  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/info.d.ts.map +1 -1
  98. package/dist/cli/commands/info.js +48 -46
  99. package/dist/cli/commands/info.js.map +1 -1
  100. package/dist/cli/commands/init.d.ts +6 -3
  101. package/dist/cli/commands/init.d.ts.map +1 -1
  102. package/dist/cli/commands/init.js +60 -30
  103. package/dist/cli/commands/init.js.map +1 -1
  104. package/dist/cli/commands/remove.js +14 -14
  105. package/dist/cli/commands/sentinel.js +27 -27
  106. package/dist/cli/commands/skills.js +5 -5
  107. package/dist/cli/commands/slack.js +10 -10
  108. package/dist/cli/commands/stats.js +6 -6
  109. package/dist/cli/commands/telegram.js +12 -12
  110. package/dist/cli/commands/update.d.ts.map +1 -1
  111. package/dist/cli/commands/update.js +29 -11
  112. package/dist/cli/commands/update.js.map +1 -1
  113. package/dist/cli/detect.js +32 -32
  114. package/dist/cli/index.js +40 -34
  115. package/dist/cli/index.js.map +1 -1
  116. package/dist/cli/llm/claude-commands.js +16 -16
  117. package/dist/cli/llm/config.js +18 -18
  118. package/dist/cli/llm/gemini-commands.js +16 -16
  119. package/dist/cli/llm/gpt-commands.js +19 -19
  120. package/dist/cli/llm/help.js +21 -21
  121. package/dist/cli/postinstall/cursor-agents.js +32 -32
  122. package/dist/cli/postinstall/cursor-rules.js +83 -83
  123. package/dist/cli/postinstall/cursor-skills.js +743 -743
  124. package/dist/cli/postinstall/main.d.ts.map +1 -1
  125. package/dist/cli/postinstall/main.js +15 -1
  126. package/dist/cli/postinstall/main.js.map +1 -1
  127. package/dist/cli/setup/ProjectSetup.d.ts +25 -6
  128. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  129. package/dist/cli/setup/ProjectSetup.js +132 -80
  130. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  131. package/dist/cli/setup/Provisioner.js +42 -42
  132. package/dist/cli/setup.d.ts +1 -1
  133. package/dist/cli/setup.d.ts.map +1 -1
  134. package/dist/cli/setup.js +1 -1
  135. package/dist/cli/setup.js.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/PythonParser.js +108 -108
  139. package/dist/infra/lib/ReviewRace.js +96 -96
  140. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  141. package/dist/infra/lib/SkillQualityGate.js +9 -9
  142. package/dist/infra/lib/SkillRepository.js +159 -159
  143. package/dist/infra/lib/UltraQA.js +99 -99
  144. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  145. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  146. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  147. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  148. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  149. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  150. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  151. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  152. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  153. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  154. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  155. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  156. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  157. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  158. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  159. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  160. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  161. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  162. package/dist/infra/lib/gemini/orchestration.js +5 -5
  163. package/dist/infra/lib/gpt/orchestration.js +4 -4
  164. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  165. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  166. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  167. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  168. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  169. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  170. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  171. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  172. package/dist/infra/orchestrator/AgentManager.js +12 -12
  173. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  174. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  175. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  176. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  177. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  178. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  179. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  180. package/dist/tools/memory/getMemoryGraph.js +12 -12
  181. package/dist/tools/memory/getSessionContext.js +9 -9
  182. package/dist/tools/memory/linkMemories.js +14 -14
  183. package/dist/tools/memory/listMemories.js +4 -4
  184. package/dist/tools/memory/recallMemory.js +4 -4
  185. package/dist/tools/memory/saveMemory.js +4 -4
  186. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  187. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  188. package/dist/tools/semantic/astGrep.test.js +6 -6
  189. package/dist/tools/spec/prdParser.test.js +171 -171
  190. package/dist/tools/spec/specGenerator.js +169 -169
  191. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  192. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  193. package/hooks/gemini-hooks.json +73 -73
  194. package/hooks/hooks.json +134 -134
  195. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  196. package/hooks/scripts/__tests__/pre-tool-guard.test.js +409 -409
  197. package/hooks/scripts/__tests__/sentinel-guard.test.js +208 -208
  198. package/hooks/scripts/auto-commit.js +97 -97
  199. package/hooks/scripts/auto-format.js +64 -64
  200. package/hooks/scripts/auto-test.js +81 -81
  201. package/hooks/scripts/code-check.js +271 -271
  202. package/hooks/scripts/codex-detect.js +46 -46
  203. package/hooks/scripts/codex-review-gate.js +80 -80
  204. package/hooks/scripts/command-log.js +32 -32
  205. package/hooks/scripts/context-save.js +353 -353
  206. package/hooks/scripts/evolution-engine.js +91 -91
  207. package/hooks/scripts/figma-extract.js +768 -768
  208. package/hooks/scripts/figma-guard.js +219 -219
  209. package/hooks/scripts/figma-refine.js +315 -315
  210. package/hooks/scripts/figma-to-scss.js +394 -394
  211. package/hooks/scripts/figma-validate.js +353 -353
  212. package/hooks/scripts/hud-status.js +321 -321
  213. package/hooks/scripts/keyword-detector.js +214 -214
  214. package/hooks/scripts/lib/dispatcher.js +95 -87
  215. package/hooks/scripts/lib/scope-from-spec.js +276 -276
  216. package/hooks/scripts/llm-orchestrate.js +645 -645
  217. package/hooks/scripts/post-edit-dispatcher.js +9 -6
  218. package/hooks/scripts/post-edit.js +35 -35
  219. package/hooks/scripts/pr-test-gate.js +52 -52
  220. package/hooks/scripts/pre-tool-dispatcher.js +9 -1
  221. package/hooks/scripts/pre-tool-guard.js +259 -259
  222. package/hooks/scripts/prompt-dispatcher.js +200 -192
  223. package/hooks/scripts/scope-guard.js +145 -145
  224. package/hooks/scripts/sentinel-guard.js +130 -130
  225. package/hooks/scripts/session-start.js +186 -186
  226. package/hooks/scripts/skill-injector.js +83 -83
  227. package/hooks/scripts/step-counter.js +45 -45
  228. package/hooks/scripts/stop-dispatcher.js +9 -6
  229. package/hooks/scripts/stop-notify.js +209 -209
  230. package/hooks/scripts/utils.js +315 -315
  231. package/languages/csharp-unity.md +515 -515
  232. package/languages/gdscript-godot.md +470 -470
  233. package/languages/ruby-rails.md +489 -489
  234. package/languages/typescript-angular.md +433 -433
  235. package/languages/typescript-astro.md +416 -416
  236. package/languages/typescript-electron.md +406 -406
  237. package/languages/typescript-nestjs.md +524 -524
  238. package/languages/typescript-svelte.md +407 -407
  239. package/languages/typescript-tauri.md +365 -365
  240. package/package.json +106 -106
  241. package/skills/agents-md/SKILL.md +121 -121
  242. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  243. package/skills/agents-md/templates/agents-md.md +36 -36
  244. package/skills/arch-guard/SKILL.md +181 -181
  245. package/skills/arch-guard/agents/detector.md +48 -48
  246. package/skills/arch-guard/agents/reporter.md +48 -48
  247. package/skills/arch-guard/agents/rule-generator.md +49 -49
  248. package/skills/arch-guard/agents/violation-checker.md +51 -51
  249. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  250. package/skills/arch-guard/frameworks/solid.md +102 -102
  251. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  252. package/skills/arch-guard/templates/arch-rules.json +47 -47
  253. package/skills/arch-guard/templates/violation-report.md +53 -53
  254. package/skills/brand-assets/SKILL.md +147 -147
  255. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  256. package/skills/brand-assets/templates/brand-guide.md +161 -161
  257. package/skills/capability-loop/SKILL.md +272 -272
  258. package/skills/capability-loop/agents/capability-designer.md +61 -61
  259. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  260. package/skills/capability-loop/agents/implementer.md +50 -50
  261. package/skills/capability-loop/agents/tester.md +53 -53
  262. package/skills/capability-loop/templates/capability-spec.md +118 -118
  263. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  264. package/skills/characterization-test/SKILL.md +207 -207
  265. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  266. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  267. package/skills/characterization-test/agents/reporter.md +50 -50
  268. package/skills/characterization-test/agents/test-writer.md +49 -49
  269. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  270. package/skills/characterization-test/templates/test-template.ts +101 -101
  271. package/skills/chub-usage/SKILL.md +139 -139
  272. package/skills/claude-md-guide/SKILL.md +351 -351
  273. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  274. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  275. package/skills/commerce-patterns/SKILL.md +64 -64
  276. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  277. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  278. package/skills/commit-push-pr/SKILL.md +77 -77
  279. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  280. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  281. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  282. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  283. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  284. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  285. package/skills/context7-usage/SKILL.md +106 -106
  286. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  287. package/skills/create-prd/SKILL.md +90 -90
  288. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  289. package/skills/create-prd/agents/prioritizer.md +60 -60
  290. package/skills/create-prd/agents/requirements-writer.md +48 -48
  291. package/skills/create-prd/agents/researcher.md +55 -55
  292. package/skills/create-prd/agents/reviewer.md +54 -54
  293. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  294. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  295. package/skills/create-prd/orchestrator.md +70 -70
  296. package/skills/create-prd/rubrics/completeness.md +58 -58
  297. package/skills/create-prd/templates/prd.md +139 -139
  298. package/skills/design-audit/SKILL.md +152 -152
  299. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  300. package/skills/design-audit/agents/performance-auditor.md +46 -46
  301. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  302. package/skills/design-audit/agents/scorer.md +47 -47
  303. package/skills/design-audit/agents/slop-detector.md +47 -47
  304. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  305. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  306. package/skills/design-audit/orchestrator.md +64 -64
  307. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  308. package/skills/design-audit/rubrics/scoring.md +63 -63
  309. package/skills/design-audit/templates/report.md +88 -88
  310. package/skills/design-critique/SKILL.md +139 -139
  311. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  312. package/skills/design-critique/templates/critique-report.md +86 -86
  313. package/skills/design-distill/SKILL.md +130 -130
  314. package/skills/design-distill/templates/design-system.md +132 -132
  315. package/skills/design-normalize/SKILL.md +133 -133
  316. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  317. package/skills/design-normalize/templates/token-audit.md +89 -89
  318. package/skills/design-polish/SKILL.md +131 -131
  319. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  320. package/skills/design-polish/templates/polish-report.md +64 -64
  321. package/skills/design-teach/SKILL.md +182 -182
  322. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  323. package/skills/design-teach/templates/design-context.json +36 -36
  324. package/skills/devlog/SKILL.md +143 -143
  325. package/skills/e2e-commerce/SKILL.md +62 -62
  326. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  327. package/skills/event-comms/SKILL.md +172 -172
  328. package/skills/event-comms/templates/email-invite.md +99 -99
  329. package/skills/event-comms/templates/sns-post.md +133 -133
  330. package/skills/event-ops/SKILL.md +207 -207
  331. package/skills/event-ops/rubrics/contingency.md +85 -85
  332. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  333. package/skills/event-planning/SKILL.md +144 -144
  334. package/skills/event-planning/rubrics/timeline.md +70 -70
  335. package/skills/event-planning/templates/event-plan.md +91 -91
  336. package/skills/exec-plan/SKILL.md +149 -149
  337. package/skills/exec-plan/agents/decomposer.md +47 -47
  338. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  339. package/skills/exec-plan/agents/estimator.md +43 -43
  340. package/skills/exec-plan/agents/validator.md +55 -55
  341. package/skills/exec-plan/orchestrator.md +70 -70
  342. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  343. package/skills/exec-plan/templates/plan.md +147 -147
  344. package/skills/git-worktree/SKILL.md +73 -73
  345. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  346. package/skills/handoff/SKILL.md +110 -110
  347. package/skills/handoff/agents/context-summarizer.md +51 -51
  348. package/skills/handoff/agents/document-writer.md +63 -63
  349. package/skills/handoff/agents/state-collector.md +53 -53
  350. package/skills/handoff/agents/verifier.md +48 -48
  351. package/skills/handoff/rubrics/completeness.md +62 -62
  352. package/skills/handoff/templates/handoff.md +107 -107
  353. package/skills/parallel-research/SKILL.md +104 -104
  354. package/skills/parallel-research/agents/best-practices.md +43 -43
  355. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  356. package/skills/parallel-research/agents/framework-docs.md +45 -45
  357. package/skills/parallel-research/agents/security-advisory.md +46 -46
  358. package/skills/parallel-research/agents/synthesizer.md +57 -57
  359. package/skills/parallel-research/experts/best-practices.md +50 -50
  360. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  361. package/skills/parallel-research/experts/framework-docs.md +65 -65
  362. package/skills/parallel-research/experts/security-advisory.md +69 -69
  363. package/skills/parallel-research/orchestrator.md +79 -79
  364. package/skills/parallel-research/templates/awesome-list.md +32 -32
  365. package/skills/parallel-research/templates/paper.md +88 -88
  366. package/skills/parallel-research/templates/synthesis.md +101 -101
  367. package/skills/prioritization-frameworks/SKILL.md +87 -87
  368. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  369. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  370. package/skills/priority-todos/SKILL.md +64 -64
  371. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  372. package/skills/priority-todos/templates/todo-board.md +59 -59
  373. package/skills/seo-checklist/SKILL.md +58 -58
  374. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  375. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  376. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  377. package/skills/techdebt/SKILL.md +124 -124
  378. package/skills/techdebt/agents/analyzer.md +50 -50
  379. package/skills/techdebt/agents/fixer.md +41 -41
  380. package/skills/techdebt/agents/reviewer.md +47 -47
  381. package/skills/techdebt/agents/scanner.md +44 -44
  382. package/skills/techdebt/orchestrator.md +70 -70
  383. package/skills/techdebt/rubrics/severity.md +51 -51
  384. package/skills/techdebt/scripts/scan.js +90 -90
  385. package/skills/techdebt/templates/report.md +86 -86
  386. package/skills/tool-fallback/SKILL.md +104 -104
  387. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  388. package/skills/typescript-advanced-types/SKILL.md +67 -67
  389. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  390. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  391. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  392. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  393. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  394. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  395. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  396. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  397. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  398. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  399. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  400. package/skills/user-personas/SKILL.md +75 -75
  401. package/skills/user-personas/rubrics/research-methods.md +56 -56
  402. package/skills/user-personas/templates/persona.md +89 -89
  403. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  404. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  405. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  406. package/skills/vibe-contract/SKILL.md +166 -166
  407. package/skills/vibe-docs/templates/architecture.md +80 -80
  408. package/skills/vibe-docs/templates/readme.md +84 -84
  409. package/skills/vibe-docs/templates/release-notes.md +74 -74
  410. package/skills/vibe-figma/SKILL.md +363 -363
  411. package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -51
  412. package/skills/vibe-figma/templates/component-index.md +126 -126
  413. package/skills/vibe-figma/templates/component-spec.md +168 -168
  414. package/skills/vibe-figma/templates/figma-handoff.md +100 -100
  415. package/skills/vibe-figma/templates/remapped-tree.md +277 -277
  416. package/skills/vibe-figma-convert/SKILL.md +235 -235
  417. package/skills/vibe-figma-convert/rubrics/conversion-rules.md +141 -141
  418. package/skills/vibe-figma-convert/templates/component.md +140 -140
  419. package/skills/vibe-figma-extract/SKILL.md +241 -241
  420. package/skills/vibe-figma-extract/rubrics/image-rules.md +157 -157
  421. package/skills/vibe-interview/SKILL.md +358 -358
  422. package/skills/vibe-interview/checklists/api.md +101 -101
  423. package/skills/vibe-interview/checklists/feature.md +88 -88
  424. package/skills/vibe-interview/checklists/library.md +95 -95
  425. package/skills/vibe-interview/checklists/mobile.md +89 -89
  426. package/skills/vibe-interview/checklists/webapp.md +97 -97
  427. package/skills/vibe-interview/checklists/website.md +99 -99
  428. package/skills/vibe-plan/SKILL.md +254 -254
  429. package/skills/vibe-regress/SKILL.md +174 -174
  430. package/skills/vibe-regress/templates/bug.md +44 -44
  431. package/skills/vibe-regress/templates/test-jest.md +29 -29
  432. package/skills/vibe-regress/templates/test-vitest.md +30 -30
  433. package/skills/vibe-spec/SKILL.md +1195 -1195
  434. package/skills/vibe-spec-review/SKILL.md +726 -726
  435. package/skills/vibe-test/SKILL.md +140 -140
  436. package/skills/video-production/SKILL.md +52 -52
  437. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  438. package/skills/video-production/templates/production-plan.md +104 -104
  439. package/vibe/config.json +29 -29
  440. package/vibe/constitution.md +227 -227
  441. package/vibe/rules/principles/communication-guide.md +98 -98
  442. package/vibe/rules/principles/development-philosophy.md +52 -52
  443. package/vibe/rules/principles/quick-start.md +102 -102
  444. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  445. package/vibe/rules/quality/checklist.md +276 -276
  446. package/vibe/rules/quality/performance.md +236 -236
  447. package/vibe/rules/quality/testing-strategy.md +440 -440
  448. package/vibe/rules/standards/anti-patterns.md +541 -541
  449. package/vibe/rules/standards/code-structure.md +291 -291
  450. package/vibe/rules/standards/complexity-metrics.md +313 -313
  451. package/vibe/rules/standards/git-workflow.md +237 -237
  452. package/vibe/rules/standards/naming-conventions.md +198 -198
  453. package/vibe/rules/standards/security.md +305 -305
  454. package/vibe/rules/writing/document-style.md +74 -74
  455. package/vibe/setup.sh +31 -31
  456. package/vibe/templates/claudemd-template.md +74 -74
  457. package/vibe/templates/constitution-template.md +267 -267
  458. package/vibe/templates/contract-backend-template.md +526 -526
  459. package/vibe/templates/contract-frontend-template.md +599 -599
  460. package/vibe/templates/feature-template.md +96 -96
  461. package/vibe/templates/plan-template.md +194 -194
  462. package/vibe/templates/spec-template.md +221 -221
  463. package/vibe/ui-ux-data/charts.csv +26 -26
  464. package/vibe/ui-ux-data/colors.csv +97 -97
  465. package/vibe/ui-ux-data/icons.csv +101 -101
  466. package/vibe/ui-ux-data/landing.csv +31 -31
  467. package/vibe/ui-ux-data/products.csv +96 -96
  468. package/vibe/ui-ux-data/react-performance.csv +45 -45
  469. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  470. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  471. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  472. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  473. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  474. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  475. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  476. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  477. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  478. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  479. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  480. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  481. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  482. package/vibe/ui-ux-data/styles.csv +68 -68
  483. package/vibe/ui-ux-data/typography.csv +57 -57
  484. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  485. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  486. package/vibe/ui-ux-data/version.json +31 -31
  487. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -59,111 +59,111 @@ export class MemoryStorage {
59
59
  }
60
60
  initializeDatabase() {
61
61
  // Create memories table
62
- this.db.exec(`
63
- CREATE TABLE IF NOT EXISTS memories (
64
- key TEXT PRIMARY KEY,
65
- value TEXT NOT NULL,
66
- category TEXT NOT NULL DEFAULT 'general',
67
- timestamp TEXT NOT NULL,
68
- lastAccessed TEXT NOT NULL,
69
- priority INTEGER DEFAULT 0
70
- );
71
-
72
- CREATE INDEX IF NOT EXISTS idx_category ON memories(category);
73
- CREATE INDEX IF NOT EXISTS idx_timestamp ON memories(timestamp);
74
- CREATE INDEX IF NOT EXISTS idx_priority ON memories(priority);
75
- CREATE INDEX IF NOT EXISTS idx_lastAccessed ON memories(lastAccessed);
62
+ this.db.exec(`
63
+ CREATE TABLE IF NOT EXISTS memories (
64
+ key TEXT PRIMARY KEY,
65
+ value TEXT NOT NULL,
66
+ category TEXT NOT NULL DEFAULT 'general',
67
+ timestamp TEXT NOT NULL,
68
+ lastAccessed TEXT NOT NULL,
69
+ priority INTEGER DEFAULT 0
70
+ );
71
+
72
+ CREATE INDEX IF NOT EXISTS idx_category ON memories(category);
73
+ CREATE INDEX IF NOT EXISTS idx_timestamp ON memories(timestamp);
74
+ CREATE INDEX IF NOT EXISTS idx_priority ON memories(priority);
75
+ CREATE INDEX IF NOT EXISTS idx_lastAccessed ON memories(lastAccessed);
76
76
  `);
77
77
  // Create memory_relations table for Knowledge Graph
78
- this.db.exec(`
79
- CREATE TABLE IF NOT EXISTS memory_relations (
80
- id INTEGER PRIMARY KEY AUTOINCREMENT,
81
- sourceKey TEXT NOT NULL,
82
- targetKey TEXT NOT NULL,
83
- relationType TEXT NOT NULL,
84
- strength REAL DEFAULT 1.0,
85
- metadata TEXT,
86
- timestamp TEXT NOT NULL,
87
- UNIQUE(sourceKey, targetKey, relationType)
88
- );
89
-
90
- CREATE INDEX IF NOT EXISTS idx_rel_source ON memory_relations(sourceKey);
91
- CREATE INDEX IF NOT EXISTS idx_rel_target ON memory_relations(targetKey);
92
- CREATE INDEX IF NOT EXISTS idx_rel_type ON memory_relations(relationType);
78
+ this.db.exec(`
79
+ CREATE TABLE IF NOT EXISTS memory_relations (
80
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
81
+ sourceKey TEXT NOT NULL,
82
+ targetKey TEXT NOT NULL,
83
+ relationType TEXT NOT NULL,
84
+ strength REAL DEFAULT 1.0,
85
+ metadata TEXT,
86
+ timestamp TEXT NOT NULL,
87
+ UNIQUE(sourceKey, targetKey, relationType)
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_rel_source ON memory_relations(sourceKey);
91
+ CREATE INDEX IF NOT EXISTS idx_rel_target ON memory_relations(targetKey);
92
+ CREATE INDEX IF NOT EXISTS idx_rel_type ON memory_relations(relationType);
93
93
  `);
94
94
  // Create observations table for structured observation capture
95
- this.db.exec(`
96
- CREATE TABLE IF NOT EXISTS observations (
97
- id INTEGER PRIMARY KEY AUTOINCREMENT,
98
- sessionId TEXT,
99
- type TEXT NOT NULL CHECK(type IN ('decision','bugfix','feature','refactor','discovery')),
100
- title TEXT NOT NULL,
101
- narrative TEXT,
102
- facts TEXT,
103
- concepts TEXT,
104
- filesModified TEXT,
105
- timestamp TEXT NOT NULL,
106
- projectPath TEXT
107
- );
108
-
109
- CREATE INDEX IF NOT EXISTS idx_obs_session ON observations(sessionId);
110
- CREATE INDEX IF NOT EXISTS idx_obs_type ON observations(type);
111
- CREATE INDEX IF NOT EXISTS idx_obs_timestamp ON observations(timestamp);
95
+ this.db.exec(`
96
+ CREATE TABLE IF NOT EXISTS observations (
97
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
98
+ sessionId TEXT,
99
+ type TEXT NOT NULL CHECK(type IN ('decision','bugfix','feature','refactor','discovery')),
100
+ title TEXT NOT NULL,
101
+ narrative TEXT,
102
+ facts TEXT,
103
+ concepts TEXT,
104
+ filesModified TEXT,
105
+ timestamp TEXT NOT NULL,
106
+ projectPath TEXT
107
+ );
108
+
109
+ CREATE INDEX IF NOT EXISTS idx_obs_session ON observations(sessionId);
110
+ CREATE INDEX IF NOT EXISTS idx_obs_type ON observations(type);
111
+ CREATE INDEX IF NOT EXISTS idx_obs_timestamp ON observations(timestamp);
112
112
  `);
113
113
  // Create session_summaries table
114
- this.db.exec(`
115
- CREATE TABLE IF NOT EXISTS session_summaries (
116
- id INTEGER PRIMARY KEY AUTOINCREMENT,
117
- sessionId TEXT UNIQUE NOT NULL,
118
- request TEXT,
119
- investigated TEXT,
120
- learned TEXT,
121
- completed TEXT,
122
- nextSteps TEXT,
123
- filesRead TEXT,
124
- filesEdited TEXT,
125
- timestamp TEXT NOT NULL
126
- );
127
-
128
- CREATE INDEX IF NOT EXISTS idx_ss_session ON session_summaries(sessionId);
129
- CREATE INDEX IF NOT EXISTS idx_ss_timestamp ON session_summaries(timestamp);
114
+ this.db.exec(`
115
+ CREATE TABLE IF NOT EXISTS session_summaries (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ sessionId TEXT UNIQUE NOT NULL,
118
+ request TEXT,
119
+ investigated TEXT,
120
+ learned TEXT,
121
+ completed TEXT,
122
+ nextSteps TEXT,
123
+ filesRead TEXT,
124
+ filesEdited TEXT,
125
+ timestamp TEXT NOT NULL
126
+ );
127
+
128
+ CREATE INDEX IF NOT EXISTS idx_ss_session ON session_summaries(sessionId);
129
+ CREATE INDEX IF NOT EXISTS idx_ss_timestamp ON session_summaries(timestamp);
130
130
  `);
131
131
  // Create usage_events table for self-evolution (Phase 4)
132
- this.db.exec(`
133
- CREATE TABLE IF NOT EXISTS usage_events (
134
- id TEXT PRIMARY KEY,
135
- generationId TEXT NOT NULL,
136
- sessionId TEXT,
137
- matchedPrompt TEXT,
138
- feedback TEXT CHECK(feedback IN ('positive','negative','neutral') OR feedback IS NULL),
139
- createdAt TEXT NOT NULL
140
- );
141
-
142
- CREATE INDEX IF NOT EXISTS idx_ue_gen ON usage_events(generationId);
143
- CREATE INDEX IF NOT EXISTS idx_ue_session ON usage_events(sessionId);
144
- CREATE INDEX IF NOT EXISTS idx_ue_feedback ON usage_events(feedback);
145
- CREATE INDEX IF NOT EXISTS idx_ue_created ON usage_events(createdAt);
132
+ this.db.exec(`
133
+ CREATE TABLE IF NOT EXISTS usage_events (
134
+ id TEXT PRIMARY KEY,
135
+ generationId TEXT NOT NULL,
136
+ sessionId TEXT,
137
+ matchedPrompt TEXT,
138
+ feedback TEXT CHECK(feedback IN ('positive','negative','neutral') OR feedback IS NULL),
139
+ createdAt TEXT NOT NULL
140
+ );
141
+
142
+ CREATE INDEX IF NOT EXISTS idx_ue_gen ON usage_events(generationId);
143
+ CREATE INDEX IF NOT EXISTS idx_ue_session ON usage_events(sessionId);
144
+ CREATE INDEX IF NOT EXISTS idx_ue_feedback ON usage_events(feedback);
145
+ CREATE INDEX IF NOT EXISTS idx_ue_created ON usage_events(createdAt);
146
146
  `);
147
147
  // Create reflections table for self-evolution (Phase 1)
148
- this.db.exec(`
149
- CREATE TABLE IF NOT EXISTS reflections (
150
- id TEXT PRIMARY KEY,
151
- sessionId TEXT,
152
- type TEXT NOT NULL CHECK(type IN ('minor','major')),
153
- trigger TEXT NOT NULL CHECK(trigger IN ('context_pressure','session_end','manual')),
154
- insights TEXT,
155
- decisions TEXT,
156
- patterns TEXT,
157
- filesContext TEXT,
158
- score REAL DEFAULT 0.5 CHECK(score >= 0 AND score <= 1),
159
- createdAt TEXT NOT NULL
160
- );
161
-
162
- CREATE INDEX IF NOT EXISTS idx_refl_session ON reflections(sessionId);
163
- CREATE INDEX IF NOT EXISTS idx_refl_type ON reflections(type);
164
- CREATE INDEX IF NOT EXISTS idx_refl_trigger ON reflections(trigger);
165
- CREATE INDEX IF NOT EXISTS idx_refl_score ON reflections(score);
166
- CREATE INDEX IF NOT EXISTS idx_refl_created ON reflections(createdAt);
148
+ this.db.exec(`
149
+ CREATE TABLE IF NOT EXISTS reflections (
150
+ id TEXT PRIMARY KEY,
151
+ sessionId TEXT,
152
+ type TEXT NOT NULL CHECK(type IN ('minor','major')),
153
+ trigger TEXT NOT NULL CHECK(trigger IN ('context_pressure','session_end','manual')),
154
+ insights TEXT,
155
+ decisions TEXT,
156
+ patterns TEXT,
157
+ filesContext TEXT,
158
+ score REAL DEFAULT 0.5 CHECK(score >= 0 AND score <= 1),
159
+ createdAt TEXT NOT NULL
160
+ );
161
+
162
+ CREATE INDEX IF NOT EXISTS idx_refl_session ON reflections(sessionId);
163
+ CREATE INDEX IF NOT EXISTS idx_refl_type ON reflections(type);
164
+ CREATE INDEX IF NOT EXISTS idx_refl_trigger ON reflections(trigger);
165
+ CREATE INDEX IF NOT EXISTS idx_refl_score ON reflections(score);
166
+ CREATE INDEX IF NOT EXISTS idx_refl_created ON reflections(createdAt);
167
167
  `);
168
168
  // Enable WAL mode for better concurrency
169
169
  this.db.pragma('journal_mode = WAL');
@@ -175,56 +175,56 @@ export class MemoryStorage {
175
175
  initializeFTS5() {
176
176
  try {
177
177
  // Create FTS5 virtual table for memories
178
- this.db.exec(`
179
- CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
180
- USING fts5(key, value, content=memories, content_rowid=rowid);
178
+ this.db.exec(`
179
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
180
+ USING fts5(key, value, content=memories, content_rowid=rowid);
181
181
  `);
182
182
  // Triggers to keep FTS5 in sync with memories table
183
- this.db.exec(`
184
- CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
185
- INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
186
- END;
187
- CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
188
- INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
189
- END;
190
- CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
191
- INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
192
- INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
193
- END;
183
+ this.db.exec(`
184
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
185
+ INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
186
+ END;
187
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
188
+ INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
189
+ END;
190
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
191
+ INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
192
+ INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
193
+ END;
194
194
  `);
195
195
  // Create FTS5 for observations
196
- this.db.exec(`
197
- CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts
198
- USING fts5(title, narrative, facts, concepts, content=observations, content_rowid=id);
199
-
200
- CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN
201
- INSERT INTO observations_fts(rowid, title, narrative, facts, concepts)
202
- VALUES (new.id, new.title, new.narrative, new.facts, new.concepts);
203
- END;
204
- CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN
205
- INSERT INTO observations_fts(observations_fts, rowid, title, narrative, facts, concepts)
206
- VALUES('delete', old.id, old.title, old.narrative, old.facts, old.concepts);
207
- END;
196
+ this.db.exec(`
197
+ CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts
198
+ USING fts5(title, narrative, facts, concepts, content=observations, content_rowid=id);
199
+
200
+ CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN
201
+ INSERT INTO observations_fts(rowid, title, narrative, facts, concepts)
202
+ VALUES (new.id, new.title, new.narrative, new.facts, new.concepts);
203
+ END;
204
+ CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN
205
+ INSERT INTO observations_fts(observations_fts, rowid, title, narrative, facts, concepts)
206
+ VALUES('delete', old.id, old.title, old.narrative, old.facts, old.concepts);
207
+ END;
208
208
  `);
209
209
  // Create FTS5 for reflections
210
- this.db.exec(`
211
- CREATE VIRTUAL TABLE IF NOT EXISTS reflections_fts
212
- USING fts5(insights, decisions, patterns, content=reflections, content_rowid=rowid);
213
-
214
- CREATE TRIGGER IF NOT EXISTS reflections_ai AFTER INSERT ON reflections BEGIN
215
- INSERT INTO reflections_fts(rowid, insights, decisions, patterns)
216
- VALUES (new.rowid, new.insights, new.decisions, new.patterns);
217
- END;
218
- CREATE TRIGGER IF NOT EXISTS reflections_ad AFTER DELETE ON reflections BEGIN
219
- INSERT INTO reflections_fts(reflections_fts, rowid, insights, decisions, patterns)
220
- VALUES('delete', old.rowid, old.insights, old.decisions, old.patterns);
221
- END;
222
- CREATE TRIGGER IF NOT EXISTS reflections_au AFTER UPDATE ON reflections BEGIN
223
- INSERT INTO reflections_fts(reflections_fts, rowid, insights, decisions, patterns)
224
- VALUES('delete', old.rowid, old.insights, old.decisions, old.patterns);
225
- INSERT INTO reflections_fts(rowid, insights, decisions, patterns)
226
- VALUES (new.rowid, new.insights, new.decisions, new.patterns);
227
- END;
210
+ this.db.exec(`
211
+ CREATE VIRTUAL TABLE IF NOT EXISTS reflections_fts
212
+ USING fts5(insights, decisions, patterns, content=reflections, content_rowid=rowid);
213
+
214
+ CREATE TRIGGER IF NOT EXISTS reflections_ai AFTER INSERT ON reflections BEGIN
215
+ INSERT INTO reflections_fts(rowid, insights, decisions, patterns)
216
+ VALUES (new.rowid, new.insights, new.decisions, new.patterns);
217
+ END;
218
+ CREATE TRIGGER IF NOT EXISTS reflections_ad AFTER DELETE ON reflections BEGIN
219
+ INSERT INTO reflections_fts(reflections_fts, rowid, insights, decisions, patterns)
220
+ VALUES('delete', old.rowid, old.insights, old.decisions, old.patterns);
221
+ END;
222
+ CREATE TRIGGER IF NOT EXISTS reflections_au AFTER UPDATE ON reflections BEGIN
223
+ INSERT INTO reflections_fts(reflections_fts, rowid, insights, decisions, patterns)
224
+ VALUES('delete', old.rowid, old.insights, old.decisions, old.patterns);
225
+ INSERT INTO reflections_fts(rowid, insights, decisions, patterns)
226
+ VALUES (new.rowid, new.insights, new.decisions, new.patterns);
227
+ END;
228
228
  `);
229
229
  // Migrate existing data into FTS5 index
230
230
  const ftsCount = this.db.prepare(`SELECT COUNT(*) as cnt FROM memories_fts`).get().cnt;
@@ -246,10 +246,10 @@ export class MemoryStorage {
246
246
  }
247
247
  initializePreparedStatements() {
248
248
  try {
249
- this.recallStmt = this.db.prepare(`
250
- UPDATE memories SET lastAccessed = ?
251
- WHERE key = ?
252
- RETURNING *
249
+ this.recallStmt = this.db.prepare(`
250
+ UPDATE memories SET lastAccessed = ?
251
+ WHERE key = ?
252
+ RETURNING *
253
253
  `);
254
254
  }
255
255
  catch {
@@ -258,9 +258,9 @@ export class MemoryStorage {
258
258
  this.recallSelectStmt = this.db.prepare(`SELECT * FROM memories WHERE key = ?`);
259
259
  this.recallUpdateStmt = this.db.prepare(`UPDATE memories SET lastAccessed = ? WHERE key = ?`);
260
260
  }
261
- this.saveStmt = this.db.prepare(`
262
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
263
- VALUES (?, ?, ?, ?, ?, ?)
261
+ this.saveStmt = this.db.prepare(`
262
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
263
+ VALUES (?, ?, ?, ?, ?, ?)
264
264
  `);
265
265
  }
266
266
  migrateFromJSON() {
@@ -272,9 +272,9 @@ export class MemoryStorage {
272
272
  const memories = JSON.parse(jsonData);
273
273
  if (memories.length === 0)
274
274
  return;
275
- const insert = this.db.prepare(`
276
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
277
- VALUES (?, ?, ?, ?, ?, ?)
275
+ const insert = this.db.prepare(`
276
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
277
+ VALUES (?, ?, ?, ?, ?, ?)
278
278
  `);
279
279
  const insertMany = this.db.transaction((items) => {
280
280
  for (const item of items) {
@@ -350,9 +350,9 @@ export class MemoryStorage {
350
350
  this.saveStmt.run(key, value, category, timestamp, timestamp, priority);
351
351
  }
352
352
  else {
353
- const stmt = this.db.prepare(`
354
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
355
- VALUES (?, ?, ?, ?, ?, ?)
353
+ const stmt = this.db.prepare(`
354
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
355
+ VALUES (?, ?, ?, ?, ?, ?)
356
356
  `);
357
357
  stmt.run(key, value, category, timestamp, timestamp, priority);
358
358
  }
@@ -395,10 +395,10 @@ export class MemoryStorage {
395
395
  */
396
396
  update(key, value) {
397
397
  const timestamp = new Date().toISOString();
398
- const stmt = this.db.prepare(`
399
- UPDATE memories
400
- SET value = ?, timestamp = ?, lastAccessed = ?
401
- WHERE key = ?
398
+ const stmt = this.db.prepare(`
399
+ UPDATE memories
400
+ SET value = ?, timestamp = ?, lastAccessed = ?
401
+ WHERE key = ?
402
402
  `);
403
403
  const result = stmt.run(value, timestamp, timestamp, key);
404
404
  return result.changes > 0;
@@ -408,16 +408,16 @@ export class MemoryStorage {
408
408
  */
409
409
  list(category) {
410
410
  if (category) {
411
- const stmt = this.db.prepare(`
412
- SELECT * FROM memories WHERE category = ?
413
- ORDER BY priority DESC, timestamp DESC
411
+ const stmt = this.db.prepare(`
412
+ SELECT * FROM memories WHERE category = ?
413
+ ORDER BY priority DESC, timestamp DESC
414
414
  `);
415
415
  return stmt.all(category);
416
416
  }
417
417
  else {
418
- const stmt = this.db.prepare(`
419
- SELECT * FROM memories
420
- ORDER BY priority DESC, timestamp DESC
418
+ const stmt = this.db.prepare(`
419
+ SELECT * FROM memories
420
+ ORDER BY priority DESC, timestamp DESC
421
421
  `);
422
422
  return stmt.all();
423
423
  }
@@ -453,13 +453,13 @@ export class MemoryStorage {
453
453
  if (!this.fts5Available) {
454
454
  return this.searchLike(query);
455
455
  }
456
- const stmt = this.db.prepare(`
457
- SELECT m.*, bm25(memories_fts) as rank
458
- FROM memories_fts fts
459
- JOIN memories m ON m.rowid = fts.rowid
460
- WHERE memories_fts MATCH ?
461
- ORDER BY rank
462
- LIMIT ?
456
+ const stmt = this.db.prepare(`
457
+ SELECT m.*, bm25(memories_fts) as rank
458
+ FROM memories_fts fts
459
+ JOIN memories m ON m.rowid = fts.rowid
460
+ WHERE memories_fts MATCH ?
461
+ ORDER BY rank
462
+ LIMIT ?
463
463
  `);
464
464
  return stmt.all(MemoryStorage.sanitizeFTS5Query(query), limit);
465
465
  }
@@ -470,10 +470,10 @@ export class MemoryStorage {
470
470
  return this.fts5Available;
471
471
  }
472
472
  searchLike(query) {
473
- const stmt = this.db.prepare(`
474
- SELECT * FROM memories
475
- WHERE key LIKE ? OR value LIKE ?
476
- ORDER BY priority DESC, timestamp DESC
473
+ const stmt = this.db.prepare(`
474
+ SELECT * FROM memories
475
+ WHERE key LIKE ? OR value LIKE ?
476
+ ORDER BY priority DESC, timestamp DESC
477
477
  `);
478
478
  const pattern = `%${query}%`;
479
479
  return stmt.all(pattern, pattern);
@@ -482,10 +482,10 @@ export class MemoryStorage {
482
482
  * Get memories by priority level
483
483
  */
484
484
  getByPriority(priority) {
485
- const stmt = this.db.prepare(`
486
- SELECT * FROM memories
487
- WHERE priority = ?
488
- ORDER BY timestamp DESC
485
+ const stmt = this.db.prepare(`
486
+ SELECT * FROM memories
487
+ WHERE priority = ?
488
+ ORDER BY timestamp DESC
489
489
  `);
490
490
  return stmt.all(priority);
491
491
  }
@@ -501,10 +501,10 @@ export class MemoryStorage {
501
501
  * Get memory statistics
502
502
  */
503
503
  getStats() {
504
- const categories = this.db.prepare(`
505
- SELECT category, COUNT(*) as count
506
- FROM memories
507
- GROUP BY category
504
+ const categories = this.db.prepare(`
505
+ SELECT category, COUNT(*) as count
506
+ FROM memories
507
+ GROUP BY category
508
508
  `).all();
509
509
  const byCategory = {};
510
510
  let total = 0;
@@ -9,9 +9,9 @@ export class ObservationStore {
9
9
  */
10
10
  add(input) {
11
11
  const timestamp = new Date().toISOString();
12
- const stmt = this.db.prepare(`
13
- INSERT INTO observations (sessionId, type, title, narrative, facts, concepts, filesModified, timestamp, projectPath)
14
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
12
+ const stmt = this.db.prepare(`
13
+ INSERT INTO observations (sessionId, type, title, narrative, facts, concepts, filesModified, timestamp, projectPath)
14
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
15
15
  `);
16
16
  const result = stmt.run(input.sessionId || null, input.type, input.title, input.narrative || null, input.facts ? JSON.stringify(input.facts) : null, input.concepts ? JSON.stringify(input.concepts) : null, input.filesModified ? JSON.stringify(input.filesModified) : null, timestamp, input.projectPath || null);
17
17
  return result.lastInsertRowid;
@@ -20,9 +20,9 @@ export class ObservationStore {
20
20
  * Get observations by session ID
21
21
  */
22
22
  getBySession(sessionId, limit = 50) {
23
- const rows = this.db.prepare(`
24
- SELECT * FROM observations WHERE sessionId = ?
25
- ORDER BY timestamp DESC LIMIT ?
23
+ const rows = this.db.prepare(`
24
+ SELECT * FROM observations WHERE sessionId = ?
25
+ ORDER BY timestamp DESC LIMIT ?
26
26
  `).all(sessionId, limit);
27
27
  return rows.map(this.rowToObservation);
28
28
  }
@@ -31,15 +31,15 @@ export class ObservationStore {
31
31
  */
32
32
  getRecent(limit = 10, type) {
33
33
  if (type) {
34
- const rows = this.db.prepare(`
35
- SELECT * FROM observations WHERE type = ?
36
- ORDER BY timestamp DESC LIMIT ?
34
+ const rows = this.db.prepare(`
35
+ SELECT * FROM observations WHERE type = ?
36
+ ORDER BY timestamp DESC LIMIT ?
37
37
  `).all(type, limit);
38
38
  return rows.map(this.rowToObservation);
39
39
  }
40
- const rows = this.db.prepare(`
41
- SELECT * FROM observations
42
- ORDER BY timestamp DESC LIMIT ?
40
+ const rows = this.db.prepare(`
41
+ SELECT * FROM observations
42
+ ORDER BY timestamp DESC LIMIT ?
43
43
  `).all(limit);
44
44
  return rows.map(this.rowToObservation);
45
45
  }
@@ -47,9 +47,9 @@ export class ObservationStore {
47
47
  * Get observations by type
48
48
  */
49
49
  getByType(type, limit = 20) {
50
- const rows = this.db.prepare(`
51
- SELECT * FROM observations WHERE type = ?
52
- ORDER BY timestamp DESC LIMIT ?
50
+ const rows = this.db.prepare(`
51
+ SELECT * FROM observations WHERE type = ?
52
+ ORDER BY timestamp DESC LIMIT ?
53
53
  `).all(type, limit);
54
54
  return rows.map(this.rowToObservation);
55
55
  }
@@ -58,23 +58,23 @@ export class ObservationStore {
58
58
  */
59
59
  search(query, limit = 20) {
60
60
  try {
61
- const rows = this.db.prepare(`
62
- SELECT o.*, bm25(observations_fts) as rank
63
- FROM observations_fts fts
64
- JOIN observations o ON o.id = fts.rowid
65
- WHERE observations_fts MATCH ?
66
- ORDER BY rank
67
- LIMIT ?
61
+ const rows = this.db.prepare(`
62
+ SELECT o.*, bm25(observations_fts) as rank
63
+ FROM observations_fts fts
64
+ JOIN observations o ON o.id = fts.rowid
65
+ WHERE observations_fts MATCH ?
66
+ ORDER BY rank
67
+ LIMIT ?
68
68
  `).all(query, limit);
69
69
  return rows.map(this.rowToObservation);
70
70
  }
71
71
  catch {
72
72
  // FTS5 not available, fallback to LIKE
73
73
  const pattern = `%${query}%`;
74
- const rows = this.db.prepare(`
75
- SELECT * FROM observations
76
- WHERE title LIKE ? OR narrative LIKE ? OR facts LIKE ? OR concepts LIKE ?
77
- ORDER BY timestamp DESC LIMIT ?
74
+ const rows = this.db.prepare(`
75
+ SELECT * FROM observations
76
+ WHERE title LIKE ? OR narrative LIKE ? OR facts LIKE ? OR concepts LIKE ?
77
+ ORDER BY timestamp DESC LIMIT ?
78
78
  `).all(pattern, pattern, pattern, pattern, limit);
79
79
  return rows.map(this.rowToObservation);
80
80
  }
@@ -83,8 +83,8 @@ export class ObservationStore {
83
83
  * Get observation statistics
84
84
  */
85
85
  getStats() {
86
- const types = this.db.prepare(`
87
- SELECT type, COUNT(*) as count FROM observations GROUP BY type
86
+ const types = this.db.prepare(`
87
+ SELECT type, COUNT(*) as count FROM observations GROUP BY type
88
88
  `).all();
89
89
  const byType = {};
90
90
  let total = 0;