vibecheck-ai 2.0.1 → 5.0.0
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/bin/.generated +25 -0
- package/bin/_deprecations.js +463 -0
- package/bin/_router.js +46 -0
- package/bin/cli-hygiene.js +241 -0
- package/bin/dev/run-v2-torture.js +30 -0
- package/bin/registry.js +656 -0
- package/bin/runners/CLI_REFACTOR_SUMMARY.md +229 -0
- package/bin/runners/ENHANCEMENT_GUIDE.md +121 -0
- package/bin/runners/REPORT_AUDIT.md +64 -0
- package/bin/runners/cli-utils.js +1070 -0
- package/bin/runners/context/ai-task-decomposer.js +337 -0
- package/bin/runners/context/analyzer.js +513 -0
- package/bin/runners/context/api-contracts.js +427 -0
- package/bin/runners/context/context-diff.js +342 -0
- package/bin/runners/context/context-pruner.js +291 -0
- package/bin/runners/context/dependency-graph.js +414 -0
- package/bin/runners/context/generators/claude.js +107 -0
- package/bin/runners/context/generators/codex.js +108 -0
- package/bin/runners/context/generators/copilot.js +119 -0
- package/bin/runners/context/generators/cursor-enhanced.js +2525 -0
- package/bin/runners/context/generators/cursor.js +514 -0
- package/bin/runners/context/generators/mcp.js +169 -0
- package/bin/runners/context/generators/windsurf.js +180 -0
- package/bin/runners/context/git-context.js +304 -0
- package/bin/runners/context/index.js +1110 -0
- package/bin/runners/context/insights.js +173 -0
- package/bin/runners/context/mcp-server/generate-rules.js +337 -0
- package/bin/runners/context/mcp-server/index.js +1176 -0
- package/bin/runners/context/mcp-server/package.json +24 -0
- package/bin/runners/context/memory.js +200 -0
- package/bin/runners/context/monorepo.js +215 -0
- package/bin/runners/context/multi-repo-federation.js +404 -0
- package/bin/runners/context/patterns.js +253 -0
- package/bin/runners/context/proof-context.js +1264 -0
- package/bin/runners/context/security-scanner.js +541 -0
- package/bin/runners/context/semantic-search.js +350 -0
- package/bin/runners/context/shared.js +264 -0
- package/bin/runners/context/team-conventions.js +336 -0
- package/bin/runners/lib/__tests__/entitlements-v2.test.js +295 -0
- package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
- package/bin/runners/lib/agent-firewall/change-packet/builder.js +488 -0
- package/bin/runners/lib/agent-firewall/change-packet/schema.json +228 -0
- package/bin/runners/lib/agent-firewall/change-packet/store.js +200 -0
- package/bin/runners/lib/agent-firewall/claims/claim-types.js +21 -0
- package/bin/runners/lib/agent-firewall/claims/extractor.js +303 -0
- package/bin/runners/lib/agent-firewall/claims/patterns.js +24 -0
- package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
- package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
- package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
- package/bin/runners/lib/agent-firewall/enforcement/gateway.js +1059 -0
- package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -0
- package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -0
- package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -0
- package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/change-event.schema.json +173 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/intent.schema.json +181 -0
- package/bin/runners/lib/agent-firewall/enforcement/schemas/verdict.schema.json +222 -0
- package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -0
- package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +88 -0
- package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +75 -0
- package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +127 -0
- package/bin/runners/lib/agent-firewall/evidence/resolver.js +102 -0
- package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +213 -0
- package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +145 -0
- package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +19 -0
- package/bin/runners/lib/agent-firewall/fs-hook/installer.js +87 -0
- package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +184 -0
- package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +163 -0
- package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +107 -0
- package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +68 -0
- package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +66 -0
- package/bin/runners/lib/agent-firewall/index.js +200 -0
- package/bin/runners/lib/agent-firewall/integration/index.js +20 -0
- package/bin/runners/lib/agent-firewall/integration/ship-gate.js +437 -0
- package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +634 -0
- package/bin/runners/lib/agent-firewall/intent/auto-detect.js +426 -0
- package/bin/runners/lib/agent-firewall/intent/index.js +102 -0
- package/bin/runners/lib/agent-firewall/intent/schema.js +352 -0
- package/bin/runners/lib/agent-firewall/intent/store.js +283 -0
- package/bin/runners/lib/agent-firewall/interception/fs-interceptor.js +502 -0
- package/bin/runners/lib/agent-firewall/interception/index.js +23 -0
- package/bin/runners/lib/agent-firewall/interceptor/base.js +308 -0
- package/bin/runners/lib/agent-firewall/interceptor/cursor.js +35 -0
- package/bin/runners/lib/agent-firewall/interceptor/vscode.js +35 -0
- package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +34 -0
- package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
- package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
- package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
- package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
- package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
- package/bin/runners/lib/agent-firewall/logger.js +141 -0
- package/bin/runners/lib/agent-firewall/policy/default-policy.json +90 -0
- package/bin/runners/lib/agent-firewall/policy/engine.js +103 -0
- package/bin/runners/lib/agent-firewall/policy/loader.js +451 -0
- package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +50 -0
- package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +50 -0
- package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +79 -0
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +227 -0
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +191 -0
- package/bin/runners/lib/agent-firewall/policy/rules/scope.js +93 -0
- package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +57 -0
- package/bin/runners/lib/agent-firewall/policy/schema.json +183 -0
- package/bin/runners/lib/agent-firewall/policy/verdict.js +54 -0
- package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
- package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
- package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
- package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
- package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
- package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
- package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
- package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
- package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
- package/bin/runners/lib/agent-firewall/risk/thresholds.js +322 -0
- package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
- package/bin/runners/lib/agent-firewall/session/collector.js +451 -0
- package/bin/runners/lib/agent-firewall/session/index.js +26 -0
- package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
- package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
- package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
- package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
- package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
- package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
- package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
- package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
- package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
- package/bin/runners/lib/agent-firewall/truthpack/index.js +67 -0
- package/bin/runners/lib/agent-firewall/truthpack/loader.js +137 -0
- package/bin/runners/lib/agent-firewall/unblock/planner.js +337 -0
- package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
- package/bin/runners/lib/ai-bridge.js +416 -0
- package/bin/runners/lib/analysis-core.js +309 -0
- package/bin/runners/lib/analyzers.js +2500 -0
- package/bin/runners/lib/api-client.js +269 -0
- package/bin/runners/lib/approve-output.js +235 -0
- package/bin/runners/lib/artifact-envelope.js +540 -0
- package/bin/runners/lib/assets/vibecheck-logo.png +0 -0
- package/bin/runners/lib/audit-bridge.js +391 -0
- package/bin/runners/lib/auth-shared.js +977 -0
- package/bin/runners/lib/auth-truth.js +193 -0
- package/bin/runners/lib/auth.js +215 -0
- package/bin/runners/lib/authority-badge.js +425 -0
- package/bin/runners/lib/backup.js +62 -0
- package/bin/runners/lib/billing.js +107 -0
- package/bin/runners/lib/checkpoint.js +941 -0
- package/bin/runners/lib/claims.js +118 -0
- package/bin/runners/lib/classify-output.js +204 -0
- package/bin/runners/lib/cleanup/engine.js +571 -0
- package/bin/runners/lib/cleanup/index.js +53 -0
- package/bin/runners/lib/cleanup/output.js +375 -0
- package/bin/runners/lib/cleanup/rules.js +1060 -0
- package/bin/runners/lib/cli-output.js +400 -0
- package/bin/runners/lib/cli-ui.js +540 -0
- package/bin/runners/lib/compliance-bridge-new.js +0 -0
- package/bin/runners/lib/compliance-bridge.js +165 -0
- package/bin/runners/lib/contracts/auth-contract.js +202 -0
- package/bin/runners/lib/contracts/env-contract.js +181 -0
- package/bin/runners/lib/contracts/external-contract.js +206 -0
- package/bin/runners/lib/contracts/guard.js +168 -0
- package/bin/runners/lib/contracts/index.js +89 -0
- package/bin/runners/lib/contracts/plan-validator.js +311 -0
- package/bin/runners/lib/contracts/route-contract.js +199 -0
- package/bin/runners/lib/contracts.js +804 -0
- package/bin/runners/lib/default-config.js +127 -0
- package/bin/runners/lib/detect.js +89 -0
- package/bin/runners/lib/detectors-v2.js +622 -0
- package/bin/runners/lib/doctor/autofix.js +254 -0
- package/bin/runners/lib/doctor/diagnosis-receipt.js +454 -0
- package/bin/runners/lib/doctor/failure-signatures.js +526 -0
- package/bin/runners/lib/doctor/fix-script.js +336 -0
- package/bin/runners/lib/doctor/index.js +37 -0
- package/bin/runners/lib/doctor/modules/build-tools.js +453 -0
- package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
- package/bin/runners/lib/doctor/modules/index.js +105 -0
- package/bin/runners/lib/doctor/modules/network.js +250 -0
- package/bin/runners/lib/doctor/modules/os-quirks.js +706 -0
- package/bin/runners/lib/doctor/modules/project.js +312 -0
- package/bin/runners/lib/doctor/modules/repo-integrity.js +485 -0
- package/bin/runners/lib/doctor/modules/runtime.js +224 -0
- package/bin/runners/lib/doctor/modules/security.js +350 -0
- package/bin/runners/lib/doctor/modules/system.js +213 -0
- package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
- package/bin/runners/lib/doctor/reporter.js +262 -0
- package/bin/runners/lib/doctor/safe-repair.js +384 -0
- package/bin/runners/lib/doctor/service.js +262 -0
- package/bin/runners/lib/doctor/types.js +113 -0
- package/bin/runners/lib/doctor/ui.js +263 -0
- package/bin/runners/lib/doctor-enhanced.js +233 -0
- package/bin/runners/lib/doctor-output.js +226 -0
- package/bin/runners/lib/doctor-v2.js +608 -0
- package/bin/runners/lib/drift.js +425 -0
- package/bin/runners/lib/enforcement.js +72 -0
- package/bin/runners/lib/engine/ast-cache.js +210 -0
- package/bin/runners/lib/engine/auth-extractor.js +211 -0
- package/bin/runners/lib/engine/billing-extractor.js +112 -0
- package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
- package/bin/runners/lib/engine/env-extractor.js +207 -0
- package/bin/runners/lib/engine/express-extractor.js +208 -0
- package/bin/runners/lib/engine/extractors.js +849 -0
- package/bin/runners/lib/engine/index.js +207 -0
- package/bin/runners/lib/engine/repo-index.js +514 -0
- package/bin/runners/lib/engine/types.js +124 -0
- package/bin/runners/lib/engines/accessibility-engine.js +190 -0
- package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
- package/bin/runners/lib/engines/ast-cache.js +99 -0
- package/bin/runners/lib/engines/attack-detector.js +1192 -0
- package/bin/runners/lib/engines/code-quality-engine.js +255 -0
- package/bin/runners/lib/engines/console-logs-engine.js +115 -0
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
- package/bin/runners/lib/engines/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
- package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
- package/bin/runners/lib/engines/file-filter.js +131 -0
- package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
- package/bin/runners/lib/engines/mock-data-engine.js +272 -0
- package/bin/runners/lib/engines/parallel-processor.js +71 -0
- package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
- package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
- package/bin/runners/lib/engines/type-aware-engine.js +152 -0
- package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
- package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
- package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +139 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
- package/bin/runners/lib/engines/vibecheck-engines/package.json +13 -0
- package/bin/runners/lib/enterprise-detect.js +603 -0
- package/bin/runners/lib/enterprise-init.js +942 -0
- package/bin/runners/lib/entitlements-v2.js +265 -0
- package/bin/runners/lib/entitlements.generated.js +0 -0
- package/bin/runners/lib/entitlements.js +340 -0
- package/bin/runners/lib/env-resolver.js +417 -0
- package/bin/runners/lib/env-template.js +66 -0
- package/bin/runners/lib/env.js +189 -0
- package/bin/runners/lib/error-handler.js +368 -0
- package/bin/runners/lib/error-messages.js +289 -0
- package/bin/runners/lib/evidence-pack.js +684 -0
- package/bin/runners/lib/exit-codes.js +275 -0
- package/bin/runners/lib/extractors/client-calls.js +990 -0
- package/bin/runners/lib/extractors/fastify-route-dump.js +573 -0
- package/bin/runners/lib/extractors/fastify-routes.js +426 -0
- package/bin/runners/lib/extractors/index.js +363 -0
- package/bin/runners/lib/extractors/next-routes.js +524 -0
- package/bin/runners/lib/extractors/proof-graph.js +431 -0
- package/bin/runners/lib/extractors/route-matcher.js +451 -0
- package/bin/runners/lib/extractors/truthpack-v2.js +377 -0
- package/bin/runners/lib/extractors/ui-bindings.js +547 -0
- package/bin/runners/lib/finding-id.js +69 -0
- package/bin/runners/lib/finding-sorter.js +89 -0
- package/bin/runners/lib/findings-schema.js +281 -0
- package/bin/runners/lib/fingerprint.js +377 -0
- package/bin/runners/lib/firewall-prompt.js +50 -0
- package/bin/runners/lib/fix-output.js +228 -0
- package/bin/runners/lib/global-flags.js +250 -0
- package/bin/runners/lib/graph/graph-builder.js +265 -0
- package/bin/runners/lib/graph/html-renderer.js +413 -0
- package/bin/runners/lib/graph/index.js +32 -0
- package/bin/runners/lib/graph/runtime-collector.js +215 -0
- package/bin/runners/lib/graph/static-extractor.js +518 -0
- package/bin/runners/lib/help-formatter.js +413 -0
- package/bin/runners/lib/html-proof-report.js +913 -0
- package/bin/runners/lib/html-report.js +650 -0
- package/bin/runners/lib/init-wizard.js +601 -0
- package/bin/runners/lib/interactive-menu.js +1496 -0
- package/bin/runners/lib/json-output.js +76 -0
- package/bin/runners/lib/llm.js +75 -0
- package/bin/runners/lib/logger.js +38 -0
- package/bin/runners/lib/meter.js +61 -0
- package/bin/runners/lib/missions/briefing.js +427 -0
- package/bin/runners/lib/missions/checkpoint.js +753 -0
- package/bin/runners/lib/missions/evidence.js +126 -0
- package/bin/runners/lib/missions/hardening.js +851 -0
- package/bin/runners/lib/missions/plan.js +648 -0
- package/bin/runners/lib/missions/safety-gates.js +645 -0
- package/bin/runners/lib/missions/schema.js +478 -0
- package/bin/runners/lib/missions/templates.js +317 -0
- package/bin/runners/lib/next-action.js +560 -0
- package/bin/runners/lib/packs/bundle.js +675 -0
- package/bin/runners/lib/packs/evidence-pack.js +671 -0
- package/bin/runners/lib/packs/pack-factory.js +837 -0
- package/bin/runners/lib/packs/permissions-pack.js +686 -0
- package/bin/runners/lib/packs/proof-graph-pack.js +779 -0
- package/bin/runners/lib/patch.js +40 -0
- package/bin/runners/lib/permissions/auth-model.js +213 -0
- package/bin/runners/lib/permissions/idor-prover.js +205 -0
- package/bin/runners/lib/permissions/index.js +45 -0
- package/bin/runners/lib/permissions/matrix-builder.js +198 -0
- package/bin/runners/lib/pkgjson.js +28 -0
- package/bin/runners/lib/policy.js +295 -0
- package/bin/runners/lib/polish/accessibility.js +62 -0
- package/bin/runners/lib/polish/analyzer.js +93 -0
- package/bin/runners/lib/polish/backend.js +87 -0
- package/bin/runners/lib/polish/configuration.js +83 -0
- package/bin/runners/lib/polish/documentation.js +83 -0
- package/bin/runners/lib/polish/frontend.js +817 -0
- package/bin/runners/lib/polish/index.js +27 -0
- package/bin/runners/lib/polish/infrastructure.js +80 -0
- package/bin/runners/lib/polish/internationalization.js +85 -0
- package/bin/runners/lib/polish/libraries.js +180 -0
- package/bin/runners/lib/polish/observability.js +75 -0
- package/bin/runners/lib/polish/performance.js +64 -0
- package/bin/runners/lib/polish/privacy.js +110 -0
- package/bin/runners/lib/polish/resilience.js +92 -0
- package/bin/runners/lib/polish/security.js +78 -0
- package/bin/runners/lib/polish/seo.js +71 -0
- package/bin/runners/lib/polish/styles.js +62 -0
- package/bin/runners/lib/polish/utils.js +104 -0
- package/bin/runners/lib/preflight.js +142 -0
- package/bin/runners/lib/prerequisites.js +149 -0
- package/bin/runners/lib/prove-output.js +220 -0
- package/bin/runners/lib/reality/correlation-detectors.js +359 -0
- package/bin/runners/lib/reality/index.js +318 -0
- package/bin/runners/lib/reality/request-hashing.js +416 -0
- package/bin/runners/lib/reality/request-mapper.js +453 -0
- package/bin/runners/lib/reality/safety-rails.js +463 -0
- package/bin/runners/lib/reality/semantic-snapshot.js +408 -0
- package/bin/runners/lib/reality/toast-detector.js +393 -0
- package/bin/runners/lib/reality-findings.js +84 -0
- package/bin/runners/lib/reality-output.js +231 -0
- package/bin/runners/lib/receipts.js +179 -0
- package/bin/runners/lib/redact.js +29 -0
- package/bin/runners/lib/replay/capsule-manager.js +154 -0
- package/bin/runners/lib/replay/index.js +263 -0
- package/bin/runners/lib/replay/player.js +348 -0
- package/bin/runners/lib/replay/recorder.js +331 -0
- package/bin/runners/lib/report-engine.js +626 -0
- package/bin/runners/lib/report-html.js +1233 -0
- package/bin/runners/lib/report-output.js +366 -0
- package/bin/runners/lib/report-templates.js +967 -0
- package/bin/runners/lib/report.js +135 -0
- package/bin/runners/lib/route-detection.js +1209 -0
- package/bin/runners/lib/route-truth.js +1322 -0
- package/bin/runners/lib/safelist/index.js +96 -0
- package/bin/runners/lib/safelist/integration.js +334 -0
- package/bin/runners/lib/safelist/matcher.js +696 -0
- package/bin/runners/lib/safelist/schema.js +948 -0
- package/bin/runners/lib/safelist/store.js +438 -0
- package/bin/runners/lib/sandbox/index.js +59 -0
- package/bin/runners/lib/sandbox/proof-chain.js +399 -0
- package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
- package/bin/runners/lib/sandbox/worktree.js +174 -0
- package/bin/runners/lib/scan-cache.js +330 -0
- package/bin/runners/lib/scan-output-schema.js +344 -0
- package/bin/runners/lib/scan-output.js +631 -0
- package/bin/runners/lib/scan-runner.js +135 -0
- package/bin/runners/lib/schema-validator.js +350 -0
- package/bin/runners/lib/schemas/ajv-validator.js +464 -0
- package/bin/runners/lib/schemas/contracts.schema.json +160 -0
- package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
- package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
- package/bin/runners/lib/schemas/finding.schema.json +100 -0
- package/bin/runners/lib/schemas/mission-pack.schema.json +206 -0
- package/bin/runners/lib/schemas/proof-graph.schema.json +176 -0
- package/bin/runners/lib/schemas/reality-report.schema.json +162 -0
- package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
- package/bin/runners/lib/schemas/run-request.schema.json +108 -0
- package/bin/runners/lib/schemas/share-pack.schema.json +180 -0
- package/bin/runners/lib/schemas/ship-manifest.schema.json +251 -0
- package/bin/runners/lib/schemas/ship-report.schema.json +117 -0
- package/bin/runners/lib/schemas/truthpack-v2.schema.json +303 -0
- package/bin/runners/lib/schemas/validator.js +465 -0
- package/bin/runners/lib/schemas/verdict.schema.json +140 -0
- package/bin/runners/lib/score-history.js +282 -0
- package/bin/runners/lib/security-bridge.js +249 -0
- package/bin/runners/lib/server-usage.js +513 -0
- package/bin/runners/lib/share-pack.js +239 -0
- package/bin/runners/lib/ship-gate.js +832 -0
- package/bin/runners/lib/ship-manifest.js +1153 -0
- package/bin/runners/lib/ship-output-enterprise.js +239 -0
- package/bin/runners/lib/ship-output.js +1128 -0
- package/bin/runners/lib/snippets.js +67 -0
- package/bin/runners/lib/status-output.js +340 -0
- package/bin/runners/lib/terminal-ui.js +356 -0
- package/bin/runners/lib/truth.js +1691 -0
- package/bin/runners/lib/ui.js +562 -0
- package/bin/runners/lib/unified-cli-output.js +947 -0
- package/bin/runners/lib/unified-output.js +197 -0
- package/bin/runners/lib/upsell.js +410 -0
- package/bin/runners/lib/usage.js +153 -0
- package/bin/runners/lib/validate-patch.js +156 -0
- package/bin/runners/lib/verdict-engine.js +628 -0
- package/bin/runners/lib/verification.js +345 -0
- package/bin/runners/lib/why-tree.js +650 -0
- package/bin/runners/reality/engine.js +917 -0
- package/bin/runners/reality/flows.js +122 -0
- package/bin/runners/reality/report.js +378 -0
- package/bin/runners/reality/session.js +193 -0
- package/bin/runners/runAIAgent.js +229 -0
- package/bin/runners/runAgent.d.ts +5 -0
- package/bin/runners/runAgent.js +161 -0
- package/bin/runners/runAllowlist.js +418 -0
- package/bin/runners/runApprove.js +320 -0
- package/bin/runners/runAudit.js +692 -0
- package/bin/runners/runAuth.js +731 -0
- package/bin/runners/runCI.js +353 -0
- package/bin/runners/runCheckpoint.js +530 -0
- package/bin/runners/runClassify.js +928 -0
- package/bin/runners/runCleanup.js +343 -0
- package/bin/runners/runContext.d.ts +4 -0
- package/bin/runners/runContext.js +175 -0
- package/bin/runners/runDoctor.js +877 -0
- package/bin/runners/runEvidencePack.js +362 -0
- package/bin/runners/runFirewall.d.ts +5 -0
- package/bin/runners/runFirewall.js +134 -0
- package/bin/runners/runFirewallHook.d.ts +5 -0
- package/bin/runners/runFirewallHook.js +56 -0
- package/bin/runners/runFix.js +1355 -0
- package/bin/runners/runForge.js +451 -0
- package/bin/runners/runGuard.js +262 -0
- package/bin/runners/runInit.js +1927 -0
- package/bin/runners/runIntent.js +906 -0
- package/bin/runners/runKickoff.js +878 -0
- package/bin/runners/runLabs.js +424 -0
- package/bin/runners/runLaunch.js +2000 -0
- package/bin/runners/runLink.js +785 -0
- package/bin/runners/runMcp.js +1875 -0
- package/bin/runners/runPacks.js +2089 -0
- package/bin/runners/runPolish.d.ts +4 -0
- package/bin/runners/runPolish.js +390 -0
- package/bin/runners/runPromptFirewall.js +211 -0
- package/bin/runners/runProve.js +1411 -0
- package/bin/runners/runQuickstart.js +531 -0
- package/bin/runners/runReality.js +2260 -0
- package/bin/runners/runReport.js +726 -0
- package/bin/runners/runRuntime.js +110 -0
- package/bin/runners/runSafelist.js +1190 -0
- package/bin/runners/runScan.js +688 -0
- package/bin/runners/runShield.js +1282 -0
- package/bin/runners/runShip.js +1660 -0
- package/bin/runners/runTruth.d.ts +5 -0
- package/bin/runners/runTruth.js +101 -0
- package/bin/runners/runValidate.js +179 -0
- package/bin/runners/runWatch.js +478 -0
- package/bin/runners/utils.js +360 -0
- package/bin/scan.js +617 -0
- package/bin/vibecheck.js +1617 -0
- package/dist/guardrail/index.d.ts +2405 -0
- package/dist/guardrail/index.js +9747 -0
- package/dist/guardrail/index.js.map +1 -0
- package/dist/scanner/index.d.ts +282 -0
- package/dist/scanner/index.js +3395 -0
- package/dist/scanner/index.js.map +1 -0
- package/package.json +123 -104
- package/README.md +0 -491
- package/dist/index.js +0 -99711
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor Rules Generator
|
|
3
|
+
* Generates .cursorrules and .cursor/rules/*.mdc files
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Get directory purpose description
|
|
8
|
+
*/
|
|
9
|
+
function getDirectoryPurpose(dir) {
|
|
10
|
+
const purposes = {
|
|
11
|
+
"src": "Source code root",
|
|
12
|
+
"app": "Next.js App Router pages",
|
|
13
|
+
"pages": "Next.js Pages Router",
|
|
14
|
+
"components": "Reusable UI components",
|
|
15
|
+
"lib": "Utility functions and shared logic",
|
|
16
|
+
"utils": "Helper functions",
|
|
17
|
+
"hooks": "Custom React hooks",
|
|
18
|
+
"services": "API and external service integrations",
|
|
19
|
+
"api": "API route handlers",
|
|
20
|
+
"server": "Server-side code",
|
|
21
|
+
"prisma": "Database schema and migrations",
|
|
22
|
+
"public": "Static assets",
|
|
23
|
+
"styles": "CSS and styling",
|
|
24
|
+
"types": "TypeScript type definitions",
|
|
25
|
+
"config": "Configuration files",
|
|
26
|
+
"test": "Test files",
|
|
27
|
+
"__tests__": "Test files",
|
|
28
|
+
};
|
|
29
|
+
return purposes[dir] || "Project files";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generate main .cursorrules file
|
|
34
|
+
*/
|
|
35
|
+
function generateCursorRules(analysis) {
|
|
36
|
+
const p = analysis.patterns || {};
|
|
37
|
+
const t = analysis.types || {};
|
|
38
|
+
const s = analysis.stats || {};
|
|
39
|
+
const env = analysis.envVars || {};
|
|
40
|
+
const m = analysis.monorepo || {};
|
|
41
|
+
|
|
42
|
+
return `# vibecheck AI - Project Context for Cursor
|
|
43
|
+
|
|
44
|
+
> Auto-generated by \`vibecheck context\`. Regenerate when your codebase changes.
|
|
45
|
+
|
|
46
|
+
## Project Overview
|
|
47
|
+
|
|
48
|
+
- **Name**: ${analysis.name}
|
|
49
|
+
- **Framework**: ${analysis.framework || "Unknown"}
|
|
50
|
+
- **Language**: ${analysis.language || "JavaScript"}
|
|
51
|
+
- **Architecture**: ${analysis.architecture}
|
|
52
|
+
${s.totalFiles ? `- **Size**: ${s.totalFiles} files, ~${Math.round(s.totalLines / 1000)}k lines` : ""}
|
|
53
|
+
${m.isMonorepo ? `- **Monorepo**: ${m.type} with ${m.workspaces?.length || 0} workspaces` : ""}
|
|
54
|
+
|
|
55
|
+
## Tech Stack
|
|
56
|
+
|
|
57
|
+
${analysis.hasNextjs ? "- Next.js (App Router)" : ""}
|
|
58
|
+
${analysis.hasReact ? "- React" : ""}
|
|
59
|
+
${analysis.hasTypescript ? "- TypeScript" : ""}
|
|
60
|
+
${analysis.hasPrisma ? "- Prisma ORM" : ""}
|
|
61
|
+
${analysis.hasTailwind ? "- Tailwind CSS" : ""}
|
|
62
|
+
${p.stateManagement ? `- State: ${p.stateManagement}` : ""}
|
|
63
|
+
${p.validation ? `- Validation: ${p.validation}` : ""}
|
|
64
|
+
${p.authentication ? `- Auth: ${p.authentication}` : ""}
|
|
65
|
+
${p.dataFetching?.length ? `- Data Fetching: ${p.dataFetching.join(", ")}` : ""}
|
|
66
|
+
|
|
67
|
+
## Project Structure
|
|
68
|
+
|
|
69
|
+
\`\`\`
|
|
70
|
+
${analysis.directories.map(d => `${d}/`).join("\n")}
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
${m.isMonorepo && m.workspaces?.length > 0 ? `## Workspaces
|
|
74
|
+
|
|
75
|
+
${m.workspaces.slice(0, 10).map(w => `- \`${w.path}\` - ${w.name}`).join("\n")}
|
|
76
|
+
` : ""}
|
|
77
|
+
|
|
78
|
+
${p.hooks?.length > 0 ? `## Custom Hooks (Use These!)
|
|
79
|
+
|
|
80
|
+
${p.hooks.slice(0, 15).map(h => `- \`${h}\``).join("\n")}
|
|
81
|
+
|
|
82
|
+
${p.codeExamples?.hooks ? `### Example: ${p.codeExamples.hooks.name}
|
|
83
|
+
\`\`\`typescript
|
|
84
|
+
// From: ${p.codeExamples.hooks.file}
|
|
85
|
+
${p.codeExamples.hooks.code}
|
|
86
|
+
\`\`\`
|
|
87
|
+
` : ""}
|
|
88
|
+
` : ""}
|
|
89
|
+
|
|
90
|
+
${analysis.apiRoutes.length > 0 ? `## API Routes
|
|
91
|
+
|
|
92
|
+
${analysis.apiRoutes.slice(0, 20).map(r => `- \`${r}\``).join("\n")}
|
|
93
|
+
${analysis.apiRoutes.length > 20 ? `\n... and ${analysis.apiRoutes.length - 20} more` : ""}
|
|
94
|
+
` : ""}
|
|
95
|
+
|
|
96
|
+
${analysis.components.length > 0 ? `## Components (Check Before Creating New)
|
|
97
|
+
|
|
98
|
+
${analysis.components.slice(0, 30).map(c => `- \`${c}\``).join("\n")}
|
|
99
|
+
${analysis.components.length > 30 ? `\n... and ${analysis.components.length - 30} more` : ""}
|
|
100
|
+
` : ""}
|
|
101
|
+
|
|
102
|
+
${analysis.models.length > 0 ? `## Data Models (Prisma)
|
|
103
|
+
|
|
104
|
+
${analysis.models.map(m => `- \`${m}\``).join("\n")}
|
|
105
|
+
` : ""}
|
|
106
|
+
|
|
107
|
+
${t.interfaces?.length > 0 || t.types?.length > 0 ? `## Key Types & Interfaces
|
|
108
|
+
|
|
109
|
+
${t.interfaces?.slice(0, 15).map(i => `- \`interface ${i}\``).join("\n") || ""}
|
|
110
|
+
${t.types?.slice(0, 10).map(ty => `- \`type ${ty}\``).join("\n") || ""}
|
|
111
|
+
${t.enums?.length > 0 ? `\nEnums: ${t.enums.slice(0, 5).map(e => `\`${e}\``).join(", ")}` : ""}
|
|
112
|
+
` : ""}
|
|
113
|
+
|
|
114
|
+
${env.variables?.length > 0 ? `## Environment Variables
|
|
115
|
+
|
|
116
|
+
Required env vars:
|
|
117
|
+
${env.variables.slice(0, 20).map(v => `- \`${v}\``).join("\n")}
|
|
118
|
+
${env.files?.length ? `\nEnv files: ${env.files.join(", ")}` : ""}
|
|
119
|
+
` : ""}
|
|
120
|
+
|
|
121
|
+
${analysis.scripts?.length > 0 ? `## NPM Scripts
|
|
122
|
+
|
|
123
|
+
${analysis.scripts.slice(0, 10).map(s => `- \`npm run ${s.name}\` - ${s.command}`).join("\n")}
|
|
124
|
+
` : ""}
|
|
125
|
+
|
|
126
|
+
## Coding Conventions
|
|
127
|
+
|
|
128
|
+
### File Naming
|
|
129
|
+
- Components: ${analysis.conventions.naming.components || "PascalCase"} (e.g., \`Button.tsx\`, \`UserCard.tsx\`)
|
|
130
|
+
- Utilities: camelCase (e.g., \`formatDate.ts\`, \`apiClient.ts\`)
|
|
131
|
+
- Types: PascalCase with \`.d.ts\` or \`.types.ts\` suffix
|
|
132
|
+
|
|
133
|
+
### Import Order
|
|
134
|
+
1. React/Next.js imports
|
|
135
|
+
2. Third-party libraries
|
|
136
|
+
3. Internal components (\`@/components/\`)
|
|
137
|
+
4. Internal utilities (\`@/lib/\`, \`@/utils/\`)
|
|
138
|
+
5. Types
|
|
139
|
+
6. Styles
|
|
140
|
+
|
|
141
|
+
### Code Style
|
|
142
|
+
- Use ${analysis.hasTypescript ? "TypeScript with strict mode" : "JavaScript with JSDoc comments"}
|
|
143
|
+
- Prefer functional components with hooks
|
|
144
|
+
- Use path aliases (\`@/\`) for imports
|
|
145
|
+
${analysis.hasTailwind ? "- Use Tailwind CSS for styling (no inline styles)" : ""}
|
|
146
|
+
${analysis.hasPrisma ? "- Use Prisma client for database operations" : ""}
|
|
147
|
+
${p.stateManagement ? `- Use ${p.stateManagement} for state management` : ""}
|
|
148
|
+
${p.validation ? `- Use ${p.validation} for input validation` : ""}
|
|
149
|
+
|
|
150
|
+
## Critical Rules
|
|
151
|
+
|
|
152
|
+
1. **Never hardcode secrets** - Use environment variables
|
|
153
|
+
2. **No mock data in production** - Check for \`demo\`, \`fake\`, \`mock\` patterns
|
|
154
|
+
3. **Type everything** - No \`any\` types${analysis.hasTypescript ? "" : " (use JSDoc)"}
|
|
155
|
+
4. **Follow existing patterns** - Match the codebase style
|
|
156
|
+
5. **Use existing components** - Don't recreate what exists
|
|
157
|
+
6. **API routes must validate input** - Never trust client data
|
|
158
|
+
${p.hooks?.length ? `7. **Use existing hooks** - Check custom hooks list above` : ""}
|
|
159
|
+
|
|
160
|
+
${p.antiPatterns?.length > 0 ? `## ⚠️ Avoid These Patterns
|
|
161
|
+
|
|
162
|
+
${p.antiPatterns.map(ap => `- **${ap.message}** - ${ap.suggestion}`).join("\n")}
|
|
163
|
+
` : ""}
|
|
164
|
+
|
|
165
|
+
## When Creating New Files
|
|
166
|
+
|
|
167
|
+
1. Check if similar file exists first
|
|
168
|
+
2. Place in correct directory based on type
|
|
169
|
+
3. Follow naming conventions
|
|
170
|
+
4. Import from correct paths
|
|
171
|
+
5. Add proper types/interfaces
|
|
172
|
+
${p.hooks?.length ? `6. Check if there's an existing hook you can use` : ""}
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
*Context Enhanced by vibecheck AI*
|
|
177
|
+
`;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Generate modular Cursor rules (.cursor/rules/*.mdc)
|
|
182
|
+
*/
|
|
183
|
+
function generateCursorModularRules(analysis) {
|
|
184
|
+
const rules = {};
|
|
185
|
+
const p = analysis.patterns || {};
|
|
186
|
+
const t = analysis.types || {};
|
|
187
|
+
const env = analysis.envVars || {};
|
|
188
|
+
const m = analysis.monorepo || {};
|
|
189
|
+
|
|
190
|
+
// Architecture rules
|
|
191
|
+
rules["architecture"] = `---
|
|
192
|
+
description: Project architecture and structure guidelines
|
|
193
|
+
globs: ["**/*.{ts,tsx,js,jsx}"]
|
|
194
|
+
alwaysApply: true
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
# Architecture Guidelines
|
|
198
|
+
|
|
199
|
+
## Project Type: ${analysis.architecture}
|
|
200
|
+
|
|
201
|
+
${analysis.hasNextjs ? `### Next.js App Router Structure
|
|
202
|
+
- Pages go in \`app/\` directory
|
|
203
|
+
- API routes in \`app/api/\`
|
|
204
|
+
- Layouts use \`layout.tsx\`
|
|
205
|
+
- Loading states use \`loading.tsx\`
|
|
206
|
+
- Error boundaries use \`error.tsx\`
|
|
207
|
+
` : ""}
|
|
208
|
+
|
|
209
|
+
${m.isMonorepo ? `### Monorepo Structure (${m.type})
|
|
210
|
+
|
|
211
|
+
Workspaces:
|
|
212
|
+
${m.workspaces?.slice(0, 8).map(w => `- \`${w.path}\` - ${w.name}`).join("\n") || "None detected"}
|
|
213
|
+
|
|
214
|
+
${m.sharedPackages?.length > 0 ? `Shared Packages:
|
|
215
|
+
${m.sharedPackages.slice(0, 5).map(p => `- ${p.name} (used in ${p.usedIn} workspaces)`).join("\n")}` : ""}
|
|
216
|
+
` : ""}
|
|
217
|
+
|
|
218
|
+
### Directory Purpose
|
|
219
|
+
${analysis.directories.map(d => `- \`${d}/\` - ${getDirectoryPurpose(d)}`).join("\n")}
|
|
220
|
+
|
|
221
|
+
### Import Aliases
|
|
222
|
+
- Use \`@/\` for src directory imports
|
|
223
|
+
- Never use relative imports deeper than \`../\`
|
|
224
|
+
`;
|
|
225
|
+
|
|
226
|
+
// Data flow rules
|
|
227
|
+
if (analysis.hasPrisma || analysis.apiRoutes.length > 0 || p.dataFetching?.length) {
|
|
228
|
+
rules["data-flow"] = `---
|
|
229
|
+
description: Data fetching and API interaction patterns
|
|
230
|
+
globs: ["**/api/**", "**/lib/**", "**/services/**", "**/hooks/**"]
|
|
231
|
+
alwaysApply: false
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
# Data Flow Guidelines
|
|
235
|
+
|
|
236
|
+
${p.dataFetching?.length ? `## Data Fetching: ${p.dataFetching.join(", ")}
|
|
237
|
+
|
|
238
|
+
${p.dataFetching.includes("TanStack Query") ? `### TanStack Query Pattern
|
|
239
|
+
- Use \`useQuery\` for GET requests
|
|
240
|
+
- Use \`useMutation\` for POST/PUT/DELETE
|
|
241
|
+
- Define query keys consistently
|
|
242
|
+
- Invalidate queries after mutations
|
|
243
|
+
` : ""}
|
|
244
|
+
${p.dataFetching.includes("SWR") ? `### SWR Pattern
|
|
245
|
+
- Use \`useSWR\` for data fetching
|
|
246
|
+
- Define fetcher functions
|
|
247
|
+
- Handle loading and error states
|
|
248
|
+
` : ""}
|
|
249
|
+
${p.dataFetching.includes("tRPC") ? `### tRPC Pattern
|
|
250
|
+
- Use tRPC procedures for type-safe API calls
|
|
251
|
+
- Define routers in \`server/api/routers\`
|
|
252
|
+
- Use \`api.*.useQuery()\` pattern
|
|
253
|
+
` : ""}
|
|
254
|
+
` : ""}
|
|
255
|
+
|
|
256
|
+
${analysis.hasPrisma ? `## Database (Prisma)
|
|
257
|
+
|
|
258
|
+
Models: ${analysis.models.join(", ")}
|
|
259
|
+
|
|
260
|
+
Rules:
|
|
261
|
+
- Use Prisma client from \`@/lib/prisma\` or \`@/server/db\`
|
|
262
|
+
- Use transactions for multi-step operations
|
|
263
|
+
- Handle errors with try/catch
|
|
264
|
+
- Never expose raw database errors
|
|
265
|
+
` : ""}
|
|
266
|
+
|
|
267
|
+
${analysis.apiRoutes.length > 0 ? `## API Routes
|
|
268
|
+
|
|
269
|
+
${analysis.apiRoutes.slice(0, 15).map(r => `- ${r}`).join("\n")}
|
|
270
|
+
|
|
271
|
+
Rules:
|
|
272
|
+
${p.validation ? `- Validate all input with ${p.validation}` : "- Validate all input"}
|
|
273
|
+
- Return consistent response shapes
|
|
274
|
+
- Use proper HTTP status codes
|
|
275
|
+
` : ""}
|
|
276
|
+
`;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Component rules
|
|
280
|
+
if (analysis.components.length > 0) {
|
|
281
|
+
rules["components"] = `---
|
|
282
|
+
description: Component creation and styling guidelines
|
|
283
|
+
globs: ["**/components/**/*.{tsx,jsx}"]
|
|
284
|
+
alwaysApply: false
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
# Component Guidelines
|
|
288
|
+
|
|
289
|
+
## Existing Components (${analysis.components.length})
|
|
290
|
+
${analysis.components.slice(0, 20).map(c => `- \`${c}\``).join("\n")}
|
|
291
|
+
|
|
292
|
+
## Before Creating New Components
|
|
293
|
+
|
|
294
|
+
1. **Check if it exists above**
|
|
295
|
+
2. Place in \`components/\` or feature folder
|
|
296
|
+
3. Use ${analysis.conventions.naming.components || "PascalCase"} naming
|
|
297
|
+
4. Export as named export
|
|
298
|
+
${analysis.hasTailwind ? "5. Use Tailwind CSS for styling" : ""}
|
|
299
|
+
${p.styling?.length ? `6. Styling: ${p.styling.join(", ")}` : ""}
|
|
300
|
+
|
|
301
|
+
## Component Template
|
|
302
|
+
|
|
303
|
+
\`\`\`tsx
|
|
304
|
+
interface Props {
|
|
305
|
+
// Define props with types
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export function ComponentName({ ...props }: Props) {
|
|
309
|
+
return (
|
|
310
|
+
// JSX
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
\`\`\`
|
|
314
|
+
`;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Hooks rules
|
|
318
|
+
if (p.hooks?.length > 0) {
|
|
319
|
+
rules["hooks"] = `---
|
|
320
|
+
description: Custom hooks patterns and usage
|
|
321
|
+
globs: ["**/hooks/**/*.{ts,tsx}", "**/use*.{ts,tsx}"]
|
|
322
|
+
alwaysApply: false
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
# Custom Hooks
|
|
326
|
+
|
|
327
|
+
## Available Hooks (${p.hooks.length})
|
|
328
|
+
|
|
329
|
+
${p.hooks.map(h => `- \`${h}\``).join("\n")}
|
|
330
|
+
|
|
331
|
+
## Before Creating a New Hook
|
|
332
|
+
|
|
333
|
+
1. **Check the list above first**
|
|
334
|
+
2. Name it \`use[Feature]\`
|
|
335
|
+
3. Place in \`hooks/\` or \`lib/hooks/\`
|
|
336
|
+
4. Return a consistent shape
|
|
337
|
+
|
|
338
|
+
${p.codeExamples?.hooks ? `## Example
|
|
339
|
+
|
|
340
|
+
\`\`\`typescript
|
|
341
|
+
// ${p.codeExamples.hooks.file}
|
|
342
|
+
${p.codeExamples.hooks.code}
|
|
343
|
+
\`\`\`
|
|
344
|
+
` : ""}
|
|
345
|
+
`;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// State management rules
|
|
349
|
+
if (p.stateManagement) {
|
|
350
|
+
rules["state"] = `---
|
|
351
|
+
description: State management patterns
|
|
352
|
+
globs: ["**/store/**", "**/state/**", "**/context/**"]
|
|
353
|
+
alwaysApply: false
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
# State Management: ${p.stateManagement}
|
|
357
|
+
|
|
358
|
+
${p.stateManagement === "Zustand" ? `## Zustand Pattern
|
|
359
|
+
|
|
360
|
+
\`\`\`typescript
|
|
361
|
+
import { create } from 'zustand'
|
|
362
|
+
|
|
363
|
+
interface Store {
|
|
364
|
+
count: number
|
|
365
|
+
increment: () => void
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
export const useStore = create<Store>((set) => ({
|
|
369
|
+
count: 0,
|
|
370
|
+
increment: () => set((state) => ({ count: state.count + 1 })),
|
|
371
|
+
}))
|
|
372
|
+
\`\`\`
|
|
373
|
+
|
|
374
|
+
- Create stores in \`store/\` directory
|
|
375
|
+
- Use typed store interfaces
|
|
376
|
+
- Keep stores focused and small
|
|
377
|
+
` : ""}
|
|
378
|
+
${p.stateManagement === "Redux Toolkit" ? `## Redux Toolkit Pattern
|
|
379
|
+
|
|
380
|
+
\`\`\`typescript
|
|
381
|
+
import { createSlice } from '@reduxjs/toolkit'
|
|
382
|
+
|
|
383
|
+
const slice = createSlice({
|
|
384
|
+
name: 'feature',
|
|
385
|
+
initialState: {},
|
|
386
|
+
reducers: {}
|
|
387
|
+
})
|
|
388
|
+
\`\`\`
|
|
389
|
+
|
|
390
|
+
- Use createSlice for reducers
|
|
391
|
+
- Use createAsyncThunk for async
|
|
392
|
+
` : ""}
|
|
393
|
+
${p.stateManagement === "React Context" ? `## Context Pattern
|
|
394
|
+
|
|
395
|
+
\`\`\`typescript
|
|
396
|
+
const Context = createContext<Type | null>(null)
|
|
397
|
+
|
|
398
|
+
export function useFeature() {
|
|
399
|
+
const context = useContext(Context)
|
|
400
|
+
if (!context) throw new Error('Must be used within Provider')
|
|
401
|
+
return context
|
|
402
|
+
}
|
|
403
|
+
\`\`\`
|
|
404
|
+
` : ""}
|
|
405
|
+
`;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Types rules
|
|
409
|
+
if (t.interfaces?.length > 0 || t.types?.length > 0) {
|
|
410
|
+
rules["types"] = `---
|
|
411
|
+
description: Type definitions and interfaces
|
|
412
|
+
globs: ["**/*.d.ts", "**/types/**", "**/*.types.ts"]
|
|
413
|
+
alwaysApply: false
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
# Type Definitions
|
|
417
|
+
|
|
418
|
+
## Interfaces (${t.interfaces?.length || 0})
|
|
419
|
+
${t.interfaces?.slice(0, 20).map(i => `- \`${i}\``).join("\n") || "None"}
|
|
420
|
+
|
|
421
|
+
## Types (${t.types?.length || 0})
|
|
422
|
+
${t.types?.slice(0, 15).map(ty => `- \`${ty}\``).join("\n") || "None"}
|
|
423
|
+
|
|
424
|
+
${t.enums?.length > 0 ? `## Enums
|
|
425
|
+
${t.enums.map(e => `- \`${e}\``).join("\n")}` : ""}
|
|
426
|
+
|
|
427
|
+
## Conventions
|
|
428
|
+
- Interfaces for object shapes
|
|
429
|
+
- Type aliases for unions
|
|
430
|
+
- No \`any\` - use \`unknown\`
|
|
431
|
+
`;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Environment rules
|
|
435
|
+
if (env.variables?.length > 0) {
|
|
436
|
+
rules["environment"] = `---
|
|
437
|
+
description: Environment variables
|
|
438
|
+
globs: ["**/*.env*", "**/config/**"]
|
|
439
|
+
alwaysApply: false
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
# Environment Variables (${env.variables?.length || 0})
|
|
443
|
+
|
|
444
|
+
${env.variables?.slice(0, 25).map(v => `- \`${v}\``).join("\n")}
|
|
445
|
+
|
|
446
|
+
## Rules
|
|
447
|
+
- Never commit \`.env\` files
|
|
448
|
+
- Access via \`process.env.VAR_NAME\`
|
|
449
|
+
- Prefix client-side vars with \`NEXT_PUBLIC_\`
|
|
450
|
+
`;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Anti-patterns rules
|
|
454
|
+
if (p.antiPatterns?.length > 0) {
|
|
455
|
+
rules["avoid"] = `---
|
|
456
|
+
description: Patterns to avoid
|
|
457
|
+
globs: ["**/*.{ts,tsx,js,jsx}"]
|
|
458
|
+
alwaysApply: true
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
# ⚠️ Patterns to Avoid
|
|
462
|
+
|
|
463
|
+
${p.antiPatterns.map(ap => `## ${ap.severity === 'error' ? '🔴' : '🟡'} ${ap.message}
|
|
464
|
+
**Fix:** ${ap.suggestion}
|
|
465
|
+
`).join("\n")}
|
|
466
|
+
|
|
467
|
+
## General
|
|
468
|
+
- ❌ No \`any\` type
|
|
469
|
+
- ❌ No hardcoded secrets
|
|
470
|
+
- ❌ No console.log in production
|
|
471
|
+
- ❌ No mock data in production
|
|
472
|
+
`;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Testing rules
|
|
476
|
+
if (p.testing?.length > 0) {
|
|
477
|
+
rules["testing"] = `---
|
|
478
|
+
description: Testing patterns
|
|
479
|
+
globs: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"]
|
|
480
|
+
alwaysApply: false
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
# Testing: ${p.testing.join(", ")}
|
|
484
|
+
|
|
485
|
+
${p.testing.includes("Jest") || p.testing.includes("Vitest") ? `## Unit Tests
|
|
486
|
+
|
|
487
|
+
\`\`\`typescript
|
|
488
|
+
describe('Feature', () => {
|
|
489
|
+
it('should work', () => {
|
|
490
|
+
expect(result).toBe('expected')
|
|
491
|
+
})
|
|
492
|
+
})
|
|
493
|
+
\`\`\`
|
|
494
|
+
` : ""}
|
|
495
|
+
${p.testing.includes("Playwright") ? `## E2E Tests
|
|
496
|
+
|
|
497
|
+
\`\`\`typescript
|
|
498
|
+
test('user flow', async ({ page }) => {
|
|
499
|
+
await page.goto('/')
|
|
500
|
+
await page.click('button')
|
|
501
|
+
})
|
|
502
|
+
\`\`\`
|
|
503
|
+
` : ""}
|
|
504
|
+
`;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
return rules;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
module.exports = {
|
|
511
|
+
generateCursorRules,
|
|
512
|
+
generateCursorModularRules,
|
|
513
|
+
getDirectoryPurpose,
|
|
514
|
+
};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Context JSON Generator
|
|
3
|
+
* Generates .vibecheck/context.json for MCP servers
|
|
4
|
+
*
|
|
5
|
+
* Uses the unified EVIDENCE_SCHEMA and TRUTH_CONTRACT from proof-context.js
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { EVIDENCE_SCHEMA, TRUTH_CONTRACT } = require("../proof-context.js");
|
|
9
|
+
|
|
10
|
+
// Context attribution message shown when AI uses vibecheck data
|
|
11
|
+
const CONTEXT_ATTRIBUTION = "🧠 Context enhanced by vibecheck";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generate universal context JSON for MCP
|
|
15
|
+
*/
|
|
16
|
+
function generateContextJson(analysis, projectPath) {
|
|
17
|
+
const p = analysis.patterns || {};
|
|
18
|
+
const m = analysis.monorepo || {};
|
|
19
|
+
|
|
20
|
+
return JSON.stringify({
|
|
21
|
+
version: "3.0.0",
|
|
22
|
+
generatedAt: new Date().toISOString(),
|
|
23
|
+
generator: "vibecheck-context",
|
|
24
|
+
// Reference the unified schema from proof-context.js
|
|
25
|
+
evidenceSchema: EVIDENCE_SCHEMA,
|
|
26
|
+
truthContract: TRUTH_CONTRACT,
|
|
27
|
+
|
|
28
|
+
project: {
|
|
29
|
+
name: analysis.name,
|
|
30
|
+
path: projectPath,
|
|
31
|
+
framework: analysis.framework,
|
|
32
|
+
language: analysis.language,
|
|
33
|
+
architecture: analysis.architecture,
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
techStack: {
|
|
37
|
+
nextjs: analysis.hasNextjs,
|
|
38
|
+
react: analysis.hasReact,
|
|
39
|
+
typescript: analysis.hasTypescript,
|
|
40
|
+
prisma: analysis.hasPrisma,
|
|
41
|
+
tailwind: analysis.hasTailwind,
|
|
42
|
+
stateManagement: p.stateManagement,
|
|
43
|
+
validation: p.validation,
|
|
44
|
+
authentication: p.authentication,
|
|
45
|
+
dataFetching: p.dataFetching || [],
|
|
46
|
+
testing: p.testing || [],
|
|
47
|
+
styling: p.styling || [],
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
structure: {
|
|
51
|
+
directories: analysis.directories,
|
|
52
|
+
components: analysis.components,
|
|
53
|
+
apiRoutes: analysis.apiRoutes,
|
|
54
|
+
models: analysis.models,
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
patterns: {
|
|
58
|
+
hooks: p.hooks || [],
|
|
59
|
+
stateManagement: p.stateManagement,
|
|
60
|
+
validation: p.validation,
|
|
61
|
+
authentication: p.authentication,
|
|
62
|
+
dataFetching: p.dataFetching || [],
|
|
63
|
+
styling: p.styling || [],
|
|
64
|
+
testing: p.testing || [],
|
|
65
|
+
codeExamples: p.codeExamples || {},
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
antiPatterns: p.antiPatterns || [],
|
|
69
|
+
|
|
70
|
+
types: {
|
|
71
|
+
interfaces: analysis.types?.interfaces || [],
|
|
72
|
+
types: analysis.types?.types || [],
|
|
73
|
+
enums: analysis.types?.enums || [],
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
environment: {
|
|
77
|
+
files: analysis.envVars?.files || [],
|
|
78
|
+
variables: analysis.envVars?.variables || [],
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
scripts: analysis.scripts || [],
|
|
82
|
+
|
|
83
|
+
conventions: {
|
|
84
|
+
naming: analysis.conventions?.naming || {},
|
|
85
|
+
imports: analysis.imports?.importPatterns || [],
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
monorepo: m.isMonorepo ? {
|
|
89
|
+
type: m.type,
|
|
90
|
+
tools: m.tools || [],
|
|
91
|
+
workspaces: m.workspaces?.map(w => ({
|
|
92
|
+
name: w.name,
|
|
93
|
+
path: w.path,
|
|
94
|
+
description: w.description,
|
|
95
|
+
})) || [],
|
|
96
|
+
sharedPackages: m.sharedPackages || [],
|
|
97
|
+
} : null,
|
|
98
|
+
|
|
99
|
+
stats: {
|
|
100
|
+
totalFiles: analysis.stats?.totalFiles || 0,
|
|
101
|
+
totalLines: analysis.stats?.totalLines || 0,
|
|
102
|
+
byExtension: analysis.stats?.byExtension || {},
|
|
103
|
+
largestFiles: analysis.stats?.largestFiles || [],
|
|
104
|
+
},
|
|
105
|
+
contextValidation: analysis.contextValidation || null,
|
|
106
|
+
contextDrift: analysis.contextDrift || null,
|
|
107
|
+
contextSummary: analysis.contextSummary || null,
|
|
108
|
+
|
|
109
|
+
rules: {
|
|
110
|
+
critical: [
|
|
111
|
+
"Never hardcode secrets - use environment variables",
|
|
112
|
+
"No mock data in production code",
|
|
113
|
+
`No 'any' types - use proper TypeScript types`,
|
|
114
|
+
"Follow existing patterns in the codebase",
|
|
115
|
+
"Use existing components before creating new ones",
|
|
116
|
+
"API routes must validate all input",
|
|
117
|
+
],
|
|
118
|
+
style: [
|
|
119
|
+
`File naming: ${analysis.conventions?.naming?.components || "PascalCase"} for components`,
|
|
120
|
+
"Use path aliases (@/) for imports",
|
|
121
|
+
analysis.hasTailwind ? "Use Tailwind CSS for styling" : null,
|
|
122
|
+
p.stateManagement ? `Use ${p.stateManagement} for state management` : null,
|
|
123
|
+
p.validation ? `Use ${p.validation} for validation` : null,
|
|
124
|
+
].filter(Boolean),
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
mcp: {
|
|
128
|
+
resources: [
|
|
129
|
+
{
|
|
130
|
+
uri: `file://${projectPath}/.vibecheck/context.json`,
|
|
131
|
+
name: "Project Context",
|
|
132
|
+
description: "Full project analysis and context",
|
|
133
|
+
mimeType: "application/json",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
uri: `file://${projectPath}/.vibecheck/project-map.json`,
|
|
137
|
+
name: "Project Map",
|
|
138
|
+
description: "Complete project structure map",
|
|
139
|
+
mimeType: "application/json",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
uri: `file://${projectPath}/.vibecheck/memory.json`,
|
|
143
|
+
name: "AI Memory",
|
|
144
|
+
description: "AI learning memory for this project",
|
|
145
|
+
mimeType: "application/json",
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
tools: [
|
|
149
|
+
{
|
|
150
|
+
name: "vibecheck.context",
|
|
151
|
+
description: "Regenerate project context",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: "vibecheck.analyze",
|
|
155
|
+
description: "Analyze specific file or directory",
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
// Attribution message for AI responses
|
|
161
|
+
_attribution: CONTEXT_ATTRIBUTION,
|
|
162
|
+
_attributionNote: "Include this attribution when referencing vibecheck context in responses",
|
|
163
|
+
}, null, 2);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
module.exports = {
|
|
167
|
+
generateContextJson,
|
|
168
|
+
CONTEXT_ATTRIBUTION,
|
|
169
|
+
};
|