@vibgrate/cli 2026.702.2 → 2026.703.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/DOCS.md +521 -146
- package/LICENSE +202 -0
- package/NOTICE +40 -0
- package/README.md +232 -250
- package/dist/baseline-D2T3V76P.js +6 -0
- package/dist/baseline-D2T3V76P.js.map +1 -0
- package/dist/chunk-4M2MUQRO.js +800 -0
- package/dist/chunk-4M2MUQRO.js.map +1 -0
- package/dist/chunk-E7Q3P6V7.js +6267 -0
- package/dist/chunk-E7Q3P6V7.js.map +1 -0
- package/dist/chunk-ROWQLHEX.js +31 -0
- package/dist/chunk-ROWQLHEX.js.map +1 -0
- package/dist/chunk-RXP66R2E.js +39 -0
- package/dist/chunk-RXP66R2E.js.map +1 -0
- package/dist/chunk-TVPE5CA2.js +11389 -0
- package/dist/chunk-TVPE5CA2.js.map +1 -0
- package/dist/chunk-X5YT263H.js +912 -0
- package/dist/chunk-X5YT263H.js.map +1 -0
- package/dist/cli.d.ts +44 -1
- package/dist/cli.js +3816 -165
- package/dist/cli.js.map +1 -0
- package/dist/fs-7KZ4F3SB.js +3 -0
- package/dist/fs-7KZ4F3SB.js.map +1 -0
- package/dist/index.d.ts +1010 -1
- package/dist/index.js +42 -1
- package/dist/index.js.map +1 -0
- package/dist/parse-worker.d.ts +23 -0
- package/dist/parse-worker.js +32 -0
- package/dist/parse-worker.js.map +1 -0
- package/dist/types-C6ZyQpa9.d.ts +168 -0
- package/grammars/tree-sitter-bash.wasm +0 -0
- package/grammars/tree-sitter-c.wasm +0 -0
- package/grammars/tree-sitter-c_sharp.wasm +0 -0
- package/grammars/tree-sitter-cpp.wasm +0 -0
- package/grammars/tree-sitter-dart.wasm +0 -0
- package/grammars/tree-sitter-elixir.wasm +0 -0
- package/grammars/tree-sitter-go.wasm +0 -0
- package/grammars/tree-sitter-java.wasm +0 -0
- package/grammars/tree-sitter-javascript.wasm +0 -0
- package/grammars/tree-sitter-kotlin.wasm +0 -0
- package/grammars/tree-sitter-lua.wasm +0 -0
- package/grammars/tree-sitter-php.wasm +0 -0
- package/grammars/tree-sitter-python.wasm +0 -0
- package/grammars/tree-sitter-ruby.wasm +0 -0
- package/grammars/tree-sitter-rust.wasm +0 -0
- package/grammars/tree-sitter-scala.wasm +0 -0
- package/grammars/tree-sitter-swift.wasm +0 -0
- package/grammars/tree-sitter-tsx.wasm +0 -0
- package/grammars/tree-sitter-typescript.wasm +0 -0
- package/grammars/tree-sitter-zig.wasm +0 -0
- package/package.json +68 -33
- package/scripts/postinstall.mjs +84 -0
- package/skills/README.md +58 -0
- package/skills/vg/SKILL.md +42 -0
- package/HCS-RUNTIME-SETUP.md +0 -73
- package/LICENSE.md +0 -45
- package/dist/baseline-TJDKYSFL.js +0 -1
- package/dist/chunk-EK7ODJWE.js +0 -1
- package/dist/chunk-GGDB72YE.js +0 -323
- package/dist/chunk-MKDRULJ6.js +0 -1
- package/dist/chunk-NGFYX3CW.js +0 -2
- package/dist/chunk-OQSVJXWJ.js +0 -143
- package/dist/chunk-XTHPCEME.js +0 -2
- package/dist/dist-5D3BKCOR.js +0 -1
- package/dist/fs-PXXYZATK-ZP2RBR47.js +0 -1
- package/dist/hcs-wasm/package.json +0 -3
- package/dist/hcs-wasm/vibgrate_hcs_wasm.js +0 -450
- package/dist/hcs-wasm/vibgrate_hcs_wasm_bg.wasm +0 -0
- package/dist/hcs-worker.js +0 -374406
- package/dist/semver-TPPMM2NV.js +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { runCoreScan, writeJsonFile } from './chunk-TVPE5CA2.js';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
|
|
6
|
+
// src/reporting/advanced-hook.ts
|
|
7
|
+
async function loadAdvancedScanHook() {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// src/reporting/commands/baseline.ts
|
|
12
|
+
async function runBaseline(rootDir) {
|
|
13
|
+
console.log(chalk.dim("Creating baseline..."));
|
|
14
|
+
const advanced = await loadAdvancedScanHook();
|
|
15
|
+
const artifact = await runCoreScan(rootDir, {
|
|
16
|
+
format: "text",
|
|
17
|
+
concurrency: 8
|
|
18
|
+
}, advanced);
|
|
19
|
+
const baselinePath = path.join(rootDir, ".vibgrate", "baseline.json");
|
|
20
|
+
await writeJsonFile(baselinePath, artifact);
|
|
21
|
+
console.log(chalk.green("\u2714") + ` Baseline saved to ${chalk.bold(".vibgrate/baseline.json")}`);
|
|
22
|
+
console.log(chalk.dim(` Baseline score: ${artifact.drift.score}/100`));
|
|
23
|
+
}
|
|
24
|
+
var baselineCommand = new Command("baseline").description("Create a drift baseline snapshot").argument("[path]", "Path to baseline", ".").action(async (targetPath) => {
|
|
25
|
+
const rootDir = path.resolve(targetPath);
|
|
26
|
+
await runBaseline(rootDir);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export { baselineCommand, loadAdvancedScanHook, runBaseline };
|
|
30
|
+
//# sourceMappingURL=chunk-ROWQLHEX.js.map
|
|
31
|
+
//# sourceMappingURL=chunk-ROWQLHEX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/reporting/advanced-hook.ts","../src/reporting/commands/baseline.ts"],"names":[],"mappings":";;;;;;AAUA,eAAsB,oBAAA,GAA8D;AAClF,EAAA,OAAO,MAAA;AACT;;;ACLA,eAAsB,YAAY,OAAA,EAAgC;AAChE,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,sBAAsB,CAAC,CAAA;AAE7C,EAAA,MAAM,QAAA,GAAW,MAAM,oBAAA,EAAqB;AAC5C,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,EAAS;AAAA,IAC1C,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa;AAAA,KACZ,QAAQ,CAAA;AAEX,EAAA,MAAM,YAAA,GAAoB,IAAA,CAAA,IAAA,CAAK,OAAA,EAAS,WAAA,EAAa,eAAe,CAAA;AACpE,EAAA,MAAM,aAAA,CAAc,cAAc,QAAQ,CAAA;AAC1C,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,sBAAsB,KAAA,CAAM,IAAA,CAAK,yBAAyB,CAAC,CAAA,CAAE,CAAA;AAC5F,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAS,KAAA,CAAM,KAAK,MAAM,CAAC,CAAA;AACxE;AAEO,IAAM,eAAA,GAAkB,IAAI,OAAA,CAAQ,UAAU,EAClD,WAAA,CAAY,kCAAkC,CAAA,CAC9C,QAAA,CAAS,UAAU,kBAAA,EAAoB,GAAG,CAAA,CAC1C,MAAA,CAAO,OAAO,UAAA,KAAuB;AACpC,EAAA,MAAM,OAAA,GAAe,aAAQ,UAAU,CAAA;AACvC,EAAA,MAAM,YAAY,OAAO,CAAA;AAC3B,CAAC","file":"chunk-ROWQLHEX.js","sourcesContent":["import type { AdvancedScanHook } from '../core-open/index.js';\n\n/**\n * Open build: there is no proprietary advanced-analysis hook.\n *\n * In the public, Apache-2.0 distribution every reporting command runs purely on\n * the open base engine (`runCoreScan` from `@vibgrate/core-open`). This shim\n * keeps the call sites in `scan`/`baseline` unchanged while always resolving to\n * `undefined`, so the scan falls back to the open base engine.\n */\nexport async function loadAdvancedScanHook(): Promise<AdvancedScanHook | undefined> {\n return undefined;\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { runCoreScan } from '../../core-open/index.js';\nimport { writeJsonFile } from '../utils/fs.js';\nimport { loadAdvancedScanHook } from '../advanced-hook.js';\n\nexport async function runBaseline(rootDir: string): Promise<void> {\n console.log(chalk.dim('Creating baseline...'));\n\n const advanced = await loadAdvancedScanHook();\n const artifact = await runCoreScan(rootDir, {\n format: 'text',\n concurrency: 8,\n }, advanced);\n\n const baselinePath = path.join(rootDir, '.vibgrate', 'baseline.json');\n await writeJsonFile(baselinePath, artifact);\n console.log(chalk.green('✔') + ` Baseline saved to ${chalk.bold('.vibgrate/baseline.json')}`);\n console.log(chalk.dim(` Baseline score: ${artifact.drift.score}/100`));\n}\n\nexport const baselineCommand = new Command('baseline')\n .description('Create a drift baseline snapshot')\n .argument('[path]', 'Path to baseline', '.')\n .action(async (targetPath: string) => {\n const rootDir = path.resolve(targetPath);\n await runBaseline(rootDir);\n });\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/core-open/utils/redact.ts
|
|
2
|
+
var SECRET_PATTERNS = [
|
|
3
|
+
// Vendor token prefixes (GitHub, GitLab, Slack, OpenAI/Stripe-style, npm, AWS).
|
|
4
|
+
/\b(?:gh[opusr]_|github_pat_)[A-Za-z0-9_]{8,}\b/g,
|
|
5
|
+
/\bglpat-[A-Za-z0-9_-]{8,}\b/g,
|
|
6
|
+
/\bxox[baprs]-[A-Za-z0-9-]{8,}\b/g,
|
|
7
|
+
/\bsk-[A-Za-z0-9_-]{8,}\b/gi,
|
|
8
|
+
/\b[sr]k_(?:live|test)_[A-Za-z0-9]{8,}\b/g,
|
|
9
|
+
/\bnpm_[A-Za-z0-9]{16,}\b/g,
|
|
10
|
+
/\b(?:AKIA|ASIA)[0-9A-Z]{12,}\b/g,
|
|
11
|
+
// JWTs.
|
|
12
|
+
/\beyJ[\w-]{8,}\.[\w-]{8,}\.[\w-]+\b/g,
|
|
13
|
+
// Authorization material.
|
|
14
|
+
/\b(?:Bearer|Basic|VibgrateDSN)\s+[A-Za-z0-9+/._:=-]{8,}/g,
|
|
15
|
+
/\b(?:authorization|api[_-]?key|apikey|access[_-]?token|client[_-]?secret|password|passwd|secret)\s*[:=]\s*['"]?[^'"\s]{6,}/gi,
|
|
16
|
+
// PEM blocks.
|
|
17
|
+
/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,
|
|
18
|
+
// Long base64/hex blobs (AWS secret keys and friends).
|
|
19
|
+
/\b[A-Za-z0-9+/]{40,}={0,2}\b/g
|
|
20
|
+
];
|
|
21
|
+
var REDACTED = "[REDACTED]";
|
|
22
|
+
function redactSecrets(text) {
|
|
23
|
+
let out = text;
|
|
24
|
+
for (const re of SECRET_PATTERNS) out = out.replace(re, REDACTED);
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
var CREDENTIAL_QUERY_KEYS = /^(?:access[_-]?token|private[_-]?token|api[_-]?key|apikey|token|secret|password|passwd|auth|authorization|x-token|sig|signature|key)$/i;
|
|
28
|
+
function redactUrlCredentials(url) {
|
|
29
|
+
const noUser = url.replace(/\/\/[^@/]+@/, "//");
|
|
30
|
+
const q = noUser.indexOf("?");
|
|
31
|
+
if (q === -1) return noUser;
|
|
32
|
+
const base = noUser.slice(0, q);
|
|
33
|
+
const kept = noUser.slice(q + 1).split("&").filter((pair) => !CREDENTIAL_QUERY_KEYS.test(pair.split("=")[0] ?? ""));
|
|
34
|
+
return kept.length ? `${base}?${kept.join("&")}` : base;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { redactSecrets, redactUrlCredentials };
|
|
38
|
+
//# sourceMappingURL=chunk-RXP66R2E.js.map
|
|
39
|
+
//# sourceMappingURL=chunk-RXP66R2E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core-open/utils/redact.ts"],"names":[],"mappings":";AAUA,IAAM,eAAA,GAA4B;AAAA;AAAA,EAEhC,iDAAA;AAAA,EACA,8BAAA;AAAA,EACA,kCAAA;AAAA,EACA,4BAAA;AAAA,EACA,0CAAA;AAAA,EACA,2BAAA;AAAA,EACA,iCAAA;AAAA;AAAA,EAEA,sCAAA;AAAA;AAAA,EAEA,0DAAA;AAAA,EACA,8HAAA;AAAA;AAAA,EAEA,mFAAA;AAAA;AAAA,EAEA;AACF,CAAA;AAEO,IAAM,QAAA,GAAW,YAAA;AAGjB,SAAS,cAAc,IAAA,EAAsB;AAClD,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,MAAW,MAAM,eAAA,EAAiB,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAChE,EAAA,OAAO,GAAA;AACT;AAYA,IAAM,qBAAA,GACJ,wIAAA;AAOK,SAAS,qBAAqB,GAAA,EAAqB;AACxD,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,aAAA,EAAe,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,MAAA;AACrB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,OACV,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,CACX,KAAA,CAAM,GAAG,CAAA,CACT,MAAA,CAAO,CAAC,SAAS,CAAC,qBAAA,CAAsB,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAC,CAAA;AACzE,EAAA,OAAO,IAAA,CAAK,SAAS,CAAA,EAAG,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,IAAA;AACrD","file":"chunk-RXP66R2E.js","sourcesContent":["// VENDORED from @vibgrate/core-open (packages/vibgrate-core-open) by\n// scripts/vendor-core-open.mjs. Do not edit here — change the source package\n// and re-run the vendor script. Apache-2.0.\n/**\n * Shared credential redaction (GUARDRAILS §1.1): applied at INGEST, before\n * anything is stored or uploaded. One detector, reused by the VCS capture, the\n * graph builder (signatures/docs), and the push envelope — so every surface\n * scrubs the same shapes and a new token prefix is added in exactly one place.\n */\n\nconst SECRET_PATTERNS: RegExp[] = [\n // Vendor token prefixes (GitHub, GitLab, Slack, OpenAI/Stripe-style, npm, AWS).\n /\\b(?:gh[opusr]_|github_pat_)[A-Za-z0-9_]{8,}\\b/g,\n /\\bglpat-[A-Za-z0-9_-]{8,}\\b/g,\n /\\bxox[baprs]-[A-Za-z0-9-]{8,}\\b/g,\n /\\bsk-[A-Za-z0-9_-]{8,}\\b/gi,\n /\\b[sr]k_(?:live|test)_[A-Za-z0-9]{8,}\\b/g,\n /\\bnpm_[A-Za-z0-9]{16,}\\b/g,\n /\\b(?:AKIA|ASIA)[0-9A-Z]{12,}\\b/g,\n // JWTs.\n /\\beyJ[\\w-]{8,}\\.[\\w-]{8,}\\.[\\w-]+\\b/g,\n // Authorization material.\n /\\b(?:Bearer|Basic|VibgrateDSN)\\s+[A-Za-z0-9+/._:=-]{8,}/g,\n /\\b(?:authorization|api[_-]?key|apikey|access[_-]?token|client[_-]?secret|password|passwd|secret)\\s*[:=]\\s*['\"]?[^'\"\\s]{6,}/gi,\n // PEM blocks.\n /-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,\n // Long base64/hex blobs (AWS secret keys and friends).\n /\\b[A-Za-z0-9+/]{40,}={0,2}\\b/g,\n];\n\nexport const REDACTED = '[REDACTED]';\n\n/** Replace every credential-shaped substring with [REDACTED]. Deterministic. */\nexport function redactSecrets(text: string): string {\n let out = text;\n for (const re of SECRET_PATTERNS) out = out.replace(re, REDACTED);\n return out;\n}\n\n/** True when the text contains at least one credential-shaped substring. */\nexport function containsSecret(text: string): boolean {\n return SECRET_PATTERNS.some((re) => {\n re.lastIndex = 0;\n const hit = re.test(text);\n re.lastIndex = 0;\n return hit;\n });\n}\n\nconst CREDENTIAL_QUERY_KEYS =\n /^(?:access[_-]?token|private[_-]?token|api[_-]?key|apikey|token|secret|password|passwd|auth|authorization|x-token|sig|signature|key)$/i;\n\n/**\n * Strip credentials from a URL: userinfo (`//user:token@host`) AND\n * credential-bearing query parameters (`?access_token=…`, `?private_token=…`).\n * Non-URL strings pass through with just the userinfo strip applied.\n */\nexport function redactUrlCredentials(url: string): string {\n const noUser = url.replace(/\\/\\/[^@/]+@/, '//');\n const q = noUser.indexOf('?');\n if (q === -1) return noUser;\n const base = noUser.slice(0, q);\n const kept = noUser\n .slice(q + 1)\n .split('&')\n .filter((pair) => !CREDENTIAL_QUERY_KEYS.test(pair.split('=')[0] ?? ''));\n return kept.length ? `${base}?${kept.join('&')}` : base;\n}\n"]}
|