@vibgrate/cli 1.0.45 → 1.0.47

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/DOCS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Vibgrate CLI — Full Documentation
2
2
 
3
- > Continuous Drift Intelligence for Node & .NET
3
+ > Continuous Drift Intelligence for Node, .NET, Python, and Java (all supported in the CLI today)
4
4
 
5
5
  For a quick overview, see the [README](./README.md). This document covers everything in detail.
6
6
 
@@ -9,15 +9,18 @@ For a quick overview, see the [README](./README.md). This document covers everyt
9
9
  ## Table of Contents
10
10
 
11
11
  - [How It Works](#how-it-works)
12
+ - [Choosing a rollout model: one-off vs CI](#choosing-a-rollout-model-one-off-vs-ci)
12
13
  - [Commands Reference](#commands-reference)
13
14
  - [vibgrate init](#vibgrate-init)
14
15
  - [vibgrate scan](#vibgrate-scan)
15
16
  - [vibgrate baseline](#vibgrate-baseline)
16
17
  - [vibgrate report](#vibgrate-report)
18
+ - [vibgrate sbom](#vibgrate-sbom)
17
19
  - [vibgrate push](#vibgrate-push)
18
20
  - [vibgrate dsn create](#vibgrate-dsn-create)
19
21
  - [vibgrate update](#vibgrate-update)
20
22
  - [Upgrade Drift Score](#upgrade-drift-score)
23
+ - [Drift Baselines & Fitness Functions](#drift-baselines--fitness-functions)
21
24
  - [How the Score Is Calculated](#how-the-score-is-calculated)
22
25
  - [Risk Levels](#risk-levels)
23
26
  - [Score Components](#score-components)
@@ -34,6 +37,7 @@ For a quick overview, see the [README](./README.md). This document covers everyt
34
37
  - [Platform Matrix](#platform-matrix)
35
38
  - [Dependency Risk](#dependency-risk)
36
39
  - [Dependency Graph & Duplication](#dependency-graph--duplication)
40
+ - [SBOM-ready Supply Chain Inventory](#sbom-ready-supply-chain-inventory)
37
41
  - [Tooling Inventory](#tooling-inventory)
38
42
  - [Build & Deploy Surface Area](#build--deploy-surface-area)
39
43
  - [TypeScript Modernity](#typescript-modernity)
@@ -42,6 +46,9 @@ For a quick overview, see the [README](./README.md). This document covers everyt
42
46
  - [Security Posture](#security-posture)
43
47
  - [Security Scanners](#security-scanners)
44
48
  - [Service Dependencies](#service-dependencies)
49
+ - [Architecture Layers](#architecture-layers)
50
+ - [Code Quality Metrics](#code-quality-metrics)
51
+ - [OWASP Category Mapping](#owasp-category-mapping)
45
52
  - [CI Integration](#ci-integration)
46
53
  - [GitHub Actions](#github-actions)
47
54
  - [Azure DevOps](#azure-devops)
@@ -58,7 +65,7 @@ For a quick overview, see the [README](./README.md). This document covers everyt
58
65
 
59
66
  ## How It Works
60
67
 
61
- Vibgrate recursively scans your repository for `package.json` (Node/TypeScript) and `.sln`/`.csproj` (.NET) files. For each project it discovers, it:
68
+ Vibgrate recursively scans your repository for `package.json` (Node/TypeScript), `.sln`/`.csproj` (.NET), Python manifests, and Java build manifests. For each project it discovers, it:
62
69
 
63
70
  1. **Detects** the runtime version, target framework, and all dependencies
64
71
  2. **Queries** the npm/NuGet registry for latest stable versions (with built-in caching and concurrency control)
@@ -70,6 +77,64 @@ Core drift analysis does not execute source code. Optional security scanners can
70
77
 
71
78
  ---
72
79
 
80
+ ## Choosing a rollout model: one-off vs CI
81
+
82
+ Most teams adopt Vibgrate in two steps:
83
+
84
+ 1. **One-off scan** to establish a baseline and identify immediate upgrade priorities.
85
+ 2. **CI integration** to continuously detect drift regression on every pull request/build.
86
+
87
+ | Mode | Benefits | Typical command |
88
+ | ------------------ | --------------------------------------------------------------------------- | --------------------------------------------------------- |
89
+ | One-off scan | Fast snapshot of current upgrade debt, useful for audits and planning | `npx @vibgrate/cli scan .` |
90
+ | CI-integrated scan | Continuous governance with automated failure thresholds and SARIF surfacing | `npx @vibgrate/cli scan . --format sarif --fail-on error` |
91
+
92
+ In practice, one-off scans tell you where you are today; CI keeps you from drifting back tomorrow.
93
+
94
+ ---
95
+
96
+ ## Feature coverage and practical usage guide
97
+
98
+ This section summarizes what the CLI supports today and how to use each capability effectively.
99
+
100
+ ### Supported project ecosystems
101
+
102
+ Vibgrate currently discovers and evaluates projects in:
103
+
104
+ - **Node.js / TypeScript** (`package.json`, lockfiles)
105
+ - **.NET** (`.sln`, `.csproj`)
106
+ - **Python** (`requirements.txt`, `pyproject.toml`-style manifests)
107
+ - **Java** (`pom.xml`, Gradle-style manifests)
108
+
109
+ ### End-to-end workflow (recommended)
110
+
111
+ 1. Run an initial scan.
112
+ 2. Save a baseline on your main branch.
113
+ 3. Enforce drift gates in CI.
114
+ 4. Export/report artifacts for stakeholders.
115
+
116
+ Example:
117
+
118
+ ```bash
119
+ # Step 1: first scan
120
+ vibgrate scan .
121
+
122
+ # Step 2: baseline
123
+ vibgrate baseline .
124
+
125
+ # Step 3: policy in CI
126
+ vibgrate scan . --baseline .vibgrate/baseline.json --drift-budget 40 --drift-worsening 5 --fail-on error
127
+
128
+ # Step 4: produce report
129
+ vibgrate report --in .vibgrate/scan_result.json --format md
130
+ ```
131
+
132
+ Expected results:
133
+
134
+ - Teams get a stable score trend instead of one-time snapshots.
135
+ - CI fails early when drift budgets are exceeded (exit code `2`).
136
+ - Markdown/JSON/SARIF outputs are ready for engineering and governance workflows.
137
+
73
138
  ## Commands Reference
74
139
 
75
140
  ### vibgrate init
@@ -80,12 +145,13 @@ Initialise Vibgrate in a project.
80
145
  vibgrate init [path] [--baseline] [--yes]
81
146
  ```
82
147
 
83
- | Flag | Description |
84
- |------|-------------|
148
+ | Flag | Description |
149
+ | ------------ | ------------------------------------------- |
85
150
  | `--baseline` | Create an initial drift baseline after init |
86
- | `--yes` | Skip confirmation prompts |
151
+ | `--yes` | Skip confirmation prompts |
87
152
 
88
153
  Creates:
154
+
89
155
  - `.vibgrate/` directory
90
156
  - `vibgrate.config.ts` with sensible defaults
91
157
 
@@ -96,7 +162,7 @@ Creates:
96
162
  The primary command. Scans your project for upgrade drift.
97
163
 
98
164
  ```bash
99
- vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|error] [--baseline <file>] [--changed-only] [--concurrency <n>]
165
+ vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|error] [--offline] [--package-manifest <file>] [--no-local-artifacts] [--max-privacy] [--baseline <file>] [--drift-budget <score>] [--drift-worsening <percent>] [--changed-only] [--concurrency <n>]
100
166
  ```
101
167
 
102
168
  | Flag | Default | Description |
@@ -107,8 +173,44 @@ vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|e
107
173
  | `--baseline <file>` | — | Compare against a previous baseline |
108
174
  | `--changed-only` | — | Only scan changed files |
109
175
  | `--concurrency <n>` | `8` | Max concurrent npm registry calls |
176
+ | `--drift-budget <score>` | — | Fitness gate: fail if drift score is above this budget |
177
+ | `--drift-worsening <percent>` | — | Fitness gate: fail if drift worsens by more than % vs baseline |
178
+ | `--push` | — | Upload scan artifact to dashboard after a successful scan |
179
+ | `--dsn <dsn>` | `VIBGRATE_DSN` env | DSN used for `--push` authentication |
180
+ | `--region <region>` | — | Override data residency (`us`, `eu`) during push |
181
+ | `--strict` | — | Fail scan command if push fails |
182
+ | `--install-tools` | — | Auto-install missing local security tools via Homebrew |
183
+ | `--ui-purpose` | — | Enable optional UI-purpose evidence extraction |
184
+ | `--offline` | — | Disable network calls and disable upload/push behavior |
185
+ | `--package-manifest <file>` | — | JSON or ZIP package-version manifest used for offline/latest lookups (latest bundle: `https://github.com/vibgrate/manifests/latest-packages.zip`) |
186
+ | `--no-local-artifacts` | — | Do not write `.vibgrate/*.json` scan artifacts to disk |
187
+ | `--max-privacy` | — | Hardened privacy mode with minimal scanners and no local artifacts |
188
+
189
+ By default, the scan writes `.vibgrate/scan_result.json`. Use `--no-local-artifacts` or `--max-privacy` to suppress local JSON artifact files.
190
+
191
+ For offline drift scoring, pass `--package-manifest <file>` with a downloaded manifest bundle such as `https://github.com/vibgrate/manifests/latest-packages.zip`.
192
+
193
+ Examples:
194
+
195
+ ```bash
196
+ # Standard text scan
197
+ vibgrate scan .
110
198
 
111
- The scan always writes the full artifact to `.vibgrate/scan_result.json`.
199
+ # JSON output for automation
200
+ vibgrate scan . --format json --out scan.json
201
+
202
+ # CI gate with baseline regression protection
203
+ vibgrate scan . --baseline .vibgrate/baseline.json --drift-budget 40 --drift-worsening 5 --fail-on error
204
+
205
+ # Upload result in the same command
206
+ vibgrate scan . --push --strict
207
+ ```
208
+
209
+ Expected results:
210
+
211
+ - Clear score/risk output in terminal (or JSON/SARIF when selected).
212
+ - Exit code `2` when configured quality gates are exceeded.
213
+ - When `--push` is enabled, artifact upload is attempted after scan completion.
112
214
 
113
215
  ---
114
216
 
@@ -132,10 +234,28 @@ Generate a human-readable report from a scan artifact.
132
234
  vibgrate report [--in <file>] [--format md|text|json]
133
235
  ```
134
236
 
135
- | Flag | Default | Description |
136
- |------|---------|-------------|
137
- | `--in` | `.vibgrate/scan_result.json` | Input artifact file |
138
- | `--format` | `text` | Output format: `md`, `text`, or `json` |
237
+ | Flag | Default | Description |
238
+ | ---------- | ---------------------------- | -------------------------------------- |
239
+ | `--in` | `.vibgrate/scan_result.json` | Input artifact file |
240
+ | `--format` | `text` | Output format: `md`, `text`, or `json` |
241
+
242
+ ---
243
+
244
+ ### vibgrate sbom
245
+
246
+ Export SBOMs from an existing scan artifact or compare two artifacts.
247
+
248
+ ```bash
249
+ vibgrate sbom export [--in <file>] [--format cyclonedx|spdx] [--out <file>]
250
+ vibgrate sbom delta --from <file> --to <file> [--out <file>]
251
+ ```
252
+
253
+ | Command | Description |
254
+ |---------|-------------|
255
+ | `vibgrate sbom export` | Emit CycloneDX or SPDX JSON from a scan artifact |
256
+ | `vibgrate sbom delta` | Compare dependencies between two artifacts (added/removed/changed + drift delta) |
257
+
258
+ Use this to treat SBOMs as operational intelligence instead of static compliance output.
139
259
 
140
260
  ---
141
261
 
@@ -147,12 +267,12 @@ Upload scan results to the Vibgrate dashboard API.
147
267
  vibgrate push [--dsn <dsn>] [--file <file>] [--region <region>] [--strict]
148
268
  ```
149
269
 
150
- | Flag | Default | Description |
151
- |------|---------|-------------|
152
- | `--dsn` | `VIBGRATE_DSN` env | DSN token for authentication |
153
- | `--file` | `.vibgrate/scan_result.json` | Scan artifact to upload |
154
- | `--region` | — | Override data residency region (`us`, `eu`) |
155
- | `--strict` | — | Fail hard on upload errors |
270
+ | Flag | Default | Description |
271
+ | ---------- | ---------------------------- | ------------------------------------------- |
272
+ | `--dsn` | `VIBGRATE_DSN` env | DSN token for authentication |
273
+ | `--file` | `.vibgrate/scan_result.json` | Scan artifact to upload |
274
+ | `--region` | — | Override data residency region (`us`, `eu`) |
275
+ | `--strict` | — | Fail hard on upload errors |
156
276
 
157
277
  Upload is always optional. Best-effort by default — use `--strict` in CI if you want the pipeline to fail on upload errors.
158
278
 
@@ -166,12 +286,12 @@ Generate an HMAC-signed DSN token for API authentication.
166
286
  vibgrate dsn create --workspace <id> [--region <region>] [--ingest <url>] [--write <path>]
167
287
  ```
168
288
 
169
- | Flag | Default | Description |
170
- |------|---------|-------------|
171
- | `--workspace` | *required* | Your workspace ID |
172
- | `--region` | `us` | Data residency region (`us`, `eu`) |
173
- | `--ingest` | — | Custom ingest API URL (overrides `--region`) |
174
- | `--write` | — | Write DSN to a file (add to `.gitignore`!) |
289
+ | Flag | Default | Description |
290
+ | ------------- | ---------- | -------------------------------------------- |
291
+ | `--workspace` | _required_ | Your workspace ID |
292
+ | `--region` | `us` | Data residency region (`us`, `eu`) |
293
+ | `--ingest` | — | Custom ingest API URL (overrides `--region`) |
294
+ | `--write` | — | Write DSN to a file (add to `.gitignore`!) |
175
295
 
176
296
  ---
177
297
 
@@ -183,13 +303,38 @@ Check for and install updates.
183
303
  vibgrate update [--check] [--pm <manager>]
184
304
  ```
185
305
 
186
- | Flag | Description |
187
- |------|-------------|
188
- | `--check` | Only check for updates, don't install |
189
- | `--pm` | Force a package manager (`npm`, `pnpm`, `yarn`, `bun`) |
306
+ | Flag | Description |
307
+ | --------- | ------------------------------------------------------ |
308
+ | `--check` | Only check for updates, don't install |
309
+ | `--pm` | Force a package manager (`npm`, `pnpm`, `yarn`, `bun`) |
190
310
 
191
311
  ---
192
312
 
313
+ ## Drift Baselines & Fitness Functions
314
+
315
+ Vibgrate stores scan state under `.vibgrate/`:
316
+
317
+ - `.vibgrate/scan_result.json`: latest scan artifact
318
+ - `.vibgrate/baseline.json`: explicit baseline snapshot (`vibgrate baseline`)
319
+ - `<project>/.vibgrate/project_score.json`: per-project score snapshots
320
+
321
+ Recommended workflow:
322
+
323
+ 1. Create baseline once on main branch:
324
+ ```bash
325
+ vibgrate baseline .
326
+ ```
327
+ 2. In CI, run scan with comparison and gates:
328
+ ```bash
329
+ vibgrate scan --baseline .vibgrate/baseline.json --drift-budget 40 --drift-worsening 5
330
+ ```
331
+ 3. When planned upgrades land, refresh baseline:
332
+ ```bash
333
+ vibgrate baseline .
334
+ ```
335
+
336
+ This makes drift a formal quality gate (fitness function), not just reporting.
337
+
193
338
  ## Upgrade Drift Score
194
339
 
195
340
  ### How the Score Is Calculated
@@ -200,22 +345,22 @@ The Upgrade Drift Score is a deterministic, versioned metric (0–100) that repr
200
345
 
201
346
  ### Risk Levels
202
347
 
203
- | Score | Risk Level |
204
- |-------|------------|
205
- | 70–100 | **Low** — You're in good shape |
206
- | 40–69 | **Moderate** — Some attention needed |
207
- | 0–39 | **High** — Significant upgrade debt |
348
+ | Score | Risk Level |
349
+ | ------ | ------------------------------------ |
350
+ | 70–100 | **Low** — You're in good shape |
351
+ | 40–69 | **Moderate** — Some attention needed |
352
+ | 0–39 | **High** — Significant upgrade debt |
208
353
 
209
354
  ### Score Components
210
355
 
211
356
  The overall score is a weighted combination of four components:
212
357
 
213
- | Component | What It Measures |
214
- |-----------|-----------------|
215
- | **Runtime** | Node.js or .NET runtime major version lag |
216
- | **Frameworks** | Major version distance for core frameworks (React, Next, NestJS, ASP.NET, etc.) |
358
+ | Component | What It Measures |
359
+ | ---------------- | --------------------------------------------------------------------------------- |
360
+ | **Runtime** | Node.js or .NET runtime major version lag |
361
+ | **Frameworks** | Major version distance for core frameworks (React, Next, NestJS, ASP.NET, etc.) |
217
362
  | **Dependencies** | Age distribution across all dependencies (current vs 1 major behind vs 2+ behind) |
218
- | **EOL Risk** | Proximity to end-of-life for runtimes and frameworks |
363
+ | **EOL Risk** | Proximity to end-of-life for runtimes and frameworks |
219
364
 
220
365
  ---
221
366
 
@@ -224,6 +369,7 @@ The overall score is a weighted combination of four components:
224
369
  ### Text
225
370
 
226
371
  The default output. A coloured, human-readable report showing:
372
+
227
373
  - Overall drift score and risk level
228
374
  - Score component breakdown with visual bars
229
375
  - Per-project details: runtime lag, framework versions, dependency distribution
@@ -250,10 +396,10 @@ A clean Markdown report suitable for PRs, wikis, or documentation.
250
396
  Run `vibgrate init` to generate the config file, or create one manually:
251
397
 
252
398
  ```typescript
253
- import type { VibgrateConfig } from '@vibgrate/cli';
399
+ import type { VibgrateConfig } from "@vibgrate/cli";
254
400
 
255
401
  const config: VibgrateConfig = {
256
- exclude: ['legacy/**'],
402
+ exclude: ["legacy/**"],
257
403
  thresholds: {
258
404
  failOnError: {
259
405
  eolDays: 180,
@@ -266,17 +412,17 @@ const config: VibgrateConfig = {
266
412
  },
267
413
  },
268
414
  scanners: {
269
- platformMatrix: { enabled: true },
270
- dependencyRisk: { enabled: true },
271
- dependencyGraph: { enabled: true },
272
- toolingInventory: { enabled: true },
273
- buildDeploy: { enabled: true },
274
- tsModernity: { enabled: true },
415
+ platformMatrix: { enabled: true },
416
+ dependencyRisk: { enabled: true },
417
+ dependencyGraph: { enabled: true },
418
+ toolingInventory: { enabled: true },
419
+ buildDeploy: { enabled: true },
420
+ tsModernity: { enabled: true },
275
421
  breakingChangeExposure: { enabled: true },
276
- fileHotspots: { enabled: true },
277
- securityPosture: { enabled: true },
278
- securityScanners: { enabled: true },
279
- serviceDependencies: { enabled: true },
422
+ fileHotspots: { enabled: true },
423
+ securityPosture: { enabled: true },
424
+ securityScanners: { enabled: true },
425
+ serviceDependencies: { enabled: true },
280
426
  },
281
427
  };
282
428
 
@@ -289,13 +435,13 @@ Also supports `vibgrate.config.js` and `vibgrate.config.json`.
289
435
 
290
436
  Control when findings are raised and when the CLI should fail.
291
437
 
292
- | Threshold | Default | Triggers |
293
- |-----------|---------|----------|
294
- | `failOnError.eolDays` | 180 | Error finding when runtime EOL is within N days |
295
- | `failOnError.frameworkMajorLag` | 3 | Error finding when any framework is N+ majors behind |
296
- | `failOnError.dependencyTwoPlusPercent` | 50 | Error finding when N+% of dependencies are 2+ majors behind |
297
- | `warn.frameworkMajorLag` | 2 | Warning finding when any framework is N+ majors behind |
298
- | `warn.dependencyTwoPlusPercent` | 30 | Warning finding when N+% of dependencies are 2+ majors behind |
438
+ | Threshold | Default | Triggers |
439
+ | -------------------------------------- | ------- | ------------------------------------------------------------- |
440
+ | `failOnError.eolDays` | 180 | Error finding when runtime EOL is within N days |
441
+ | `failOnError.frameworkMajorLag` | 3 | Error finding when any framework is N+ majors behind |
442
+ | `failOnError.dependencyTwoPlusPercent` | 50 | Error finding when N+% of dependencies are 2+ majors behind |
443
+ | `warn.frameworkMajorLag` | 2 | Warning finding when any framework is N+ majors behind |
444
+ | `warn.dependencyTwoPlusPercent` | 30 | Warning finding when N+% of dependencies are 2+ majors behind |
299
445
 
300
446
  ### Scanner Toggles
301
447
 
@@ -339,19 +485,40 @@ Parses lockfiles (pnpm, npm, yarn, .NET) to build a workspace-wide dependency gr
339
485
  - Duplicated packages (multiple versions of the same package)
340
486
  - Phantom dependencies (used but not declared)
341
487
 
488
+ ### SBOM-ready Supply Chain Inventory
489
+
490
+ Vibgrate artifacts include dependency graph and package inventory data that can be used for supply-chain governance workflows:
491
+
492
+ - Lockfile-derived package counts (`totalUnique`, `totalInstalled`)
493
+ - Duplicate-version hotspots to prioritize remediation
494
+ - Phantom dependency evidence (`phantomDependencies` + details)
495
+ - Inventory metadata that pairs well with internal SBOM pipelines
496
+
497
+ Vibgrate supports both direct SBOM export (`vibgrate sbom export`) and raw inventory consumption from `scan_result.json`, so teams can choose either built-in output or custom SBOM pipelines.
498
+
499
+ Example:
500
+
501
+ ```bash
502
+ vibgrate sbom export --in .vibgrate/scan_result.json --format spdx --out sbom.spdx.json
503
+ ```
504
+
505
+ Expected result:
506
+
507
+ - A standards-based SBOM file (`spdx` or `cyclonedx`) is written for downstream governance tooling.
508
+
342
509
  ### Tooling Inventory
343
510
 
344
511
  Maps the full technology stack across your workspace by detecting package names in dependencies:
345
512
 
346
- | Category | Examples |
347
- |----------|---------|
348
- | Frontend | React, Vue, Angular, Svelte, Solid |
349
- | Meta-frameworks | Next.js, Nuxt, Astro, Remix |
350
- | Bundlers | Vite, webpack, esbuild, Rollup |
351
- | Backend | Express, Fastify, NestJS, Hono |
352
- | ORM / DB | Prisma, Drizzle, TypeORM, EF Core |
353
- | Testing | Vitest, Jest, Playwright, xUnit |
354
- | Observability | Sentry, OpenTelemetry, Pino, Winston |
513
+ | Category | Examples |
514
+ | --------------- | ------------------------------------ |
515
+ | Frontend | React, Vue, Angular, Svelte, Solid |
516
+ | Meta-frameworks | Next.js, Nuxt, Astro, Remix |
517
+ | Bundlers | Vite, webpack, esbuild, Rollup |
518
+ | Backend | Express, Fastify, NestJS, Hono |
519
+ | ORM / DB | Prisma, Drizzle, TypeORM, EF Core |
520
+ | Testing | Vitest, Jest, Playwright, xUnit |
521
+ | Observability | Sentry, OpenTelemetry, Pino, Winston |
355
522
 
356
523
  ### Build & Deploy Surface Area
357
524
 
@@ -400,15 +567,13 @@ Structural security hygiene indicators (not a secret scanner):
400
567
  - `.env` files tracked outside `.gitignore`
401
568
  - Audit severity counts (via `npm audit --json`)
402
569
 
403
-
404
570
  ### Security Scanners
405
571
 
406
- Security scanner orchestration and readiness analysis focused on modern SAST and secrets tooling:
572
+ Security scanner orchestration and readiness analysis for local policy and secret-scanning workflows:
407
573
 
408
- - Semgrep support for SAST (version detection + freshness checks)
409
- - Gitleaks and TruffleHog support for secret scanning readiness
410
- - Recommended minimum version checks to highlight stale engines/signatures
411
- - Config discovery (`.semgrep.yml`, `.gitleaks.toml`, `.trufflehog.yml`)
574
+ - Scanner engine discovery (installed vs missing)
575
+ - Version freshness checks to flag stale scanner engines/signatures
576
+ - Local config discovery for scanner policy files
412
577
  - Cache-backed heuristic secret signals to add value even when binaries are unavailable
413
578
 
414
579
  > This scanner does not guarantee full secret detection or rule coverage by itself; it reports toolchain status and lightweight in-repo indicators so teams can decide how to harden CI enforcement.
@@ -417,14 +582,42 @@ Security scanner orchestration and readiness analysis focused on modern SAST and
417
582
 
418
583
  Maps external service and platform dependencies by detecting SDK packages:
419
584
 
420
- | Category | Examples |
421
- |----------|---------|
422
- | Payment | Stripe, Braintree, PayPal |
423
- | Auth | Auth0, Clerk, Firebase, Passport |
424
- | Cloud SDKs | AWS, Azure, Google Cloud |
425
- | Databases | PostgreSQL, MongoDB, Redis |
426
- | Messaging | SQS, SNS, Kafka, BullMQ |
427
- | Observability | Sentry, DataDog, New Relic |
585
+ | Category | Examples |
586
+ | ------------- | -------------------------------- |
587
+ | Payment | Stripe, Braintree, PayPal |
588
+ | Auth | Auth0, Clerk, Firebase, Passport |
589
+ | Cloud SDKs | AWS, Azure, Google Cloud |
590
+ | Databases | PostgreSQL, MongoDB, Redis |
591
+ | Messaging | SQS, SNS, Kafka, BullMQ |
592
+ | Observability | Sentry, DataDog, New Relic |
593
+
594
+ ### Architecture Layers
595
+
596
+ Classifies source files into architectural layers and reports drift by layer to make refactors more predictable:
597
+
598
+ - Archetype detection (e.g. Next.js, NestJS, Express, serverless, monorepo, CLI)
599
+ - Layer-level file counts and confidence scoring
600
+ - Per-layer package drift scores and risk levels
601
+ - Layer-specific tech stack and service dependency attribution
602
+
603
+ ### Code Quality Metrics
604
+
605
+ Fast AST-based quality checks to identify upgrade friction hotspots:
606
+
607
+ - Files/functions analyzed
608
+ - Cyclomatic complexity averages
609
+ - Function length and nesting depth signals
610
+ - Circular dependencies and dead-code estimate
611
+ - "God file" detection for oversized high-complexity modules
612
+
613
+ ### OWASP Category Mapping
614
+
615
+ Maps security findings into OWASP Top 10 categories for security triage inside existing drift reports:
616
+
617
+ - Supports `fast` and `cache-input` modes
618
+ - Categorizes findings with severity and CWE metadata
619
+ - Emits per-category counts in JSON output
620
+ - Designed for CI visibility without requiring a separate report format
428
621
 
429
622
  ---
430
623
 
@@ -500,10 +693,10 @@ Set `VIBGRATE_DSN` as a secret in your CI environment. Uploads are always option
500
693
 
501
694
  Vibgrate supports region-specific ingest endpoints:
502
695
 
503
- | Region | Endpoint |
504
- |--------|----------|
696
+ | Region | Endpoint |
697
+ | ------------ | ------------------------ |
505
698
  | US (default) | `us.ingest.vibgrate.com` |
506
- | EU | `eu.ingest.vibgrate.com` |
699
+ | EU | `eu.ingest.vibgrate.com` |
507
700
 
508
701
  Use `--region eu` on `push` or `dsn create` to route data to the EU endpoint.
509
702
 
@@ -513,14 +706,14 @@ Use `--region eu` on `push` or `dsn create` to route data to the EU endpoint.
513
706
 
514
707
  Vibgrate is built with a privacy-first architecture. Here's what it **never** does:
515
708
 
516
- | Category | Hard guarantee |
517
- |----------|---------------|
518
- | Source code | Never read beyond config/manifest files |
519
- | Secrets | Never scanned for, never extracted |
709
+ | Category | Hard guarantee |
710
+ | ------------------ | -------------------------------------------------- |
711
+ | Source code | Never read beyond config/manifest files |
712
+ | Secrets | Never scanned for, never extracted |
520
713
  | Environment values | Never read — only `.env` file existence is flagged |
521
- | Git identity data | Never accessed — `git log` is never invoked |
522
- | File contents | Only structured config fields are extracted |
523
- | Network endpoints | Never parsed from config files |
714
+ | Git identity data | Never accessed — `git log` is never invoked |
715
+ | File contents | Only structured config fields are extracted |
716
+ | Network endpoints | Never parsed from config files |
524
717
 
525
718
  What it **does** collect:
526
719
 
@@ -534,11 +727,11 @@ What it **does** collect:
534
727
 
535
728
  ## Exit Codes
536
729
 
537
- | Code | Meaning |
538
- |------|---------|
539
- | `0` | Success |
540
- | `1` | Runtime error |
541
- | `2` | `--fail-on` threshold exceeded |
730
+ | Code | Meaning |
731
+ | ---- | ------------------------------ |
732
+ | `0` | Success |
733
+ | `1` | Runtime error |
734
+ | `2` | `--fail-on` threshold exceeded |
542
735
 
543
736
  ---
544
737
 
@@ -547,7 +740,12 @@ What it **does** collect:
547
740
  The package exports its core types for programmatic use:
548
741
 
549
742
  ```typescript
550
- import type { VibgrateConfig, ScanArtifact, DriftScore, Finding } from '@vibgrate/cli';
743
+ import type {
744
+ VibgrateConfig,
745
+ ScanArtifact,
746
+ DriftScore,
747
+ Finding,
748
+ } from "@vibgrate/cli";
551
749
  ```
552
750
 
553
751
  ---