@su-record/vibe 2.8.49 → 2.8.51

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 (421) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +169 -169
  3. package/LICENSE +21 -21
  4. package/README.ko.md +190 -0
  5. package/README.md +97 -461
  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/tester.md +49 -49
  53. package/agents/ui/ui-a11y-auditor.md +93 -93
  54. package/agents/ui/ui-antipattern-detector.md +102 -102
  55. package/agents/ui/ui-dataviz-advisor.md +69 -69
  56. package/agents/ui/ui-design-system-gen.md +57 -57
  57. package/agents/ui/ui-industry-analyzer.md +49 -49
  58. package/agents/ui/ui-layout-architect.md +65 -65
  59. package/agents/ui/ui-stack-implementer.md +68 -68
  60. package/agents/ui/ux-compliance-reviewer.md +81 -81
  61. package/agents/ui-previewer.md +258 -258
  62. package/commands/vibe.analyze.md +379 -379
  63. package/commands/vibe.docs.md +32 -32
  64. package/commands/vibe.event.md +163 -163
  65. package/commands/vibe.figma.md +69 -69
  66. package/commands/vibe.review.md +686 -686
  67. package/commands/vibe.run.md +2276 -2276
  68. package/commands/vibe.spec.md +1195 -1195
  69. package/commands/vibe.spec.review.md +609 -609
  70. package/commands/vibe.trace.md +259 -259
  71. package/commands/vibe.utils.md +413 -413
  72. package/commands/vibe.verify.md +510 -510
  73. package/dist/cli/collaborator.js +52 -52
  74. package/dist/cli/commands/config.js +9 -9
  75. package/dist/cli/commands/evolution.js +12 -12
  76. package/dist/cli/commands/figma.js +20 -20
  77. package/dist/cli/commands/info.js +53 -53
  78. package/dist/cli/commands/init.js +5 -5
  79. package/dist/cli/commands/remove.js +14 -14
  80. package/dist/cli/commands/sentinel.js +27 -27
  81. package/dist/cli/commands/skills.js +5 -5
  82. package/dist/cli/commands/slack.js +10 -10
  83. package/dist/cli/commands/stats.js +6 -6
  84. package/dist/cli/commands/telegram.js +12 -12
  85. package/dist/cli/detect.js +32 -32
  86. package/dist/cli/index.d.ts.map +1 -1
  87. package/dist/cli/index.js +52 -57
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/cli/llm/claude-commands.js +16 -16
  90. package/dist/cli/llm/config.js +18 -18
  91. package/dist/cli/llm/gemini-commands.js +16 -16
  92. package/dist/cli/llm/gpt-commands.js +19 -19
  93. package/dist/cli/llm/help.js +21 -21
  94. package/dist/cli/postinstall/cursor-agents.js +32 -32
  95. package/dist/cli/postinstall/cursor-rules.js +83 -83
  96. package/dist/cli/postinstall/cursor-skills.js +743 -743
  97. package/dist/cli/postinstall/inline-skills.js +2 -2
  98. package/dist/cli/postinstall/inline-skills.js.map +1 -1
  99. package/dist/cli/postinstall/main.js +1 -1
  100. package/dist/cli/postinstall/main.js.map +1 -1
  101. package/dist/cli/setup/Provisioner.js +42 -42
  102. package/dist/infra/lib/DeepInit.js +24 -24
  103. package/dist/infra/lib/IterationTracker.js +11 -11
  104. package/dist/infra/lib/PythonParser.js +108 -108
  105. package/dist/infra/lib/ReviewRace.js +96 -96
  106. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  107. package/dist/infra/lib/SkillQualityGate.js +9 -9
  108. package/dist/infra/lib/SkillRepository.js +159 -159
  109. package/dist/infra/lib/UltraQA.js +99 -99
  110. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  111. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  112. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  113. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  114. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  115. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  116. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  117. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  118. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  119. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  120. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  121. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  122. package/dist/infra/lib/evolution/ParityTester.js +57 -57
  123. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  124. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  125. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  126. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  127. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  128. package/dist/infra/lib/gemini/orchestration.js +5 -5
  129. package/dist/infra/lib/gpt/orchestration.js +4 -4
  130. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  131. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  132. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  133. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  134. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  135. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  136. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  137. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  138. package/dist/infra/orchestrator/AgentManager.js +12 -12
  139. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  140. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  141. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  142. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  143. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  144. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  145. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  146. package/dist/tools/memory/getMemoryGraph.js +12 -12
  147. package/dist/tools/memory/getSessionContext.js +9 -9
  148. package/dist/tools/memory/linkMemories.js +14 -14
  149. package/dist/tools/memory/listMemories.js +4 -4
  150. package/dist/tools/memory/recallMemory.js +4 -4
  151. package/dist/tools/memory/saveMemory.js +4 -4
  152. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  153. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  154. package/dist/tools/semantic/astGrep.test.js +6 -6
  155. package/dist/tools/spec/prdParser.test.js +171 -171
  156. package/dist/tools/spec/specGenerator.js +169 -169
  157. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  158. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  159. package/hooks/gemini-hooks.json +73 -73
  160. package/hooks/hooks.json +170 -170
  161. package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
  162. package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
  163. package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
  164. package/hooks/scripts/auto-commit.js +97 -65
  165. package/hooks/scripts/auto-format.js +64 -64
  166. package/hooks/scripts/auto-test.js +81 -81
  167. package/hooks/scripts/code-check.js +268 -216
  168. package/hooks/scripts/codex-detect.js +46 -46
  169. package/hooks/scripts/codex-review-gate.js +80 -80
  170. package/hooks/scripts/command-log.js +32 -32
  171. package/hooks/scripts/context-save.js +353 -353
  172. package/hooks/scripts/evolution-engine.js +91 -91
  173. package/hooks/scripts/figma-extract.js +477 -602
  174. package/hooks/scripts/hud-status.js +321 -321
  175. package/hooks/scripts/keyword-detector.js +214 -214
  176. package/hooks/scripts/llm-orchestrate.js +572 -555
  177. package/hooks/scripts/post-edit.js +32 -32
  178. package/hooks/scripts/pr-test-gate.js +52 -52
  179. package/hooks/scripts/pre-tool-guard.js +159 -159
  180. package/hooks/scripts/prompt-dispatcher.js +185 -185
  181. package/hooks/scripts/sentinel-guard.js +131 -131
  182. package/hooks/scripts/session-start.js +177 -106
  183. package/hooks/scripts/skill-injector.js +83 -83
  184. package/hooks/scripts/stop-notify.js +209 -209
  185. package/hooks/scripts/utils.js +243 -186
  186. package/languages/csharp-unity.md +515 -515
  187. package/languages/gdscript-godot.md +470 -470
  188. package/languages/ruby-rails.md +489 -489
  189. package/languages/typescript-angular.md +433 -433
  190. package/languages/typescript-astro.md +416 -416
  191. package/languages/typescript-electron.md +406 -406
  192. package/languages/typescript-nestjs.md +524 -524
  193. package/languages/typescript-svelte.md +407 -407
  194. package/languages/typescript-tauri.md +365 -365
  195. package/package.json +101 -100
  196. package/skills/agents-md/SKILL.md +121 -121
  197. package/skills/agents-md/rubrics/what-to-keep.md +49 -49
  198. package/skills/agents-md/templates/agents-md.md +36 -36
  199. package/skills/arch-guard/SKILL.md +181 -181
  200. package/skills/arch-guard/agents/detector.md +48 -48
  201. package/skills/arch-guard/agents/reporter.md +48 -48
  202. package/skills/arch-guard/agents/rule-generator.md +49 -49
  203. package/skills/arch-guard/agents/violation-checker.md +51 -51
  204. package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
  205. package/skills/arch-guard/frameworks/solid.md +102 -102
  206. package/skills/arch-guard/scripts/check-boundaries.js +90 -90
  207. package/skills/arch-guard/templates/arch-rules.json +47 -47
  208. package/skills/arch-guard/templates/violation-report.md +53 -53
  209. package/skills/brand-assets/SKILL.md +147 -147
  210. package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
  211. package/skills/brand-assets/templates/brand-guide.md +161 -161
  212. package/skills/capability-loop/SKILL.md +168 -168
  213. package/skills/capability-loop/agents/capability-designer.md +61 -61
  214. package/skills/capability-loop/agents/failure-analyst.md +55 -55
  215. package/skills/capability-loop/agents/implementer.md +50 -50
  216. package/skills/capability-loop/agents/tester.md +53 -53
  217. package/skills/capability-loop/templates/capability-spec.md +118 -118
  218. package/skills/capability-loop/templates/failure-analysis.md +118 -118
  219. package/skills/characterization-test/SKILL.md +207 -207
  220. package/skills/characterization-test/agents/behavior-capturer.md +50 -50
  221. package/skills/characterization-test/agents/coverage-checker.md +54 -54
  222. package/skills/characterization-test/agents/reporter.md +50 -50
  223. package/skills/characterization-test/agents/test-writer.md +49 -49
  224. package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
  225. package/skills/characterization-test/templates/test-template.ts +101 -101
  226. package/skills/chub-usage/SKILL.md +139 -115
  227. package/skills/claude-md-guide/SKILL.md +351 -351
  228. package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
  229. package/skills/claude-md-guide/templates/claude-md.md +54 -54
  230. package/skills/commerce-patterns/SKILL.md +64 -64
  231. package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
  232. package/skills/commerce-patterns/templates/product-schema.md +85 -85
  233. package/skills/commit-push-pr/SKILL.md +77 -77
  234. package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
  235. package/skills/commit-push-pr/agents/message-writer.md +50 -50
  236. package/skills/commit-push-pr/agents/pr-writer.md +58 -58
  237. package/skills/commit-push-pr/agents/reviewer.md +52 -52
  238. package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
  239. package/skills/commit-push-pr/templates/pr-body.md +63 -63
  240. package/skills/context7-usage/SKILL.md +106 -106
  241. package/skills/context7-usage/rubrics/when-to-use.md +50 -50
  242. package/skills/create-prd/SKILL.md +90 -90
  243. package/skills/create-prd/agents/edge-case-finder.md +48 -48
  244. package/skills/create-prd/agents/prioritizer.md +60 -60
  245. package/skills/create-prd/agents/requirements-writer.md +48 -48
  246. package/skills/create-prd/agents/researcher.md +55 -55
  247. package/skills/create-prd/agents/reviewer.md +54 -54
  248. package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
  249. package/skills/create-prd/frameworks/rice-scoring.md +97 -97
  250. package/skills/create-prd/orchestrator.md +70 -70
  251. package/skills/create-prd/rubrics/completeness.md +58 -58
  252. package/skills/create-prd/templates/prd.md +139 -139
  253. package/skills/design-audit/SKILL.md +152 -152
  254. package/skills/design-audit/agents/a11y-auditor.md +43 -43
  255. package/skills/design-audit/agents/performance-auditor.md +46 -46
  256. package/skills/design-audit/agents/responsive-auditor.md +46 -46
  257. package/skills/design-audit/agents/scorer.md +47 -47
  258. package/skills/design-audit/agents/slop-detector.md +47 -47
  259. package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
  260. package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
  261. package/skills/design-audit/orchestrator.md +64 -64
  262. package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
  263. package/skills/design-audit/rubrics/scoring.md +63 -63
  264. package/skills/design-audit/templates/report.md +88 -88
  265. package/skills/design-critique/SKILL.md +139 -139
  266. package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
  267. package/skills/design-critique/templates/critique-report.md +86 -86
  268. package/skills/design-distill/SKILL.md +130 -130
  269. package/skills/design-distill/templates/design-system.md +132 -132
  270. package/skills/design-normalize/SKILL.md +133 -133
  271. package/skills/design-normalize/rubrics/token-naming.md +117 -117
  272. package/skills/design-normalize/templates/token-audit.md +89 -89
  273. package/skills/design-polish/SKILL.md +131 -131
  274. package/skills/design-polish/rubrics/polish-checklist.md +68 -68
  275. package/skills/design-polish/templates/polish-report.md +64 -64
  276. package/skills/design-teach/SKILL.md +182 -182
  277. package/skills/design-teach/rubrics/brand-personality.md +73 -73
  278. package/skills/design-teach/templates/design-context.json +36 -36
  279. package/skills/e2e-commerce/SKILL.md +62 -62
  280. package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
  281. package/skills/event-comms/SKILL.md +162 -162
  282. package/skills/event-comms/templates/email-invite.md +99 -99
  283. package/skills/event-comms/templates/sns-post.md +133 -133
  284. package/skills/event-ops/SKILL.md +198 -198
  285. package/skills/event-ops/rubrics/contingency.md +85 -85
  286. package/skills/event-ops/templates/d-day-checklist.md +65 -65
  287. package/skills/event-planning/SKILL.md +132 -132
  288. package/skills/event-planning/rubrics/timeline.md +70 -70
  289. package/skills/event-planning/templates/event-plan.md +91 -91
  290. package/skills/exec-plan/SKILL.md +149 -149
  291. package/skills/exec-plan/agents/decomposer.md +47 -47
  292. package/skills/exec-plan/agents/dependency-mapper.md +44 -44
  293. package/skills/exec-plan/agents/estimator.md +43 -43
  294. package/skills/exec-plan/agents/validator.md +55 -55
  295. package/skills/exec-plan/orchestrator.md +70 -70
  296. package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
  297. package/skills/exec-plan/templates/plan.md +147 -147
  298. package/skills/git-worktree/SKILL.md +73 -73
  299. package/skills/git-worktree/rubrics/when-to-use.md +55 -55
  300. package/skills/handoff/SKILL.md +110 -110
  301. package/skills/handoff/agents/context-summarizer.md +51 -51
  302. package/skills/handoff/agents/document-writer.md +63 -63
  303. package/skills/handoff/agents/state-collector.md +53 -53
  304. package/skills/handoff/agents/verifier.md +48 -48
  305. package/skills/handoff/rubrics/completeness.md +62 -62
  306. package/skills/handoff/templates/handoff.md +107 -107
  307. package/skills/parallel-research/SKILL.md +89 -89
  308. package/skills/parallel-research/agents/best-practices.md +43 -43
  309. package/skills/parallel-research/agents/codebase-patterns.md +46 -46
  310. package/skills/parallel-research/agents/framework-docs.md +45 -45
  311. package/skills/parallel-research/agents/security-advisory.md +46 -46
  312. package/skills/parallel-research/agents/synthesizer.md +52 -52
  313. package/skills/parallel-research/experts/best-practices.md +50 -50
  314. package/skills/parallel-research/experts/codebase-patterns.md +70 -70
  315. package/skills/parallel-research/experts/framework-docs.md +65 -65
  316. package/skills/parallel-research/experts/security-advisory.md +69 -69
  317. package/skills/parallel-research/orchestrator.md +65 -65
  318. package/skills/parallel-research/templates/synthesis.md +101 -101
  319. package/skills/prioritization-frameworks/SKILL.md +87 -87
  320. package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
  321. package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
  322. package/skills/priority-todos/SKILL.md +64 -64
  323. package/skills/priority-todos/rubrics/prioritization.md +70 -70
  324. package/skills/priority-todos/templates/todo-board.md +59 -59
  325. package/skills/seo-checklist/SKILL.md +58 -58
  326. package/skills/seo-checklist/frameworks/structured-data.md +153 -153
  327. package/skills/seo-checklist/rubrics/content-seo.md +42 -42
  328. package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
  329. package/skills/techdebt/SKILL.md +124 -124
  330. package/skills/techdebt/agents/analyzer.md +50 -50
  331. package/skills/techdebt/agents/fixer.md +41 -41
  332. package/skills/techdebt/agents/reviewer.md +47 -47
  333. package/skills/techdebt/agents/scanner.md +44 -44
  334. package/skills/techdebt/orchestrator.md +70 -70
  335. package/skills/techdebt/rubrics/severity.md +51 -51
  336. package/skills/techdebt/scripts/scan.js +90 -90
  337. package/skills/techdebt/templates/report.md +86 -86
  338. package/skills/tool-fallback/SKILL.md +104 -104
  339. package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
  340. package/skills/typescript-advanced-types/SKILL.md +67 -67
  341. package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
  342. package/skills/ui-ux-pro-max/SKILL.md +236 -236
  343. package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
  344. package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
  345. package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
  346. package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
  347. package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
  348. package/skills/ui-ux-pro-max/reference/typography.md +455 -455
  349. package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
  350. package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
  351. package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
  352. package/skills/user-personas/SKILL.md +75 -75
  353. package/skills/user-personas/rubrics/research-methods.md +56 -56
  354. package/skills/user-personas/templates/persona.md +89 -89
  355. package/skills/vercel-react-best-practices/SKILL.md +60 -60
  356. package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
  357. package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
  358. package/skills/vibe.docs/SKILL.md +171 -171
  359. package/skills/vibe.docs/templates/architecture.md +80 -80
  360. package/skills/vibe.docs/templates/readme.md +84 -84
  361. package/skills/vibe.docs/templates/release-notes.md +74 -74
  362. package/skills/vibe.figma/SKILL.md +982 -209
  363. package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
  364. package/skills/vibe.figma/templates/component-index.md +126 -126
  365. package/skills/vibe.figma/templates/figma-handoff.md +100 -100
  366. package/skills/vibe.figma/templates/remapped-tree.md +277 -277
  367. package/skills/vibe.figma.convert/SKILL.md +511 -630
  368. package/skills/vibe.figma.convert/rubrics/conversion-rules.md +113 -129
  369. package/skills/vibe.figma.convert/templates/component.md +140 -140
  370. package/skills/vibe.figma.extract/SKILL.md +300 -349
  371. package/skills/vibe.figma.extract/rubrics/image-rules.md +137 -145
  372. package/skills/video-production/SKILL.md +52 -52
  373. package/skills/video-production/rubrics/quality-checklist.md +58 -58
  374. package/skills/video-production/templates/production-plan.md +104 -104
  375. package/vibe/config.json +29 -29
  376. package/vibe/constitution.md +227 -227
  377. package/vibe/rules/principles/communication-guide.md +98 -98
  378. package/vibe/rules/principles/development-philosophy.md +52 -52
  379. package/vibe/rules/principles/quick-start.md +102 -102
  380. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  381. package/vibe/rules/quality/checklist.md +276 -276
  382. package/vibe/rules/quality/performance.md +236 -236
  383. package/vibe/rules/quality/testing-strategy.md +440 -440
  384. package/vibe/rules/standards/anti-patterns.md +541 -541
  385. package/vibe/rules/standards/code-structure.md +291 -291
  386. package/vibe/rules/standards/complexity-metrics.md +313 -313
  387. package/vibe/rules/standards/git-workflow.md +237 -237
  388. package/vibe/rules/standards/naming-conventions.md +198 -198
  389. package/vibe/rules/standards/security.md +305 -305
  390. package/vibe/rules/writing/document-style.md +74 -74
  391. package/vibe/setup.sh +31 -31
  392. package/vibe/templates/constitution-template.md +252 -252
  393. package/vibe/templates/contract-backend-template.md +526 -526
  394. package/vibe/templates/contract-frontend-template.md +599 -599
  395. package/vibe/templates/feature-template.md +96 -96
  396. package/vibe/templates/spec-template.md +221 -221
  397. package/vibe/ui-ux-data/charts.csv +26 -26
  398. package/vibe/ui-ux-data/colors.csv +97 -97
  399. package/vibe/ui-ux-data/icons.csv +101 -101
  400. package/vibe/ui-ux-data/landing.csv +31 -31
  401. package/vibe/ui-ux-data/products.csv +96 -96
  402. package/vibe/ui-ux-data/react-performance.csv +45 -45
  403. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  404. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  405. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  406. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  407. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  408. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  409. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  410. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  411. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  412. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  413. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  414. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  415. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  416. package/vibe/ui-ux-data/styles.csv +68 -68
  417. package/vibe/ui-ux-data/typography.csv +57 -57
  418. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  419. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  420. package/vibe/ui-ux-data/version.json +31 -31
  421. 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
- contains: "contains";
14
+ in: "in";
15
15
  eq: "eq";
16
+ neq: "neq";
17
+ contains: "contains";
16
18
  matches: "matches";
17
19
  gt: "gt";
18
20
  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
  }