@su-record/vibe 2.9.22 → 2.9.23
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.
- package/.env.example +37 -37
- package/CLAUDE.md +105 -105
- package/LICENSE +21 -21
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +294 -294
- package/agents/event/event-comms.md +78 -78
- package/agents/event/event-content.md +68 -68
- package/agents/event/event-image.md +95 -95
- package/agents/event/event-ops.md +84 -84
- package/agents/event/event-scheduler.md +69 -69
- package/agents/event/event-speaker.md +86 -86
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/qa/qa-coordinator.md +131 -131
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/teams/debug-team.md +70 -70
- package/agents/teams/dev-team.md +88 -88
- package/agents/teams/docs-team.md +80 -80
- package/agents/teams/figma/figma-analyst.md +52 -52
- package/agents/teams/figma/figma-architect.md +112 -112
- package/agents/teams/figma/figma-auditor.md +82 -82
- package/agents/teams/figma/figma-builder.md +100 -100
- package/agents/teams/figma-team.md +85 -85
- package/agents/teams/fullstack-team.md +83 -83
- package/agents/teams/lite-team.md +69 -69
- package/agents/teams/migration-team.md +78 -78
- package/agents/teams/refactor-team.md +94 -94
- package/agents/teams/research-team.md +86 -86
- package/agents/teams/review-debate-team.md +125 -125
- package/agents/teams/security-team.md +81 -81
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +102 -102
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +258 -258
- package/commands/vibe.analyze.md +533 -533
- package/commands/vibe.contract.md +105 -105
- package/commands/vibe.docs.md +33 -33
- package/commands/vibe.event.md +163 -163
- package/commands/vibe.figma.md +584 -584
- package/commands/vibe.harness.md +177 -177
- package/commands/vibe.regress.md +73 -73
- package/commands/vibe.review.md +624 -624
- package/commands/vibe.run.md +1940 -1940
- package/commands/vibe.scaffold.md +195 -195
- package/commands/vibe.spec.md +577 -577
- package/commands/vibe.test.md +96 -96
- package/commands/vibe.trace.md +276 -276
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +550 -550
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/codex-proxy.js +15 -15
- package/dist/cli/commands/config.js +9 -9
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/figma.js +20 -20
- package/dist/cli/commands/info.js +52 -52
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +16 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.js +5 -5
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/stats.js +6 -6
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +16 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.js +33 -33
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +18 -18
- package/dist/cli/llm/gemini-commands.js +16 -16
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/IterationTracker.js +11 -11
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/ParityTester.js +57 -57
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
- package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +126 -126
- package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +368 -368
- package/hooks/scripts/__tests__/sentinel-guard.test.js +208 -208
- package/hooks/scripts/auto-commit.js +97 -97
- package/hooks/scripts/auto-format.js +64 -64
- package/hooks/scripts/auto-test.js +81 -81
- package/hooks/scripts/code-check.js +268 -268
- package/hooks/scripts/codex-detect.js +46 -46
- package/hooks/scripts/codex-review-gate.js +80 -80
- package/hooks/scripts/command-log.js +32 -32
- package/hooks/scripts/context-save.js +353 -353
- package/hooks/scripts/evolution-engine.js +91 -91
- package/hooks/scripts/figma-extract.js +635 -635
- package/hooks/scripts/figma-guard.js +219 -219
- package/hooks/scripts/figma-refine.js +315 -315
- package/hooks/scripts/figma-to-scss.js +394 -394
- package/hooks/scripts/figma-validate.js +353 -353
- package/hooks/scripts/hud-status.js +321 -321
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/lib/scope-from-spec.js +261 -0
- package/hooks/scripts/llm-orchestrate.js +645 -645
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pr-test-gate.js +52 -52
- package/hooks/scripts/pre-tool-dispatcher.js +5 -0
- package/hooks/scripts/pre-tool-guard.js +254 -254
- package/hooks/scripts/prompt-dispatcher.js +190 -190
- package/hooks/scripts/scope-guard.js +145 -0
- package/hooks/scripts/sentinel-guard.js +130 -130
- package/hooks/scripts/session-start.js +186 -177
- package/hooks/scripts/skill-injector.js +83 -83
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +257 -257
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +10 -5
- package/skills/agents-md/SKILL.md +121 -121
- package/skills/agents-md/rubrics/what-to-keep.md +49 -49
- package/skills/agents-md/templates/agents-md.md +36 -36
- package/skills/arch-guard/SKILL.md +181 -181
- package/skills/arch-guard/agents/detector.md +48 -48
- package/skills/arch-guard/agents/reporter.md +48 -48
- package/skills/arch-guard/agents/rule-generator.md +49 -49
- package/skills/arch-guard/agents/violation-checker.md +51 -51
- package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
- package/skills/arch-guard/frameworks/solid.md +102 -102
- package/skills/arch-guard/scripts/check-boundaries.js +90 -90
- package/skills/arch-guard/templates/arch-rules.json +47 -47
- package/skills/arch-guard/templates/violation-report.md +53 -53
- package/skills/brand-assets/SKILL.md +147 -147
- package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
- package/skills/brand-assets/templates/brand-guide.md +161 -161
- package/skills/capability-loop/SKILL.md +272 -272
- package/skills/capability-loop/agents/capability-designer.md +61 -61
- package/skills/capability-loop/agents/failure-analyst.md +55 -55
- package/skills/capability-loop/agents/implementer.md +50 -50
- package/skills/capability-loop/agents/tester.md +53 -53
- package/skills/capability-loop/templates/capability-spec.md +118 -118
- package/skills/capability-loop/templates/failure-analysis.md +118 -118
- package/skills/characterization-test/SKILL.md +207 -207
- package/skills/characterization-test/agents/behavior-capturer.md +50 -50
- package/skills/characterization-test/agents/coverage-checker.md +54 -54
- package/skills/characterization-test/agents/reporter.md +50 -50
- package/skills/characterization-test/agents/test-writer.md +49 -49
- package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
- package/skills/characterization-test/templates/test-template.ts +101 -101
- package/skills/chub-usage/SKILL.md +139 -139
- package/skills/claude-md-guide/SKILL.md +351 -351
- package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
- package/skills/claude-md-guide/templates/claude-md.md +54 -54
- package/skills/commerce-patterns/SKILL.md +64 -64
- package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
- package/skills/commerce-patterns/templates/product-schema.md +85 -85
- package/skills/commit-push-pr/SKILL.md +77 -77
- package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
- package/skills/commit-push-pr/agents/message-writer.md +50 -50
- package/skills/commit-push-pr/agents/pr-writer.md +58 -58
- package/skills/commit-push-pr/agents/reviewer.md +52 -52
- package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
- package/skills/commit-push-pr/templates/pr-body.md +63 -63
- package/skills/context7-usage/SKILL.md +106 -106
- package/skills/context7-usage/rubrics/when-to-use.md +50 -50
- package/skills/create-prd/SKILL.md +90 -90
- package/skills/create-prd/agents/edge-case-finder.md +48 -48
- package/skills/create-prd/agents/prioritizer.md +60 -60
- package/skills/create-prd/agents/requirements-writer.md +48 -48
- package/skills/create-prd/agents/researcher.md +55 -55
- package/skills/create-prd/agents/reviewer.md +54 -54
- package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
- package/skills/create-prd/frameworks/rice-scoring.md +97 -97
- package/skills/create-prd/orchestrator.md +70 -70
- package/skills/create-prd/rubrics/completeness.md +58 -58
- package/skills/create-prd/templates/prd.md +139 -139
- package/skills/design-audit/SKILL.md +152 -152
- package/skills/design-audit/agents/a11y-auditor.md +43 -43
- package/skills/design-audit/agents/performance-auditor.md +46 -46
- package/skills/design-audit/agents/responsive-auditor.md +46 -46
- package/skills/design-audit/agents/scorer.md +47 -47
- package/skills/design-audit/agents/slop-detector.md +47 -47
- package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
- package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
- package/skills/design-audit/orchestrator.md +64 -64
- package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
- package/skills/design-audit/rubrics/scoring.md +63 -63
- package/skills/design-audit/templates/report.md +88 -88
- package/skills/design-critique/SKILL.md +139 -139
- package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
- package/skills/design-critique/templates/critique-report.md +86 -86
- package/skills/design-distill/SKILL.md +130 -130
- package/skills/design-distill/templates/design-system.md +132 -132
- package/skills/design-normalize/SKILL.md +133 -133
- package/skills/design-normalize/rubrics/token-naming.md +117 -117
- package/skills/design-normalize/templates/token-audit.md +89 -89
- package/skills/design-polish/SKILL.md +131 -131
- package/skills/design-polish/rubrics/polish-checklist.md +68 -68
- package/skills/design-polish/templates/polish-report.md +64 -64
- package/skills/design-teach/SKILL.md +182 -182
- package/skills/design-teach/rubrics/brand-personality.md +73 -73
- package/skills/design-teach/templates/design-context.json +36 -36
- package/skills/devlog/SKILL.md +143 -143
- package/skills/e2e-commerce/SKILL.md +62 -62
- package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
- package/skills/event-comms/SKILL.md +172 -172
- package/skills/event-comms/templates/email-invite.md +99 -99
- package/skills/event-comms/templates/sns-post.md +133 -133
- package/skills/event-ops/SKILL.md +207 -207
- package/skills/event-ops/rubrics/contingency.md +85 -85
- package/skills/event-ops/templates/d-day-checklist.md +65 -65
- package/skills/event-planning/SKILL.md +144 -144
- package/skills/event-planning/rubrics/timeline.md +70 -70
- package/skills/event-planning/templates/event-plan.md +91 -91
- package/skills/exec-plan/SKILL.md +149 -149
- package/skills/exec-plan/agents/decomposer.md +47 -47
- package/skills/exec-plan/agents/dependency-mapper.md +44 -44
- package/skills/exec-plan/agents/estimator.md +43 -43
- package/skills/exec-plan/agents/validator.md +55 -55
- package/skills/exec-plan/orchestrator.md +70 -70
- package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
- package/skills/exec-plan/templates/plan.md +147 -147
- package/skills/git-worktree/SKILL.md +73 -73
- package/skills/git-worktree/rubrics/when-to-use.md +55 -55
- package/skills/handoff/SKILL.md +110 -110
- package/skills/handoff/agents/context-summarizer.md +51 -51
- package/skills/handoff/agents/document-writer.md +63 -63
- package/skills/handoff/agents/state-collector.md +53 -53
- package/skills/handoff/agents/verifier.md +48 -48
- package/skills/handoff/rubrics/completeness.md +62 -62
- package/skills/handoff/templates/handoff.md +107 -107
- package/skills/parallel-research/SKILL.md +104 -104
- package/skills/parallel-research/agents/best-practices.md +43 -43
- package/skills/parallel-research/agents/codebase-patterns.md +46 -46
- package/skills/parallel-research/agents/framework-docs.md +45 -45
- package/skills/parallel-research/agents/security-advisory.md +46 -46
- package/skills/parallel-research/agents/synthesizer.md +57 -57
- package/skills/parallel-research/experts/best-practices.md +50 -50
- package/skills/parallel-research/experts/codebase-patterns.md +70 -70
- package/skills/parallel-research/experts/framework-docs.md +65 -65
- package/skills/parallel-research/experts/security-advisory.md +69 -69
- package/skills/parallel-research/orchestrator.md +79 -79
- package/skills/parallel-research/templates/awesome-list.md +32 -32
- package/skills/parallel-research/templates/paper.md +88 -88
- package/skills/parallel-research/templates/synthesis.md +101 -101
- package/skills/prioritization-frameworks/SKILL.md +87 -87
- package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
- package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
- package/skills/priority-todos/SKILL.md +64 -64
- package/skills/priority-todos/rubrics/prioritization.md +70 -70
- package/skills/priority-todos/templates/todo-board.md +59 -59
- package/skills/seo-checklist/SKILL.md +58 -58
- package/skills/seo-checklist/frameworks/structured-data.md +153 -153
- package/skills/seo-checklist/rubrics/content-seo.md +42 -42
- package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
- package/skills/techdebt/SKILL.md +124 -124
- package/skills/techdebt/agents/analyzer.md +50 -50
- package/skills/techdebt/agents/fixer.md +41 -41
- package/skills/techdebt/agents/reviewer.md +47 -47
- package/skills/techdebt/agents/scanner.md +44 -44
- package/skills/techdebt/orchestrator.md +70 -70
- package/skills/techdebt/rubrics/severity.md +51 -51
- package/skills/techdebt/scripts/scan.js +90 -90
- package/skills/techdebt/templates/report.md +86 -86
- package/skills/tool-fallback/SKILL.md +104 -104
- package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
- package/skills/typescript-advanced-types/SKILL.md +67 -67
- package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
- package/skills/ui-ux-pro-max/SKILL.md +236 -236
- package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
- package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
- package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
- package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
- package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
- package/skills/ui-ux-pro-max/reference/typography.md +455 -455
- package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
- package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
- package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
- package/skills/user-personas/SKILL.md +75 -75
- package/skills/user-personas/rubrics/research-methods.md +56 -56
- package/skills/user-personas/templates/persona.md +89 -89
- package/skills/vercel-react-best-practices/SKILL.md +60 -60
- package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
- package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
- package/skills/vibe-contract/SKILL.md +166 -166
- package/skills/vibe-docs/templates/architecture.md +80 -80
- package/skills/vibe-docs/templates/readme.md +84 -84
- package/skills/vibe-docs/templates/release-notes.md +74 -74
- package/skills/vibe-figma/SKILL.md +363 -363
- package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -51
- package/skills/vibe-figma/templates/component-index.md +126 -126
- package/skills/vibe-figma/templates/component-spec.md +168 -168
- package/skills/vibe-figma/templates/figma-handoff.md +100 -100
- package/skills/vibe-figma/templates/remapped-tree.md +277 -277
- package/skills/vibe-figma-convert/SKILL.md +235 -235
- package/skills/vibe-figma-convert/rubrics/conversion-rules.md +141 -141
- package/skills/vibe-figma-convert/templates/component.md +140 -140
- package/skills/vibe-figma-extract/SKILL.md +219 -219
- package/skills/vibe-figma-extract/rubrics/image-rules.md +157 -157
- package/skills/vibe-interview/SKILL.md +358 -358
- package/skills/vibe-interview/checklists/api.md +101 -101
- package/skills/vibe-interview/checklists/feature.md +88 -88
- package/skills/vibe-interview/checklists/library.md +95 -95
- package/skills/vibe-interview/checklists/mobile.md +89 -89
- package/skills/vibe-interview/checklists/webapp.md +97 -97
- package/skills/vibe-interview/checklists/website.md +99 -99
- package/skills/vibe-plan/SKILL.md +254 -254
- package/skills/vibe-regress/SKILL.md +174 -174
- package/skills/vibe-regress/templates/bug.md +44 -44
- package/skills/vibe-regress/templates/test-jest.md +29 -29
- package/skills/vibe-regress/templates/test-vitest.md +30 -30
- package/skills/vibe-spec/SKILL.md +1195 -1195
- package/skills/vibe-spec-review/SKILL.md +726 -726
- package/skills/vibe-test/SKILL.md +247 -247
- package/skills/video-production/SKILL.md +52 -52
- package/skills/video-production/rubrics/quality-checklist.md +58 -58
- package/skills/video-production/templates/production-plan.md +104 -104
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/claudemd-template.md +74 -74
- package/vibe/templates/constitution-template.md +267 -267
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/plan-template.md +194 -194
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- package/vibe/ui-ux-data/web-interface.csv +31 -31
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: techdebt-scanner
|
|
3
|
-
role: Scans codebase for code smells — any types, console.log, unused imports, magic numbers
|
|
4
|
-
tools: [Grep, Glob, Read]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Techdebt Scanner
|
|
8
|
-
|
|
9
|
-
## Role
|
|
10
|
-
Performs broad pattern-based scanning across the codebase to locate instances of known code smells. Produces a raw findings list with file paths and line numbers. Does not assess severity — that is the analyzer's job.
|
|
11
|
-
|
|
12
|
-
## Responsibilities
|
|
13
|
-
- Scan for `any` and `as any` TypeScript type violations
|
|
14
|
-
- Detect `console.log`, `console.error`, `console.warn`, `debugger` statements
|
|
15
|
-
- Find unused import statements by cross-referencing declaration vs. usage
|
|
16
|
-
- Locate magic numbers and hardcoded string literals outside constant files
|
|
17
|
-
- Detect commented-out code blocks containing code constructs
|
|
18
|
-
|
|
19
|
-
## Input
|
|
20
|
-
- Root directory path to scan
|
|
21
|
-
- Optional glob filter (e.g., `src/**/*.{ts,tsx}`)
|
|
22
|
-
- Optional category filter (e.g., scan only `any-types`)
|
|
23
|
-
|
|
24
|
-
## Output
|
|
25
|
-
Structured findings list in JSON format:
|
|
26
|
-
```json
|
|
27
|
-
[
|
|
28
|
-
{ "category": "any-type", "file": "src/services/user.ts", "line": 34, "snippet": ": any" },
|
|
29
|
-
{ "category": "console-log", "file": "src/api/auth.ts", "line": 12, "snippet": "console.log(token)" },
|
|
30
|
-
{ "category": "magic-number", "file": "src/utils/calc.ts", "line": 10, "snippet": "* 365" }
|
|
31
|
-
]
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Communication
|
|
35
|
-
- Reports findings to: `techdebt-analyzer`
|
|
36
|
-
- Receives instructions from: techdebt orchestrator (SKILL.md)
|
|
37
|
-
|
|
38
|
-
## Domain Knowledge
|
|
39
|
-
Scan patterns:
|
|
40
|
-
- `any` types: `: any\b`, `as any\b`, `<any>`
|
|
41
|
-
- Debug code: `console\.(log|error|warn|debug|info)`, `\bdebugger\b`
|
|
42
|
-
- Magic numbers: numeric literals outside `const` declarations, ignoring 0, 1, -1, 100
|
|
43
|
-
- Commented code: `^\s*//.*\b(function|const|let|var|class|import)\b`
|
|
44
|
-
- Unused imports: declared in `import { X }` but `X` never referenced in file body
|
|
1
|
+
---
|
|
2
|
+
name: techdebt-scanner
|
|
3
|
+
role: Scans codebase for code smells — any types, console.log, unused imports, magic numbers
|
|
4
|
+
tools: [Grep, Glob, Read]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Techdebt Scanner
|
|
8
|
+
|
|
9
|
+
## Role
|
|
10
|
+
Performs broad pattern-based scanning across the codebase to locate instances of known code smells. Produces a raw findings list with file paths and line numbers. Does not assess severity — that is the analyzer's job.
|
|
11
|
+
|
|
12
|
+
## Responsibilities
|
|
13
|
+
- Scan for `any` and `as any` TypeScript type violations
|
|
14
|
+
- Detect `console.log`, `console.error`, `console.warn`, `debugger` statements
|
|
15
|
+
- Find unused import statements by cross-referencing declaration vs. usage
|
|
16
|
+
- Locate magic numbers and hardcoded string literals outside constant files
|
|
17
|
+
- Detect commented-out code blocks containing code constructs
|
|
18
|
+
|
|
19
|
+
## Input
|
|
20
|
+
- Root directory path to scan
|
|
21
|
+
- Optional glob filter (e.g., `src/**/*.{ts,tsx}`)
|
|
22
|
+
- Optional category filter (e.g., scan only `any-types`)
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
Structured findings list in JSON format:
|
|
26
|
+
```json
|
|
27
|
+
[
|
|
28
|
+
{ "category": "any-type", "file": "src/services/user.ts", "line": 34, "snippet": ": any" },
|
|
29
|
+
{ "category": "console-log", "file": "src/api/auth.ts", "line": 12, "snippet": "console.log(token)" },
|
|
30
|
+
{ "category": "magic-number", "file": "src/utils/calc.ts", "line": 10, "snippet": "* 365" }
|
|
31
|
+
]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Communication
|
|
35
|
+
- Reports findings to: `techdebt-analyzer`
|
|
36
|
+
- Receives instructions from: techdebt orchestrator (SKILL.md)
|
|
37
|
+
|
|
38
|
+
## Domain Knowledge
|
|
39
|
+
Scan patterns:
|
|
40
|
+
- `any` types: `: any\b`, `as any\b`, `<any>`
|
|
41
|
+
- Debug code: `console\.(log|error|warn|debug|info)`, `\bdebugger\b`
|
|
42
|
+
- Magic numbers: numeric literals outside `const` declarations, ignoring 0, 1, -1, 100
|
|
43
|
+
- Commented code: `^\s*//.*\b(function|const|let|var|class|import)\b`
|
|
44
|
+
- Unused imports: declared in `import { X }` but `X` never referenced in file body
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: techdebt-orchestrator
|
|
3
|
-
type: orchestrator
|
|
4
|
-
agents: [scanner, analyzer, fixer, reviewer]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Techdebt Orchestrator
|
|
8
|
-
|
|
9
|
-
## Workflow
|
|
10
|
-
|
|
11
|
-
### Phase 1: Scan
|
|
12
|
-
- **Agent**: scanner
|
|
13
|
-
- **Input**: Changed file paths (or root dir + glob filter)
|
|
14
|
-
- **Output**: Raw findings list `[{category, file, line, snippet}]`
|
|
15
|
-
- **Parallel**: yes — each file scanned independently
|
|
16
|
-
|
|
17
|
-
### Phase 2: Analyze
|
|
18
|
-
- **Agent**: analyzer
|
|
19
|
-
- **Input**: Raw findings list from Phase 1
|
|
20
|
-
- **Output**: Scored findings with severity (P0–P3) and auto-fix eligibility flag
|
|
21
|
-
- **Parallel**: no — requires full findings set for deduplication
|
|
22
|
-
|
|
23
|
-
### Phase 3: Fix
|
|
24
|
-
- **Agent**: fixer
|
|
25
|
-
- **Input**: Findings flagged `auto-fixable: true` from Phase 2
|
|
26
|
-
- **Output**: Patch set (file edits) for each auto-fixable item
|
|
27
|
-
- **Parallel**: yes — patches per file are independent
|
|
28
|
-
|
|
29
|
-
### Phase 4: Review
|
|
30
|
-
- **Agent**: reviewer
|
|
31
|
-
- **Input**: Patch set from Phase 3
|
|
32
|
-
- **Output**: Approved patches + rejected patches with rejection reason
|
|
33
|
-
- **Parallel**: no — needs holistic view to catch patch conflicts
|
|
34
|
-
|
|
35
|
-
### Phase 5: Apply
|
|
36
|
-
- **Agent**: orchestrator (self)
|
|
37
|
-
- **Input**: Approved patches from Phase 4 + manual-review items from Phase 2
|
|
38
|
-
- **Output**: Applied fixes + final report with manual-review list
|
|
39
|
-
- **Parallel**: no — sequential file writes to avoid conflicts
|
|
40
|
-
|
|
41
|
-
## DAG (Dependency Graph)
|
|
42
|
-
|
|
43
|
-
```mermaid
|
|
44
|
-
graph TD
|
|
45
|
-
A[Phase 1: Scanner\nparallel per file] --> B[Phase 2: Analyzer]
|
|
46
|
-
B --> C[Phase 3: Fixer\nparallel per file]
|
|
47
|
-
B --> E[Manual Review Items]
|
|
48
|
-
C --> D[Phase 4: Reviewer]
|
|
49
|
-
D --> F[Phase 5: Apply]
|
|
50
|
-
E --> F
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Error Handling
|
|
54
|
-
|
|
55
|
-
| Phase | Failure Mode | Strategy |
|
|
56
|
-
|-------|-------------|----------|
|
|
57
|
-
| Phase 1 | File unreadable / binary file | Skip file, log warning, continue |
|
|
58
|
-
| Phase 1 | Glob returns 0 files | Escalate — prompt user to verify path |
|
|
59
|
-
| Phase 2 | Analyzer returns 0 findings | Skip phases 3–4, output clean report |
|
|
60
|
-
| Phase 3 | Patch generation fails for a file | Skip that file, flag for manual review |
|
|
61
|
-
| Phase 4 | Reviewer rejects all patches | Fallback to manual-review-only report |
|
|
62
|
-
| Phase 5 | Write conflict detected | Abort apply, show diff for manual resolution |
|
|
63
|
-
|
|
64
|
-
## Scalability Modes
|
|
65
|
-
|
|
66
|
-
| Mode | When | Agents Used |
|
|
67
|
-
|------|------|-------------|
|
|
68
|
-
| Full | Normal operation | scanner + analyzer + fixer + reviewer |
|
|
69
|
-
| Reduced | Time pressure / large repo | scanner + analyzer only (no auto-fix) |
|
|
70
|
-
| Single | Quick scan / pre-commit check | scanner only — raw findings, no scoring |
|
|
1
|
+
---
|
|
2
|
+
name: techdebt-orchestrator
|
|
3
|
+
type: orchestrator
|
|
4
|
+
agents: [scanner, analyzer, fixer, reviewer]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Techdebt Orchestrator
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### Phase 1: Scan
|
|
12
|
+
- **Agent**: scanner
|
|
13
|
+
- **Input**: Changed file paths (or root dir + glob filter)
|
|
14
|
+
- **Output**: Raw findings list `[{category, file, line, snippet}]`
|
|
15
|
+
- **Parallel**: yes — each file scanned independently
|
|
16
|
+
|
|
17
|
+
### Phase 2: Analyze
|
|
18
|
+
- **Agent**: analyzer
|
|
19
|
+
- **Input**: Raw findings list from Phase 1
|
|
20
|
+
- **Output**: Scored findings with severity (P0–P3) and auto-fix eligibility flag
|
|
21
|
+
- **Parallel**: no — requires full findings set for deduplication
|
|
22
|
+
|
|
23
|
+
### Phase 3: Fix
|
|
24
|
+
- **Agent**: fixer
|
|
25
|
+
- **Input**: Findings flagged `auto-fixable: true` from Phase 2
|
|
26
|
+
- **Output**: Patch set (file edits) for each auto-fixable item
|
|
27
|
+
- **Parallel**: yes — patches per file are independent
|
|
28
|
+
|
|
29
|
+
### Phase 4: Review
|
|
30
|
+
- **Agent**: reviewer
|
|
31
|
+
- **Input**: Patch set from Phase 3
|
|
32
|
+
- **Output**: Approved patches + rejected patches with rejection reason
|
|
33
|
+
- **Parallel**: no — needs holistic view to catch patch conflicts
|
|
34
|
+
|
|
35
|
+
### Phase 5: Apply
|
|
36
|
+
- **Agent**: orchestrator (self)
|
|
37
|
+
- **Input**: Approved patches from Phase 4 + manual-review items from Phase 2
|
|
38
|
+
- **Output**: Applied fixes + final report with manual-review list
|
|
39
|
+
- **Parallel**: no — sequential file writes to avoid conflicts
|
|
40
|
+
|
|
41
|
+
## DAG (Dependency Graph)
|
|
42
|
+
|
|
43
|
+
```mermaid
|
|
44
|
+
graph TD
|
|
45
|
+
A[Phase 1: Scanner\nparallel per file] --> B[Phase 2: Analyzer]
|
|
46
|
+
B --> C[Phase 3: Fixer\nparallel per file]
|
|
47
|
+
B --> E[Manual Review Items]
|
|
48
|
+
C --> D[Phase 4: Reviewer]
|
|
49
|
+
D --> F[Phase 5: Apply]
|
|
50
|
+
E --> F
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Error Handling
|
|
54
|
+
|
|
55
|
+
| Phase | Failure Mode | Strategy |
|
|
56
|
+
|-------|-------------|----------|
|
|
57
|
+
| Phase 1 | File unreadable / binary file | Skip file, log warning, continue |
|
|
58
|
+
| Phase 1 | Glob returns 0 files | Escalate — prompt user to verify path |
|
|
59
|
+
| Phase 2 | Analyzer returns 0 findings | Skip phases 3–4, output clean report |
|
|
60
|
+
| Phase 3 | Patch generation fails for a file | Skip that file, flag for manual review |
|
|
61
|
+
| Phase 4 | Reviewer rejects all patches | Fallback to manual-review-only report |
|
|
62
|
+
| Phase 5 | Write conflict detected | Abort apply, show diff for manual resolution |
|
|
63
|
+
|
|
64
|
+
## Scalability Modes
|
|
65
|
+
|
|
66
|
+
| Mode | When | Agents Used |
|
|
67
|
+
|------|------|-------------|
|
|
68
|
+
| Full | Normal operation | scanner + analyzer + fixer + reviewer |
|
|
69
|
+
| Reduced | Time pressure / large repo | scanner + analyzer only (no auto-fix) |
|
|
70
|
+
| Single | Quick scan / pre-commit check | scanner only — raw findings, no scoring |
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
# Techdebt Severity Rubric
|
|
2
|
-
|
|
3
|
-
## P1 — Blocks Merge
|
|
4
|
-
|
|
5
|
-
Issues that introduce bugs, security holes, or break type safety. Must fix before merging.
|
|
6
|
-
|
|
7
|
-
| Pattern | Why P1 |
|
|
8
|
-
|---------|--------|
|
|
9
|
-
| `: any` / `as any` | Breaks TypeScript safety guarantee |
|
|
10
|
-
| `@ts-ignore` | Hides real type errors |
|
|
11
|
-
| `debugger` statement | Halts execution in production |
|
|
12
|
-
| Hardcoded secrets / credentials | Security risk |
|
|
13
|
-
| Circular imports causing runtime errors | Breaks module loading |
|
|
14
|
-
|
|
15
|
-
**Rule**: P1 count must be 0 before merge.
|
|
16
|
-
|
|
17
|
-
## P2 — Fix Before PR
|
|
18
|
-
|
|
19
|
-
Issues that reduce maintainability, performance, or correctness. Should be resolved before PR review.
|
|
20
|
-
|
|
21
|
-
| Pattern | Why P2 |
|
|
22
|
-
|---------|--------|
|
|
23
|
-
| `console.log` / `console.warn` | Debug noise in production logs |
|
|
24
|
-
| Functions > 50 lines | Violates complexity limit; hard to test |
|
|
25
|
-
| Nesting depth > 4 | Cognitive overload; obscures logic |
|
|
26
|
-
| Unused imports | Bundle bloat; misleading code |
|
|
27
|
-
| TODO/FIXME without ticket | Ambiguous ownership |
|
|
28
|
-
| Duplicate logic (2+ files) | Maintenance hazard |
|
|
29
|
-
|
|
30
|
-
**Rule**: P2 items are warnings. Resolve or create a tracked P3 ticket before merge.
|
|
31
|
-
|
|
32
|
-
## P3 — Backlog
|
|
33
|
-
|
|
34
|
-
Issues that are cosmetic or nice-to-have. Address during scheduled cleanup sessions.
|
|
35
|
-
|
|
36
|
-
| Pattern | Why P3 |
|
|
37
|
-
|---------|--------|
|
|
38
|
-
| Magic numbers (non-critical) | Readability |
|
|
39
|
-
| Commented-out code | Noise |
|
|
40
|
-
| Inconsistent naming | Style drift |
|
|
41
|
-
| Missing JSDoc on internal helpers | Documentation gap |
|
|
42
|
-
| Slightly long files (200–499 lines) | Future extraction candidate |
|
|
43
|
-
|
|
44
|
-
**Rule**: P3 items never block. Review weekly; archive when resolved.
|
|
45
|
-
|
|
46
|
-
## Convergence Rule
|
|
47
|
-
|
|
48
|
-
- Round 1: address all P1 + P2
|
|
49
|
-
- Round 2: address remaining P1 + P2 only
|
|
50
|
-
- Round 3+: P1 only
|
|
51
|
-
- Same findings as previous round → stop immediately
|
|
1
|
+
# Techdebt Severity Rubric
|
|
2
|
+
|
|
3
|
+
## P1 — Blocks Merge
|
|
4
|
+
|
|
5
|
+
Issues that introduce bugs, security holes, or break type safety. Must fix before merging.
|
|
6
|
+
|
|
7
|
+
| Pattern | Why P1 |
|
|
8
|
+
|---------|--------|
|
|
9
|
+
| `: any` / `as any` | Breaks TypeScript safety guarantee |
|
|
10
|
+
| `@ts-ignore` | Hides real type errors |
|
|
11
|
+
| `debugger` statement | Halts execution in production |
|
|
12
|
+
| Hardcoded secrets / credentials | Security risk |
|
|
13
|
+
| Circular imports causing runtime errors | Breaks module loading |
|
|
14
|
+
|
|
15
|
+
**Rule**: P1 count must be 0 before merge.
|
|
16
|
+
|
|
17
|
+
## P2 — Fix Before PR
|
|
18
|
+
|
|
19
|
+
Issues that reduce maintainability, performance, or correctness. Should be resolved before PR review.
|
|
20
|
+
|
|
21
|
+
| Pattern | Why P2 |
|
|
22
|
+
|---------|--------|
|
|
23
|
+
| `console.log` / `console.warn` | Debug noise in production logs |
|
|
24
|
+
| Functions > 50 lines | Violates complexity limit; hard to test |
|
|
25
|
+
| Nesting depth > 4 | Cognitive overload; obscures logic |
|
|
26
|
+
| Unused imports | Bundle bloat; misleading code |
|
|
27
|
+
| TODO/FIXME without ticket | Ambiguous ownership |
|
|
28
|
+
| Duplicate logic (2+ files) | Maintenance hazard |
|
|
29
|
+
|
|
30
|
+
**Rule**: P2 items are warnings. Resolve or create a tracked P3 ticket before merge.
|
|
31
|
+
|
|
32
|
+
## P3 — Backlog
|
|
33
|
+
|
|
34
|
+
Issues that are cosmetic or nice-to-have. Address during scheduled cleanup sessions.
|
|
35
|
+
|
|
36
|
+
| Pattern | Why P3 |
|
|
37
|
+
|---------|--------|
|
|
38
|
+
| Magic numbers (non-critical) | Readability |
|
|
39
|
+
| Commented-out code | Noise |
|
|
40
|
+
| Inconsistent naming | Style drift |
|
|
41
|
+
| Missing JSDoc on internal helpers | Documentation gap |
|
|
42
|
+
| Slightly long files (200–499 lines) | Future extraction candidate |
|
|
43
|
+
|
|
44
|
+
**Rule**: P3 items never block. Review weekly; archive when resolved.
|
|
45
|
+
|
|
46
|
+
## Convergence Rule
|
|
47
|
+
|
|
48
|
+
- Round 1: address all P1 + P2
|
|
49
|
+
- Round 2: address remaining P1 + P2 only
|
|
50
|
+
- Round 3+: P1 only
|
|
51
|
+
- Same findings as previous round → stop immediately
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* techdebt/scripts/scan.js
|
|
4
|
-
* Scan a directory for technical debt patterns.
|
|
5
|
-
* Usage: node scan.js <directory>
|
|
6
|
-
* Output: JSON array of findings to stdout.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import fs from 'fs';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
|
|
12
|
-
const TARGET_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
13
|
-
|
|
14
|
-
/** @returns {string[]} */
|
|
15
|
-
function collectFiles(dir) {
|
|
16
|
-
const results = [];
|
|
17
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
18
|
-
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
|
|
19
|
-
const full = path.join(dir, entry.name);
|
|
20
|
-
if (entry.isDirectory()) results.push(...collectFiles(full));
|
|
21
|
-
else if (TARGET_EXTENSIONS.has(path.extname(entry.name))) results.push(full);
|
|
22
|
-
}
|
|
23
|
-
return results;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** @param {string} file @returns {import('./scan.js').Finding[]} */
|
|
27
|
-
function scanFile(file) {
|
|
28
|
-
const lines = fs.readFileSync(file, 'utf-8').split('\n');
|
|
29
|
-
const findings = [];
|
|
30
|
-
let functionLineStart = -1;
|
|
31
|
-
let braceDepth = 0;
|
|
32
|
-
let functionLineCount = 0;
|
|
33
|
-
let maxNesting = 0;
|
|
34
|
-
let currentNesting = 0;
|
|
35
|
-
|
|
36
|
-
const push = (line, type, severity, message) =>
|
|
37
|
-
findings.push({ file, line: line + 1, type, severity, message });
|
|
38
|
-
|
|
39
|
-
for (let i = 0; i < lines.length; i++) {
|
|
40
|
-
const raw = lines[i];
|
|
41
|
-
const trimmed = raw.trim();
|
|
42
|
-
|
|
43
|
-
if (/:\s*any\b|as\s+any\b/.test(trimmed)) push(i, 'any-type', 'P1', `'any' type usage detected`);
|
|
44
|
-
if (/console\.(log|warn|error|debug)\s*\(/.test(trimmed)) push(i, 'console-log', 'P2', `console statement found`);
|
|
45
|
-
if (/^import\s+/.test(trimmed)) {
|
|
46
|
-
const match = trimmed.match(/^import\s+\{([^}]+)\}/);
|
|
47
|
-
if (match) {
|
|
48
|
-
const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/).pop());
|
|
49
|
-
for (const name of names) {
|
|
50
|
-
const usedElsewhere = lines.slice(i + 1).some(l => new RegExp(`\\b${name}\\b`).test(l));
|
|
51
|
-
if (!usedElsewhere) push(i, 'unused-import', 'P2', `Possibly unused import: ${name}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const magicNumber = trimmed.match(/(?<![A-Za-z_$'"`])\b([2-9]\d{2,}|\d{4,})\b(?![A-Za-z_$'"`])/);
|
|
56
|
-
if (magicNumber && !/^\s*(\/\/|\/\*)/.test(raw)) push(i, 'magic-number', 'P3', `Magic number: ${magicNumber[1]}`);
|
|
57
|
-
|
|
58
|
-
const opens = (raw.match(/\{/g) || []).length;
|
|
59
|
-
const closes = (raw.match(/\}/g) || []).length;
|
|
60
|
-
if (/\bfunction\b|\=\>/.test(raw) && opens > closes) {
|
|
61
|
-
functionLineStart = i;
|
|
62
|
-
functionLineCount = 0;
|
|
63
|
-
braceDepth = opens - closes;
|
|
64
|
-
} else if (functionLineStart >= 0) {
|
|
65
|
-
braceDepth += opens - closes;
|
|
66
|
-
functionLineCount++;
|
|
67
|
-
if (braceDepth <= 0) {
|
|
68
|
-
if (functionLineCount > 50) push(functionLineStart, 'long-function', 'P2', `Function is ${functionLineCount} lines (limit: 50)`);
|
|
69
|
-
functionLineStart = -1;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const indent = raw.match(/^(\s*)/)[1].length;
|
|
74
|
-
currentNesting = Math.floor(indent / 2);
|
|
75
|
-
if (currentNesting > maxNesting) maxNesting = currentNesting;
|
|
76
|
-
if (currentNesting > 4) push(i, 'deep-nesting', 'P2', `Nesting depth ${currentNesting} exceeds limit of 4`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return findings;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const dir = process.argv[2] || process.cwd();
|
|
83
|
-
if (!fs.existsSync(dir)) {
|
|
84
|
-
process.stderr.write(`Directory not found: ${dir}\n`);
|
|
85
|
-
process.exit(1);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const files = collectFiles(path.resolve(dir));
|
|
89
|
-
const findings = files.flatMap(scanFile);
|
|
90
|
-
process.stdout.write(JSON.stringify(findings, null, 2) + '\n');
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* techdebt/scripts/scan.js
|
|
4
|
+
* Scan a directory for technical debt patterns.
|
|
5
|
+
* Usage: node scan.js <directory>
|
|
6
|
+
* Output: JSON array of findings to stdout.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
|
|
12
|
+
const TARGET_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
13
|
+
|
|
14
|
+
/** @returns {string[]} */
|
|
15
|
+
function collectFiles(dir) {
|
|
16
|
+
const results = [];
|
|
17
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
18
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
|
|
19
|
+
const full = path.join(dir, entry.name);
|
|
20
|
+
if (entry.isDirectory()) results.push(...collectFiles(full));
|
|
21
|
+
else if (TARGET_EXTENSIONS.has(path.extname(entry.name))) results.push(full);
|
|
22
|
+
}
|
|
23
|
+
return results;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @param {string} file @returns {import('./scan.js').Finding[]} */
|
|
27
|
+
function scanFile(file) {
|
|
28
|
+
const lines = fs.readFileSync(file, 'utf-8').split('\n');
|
|
29
|
+
const findings = [];
|
|
30
|
+
let functionLineStart = -1;
|
|
31
|
+
let braceDepth = 0;
|
|
32
|
+
let functionLineCount = 0;
|
|
33
|
+
let maxNesting = 0;
|
|
34
|
+
let currentNesting = 0;
|
|
35
|
+
|
|
36
|
+
const push = (line, type, severity, message) =>
|
|
37
|
+
findings.push({ file, line: line + 1, type, severity, message });
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < lines.length; i++) {
|
|
40
|
+
const raw = lines[i];
|
|
41
|
+
const trimmed = raw.trim();
|
|
42
|
+
|
|
43
|
+
if (/:\s*any\b|as\s+any\b/.test(trimmed)) push(i, 'any-type', 'P1', `'any' type usage detected`);
|
|
44
|
+
if (/console\.(log|warn|error|debug)\s*\(/.test(trimmed)) push(i, 'console-log', 'P2', `console statement found`);
|
|
45
|
+
if (/^import\s+/.test(trimmed)) {
|
|
46
|
+
const match = trimmed.match(/^import\s+\{([^}]+)\}/);
|
|
47
|
+
if (match) {
|
|
48
|
+
const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/).pop());
|
|
49
|
+
for (const name of names) {
|
|
50
|
+
const usedElsewhere = lines.slice(i + 1).some(l => new RegExp(`\\b${name}\\b`).test(l));
|
|
51
|
+
if (!usedElsewhere) push(i, 'unused-import', 'P2', `Possibly unused import: ${name}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const magicNumber = trimmed.match(/(?<![A-Za-z_$'"`])\b([2-9]\d{2,}|\d{4,})\b(?![A-Za-z_$'"`])/);
|
|
56
|
+
if (magicNumber && !/^\s*(\/\/|\/\*)/.test(raw)) push(i, 'magic-number', 'P3', `Magic number: ${magicNumber[1]}`);
|
|
57
|
+
|
|
58
|
+
const opens = (raw.match(/\{/g) || []).length;
|
|
59
|
+
const closes = (raw.match(/\}/g) || []).length;
|
|
60
|
+
if (/\bfunction\b|\=\>/.test(raw) && opens > closes) {
|
|
61
|
+
functionLineStart = i;
|
|
62
|
+
functionLineCount = 0;
|
|
63
|
+
braceDepth = opens - closes;
|
|
64
|
+
} else if (functionLineStart >= 0) {
|
|
65
|
+
braceDepth += opens - closes;
|
|
66
|
+
functionLineCount++;
|
|
67
|
+
if (braceDepth <= 0) {
|
|
68
|
+
if (functionLineCount > 50) push(functionLineStart, 'long-function', 'P2', `Function is ${functionLineCount} lines (limit: 50)`);
|
|
69
|
+
functionLineStart = -1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const indent = raw.match(/^(\s*)/)[1].length;
|
|
74
|
+
currentNesting = Math.floor(indent / 2);
|
|
75
|
+
if (currentNesting > maxNesting) maxNesting = currentNesting;
|
|
76
|
+
if (currentNesting > 4) push(i, 'deep-nesting', 'P2', `Nesting depth ${currentNesting} exceeds limit of 4`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return findings;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const dir = process.argv[2] || process.cwd();
|
|
83
|
+
if (!fs.existsSync(dir)) {
|
|
84
|
+
process.stderr.write(`Directory not found: ${dir}\n`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const files = collectFiles(path.resolve(dir));
|
|
89
|
+
const findings = files.flatMap(scanFile);
|
|
90
|
+
process.stdout.write(JSON.stringify(findings, null, 2) + '\n');
|