@su-record/vibe 2.8.52 → 2.8.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +294 -294
  13. package/agents/event/event-comms.md +78 -78
  14. package/agents/event/event-content.md +68 -68
  15. package/agents/event/event-image.md +95 -95
  16. package/agents/event/event-ops.md +84 -84
  17. package/agents/event/event-scheduler.md +69 -69
  18. package/agents/event/event-speaker.md +86 -86
  19. package/agents/explorer-low.md +42 -42
  20. package/agents/explorer-medium.md +59 -59
  21. package/agents/explorer.md +48 -48
  22. package/agents/implementer-low.md +43 -43
  23. package/agents/implementer-medium.md +52 -52
  24. package/agents/implementer.md +54 -54
  25. package/agents/junior-mentor.md +141 -141
  26. package/agents/planning/requirements-analyst.md +84 -84
  27. package/agents/planning/ux-advisor.md +83 -83
  28. package/agents/qa/acceptance-tester.md +86 -86
  29. package/agents/qa/edge-case-finder.md +93 -93
  30. package/agents/qa/qa-coordinator.md +131 -131
  31. package/agents/refactor-cleaner.md +143 -143
  32. package/agents/research/best-practices-agent.md +199 -199
  33. package/agents/research/codebase-patterns-agent.md +157 -157
  34. package/agents/research/framework-docs-agent.md +188 -188
  35. package/agents/research/security-advisory-agent.md +213 -213
  36. package/agents/review/architecture-reviewer.md +107 -107
  37. package/agents/review/complexity-reviewer.md +116 -116
  38. package/agents/review/data-integrity-reviewer.md +88 -88
  39. package/agents/review/git-history-reviewer.md +103 -103
  40. package/agents/review/performance-reviewer.md +86 -86
  41. package/agents/review/python-reviewer.md +150 -150
  42. package/agents/review/rails-reviewer.md +139 -139
  43. package/agents/review/react-reviewer.md +144 -144
  44. package/agents/review/security-reviewer.md +80 -80
  45. package/agents/review/simplicity-reviewer.md +140 -140
  46. package/agents/review/test-coverage-reviewer.md +116 -116
  47. package/agents/review/typescript-reviewer.md +127 -127
  48. package/agents/searcher.md +54 -54
  49. package/agents/simplifier.md +120 -120
  50. package/agents/tester.md +49 -49
  51. package/agents/ui/ui-a11y-auditor.md +93 -93
  52. package/agents/ui/ui-antipattern-detector.md +102 -102
  53. package/agents/ui/ui-dataviz-advisor.md +69 -69
  54. package/agents/ui/ui-design-system-gen.md +57 -57
  55. package/agents/ui/ui-industry-analyzer.md +49 -49
  56. package/agents/ui/ui-layout-architect.md +65 -65
  57. package/agents/ui/ui-stack-implementer.md +68 -68
  58. package/agents/ui/ux-compliance-reviewer.md +81 -81
  59. package/agents/ui-previewer.md +258 -258
  60. package/commands/vibe.analyze.md +379 -379
  61. package/commands/vibe.docs.md +32 -32
  62. package/commands/vibe.event.md +163 -163
  63. package/commands/vibe.figma.md +69 -69
  64. package/commands/vibe.review.md +686 -686
  65. package/commands/vibe.run.md +2276 -2276
  66. package/commands/vibe.spec.md +1195 -1195
  67. package/commands/vibe.spec.review.md +609 -609
  68. package/commands/vibe.trace.md +259 -259
  69. package/commands/vibe.utils.md +413 -413
  70. package/commands/vibe.verify.md +510 -510
  71. package/dist/cli/collaborator.js +52 -52
  72. package/dist/cli/commands/config.js +9 -9
  73. package/dist/cli/commands/evolution.js +12 -12
  74. package/dist/cli/commands/figma.js +20 -20
  75. package/dist/cli/commands/info.js +53 -53
  76. package/dist/cli/commands/init.js +5 -5
  77. package/dist/cli/commands/remove.js +14 -14
  78. package/dist/cli/commands/sentinel.js +27 -27
  79. package/dist/cli/commands/skills.js +5 -5
  80. package/dist/cli/commands/slack.js +10 -10
  81. package/dist/cli/commands/stats.js +6 -6
  82. package/dist/cli/commands/telegram.js +12 -12
  83. package/dist/cli/detect.js +32 -32
  84. package/dist/cli/index.js +51 -51
  85. package/dist/cli/llm/claude-commands.js +16 -16
  86. package/dist/cli/llm/config.js +18 -18
  87. package/dist/cli/llm/gemini-commands.js +16 -16
  88. package/dist/cli/llm/gpt-commands.js +19 -19
  89. package/dist/cli/llm/help.js +21 -21
  90. package/dist/cli/postinstall/cursor-agents.js +32 -32
  91. package/dist/cli/postinstall/cursor-rules.js +83 -83
  92. package/dist/cli/postinstall/cursor-skills.js +743 -743
  93. package/dist/cli/setup/Provisioner.js +42 -42
  94. package/dist/infra/lib/DeepInit.js +24 -24
  95. package/dist/infra/lib/IterationTracker.js +11 -11
  96. package/dist/infra/lib/PythonParser.js +108 -108
  97. package/dist/infra/lib/ReviewRace.js +96 -96
  98. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  99. package/dist/infra/lib/SkillQualityGate.js +9 -9
  100. package/dist/infra/lib/SkillRepository.js +159 -159
  101. package/dist/infra/lib/TokenBudgetTracker.d.ts +13 -0
  102. package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -1
  103. package/dist/infra/lib/TokenBudgetTracker.js +44 -3
  104. package/dist/infra/lib/TokenBudgetTracker.js.map +1 -1
  105. package/dist/infra/lib/UltraQA.js +99 -99
  106. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  107. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  108. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  109. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  110. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  111. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  112. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  113. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  114. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  115. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  116. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  117. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  118. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  119. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  120. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  121. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  122. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  123. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  124. package/dist/infra/lib/gemini/orchestration.js +5 -5
  125. package/dist/infra/lib/gpt/orchestration.js +4 -4
  126. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  127. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  128. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  129. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  130. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  131. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  132. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  133. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  134. package/dist/infra/orchestrator/AgentManager.js +12 -12
  135. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  136. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  137. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  138. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  139. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  140. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  141. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  142. package/dist/tools/memory/getMemoryGraph.js +12 -12
  143. package/dist/tools/memory/getSessionContext.js +9 -9
  144. package/dist/tools/memory/linkMemories.js +14 -14
  145. package/dist/tools/memory/listMemories.js +4 -4
  146. package/dist/tools/memory/recallMemory.js +4 -4
  147. package/dist/tools/memory/saveMemory.js +4 -4
  148. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  149. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  150. package/dist/tools/semantic/astGrep.test.js +6 -6
  151. package/dist/tools/spec/prdParser.test.js +171 -171
  152. package/dist/tools/spec/specGenerator.js +169 -169
  153. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  154. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  155. package/hooks/gemini-hooks.json +73 -73
  156. package/hooks/hooks.json +174 -174
  157. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  158. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  159. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  160. package/hooks/scripts/auto-commit.js +97 -97
  161. package/hooks/scripts/auto-format.js +64 -64
  162. package/hooks/scripts/auto-test.js +81 -81
  163. package/hooks/scripts/code-check.js +268 -268
  164. package/hooks/scripts/codex-detect.js +46 -46
  165. package/hooks/scripts/codex-review-gate.js +80 -80
  166. package/hooks/scripts/command-log.js +32 -32
  167. package/hooks/scripts/context-save.js +353 -353
  168. package/hooks/scripts/evolution-engine.js +91 -91
  169. package/hooks/scripts/figma-extract.js +635 -477
  170. package/hooks/scripts/hud-status.js +321 -321
  171. package/hooks/scripts/keyword-detector.js +214 -214
  172. package/hooks/scripts/llm-orchestrate.js +572 -572
  173. package/hooks/scripts/post-edit.js +32 -32
  174. package/hooks/scripts/pr-test-gate.js +52 -52
  175. package/hooks/scripts/pre-tool-guard.js +214 -159
  176. package/hooks/scripts/prompt-dispatcher.js +185 -185
  177. package/hooks/scripts/sentinel-guard.js +131 -131
  178. package/hooks/scripts/session-start.js +177 -177
  179. package/hooks/scripts/skill-injector.js +83 -83
  180. package/hooks/scripts/stop-notify.js +209 -209
  181. package/hooks/scripts/utils.js +243 -243
  182. package/languages/csharp-unity.md +515 -515
  183. package/languages/gdscript-godot.md +470 -470
  184. package/languages/ruby-rails.md +489 -489
  185. package/languages/typescript-angular.md +433 -433
  186. package/languages/typescript-astro.md +416 -416
  187. package/languages/typescript-electron.md +406 -406
  188. package/languages/typescript-nestjs.md +524 -524
  189. package/languages/typescript-svelte.md +407 -407
  190. package/languages/typescript-tauri.md +365 -365
  191. package/package.json +101 -101
  192. package/skills/agents-md/SKILL.md +121 -121
  193. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  194. package/skills/agents-md/templates/agents-md.md +36 -36
  195. package/skills/arch-guard/SKILL.md +181 -181
  196. package/skills/arch-guard/agents/detector.md +48 -48
  197. package/skills/arch-guard/agents/reporter.md +48 -48
  198. package/skills/arch-guard/agents/rule-generator.md +49 -49
  199. package/skills/arch-guard/agents/violation-checker.md +51 -51
  200. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  201. package/skills/arch-guard/frameworks/solid.md +102 -102
  202. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  203. package/skills/arch-guard/templates/arch-rules.json +47 -47
  204. package/skills/arch-guard/templates/violation-report.md +53 -53
  205. package/skills/brand-assets/SKILL.md +147 -147
  206. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  207. package/skills/brand-assets/templates/brand-guide.md +161 -161
  208. package/skills/capability-loop/SKILL.md +168 -168
  209. package/skills/capability-loop/agents/capability-designer.md +61 -61
  210. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  211. package/skills/capability-loop/agents/implementer.md +50 -50
  212. package/skills/capability-loop/agents/tester.md +53 -53
  213. package/skills/capability-loop/templates/capability-spec.md +118 -118
  214. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  215. package/skills/characterization-test/SKILL.md +207 -207
  216. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  217. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  218. package/skills/characterization-test/agents/reporter.md +50 -50
  219. package/skills/characterization-test/agents/test-writer.md +49 -49
  220. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  221. package/skills/characterization-test/templates/test-template.ts +101 -101
  222. package/skills/chub-usage/SKILL.md +139 -139
  223. package/skills/claude-md-guide/SKILL.md +351 -351
  224. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  225. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  226. package/skills/commerce-patterns/SKILL.md +64 -64
  227. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  228. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  229. package/skills/commit-push-pr/SKILL.md +77 -77
  230. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  231. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  232. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  233. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  234. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  235. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  236. package/skills/context7-usage/SKILL.md +106 -106
  237. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  238. package/skills/create-prd/SKILL.md +90 -90
  239. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  240. package/skills/create-prd/agents/prioritizer.md +60 -60
  241. package/skills/create-prd/agents/requirements-writer.md +48 -48
  242. package/skills/create-prd/agents/researcher.md +55 -55
  243. package/skills/create-prd/agents/reviewer.md +54 -54
  244. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  245. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  246. package/skills/create-prd/orchestrator.md +70 -70
  247. package/skills/create-prd/rubrics/completeness.md +58 -58
  248. package/skills/create-prd/templates/prd.md +139 -139
  249. package/skills/design-audit/SKILL.md +152 -152
  250. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  251. package/skills/design-audit/agents/performance-auditor.md +46 -46
  252. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  253. package/skills/design-audit/agents/scorer.md +47 -47
  254. package/skills/design-audit/agents/slop-detector.md +47 -47
  255. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  256. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  257. package/skills/design-audit/orchestrator.md +64 -64
  258. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  259. package/skills/design-audit/rubrics/scoring.md +63 -63
  260. package/skills/design-audit/templates/report.md +88 -88
  261. package/skills/design-critique/SKILL.md +139 -139
  262. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  263. package/skills/design-critique/templates/critique-report.md +86 -86
  264. package/skills/design-distill/SKILL.md +130 -130
  265. package/skills/design-distill/templates/design-system.md +132 -132
  266. package/skills/design-normalize/SKILL.md +133 -133
  267. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  268. package/skills/design-normalize/templates/token-audit.md +89 -89
  269. package/skills/design-polish/SKILL.md +131 -131
  270. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  271. package/skills/design-polish/templates/polish-report.md +64 -64
  272. package/skills/design-teach/SKILL.md +182 -182
  273. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  274. package/skills/design-teach/templates/design-context.json +36 -36
  275. package/skills/e2e-commerce/SKILL.md +62 -62
  276. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  277. package/skills/event-comms/SKILL.md +162 -162
  278. package/skills/event-comms/templates/email-invite.md +99 -99
  279. package/skills/event-comms/templates/sns-post.md +133 -133
  280. package/skills/event-ops/SKILL.md +198 -198
  281. package/skills/event-ops/rubrics/contingency.md +85 -85
  282. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  283. package/skills/event-planning/SKILL.md +132 -132
  284. package/skills/event-planning/rubrics/timeline.md +70 -70
  285. package/skills/event-planning/templates/event-plan.md +91 -91
  286. package/skills/exec-plan/SKILL.md +149 -149
  287. package/skills/exec-plan/agents/decomposer.md +47 -47
  288. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  289. package/skills/exec-plan/agents/estimator.md +43 -43
  290. package/skills/exec-plan/agents/validator.md +55 -55
  291. package/skills/exec-plan/orchestrator.md +70 -70
  292. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  293. package/skills/exec-plan/templates/plan.md +147 -147
  294. package/skills/git-worktree/SKILL.md +73 -73
  295. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  296. package/skills/handoff/SKILL.md +110 -110
  297. package/skills/handoff/agents/context-summarizer.md +51 -51
  298. package/skills/handoff/agents/document-writer.md +63 -63
  299. package/skills/handoff/agents/state-collector.md +53 -53
  300. package/skills/handoff/agents/verifier.md +48 -48
  301. package/skills/handoff/rubrics/completeness.md +62 -62
  302. package/skills/handoff/templates/handoff.md +107 -107
  303. package/skills/parallel-research/SKILL.md +89 -89
  304. package/skills/parallel-research/agents/best-practices.md +43 -43
  305. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  306. package/skills/parallel-research/agents/framework-docs.md +45 -45
  307. package/skills/parallel-research/agents/security-advisory.md +46 -46
  308. package/skills/parallel-research/agents/synthesizer.md +52 -52
  309. package/skills/parallel-research/experts/best-practices.md +50 -50
  310. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  311. package/skills/parallel-research/experts/framework-docs.md +65 -65
  312. package/skills/parallel-research/experts/security-advisory.md +69 -69
  313. package/skills/parallel-research/orchestrator.md +65 -65
  314. package/skills/parallel-research/templates/synthesis.md +101 -101
  315. package/skills/prioritization-frameworks/SKILL.md +87 -87
  316. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  317. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  318. package/skills/priority-todos/SKILL.md +64 -64
  319. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  320. package/skills/priority-todos/templates/todo-board.md +59 -59
  321. package/skills/seo-checklist/SKILL.md +58 -58
  322. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  323. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  324. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  325. package/skills/techdebt/SKILL.md +124 -124
  326. package/skills/techdebt/agents/analyzer.md +50 -50
  327. package/skills/techdebt/agents/fixer.md +41 -41
  328. package/skills/techdebt/agents/reviewer.md +47 -47
  329. package/skills/techdebt/agents/scanner.md +44 -44
  330. package/skills/techdebt/orchestrator.md +70 -70
  331. package/skills/techdebt/rubrics/severity.md +51 -51
  332. package/skills/techdebt/scripts/scan.js +90 -90
  333. package/skills/techdebt/templates/report.md +86 -86
  334. package/skills/tool-fallback/SKILL.md +104 -104
  335. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  336. package/skills/typescript-advanced-types/SKILL.md +67 -67
  337. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  338. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  339. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  340. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  341. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  342. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  343. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  344. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  345. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  346. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  347. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  348. package/skills/user-personas/SKILL.md +75 -75
  349. package/skills/user-personas/rubrics/research-methods.md +56 -56
  350. package/skills/user-personas/templates/persona.md +89 -89
  351. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  352. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  353. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  354. package/skills/vibe.docs/SKILL.md +171 -171
  355. package/skills/vibe.docs/templates/architecture.md +80 -80
  356. package/skills/vibe.docs/templates/readme.md +84 -84
  357. package/skills/vibe.docs/templates/release-notes.md +74 -74
  358. package/skills/vibe.figma/SKILL.md +215 -982
  359. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  360. package/skills/vibe.figma/templates/component-index.md +126 -126
  361. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  362. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  363. package/skills/vibe.figma.convert/SKILL.md +188 -511
  364. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +129 -113
  365. package/skills/vibe.figma.convert/templates/component.md +140 -140
  366. package/skills/vibe.figma.extract/SKILL.md +179 -300
  367. package/skills/vibe.figma.extract/rubrics/image-rules.md +145 -137
  368. package/skills/video-production/SKILL.md +52 -52
  369. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  370. package/skills/video-production/templates/production-plan.md +104 -104
  371. package/vibe/config.json +29 -29
  372. package/vibe/constitution.md +227 -227
  373. package/vibe/rules/principles/communication-guide.md +98 -98
  374. package/vibe/rules/principles/development-philosophy.md +52 -52
  375. package/vibe/rules/principles/quick-start.md +102 -102
  376. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  377. package/vibe/rules/quality/checklist.md +276 -276
  378. package/vibe/rules/quality/performance.md +236 -236
  379. package/vibe/rules/quality/testing-strategy.md +440 -440
  380. package/vibe/rules/standards/anti-patterns.md +541 -541
  381. package/vibe/rules/standards/code-structure.md +291 -291
  382. package/vibe/rules/standards/complexity-metrics.md +313 -313
  383. package/vibe/rules/standards/git-workflow.md +237 -237
  384. package/vibe/rules/standards/naming-conventions.md +198 -198
  385. package/vibe/rules/standards/security.md +305 -305
  386. package/vibe/rules/writing/document-style.md +74 -74
  387. package/vibe/setup.sh +31 -31
  388. package/vibe/templates/constitution-template.md +252 -252
  389. package/vibe/templates/contract-backend-template.md +526 -526
  390. package/vibe/templates/contract-frontend-template.md +599 -599
  391. package/vibe/templates/feature-template.md +96 -96
  392. package/vibe/templates/spec-template.md +221 -221
  393. package/vibe/ui-ux-data/charts.csv +26 -26
  394. package/vibe/ui-ux-data/colors.csv +97 -97
  395. package/vibe/ui-ux-data/icons.csv +101 -101
  396. package/vibe/ui-ux-data/landing.csv +31 -31
  397. package/vibe/ui-ux-data/products.csv +96 -96
  398. package/vibe/ui-ux-data/react-performance.csv +45 -45
  399. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  400. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  401. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  402. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  403. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  404. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  405. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  406. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  407. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  408. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  409. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  410. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  411. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  412. package/vibe/ui-ux-data/styles.csv +68 -68
  413. package/vibe/ui-ux-data/typography.csv +57 -57
  414. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  415. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  416. package/vibe/ui-ux-data/version.json +31 -31
  417. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -92,60 +92,60 @@ export function shouldContinue(session) {
92
92
  * Generate architect diagnosis prompt
93
93
  */
94
94
  export function generateDiagnosisPrompt(result) {
95
- return `
96
- ## QA Failure Diagnosis Required
97
-
98
- **Cycle**: ${result.cycle}
99
- **Goal**: ${result.goal}
100
- **Command**: ${result.command}
101
- **Exit Code**: ${result.exitCode}
102
-
103
- ### Output:
104
- \`\`\`
105
- ${result.output.slice(0, 2000)}
106
- \`\`\`
107
-
108
- ### Task:
109
- 1. Identify the root cause of this failure
110
- 2. Determine if it's a code issue, config issue, or environment issue
111
- 3. Provide a specific fix recommendation
112
-
113
- Return JSON:
114
- \`\`\`json
115
- {
116
- "rootCause": "description of root cause",
117
- "category": "code|config|environment|dependency",
118
- "fix": "specific fix to apply",
119
- "files": ["list", "of", "files", "to", "modify"],
120
- "confidence": "high|medium|low"
121
- }
122
- \`\`\`
95
+ return `
96
+ ## QA Failure Diagnosis Required
97
+
98
+ **Cycle**: ${result.cycle}
99
+ **Goal**: ${result.goal}
100
+ **Command**: ${result.command}
101
+ **Exit Code**: ${result.exitCode}
102
+
103
+ ### Output:
104
+ \`\`\`
105
+ ${result.output.slice(0, 2000)}
106
+ \`\`\`
107
+
108
+ ### Task:
109
+ 1. Identify the root cause of this failure
110
+ 2. Determine if it's a code issue, config issue, or environment issue
111
+ 3. Provide a specific fix recommendation
112
+
113
+ Return JSON:
114
+ \`\`\`json
115
+ {
116
+ "rootCause": "description of root cause",
117
+ "category": "code|config|environment|dependency",
118
+ "fix": "specific fix to apply",
119
+ "files": ["list", "of", "files", "to", "modify"],
120
+ "confidence": "high|medium|low"
121
+ }
122
+ \`\`\`
123
123
  `.trim();
124
124
  }
125
125
  /**
126
126
  * Generate executor fix prompt
127
127
  */
128
128
  export function generateFixPrompt(diagnosis, result) {
129
- return `
130
- ## Apply Fix for QA Failure
131
-
132
- **Previous Diagnosis**:
133
- ${diagnosis}
134
-
135
- **Failed Command**: ${result.command}
136
- **Cycle**: ${result.cycle}
137
-
138
- ### Task:
139
- Apply the fix identified in the diagnosis. Make minimal changes to resolve the issue.
140
-
141
- ### Rules:
142
- 1. Only modify files mentioned in the diagnosis
143
- 2. Make the smallest change that fixes the issue
144
- 3. Do not refactor or improve unrelated code
145
- 4. Run the verification command after fixing
146
-
147
- ### After fixing, run:
148
- \`${result.command}\`
129
+ return `
130
+ ## Apply Fix for QA Failure
131
+
132
+ **Previous Diagnosis**:
133
+ ${diagnosis}
134
+
135
+ **Failed Command**: ${result.command}
136
+ **Cycle**: ${result.cycle}
137
+
138
+ ### Task:
139
+ Apply the fix identified in the diagnosis. Make minimal changes to resolve the issue.
140
+
141
+ ### Rules:
142
+ 1. Only modify files mentioned in the diagnosis
143
+ 2. Make the smallest change that fixes the issue
144
+ 3. Do not refactor or improve unrelated code
145
+ 4. Run the verification command after fixing
146
+
147
+ ### After fixing, run:
148
+ \`${result.command}\`
149
149
  `.trim();
150
150
  }
151
151
  /**
@@ -157,28 +157,28 @@ export function generateArchitectureEscalationPrompt(session) {
157
157
  const failureSummary = recentFailures
158
158
  .map((c, i) => ` Attempt ${i + 1}: ${c.goal} - ${c.output.slice(0, 150)}`)
159
159
  .join('\n');
160
- return `
161
- ## ⚠️ 3-Fix Rule Triggered - Architecture Question Required
162
-
163
- **Same issue failed ${session.config.maxSameFailure}+ times.** This suggests an architectural problem, not a failed hypothesis.
164
-
165
- ### Failure Pattern:
166
- ${failureSummary}
167
-
168
- ### Architecture Problem Indicators:
169
- - Each fix reveals new shared state/coupling issues in different places
170
- - Fixes require "massive refactoring" to implement
171
- - Each fix creates new symptoms elsewhere
172
-
173
- ### Required Action:
174
- **STOP attempting more fixes.** Discuss with user before proceeding.
175
-
176
- ### Questions for User:
177
- 1. Is the current approach fundamentally sound?
178
- 2. Are we persisting through sheer inertia?
179
- 3. Should we refactor architecture vs. continue fixing symptoms?
180
-
181
- **Do NOT attempt Fix #${session.config.maxSameFailure + 1} without architectural discussion.**
160
+ return `
161
+ ## ⚠️ 3-Fix Rule Triggered - Architecture Question Required
162
+
163
+ **Same issue failed ${session.config.maxSameFailure}+ times.** This suggests an architectural problem, not a failed hypothesis.
164
+
165
+ ### Failure Pattern:
166
+ ${failureSummary}
167
+
168
+ ### Architecture Problem Indicators:
169
+ - Each fix reveals new shared state/coupling issues in different places
170
+ - Fixes require "massive refactoring" to implement
171
+ - Each fix creates new symptoms elsewhere
172
+
173
+ ### Required Action:
174
+ **STOP attempting more fixes.** Discuss with user before proceeding.
175
+
176
+ ### Questions for User:
177
+ 1. Is the current approach fundamentally sound?
178
+ 2. Are we persisting through sheer inertia?
179
+ 3. Should we refactor architecture vs. continue fixing symptoms?
180
+
181
+ **Do NOT attempt Fix #${session.config.maxSameFailure + 1} without architectural discussion.**
182
182
  `.trim();
183
183
  }
184
184
  /**
@@ -263,35 +263,35 @@ export function parseQAGoals(input) {
263
263
  * Create UltraQA workflow description
264
264
  */
265
265
  export function describeUltraQAWorkflow() {
266
- return `
267
- ## UltraQA Workflow
268
-
269
- 5-cycle autonomous QA loop:
270
-
271
- \`\`\`
272
- ┌─────────────────────────────────────────────┐
273
- │ ULTRAQA CYCLE │
274
- │ │
275
- │ 1. Run verification (test/build/lint) │
276
- │ ↓ │
277
- │ 2. Check result │
278
- │ ↓ │
279
- │ ┌───┴───┐ │
280
- │ PASS FAIL │
281
- │ ↓ ↓ │
282
- │ DONE 3. Architect diagnosis │
283
- │ ↓ │
284
- │ 4. Executor fix │
285
- │ ↓ │
286
- │ 5. Repeat (max 5 cycles) │
287
- └─────────────────────────────────────────────┘
288
- \`\`\`
289
-
290
- Exit conditions:
291
- - ✅ All goals pass (with evidence)
292
- - ⚠️ Same failure 3 times → Architecture Question (3-Fix Rule)
293
- - ❌ Max 5 cycles reached
294
- - ❌ Environment error
266
+ return `
267
+ ## UltraQA Workflow
268
+
269
+ 5-cycle autonomous QA loop:
270
+
271
+ \`\`\`
272
+ ┌─────────────────────────────────────────────┐
273
+ │ ULTRAQA CYCLE │
274
+ │ │
275
+ │ 1. Run verification (test/build/lint) │
276
+ │ ↓ │
277
+ │ 2. Check result │
278
+ │ ↓ │
279
+ │ ┌───┴───┐ │
280
+ │ PASS FAIL │
281
+ │ ↓ ↓ │
282
+ │ DONE 3. Architect diagnosis │
283
+ │ ↓ │
284
+ │ 4. Executor fix │
285
+ │ ↓ │
286
+ │ 5. Repeat (max 5 cycles) │
287
+ └─────────────────────────────────────────────┘
288
+ \`\`\`
289
+
290
+ Exit conditions:
291
+ - ✅ All goals pass (with evidence)
292
+ - ⚠️ Same failure 3 times → Architecture Question (3-Fix Rule)
293
+ - ❌ Max 5 cycles reached
294
+ - ❌ Environment error
295
295
  `.trim();
296
296
  }
297
297
  //# sourceMappingURL=UltraQA.js.map
@@ -16,55 +16,55 @@ export class AuditStore {
16
16
  constructor(storage) {
17
17
  this.db = storage.getDatabase();
18
18
  this.initTables();
19
- this.insertStmt = this.db.prepare(`
20
- INSERT INTO audit_events
21
- (id, correlationId, causationId, eventType, agentId, actionType, riskLevel, payload, outcome, createdAt)
22
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
19
+ this.insertStmt = this.db.prepare(`
20
+ INSERT INTO audit_events
21
+ (id, correlationId, causationId, eventType, agentId, actionType, riskLevel, payload, outcome, createdAt)
22
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
23
23
  `);
24
24
  }
25
25
  initTables() {
26
- this.db.exec(`
27
- CREATE TABLE IF NOT EXISTS audit_events (
28
- id TEXT PRIMARY KEY,
29
- correlationId TEXT NOT NULL,
30
- causationId TEXT,
31
- eventType TEXT NOT NULL,
32
- agentId TEXT,
33
- actionType TEXT,
34
- riskLevel TEXT,
35
- payload TEXT NOT NULL,
36
- outcome TEXT CHECK(outcome IS NULL OR outcome IN ('allowed', 'blocked', 'pending', 'expired')),
37
- createdAt TEXT NOT NULL
38
- );
39
- CREATE INDEX IF NOT EXISTS idx_audit_agent_time ON audit_events(agentId, createdAt);
40
- CREATE INDEX IF NOT EXISTS idx_audit_type_time ON audit_events(eventType, createdAt);
41
- CREATE INDEX IF NOT EXISTS idx_audit_correlation ON audit_events(correlationId);
26
+ this.db.exec(`
27
+ CREATE TABLE IF NOT EXISTS audit_events (
28
+ id TEXT PRIMARY KEY,
29
+ correlationId TEXT NOT NULL,
30
+ causationId TEXT,
31
+ eventType TEXT NOT NULL,
32
+ agentId TEXT,
33
+ actionType TEXT,
34
+ riskLevel TEXT,
35
+ payload TEXT NOT NULL,
36
+ outcome TEXT CHECK(outcome IS NULL OR outcome IN ('allowed', 'blocked', 'pending', 'expired')),
37
+ createdAt TEXT NOT NULL
38
+ );
39
+ CREATE INDEX IF NOT EXISTS idx_audit_agent_time ON audit_events(agentId, createdAt);
40
+ CREATE INDEX IF NOT EXISTS idx_audit_type_time ON audit_events(eventType, createdAt);
41
+ CREATE INDEX IF NOT EXISTS idx_audit_correlation ON audit_events(correlationId);
42
42
  `);
43
43
  try {
44
- this.db.exec(`
45
- CREATE VIRTUAL TABLE IF NOT EXISTS audit_events_fts USING fts5(
46
- eventType, agentId, payload,
47
- content='audit_events', content_rowid='rowid'
48
- );
44
+ this.db.exec(`
45
+ CREATE VIRTUAL TABLE IF NOT EXISTS audit_events_fts USING fts5(
46
+ eventType, agentId, payload,
47
+ content='audit_events', content_rowid='rowid'
48
+ );
49
49
  `);
50
- this.db.exec(`
51
- CREATE TRIGGER IF NOT EXISTS audit_events_fts_ai AFTER INSERT ON audit_events BEGIN
52
- INSERT INTO audit_events_fts(rowid, eventType, agentId, payload)
53
- VALUES (new.rowid, new.eventType, new.agentId, new.payload);
54
- END;
50
+ this.db.exec(`
51
+ CREATE TRIGGER IF NOT EXISTS audit_events_fts_ai AFTER INSERT ON audit_events BEGIN
52
+ INSERT INTO audit_events_fts(rowid, eventType, agentId, payload)
53
+ VALUES (new.rowid, new.eventType, new.agentId, new.payload);
54
+ END;
55
55
  `);
56
56
  this.fts5Available = true;
57
57
  }
58
58
  catch {
59
59
  this.fts5Available = false;
60
60
  }
61
- this.db.exec(`
62
- CREATE TRIGGER IF NOT EXISTS prevent_audit_update
63
- BEFORE UPDATE ON audit_events
64
- BEGIN SELECT RAISE(ABORT, 'Audit logs are immutable'); END;
65
- CREATE TRIGGER IF NOT EXISTS prevent_audit_delete
66
- BEFORE DELETE ON audit_events
67
- BEGIN SELECT RAISE(ABORT, 'Audit logs are immutable'); END;
61
+ this.db.exec(`
62
+ CREATE TRIGGER IF NOT EXISTS prevent_audit_update
63
+ BEFORE UPDATE ON audit_events
64
+ BEGIN SELECT RAISE(ABORT, 'Audit logs are immutable'); END;
65
+ CREATE TRIGGER IF NOT EXISTS prevent_audit_delete
66
+ BEFORE DELETE ON audit_events
67
+ BEGIN SELECT RAISE(ABORT, 'Audit logs are immutable'); END;
68
68
  `);
69
69
  }
70
70
  static redactSensitive(payload) {
@@ -170,10 +170,10 @@ export class AuditStore {
170
170
  const pageSize = Math.min(limit || DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE);
171
171
  try {
172
172
  return this.db
173
- .prepare(`SELECT a.* FROM audit_events a
174
- JOIN audit_events_fts f ON a.rowid = f.rowid
175
- WHERE audit_events_fts MATCH ?
176
- ORDER BY rank
173
+ .prepare(`SELECT a.* FROM audit_events a
174
+ JOIN audit_events_fts f ON a.rowid = f.rowid
175
+ WHERE audit_events_fts MATCH ?
176
+ ORDER BY rank
177
177
  LIMIT ?`)
178
178
  .all(sanitized, pageSize);
179
179
  }
@@ -20,41 +20,41 @@ export class ConfirmationStore {
20
20
  constructor(storage) {
21
21
  this.db = storage.getDatabase();
22
22
  this.initTables();
23
- this.insertStmt = this.db.prepare(`
24
- INSERT INTO confirmations
25
- (id, correlationId, actionType, actionSummary, riskLevel, riskScore, riskFactors,
26
- status, expiresAt, idempotencyKey, createdAt)
27
- VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)
23
+ this.insertStmt = this.db.prepare(`
24
+ INSERT INTO confirmations
25
+ (id, correlationId, actionType, actionSummary, riskLevel, riskScore, riskFactors,
26
+ status, expiresAt, idempotencyKey, createdAt)
27
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)
28
28
  `);
29
- this.resolveStmt = this.db.prepare(`
30
- UPDATE confirmations SET status = ?, respondedAt = ?, ownerResponse = ?
31
- WHERE id = ? AND status = 'pending'
29
+ this.resolveStmt = this.db.prepare(`
30
+ UPDATE confirmations SET status = ?, respondedAt = ?, ownerResponse = ?
31
+ WHERE id = ? AND status = 'pending'
32
32
  `);
33
33
  this.getByIdStmt = this.db.prepare('SELECT * FROM confirmations WHERE id = ?');
34
34
  }
35
35
  initTables() {
36
- this.db.exec(`
37
- CREATE TABLE IF NOT EXISTS confirmations (
38
- id TEXT PRIMARY KEY,
39
- correlationId TEXT NOT NULL,
40
- actionType TEXT NOT NULL,
41
- actionSummary TEXT NOT NULL,
42
- riskLevel TEXT NOT NULL,
43
- riskScore INTEGER NOT NULL,
44
- riskFactors TEXT NOT NULL,
45
- status TEXT NOT NULL DEFAULT 'pending'
46
- CHECK(status IN ('pending', 'approved', 'rejected', 'expired', 'cancelled')),
47
- channel TEXT,
48
- notifiedAt TEXT,
49
- respondedAt TEXT,
50
- ownerResponse TEXT,
51
- expiresAt TEXT NOT NULL,
52
- idempotencyKey TEXT UNIQUE,
53
- createdAt TEXT NOT NULL
54
- );
55
- CREATE INDEX IF NOT EXISTS idx_confirmation_status_expires ON confirmations(status, expiresAt);
56
- CREATE INDEX IF NOT EXISTS idx_confirmation_correlation ON confirmations(correlationId);
57
- CREATE INDEX IF NOT EXISTS idx_confirmation_idempotency ON confirmations(idempotencyKey);
36
+ this.db.exec(`
37
+ CREATE TABLE IF NOT EXISTS confirmations (
38
+ id TEXT PRIMARY KEY,
39
+ correlationId TEXT NOT NULL,
40
+ actionType TEXT NOT NULL,
41
+ actionSummary TEXT NOT NULL,
42
+ riskLevel TEXT NOT NULL,
43
+ riskScore INTEGER NOT NULL,
44
+ riskFactors TEXT NOT NULL,
45
+ status TEXT NOT NULL DEFAULT 'pending'
46
+ CHECK(status IN ('pending', 'approved', 'rejected', 'expired', 'cancelled')),
47
+ channel TEXT,
48
+ notifiedAt TEXT,
49
+ respondedAt TEXT,
50
+ ownerResponse TEXT,
51
+ expiresAt TEXT NOT NULL,
52
+ idempotencyKey TEXT UNIQUE,
53
+ createdAt TEXT NOT NULL
54
+ );
55
+ CREATE INDEX IF NOT EXISTS idx_confirmation_status_expires ON confirmations(status, expiresAt);
56
+ CREATE INDEX IF NOT EXISTS idx_confirmation_correlation ON confirmations(correlationId);
57
+ CREATE INDEX IF NOT EXISTS idx_confirmation_idempotency ON confirmations(idempotencyKey);
58
58
  `);
59
59
  }
60
60
  create(input) {
@@ -18,52 +18,52 @@ export class EventOutbox {
18
18
  this.db = storage.getDatabase();
19
19
  this.eventBus = eventBus;
20
20
  this.initTables();
21
- this.enqueueStmt = this.db.prepare(`
22
- INSERT INTO event_outbox (id, eventType, payload, status, retryCount, createdAt)
23
- VALUES (?, ?, ?, 'pending', 0, ?)
21
+ this.enqueueStmt = this.db.prepare(`
22
+ INSERT INTO event_outbox (id, eventType, payload, status, retryCount, createdAt)
23
+ VALUES (?, ?, ?, 'pending', 0, ?)
24
24
  `);
25
- this.markProcessingStmt = this.db.prepare(`
26
- UPDATE event_outbox SET status = 'processing' WHERE id = ? AND status = 'pending'
25
+ this.markProcessingStmt = this.db.prepare(`
26
+ UPDATE event_outbox SET status = 'processing' WHERE id = ? AND status = 'pending'
27
27
  `);
28
- this.markPublishedStmt = this.db.prepare(`
29
- UPDATE event_outbox SET status = 'published', publishedAt = ? WHERE id = ?
28
+ this.markPublishedStmt = this.db.prepare(`
29
+ UPDATE event_outbox SET status = 'published', publishedAt = ? WHERE id = ?
30
30
  `);
31
- this.markPendingRetryStmt = this.db.prepare(`
32
- UPDATE event_outbox SET status = 'pending', retryCount = retryCount + 1, lastRetryAt = ? WHERE id = ?
31
+ this.markPendingRetryStmt = this.db.prepare(`
32
+ UPDATE event_outbox SET status = 'pending', retryCount = retryCount + 1, lastRetryAt = ? WHERE id = ?
33
33
  `);
34
- this.markFailedStmt = this.db.prepare(`
35
- UPDATE event_outbox SET status = 'failed' WHERE id = ?
34
+ this.markFailedStmt = this.db.prepare(`
35
+ UPDATE event_outbox SET status = 'failed' WHERE id = ?
36
36
  `);
37
- this.moveToDeadLetterStmt = this.db.prepare(`
38
- INSERT INTO dead_letter_events (id, originalEventId, eventType, payload, error, retryCount, failedAt)
39
- VALUES (?, ?, ?, ?, ?, ?, ?)
37
+ this.moveToDeadLetterStmt = this.db.prepare(`
38
+ INSERT INTO dead_letter_events (id, originalEventId, eventType, payload, error, retryCount, failedAt)
39
+ VALUES (?, ?, ?, ?, ?, ?, ?)
40
40
  `);
41
41
  }
42
42
  initTables() {
43
- this.db.exec(`
44
- CREATE TABLE IF NOT EXISTS event_outbox (
45
- id TEXT PRIMARY KEY,
46
- eventType TEXT NOT NULL,
47
- payload TEXT NOT NULL,
48
- status TEXT DEFAULT 'pending' CHECK(status IN ('pending', 'processing', 'published', 'failed')),
49
- retryCount INTEGER DEFAULT 0,
50
- lastRetryAt TEXT,
51
- createdAt TEXT NOT NULL,
52
- publishedAt TEXT
53
- );
54
- CREATE INDEX IF NOT EXISTS idx_outbox_status ON event_outbox(status, createdAt);
55
-
56
- CREATE TABLE IF NOT EXISTS dead_letter_events (
57
- id TEXT PRIMARY KEY,
58
- originalEventId TEXT NOT NULL,
59
- eventType TEXT NOT NULL,
60
- payload TEXT NOT NULL,
61
- error TEXT NOT NULL,
62
- retryCount INTEGER NOT NULL,
63
- failedAt TEXT NOT NULL,
64
- resolvedAt TEXT,
65
- status TEXT DEFAULT 'failed' CHECK(status IN ('failed', 'retried', 'discarded'))
66
- );
43
+ this.db.exec(`
44
+ CREATE TABLE IF NOT EXISTS event_outbox (
45
+ id TEXT PRIMARY KEY,
46
+ eventType TEXT NOT NULL,
47
+ payload TEXT NOT NULL,
48
+ status TEXT DEFAULT 'pending' CHECK(status IN ('pending', 'processing', 'published', 'failed')),
49
+ retryCount INTEGER DEFAULT 0,
50
+ lastRetryAt TEXT,
51
+ createdAt TEXT NOT NULL,
52
+ publishedAt TEXT
53
+ );
54
+ CREATE INDEX IF NOT EXISTS idx_outbox_status ON event_outbox(status, createdAt);
55
+
56
+ CREATE TABLE IF NOT EXISTS dead_letter_events (
57
+ id TEXT PRIMARY KEY,
58
+ originalEventId TEXT NOT NULL,
59
+ eventType TEXT NOT NULL,
60
+ payload TEXT NOT NULL,
61
+ error TEXT NOT NULL,
62
+ retryCount INTEGER NOT NULL,
63
+ failedAt TEXT NOT NULL,
64
+ resolvedAt TEXT,
65
+ status TEXT DEFAULT 'failed' CHECK(status IN ('failed', 'retried', 'discarded'))
66
+ );
67
67
  `);
68
68
  }
69
69
  enqueue(event) {
@@ -11,13 +11,13 @@ declare const PolicyRuleSchema: z.ZodObject<{
11
11
  params: "params";
12
12
  }>;
13
13
  operator: z.ZodEnum<{
14
- in: "in";
15
- eq: "eq";
16
- neq: "neq";
17
14
  contains: "contains";
15
+ eq: "eq";
18
16
  matches: "matches";
19
17
  gt: "gt";
20
18
  lt: "lt";
19
+ in: "in";
20
+ neq: "neq";
21
21
  }>;
22
22
  value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodNumber]>;
23
23
  }, z.core.$strip>;
@@ -63,26 +63,26 @@ export class PolicyEngine {
63
63
  this.allPoliciesStmt = this.db.prepare(`SELECT * FROM policies WHERE enabled = 1 ORDER BY priority DESC, createdAt ASC`);
64
64
  }
65
65
  initTables() {
66
- this.db.exec(`
67
- CREATE TABLE IF NOT EXISTS policies (
68
- id TEXT PRIMARY KEY,
69
- name TEXT NOT NULL UNIQUE,
70
- description TEXT,
71
- rules TEXT NOT NULL,
72
- action TEXT NOT NULL DEFAULT 'block'
73
- CHECK(action IN ('block', 'require_confirmation', 'allow')),
74
- priority INTEGER DEFAULT 0,
75
- enabled INTEGER DEFAULT 1,
76
- version INTEGER DEFAULT 1,
77
- createdAt TEXT NOT NULL,
78
- updatedAt TEXT NOT NULL
79
- );
66
+ this.db.exec(`
67
+ CREATE TABLE IF NOT EXISTS policies (
68
+ id TEXT PRIMARY KEY,
69
+ name TEXT NOT NULL UNIQUE,
70
+ description TEXT,
71
+ rules TEXT NOT NULL,
72
+ action TEXT NOT NULL DEFAULT 'block'
73
+ CHECK(action IN ('block', 'require_confirmation', 'allow')),
74
+ priority INTEGER DEFAULT 0,
75
+ enabled INTEGER DEFAULT 1,
76
+ version INTEGER DEFAULT 1,
77
+ createdAt TEXT NOT NULL,
78
+ updatedAt TEXT NOT NULL
79
+ );
80
80
  `);
81
81
  }
82
82
  seedDefaultPolicies() {
83
- const insertOrIgnore = this.db.prepare(`
84
- INSERT OR IGNORE INTO policies (id, name, description, rules, action, priority, enabled, version, createdAt, updatedAt)
85
- VALUES (?, ?, ?, ?, ?, ?, 1, 1, ?, ?)
83
+ const insertOrIgnore = this.db.prepare(`
84
+ INSERT OR IGNORE INTO policies (id, name, description, rules, action, priority, enabled, version, createdAt, updatedAt)
85
+ VALUES (?, ?, ?, ?, ?, ?, 1, 1, ?, ?)
86
86
  `);
87
87
  const now = new Date().toISOString();
88
88
  const txn = this.db.transaction(() => {
@@ -114,7 +114,7 @@ export class PolicyEngine {
114
114
  PolicyRuleSchema.parse(rule);
115
115
  }
116
116
  this.db
117
- .prepare(`INSERT INTO policies (id, name, description, rules, action, priority, enabled, version, createdAt, updatedAt)
117
+ .prepare(`INSERT INTO policies (id, name, description, rules, action, priority, enabled, version, createdAt, updatedAt)
118
118
  VALUES (?, ?, ?, ?, ?, ?, 1, 1, ?, ?)`)
119
119
  .run(id, policy.name, policy.description ?? null, JSON.stringify(policy.rules), policy.action, policy.priority ?? 0, now, now);
120
120
  return id;
@@ -30,7 +30,7 @@ export class SecuritySentinel {
30
30
  this.auditStore = deps.auditStore;
31
31
  this.db = deps.storage.getDatabase();
32
32
  this.projectRoot = deps.projectRoot ?? process.cwd();
33
- this.recentDeleteStmt = this.db.prepare(`SELECT COUNT(*) as count FROM audit_events
33
+ this.recentDeleteStmt = this.db.prepare(`SELECT COUNT(*) as count FROM audit_events
34
34
  WHERE agentId = ? AND actionType = 'file_delete' AND createdAt >= ?`);
35
35
  }
36
36
  static getInstance(deps) {
@@ -8,41 +8,41 @@ export class SuggestionStore {
8
8
  constructor(storage) {
9
9
  this.db = storage.getDatabase();
10
10
  this.initTables();
11
- this.insertStmt = this.db.prepare(`
12
- INSERT INTO suggestions
13
- (id, type, title, description, priority, evidence, suggestedAction, status, riskLevel, sourceModule, createdAt)
14
- VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)
11
+ this.insertStmt = this.db.prepare(`
12
+ INSERT INTO suggestions
13
+ (id, type, title, description, priority, evidence, suggestedAction, status, riskLevel, sourceModule, createdAt)
14
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?)
15
15
  `);
16
16
  }
17
17
  initTables() {
18
- this.db.exec(`
19
- CREATE TABLE IF NOT EXISTS suggestions (
20
- id TEXT PRIMARY KEY,
21
- type TEXT NOT NULL CHECK(type IN ('security','performance','quality','dependency','pattern')),
22
- title TEXT NOT NULL,
23
- description TEXT NOT NULL,
24
- priority INTEGER NOT NULL CHECK(priority BETWEEN 1 AND 5),
25
- evidence TEXT NOT NULL,
26
- suggestedAction TEXT,
27
- status TEXT DEFAULT 'pending' CHECK(status IN ('pending','accepted','dismissed','auto_applied')),
28
- riskLevel TEXT DEFAULT 'LOW',
29
- sourceModule TEXT NOT NULL,
30
- createdAt TEXT NOT NULL,
31
- resolvedAt TEXT
32
- );
33
- CREATE INDEX IF NOT EXISTS idx_suggestion_status_priority ON suggestions(status, priority);
34
- CREATE INDEX IF NOT EXISTS idx_suggestion_type_created ON suggestions(type, createdAt);
18
+ this.db.exec(`
19
+ CREATE TABLE IF NOT EXISTS suggestions (
20
+ id TEXT PRIMARY KEY,
21
+ type TEXT NOT NULL CHECK(type IN ('security','performance','quality','dependency','pattern')),
22
+ title TEXT NOT NULL,
23
+ description TEXT NOT NULL,
24
+ priority INTEGER NOT NULL CHECK(priority BETWEEN 1 AND 5),
25
+ evidence TEXT NOT NULL,
26
+ suggestedAction TEXT,
27
+ status TEXT DEFAULT 'pending' CHECK(status IN ('pending','accepted','dismissed','auto_applied')),
28
+ riskLevel TEXT DEFAULT 'LOW',
29
+ sourceModule TEXT NOT NULL,
30
+ createdAt TEXT NOT NULL,
31
+ resolvedAt TEXT
32
+ );
33
+ CREATE INDEX IF NOT EXISTS idx_suggestion_status_priority ON suggestions(status, priority);
34
+ CREATE INDEX IF NOT EXISTS idx_suggestion_type_created ON suggestions(type, createdAt);
35
35
  `);
36
36
  try {
37
- this.db.exec(`
38
- CREATE VIRTUAL TABLE IF NOT EXISTS suggestions_fts USING fts5(
39
- title, description,
40
- content='suggestions', content_rowid='rowid'
41
- );
42
- CREATE TRIGGER IF NOT EXISTS suggestions_fts_ai AFTER INSERT ON suggestions BEGIN
43
- INSERT INTO suggestions_fts(rowid, title, description)
44
- VALUES (new.rowid, new.title, new.description);
45
- END;
37
+ this.db.exec(`
38
+ CREATE VIRTUAL TABLE IF NOT EXISTS suggestions_fts USING fts5(
39
+ title, description,
40
+ content='suggestions', content_rowid='rowid'
41
+ );
42
+ CREATE TRIGGER IF NOT EXISTS suggestions_fts_ai AFTER INSERT ON suggestions BEGIN
43
+ INSERT INTO suggestions_fts(rowid, title, description)
44
+ VALUES (new.rowid, new.title, new.description);
45
+ END;
46
46
  `);
47
47
  this.fts5Available = true;
48
48
  }
@@ -102,9 +102,9 @@ export class SuggestionStore {
102
102
  return [];
103
103
  try {
104
104
  return this.db
105
- .prepare(`SELECT s.* FROM suggestions s
106
- JOIN suggestions_fts f ON s.rowid = f.rowid
107
- WHERE suggestions_fts MATCH ?
105
+ .prepare(`SELECT s.* FROM suggestions s
106
+ JOIN suggestions_fts f ON s.rowid = f.rowid
107
+ WHERE suggestions_fts MATCH ?
108
108
  ORDER BY rank LIMIT ?`)
109
109
  .all(sanitized, limit);
110
110
  }