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,421 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Risk Vectors
|
|
3
|
+
*
|
|
4
|
+
* Defines the risk vectors and their default weights for scoring changes.
|
|
5
|
+
* Each vector contributes to the overall risk score.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
"use strict";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Risk vector definitions
|
|
12
|
+
*/
|
|
13
|
+
const RISK_VECTORS = {
|
|
14
|
+
/**
|
|
15
|
+
* Surface Area
|
|
16
|
+
* How many files are touched by the change
|
|
17
|
+
*/
|
|
18
|
+
SURFACE_AREA: {
|
|
19
|
+
id: "surface_area",
|
|
20
|
+
name: "Surface Area",
|
|
21
|
+
description: "Number of files touched by the change",
|
|
22
|
+
baseWeight: 1,
|
|
23
|
+
calculate: (context) => {
|
|
24
|
+
const files = context.files || [];
|
|
25
|
+
const fileCount = files.length;
|
|
26
|
+
|
|
27
|
+
// Single file changes are very common and safe - no penalty
|
|
28
|
+
if (fileCount <= 1) return 0;
|
|
29
|
+
|
|
30
|
+
// Count "safe" files that shouldn't add to risk
|
|
31
|
+
const safeFiles = files.filter(f => {
|
|
32
|
+
const path = (f.path || f).toLowerCase();
|
|
33
|
+
return (
|
|
34
|
+
path.includes('.test.') || path.includes('.spec.') ||
|
|
35
|
+
path.includes('__tests__') || path.includes('__mocks__') ||
|
|
36
|
+
path.endsWith('.md') || path.endsWith('.mdx') ||
|
|
37
|
+
path.endsWith('.d.ts') || path.includes('.stories.') ||
|
|
38
|
+
path.endsWith('-lock.json') || path.endsWith('.lock') ||
|
|
39
|
+
path.includes('/docs/')
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Effective file count excludes safe files
|
|
44
|
+
const effectiveCount = fileCount - safeFiles.length;
|
|
45
|
+
|
|
46
|
+
// More generous thresholds
|
|
47
|
+
if (effectiveCount <= 1) return 0;
|
|
48
|
+
if (effectiveCount <= 3) return effectiveCount; // 1 point each
|
|
49
|
+
if (effectiveCount <= 5) return 3 + (effectiveCount - 3) * 2; // 2 points each
|
|
50
|
+
if (effectiveCount <= 10) return 7 + (effectiveCount - 5) * 3; // 3 points each
|
|
51
|
+
return 22 + (effectiveCount - 10) * 4; // 4 points each for large changes
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Blast Radius
|
|
57
|
+
* Impact on core vs peripheral code
|
|
58
|
+
*/
|
|
59
|
+
BLAST_RADIUS: {
|
|
60
|
+
id: "blast_radius",
|
|
61
|
+
name: "Blast Radius",
|
|
62
|
+
description: "Impact on core vs peripheral code paths",
|
|
63
|
+
baseWeight: 1,
|
|
64
|
+
calculate: (context) => {
|
|
65
|
+
let score = 0;
|
|
66
|
+
const files = context.files || [];
|
|
67
|
+
|
|
68
|
+
// For single-file changes, apply a discount since they're typically safer
|
|
69
|
+
const singleFileDiscount = files.length === 1 ? 0.6 : 1;
|
|
70
|
+
|
|
71
|
+
for (const file of files) {
|
|
72
|
+
const path = (file.path || file).toLowerCase();
|
|
73
|
+
let fileScore = 0;
|
|
74
|
+
|
|
75
|
+
// Tests have ZERO impact - they can't break production
|
|
76
|
+
if (path.includes("/test") || path.includes(".test.") || path.includes(".spec.") ||
|
|
77
|
+
path.includes("__tests__") || path.includes("__mocks__")) {
|
|
78
|
+
fileScore = 0;
|
|
79
|
+
}
|
|
80
|
+
// Documentation and config have minimal impact
|
|
81
|
+
else if (path.endsWith(".md") || path.endsWith(".mdx") ||
|
|
82
|
+
path.includes("/docs/") || path.includes("readme")) {
|
|
83
|
+
fileScore = 0;
|
|
84
|
+
}
|
|
85
|
+
// Type definitions are low risk
|
|
86
|
+
else if (path.endsWith(".d.ts") || path.includes("/types/")) {
|
|
87
|
+
fileScore = 2;
|
|
88
|
+
}
|
|
89
|
+
// Storybook/examples - no production impact
|
|
90
|
+
else if (path.includes(".stories.") || path.includes("/examples/") || path.includes("/storybook/")) {
|
|
91
|
+
fileScore = 0;
|
|
92
|
+
}
|
|
93
|
+
// Core paths - high impact but reduced from 25
|
|
94
|
+
else if (path.includes("/core/") || path.includes("/lib/") || path.includes("/shared/")) {
|
|
95
|
+
fileScore = 15;
|
|
96
|
+
}
|
|
97
|
+
// Database/schema - high impact
|
|
98
|
+
else if (path.includes("/prisma/") || path.includes("/db/") || path.includes("/schema/")) {
|
|
99
|
+
fileScore = 18;
|
|
100
|
+
}
|
|
101
|
+
// Service paths - medium-high impact (reduced from 20)
|
|
102
|
+
else if (path.includes("/services/") || path.includes("/providers/")) {
|
|
103
|
+
fileScore = 12;
|
|
104
|
+
}
|
|
105
|
+
// Middleware - medium-high impact (reduced from 18)
|
|
106
|
+
else if (path.includes("/middleware/")) {
|
|
107
|
+
fileScore = 10;
|
|
108
|
+
}
|
|
109
|
+
// API routes - medium impact (reduced from 15)
|
|
110
|
+
else if (path.includes("/routes/") || path.includes("/api/")) {
|
|
111
|
+
fileScore = 8;
|
|
112
|
+
}
|
|
113
|
+
// Config files - low impact (reduced from 12)
|
|
114
|
+
else if (path.includes("/config/")) {
|
|
115
|
+
fileScore = 5;
|
|
116
|
+
}
|
|
117
|
+
// Package.json is special - lock files are fine, package.json needs care
|
|
118
|
+
else if (path.endsWith("package.json")) {
|
|
119
|
+
fileScore = 8;
|
|
120
|
+
}
|
|
121
|
+
else if (path.endsWith("package-lock.json") || path.endsWith("pnpm-lock.yaml") || path.endsWith("yarn.lock")) {
|
|
122
|
+
fileScore = 0; // Lock files are auto-generated
|
|
123
|
+
}
|
|
124
|
+
// JSON/YAML config files - minimal impact
|
|
125
|
+
else if (path.endsWith(".json") || path.endsWith(".yaml") || path.endsWith(".yml")) {
|
|
126
|
+
fileScore = 3;
|
|
127
|
+
}
|
|
128
|
+
// Components/Pages - low impact (UI changes)
|
|
129
|
+
else if (path.includes("/components/") || path.includes("/pages/") || path.includes("/app/")) {
|
|
130
|
+
fileScore = 3;
|
|
131
|
+
}
|
|
132
|
+
// Styles - minimal impact
|
|
133
|
+
else if (path.endsWith(".css") || path.endsWith(".scss") || path.endsWith(".less")) {
|
|
134
|
+
fileScore = 1;
|
|
135
|
+
}
|
|
136
|
+
// Everything else - low impact
|
|
137
|
+
else {
|
|
138
|
+
fileScore = 2;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
score += fileScore;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Apply single-file discount
|
|
145
|
+
return Math.round(score * singleFileDiscount);
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Irreversibility
|
|
151
|
+
* How hard it is to undo the change
|
|
152
|
+
*/
|
|
153
|
+
IRREVERSIBILITY: {
|
|
154
|
+
id: "irreversibility",
|
|
155
|
+
name: "Irreversibility",
|
|
156
|
+
description: "Difficulty of undoing the change",
|
|
157
|
+
baseWeight: 1,
|
|
158
|
+
calculate: (context) => {
|
|
159
|
+
let score = 0;
|
|
160
|
+
const operations = context.operations || [];
|
|
161
|
+
const files = context.files || [];
|
|
162
|
+
|
|
163
|
+
for (const op of operations) {
|
|
164
|
+
const type = op.type?.toLowerCase();
|
|
165
|
+
const path = (op.path || "").toLowerCase();
|
|
166
|
+
|
|
167
|
+
// Deletions are highly irreversible
|
|
168
|
+
if (type === "delete") {
|
|
169
|
+
score += 20;
|
|
170
|
+
// Even more for core files
|
|
171
|
+
if (path.includes("/core/") || path.includes("/lib/")) {
|
|
172
|
+
score += 15;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Migrations are very irreversible
|
|
176
|
+
else if (path.includes("migration") || path.includes("/prisma/")) {
|
|
177
|
+
score += 30;
|
|
178
|
+
}
|
|
179
|
+
// Schema changes are irreversible
|
|
180
|
+
else if (path.includes("schema") || path.includes(".prisma")) {
|
|
181
|
+
score += 25;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Check for delete operations in files
|
|
186
|
+
for (const file of files) {
|
|
187
|
+
const path = (file.path || file).toLowerCase();
|
|
188
|
+
if (path.includes("migration")) {
|
|
189
|
+
score += 25;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return score;
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Confidence
|
|
199
|
+
* How confident we are in the change's safety
|
|
200
|
+
*/
|
|
201
|
+
CONFIDENCE: {
|
|
202
|
+
id: "confidence",
|
|
203
|
+
name: "Confidence Gap",
|
|
204
|
+
description: "Points added for unverified assumptions",
|
|
205
|
+
baseWeight: 1,
|
|
206
|
+
calculate: (context) => {
|
|
207
|
+
let score = 0;
|
|
208
|
+
|
|
209
|
+
// Unresolved assumptions add risk (reduced from 40 to 15 per assumption)
|
|
210
|
+
// Most assumptions are benign and resolve at runtime
|
|
211
|
+
const unresolvedAssumptions = context.unresolvedAssumptions || [];
|
|
212
|
+
const assumptionCount = unresolvedAssumptions.length;
|
|
213
|
+
|
|
214
|
+
// Use diminishing returns for multiple assumptions
|
|
215
|
+
if (assumptionCount > 0) {
|
|
216
|
+
// First assumption: 15 points, then 10, then 5 each for more
|
|
217
|
+
score += Math.min(15 + Math.max(0, assumptionCount - 1) * 5, 40);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Low confidence in proposal (reduced from 30/20/10 to 15/10/5)
|
|
221
|
+
const confidence = context.proposalConfidence ?? 1;
|
|
222
|
+
if (confidence < 0.3) {
|
|
223
|
+
score += 15;
|
|
224
|
+
} else if (confidence < 0.5) {
|
|
225
|
+
score += 10;
|
|
226
|
+
} else if (confidence < 0.7) {
|
|
227
|
+
score += 5;
|
|
228
|
+
}
|
|
229
|
+
// Note: 0.7+ confidence adds no penalty (default is fine)
|
|
230
|
+
|
|
231
|
+
// Missing intent - only penalize if completely missing
|
|
232
|
+
// Many agents provide minimal but valid intents
|
|
233
|
+
if (!context.intent || context.intent.trim().length === 0) {
|
|
234
|
+
score += 8;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return score;
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Novelty
|
|
243
|
+
* Whether this introduces new patterns
|
|
244
|
+
*/
|
|
245
|
+
NOVELTY: {
|
|
246
|
+
id: "novelty",
|
|
247
|
+
name: "Novelty",
|
|
248
|
+
description: "Introduction of new patterns or dependencies",
|
|
249
|
+
baseWeight: 1,
|
|
250
|
+
calculate: (context) => {
|
|
251
|
+
let score = 0;
|
|
252
|
+
|
|
253
|
+
// New dependencies - only risky if adding many
|
|
254
|
+
// Single new dependency is very common during development
|
|
255
|
+
const newDependencies = context.newDependencies || [];
|
|
256
|
+
if (newDependencies.length > 3) {
|
|
257
|
+
score += 5 + (newDependencies.length - 3) * 3; // Only penalize bulk additions
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// New files being created - very normal during development
|
|
261
|
+
// Only flag if creating many files at once (could be a scaffold)
|
|
262
|
+
const operations = context.operations || [];
|
|
263
|
+
const creations = operations.filter(op => op.type === "create");
|
|
264
|
+
if (creations.length > 5) {
|
|
265
|
+
score += (creations.length - 5) * 2;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// New env vars - reduced from 15 to 5 per var
|
|
269
|
+
// New env vars are common when adding features
|
|
270
|
+
const newEnvVars = context.newEnvVars || [];
|
|
271
|
+
score += Math.min(newEnvVars.length * 5, 15); // Cap at 15 points
|
|
272
|
+
|
|
273
|
+
// New routes - reduced from 8 to 3 per route
|
|
274
|
+
// Adding routes is normal API development
|
|
275
|
+
const newRoutes = context.newRoutes || [];
|
|
276
|
+
score += Math.min(newRoutes.length * 3, 12); // Cap at 12 points
|
|
277
|
+
|
|
278
|
+
return score;
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Domain Risk
|
|
284
|
+
* Risk based on the domain being modified
|
|
285
|
+
*/
|
|
286
|
+
DOMAIN: {
|
|
287
|
+
id: "domain",
|
|
288
|
+
name: "Domain Risk",
|
|
289
|
+
description: "Risk associated with specific domains",
|
|
290
|
+
baseWeight: 1,
|
|
291
|
+
calculate: (context) => {
|
|
292
|
+
const domains = context.domains || [];
|
|
293
|
+
|
|
294
|
+
// If no domains identified, it's likely a safe general change
|
|
295
|
+
if (domains.length === 0) return 0;
|
|
296
|
+
|
|
297
|
+
// Reduced domain weights to avoid over-penalizing
|
|
298
|
+
// Single-file auth changes shouldn't trigger blocks by themselves
|
|
299
|
+
const domainWeights = {
|
|
300
|
+
payments: 20, // Reduced from 35 - payments is sensitive but not always blocking
|
|
301
|
+
auth: 15, // Reduced from 30 - many auth changes are benign
|
|
302
|
+
security: 15, // Reduced from 30 - security patterns are common
|
|
303
|
+
database: 12, // Reduced from 25 - schema changes are normal
|
|
304
|
+
middleware: 8, // Reduced from 20 - middleware is often safe
|
|
305
|
+
core: 10, // Reduced from 20 - core changes happen regularly
|
|
306
|
+
routes: 5, // Reduced from 15 - route changes are common
|
|
307
|
+
contracts: 8, // Reduced from 15 - API contracts evolve
|
|
308
|
+
config: 3, // Reduced from 12 - config is usually safe
|
|
309
|
+
ui: 0, // Reduced from 5 - UI changes are generally safe
|
|
310
|
+
test: 0, // Reduced from 2 - tests have no production impact
|
|
311
|
+
general: 0, // Reduced from 3 - general is the default, shouldn't add risk
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
// Only count the highest-risk domain (don't stack)
|
|
315
|
+
// This prevents a file in "auth + routes" from getting double-penalized
|
|
316
|
+
let maxScore = 0;
|
|
317
|
+
for (const domain of domains) {
|
|
318
|
+
const weight = domainWeights[domain] ?? 2;
|
|
319
|
+
maxScore = Math.max(maxScore, weight);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return maxScore;
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Side Effects
|
|
328
|
+
* Potential for unintended side effects
|
|
329
|
+
*/
|
|
330
|
+
SIDE_EFFECTS: {
|
|
331
|
+
id: "side_effects",
|
|
332
|
+
name: "Side Effects",
|
|
333
|
+
description: "Potential for unintended side effects",
|
|
334
|
+
baseWeight: 1,
|
|
335
|
+
calculate: (context) => {
|
|
336
|
+
let score = 0;
|
|
337
|
+
const claims = context.claims || [];
|
|
338
|
+
|
|
339
|
+
// Network calls - very common, reduced impact
|
|
340
|
+
// Only penalize if there are many or if they're to external services
|
|
341
|
+
const networkClaims = claims.filter(c =>
|
|
342
|
+
c.type === "fetch" || c.type === "api_call" || c.type === "network"
|
|
343
|
+
);
|
|
344
|
+
// First 3 network calls are free (normal API usage)
|
|
345
|
+
if (networkClaims.length > 3) {
|
|
346
|
+
score += (networkClaims.length - 3) * 5;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// File system operations - only server-side concerns
|
|
350
|
+
const fsClaims = claims.filter(c =>
|
|
351
|
+
c.type === "fs_write" || c.type === "fs_delete"
|
|
352
|
+
);
|
|
353
|
+
// Writes are more concerning than reads
|
|
354
|
+
const writeOps = fsClaims.filter(c => c.type === "fs_write");
|
|
355
|
+
const deleteOps = fsClaims.filter(c => c.type === "fs_delete");
|
|
356
|
+
score += writeOps.length * 5;
|
|
357
|
+
score += deleteOps.length * 10; // Deletes are more dangerous
|
|
358
|
+
|
|
359
|
+
// Database mutations - important but common
|
|
360
|
+
const dbClaims = claims.filter(c =>
|
|
361
|
+
c.type === "db_write" || c.type === "db_delete" || c.type === "db_mutation"
|
|
362
|
+
);
|
|
363
|
+
// Only penalize destructive DB operations heavily
|
|
364
|
+
const dbDeletes = dbClaims.filter(c => c.type === "db_delete");
|
|
365
|
+
const dbWrites = dbClaims.filter(c => c.type !== "db_delete");
|
|
366
|
+
score += dbWrites.length * 3;
|
|
367
|
+
score += dbDeletes.length * 12;
|
|
368
|
+
|
|
369
|
+
// External service calls - reduced from 18 to 8
|
|
370
|
+
// Calling external APIs is normal
|
|
371
|
+
const externalClaims = claims.filter(c =>
|
|
372
|
+
c.type === "external_service" || c.type === "webhook"
|
|
373
|
+
);
|
|
374
|
+
score += Math.min(externalClaims.length * 8, 20); // Cap at 20
|
|
375
|
+
|
|
376
|
+
return score;
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Risk level thresholds
|
|
383
|
+
*/
|
|
384
|
+
const RISK_LEVELS = {
|
|
385
|
+
LOW: { min: 0, max: 25, label: "LOW", color: "green" },
|
|
386
|
+
MEDIUM: { min: 26, max: 50, label: "MEDIUM", color: "yellow" },
|
|
387
|
+
HIGH: { min: 51, max: 80, label: "HIGH", color: "orange" },
|
|
388
|
+
CRITICAL: { min: 81, max: Infinity, label: "CRITICAL", color: "red" },
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Get risk level from score
|
|
393
|
+
*/
|
|
394
|
+
function getRiskLevel(score) {
|
|
395
|
+
if (score <= RISK_LEVELS.LOW.max) return RISK_LEVELS.LOW;
|
|
396
|
+
if (score <= RISK_LEVELS.MEDIUM.max) return RISK_LEVELS.MEDIUM;
|
|
397
|
+
if (score <= RISK_LEVELS.HIGH.max) return RISK_LEVELS.HIGH;
|
|
398
|
+
return RISK_LEVELS.CRITICAL;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Get all vector IDs
|
|
403
|
+
*/
|
|
404
|
+
function getVectorIds() {
|
|
405
|
+
return Object.values(RISK_VECTORS).map(v => v.id);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Get vector by ID
|
|
410
|
+
*/
|
|
411
|
+
function getVector(id) {
|
|
412
|
+
return Object.values(RISK_VECTORS).find(v => v.id === id);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
module.exports = {
|
|
416
|
+
RISK_VECTORS,
|
|
417
|
+
RISK_LEVELS,
|
|
418
|
+
getRiskLevel,
|
|
419
|
+
getVectorIds,
|
|
420
|
+
getVector,
|
|
421
|
+
};
|