@vibgrate/cli 2026.731.1 → 2026.731.3
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/dist/{agent-33BMKWJC.js → agent-6XOI7RVW.js} +5 -5
- package/dist/{agent-33BMKWJC.js.map → agent-6XOI7RVW.js.map} +1 -1
- package/dist/baseline-PY6TETA5.js +9 -0
- package/dist/{baseline-4FBHW2X2.js.map → baseline-PY6TETA5.js.map} +1 -1
- package/dist/{chunk-KGWEBM2J.js → chunk-3VSU7G75.js} +27 -54
- package/dist/chunk-3VSU7G75.js.map +1 -0
- package/dist/{chunk-SKIMUFCI.js → chunk-5IA2TA57.js} +41 -65
- package/dist/chunk-5IA2TA57.js.map +1 -0
- package/dist/chunk-5XIEVZLW.js +65 -0
- package/dist/chunk-5XIEVZLW.js.map +1 -0
- package/dist/chunk-7G5S5KZN.js +99 -0
- package/dist/chunk-7G5S5KZN.js.map +1 -0
- package/dist/{chunk-DXSEG6SZ.js → chunk-AVCBKQKA.js} +3 -3
- package/dist/{chunk-DXSEG6SZ.js.map → chunk-AVCBKQKA.js.map} +1 -1
- package/dist/{chunk-J3BQ7FIT.js → chunk-B6S2DSBS.js} +7 -7
- package/dist/{chunk-J3BQ7FIT.js.map → chunk-B6S2DSBS.js.map} +1 -1
- package/dist/chunk-BMUTNUB7.js +326 -0
- package/dist/chunk-BMUTNUB7.js.map +1 -0
- package/dist/chunk-DEKGSQHL.js +6 -0
- package/dist/{chunk-2XTPGYR2.js.map → chunk-DEKGSQHL.js.map} +1 -1
- package/dist/{chunk-NJT4CA6K.js → chunk-DT4KIVRI.js} +17 -8
- package/dist/chunk-DT4KIVRI.js.map +1 -0
- package/dist/{chunk-GPDJOCUI.js → chunk-FF5ZQ6KI.js} +4 -4
- package/dist/{chunk-GPDJOCUI.js.map → chunk-FF5ZQ6KI.js.map} +1 -1
- package/dist/{chunk-WBMMRERH.js → chunk-KLO2XBUX.js} +3 -3
- package/dist/{chunk-WBMMRERH.js.map → chunk-KLO2XBUX.js.map} +1 -1
- package/dist/{chunk-T7OFJS3X.js → chunk-LTTVCI5C.js} +13 -328
- package/dist/chunk-LTTVCI5C.js.map +1 -0
- package/dist/{chunk-476KWSFM.js → chunk-MOLBANFB.js} +3 -3
- package/dist/{chunk-476KWSFM.js.map → chunk-MOLBANFB.js.map} +1 -1
- package/dist/{chunk-SE4JMB4W.js → chunk-PHGAUWWF.js} +3 -3
- package/dist/{chunk-SE4JMB4W.js.map → chunk-PHGAUWWF.js.map} +1 -1
- package/dist/{chunk-C22ZY3FV.js → chunk-RIWLXMMT.js} +3 -3
- package/dist/{chunk-C22ZY3FV.js.map → chunk-RIWLXMMT.js.map} +1 -1
- package/dist/chunk-SCTLOFNH.js +42 -0
- package/dist/chunk-SCTLOFNH.js.map +1 -0
- package/dist/{chunk-MYM5VIJ4.js → chunk-TRKRRX2S.js} +10 -6
- package/dist/chunk-TRKRRX2S.js.map +1 -0
- package/dist/{chunk-3NP2DO4G.js → chunk-WK52LWRX.js} +3 -3
- package/dist/{chunk-3NP2DO4G.js.map → chunk-WK52LWRX.js.map} +1 -1
- package/dist/{chunk-UVMP7DFF.js → chunk-XRN7DQGR.js} +11 -11
- package/dist/{chunk-UVMP7DFF.js.map → chunk-XRN7DQGR.js.map} +1 -1
- package/dist/{chunk-CWB6H553.js → chunk-Z7VH4RPO.js} +3 -3
- package/dist/{chunk-CWB6H553.js.map → chunk-Z7VH4RPO.js.map} +1 -1
- package/dist/cli.d.ts +5 -1
- package/dist/cli.js +166 -61
- package/dist/cli.js.map +1 -1
- package/dist/ensure-map-UQL7SM34.js +28 -0
- package/dist/ensure-map-UQL7SM34.js.map +1 -0
- package/dist/fs-NTQUFCXV.js +4 -0
- package/dist/fs-NTQUFCXV.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/{interactive-V6IRYZTA.js → interactive-QWT7ERXJ.js} +22 -19
- package/dist/interactive-QWT7ERXJ.js.map +1 -0
- package/dist/load-WA53B3GW.js +10 -0
- package/dist/{load-KPHH26ND.js.map → load-WA53B3GW.js.map} +1 -1
- package/dist/{run-outcome-TZ53G67B.js → run-outcome-J2IDIVYI.js} +5 -5
- package/dist/{run-outcome-TZ53G67B.js.map → run-outcome-J2IDIVYI.js.map} +1 -1
- package/dist/{runtime-session-PZKXBDJT.js → runtime-session-52P2Y5LX.js} +7 -7
- package/dist/{runtime-session-PZKXBDJT.js.map → runtime-session-52P2Y5LX.js.map} +1 -1
- package/dist/{session-3OBIQLE4.js → session-L7SJNE55.js} +4 -4
- package/dist/{session-3OBIQLE4.js.map → session-L7SJNE55.js.map} +1 -1
- package/dist/session-store-SQECEXUU.js +4 -0
- package/dist/{session-store-O4XPXKOV.js.map → session-store-SQECEXUU.js.map} +1 -1
- package/dist/{stream-json-3YOPU3LF.js → stream-json-TSGYC2MQ.js} +5 -5
- package/dist/{stream-json-3YOPU3LF.js.map → stream-json-TSGYC2MQ.js.map} +1 -1
- package/dist/{vg-mcp-bridge-7NNVIVO7.js → vg-mcp-bridge-IFAXEQMZ.js} +6 -6
- package/dist/{vg-mcp-bridge-7NNVIVO7.js.map → vg-mcp-bridge-IFAXEQMZ.js.map} +1 -1
- package/dist/{vgd-Y2YCN75V.js → vgd-PNR7UKLL.js} +6 -6
- package/dist/vgd-PNR7UKLL.js.map +1 -0
- package/package.json +1 -1
- package/dist/baseline-4FBHW2X2.js +0 -9
- package/dist/chunk-2XTPGYR2.js +0 -6
- package/dist/chunk-K3SLGULW.js +0 -50
- package/dist/chunk-K3SLGULW.js.map +0 -1
- package/dist/chunk-KGWEBM2J.js.map +0 -1
- package/dist/chunk-MYM5VIJ4.js.map +0 -1
- package/dist/chunk-NJT4CA6K.js.map +0 -1
- package/dist/chunk-SKIMUFCI.js.map +0 -1
- package/dist/chunk-T7OFJS3X.js.map +0 -1
- package/dist/fs-HF5DOHYR.js +0 -4
- package/dist/fs-HF5DOHYR.js.map +0 -1
- package/dist/interactive-V6IRYZTA.js.map +0 -1
- package/dist/load-KPHH26ND.js +0 -10
- package/dist/session-store-O4XPXKOV.js +0 -4
- package/dist/vgd-Y2YCN75V.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveIngestHost } from './chunk-HTLDXEHW.js';
|
|
2
|
-
import { VERSION } from './chunk-
|
|
2
|
+
import { VERSION } from './chunk-DEKGSQHL.js';
|
|
3
3
|
import { cacheDir } from './chunk-ZKNB4YH4.js';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as os from 'os';
|
|
@@ -212,5 +212,5 @@ var StatsSharer = class {
|
|
|
212
212
|
};
|
|
213
213
|
|
|
214
214
|
export { StatsSharer, installId, isCI, statsEndpoint, telemetryOptOut };
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-Z7VH4RPO.js.map
|
|
216
|
+
//# sourceMappingURL=chunk-Z7VH4RPO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/stats-share.ts"],"names":[],"mappings":"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","file":"chunk-CWB6H553.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { cacheDir } from './cache.js';\nimport { VERSION } from '../version.js';\nimport { resolveIngestHost } from '../reporting/regions.js';\nimport type { SavingEntry, Source, Outcome } from './savings.js';\n\n/**\n * Opt-in usage-stats sharing for `vg serve --share-stats`.\n *\n * This is the ONLY path in `vg serve` that sends anything off the machine, and\n * it is off unless the operator explicitly asks for it. What we send is the\n * same counts-only ledger `vg savings` reports locally — per (source, client,\n * tool, outcome): how many calls and the vg-vs-grep token figures — plus the vg\n * version, OS/arch, and a random per-install id. We never send code, file paths,\n * question text, repo identity, or any credential. See GUARDRAILS §3.4.\n *\n * Even when the flag is passed, the universal `DO_NOT_TRACK` opt-out (or\n * `VIBGRATE_TELEMETRY=0`) wins: nothing is uploaded and no install id is ever\n * minted or persisted (see `telemetryOptOut` / `installId`).\n *\n * Design:\n * - The local ledger (savings.jsonl) is the single source of truth; the flusher\n * reads only the tail past a persisted byte offset, so a batch is sent once.\n * - Fire-and-forget with a short timeout. A network problem never blocks a tool\n * call and never throws — the offset only advances on a confirmed 2xx, so a\n * failed batch is retried on the next flush.\n * - Fully offline-safe: under `--local` the sharer is never constructed.\n */\n\n/** Payload schema version — must match the server's `mcpUsageStatsSchema`. */\nconst SCHEMA_VERSION = '1';\n/** Where the offset (and cached install id) live, per repo, beside the ledger. */\nconst OFFSET_FILE = 'stats-share.json';\n/** The machine-global anonymous install id lives here (stable across repos). */\nconst INSTALL_ID_DIR = path.join(os.homedir(), '.vibgrate');\nconst INSTALL_ID_FILE = path.join(INSTALL_ID_DIR, 'install-id');\n/** Give a flush POST a hard ceiling so a hung endpoint never stalls shutdown. */\nconst SEND_TIMEOUT_MS = 4000;\n\n/** One aggregated row of the shared batch — counts only. */\nexport interface StatsRow {\n source: Source;\n client: string;\n tool: string;\n outcome: Outcome;\n calls: number;\n vgTokens: number;\n baselineTokens: number;\n}\n\n/** The counts-only batch POSTed to the ingest endpoint. */\nexport interface StatsBatch {\n schemaVersion: string;\n installId: string;\n vgVersion: string;\n os: string;\n arch: string;\n windowStart: string;\n windowEnd: string;\n totalCalls: number;\n rows: StatsRow[];\n}\n\n/**\n * The universal opt-out (https://consoledonottrack.com) plus a tool-specific\n * alias, honoured even when `--share-stats` is passed explicitly. Pure function\n * of the environment for testability. Returns the name of the variable that\n * opted out (for the disclosure message), or null when sharing may proceed.\n */\nexport function telemetryOptOut(env: NodeJS.ProcessEnv = process.env): string | null {\n const dnt = (env.DO_NOT_TRACK ?? '').trim().toLowerCase();\n if (dnt !== '' && dnt !== '0' && dnt !== 'false') return 'DO_NOT_TRACK';\n const vt = (env.VIBGRATE_TELEMETRY ?? '').trim().toLowerCase();\n if (vt === '0' || vt === 'false' || vt === 'off') return 'VIBGRATE_TELEMETRY';\n return null;\n}\n\n/** Common CI environment markers — a CI runner is never an interactive session. */\nconst CI_ENV_VARS = [\n 'CI',\n 'GITHUB_ACTIONS',\n 'GITLAB_CI',\n 'CIRCLECI',\n 'TRAVIS',\n 'BUILDKITE',\n 'JENKINS_URL',\n 'TF_BUILD',\n] as const;\n\n/** True when running under a recognised CI system. Pure function of the env. */\nexport function isCI(env: NodeJS.ProcessEnv = process.env): boolean {\n return CI_ENV_VARS.some((v) => {\n const val = (env[v] ?? '').trim().toLowerCase();\n return val !== '' && val !== '0' && val !== 'false';\n });\n}\n\n/**\n * Read (or lazily create) the anonymous per-install id — a random UUID stored in\n * `~/.vibgrate/install-id`. It is *not* tied to the user, the repo, or any\n * account; it only lets us de-duplicate batches from the same install when\n * aggregating. If the home dir isn't writable we fall back to an ephemeral id\n * so sharing still works (it just can't be de-duplicated across restarts).\n *\n * Under an env opt-out no id is ever read or persisted (the sharing path isn't\n * reached then either — this is defence in depth), and on CI runners the id is\n * ephemeral: a persisted id on a shared/throwaway runner would be meaningless\n * for de-duplication and would leave state behind on machines we don't own.\n */\nexport function installId(env: NodeJS.ProcessEnv = process.env): string {\n if (telemetryOptOut(env) !== null || isCI(env)) return randomUuid();\n try {\n const existing = fs.readFileSync(INSTALL_ID_FILE, 'utf8').trim();\n if (isUuid(existing)) return existing;\n } catch {\n /* not created yet */\n }\n const id = randomUuid();\n try {\n fs.mkdirSync(INSTALL_ID_DIR, { recursive: true });\n fs.writeFileSync(INSTALL_ID_FILE, id + '\\n', { mode: 0o600 });\n } catch {\n /* home dir read-only — use the ephemeral id for this process */\n }\n return id;\n}\n\nfunction isUuid(s: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);\n}\n\nfunction randomUuid(): string {\n return randomUUID();\n}\n\n/** Resolve the ingest endpoint: env override wins, else the default region host. */\nexport function statsEndpoint(): string {\n const override = process.env.VIBGRATE_STATS_ENDPOINT;\n if (override && /^https?:\\/\\//.test(override)) return override;\n return `https://${resolveIngestHost()}/v1/ingest/cli-mcp-usage`;\n}\n\nfunction offsetPath(root: string): string {\n return path.join(cacheDir(root), OFFSET_FILE);\n}\n\nfunction ledgerFilePath(root: string): string {\n return path.join(cacheDir(root), 'savings.jsonl');\n}\n\nfunction readOffset(root: string): number {\n try {\n const raw = JSON.parse(fs.readFileSync(offsetPath(root), 'utf8')) as { offset?: number };\n return typeof raw.offset === 'number' && raw.offset >= 0 ? raw.offset : 0;\n } catch {\n return 0;\n }\n}\n\nfunction writeOffset(root: string, offset: number): void {\n try {\n fs.mkdirSync(cacheDir(root), { recursive: true });\n fs.writeFileSync(offsetPath(root), JSON.stringify({ offset }) + '\\n');\n } catch {\n /* best-effort; a lost offset just means one batch may re-send */\n }\n}\n\n/**\n * Aggregate the ledger entries after `fromOffset` into a counts-only batch.\n * Returns the batch (or null if there's nothing new) and the new byte offset to\n * persist once the batch is confirmed sent.\n */\nexport function buildBatch(\n root: string,\n fromOffset: number,\n id = installId(),\n): { batch: StatsBatch | null; newOffset: number } {\n const file = ledgerFilePath(root);\n let size = 0;\n try {\n size = fs.statSync(file).size;\n } catch {\n return { batch: null, newOffset: 0 };\n }\n // The ledger was truncated/recreated under us — re-read from the top.\n const start = fromOffset > size ? 0 : fromOffset;\n if (start >= size) return { batch: null, newOffset: size };\n\n let text = '';\n try {\n const fd = fs.openSync(file, 'r');\n try {\n const buf = Buffer.alloc(size - start);\n fs.readSync(fd, buf, 0, buf.length, start);\n text = buf.toString('utf8');\n } finally {\n fs.closeSync(fd);\n }\n } catch {\n return { batch: null, newOffset: fromOffset };\n }\n\n // Only whole lines are complete; a trailing partial line (mid-append) is left\n // for the next flush by rewinding the offset to the last newline.\n const lastNl = text.lastIndexOf('\\n');\n if (lastNl < 0) return { batch: null, newOffset: start };\n const consumed = start + lastNl + 1;\n const rows = new Map<string, StatsRow>();\n let total = 0;\n let minTs = Infinity;\n let maxTs = -Infinity;\n for (const line of text.slice(0, lastNl).split('\\n')) {\n if (!line.trim()) continue;\n let e: SavingEntry;\n try {\n e = JSON.parse(line) as SavingEntry;\n } catch {\n continue;\n }\n const source: Source = e.source ?? 'mcp';\n const client = e.client ?? 'unknown';\n const outcome: Outcome = e.outcome ?? 'complete';\n const key = `${source}|${client}|${e.tool}|${outcome}`;\n const row = rows.get(key) ?? {\n source,\n client,\n tool: e.tool,\n outcome,\n calls: 0,\n vgTokens: 0,\n baselineTokens: 0,\n };\n row.calls++;\n row.vgTokens += e.vgTokens ?? 0;\n row.baselineTokens += e.baselineTokens ?? 0;\n rows.set(key, row);\n total++;\n if (typeof e.ts === 'number') {\n if (e.ts < minTs) minTs = e.ts;\n if (e.ts > maxTs) maxTs = e.ts;\n }\n }\n if (total === 0 || !Number.isFinite(minTs)) return { batch: null, newOffset: consumed };\n const batch: StatsBatch = {\n schemaVersion: SCHEMA_VERSION,\n installId: id,\n vgVersion: VERSION,\n os: process.platform,\n arch: process.arch,\n windowStart: new Date(minTs).toISOString(),\n windowEnd: new Date(maxTs).toISOString(),\n totalCalls: total,\n rows: [...rows.values()],\n };\n return { batch, newOffset: consumed };\n}\n\n/**\n * POST a batch to the endpoint. Never throws; returns whether it was accepted.\n * A short timeout keeps a hung endpoint from stalling the caller (e.g. shutdown).\n */\nasync function postBatch(batch: StatsBatch): Promise<boolean> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), SEND_TIMEOUT_MS);\n timer.unref?.();\n try {\n const res = await fetch(statsEndpoint(), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: JSON.stringify(batch),\n signal: controller.signal,\n });\n return res.ok;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n }\n}\n\n/**\n * Periodic + on-shutdown flusher for one serve session. Holds the install id and\n * the persisted offset so each flush reads only new ledger lines and advances the\n * offset only when the batch is confirmed sent.\n */\nexport class StatsSharer {\n private readonly id = installId();\n private offset: number;\n private flushing = false;\n\n constructor(private readonly root: string) {\n this.offset = readOffset(root);\n }\n\n /**\n * Flush any new ledger entries. Single-flight (a slow POST won't overlap the\n * next tick). Best-effort: any failure is swallowed and retried next time.\n */\n async flush(): Promise<void> {\n if (this.flushing) return;\n this.flushing = true;\n try {\n const { batch, newOffset } = buildBatch(this.root, this.offset, this.id);\n if (!batch) {\n // Nothing to send, but still advance past consumed blank/partial space.\n if (newOffset > this.offset) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n return;\n }\n const ok = await postBatch(batch);\n if (ok) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n } catch {\n /* never let sharing break serving */\n } finally {\n this.flushing = false;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engine/stats-share.ts"],"names":[],"mappings":"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","file":"chunk-Z7VH4RPO.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { cacheDir } from './cache.js';\nimport { VERSION } from '../version.js';\nimport { resolveIngestHost } from '../reporting/regions.js';\nimport type { SavingEntry, Source, Outcome } from './savings.js';\n\n/**\n * Opt-in usage-stats sharing for `vg serve --share-stats`.\n *\n * This is the ONLY path in `vg serve` that sends anything off the machine, and\n * it is off unless the operator explicitly asks for it. What we send is the\n * same counts-only ledger `vg savings` reports locally — per (source, client,\n * tool, outcome): how many calls and the vg-vs-grep token figures — plus the vg\n * version, OS/arch, and a random per-install id. We never send code, file paths,\n * question text, repo identity, or any credential. See GUARDRAILS §3.4.\n *\n * Even when the flag is passed, the universal `DO_NOT_TRACK` opt-out (or\n * `VIBGRATE_TELEMETRY=0`) wins: nothing is uploaded and no install id is ever\n * minted or persisted (see `telemetryOptOut` / `installId`).\n *\n * Design:\n * - The local ledger (savings.jsonl) is the single source of truth; the flusher\n * reads only the tail past a persisted byte offset, so a batch is sent once.\n * - Fire-and-forget with a short timeout. A network problem never blocks a tool\n * call and never throws — the offset only advances on a confirmed 2xx, so a\n * failed batch is retried on the next flush.\n * - Fully offline-safe: under `--local` the sharer is never constructed.\n */\n\n/** Payload schema version — must match the server's `mcpUsageStatsSchema`. */\nconst SCHEMA_VERSION = '1';\n/** Where the offset (and cached install id) live, per repo, beside the ledger. */\nconst OFFSET_FILE = 'stats-share.json';\n/** The machine-global anonymous install id lives here (stable across repos). */\nconst INSTALL_ID_DIR = path.join(os.homedir(), '.vibgrate');\nconst INSTALL_ID_FILE = path.join(INSTALL_ID_DIR, 'install-id');\n/** Give a flush POST a hard ceiling so a hung endpoint never stalls shutdown. */\nconst SEND_TIMEOUT_MS = 4000;\n\n/** One aggregated row of the shared batch — counts only. */\nexport interface StatsRow {\n source: Source;\n client: string;\n tool: string;\n outcome: Outcome;\n calls: number;\n vgTokens: number;\n baselineTokens: number;\n}\n\n/** The counts-only batch POSTed to the ingest endpoint. */\nexport interface StatsBatch {\n schemaVersion: string;\n installId: string;\n vgVersion: string;\n os: string;\n arch: string;\n windowStart: string;\n windowEnd: string;\n totalCalls: number;\n rows: StatsRow[];\n}\n\n/**\n * The universal opt-out (https://consoledonottrack.com) plus a tool-specific\n * alias, honoured even when `--share-stats` is passed explicitly. Pure function\n * of the environment for testability. Returns the name of the variable that\n * opted out (for the disclosure message), or null when sharing may proceed.\n */\nexport function telemetryOptOut(env: NodeJS.ProcessEnv = process.env): string | null {\n const dnt = (env.DO_NOT_TRACK ?? '').trim().toLowerCase();\n if (dnt !== '' && dnt !== '0' && dnt !== 'false') return 'DO_NOT_TRACK';\n const vt = (env.VIBGRATE_TELEMETRY ?? '').trim().toLowerCase();\n if (vt === '0' || vt === 'false' || vt === 'off') return 'VIBGRATE_TELEMETRY';\n return null;\n}\n\n/** Common CI environment markers — a CI runner is never an interactive session. */\nconst CI_ENV_VARS = [\n 'CI',\n 'GITHUB_ACTIONS',\n 'GITLAB_CI',\n 'CIRCLECI',\n 'TRAVIS',\n 'BUILDKITE',\n 'JENKINS_URL',\n 'TF_BUILD',\n] as const;\n\n/** True when running under a recognised CI system. Pure function of the env. */\nexport function isCI(env: NodeJS.ProcessEnv = process.env): boolean {\n return CI_ENV_VARS.some((v) => {\n const val = (env[v] ?? '').trim().toLowerCase();\n return val !== '' && val !== '0' && val !== 'false';\n });\n}\n\n/**\n * Read (or lazily create) the anonymous per-install id — a random UUID stored in\n * `~/.vibgrate/install-id`. It is *not* tied to the user, the repo, or any\n * account; it only lets us de-duplicate batches from the same install when\n * aggregating. If the home dir isn't writable we fall back to an ephemeral id\n * so sharing still works (it just can't be de-duplicated across restarts).\n *\n * Under an env opt-out no id is ever read or persisted (the sharing path isn't\n * reached then either — this is defence in depth), and on CI runners the id is\n * ephemeral: a persisted id on a shared/throwaway runner would be meaningless\n * for de-duplication and would leave state behind on machines we don't own.\n */\nexport function installId(env: NodeJS.ProcessEnv = process.env): string {\n if (telemetryOptOut(env) !== null || isCI(env)) return randomUuid();\n try {\n const existing = fs.readFileSync(INSTALL_ID_FILE, 'utf8').trim();\n if (isUuid(existing)) return existing;\n } catch {\n /* not created yet */\n }\n const id = randomUuid();\n try {\n fs.mkdirSync(INSTALL_ID_DIR, { recursive: true });\n fs.writeFileSync(INSTALL_ID_FILE, id + '\\n', { mode: 0o600 });\n } catch {\n /* home dir read-only — use the ephemeral id for this process */\n }\n return id;\n}\n\nfunction isUuid(s: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);\n}\n\nfunction randomUuid(): string {\n return randomUUID();\n}\n\n/** Resolve the ingest endpoint: env override wins, else the default region host. */\nexport function statsEndpoint(): string {\n const override = process.env.VIBGRATE_STATS_ENDPOINT;\n if (override && /^https?:\\/\\//.test(override)) return override;\n return `https://${resolveIngestHost()}/v1/ingest/cli-mcp-usage`;\n}\n\nfunction offsetPath(root: string): string {\n return path.join(cacheDir(root), OFFSET_FILE);\n}\n\nfunction ledgerFilePath(root: string): string {\n return path.join(cacheDir(root), 'savings.jsonl');\n}\n\nfunction readOffset(root: string): number {\n try {\n const raw = JSON.parse(fs.readFileSync(offsetPath(root), 'utf8')) as { offset?: number };\n return typeof raw.offset === 'number' && raw.offset >= 0 ? raw.offset : 0;\n } catch {\n return 0;\n }\n}\n\nfunction writeOffset(root: string, offset: number): void {\n try {\n fs.mkdirSync(cacheDir(root), { recursive: true });\n fs.writeFileSync(offsetPath(root), JSON.stringify({ offset }) + '\\n');\n } catch {\n /* best-effort; a lost offset just means one batch may re-send */\n }\n}\n\n/**\n * Aggregate the ledger entries after `fromOffset` into a counts-only batch.\n * Returns the batch (or null if there's nothing new) and the new byte offset to\n * persist once the batch is confirmed sent.\n */\nexport function buildBatch(\n root: string,\n fromOffset: number,\n id = installId(),\n): { batch: StatsBatch | null; newOffset: number } {\n const file = ledgerFilePath(root);\n let size = 0;\n try {\n size = fs.statSync(file).size;\n } catch {\n return { batch: null, newOffset: 0 };\n }\n // The ledger was truncated/recreated under us — re-read from the top.\n const start = fromOffset > size ? 0 : fromOffset;\n if (start >= size) return { batch: null, newOffset: size };\n\n let text = '';\n try {\n const fd = fs.openSync(file, 'r');\n try {\n const buf = Buffer.alloc(size - start);\n fs.readSync(fd, buf, 0, buf.length, start);\n text = buf.toString('utf8');\n } finally {\n fs.closeSync(fd);\n }\n } catch {\n return { batch: null, newOffset: fromOffset };\n }\n\n // Only whole lines are complete; a trailing partial line (mid-append) is left\n // for the next flush by rewinding the offset to the last newline.\n const lastNl = text.lastIndexOf('\\n');\n if (lastNl < 0) return { batch: null, newOffset: start };\n const consumed = start + lastNl + 1;\n const rows = new Map<string, StatsRow>();\n let total = 0;\n let minTs = Infinity;\n let maxTs = -Infinity;\n for (const line of text.slice(0, lastNl).split('\\n')) {\n if (!line.trim()) continue;\n let e: SavingEntry;\n try {\n e = JSON.parse(line) as SavingEntry;\n } catch {\n continue;\n }\n const source: Source = e.source ?? 'mcp';\n const client = e.client ?? 'unknown';\n const outcome: Outcome = e.outcome ?? 'complete';\n const key = `${source}|${client}|${e.tool}|${outcome}`;\n const row = rows.get(key) ?? {\n source,\n client,\n tool: e.tool,\n outcome,\n calls: 0,\n vgTokens: 0,\n baselineTokens: 0,\n };\n row.calls++;\n row.vgTokens += e.vgTokens ?? 0;\n row.baselineTokens += e.baselineTokens ?? 0;\n rows.set(key, row);\n total++;\n if (typeof e.ts === 'number') {\n if (e.ts < minTs) minTs = e.ts;\n if (e.ts > maxTs) maxTs = e.ts;\n }\n }\n if (total === 0 || !Number.isFinite(minTs)) return { batch: null, newOffset: consumed };\n const batch: StatsBatch = {\n schemaVersion: SCHEMA_VERSION,\n installId: id,\n vgVersion: VERSION,\n os: process.platform,\n arch: process.arch,\n windowStart: new Date(minTs).toISOString(),\n windowEnd: new Date(maxTs).toISOString(),\n totalCalls: total,\n rows: [...rows.values()],\n };\n return { batch, newOffset: consumed };\n}\n\n/**\n * POST a batch to the endpoint. Never throws; returns whether it was accepted.\n * A short timeout keeps a hung endpoint from stalling the caller (e.g. shutdown).\n */\nasync function postBatch(batch: StatsBatch): Promise<boolean> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), SEND_TIMEOUT_MS);\n timer.unref?.();\n try {\n const res = await fetch(statsEndpoint(), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: JSON.stringify(batch),\n signal: controller.signal,\n });\n return res.ok;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n }\n}\n\n/**\n * Periodic + on-shutdown flusher for one serve session. Holds the install id and\n * the persisted offset so each flush reads only new ledger lines and advances the\n * offset only when the batch is confirmed sent.\n */\nexport class StatsSharer {\n private readonly id = installId();\n private offset: number;\n private flushing = false;\n\n constructor(private readonly root: string) {\n this.offset = readOffset(root);\n }\n\n /**\n * Flush any new ledger entries. Single-flight (a slow POST won't overlap the\n * next tick). Best-effort: any failure is swallowed and retried next time.\n */\n async flush(): Promise<void> {\n if (this.flushing) return;\n this.flushing = true;\n try {\n const { batch, newOffset } = buildBatch(this.root, this.offset, this.id);\n if (!batch) {\n // Nothing to send, but still advance past consumed blank/partial space.\n if (newOffset > this.offset) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n return;\n }\n const ok = await postBatch(batch);\n if (ok) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n } catch {\n /* never let sharing break serving */\n } finally {\n this.flushing = false;\n }\n }\n}\n"]}
|
package/dist/cli.d.ts
CHANGED
|
@@ -50,7 +50,11 @@ interface BuildCmdOpts {
|
|
|
50
50
|
attestation?: string;
|
|
51
51
|
pub?: string;
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
interface RunBuildHooks {
|
|
54
|
+
/** Invoked during the parse phase (even under --quiet / non-TTY hosts). */
|
|
55
|
+
onParseProgress?: (done: number, total: number) => void;
|
|
56
|
+
}
|
|
57
|
+
declare function runBuild(paths: string[], opts: BuildCmdOpts, global: GlobalOpts, hooks?: RunBuildHooks): Promise<void>;
|
|
54
58
|
|
|
55
59
|
/** The set of registered subcommand names (kept in sync with registration). */
|
|
56
60
|
declare const KNOWN_COMMANDS: Set<string>;
|
package/dist/cli.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { loadAdvancedScanHook, baselineCommand } from './chunk-FF5ZQ6KI.js';
|
|
3
|
+
import { fetchCatalog, resolveProviders } from './chunk-BMUTNUB7.js';
|
|
4
|
+
import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-WK52LWRX.js';
|
|
5
|
+
import { telemetryOptOut, StatsSharer, statsEndpoint, isCI } from './chunk-Z7VH4RPO.js';
|
|
6
6
|
import { buildModelInstallPlan } from './chunk-WHJMS7XC.js';
|
|
7
|
-
import { runCodeSession } from './chunk-
|
|
7
|
+
import { runCodeSession } from './chunk-KLO2XBUX.js';
|
|
8
|
+
import { sha256Hex, generateKeypair, dssePae, DSSE_PAYLOAD_TYPE, keyId, registerBuild, readGlobal, applyGlobalOptions, ProgressBar, printLogo, runBuild } from './chunk-LTTVCI5C.js';
|
|
9
|
+
export { runBuild } from './chunk-LTTVCI5C.js';
|
|
8
10
|
import { disableColor, info, c, json, out } from './chunk-CT5BS56U.js';
|
|
9
|
-
import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-3NP2DO4G.js';
|
|
10
11
|
import './chunk-5I4VSBWQ.js';
|
|
11
12
|
import './chunk-IS7VTH2Q.js';
|
|
12
13
|
import { init_resolve_ollama, gatherSystemMemory, resolveOllamaBinary, hasOllamaBinary, resolve_ollama_exports } from './chunk-OWSFZQOP.js';
|
|
@@ -15,23 +16,24 @@ import { fmt, estimateModelBytes } from './chunk-7N4Y3E47.js';
|
|
|
15
16
|
import './chunk-IZDH67DX.js';
|
|
16
17
|
import { defaultProcessEndpoint, startProcessHostServer, resolveInferenceIsolation } from './chunk-EVLS2M5G.js';
|
|
17
18
|
import { clearHostSessionPool, acquireHostSession, generateOnSession, listHostSessions, hostSessionPoolSize } from './chunk-X634FZVG.js';
|
|
18
|
-
import { CONTEXT_POLICY_VERSION, computeFcsReport, renderFcsReportMarkdown, createTrajectoryCollector, runAgent } from './chunk-
|
|
19
|
+
import { CONTEXT_POLICY_VERSION, computeFcsReport, renderFcsReportMarkdown, createTrajectoryCollector, runAgent } from './chunk-3VSU7G75.js';
|
|
19
20
|
import './chunk-543E6WDJ.js';
|
|
20
|
-
import { summarizeDiffs, ScriptedProvider } from './chunk-
|
|
21
|
+
import { summarizeDiffs, ScriptedProvider } from './chunk-TRKRRX2S.js';
|
|
21
22
|
import { ensurePackage, ensureUnavailableMessage } from './chunk-REIGWTTH.js';
|
|
22
23
|
import './chunk-RGEVBSLK.js';
|
|
23
24
|
import { vgdSocketPath, vgdIsRunning, vgdRequest, vgdPidPath } from './chunk-RBIRXQR6.js';
|
|
24
25
|
import { buildIdentifierTrieFromGraph } from './chunk-5HYCB55P.js';
|
|
25
26
|
import './chunk-7AVYKZEM.js';
|
|
26
|
-
import { serveStdio, exportGraph, GraphSource, createServer, formatForExt } from './chunk-
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
27
|
+
import { serveStdio, exportGraph, GraphSource, createServer, formatForExt } from './chunk-B6S2DSBS.js';
|
|
28
|
+
import { refreshIfStale } from './chunk-5XIEVZLW.js';
|
|
29
|
+
import { CliError, ExitCode, driftCount, ASSISTANTS, detectAssistants, isAssistantInstalled, usageError, detectServeLaunch, installAssistant, writeNavigationConfig, uninstallAssistant, buildGraph, writeSnapshot, probeFreshness, discover, assistantById, SMALL_REPO_FILES, isSkippedDirName, SKIP_FILES, SKIP_DIRS } from './chunk-5IA2TA57.js';
|
|
30
|
+
import { resolveDsn, createWorkspaceDsn, writeStoredCredentials, credentialsPath, findGitRoot, ensureGitignored, gitignoreEntryForCredentials, clearStoredCredentials, parseDsn as parseDsn$1, uploadScanArtifact, dsnCommand, pushCommand, countTokens, shortestPath, pathDisconnect, testsToRun, detectRunner, coveringTests, FREE_PACK, readScanArtifact, publishPrivateLibrary, assessDocQuality, symbolsFromApi, fetchHostedDocsCached, selectForBudget, hostedBase, readStoredCredentials, projectCredentialsPath, homeCredentialsPath } from './chunk-RIWLXMMT.js';
|
|
31
|
+
import { writeDefaultConfig, parseDsn, detectVcs, computeRepoFingerprint, resolveRepositoryName, fetchScanPreflight, runCoreScan, loadConfig, prepareCompressedUpload, computeDriftScore, titleBox, projectTypeToVulnEcosystem, driftBar, gitHistoryAvailable, buildVersionTimelines, findPackageAnyEcosystem, normalizeConstraint, findVersionCrossings, versionSatisfies, PROJECT_TYPE_TO_OSV_ECOSYSTEM, fetchRiskySymbols, perDependencyDrift } from './chunk-XRN7DQGR.js';
|
|
29
32
|
import { resolveIngestHost, dashHostForIngestHost, availableRegionIds, ingestHostForRegionId } from './chunk-HTLDXEHW.js';
|
|
30
|
-
import { writeDefaultConfig, parseDsn, detectVcs, computeRepoFingerprint, resolveRepositoryName, fetchScanPreflight, runCoreScan, loadConfig, prepareCompressedUpload, computeDriftScore, titleBox, projectTypeToVulnEcosystem, driftBar, gitHistoryAvailable, buildVersionTimelines, findPackageAnyEcosystem, normalizeConstraint, findVersionCrossings, versionSatisfies, PROJECT_TYPE_TO_OSV_ECOSYSTEM, fetchRiskySymbols, perDependencyDrift } from './chunk-UVMP7DFF.js';
|
|
31
33
|
import { ensureDir, pathExists, readJsonFile, writeTextFile, writeJsonFile } from './chunk-CRAMOEBE.js';
|
|
34
|
+
import { recordCliCall, CLI_TOOL_ALIASES, savingsLedgerPath, clearSavings, readSavings, readUsage, readModelSavings, CAPSULE_RANKING_VERSION, SAVINGS_TOOLS, sanitizeClient } from './chunk-US2DAKCM.js';
|
|
32
35
|
import './chunk-IPICO2RV.js';
|
|
33
36
|
import { inventory, enrichOnline, ECOSYSTEMS, catalogPath, libDir, loadCatalog, driftFor, addLibrary, resolveLib, libId, resolveVersion, readDoc, localPackageDocs, localApiSurface } from './chunk-FHJBGPJZ.js';
|
|
34
|
-
import { recordCliCall, CLI_TOOL_ALIASES, savingsLedgerPath, clearSavings, readSavings, readUsage, readModelSavings, CAPSULE_RANKING_VERSION, SAVINGS_TOOLS, sanitizeClient } from './chunk-US2DAKCM.js';
|
|
35
37
|
import { init_cli_invocation, resolveCliInvocation, NPX_INVOCATION } from './chunk-3LSG7Z4I.js';
|
|
36
38
|
import { resolveOne } from './chunk-J7LKEB2R.js';
|
|
37
39
|
import { embeddingsCached, resolveEmbedModel, loadEmbedder, getNodeEmbeddings, queryGraphSemantic, queryGraph, unavailableMessage, countPending, indexFor, impactOf, modelCacheInfo, clearModelCache } from './chunk-EETK7S43.js';
|
|
@@ -39,14 +41,14 @@ import { discoverModels } from './chunk-CQDUBAQY.js';
|
|
|
39
41
|
import { freeBytesOnVolume, weightStoreDir, listCachedWeights, ensureWeightCached, catalogIntegrityReport } from './chunk-OV4KGXPD.js';
|
|
40
42
|
import { resolvedGrammarFiles, grammarSetVersion } from './chunk-UTNNGKKX.js';
|
|
41
43
|
import './chunk-RXP66R2E.js';
|
|
42
|
-
import { loadGraph, SCHEMA_VERSION } from './chunk-
|
|
43
|
-
import { resolveGraphPath, renderReport, loadGraphFileWithSnapshot, writeArtifacts, vibgrateDir, mapFileExists, ensureVibgrateGitignore } from './chunk-
|
|
44
|
-
import { VERSION } from './chunk-
|
|
44
|
+
import { loadGraph, SCHEMA_VERSION } from './chunk-MOLBANFB.js';
|
|
45
|
+
import { resolveGraphPath, renderReport, loadGraphFileWithSnapshot, writeArtifacts, vibgrateDir, mapFileExists, ensureVibgrateGitignore } from './chunk-AVCBKQKA.js';
|
|
46
|
+
import { VERSION } from './chunk-DEKGSQHL.js';
|
|
45
47
|
import { cacheDir, serializeGraph, stableStringify } from './chunk-ZKNB4YH4.js';
|
|
46
48
|
import './chunk-BWPBB45M.js';
|
|
47
49
|
import { canonicalize, hashString, hashBytes } from './chunk-JFGYT6BI.js';
|
|
48
50
|
import './chunk-BPF3YX2U.js';
|
|
49
|
-
import { pathExists as pathExists$1, parseExcludePatterns } from './chunk-
|
|
51
|
+
import { pathExists as pathExists$1, parseExcludePatterns } from './chunk-DT4KIVRI.js';
|
|
50
52
|
import { __toCommonJS } from './chunk-Z6ZWNWWR.js';
|
|
51
53
|
import * as fs7 from 'fs';
|
|
52
54
|
import fs7__default, { realpathSync } from 'fs';
|
|
@@ -1707,7 +1709,7 @@ function manifestHash(root2) {
|
|
|
1707
1709
|
for (const entry of entries) {
|
|
1708
1710
|
const abs = path37.join(dir, entry.name);
|
|
1709
1711
|
if (entry.isDirectory()) {
|
|
1710
|
-
if (
|
|
1712
|
+
if (isSkippedDirName(entry.name)) continue;
|
|
1711
1713
|
walk2(abs);
|
|
1712
1714
|
continue;
|
|
1713
1715
|
}
|
|
@@ -1729,7 +1731,7 @@ function isDependencyFile(root2, filePath) {
|
|
|
1729
1731
|
const rel = path37.relative(path37.resolve(root2), path37.resolve(filePath));
|
|
1730
1732
|
if (rel === "" || rel.startsWith("..") || path37.isAbsolute(rel)) return false;
|
|
1731
1733
|
const parts = rel.split(path37.sep);
|
|
1732
|
-
if (parts.slice(0, -1).some((dir) =>
|
|
1734
|
+
if (parts.slice(0, -1).some((dir) => isSkippedDirName(dir))) return false;
|
|
1733
1735
|
const base = parts[parts.length - 1].toLowerCase();
|
|
1734
1736
|
return isManifest(filePath) || SKIP_FILES.has(base);
|
|
1735
1737
|
}
|
|
@@ -2220,10 +2222,14 @@ async function scanWorkspaceVulns(targets, opts = { offline: false }) {
|
|
|
2220
2222
|
else if (r.source === "error") anyError = true;
|
|
2221
2223
|
const locations = t.locations.length ? t.locations : t.file ? [{ file: t.file, line: t.line ?? null }] : [];
|
|
2222
2224
|
const seenIds = /* @__PURE__ */ new Set();
|
|
2225
|
+
const seenCves = /* @__PURE__ */ new Set();
|
|
2223
2226
|
for (const v of r.vulns) {
|
|
2224
2227
|
if (seenIds.has(v.id)) continue;
|
|
2228
|
+
const cveKeys = (v.cves ?? []).map((c2) => c2.toUpperCase()).filter(Boolean);
|
|
2229
|
+
if (cveKeys.length && cveKeys.every((c2) => seenCves.has(c2))) continue;
|
|
2225
2230
|
seenIds.add(v.id);
|
|
2226
|
-
const
|
|
2231
|
+
for (const c2 of cveKeys) seenCves.add(c2);
|
|
2232
|
+
const kevHit = cveKeys.some((c2) => kev.cves.has(c2));
|
|
2227
2233
|
findings.push({
|
|
2228
2234
|
package: t.package,
|
|
2229
2235
|
version: t.version,
|
|
@@ -2482,7 +2488,7 @@ var VibgrateLanguageServer = class {
|
|
|
2482
2488
|
rootPath: a.rootPath,
|
|
2483
2489
|
scannedAt: a.timestamp,
|
|
2484
2490
|
...delta !== void 0 ? { delta } : {},
|
|
2485
|
-
...buildBreakdown(
|
|
2491
|
+
...buildBreakdown(this.opts.root, a.projects ?? []) ? { breakdown: buildBreakdown(this.opts.root, a.projects ?? []) } : {},
|
|
2486
2492
|
...buildEolHorizon(a.projects ?? []) ? { eolHorizon: buildEolHorizon(a.projects ?? []) } : {},
|
|
2487
2493
|
...buildProjectRefs(this.opts.root, a.projects ?? []) ? { projects: buildProjectRefs(this.opts.root, a.projects ?? []) } : {}
|
|
2488
2494
|
};
|
|
@@ -2790,7 +2796,11 @@ function isPrunedWorkspacePath(relPath) {
|
|
|
2790
2796
|
if (!relPath || relPath === "." || relPath === "") return false;
|
|
2791
2797
|
const parts = relPath.split(/[/\\]/).filter(Boolean);
|
|
2792
2798
|
if (parts.includes(".claude")) return true;
|
|
2793
|
-
return parts.some((p) =>
|
|
2799
|
+
return parts.some((p) => {
|
|
2800
|
+
if (SKIP_DIRS.has(p)) return true;
|
|
2801
|
+
if (p.startsWith(".venv") || p.startsWith("venv-") || p === "site-packages") return true;
|
|
2802
|
+
return false;
|
|
2803
|
+
});
|
|
2794
2804
|
}
|
|
2795
2805
|
function pruneArtifactProjects(a) {
|
|
2796
2806
|
const projects = (a.projects ?? []).filter(
|
|
@@ -2814,22 +2824,34 @@ function projectByPath(a, projectPath) {
|
|
|
2814
2824
|
}
|
|
2815
2825
|
function buildProjectRefs(rootDir, projects) {
|
|
2816
2826
|
if (projects.length === 0) return void 0;
|
|
2817
|
-
|
|
2827
|
+
const byPath = /* @__PURE__ */ new Map();
|
|
2828
|
+
for (const p of projects) {
|
|
2818
2829
|
const rel = p.path === "" ? "." : p.path;
|
|
2819
|
-
const
|
|
2830
|
+
const prev = byPath.get(rel);
|
|
2831
|
+
if (!prev) {
|
|
2832
|
+
byPath.set(rel, p);
|
|
2833
|
+
continue;
|
|
2834
|
+
}
|
|
2835
|
+
if (!prev.drift && p.drift) byPath.set(rel, p);
|
|
2836
|
+
}
|
|
2837
|
+
const refs = [];
|
|
2838
|
+
for (const [rel, p] of byPath) {
|
|
2839
|
+
if (!p.drift) continue;
|
|
2820
2840
|
const lockfilePath = lockfileRelativePath(rootDir, p);
|
|
2821
|
-
|
|
2841
|
+
refs.push({
|
|
2822
2842
|
path: rel,
|
|
2823
|
-
|
|
2843
|
+
// Full relative path for display/identity; package name alone collides
|
|
2844
|
+
// across nested fixtures (e.g. two "mcp" leaves).
|
|
2845
|
+
name: rel,
|
|
2824
2846
|
manifestPath: manifestRelativePath(p),
|
|
2825
2847
|
...lockfilePath ? { lockfilePath } : {},
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2848
|
+
score: p.drift.score,
|
|
2849
|
+
band: p.drift.riskLevel ?? "low",
|
|
2850
|
+
mode: p.drift.mode ?? "verified"
|
|
2851
|
+
});
|
|
2852
|
+
}
|
|
2853
|
+
refs.sort((a, b) => a.path.localeCompare(b.path));
|
|
2854
|
+
return refs.length > 0 ? refs : void 0;
|
|
2833
2855
|
}
|
|
2834
2856
|
function projectForFile(root2, a, filePath) {
|
|
2835
2857
|
const dir = path37.dirname(path37.resolve(filePath));
|
|
@@ -2878,7 +2900,7 @@ function scoreForProject(rootDir, a, proj) {
|
|
|
2878
2900
|
counts: { behind, eol, unmaintained, total },
|
|
2879
2901
|
rootPath: proj.path === "" ? "." : proj.path,
|
|
2880
2902
|
scannedAt: a.timestamp,
|
|
2881
|
-
...buildBreakdown(
|
|
2903
|
+
...buildBreakdown(rootDir, [proj]) ? { breakdown: buildBreakdown(rootDir, [proj]) } : {},
|
|
2882
2904
|
...buildEolHorizon([proj]) ? { eolHorizon: buildEolHorizon([proj]) } : {},
|
|
2883
2905
|
...buildProjectRefs(rootDir, a.projects ?? []) ? { projects: buildProjectRefs(rootDir, a.projects ?? []) } : {}
|
|
2884
2906
|
};
|
|
@@ -2909,17 +2931,52 @@ function bandForScore(n) {
|
|
|
2909
2931
|
if (n <= 60) return "moderate";
|
|
2910
2932
|
return "high";
|
|
2911
2933
|
}
|
|
2912
|
-
function buildBreakdown(
|
|
2934
|
+
function buildBreakdown(rootDir, projects) {
|
|
2913
2935
|
const byPkg = /* @__PURE__ */ new Map();
|
|
2914
2936
|
for (const p of projects) {
|
|
2937
|
+
const relManifest = manifestRelativePath(p);
|
|
2938
|
+
if (isPrunedWorkspacePath(p.path) || isPrunedWorkspacePath(relManifest)) continue;
|
|
2915
2939
|
const ecosystem = osvEcosystem(p.type);
|
|
2940
|
+
const absManifest = path37.resolve(rootDir, relManifest);
|
|
2941
|
+
let text = null;
|
|
2942
|
+
try {
|
|
2943
|
+
if (fs7.existsSync(absManifest)) text = fs7.readFileSync(absManifest, "utf8");
|
|
2944
|
+
} catch {
|
|
2945
|
+
text = null;
|
|
2946
|
+
}
|
|
2947
|
+
const kind = manifestKind(absManifest);
|
|
2916
2948
|
for (const d of p.dependencies ?? []) {
|
|
2917
|
-
|
|
2949
|
+
let line = null;
|
|
2950
|
+
if (text && kind !== "unknown") {
|
|
2951
|
+
const l = findPackageLine(text, d.package, kind);
|
|
2952
|
+
if (l >= 0) line = l + 1;
|
|
2953
|
+
}
|
|
2954
|
+
const loc = { file: relManifest, line };
|
|
2955
|
+
const existing = byPkg.get(d.package);
|
|
2956
|
+
if (!existing) {
|
|
2957
|
+
byPkg.set(d.package, { row: d, ecosystem, locations: [loc] });
|
|
2958
|
+
continue;
|
|
2959
|
+
}
|
|
2960
|
+
if (!existing.locations.some((x) => x.file === loc.file && x.line === loc.line)) {
|
|
2961
|
+
existing.locations.push(loc);
|
|
2962
|
+
}
|
|
2963
|
+
const prev = perDependencyDrift(existing.row, {
|
|
2964
|
+
unsupported: existing.row.unsupported === true,
|
|
2965
|
+
abandoned: existing.row.abandoned === true
|
|
2966
|
+
});
|
|
2967
|
+
const next2 = perDependencyDrift(d, {
|
|
2968
|
+
unsupported: d.unsupported === true,
|
|
2969
|
+
abandoned: d.abandoned === true
|
|
2970
|
+
});
|
|
2971
|
+
if (!next2.excluded && (prev.excluded || next2.drift > prev.drift)) {
|
|
2972
|
+
existing.row = d;
|
|
2973
|
+
if (ecosystem) existing.ecosystem = ecosystem;
|
|
2974
|
+
}
|
|
2918
2975
|
}
|
|
2919
2976
|
}
|
|
2920
2977
|
if (byPkg.size === 0) return void 0;
|
|
2921
2978
|
const items = [];
|
|
2922
|
-
for (const [, { row, ecosystem }] of byPkg) {
|
|
2979
|
+
for (const [, { row, ecosystem, locations }] of byPkg) {
|
|
2923
2980
|
const scored = perDependencyDrift(row, {
|
|
2924
2981
|
unsupported: row.unsupported === true,
|
|
2925
2982
|
abandoned: row.abandoned === true
|
|
@@ -2939,7 +2996,8 @@ function buildBreakdown(_drift, projects) {
|
|
|
2939
2996
|
mode: scored.mode,
|
|
2940
2997
|
unsupported: scored.unsupported || row.unsupported === true,
|
|
2941
2998
|
abandoned: scored.flags.includes("abandoned-floor") || row.abandoned === true,
|
|
2942
|
-
flags: scored.flags
|
|
2999
|
+
flags: scored.flags,
|
|
3000
|
+
locations
|
|
2943
3001
|
});
|
|
2944
3002
|
}
|
|
2945
3003
|
items.sort((a, b) => b.drift - a.drift || a.package.localeCompare(b.package));
|
|
@@ -3225,7 +3283,7 @@ function hoverMarkdown(dep, contribution) {
|
|
|
3225
3283
|
majorsBehind: dep.majorsBehind ?? 0
|
|
3226
3284
|
});
|
|
3227
3285
|
const explainUri = commandUri("vibgrate.explain", { package: dep.package });
|
|
3228
|
-
lines.push(`[
|
|
3286
|
+
lines.push(`[Fix \u2192](${routeFixUri}) \xB7 [Explain this drift](${explainUri})`);
|
|
3229
3287
|
}
|
|
3230
3288
|
lines.push("");
|
|
3231
3289
|
lines.push("---");
|
|
@@ -3298,12 +3356,24 @@ function registerInstall(program) {
|
|
|
3298
3356
|
return;
|
|
3299
3357
|
}
|
|
3300
3358
|
if (global.json) {
|
|
3301
|
-
json(
|
|
3359
|
+
json(
|
|
3360
|
+
ASSISTANTS.map((a) => ({
|
|
3361
|
+
id: a.id,
|
|
3362
|
+
label: a.label,
|
|
3363
|
+
mcp: !!a.mcp,
|
|
3364
|
+
skill: !!a.skill,
|
|
3365
|
+
nudge: !!a.nudge,
|
|
3366
|
+
installed: isAssistantInstalled(a, root2)
|
|
3367
|
+
}))
|
|
3368
|
+
);
|
|
3302
3369
|
} else {
|
|
3303
3370
|
info(`${c.cyan("vg install")} \xB7 supported assistants`);
|
|
3304
3371
|
const pad4 = Math.max(...ASSISTANTS.map((a) => a.id.length)) + 2;
|
|
3305
3372
|
for (const a of ASSISTANTS) {
|
|
3306
|
-
|
|
3373
|
+
const on = isAssistantInstalled(a, root2) ? c.green("on") : c.dim("off");
|
|
3374
|
+
info(
|
|
3375
|
+
` ${c.bold(a.id.padEnd(pad4))} ${a.label} ${on} ${c.dim(`mcp:${a.mcp ? "\u2713" : "\u2014"} skill:${a.skill ? "\u2713" : "\u2014"} nudge:${a.nudge ? "\u2713" : "\u2014"}`)}`
|
|
3376
|
+
);
|
|
3307
3377
|
}
|
|
3308
3378
|
}
|
|
3309
3379
|
return;
|
|
@@ -6289,7 +6359,7 @@ function registerCode(program) {
|
|
|
6289
6359
|
try {
|
|
6290
6360
|
const { parseMode: parseMode2, resolveMode: resolveMode2, readOrchestratorState: readOrchestratorState2, activePin: activePin2 } = await import('./model-orchestrator-LHYPJBFH.js');
|
|
6291
6361
|
const { gatherSystemMemory: gatherSystemMemory2 } = await import('./local-runtime-2ED33KK6.js');
|
|
6292
|
-
const { loadGraph: loadGraph2 } = await import('./load-
|
|
6362
|
+
const { loadGraph: loadGraph2 } = await import('./load-WA53B3GW.js');
|
|
6293
6363
|
const state = readOrchestratorState2();
|
|
6294
6364
|
const mode = parseMode2(modeFlag) ?? state.defaultMode ?? void 0;
|
|
6295
6365
|
const pin = mode ? activePin2(mode, state) : null;
|
|
@@ -6373,7 +6443,7 @@ function registerCode(program) {
|
|
|
6373
6443
|
if (!(process.stdin.isTTY && process.stdout.isTTY)) {
|
|
6374
6444
|
throw usageError('say what to change, e.g. `vg code "add a --timeout flag to the scan command"` (guided mode needs an interactive terminal)');
|
|
6375
6445
|
}
|
|
6376
|
-
const { runInteractive } = await import('./interactive-
|
|
6446
|
+
const { runInteractive } = await import('./interactive-QWT7ERXJ.js');
|
|
6377
6447
|
await runInteractive(
|
|
6378
6448
|
rootOf(global),
|
|
6379
6449
|
global,
|
|
@@ -6402,6 +6472,40 @@ function registerCode(program) {
|
|
|
6402
6472
|
return;
|
|
6403
6473
|
}
|
|
6404
6474
|
if (!instruction) throw usageError('say what to change, e.g. `vg code "add a --timeout flag to the scan command"`');
|
|
6475
|
+
{
|
|
6476
|
+
const { ensureCodeMap } = await import('./ensure-map-UQL7SM34.js');
|
|
6477
|
+
const mapRoot = rootOf(global);
|
|
6478
|
+
try {
|
|
6479
|
+
await ensureCodeMap(mapRoot, global, {
|
|
6480
|
+
onProgress: (p) => {
|
|
6481
|
+
if (opts.streamJson) {
|
|
6482
|
+
process.stdout.write(
|
|
6483
|
+
JSON.stringify({
|
|
6484
|
+
event: "event",
|
|
6485
|
+
type: "map_build",
|
|
6486
|
+
phase: p.phase,
|
|
6487
|
+
message: p.message,
|
|
6488
|
+
...p.pct != null ? { pct: p.pct } : {}
|
|
6489
|
+
}) + "\n"
|
|
6490
|
+
);
|
|
6491
|
+
return;
|
|
6492
|
+
}
|
|
6493
|
+
if (!global.json && !global.quiet && (p.phase === "start" || p.phase === "done")) {
|
|
6494
|
+
info(c.dim(`vg code \xB7 ${p.message}`));
|
|
6495
|
+
}
|
|
6496
|
+
}
|
|
6497
|
+
});
|
|
6498
|
+
} catch (e) {
|
|
6499
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
6500
|
+
if (opts.streamJson) {
|
|
6501
|
+
process.stdout.write(
|
|
6502
|
+
JSON.stringify({ event: "error", message: `Could not build the code map: ${msg}` }) + "\n"
|
|
6503
|
+
);
|
|
6504
|
+
return;
|
|
6505
|
+
}
|
|
6506
|
+
throw e;
|
|
6507
|
+
}
|
|
6508
|
+
}
|
|
6405
6509
|
const { root: root2, graph } = requireGraph(global);
|
|
6406
6510
|
let mockReply;
|
|
6407
6511
|
if (opts.mock) {
|
|
@@ -6454,20 +6558,20 @@ function registerCode(program) {
|
|
|
6454
6558
|
process.stdout.write(JSON.stringify(line) + "\n");
|
|
6455
6559
|
};
|
|
6456
6560
|
try {
|
|
6457
|
-
const { RunOutcomeRecorder, newOneShotRunId, turnRunId } = await import('./run-outcome-
|
|
6561
|
+
const { RunOutcomeRecorder, newOneShotRunId, turnRunId } = await import('./run-outcome-J2IDIVYI.js');
|
|
6458
6562
|
const primarySlug = route.providers[0]?.model.includes("/") ? route.providers[0].model.split("/")[0] : route.providers[0]?.id;
|
|
6459
|
-
const { runCodeStreamJson, parseHostMessage } = await import('./stream-json-
|
|
6460
|
-
const { nodeCodeFs } = await import('./session-
|
|
6563
|
+
const { runCodeStreamJson, parseHostMessage } = await import('./stream-json-TSGYC2MQ.js');
|
|
6564
|
+
const { nodeCodeFs } = await import('./session-L7SJNE55.js');
|
|
6461
6565
|
const readline5 = await import('readline');
|
|
6462
6566
|
const child = await import('child_process');
|
|
6463
6567
|
const { loadOrDiscoverFederation } = await import('./federation-MDQPO3PW.js');
|
|
6464
6568
|
const { resolveExecutionEnv } = await import('./execution-env-4MS5AYAN.js');
|
|
6465
6569
|
const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-ELWF3Z6H.js');
|
|
6466
|
-
const { startCodeRuntimeSession } = await import('./runtime-session-
|
|
6570
|
+
const { startCodeRuntimeSession } = await import('./runtime-session-52P2Y5LX.js');
|
|
6467
6571
|
const { resolveGraphBackend } = await import('./graph-backend-G5Y6QQV4.js');
|
|
6468
6572
|
const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
|
|
6469
6573
|
const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
|
|
6470
|
-
const { vgdRequest: vgdRequest2 } = await import('./vgd-
|
|
6574
|
+
const { vgdRequest: vgdRequest2 } = await import('./vgd-PNR7UKLL.js');
|
|
6471
6575
|
const federation = loadOrDiscoverFederation(root2);
|
|
6472
6576
|
const modelProfile = mergeModelExecutionProfile(
|
|
6473
6577
|
resolveModelExecutionProfile({
|
|
@@ -6525,7 +6629,7 @@ ${res.stderr}` : ""),
|
|
|
6525
6629
|
exitCode: res.status ?? 1
|
|
6526
6630
|
};
|
|
6527
6631
|
};
|
|
6528
|
-
const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-
|
|
6632
|
+
const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-IFAXEQMZ.js');
|
|
6529
6633
|
const vgBuiltin = createVgBuiltinMcpTools({
|
|
6530
6634
|
getGraph: () => graph,
|
|
6531
6635
|
root: root2,
|
|
@@ -6599,7 +6703,8 @@ ${res.stderr}` : ""),
|
|
|
6599
6703
|
capsule,
|
|
6600
6704
|
files: opts.file.length ? opts.file : void 0,
|
|
6601
6705
|
worktreeOverlay: true,
|
|
6602
|
-
|
|
6706
|
+
// Full coding agent: free discovery by default. Capsule is context only.
|
|
6707
|
+
advancedMode: true,
|
|
6603
6708
|
externalTools,
|
|
6604
6709
|
attribution: {
|
|
6605
6710
|
client: "vg-code",
|
|
@@ -6612,15 +6717,15 @@ ${res.stderr}` : ""),
|
|
|
6612
6717
|
};
|
|
6613
6718
|
try {
|
|
6614
6719
|
if (opts.session) {
|
|
6615
|
-
const { runCodeStreamJsonSession } = await import('./stream-json-
|
|
6616
|
-
const { runAgent: runAgent2 } = await import('./agent-
|
|
6720
|
+
const { runCodeStreamJsonSession } = await import('./stream-json-TSGYC2MQ.js');
|
|
6721
|
+
const { runAgent: runAgent2 } = await import('./agent-6XOI7RVW.js');
|
|
6617
6722
|
const {
|
|
6618
6723
|
loadLatestSession,
|
|
6619
6724
|
newSession,
|
|
6620
6725
|
recordTask,
|
|
6621
6726
|
saveSession,
|
|
6622
6727
|
summarizeSession
|
|
6623
|
-
} = await import('./session-store-
|
|
6728
|
+
} = await import('./session-store-SQECEXUU.js');
|
|
6624
6729
|
const resumedRecord = opts.continue ? loadLatestSession(root2) : void 0;
|
|
6625
6730
|
let record = resumedRecord ?? newSession(
|
|
6626
6731
|
`s${Date.now().toString(36)}`,
|
|
@@ -6761,17 +6866,17 @@ ${res.stderr}` : ""),
|
|
|
6761
6866
|
if (!autonomous && !tty) {
|
|
6762
6867
|
throw usageError("the agent approves each edit/command \u2014 run in a terminal to approve interactively, or pass --auto to run autonomously (or --single for a one-shot diff).");
|
|
6763
6868
|
}
|
|
6764
|
-
const { agentTask } = await import('./interactive-
|
|
6765
|
-
const { nodeCodeFs } = await import('./session-
|
|
6869
|
+
const { agentTask } = await import('./interactive-QWT7ERXJ.js');
|
|
6870
|
+
const { nodeCodeFs } = await import('./session-L7SJNE55.js');
|
|
6766
6871
|
const { TtyPrompter } = await import('./ui-K7D3BCHD.js');
|
|
6767
6872
|
let priorSummary;
|
|
6768
6873
|
if (opts.continue) {
|
|
6769
|
-
const { loadLatestSession, summarizeSession } = await import('./session-store-
|
|
6874
|
+
const { loadLatestSession, summarizeSession } = await import('./session-store-SQECEXUU.js');
|
|
6770
6875
|
const prev = loadLatestSession(root2);
|
|
6771
6876
|
if (prev) priorSummary = summarizeSession(prev);
|
|
6772
6877
|
}
|
|
6773
6878
|
const prompter = tty ? new TtyPrompter() : void 0;
|
|
6774
|
-
const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-
|
|
6879
|
+
const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-IFAXEQMZ.js');
|
|
6775
6880
|
const vgBuiltin = createVgBuiltinMcpTools({
|
|
6776
6881
|
getGraph: () => graph,
|
|
6777
6882
|
root: root2,
|
|
@@ -6795,11 +6900,11 @@ ${res.stderr}` : ""),
|
|
|
6795
6900
|
const { loadFederation } = await import('./federation-MDQPO3PW.js');
|
|
6796
6901
|
const { resolveExecutionEnv } = await import('./execution-env-4MS5AYAN.js');
|
|
6797
6902
|
const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-ELWF3Z6H.js');
|
|
6798
|
-
const { startCodeRuntimeSession } = await import('./runtime-session-
|
|
6903
|
+
const { startCodeRuntimeSession } = await import('./runtime-session-52P2Y5LX.js');
|
|
6799
6904
|
const { resolveGraphBackend } = await import('./graph-backend-G5Y6QQV4.js');
|
|
6800
6905
|
const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
|
|
6801
6906
|
const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
|
|
6802
|
-
const { vgdRequest: vgdRequest2 } = await import('./vgd-
|
|
6907
|
+
const { vgdRequest: vgdRequest2 } = await import('./vgd-PNR7UKLL.js');
|
|
6803
6908
|
const federation = loadFederation(root2);
|
|
6804
6909
|
const modelProfile = mergeModelExecutionProfile(
|
|
6805
6910
|
resolveModelExecutionProfile({
|
|
@@ -7689,7 +7794,7 @@ function registerDaemon(program) {
|
|
|
7689
7794
|
throw new CliError(loaded.error, ExitCode.NOT_FOUND);
|
|
7690
7795
|
}
|
|
7691
7796
|
if (!loaded.ok) {
|
|
7692
|
-
const { loadGraph: loadGraph2 } = await import('./load-
|
|
7797
|
+
const { loadGraph: loadGraph2 } = await import('./load-WA53B3GW.js');
|
|
7693
7798
|
const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
|
|
7694
7799
|
const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
|
|
7695
7800
|
const graph = loadGraph2(root2, global.graph);
|
|
@@ -8094,7 +8199,7 @@ var initCommand = new Command("init").description("Initialize vibgrate in a proj
|
|
|
8094
8199
|
console.log(chalk7.green("\u2714") + ` Created ${chalk7.bold("vibgrate.config.ts")}`);
|
|
8095
8200
|
}
|
|
8096
8201
|
if (opts.baseline) {
|
|
8097
|
-
const { runBaseline } = await import('./baseline-
|
|
8202
|
+
const { runBaseline } = await import('./baseline-PY6TETA5.js');
|
|
8098
8203
|
await runBaseline(rootDir);
|
|
8099
8204
|
}
|
|
8100
8205
|
console.log("");
|