@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 +293 -95
- package/README.md +212 -206
- package/dist/{baseline-FDWMBM2O.js → baseline-K7V6GAP3.js} +2 -2
- package/dist/{chunk-LO66M6OC.js → chunk-NASGRGXK.js} +1 -1
- package/dist/{chunk-GN3IWKSY.js → chunk-PTMLMDZU.js} +20 -0
- package/dist/{chunk-YFJC5JSQ.js → chunk-UVFIFNYG.js} +966 -305
- package/dist/cli.js +190 -10
- package/dist/index.d.ts +69 -0
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/DOCS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vibgrate CLI — Full Documentation
|
|
2
2
|
|
|
3
|
-
> Continuous Drift Intelligence for Node
|
|
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)
|
|
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
|
|
84
|
-
|
|
148
|
+
| Flag | Description |
|
|
149
|
+
| ------------ | ------------------------------------------- |
|
|
85
150
|
| `--baseline` | Create an initial drift baseline after init |
|
|
86
|
-
| `--yes`
|
|
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
|
-
|
|
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
|
|
136
|
-
|
|
137
|
-
| `--in`
|
|
138
|
-
| `--format` | `text`
|
|
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
|
|
151
|
-
|
|
152
|
-
| `--dsn`
|
|
153
|
-
| `--file`
|
|
154
|
-
| `--region` | —
|
|
155
|
-
| `--strict` | —
|
|
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
|
|
170
|
-
|
|
171
|
-
| `--workspace` |
|
|
172
|
-
| `--region`
|
|
173
|
-
| `--ingest`
|
|
174
|
-
| `--write`
|
|
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
|
|
187
|
-
|
|
188
|
-
| `--check` | Only check for updates, don't install
|
|
189
|
-
| `--pm`
|
|
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
|
|
204
|
-
|
|
205
|
-
| 70–100 | **Low** — You're in good shape
|
|
206
|
-
| 40–69
|
|
207
|
-
| 0–39
|
|
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
|
|
214
|
-
|
|
215
|
-
| **Runtime**
|
|
216
|
-
| **Frameworks**
|
|
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**
|
|
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
|
|
399
|
+
import type { VibgrateConfig } from "@vibgrate/cli";
|
|
254
400
|
|
|
255
401
|
const config: VibgrateConfig = {
|
|
256
|
-
exclude: [
|
|
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:
|
|
270
|
-
dependencyRisk:
|
|
271
|
-
dependencyGraph:
|
|
272
|
-
toolingInventory:
|
|
273
|
-
buildDeploy:
|
|
274
|
-
tsModernity:
|
|
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:
|
|
277
|
-
securityPosture:
|
|
278
|
-
securityScanners:
|
|
279
|
-
serviceDependencies:
|
|
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
|
|
293
|
-
|
|
294
|
-
| `failOnError.eolDays`
|
|
295
|
-
| `failOnError.frameworkMajorLag`
|
|
296
|
-
| `failOnError.dependencyTwoPlusPercent` | 50
|
|
297
|
-
| `warn.frameworkMajorLag`
|
|
298
|
-
| `warn.dependencyTwoPlusPercent`
|
|
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
|
|
347
|
-
|
|
348
|
-
| Frontend
|
|
349
|
-
| Meta-frameworks | Next.js, Nuxt, Astro, Remix
|
|
350
|
-
| Bundlers
|
|
351
|
-
| Backend
|
|
352
|
-
| ORM / DB
|
|
353
|
-
| Testing
|
|
354
|
-
| Observability
|
|
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
|
|
572
|
+
Security scanner orchestration and readiness analysis for local policy and secret-scanning workflows:
|
|
407
573
|
|
|
408
|
-
-
|
|
409
|
-
-
|
|
410
|
-
-
|
|
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
|
|
421
|
-
|
|
422
|
-
| Payment
|
|
423
|
-
| Auth
|
|
424
|
-
| Cloud SDKs
|
|
425
|
-
| Databases
|
|
426
|
-
| Messaging
|
|
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
|
|
504
|
-
|
|
696
|
+
| Region | Endpoint |
|
|
697
|
+
| ------------ | ------------------------ |
|
|
505
698
|
| US (default) | `us.ingest.vibgrate.com` |
|
|
506
|
-
| EU
|
|
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
|
|
517
|
-
|
|
518
|
-
| Source code
|
|
519
|
-
| Secrets
|
|
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
|
|
522
|
-
| File contents
|
|
523
|
-
| Network endpoints
|
|
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`
|
|
540
|
-
| `1`
|
|
541
|
-
| `2`
|
|
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 {
|
|
743
|
+
import type {
|
|
744
|
+
VibgrateConfig,
|
|
745
|
+
ScanArtifact,
|
|
746
|
+
DriftScore,
|
|
747
|
+
Finding,
|
|
748
|
+
} from "@vibgrate/cli";
|
|
551
749
|
```
|
|
552
750
|
|
|
553
751
|
---
|