@vibecheckai/cli 2.5.1
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/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/autopatch/verified-autopatch.d.ts +111 -0
- package/dist/autopatch/verified-autopatch.d.ts.map +1 -0
- package/dist/autopatch/verified-autopatch.js +503 -0
- package/dist/autopatch/verified-autopatch.js.map +1 -0
- package/dist/bundles/guardrail-core.js +25799 -0
- package/dist/bundles/guardrail-security.js +208687 -0
- package/dist/bundles/guardrail-ship.js +2318 -0
- package/dist/bundles/index.js +8 -0
- package/dist/commands/autopilot-decision.d.ts +24 -0
- package/dist/commands/autopilot-decision.d.ts.map +1 -0
- package/dist/commands/autopilot-decision.js +304 -0
- package/dist/commands/autopilot-decision.js.map +1 -0
- package/dist/commands/autopilot.d.ts +33 -0
- package/dist/commands/autopilot.d.ts.map +1 -0
- package/dist/commands/autopilot.js +1539 -0
- package/dist/commands/autopilot.js.map +1 -0
- package/dist/commands/baseline.d.ts +7 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +79 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +165 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +8 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +35 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +340 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/debug.d.ts +78 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +381 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/doctor.d.ts +17 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +226 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/evidence.d.ts +45 -0
- package/dist/commands/evidence.d.ts.map +1 -0
- package/dist/commands/evidence.js +197 -0
- package/dist/commands/evidence.js.map +1 -0
- package/dist/commands/explain.d.ts +8 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +52 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/fix-consolidated.d.ts +19 -0
- package/dist/commands/fix-consolidated.d.ts.map +1 -0
- package/dist/commands/fix-consolidated.js +165 -0
- package/dist/commands/fix-consolidated.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +125 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/launcher.d.ts +10 -0
- package/dist/commands/launcher.d.ts.map +1 -0
- package/dist/commands/launcher.js +174 -0
- package/dist/commands/launcher.js.map +1 -0
- package/dist/commands/on.d.ts +8 -0
- package/dist/commands/on.d.ts.map +1 -0
- package/dist/commands/on.js +123 -0
- package/dist/commands/on.js.map +1 -0
- package/dist/commands/preview.d.ts +54 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +352 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/quality/check.d.ts +31 -0
- package/dist/commands/quality/check.d.ts.map +1 -0
- package/dist/commands/quality/check.js +242 -0
- package/dist/commands/quality/check.js.map +1 -0
- package/dist/commands/quality/index.d.ts +8 -0
- package/dist/commands/quality/index.d.ts.map +1 -0
- package/dist/commands/quality/index.js +14 -0
- package/dist/commands/quality/index.js.map +1 -0
- package/dist/commands/quality/setup-quality.d.ts +23 -0
- package/dist/commands/quality/setup-quality.d.ts.map +1 -0
- package/dist/commands/quality/setup-quality.js +452 -0
- package/dist/commands/quality/setup-quality.js.map +1 -0
- package/dist/commands/quality/tidy.d.ts +41 -0
- package/dist/commands/quality/tidy.d.ts.map +1 -0
- package/dist/commands/quality/tidy.js +466 -0
- package/dist/commands/quality/tidy.js.map +1 -0
- package/dist/commands/quality/utils.d.ts +73 -0
- package/dist/commands/quality/utils.d.ts.map +1 -0
- package/dist/commands/quality/utils.js +158 -0
- package/dist/commands/quality/utils.js.map +1 -0
- package/dist/commands/replay.d.ts +8 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +52 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/scan-consolidated.d.ts +61 -0
- package/dist/commands/scan-consolidated.d.ts.map +1 -0
- package/dist/commands/scan-consolidated.js +243 -0
- package/dist/commands/scan-consolidated.js.map +1 -0
- package/dist/commands/scan-secrets.d.ts +47 -0
- package/dist/commands/scan-secrets.d.ts.map +1 -0
- package/dist/commands/scan-secrets.js +225 -0
- package/dist/commands/scan-secrets.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.js +716 -0
- package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
- package/dist/commands/scan-vulnerabilities.d.ts +32 -0
- package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities.js +283 -0
- package/dist/commands/scan-vulnerabilities.js.map +1 -0
- package/dist/commands/secrets-allowlist.d.ts +7 -0
- package/dist/commands/secrets-allowlist.d.ts.map +1 -0
- package/dist/commands/secrets-allowlist.js +85 -0
- package/dist/commands/secrets-allowlist.js.map +1 -0
- package/dist/commands/ship-consolidated.d.ts +58 -0
- package/dist/commands/ship-consolidated.d.ts.map +1 -0
- package/dist/commands/ship-consolidated.js +515 -0
- package/dist/commands/ship-consolidated.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +134 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +30 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/fix/analytics.d.ts +121 -0
- package/dist/fix/analytics.d.ts.map +1 -0
- package/dist/fix/analytics.js +289 -0
- package/dist/fix/analytics.js.map +1 -0
- package/dist/fix/applicator.d.ts +44 -0
- package/dist/fix/applicator.d.ts.map +1 -0
- package/dist/fix/applicator.js +144 -0
- package/dist/fix/applicator.js.map +1 -0
- package/dist/fix/audit.d.ts +61 -0
- package/dist/fix/audit.d.ts.map +1 -0
- package/dist/fix/audit.js +149 -0
- package/dist/fix/audit.js.map +1 -0
- package/dist/fix/backup.d.ts +38 -0
- package/dist/fix/backup.d.ts.map +1 -0
- package/dist/fix/backup.js +154 -0
- package/dist/fix/backup.js.map +1 -0
- package/dist/fix/config.d.ts +78 -0
- package/dist/fix/config.d.ts.map +1 -0
- package/dist/fix/config.js +200 -0
- package/dist/fix/config.js.map +1 -0
- package/dist/fix/engine.d.ts +55 -0
- package/dist/fix/engine.d.ts.map +1 -0
- package/dist/fix/engine.js +285 -0
- package/dist/fix/engine.js.map +1 -0
- package/dist/fix/impact.d.ts +74 -0
- package/dist/fix/impact.d.ts.map +1 -0
- package/dist/fix/impact.js +281 -0
- package/dist/fix/impact.js.map +1 -0
- package/dist/fix/index.d.ts +5 -0
- package/dist/fix/index.d.ts.map +1 -0
- package/dist/fix/index.js +12 -0
- package/dist/fix/index.js.map +1 -0
- package/dist/fix/interactive.d.ts +22 -0
- package/dist/fix/interactive.d.ts.map +1 -0
- package/dist/fix/interactive.js +172 -0
- package/dist/fix/interactive.js.map +1 -0
- package/dist/fix/learning.d.ts +109 -0
- package/dist/fix/learning.d.ts.map +1 -0
- package/dist/fix/learning.js +296 -0
- package/dist/fix/learning.js.map +1 -0
- package/dist/fix/metrics.d.ts +106 -0
- package/dist/fix/metrics.d.ts.map +1 -0
- package/dist/fix/metrics.js +138 -0
- package/dist/fix/metrics.js.map +1 -0
- package/dist/fix/parallel.d.ts +69 -0
- package/dist/fix/parallel.d.ts.map +1 -0
- package/dist/fix/parallel.js +203 -0
- package/dist/fix/parallel.js.map +1 -0
- package/dist/fix/report.d.ts +40 -0
- package/dist/fix/report.d.ts.map +1 -0
- package/dist/fix/report.js +212 -0
- package/dist/fix/report.js.map +1 -0
- package/dist/fix/strategy.d.ts +53 -0
- package/dist/fix/strategy.d.ts.map +1 -0
- package/dist/fix/strategy.js +143 -0
- package/dist/fix/strategy.js.map +1 -0
- package/dist/fix/templates.d.ts +58 -0
- package/dist/fix/templates.d.ts.map +1 -0
- package/dist/fix/templates.js +259 -0
- package/dist/fix/templates.js.map +1 -0
- package/dist/fix/testing.d.ts +68 -0
- package/dist/fix/testing.d.ts.map +1 -0
- package/dist/fix/testing.js +245 -0
- package/dist/fix/testing.js.map +1 -0
- package/dist/fix/validation.d.ts +71 -0
- package/dist/fix/validation.d.ts.map +1 -0
- package/dist/fix/validation.js +267 -0
- package/dist/fix/validation.js.map +1 -0
- package/dist/fix/visualization.d.ts +73 -0
- package/dist/fix/visualization.d.ts.map +1 -0
- package/dist/fix/visualization.js +243 -0
- package/dist/fix/visualization.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +11 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/sarif-enhanced.d.ts +78 -0
- package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
- package/dist/formatters/sarif-enhanced.js +144 -0
- package/dist/formatters/sarif-enhanced.js.map +1 -0
- package/dist/formatters/sarif-v2.d.ts +121 -0
- package/dist/formatters/sarif-v2.d.ts.map +1 -0
- package/dist/formatters/sarif-v2.js +356 -0
- package/dist/formatters/sarif-v2.js.map +1 -0
- package/dist/formatters/sarif.d.ts +72 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +146 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4455 -0
- package/dist/index.js.map +1 -0
- package/dist/init/ci-generator.d.ts +18 -0
- package/dist/init/ci-generator.d.ts.map +1 -0
- package/dist/init/ci-generator.js +317 -0
- package/dist/init/ci-generator.js.map +1 -0
- package/dist/init/detect-framework.d.ts +15 -0
- package/dist/init/detect-framework.d.ts.map +1 -0
- package/dist/init/detect-framework.js +301 -0
- package/dist/init/detect-framework.js.map +1 -0
- package/dist/init/hooks-installer.d.ts +22 -0
- package/dist/init/hooks-installer.d.ts.map +1 -0
- package/dist/init/hooks-installer.js +310 -0
- package/dist/init/hooks-installer.js.map +1 -0
- package/dist/init/index.d.ts +8 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +22 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +401 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +240 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +42 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/telemetry.d.ts +40 -0
- package/dist/mcp/telemetry.d.ts.map +1 -0
- package/dist/mcp/telemetry.js +98 -0
- package/dist/mcp/telemetry.js.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +32 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js +236 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +1 -0
- package/dist/reality/no-dead-buttons/index.d.ts +11 -0
- package/dist/reality/no-dead-buttons/index.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/index.js +18 -0
- package/dist/reality/no-dead-buttons/index.js.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts +34 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.js +230 -0
- package/dist/reality/no-dead-buttons/static-scanner.js.map +1 -0
- package/dist/reality/reality-graph.d.ts +192 -0
- package/dist/reality/reality-graph.d.ts.map +1 -0
- package/dist/reality/reality-graph.js +600 -0
- package/dist/reality/reality-graph.js.map +1 -0
- package/dist/reality/reality-runner.d.ts +89 -0
- package/dist/reality/reality-runner.d.ts.map +1 -0
- package/dist/reality/reality-runner.js +540 -0
- package/dist/reality/reality-runner.js.map +1 -0
- package/dist/reality/receipt-generator.d.ts +152 -0
- package/dist/reality/receipt-generator.d.ts.map +1 -0
- package/dist/reality/receipt-generator.js +495 -0
- package/dist/reality/receipt-generator.js.map +1 -0
- package/dist/reality/runtime-tracer.d.ts +75 -0
- package/dist/reality/runtime-tracer.d.ts.map +1 -0
- package/dist/reality/runtime-tracer.js +109 -0
- package/dist/reality/runtime-tracer.js.map +1 -0
- package/dist/runtime/auth-utils.d.ts +43 -0
- package/dist/runtime/auth-utils.d.ts.map +1 -0
- package/dist/runtime/auth-utils.js +130 -0
- package/dist/runtime/auth-utils.js.map +1 -0
- package/dist/runtime/cli-errors.d.ts +38 -0
- package/dist/runtime/cli-errors.d.ts.map +1 -0
- package/dist/runtime/cli-errors.js +354 -0
- package/dist/runtime/cli-errors.js.map +1 -0
- package/dist/runtime/client.d.ts +74 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +222 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/creds.d.ts +48 -0
- package/dist/runtime/creds.d.ts.map +1 -0
- package/dist/runtime/creds.js +245 -0
- package/dist/runtime/creds.js.map +1 -0
- package/dist/runtime/exit-codes.d.ts +49 -0
- package/dist/runtime/exit-codes.d.ts.map +1 -0
- package/dist/runtime/exit-codes.js +93 -0
- package/dist/runtime/exit-codes.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +25 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/json-output.d.ts +42 -0
- package/dist/runtime/json-output.d.ts.map +1 -0
- package/dist/runtime/json-output.js +59 -0
- package/dist/runtime/json-output.js.map +1 -0
- package/dist/runtime/owner-mode.d.ts +48 -0
- package/dist/runtime/owner-mode.d.ts.map +1 -0
- package/dist/runtime/owner-mode.js +284 -0
- package/dist/runtime/owner-mode.js.map +1 -0
- package/dist/runtime/semver.d.ts +37 -0
- package/dist/runtime/semver.d.ts.map +1 -0
- package/dist/runtime/semver.js +110 -0
- package/dist/runtime/semver.js.map +1 -0
- package/dist/scan/dead-ui-detector.d.ts +48 -0
- package/dist/scan/dead-ui-detector.d.ts.map +1 -0
- package/dist/scan/dead-ui-detector.js +170 -0
- package/dist/scan/dead-ui-detector.js.map +1 -0
- package/dist/scan/playwright-sweep.d.ts +40 -0
- package/dist/scan/playwright-sweep.d.ts.map +1 -0
- package/dist/scan/playwright-sweep.js +216 -0
- package/dist/scan/playwright-sweep.js.map +1 -0
- package/dist/scan/proof-bundle.d.ts +25 -0
- package/dist/scan/proof-bundle.d.ts.map +1 -0
- package/dist/scan/proof-bundle.js +203 -0
- package/dist/scan/proof-bundle.js.map +1 -0
- package/dist/scan/proof-graph.d.ts +59 -0
- package/dist/scan/proof-graph.d.ts.map +1 -0
- package/dist/scan/proof-graph.js +64 -0
- package/dist/scan/proof-graph.js.map +1 -0
- package/dist/scan/reality-sniff.d.ts +56 -0
- package/dist/scan/reality-sniff.d.ts.map +1 -0
- package/dist/scan/reality-sniff.js +200 -0
- package/dist/scan/reality-sniff.js.map +1 -0
- package/dist/scan/structural-verifier.d.ts +20 -0
- package/dist/scan/structural-verifier.d.ts.map +1 -0
- package/dist/scan/structural-verifier.js +112 -0
- package/dist/scan/structural-verifier.js.map +1 -0
- package/dist/scan/verification-engine.d.ts +47 -0
- package/dist/scan/verification-engine.d.ts.map +1 -0
- package/dist/scan/verification-engine.js +141 -0
- package/dist/scan/verification-engine.js.map +1 -0
- package/dist/scanner/baseline.d.ts +52 -0
- package/dist/scanner/baseline.d.ts.map +1 -0
- package/dist/scanner/baseline.js +85 -0
- package/dist/scanner/baseline.js.map +1 -0
- package/dist/scanner/incremental.d.ts +30 -0
- package/dist/scanner/incremental.d.ts.map +1 -0
- package/dist/scanner/incremental.js +82 -0
- package/dist/scanner/incremental.js.map +1 -0
- package/dist/scanner/index.d.ts +8 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +15 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/parallel.d.ts +43 -0
- package/dist/scanner/parallel.d.ts.map +1 -0
- package/dist/scanner/parallel.js +99 -0
- package/dist/scanner/parallel.js.map +1 -0
- package/dist/scanner/placeholder-detector.d.ts +56 -0
- package/dist/scanner/placeholder-detector.d.ts.map +1 -0
- package/dist/scanner/placeholder-detector.js +220 -0
- package/dist/scanner/placeholder-detector.js.map +1 -0
- package/dist/scanner/route-detector.d.ts +100 -0
- package/dist/scanner/route-detector.d.ts.map +1 -0
- package/dist/scanner/route-detector.js +455 -0
- package/dist/scanner/route-detector.js.map +1 -0
- package/dist/scanner/scoring.d.ts +67 -0
- package/dist/scanner/scoring.d.ts.map +1 -0
- package/dist/scanner/scoring.js +284 -0
- package/dist/scanner/scoring.js.map +1 -0
- package/dist/ship-baseline.d.ts +56 -0
- package/dist/ship-baseline.d.ts.map +1 -0
- package/dist/ship-baseline.js +194 -0
- package/dist/ship-baseline.js.map +1 -0
- package/dist/ship-config.d.ts +91 -0
- package/dist/ship-config.d.ts.map +1 -0
- package/dist/ship-config.js +133 -0
- package/dist/ship-config.js.map +1 -0
- package/dist/ship-data-loader.d.ts +70 -0
- package/dist/ship-data-loader.d.ts.map +1 -0
- package/dist/ship-data-loader.js +301 -0
- package/dist/ship-data-loader.js.map +1 -0
- package/dist/standalone.d.ts +1 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +1 -0
- package/dist/standalone.js.map +1 -0
- package/dist/truth-pack/index.d.ts +102 -0
- package/dist/truth-pack/index.d.ts.map +1 -0
- package/dist/truth-pack/index.js +694 -0
- package/dist/truth-pack/index.js.map +1 -0
- package/dist/ui/frame.d.ts +68 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +165 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui.d.ts +36 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +45 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/ai-helpers.d.ts +72 -0
- package/dist/utils/ai-helpers.d.ts.map +1 -0
- package/dist/utils/ai-helpers.js +339 -0
- package/dist/utils/ai-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +34 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +160 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ship Configuration Management
|
|
4
|
+
* Enterprise-grade configuration system for ship checks
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ShipConfigManager = void 0;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
thresholds: {
|
|
13
|
+
passScore: 90,
|
|
14
|
+
warnScore: 70,
|
|
15
|
+
failScore: 50,
|
|
16
|
+
},
|
|
17
|
+
checks: [],
|
|
18
|
+
baseline: {
|
|
19
|
+
enabled: false,
|
|
20
|
+
path: '.guardrail/ship-baseline.json',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
class ShipConfigManager {
|
|
24
|
+
/**
|
|
25
|
+
* Load ship configuration from file
|
|
26
|
+
*/
|
|
27
|
+
static loadConfig(projectPath) {
|
|
28
|
+
const configPath = (0, path_1.join)(projectPath, '.guardrail', 'ship.config.json');
|
|
29
|
+
if (!(0, fs_1.existsSync)(configPath)) {
|
|
30
|
+
return { ...DEFAULT_CONFIG };
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const content = (0, fs_1.readFileSync)(configPath, 'utf-8');
|
|
34
|
+
const config = JSON.parse(content);
|
|
35
|
+
// Merge with defaults to ensure all fields are present
|
|
36
|
+
return {
|
|
37
|
+
...DEFAULT_CONFIG,
|
|
38
|
+
...config,
|
|
39
|
+
thresholds: {
|
|
40
|
+
...DEFAULT_CONFIG.thresholds,
|
|
41
|
+
...config.thresholds,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.warn(`Failed to load ship config: ${error}`);
|
|
47
|
+
return { ...DEFAULT_CONFIG };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Save ship configuration to file
|
|
52
|
+
*/
|
|
53
|
+
static saveConfig(projectPath, config) {
|
|
54
|
+
const configDir = (0, path_1.join)(projectPath, '.guardrail');
|
|
55
|
+
const configPath = (0, path_1.join)(configDir, 'ship.config.json');
|
|
56
|
+
(0, fs_1.mkdirSync)(configDir, { recursive: true });
|
|
57
|
+
(0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Initialize default configuration
|
|
61
|
+
*/
|
|
62
|
+
static initConfig(projectPath) {
|
|
63
|
+
const config = { ...DEFAULT_CONFIG };
|
|
64
|
+
this.saveConfig(projectPath, config);
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validate configuration
|
|
69
|
+
*/
|
|
70
|
+
static validateConfig(config) {
|
|
71
|
+
const errors = [];
|
|
72
|
+
if (config.thresholds.passScore < 0 || config.thresholds.passScore > 100) {
|
|
73
|
+
errors.push('passScore must be between 0 and 100');
|
|
74
|
+
}
|
|
75
|
+
if (config.thresholds.warnScore < 0 || config.thresholds.warnScore > 100) {
|
|
76
|
+
errors.push('warnScore must be between 0 and 100');
|
|
77
|
+
}
|
|
78
|
+
if (config.thresholds.failScore < 0 || config.thresholds.failScore > 100) {
|
|
79
|
+
errors.push('failScore must be between 0 and 100');
|
|
80
|
+
}
|
|
81
|
+
if (config.thresholds.passScore < config.thresholds.warnScore) {
|
|
82
|
+
errors.push('passScore must be >= warnScore');
|
|
83
|
+
}
|
|
84
|
+
if (config.thresholds.warnScore < config.thresholds.failScore) {
|
|
85
|
+
errors.push('warnScore must be >= failScore');
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
valid: errors.length === 0,
|
|
89
|
+
errors,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Export configuration (for sharing between projects)
|
|
94
|
+
*/
|
|
95
|
+
static exportConfig(config) {
|
|
96
|
+
// Remove sensitive data
|
|
97
|
+
const exportConfig = {
|
|
98
|
+
...config,
|
|
99
|
+
notifications: config.notifications
|
|
100
|
+
? {
|
|
101
|
+
enabled: config.notifications.enabled,
|
|
102
|
+
}
|
|
103
|
+
: undefined,
|
|
104
|
+
integrations: config.integrations
|
|
105
|
+
? {
|
|
106
|
+
...config.integrations,
|
|
107
|
+
dashboards: config.integrations.dashboards
|
|
108
|
+
? {
|
|
109
|
+
enabled: config.integrations.dashboards.enabled,
|
|
110
|
+
}
|
|
111
|
+
: undefined,
|
|
112
|
+
}
|
|
113
|
+
: undefined,
|
|
114
|
+
};
|
|
115
|
+
return JSON.stringify(exportConfig, null, 2);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Import configuration
|
|
119
|
+
*/
|
|
120
|
+
static importConfig(configJson) {
|
|
121
|
+
const imported = JSON.parse(configJson);
|
|
122
|
+
return {
|
|
123
|
+
...DEFAULT_CONFIG,
|
|
124
|
+
...imported,
|
|
125
|
+
thresholds: {
|
|
126
|
+
...DEFAULT_CONFIG.thresholds,
|
|
127
|
+
...imported.thresholds,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.ShipConfigManager = ShipConfigManager;
|
|
133
|
+
//# sourceMappingURL=ship-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-config.js","sourceRoot":"","sources":["../src/ship-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ship Data Loader
|
|
3
|
+
*
|
|
4
|
+
* Robust data loading for ship command with fallback to local files
|
|
5
|
+
* Handles offline mode, API failures, and missing fields gracefully
|
|
6
|
+
*/
|
|
7
|
+
export interface ScanData {
|
|
8
|
+
scans?: Array<{
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
status: string;
|
|
12
|
+
score?: number;
|
|
13
|
+
duration?: number;
|
|
14
|
+
criticalIssues?: number;
|
|
15
|
+
warnings?: number;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}>;
|
|
18
|
+
checks?: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
status: string;
|
|
22
|
+
message?: string;
|
|
23
|
+
details?: string[];
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}>;
|
|
26
|
+
verdict?: 'ship' | 'no-ship' | 'review';
|
|
27
|
+
score?: number;
|
|
28
|
+
summary?: {
|
|
29
|
+
totalScans?: number;
|
|
30
|
+
passedScans?: number;
|
|
31
|
+
failedScans?: number;
|
|
32
|
+
criticalIssues?: number;
|
|
33
|
+
warnings?: number;
|
|
34
|
+
totalDuration?: number;
|
|
35
|
+
};
|
|
36
|
+
[key: string]: any;
|
|
37
|
+
}
|
|
38
|
+
export interface LoadScanDataOptions {
|
|
39
|
+
projectPath: string;
|
|
40
|
+
debug?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface LoadScanDataResult {
|
|
43
|
+
data: ScanData | null;
|
|
44
|
+
source: 'api' | 'local' | 'none';
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load scan data from API (if available) or fallback to local files
|
|
49
|
+
* Always returns normalized data shape
|
|
50
|
+
*/
|
|
51
|
+
export declare function loadScanData(options: LoadScanDataOptions): Promise<LoadScanDataResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Custom error class for ship data validation failures
|
|
54
|
+
*/
|
|
55
|
+
export declare class ShipDataError extends Error {
|
|
56
|
+
readonly missingFields?: string[];
|
|
57
|
+
constructor(message: string, missingFields?: string[]);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Normalize and validate ship response data
|
|
61
|
+
* Throws ShipDataError if critical fields are missing
|
|
62
|
+
* Returns a stable object shape with all required fields
|
|
63
|
+
*/
|
|
64
|
+
export declare function normalizeShipResponse(raw: any): ScanData;
|
|
65
|
+
/**
|
|
66
|
+
* Merge scan data with defaults to ensure all required fields exist
|
|
67
|
+
* This is a non-throwing version for backwards compatibility
|
|
68
|
+
*/
|
|
69
|
+
export declare function normalizeScanData(data: ScanData | null): ScanData;
|
|
70
|
+
//# sourceMappingURL=ship-data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-data-loader.d.ts","sourceRoot":"","sources":["../src/ship-data-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAwE7B;AA4HD;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aACO,aAAa,CAAC,EAAE,MAAM,EAAE;gBAAzD,OAAO,EAAE,MAAM,EAAkB,aAAa,CAAC,EAAE,MAAM,EAAE;CAKtE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CA0ExD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAuBjE"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ship Data Loader
|
|
4
|
+
*
|
|
5
|
+
* Robust data loading for ship command with fallback to local files
|
|
6
|
+
* Handles offline mode, API failures, and missing fields gracefully
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ShipDataError = void 0;
|
|
10
|
+
exports.loadScanData = loadScanData;
|
|
11
|
+
exports.normalizeShipResponse = normalizeShipResponse;
|
|
12
|
+
exports.normalizeScanData = normalizeScanData;
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const creds_1 = require("./runtime/creds");
|
|
16
|
+
/**
|
|
17
|
+
* Load scan data from API (if available) or fallback to local files
|
|
18
|
+
* Always returns normalized data shape
|
|
19
|
+
*/
|
|
20
|
+
async function loadScanData(options) {
|
|
21
|
+
const { projectPath, debug = false } = options;
|
|
22
|
+
// Try API first if we have credentials
|
|
23
|
+
try {
|
|
24
|
+
const authState = (0, creds_1.loadAuthState)();
|
|
25
|
+
if (authState?.apiKey) {
|
|
26
|
+
if (debug) {
|
|
27
|
+
console.log('[DEBUG] Attempting to load scan data from API...');
|
|
28
|
+
}
|
|
29
|
+
const apiData = await loadScanDataFromAPI(authState.apiKey, projectPath, debug);
|
|
30
|
+
if (apiData) {
|
|
31
|
+
// Normalize API response before returning
|
|
32
|
+
try {
|
|
33
|
+
const normalized = normalizeShipResponse(apiData);
|
|
34
|
+
if (debug) {
|
|
35
|
+
console.log('[DEBUG] Successfully loaded and normalized scan data from API');
|
|
36
|
+
}
|
|
37
|
+
return { data: normalized, source: 'api' };
|
|
38
|
+
}
|
|
39
|
+
catch (normalizeError) {
|
|
40
|
+
if (normalizeError instanceof ShipDataError) {
|
|
41
|
+
if (debug) {
|
|
42
|
+
console.log(`[DEBUG] API response validation failed: ${normalizeError.message}`);
|
|
43
|
+
}
|
|
44
|
+
// Continue to local fallback on validation failure
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw normalizeError;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (debug) {
|
|
55
|
+
console.log(`[DEBUG] API load failed: ${error.message}, falling back to local files`);
|
|
56
|
+
}
|
|
57
|
+
// Continue to local fallback
|
|
58
|
+
}
|
|
59
|
+
// Fallback to local files
|
|
60
|
+
try {
|
|
61
|
+
const localData = loadScanDataFromLocal(projectPath, debug);
|
|
62
|
+
if (localData) {
|
|
63
|
+
// Normalize local data before returning
|
|
64
|
+
try {
|
|
65
|
+
const normalized = normalizeShipResponse(localData);
|
|
66
|
+
if (debug) {
|
|
67
|
+
console.log('[DEBUG] Successfully loaded and normalized scan data from local files');
|
|
68
|
+
}
|
|
69
|
+
return { data: normalized, source: 'local' };
|
|
70
|
+
}
|
|
71
|
+
catch (normalizeError) {
|
|
72
|
+
if (normalizeError instanceof ShipDataError) {
|
|
73
|
+
if (debug) {
|
|
74
|
+
console.log(`[DEBUG] Local data validation failed: ${normalizeError.message}`);
|
|
75
|
+
}
|
|
76
|
+
// Return null if local data is invalid
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw normalizeError;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (debug) {
|
|
86
|
+
console.log(`[DEBUG] Local file load failed: ${error.message}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// No data available
|
|
90
|
+
if (debug) {
|
|
91
|
+
console.log('[DEBUG] No scan data available from API or local files');
|
|
92
|
+
}
|
|
93
|
+
return { data: null, source: 'none', error: 'No scan data available' };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Load scan data from API
|
|
97
|
+
*/
|
|
98
|
+
async function loadScanDataFromAPI(apiKey, projectPath, debug) {
|
|
99
|
+
try {
|
|
100
|
+
const baseUrl = process.env.GUARDRAIL_API_BASE_URL || 'https://api.guardrail.dev';
|
|
101
|
+
const projectName = (0, path_1.basename)(projectPath);
|
|
102
|
+
// Try to get scan results from API
|
|
103
|
+
// Note: This is a placeholder - adjust the endpoint as needed
|
|
104
|
+
const response = await fetch(`${baseUrl}/api/ship/results`, {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
headers: {
|
|
107
|
+
'Content-Type': 'application/json',
|
|
108
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
109
|
+
},
|
|
110
|
+
body: JSON.stringify({
|
|
111
|
+
projectPath,
|
|
112
|
+
projectName,
|
|
113
|
+
}),
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
if (debug) {
|
|
117
|
+
console.log(`[DEBUG] API returned status ${response.status}`);
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const responseData = await response.json();
|
|
122
|
+
// Validate response structure
|
|
123
|
+
if (!responseData || typeof responseData !== 'object') {
|
|
124
|
+
if (debug) {
|
|
125
|
+
console.log('[DEBUG] API response is invalid or empty');
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
// Return raw data - normalization will happen in loadScanData
|
|
130
|
+
// This allows loadScanData to handle validation errors appropriately
|
|
131
|
+
return responseData;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (debug) {
|
|
135
|
+
console.log(`[DEBUG] API request failed: ${error.message}`);
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Load scan data from local .guardrail directory
|
|
142
|
+
*/
|
|
143
|
+
function loadScanDataFromLocal(projectPath, debug) {
|
|
144
|
+
const guardrailDir = (0, path_1.join)(projectPath, '.guardrail');
|
|
145
|
+
if (!(0, fs_1.existsSync)(guardrailDir)) {
|
|
146
|
+
if (debug) {
|
|
147
|
+
console.log('[DEBUG] .guardrail directory does not exist');
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
// Try to find latest scan result file
|
|
152
|
+
const scanFiles = [
|
|
153
|
+
(0, path_1.join)(guardrailDir, 'ship-result.json'),
|
|
154
|
+
(0, path_1.join)(guardrailDir, 'ship-report.json'),
|
|
155
|
+
(0, path_1.join)(guardrailDir, 'scan-result.json'),
|
|
156
|
+
];
|
|
157
|
+
// Also check ship subdirectory
|
|
158
|
+
const shipDir = (0, path_1.join)(guardrailDir, 'ship');
|
|
159
|
+
if ((0, fs_1.existsSync)(shipDir)) {
|
|
160
|
+
try {
|
|
161
|
+
const shipFiles = (0, fs_1.readdirSync)(shipDir)
|
|
162
|
+
.filter(f => f.endsWith('.json'))
|
|
163
|
+
.sort()
|
|
164
|
+
.reverse()
|
|
165
|
+
.slice(0, 1)
|
|
166
|
+
.map(f => (0, path_1.join)(shipDir, f));
|
|
167
|
+
scanFiles.push(...shipFiles);
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
// Ignore readdir errors
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Try to load from each potential file
|
|
174
|
+
for (const filePath of scanFiles) {
|
|
175
|
+
if ((0, fs_1.existsSync)(filePath)) {
|
|
176
|
+
try {
|
|
177
|
+
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
178
|
+
const data = JSON.parse(content);
|
|
179
|
+
// Extract ship data (might be nested under 'ship' key)
|
|
180
|
+
const shipData = data.ship || data;
|
|
181
|
+
if (debug) {
|
|
182
|
+
console.log(`[DEBUG] Loaded scan data from ${filePath}`);
|
|
183
|
+
}
|
|
184
|
+
// Return raw data - normalization will happen in loadScanData
|
|
185
|
+
// This ensures consistent normalization for both API and local sources
|
|
186
|
+
return shipData;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (debug) {
|
|
190
|
+
console.log(`[DEBUG] Failed to parse ${filePath}: ${error.message}`);
|
|
191
|
+
}
|
|
192
|
+
// Continue to next file
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Custom error class for ship data validation failures
|
|
200
|
+
*/
|
|
201
|
+
class ShipDataError extends Error {
|
|
202
|
+
constructor(message, missingFields) {
|
|
203
|
+
super(message);
|
|
204
|
+
this.missingFields = missingFields;
|
|
205
|
+
this.name = 'ShipDataError';
|
|
206
|
+
Error.captureStackTrace?.(this, ShipDataError);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.ShipDataError = ShipDataError;
|
|
210
|
+
/**
|
|
211
|
+
* Normalize and validate ship response data
|
|
212
|
+
* Throws ShipDataError if critical fields are missing
|
|
213
|
+
* Returns a stable object shape with all required fields
|
|
214
|
+
*/
|
|
215
|
+
function normalizeShipResponse(raw) {
|
|
216
|
+
// Handle null/undefined
|
|
217
|
+
if (raw == null) {
|
|
218
|
+
throw new ShipDataError('Ship data is null or undefined. Cannot proceed with ship check.', ['scans', 'checks', 'verdict', 'score']);
|
|
219
|
+
}
|
|
220
|
+
// Ensure it's an object
|
|
221
|
+
if (typeof raw !== 'object') {
|
|
222
|
+
throw new ShipDataError(`Invalid ship data type: expected object, got ${typeof raw}`, ['scans', 'checks', 'verdict', 'score']);
|
|
223
|
+
}
|
|
224
|
+
// Validate and normalize scans - CRITICAL FIELD
|
|
225
|
+
// scans is optional but if present must be an array
|
|
226
|
+
const scans = raw.scans != null
|
|
227
|
+
? (Array.isArray(raw.scans) ? raw.scans : [])
|
|
228
|
+
: [];
|
|
229
|
+
// Validate and normalize checks - CRITICAL FIELD
|
|
230
|
+
// checks is optional but if present must be an array
|
|
231
|
+
const checks = raw.checks != null
|
|
232
|
+
? (Array.isArray(raw.checks) ? raw.checks : [])
|
|
233
|
+
: [];
|
|
234
|
+
// Validate and normalize verdict
|
|
235
|
+
const validVerdicts = ['ship', 'no-ship', 'review'];
|
|
236
|
+
const verdict = raw.verdict && validVerdicts.includes(raw.verdict)
|
|
237
|
+
? raw.verdict
|
|
238
|
+
: 'review';
|
|
239
|
+
// Validate and normalize score
|
|
240
|
+
const score = typeof raw.score === 'number' && !isNaN(raw.score)
|
|
241
|
+
? Math.max(0, Math.min(100, raw.score)) // Clamp to 0-100
|
|
242
|
+
: 0;
|
|
243
|
+
// Validate and normalize summary
|
|
244
|
+
const summary = raw.summary && typeof raw.summary === 'object'
|
|
245
|
+
? {
|
|
246
|
+
totalScans: typeof raw.summary.totalScans === 'number' ? raw.summary.totalScans : scans.length,
|
|
247
|
+
passedScans: typeof raw.summary.passedScans === 'number' ? raw.summary.passedScans : 0,
|
|
248
|
+
failedScans: typeof raw.summary.failedScans === 'number' ? raw.summary.failedScans : 0,
|
|
249
|
+
criticalIssues: typeof raw.summary.criticalIssues === 'number' ? raw.summary.criticalIssues : 0,
|
|
250
|
+
warnings: typeof raw.summary.warnings === 'number' ? raw.summary.warnings : 0,
|
|
251
|
+
totalDuration: typeof raw.summary.totalDuration === 'number' ? raw.summary.totalDuration : 0,
|
|
252
|
+
...raw.summary,
|
|
253
|
+
}
|
|
254
|
+
: {
|
|
255
|
+
totalScans: scans.length,
|
|
256
|
+
passedScans: 0,
|
|
257
|
+
failedScans: 0,
|
|
258
|
+
criticalIssues: 0,
|
|
259
|
+
warnings: 0,
|
|
260
|
+
totalDuration: 0,
|
|
261
|
+
};
|
|
262
|
+
// Return normalized response with stable shape
|
|
263
|
+
return {
|
|
264
|
+
scans,
|
|
265
|
+
checks,
|
|
266
|
+
verdict,
|
|
267
|
+
score,
|
|
268
|
+
summary,
|
|
269
|
+
// Preserve other fields if present
|
|
270
|
+
...Object.fromEntries(Object.entries(raw).filter(([key]) => !['scans', 'checks', 'verdict', 'score', 'summary'].includes(key))),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Merge scan data with defaults to ensure all required fields exist
|
|
275
|
+
* This is a non-throwing version for backwards compatibility
|
|
276
|
+
*/
|
|
277
|
+
function normalizeScanData(data) {
|
|
278
|
+
if (!data) {
|
|
279
|
+
return {
|
|
280
|
+
scans: [],
|
|
281
|
+
checks: [],
|
|
282
|
+
verdict: 'review',
|
|
283
|
+
score: 0,
|
|
284
|
+
summary: {},
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
return normalizeShipResponse(data);
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
// If normalization fails, return safe defaults
|
|
292
|
+
return {
|
|
293
|
+
scans: Array.isArray(data.scans) ? data.scans : [],
|
|
294
|
+
checks: Array.isArray(data.checks) ? data.checks : [],
|
|
295
|
+
verdict: data.verdict || 'review',
|
|
296
|
+
score: typeof data.score === 'number' ? data.score : 0,
|
|
297
|
+
summary: data.summary || {},
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=ship-data-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-data-loader.js","sourceRoot":"","sources":["../src/ship-data-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truth Pack Generator
|
|
3
|
+
*
|
|
4
|
+
* Creates the relationship infrastructure that makes AI dependent on repo-truth.
|
|
5
|
+
* This is the moat - installed once, used 500x/day.
|
|
6
|
+
*/
|
|
7
|
+
export interface TruthPack {
|
|
8
|
+
version: string;
|
|
9
|
+
generatedAt: string;
|
|
10
|
+
projectPath: string;
|
|
11
|
+
stack: {
|
|
12
|
+
framework: string;
|
|
13
|
+
language: string;
|
|
14
|
+
packageManager: string;
|
|
15
|
+
runtime?: string;
|
|
16
|
+
};
|
|
17
|
+
metadata: {
|
|
18
|
+
fileCount: number;
|
|
19
|
+
lineCount: number;
|
|
20
|
+
totalSize: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface Symbol {
|
|
24
|
+
name: string;
|
|
25
|
+
type: 'function' | 'class' | 'interface' | 'type' | 'variable' | 'constant' | 'enum';
|
|
26
|
+
file: string;
|
|
27
|
+
line: number;
|
|
28
|
+
column?: number;
|
|
29
|
+
exported: boolean;
|
|
30
|
+
signature?: string;
|
|
31
|
+
doc?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface Dependency {
|
|
34
|
+
name: string;
|
|
35
|
+
version: string;
|
|
36
|
+
type: 'production' | 'dev' | 'peer' | 'optional';
|
|
37
|
+
registry: string;
|
|
38
|
+
license?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface Route {
|
|
41
|
+
path: string;
|
|
42
|
+
method: string;
|
|
43
|
+
file: string;
|
|
44
|
+
line: number;
|
|
45
|
+
handler: string;
|
|
46
|
+
auth?: boolean;
|
|
47
|
+
middleware?: string[];
|
|
48
|
+
params?: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface RiskTag {
|
|
51
|
+
file: string;
|
|
52
|
+
line: number;
|
|
53
|
+
category: 'auth' | 'payment' | 'database' | 'security' | 'sensitive';
|
|
54
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
55
|
+
description: string;
|
|
56
|
+
}
|
|
57
|
+
export interface Pattern {
|
|
58
|
+
name: string;
|
|
59
|
+
type: 'golden' | 'antipattern';
|
|
60
|
+
file: string;
|
|
61
|
+
line: number;
|
|
62
|
+
description: string;
|
|
63
|
+
example?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare class TruthPackGenerator {
|
|
66
|
+
private projectPath;
|
|
67
|
+
private truthPackPath;
|
|
68
|
+
constructor(projectPath: string);
|
|
69
|
+
/**
|
|
70
|
+
* Generate complete Truth Pack
|
|
71
|
+
*/
|
|
72
|
+
generate(): Promise<TruthPack>;
|
|
73
|
+
/**
|
|
74
|
+
* Check if Truth Pack exists and is fresh
|
|
75
|
+
*/
|
|
76
|
+
isFresh(maxAgeHours?: number): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get Truth Pack path
|
|
79
|
+
*/
|
|
80
|
+
getPath(): string;
|
|
81
|
+
private detectStack;
|
|
82
|
+
private generateSymbols;
|
|
83
|
+
private extractSignature;
|
|
84
|
+
private extractDoc;
|
|
85
|
+
private findCodeFiles;
|
|
86
|
+
private generateDependencies;
|
|
87
|
+
private generateImportGraph;
|
|
88
|
+
private generateRoutes;
|
|
89
|
+
private extractHandlerName;
|
|
90
|
+
private hasAuth;
|
|
91
|
+
private extractMiddleware;
|
|
92
|
+
private extractParams;
|
|
93
|
+
private extractNextJSRoutePath;
|
|
94
|
+
private generateRiskTags;
|
|
95
|
+
private generateImportance;
|
|
96
|
+
private resolveImportPath;
|
|
97
|
+
private generatePatterns;
|
|
98
|
+
private generateAntipatterns;
|
|
99
|
+
private generateVulnerabilities;
|
|
100
|
+
private generateMetadata;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/truth-pack/index.ts"],"names":[],"mappings":"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"}
|