@vibgrate/cli 2026.728.3 → 2026.728.4

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.
Files changed (131) hide show
  1. package/dist/baseline-QD4HVNVJ.js +8 -0
  2. package/dist/{baseline-PPZJBYAJ.js.map → baseline-QD4HVNVJ.js.map} +1 -1
  3. package/dist/{chunk-A2IYFNCQ.js → chunk-2ZHWF7C6.js} +227 -19
  4. package/dist/chunk-2ZHWF7C6.js.map +1 -0
  5. package/dist/{chunk-UZJS7GMK.js → chunk-3LSG7Z4I.js} +10 -6
  6. package/dist/chunk-3LSG7Z4I.js.map +1 -0
  7. package/dist/{chunk-R2QNFXE5.js → chunk-DBOT2ELH.js} +3 -3
  8. package/dist/{chunk-R2QNFXE5.js.map → chunk-DBOT2ELH.js.map} +1 -1
  9. package/dist/{chunk-6UK6QPTR.js → chunk-EETK7S43.js} +137 -34
  10. package/dist/chunk-EETK7S43.js.map +1 -0
  11. package/dist/{chunk-JRAGO6OB.js → chunk-EVWW3BPM.js} +4 -4
  12. package/dist/{chunk-JRAGO6OB.js.map → chunk-EVWW3BPM.js.map} +1 -1
  13. package/dist/chunk-G4HTI4ZM.js +1537 -0
  14. package/dist/chunk-G4HTI4ZM.js.map +1 -0
  15. package/dist/{chunk-VYGEOOLY.js → chunk-HY2RVURA.js} +3 -3
  16. package/dist/{chunk-VYGEOOLY.js.map → chunk-HY2RVURA.js.map} +1 -1
  17. package/dist/chunk-IPICO2RV.js +789 -0
  18. package/dist/chunk-IPICO2RV.js.map +1 -0
  19. package/dist/{chunk-6GRLZ4Z2.js → chunk-LYDH2PHN.js} +8 -8
  20. package/dist/{chunk-6GRLZ4Z2.js.map → chunk-LYDH2PHN.js.map} +1 -1
  21. package/dist/{chunk-6UQMXIAG.js → chunk-OWSFZQOP.js} +62 -12
  22. package/dist/chunk-OWSFZQOP.js.map +1 -0
  23. package/dist/{chunk-WH2N22S3.js → chunk-PRGCCW7D.js} +4 -4
  24. package/dist/{chunk-WH2N22S3.js.map → chunk-PRGCCW7D.js.map} +1 -1
  25. package/dist/{chunk-3BIRGSRS.js → chunk-RCBMY7CR.js} +11 -11
  26. package/dist/{chunk-3BIRGSRS.js.map → chunk-RCBMY7CR.js.map} +1 -1
  27. package/dist/{chunk-OSD546W7.js → chunk-REIGWTTH.js} +5 -3
  28. package/dist/chunk-REIGWTTH.js.map +1 -0
  29. package/dist/{chunk-B3YUO3NW.js → chunk-RYNAK4LK.js} +3 -3
  30. package/dist/{chunk-B3YUO3NW.js.map → chunk-RYNAK4LK.js.map} +1 -1
  31. package/dist/{chunk-YF43FOPP.js → chunk-RZEXHDCF.js} +33 -14
  32. package/dist/chunk-RZEXHDCF.js.map +1 -0
  33. package/dist/chunk-SA4BMEU6.js +2184 -0
  34. package/dist/chunk-SA4BMEU6.js.map +1 -0
  35. package/dist/{chunk-HK3AWUXH.js → chunk-TCJTQGAO.js} +3 -3
  36. package/dist/{chunk-HK3AWUXH.js.map → chunk-TCJTQGAO.js.map} +1 -1
  37. package/dist/{chunk-ZBTY6VV4.js → chunk-US2DAKCM.js} +15 -5
  38. package/dist/chunk-US2DAKCM.js.map +1 -0
  39. package/dist/{chunk-ON25BX6T.js → chunk-UTNNGKKX.js} +3 -3
  40. package/dist/{chunk-ON25BX6T.js.map → chunk-UTNNGKKX.js.map} +1 -1
  41. package/dist/chunk-WDJNUC6V.js +3059 -0
  42. package/dist/chunk-WDJNUC6V.js.map +1 -0
  43. package/dist/{chunk-SZSNPXSW.js → chunk-WHJMS7XC.js} +3 -3
  44. package/dist/{chunk-SZSNPXSW.js.map → chunk-WHJMS7XC.js.map} +1 -1
  45. package/dist/chunk-Z6ZWNWWR.js +30 -0
  46. package/dist/{chunk-DGUM43GV.js.map → chunk-Z6ZWNWWR.js.map} +1 -1
  47. package/dist/{chunk-VI4ITXHQ.js → chunk-ZU7VD4QL.js} +7 -6
  48. package/dist/chunk-ZU7VD4QL.js.map +1 -0
  49. package/dist/cli.js +158 -71
  50. package/dist/cli.js.map +1 -1
  51. package/dist/{execution-env-ZU45JZ4G.js → execution-env-4MS5AYAN.js} +3 -3
  52. package/dist/{execution-env-ZU45JZ4G.js.map → execution-env-4MS5AYAN.js.map} +1 -1
  53. package/dist/{federation-SZWZIFZ7.js → federation-MDQPO3PW.js} +3 -3
  54. package/dist/{federation-SZWZIFZ7.js.map → federation-MDQPO3PW.js.map} +1 -1
  55. package/dist/{fs-O5IQYXHO.js → fs-4G5A65KS.js} +3 -3
  56. package/dist/fs-4G5A65KS.js.map +1 -0
  57. package/dist/{fs-B5HZ2MIU.js → fs-6JKZNQ3U.js} +3 -3
  58. package/dist/fs-6JKZNQ3U.js.map +1 -0
  59. package/dist/{git-ref-XDXB6JP5.js → git-ref-RSRAN4OH.js} +3 -3
  60. package/dist/{git-ref-XDXB6JP5.js.map → git-ref-RSRAN4OH.js.map} +1 -1
  61. package/dist/{graph-backend-UTOL3SHE.js → graph-backend-GBL33GMW.js} +5 -5
  62. package/dist/{graph-backend-UTOL3SHE.js.map → graph-backend-GBL33GMW.js.map} +1 -1
  63. package/dist/index.d.ts +3 -2
  64. package/dist/index.js +12 -10
  65. package/dist/index.js.map +1 -1
  66. package/dist/{interactive-OCWQ326U.js → interactive-32LSIBRG.js} +45 -24
  67. package/dist/interactive-32LSIBRG.js.map +1 -0
  68. package/dist/{llm-host-XYBT4267.js → llm-host-5RE34322.js} +3 -3
  69. package/dist/{llm-host-XYBT4267.js.map → llm-host-5RE34322.js.map} +1 -1
  70. package/dist/load-SEFJA3M5.js +8 -0
  71. package/dist/{load-QPOWQD7C.js.map → load-SEFJA3M5.js.map} +1 -1
  72. package/dist/local-runtime-2ED33KK6.js +6 -0
  73. package/dist/{local-runtime-5O2NN3GA.js.map → local-runtime-2ED33KK6.js.map} +1 -1
  74. package/dist/mcp-tools-KAJS34TN.js +4 -0
  75. package/dist/{mcp-tools-I7JK3S2M.js.map → mcp-tools-KAJS34TN.js.map} +1 -1
  76. package/dist/{model-execution-profile-TFBKCNJG.js → model-execution-profile-ELWF3Z6H.js} +3 -3
  77. package/dist/{model-execution-profile-TFBKCNJG.js.map → model-execution-profile-ELWF3Z6H.js.map} +1 -1
  78. package/dist/model-manager-GJ2YSTSK.js +10 -0
  79. package/dist/{model-manager-LB54VSV7.js.map → model-manager-GJ2YSTSK.js.map} +1 -1
  80. package/dist/{model-orchestrator-4M5FG6MN.js → model-orchestrator-LHYPJBFH.js} +3 -3
  81. package/dist/{model-orchestrator-4M5FG6MN.js.map → model-orchestrator-LHYPJBFH.js.map} +1 -1
  82. package/dist/parse-worker.js +2 -2
  83. package/dist/{paths-2RAH3GME.js → paths-62AKTFSR.js} +3 -3
  84. package/dist/{paths-2RAH3GME.js.map → paths-62AKTFSR.js.map} +1 -1
  85. package/dist/{resolve-gguf-4AFRN4CP.js → resolve-gguf-SDIYGGI6.js} +3 -3
  86. package/dist/{resolve-gguf-4AFRN4CP.js.map → resolve-gguf-SDIYGGI6.js.map} +1 -1
  87. package/dist/{runtime-session-EJQZXANB.js → runtime-session-4IACVDSY.js} +7 -7
  88. package/dist/{runtime-session-EJQZXANB.js.map → runtime-session-4IACVDSY.js.map} +1 -1
  89. package/dist/session-2JT4AUZT.js +13 -0
  90. package/dist/{session-ZJGENHKX.js.map → session-2JT4AUZT.js.map} +1 -1
  91. package/dist/session-store-O4XPXKOV.js +4 -0
  92. package/dist/{session-store-WFBX7HXL.js.map → session-store-O4XPXKOV.js.map} +1 -1
  93. package/dist/{sql-extract-JELDZA6W.js → sql-extract-6UJOLJDL.js} +3 -3
  94. package/dist/{sql-extract-JELDZA6W.js.map → sql-extract-6UJOLJDL.js.map} +1 -1
  95. package/dist/stream-json-Y45JBNYP.js +112 -0
  96. package/dist/stream-json-Y45JBNYP.js.map +1 -0
  97. package/dist/ui-K7D3BCHD.js +5 -0
  98. package/dist/ui-K7D3BCHD.js.map +1 -0
  99. package/dist/vg-mcp-bridge-E4SJFL7Q.js +75 -0
  100. package/dist/vg-mcp-bridge-E4SJFL7Q.js.map +1 -0
  101. package/dist/{vgd-3MHSB4KA.js → vgd-KDQFS33M.js} +6 -6
  102. package/dist/vgd-KDQFS33M.js.map +1 -0
  103. package/package.json +1 -1
  104. package/dist/baseline-PPZJBYAJ.js +0 -8
  105. package/dist/chunk-57QU36P6.js +0 -5645
  106. package/dist/chunk-57QU36P6.js.map +0 -1
  107. package/dist/chunk-6AXHLQBV.js +0 -1892
  108. package/dist/chunk-6AXHLQBV.js.map +0 -1
  109. package/dist/chunk-6UK6QPTR.js.map +0 -1
  110. package/dist/chunk-6UQMXIAG.js.map +0 -1
  111. package/dist/chunk-A2IYFNCQ.js.map +0 -1
  112. package/dist/chunk-DGUM43GV.js +0 -10
  113. package/dist/chunk-OSD546W7.js.map +0 -1
  114. package/dist/chunk-UZJS7GMK.js.map +0 -1
  115. package/dist/chunk-VI4ITXHQ.js.map +0 -1
  116. package/dist/chunk-YF43FOPP.js.map +0 -1
  117. package/dist/chunk-ZBTY6VV4.js.map +0 -1
  118. package/dist/fs-B5HZ2MIU.js.map +0 -1
  119. package/dist/fs-O5IQYXHO.js.map +0 -1
  120. package/dist/interactive-OCWQ326U.js.map +0 -1
  121. package/dist/load-QPOWQD7C.js +0 -8
  122. package/dist/local-runtime-5O2NN3GA.js +0 -5
  123. package/dist/mcp-tools-I7JK3S2M.js +0 -4
  124. package/dist/model-manager-LB54VSV7.js +0 -10
  125. package/dist/session-ZJGENHKX.js +0 -13
  126. package/dist/session-store-WFBX7HXL.js +0 -4
  127. package/dist/stream-json-Z5KC2DM3.js +0 -78
  128. package/dist/stream-json-Z5KC2DM3.js.map +0 -1
  129. package/dist/ui-Q6DJ3GCU.js +0 -5
  130. package/dist/ui-Q6DJ3GCU.js.map +0 -1
  131. package/dist/vgd-3MHSB4KA.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,46 +1,48 @@
1
1
  #!/usr/bin/env node
2
- import { sha256Hex, generateKeypair, dssePae, DSSE_PAYLOAD_TYPE, keyId, registerBuild, readGlobal, applyGlobalOptions, ProgressBar, printLogo, fetchCatalog, resolveProviders, runBuild } from './chunk-6GRLZ4Z2.js';
3
- export { runBuild } from './chunk-6GRLZ4Z2.js';
4
- import { CONTEXT_POLICY_VERSION, computeFcsReport, renderFcsReportMarkdown, createTrajectoryCollector, runAgent } from './chunk-A2IYFNCQ.js';
5
- import { loadAdvancedScanHook, baselineCommand } from './chunk-VYGEOOLY.js';
6
- import { runCodeSession } from './chunk-WH2N22S3.js';
7
- import { summarizeDiffs, ScriptedProvider } from './chunk-YF43FOPP.js';
2
+ import { sha256Hex, generateKeypair, dssePae, DSSE_PAYLOAD_TYPE, keyId, registerBuild, readGlobal, applyGlobalOptions, ProgressBar, printLogo, fetchCatalog, resolveProviders, runBuild } from './chunk-LYDH2PHN.js';
3
+ export { runBuild } from './chunk-LYDH2PHN.js';
4
+ import { CONTEXT_POLICY_VERSION, computeFcsReport, renderFcsReportMarkdown, createTrajectoryCollector, runAgent } from './chunk-2ZHWF7C6.js';
5
+ import { loadAdvancedScanHook, baselineCommand } from './chunk-HY2RVURA.js';
6
+ import { runCodeSession } from './chunk-PRGCCW7D.js';
7
+ import { summarizeDiffs, ScriptedProvider } from './chunk-RZEXHDCF.js';
8
8
  import { disableColor, info, c, json, out } from './chunk-CT5BS56U.js';
9
- import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-JRAGO6OB.js';
9
+ import { VGD_PROTOCOL_VERSION, startVgdServer } from './chunk-EVWW3BPM.js';
10
10
  import './chunk-5I4VSBWQ.js';
11
11
  import './chunk-IS7VTH2Q.js';
12
- import { gatherSystemMemory } from './chunk-6UQMXIAG.js';
12
+ import { init_resolve_ollama, gatherSystemMemory, resolveOllamaBinary, hasOllamaBinary, resolve_ollama_exports } from './chunk-OWSFZQOP.js';
13
13
  import { readOrchestratorState, writeOrchestratorState, parseMode, setDefaultMode, recommendMode, activePin, resolveMode, providerForBackend, QUALIFIED_PACKS, pinPack, unpinPack, buildOrchestratorStatus } from './chunk-NZELMYT4.js';
14
14
  import { fmt, estimateModelBytes } from './chunk-7N4Y3E47.js';
15
15
  import './chunk-IZDH67DX.js';
16
- import './chunk-HK3AWUXH.js';
16
+ import './chunk-TCJTQGAO.js';
17
17
  import { vgdIsRunning, vgdRequest, vgdSocketPath } from './chunk-PMYWZRRS.js';
18
18
  import { defaultProcessEndpoint, startProcessHostServer, resolveInferenceIsolation } from './chunk-SIPGDJT4.js';
19
19
  import { clearHostSessionPool, acquireHostSession, generateOnSession, listHostSessions, hostSessionPoolSize } from './chunk-6HX47EBL.js';
20
20
  import { buildIdentifierTrieFromGraph } from './chunk-JIBOJTGS.js';
21
21
  import './chunk-7AVYKZEM.js';
22
- import { buildModelInstallPlan } from './chunk-SZSNPXSW.js';
23
- import { ensurePackage, ensureUnavailableMessage } from './chunk-OSD546W7.js';
24
- import { serveStdio, exportGraph, GraphSource, createServer, formatForExt } from './chunk-VI4ITXHQ.js';
25
- import { resolveDsn, resolveIngestHost, dashHostForIngestHost, availableRegionIds, createWorkspaceDsn, writeStoredCredentials, credentialsPath, findGitRoot, ensureGitignored, gitignoreEntryForCredentials, clearStoredCredentials, CliError, ExitCode, parseDsn as parseDsn$1, uploadScanArtifact, ingestHostForRegionId, dsnCommand, pushCommand, refreshIfStale, driftCount, countTokens, shortestPath, pathDisconnect, testsToRun, detectRunner, ASSISTANTS, detectAssistants, usageError, detectServeLaunch, installAssistant, writeNavigationConfig, uninstallAssistant, coveringTests, FREE_PACK, readScanArtifact, buildGraph, writeSnapshot, probeFreshness, discover, assistantById, SMALL_REPO_FILES, publishPrivateLibrary, assessDocQuality, symbolsFromApi, fetchHostedDocsCached, selectForBudget, hostedBase, readStoredCredentials, projectCredentialsPath, homeCredentialsPath, SKIP_DIRS, SKIP_FILES } from './chunk-57QU36P6.js';
26
- import { inventory, enrichOnline, ECOSYSTEMS, catalogPath, libDir, loadCatalog, driftFor, addLibrary, resolveLib, libId, resolveVersion, readDoc, localPackageDocs, localApiSurface } from './chunk-6AXHLQBV.js';
27
- import { writeDefaultConfig, parseDsn, detectVcs, computeRepoFingerprint, resolveRepositoryName, fetchScanPreflight, runCoreScan, VERSION, loadConfig, prepareCompressedUpload, computeDriftScore, titleBox, projectTypeToVulnEcosystem, driftBar, gitHistoryAvailable, buildVersionTimelines, findPackageAnyEcosystem, normalizeConstraint, findVersionCrossings, versionSatisfies, PROJECT_TYPE_TO_OSV_ECOSYSTEM, fetchRiskySymbols } from './chunk-3BIRGSRS.js';
28
- import { recordCliCall, CLI_TOOL_ALIASES, savingsLedgerPath, clearSavings, readSavings, readUsage, readModelSavings, CAPSULE_RANKING_VERSION, SAVINGS_TOOLS, sanitizeClient } from './chunk-ZBTY6VV4.js';
22
+ import { buildModelInstallPlan } from './chunk-WHJMS7XC.js';
23
+ import { ensurePackage, ensureUnavailableMessage } from './chunk-REIGWTTH.js';
24
+ import { serveStdio, exportGraph, GraphSource, createServer, formatForExt } from './chunk-ZU7VD4QL.js';
25
+ import { CliError, ExitCode, refreshIfStale, driftCount, ASSISTANTS, detectAssistants, usageError, detectServeLaunch, installAssistant, writeNavigationConfig, uninstallAssistant, buildGraph, writeSnapshot, probeFreshness, discover, assistantById, SMALL_REPO_FILES, SKIP_DIRS, SKIP_FILES } from './chunk-WDJNUC6V.js';
26
+ import { resolveDsn, resolveIngestHost, dashHostForIngestHost, availableRegionIds, createWorkspaceDsn, writeStoredCredentials, credentialsPath, findGitRoot, ensureGitignored, gitignoreEntryForCredentials, clearStoredCredentials, parseDsn as parseDsn$1, uploadScanArtifact, ingestHostForRegionId, dsnCommand, pushCommand, countTokens, shortestPath, pathDisconnect, testsToRun, detectRunner, coveringTests, FREE_PACK, readScanArtifact, publishPrivateLibrary, assessDocQuality, symbolsFromApi, fetchHostedDocsCached, selectForBudget, hostedBase, readStoredCredentials, projectCredentialsPath, homeCredentialsPath } from './chunk-SA4BMEU6.js';
27
+ import './chunk-IPICO2RV.js';
28
+ import { inventory, enrichOnline, ECOSYSTEMS, catalogPath, libDir, loadCatalog, driftFor, addLibrary, resolveLib, libId, resolveVersion, readDoc, localPackageDocs, localApiSurface } from './chunk-G4HTI4ZM.js';
29
+ import { writeDefaultConfig, parseDsn, detectVcs, computeRepoFingerprint, resolveRepositoryName, fetchScanPreflight, runCoreScan, VERSION, loadConfig, prepareCompressedUpload, computeDriftScore, titleBox, projectTypeToVulnEcosystem, driftBar, gitHistoryAvailable, buildVersionTimelines, findPackageAnyEcosystem, normalizeConstraint, findVersionCrossings, versionSatisfies, PROJECT_TYPE_TO_OSV_ECOSYSTEM, fetchRiskySymbols } from './chunk-RCBMY7CR.js';
30
+ import { recordCliCall, CLI_TOOL_ALIASES, savingsLedgerPath, clearSavings, readSavings, readUsage, readModelSavings, CAPSULE_RANKING_VERSION, SAVINGS_TOOLS, sanitizeClient } from './chunk-US2DAKCM.js';
29
31
  import { ensureDir, pathExists, readJsonFile, writeTextFile, writeJsonFile } from './chunk-CRAMOEBE.js';
30
32
  import { resolveOne } from './chunk-J7LKEB2R.js';
31
- import { embeddingsCached, resolveEmbedModel, loadEmbedder, getNodeEmbeddings, queryGraphSemantic, queryGraph, unavailableMessage, countPending, indexFor, impactOf, modelCacheInfo, clearModelCache } from './chunk-6UK6QPTR.js';
33
+ import { embeddingsCached, resolveEmbedModel, loadEmbedder, getNodeEmbeddings, queryGraphSemantic, queryGraph, unavailableMessage, countPending, indexFor, impactOf, modelCacheInfo, clearModelCache } from './chunk-EETK7S43.js';
32
34
  import { discoverModels } from './chunk-CQDUBAQY.js';
33
- import { resolveCliInvocation, NPX_INVOCATION } from './chunk-UZJS7GMK.js';
35
+ import { init_cli_invocation, resolveCliInvocation, NPX_INVOCATION } from './chunk-3LSG7Z4I.js';
34
36
  import { freeBytesOnVolume, weightStoreDir, listCachedWeights, ensureWeightCached, catalogIntegrityReport } from './chunk-OV4KGXPD.js';
35
- import { resolvedGrammarFiles, grammarSetVersion } from './chunk-ON25BX6T.js';
37
+ import { resolvedGrammarFiles, grammarSetVersion } from './chunk-UTNNGKKX.js';
36
38
  import './chunk-RXP66R2E.js';
37
- import { resolveGraphPath, renderReport, loadGraph, writeArtifacts, vibgrateDir, SCHEMA_VERSION } from './chunk-B3YUO3NW.js';
39
+ import { resolveGraphPath, renderReport, loadGraph, writeArtifacts, vibgrateDir, SCHEMA_VERSION } from './chunk-RYNAK4LK.js';
38
40
  import { cacheDir, stableStringify } from './chunk-ZKNB4YH4.js';
39
41
  import './chunk-BWPBB45M.js';
40
42
  import { canonicalize, hashString, hashBytes } from './chunk-JFGYT6BI.js';
41
43
  import './chunk-BPF3YX2U.js';
42
44
  import { pathExists as pathExists$1, parseExcludePatterns } from './chunk-GI6W53LM.js';
43
- import './chunk-DGUM43GV.js';
45
+ import { __toCommonJS } from './chunk-Z6ZWNWWR.js';
44
46
  import * as fs8 from 'fs';
45
47
  import fs8__default, { realpathSync } from 'fs';
46
48
  import * as path37 from 'path';
@@ -56,6 +58,7 @@ import chalk7 from 'chalk';
56
58
  import * as fs21 from 'fs/promises';
57
59
  import semver2 from 'semver';
58
60
 
61
+ init_cli_invocation();
59
62
  function registerStatus(program) {
60
63
  const cmd = program.command("status").description("cache/freshness, counts, staleness, resolver rungs used").action(async function() {
61
64
  await runStatus(readGlobal(this));
@@ -2270,15 +2273,41 @@ async function scanWorkspaceVulns(targets, opts = { offline: false }) {
2270
2273
  kevSource: "skipped"
2271
2274
  };
2272
2275
  }
2273
- const seen = /* @__PURE__ */ new Set();
2274
- const unique = [];
2276
+ const byKey = /* @__PURE__ */ new Map();
2275
2277
  for (const t of targets) {
2276
2278
  if (!t.ecosystem || !t.package || !t.version) continue;
2277
2279
  const k = key(t.ecosystem, t.package, t.version);
2278
- if (seen.has(k)) continue;
2279
- seen.add(k);
2280
- unique.push(t);
2280
+ const locs = [];
2281
+ if (t.locations?.length) {
2282
+ for (const loc of t.locations) {
2283
+ if (loc?.file) locs.push({ file: loc.file, line: loc.line ?? null });
2284
+ }
2285
+ } else if (t.file) {
2286
+ locs.push({ file: t.file, line: t.line ?? null });
2287
+ }
2288
+ const existing = byKey.get(k);
2289
+ if (!existing) {
2290
+ byKey.set(k, {
2291
+ ...t,
2292
+ file: t.file ?? locs[0]?.file ?? null,
2293
+ line: t.line ?? locs[0]?.line ?? null,
2294
+ locations: locs
2295
+ });
2296
+ continue;
2297
+ }
2298
+ for (const loc of locs) {
2299
+ if (!existing.locations.some((x) => x.file === loc.file && x.line === loc.line)) {
2300
+ existing.locations.push(loc);
2301
+ }
2302
+ }
2303
+ if (t.reachability === "reached") existing.reachability = "reached";
2304
+ else if (t.reachability === "not-observed" && existing.reachability === "unknown") {
2305
+ existing.reachability = "not-observed";
2306
+ }
2307
+ if (!existing.latestStable && t.latestStable) existing.latestStable = t.latestStable;
2308
+ if (!existing.section && t.section) existing.section = t.section;
2281
2309
  }
2310
+ const unique = [...byKey.values()];
2282
2311
  const [kev] = await Promise.all([loadKevCves({ offline: false })]);
2283
2312
  const concurrency = Math.max(1, Math.min(opts.concurrency ?? 8, 16));
2284
2313
  const findings = [];
@@ -2293,7 +2322,11 @@ async function scanWorkspaceVulns(targets, opts = { offline: false }) {
2293
2322
  const r = await enrichVulns(t.ecosystem, t.package, t.version, { offline: false });
2294
2323
  if (r.source === "osv" || r.source === "cache") anyOk = true;
2295
2324
  else if (r.source === "error") anyError = true;
2325
+ const locations = t.locations.length ? t.locations : t.file ? [{ file: t.file, line: t.line ?? null }] : [];
2326
+ const seenIds = /* @__PURE__ */ new Set();
2296
2327
  for (const v of r.vulns) {
2328
+ if (seenIds.has(v.id)) continue;
2329
+ seenIds.add(v.id);
2297
2330
  const kevHit = v.cves.some((c2) => kev.cves.has(c2.toUpperCase()));
2298
2331
  findings.push({
2299
2332
  package: t.package,
@@ -2307,8 +2340,9 @@ async function scanWorkspaceVulns(targets, opts = { offline: false }) {
2307
2340
  published: v.published,
2308
2341
  kev: kevHit,
2309
2342
  reachability: t.reachability ?? "unknown",
2310
- file: t.file ?? null,
2311
- line: t.line ?? null,
2343
+ file: locations[0]?.file ?? t.file ?? null,
2344
+ line: locations[0]?.line ?? t.line ?? null,
2345
+ locations,
2312
2346
  section: t.section ?? null,
2313
2347
  latestStable: t.latestStable ?? null
2314
2348
  });
@@ -3909,10 +3943,15 @@ async function executeModelInstallPlan(plan, options = {}) {
3909
3943
  return { ok: true, plan, installedDeps, pulledWeights };
3910
3944
  }
3911
3945
  function defaultOllamaPull(name, quiet) {
3912
- const res = spawnSync("ollama", ["pull", name], { stdio: quiet ? "ignore" : "inherit" });
3946
+ const { resolveOllamaBinary: resolveOllamaBinary2 } = (init_resolve_ollama(), __toCommonJS(resolve_ollama_exports));
3947
+ const ollama = resolveOllamaBinary2();
3948
+ if (!ollama) return 127;
3949
+ const res = spawnSync(ollama, ["pull", name], { stdio: quiet ? "ignore" : "inherit" });
3913
3950
  return res.status ?? 1;
3914
3951
  }
3952
+ init_resolve_ollama();
3915
3953
  function defaultHasBinary(name) {
3954
+ if (name === "ollama" || name === "ollama.exe") return hasOllamaBinary();
3916
3955
  const res = spawnSync(process.platform === "win32" ? "where" : "which", [name], { stdio: "ignore" });
3917
3956
  return res.status === 0;
3918
3957
  }
@@ -5237,6 +5276,7 @@ function applyRecommendedDefaultMode(opts) {
5237
5276
  reason: `pinned default to ${recommended} from RAM/VRAM + repo fit`
5238
5277
  };
5239
5278
  }
5279
+ init_resolve_ollama();
5240
5280
  function registerModels(program) {
5241
5281
  const cmd = program.command("models").description("Code Modes (Spark/Flow/Forge) + local model fleet").option("--raw", "list discovered local models only (skip Code Modes status)").action(function(opts) {
5242
5282
  const global = readGlobal(this);
@@ -5585,17 +5625,22 @@ function registerModels(program) {
5585
5625
  }
5586
5626
  }
5587
5627
  if (target.runtime === "ollama") {
5588
- if (!hasBinary("ollama")) {
5628
+ const ollama = resolveOllamaBinary();
5629
+ if (!ollama) {
5589
5630
  throw new CliError(
5590
- "ollama is not installed or not on PATH \u2014 install it from https://ollama.com, then re-run.",
5631
+ "ollama is not installed or not on PATH \u2014 install it from https://ollama.com, then re-run. (Dock-launched editors often miss Homebrew; open a terminal and try `which ollama`, or add /opt/homebrew/bin to PATH.)",
5591
5632
  ExitCode.NOT_FOUND
5592
5633
  );
5593
5634
  }
5594
5635
  if (!global.json) info(c.dim(` $ ${plan.command}`));
5595
- const res = spawnSync("ollama", ["rm", target.name], { stdio: global.json ? "ignore" : "inherit" });
5636
+ const res = spawnSync(ollama, ["rm", target.name], {
5637
+ encoding: "utf8",
5638
+ stdio: global.json ? ["ignore", "pipe", "pipe"] : "inherit"
5639
+ });
5596
5640
  if (res.status !== 0) {
5641
+ const tail = [res.stderr, res.stdout].filter(Boolean).join("\n").split(/\r?\n/).map((l) => l.trim()).filter(Boolean).slice(-3).join(" \xB7 ");
5597
5642
  throw new CliError(
5598
- `\`ollama rm ${target.name}\` failed (exit ${res.status ?? "signal"}) \u2014 check the model name with \`vg models --raw\`.`,
5643
+ `\`ollama rm ${target.name}\` failed (exit ${res.status ?? "signal"})${tail ? `: ${tail}` : ""} \u2014 check the model name with \`vg models --raw\`.`,
5599
5644
  ExitCode.ERROR
5600
5645
  );
5601
5646
  }
@@ -5794,6 +5839,7 @@ function registerModels(program) {
5794
5839
  applyGlobalOptions(catalog);
5795
5840
  }
5796
5841
  function hasBinary(bin) {
5842
+ if (bin === "ollama" || bin === "ollama.exe") return hasOllamaBinary();
5797
5843
  const probe = spawnSync(process.platform === "win32" ? "where" : "which", [bin], { stdio: "ignore" });
5798
5844
  return probe.status === 0;
5799
5845
  }
@@ -6056,9 +6102,9 @@ function registerCode(program) {
6056
6102
  const customSelection = !!(opts.provider || opts.model || opts.modelPath || config.provider || config.model);
6057
6103
  if (!customSelection && (modeFlag || !provider && !model)) {
6058
6104
  try {
6059
- const { parseMode: parseMode2, resolveMode: resolveMode2, readOrchestratorState: readOrchestratorState2, activePin: activePin2 } = await import('./model-orchestrator-4M5FG6MN.js');
6060
- const { gatherSystemMemory: gatherSystemMemory2 } = await import('./local-runtime-5O2NN3GA.js');
6061
- const { loadGraph: loadGraph2 } = await import('./load-QPOWQD7C.js');
6105
+ const { parseMode: parseMode2, resolveMode: resolveMode2, readOrchestratorState: readOrchestratorState2, activePin: activePin2 } = await import('./model-orchestrator-LHYPJBFH.js');
6106
+ const { gatherSystemMemory: gatherSystemMemory2 } = await import('./local-runtime-2ED33KK6.js');
6107
+ const { loadGraph: loadGraph2 } = await import('./load-SEFJA3M5.js');
6062
6108
  const state = readOrchestratorState2();
6063
6109
  const mode = parseMode2(modeFlag) ?? state.defaultMode ?? void 0;
6064
6110
  const pin = mode ? activePin2(mode, state) : null;
@@ -6087,7 +6133,7 @@ function registerCode(program) {
6087
6133
  ExitCode.ERROR
6088
6134
  );
6089
6135
  }
6090
- const { resolveGgufPath } = await import('./resolve-gguf-4AFRN4CP.js');
6136
+ const { resolveGgufPath } = await import('./resolve-gguf-SDIYGGI6.js');
6091
6137
  const primaryRef = resolved.pack.primary.backend === "llama.cpp" ? resolved.pack.primary.weightsRef : resolved.underlying.weightsRef;
6092
6138
  const gguf = resolveGgufPath({
6093
6139
  modelRef: primaryRef,
@@ -6142,7 +6188,7 @@ function registerCode(program) {
6142
6188
  if (!(process.stdin.isTTY && process.stdout.isTTY)) {
6143
6189
  throw usageError('say what to change, e.g. `vg code "add a --timeout flag to the scan command"` (guided mode needs an interactive terminal)');
6144
6190
  }
6145
- const { runInteractive } = await import('./interactive-OCWQ326U.js');
6191
+ const { runInteractive } = await import('./interactive-32LSIBRG.js');
6146
6192
  await runInteractive(
6147
6193
  rootOf(global),
6148
6194
  global,
@@ -6194,7 +6240,7 @@ function registerCode(program) {
6194
6240
  {}
6195
6241
  );
6196
6242
  if (!opts.mock && route.providers[0]) {
6197
- const { ensureManagerRuntime } = await import('./model-manager-LB54VSV7.js');
6243
+ const { ensureManagerRuntime } = await import('./model-manager-GJ2YSTSK.js');
6198
6244
  const ensure = await ensureManagerRuntime({
6199
6245
  providerId: route.providers[0].id,
6200
6246
  model: route.providers[0].model,
@@ -6224,18 +6270,18 @@ function registerCode(program) {
6224
6270
  };
6225
6271
  try {
6226
6272
  const primarySlug = route.providers[0]?.model.includes("/") ? route.providers[0].model.split("/")[0] : route.providers[0]?.id;
6227
- const { runCodeStreamJson } = await import('./stream-json-Z5KC2DM3.js');
6228
- const { nodeCodeFs } = await import('./session-ZJGENHKX.js');
6273
+ const { runCodeStreamJson } = await import('./stream-json-Y45JBNYP.js');
6274
+ const { nodeCodeFs } = await import('./session-2JT4AUZT.js');
6229
6275
  const readline5 = await import('readline');
6230
6276
  const child = await import('child_process');
6231
- const { loadOrDiscoverFederation } = await import('./federation-SZWZIFZ7.js');
6232
- const { resolveExecutionEnv } = await import('./execution-env-ZU45JZ4G.js');
6233
- const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-TFBKCNJG.js');
6234
- const { startCodeRuntimeSession } = await import('./runtime-session-EJQZXANB.js');
6235
- const { resolveGraphBackend } = await import('./graph-backend-UTOL3SHE.js');
6236
- const { detectGitRef } = await import('./git-ref-XDXB6JP5.js');
6237
- const { repositoryIdFromRoot } = await import('./paths-2RAH3GME.js');
6238
- const { vgdRequest: vgdRequest2 } = await import('./vgd-3MHSB4KA.js');
6277
+ const { loadOrDiscoverFederation } = await import('./federation-MDQPO3PW.js');
6278
+ const { resolveExecutionEnv } = await import('./execution-env-4MS5AYAN.js');
6279
+ const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-ELWF3Z6H.js');
6280
+ const { startCodeRuntimeSession } = await import('./runtime-session-4IACVDSY.js');
6281
+ const { resolveGraphBackend } = await import('./graph-backend-GBL33GMW.js');
6282
+ const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
6283
+ const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
6284
+ const { vgdRequest: vgdRequest2 } = await import('./vgd-KDQFS33M.js');
6239
6285
  const federation = loadOrDiscoverFederation(root2);
6240
6286
  const modelProfile = mergeModelExecutionProfile(
6241
6287
  resolveModelExecutionProfile({
@@ -6281,6 +6327,26 @@ ${res.stderr}` : ""),
6281
6327
  exitCode: res.status ?? 1
6282
6328
  };
6283
6329
  };
6330
+ const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-E4SJFL7Q.js');
6331
+ const vgBuiltin = createVgBuiltinMcpTools({
6332
+ getGraph: () => graph,
6333
+ root: root2,
6334
+ local: global.local === true
6335
+ });
6336
+ let disposeMcpStream;
6337
+ let projectMcp;
6338
+ let streamApprove = async () => !!auto;
6339
+ if (Object.keys(mcp.servers).length) {
6340
+ const { McpToolset, defaultMcpConnect } = await import('./mcp-tools-KAJS34TN.js');
6341
+ const { toolset } = await McpToolset.connect(mcp.servers, defaultMcpConnect);
6342
+ disposeMcpStream = () => toolset.dispose();
6343
+ projectMcp = {
6344
+ specs: toolset.specs(),
6345
+ owns: (n) => toolset.owns(n),
6346
+ execute: (call) => toolset.execute(call, (action) => streamApprove(action))
6347
+ };
6348
+ }
6349
+ const externalTools = mergeExternalToolsets(vgBuiltin, projectMcp);
6284
6350
  try {
6285
6351
  await runCodeStreamJson({
6286
6352
  graph,
@@ -6304,6 +6370,7 @@ ${res.stderr}` : ""),
6304
6370
  files: opts.file.length ? opts.file : void 0,
6305
6371
  worktreeOverlay: true,
6306
6372
  advancedMode: !capsule,
6373
+ externalTools,
6307
6374
  attribution: {
6308
6375
  client: "vg-code",
6309
6376
  provider: primarySlug,
@@ -6312,17 +6379,20 @@ ${res.stderr}` : ""),
6312
6379
  now: () => Date.now(),
6313
6380
  emit: emitStream,
6314
6381
  bindDecisions: (session) => {
6382
+ streamApprove = (action) => session.approve(action);
6315
6383
  const rl = readline5.createInterface({ input: process.stdin });
6316
6384
  rl.on("line", (raw) => {
6317
6385
  try {
6318
6386
  const msg = JSON.parse(raw);
6319
6387
  if (typeof msg.approveId === "number") session.submitDecision(msg.approveId, !!msg.approve);
6388
+ if (typeof msg.answerId === "number") session.submitAnswer(msg.answerId, String(msg.answer ?? ""));
6320
6389
  } catch {
6321
6390
  }
6322
6391
  });
6323
6392
  }
6324
6393
  });
6325
6394
  } finally {
6395
+ await disposeMcpStream?.();
6326
6396
  await runtime.dispose();
6327
6397
  }
6328
6398
  } catch (e) {
@@ -6339,34 +6409,45 @@ ${res.stderr}` : ""),
6339
6409
  if (!autonomous && !tty) {
6340
6410
  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).");
6341
6411
  }
6342
- const { agentTask } = await import('./interactive-OCWQ326U.js');
6343
- const { nodeCodeFs } = await import('./session-ZJGENHKX.js');
6344
- const { TtyPrompter } = await import('./ui-Q6DJ3GCU.js');
6412
+ const { agentTask } = await import('./interactive-32LSIBRG.js');
6413
+ const { nodeCodeFs } = await import('./session-2JT4AUZT.js');
6414
+ const { TtyPrompter } = await import('./ui-K7D3BCHD.js');
6345
6415
  let priorSummary;
6346
6416
  if (opts.continue) {
6347
- const { loadLatestSession, summarizeSession } = await import('./session-store-WFBX7HXL.js');
6417
+ const { loadLatestSession, summarizeSession } = await import('./session-store-O4XPXKOV.js');
6348
6418
  const prev = loadLatestSession(root2);
6349
6419
  if (prev) priorSummary = summarizeSession(prev);
6350
6420
  }
6351
6421
  const prompter = tty ? new TtyPrompter() : void 0;
6352
- let mcpTools;
6422
+ const { createVgBuiltinMcpTools, mergeExternalToolsets } = await import('./vg-mcp-bridge-E4SJFL7Q.js');
6423
+ const vgBuiltin = createVgBuiltinMcpTools({
6424
+ getGraph: () => graph,
6425
+ root: root2,
6426
+ local: global.local === true
6427
+ });
6428
+ let projectMcp;
6353
6429
  let disposeMcp;
6354
6430
  if (Object.keys(mcp.servers).length) {
6355
- const { McpToolset, defaultMcpConnect } = await import('./mcp-tools-I7JK3S2M.js');
6431
+ const { McpToolset, defaultMcpConnect } = await import('./mcp-tools-KAJS34TN.js');
6356
6432
  const { toolset } = await McpToolset.connect(mcp.servers, defaultMcpConnect);
6357
6433
  disposeMcp = () => toolset.dispose();
6358
6434
  const approve = async (a) => autonomous || !!(prompter && a.kind === "tool" && await prompter.confirm("Call an external tool?", false));
6359
- mcpTools = { specs: toolset.specs(), owns: (n) => toolset.owns(n), execute: (call) => toolset.execute(call, approve) };
6435
+ projectMcp = {
6436
+ specs: toolset.specs(),
6437
+ owns: (n) => toolset.owns(n),
6438
+ execute: (call) => toolset.execute(call, approve)
6439
+ };
6360
6440
  }
6441
+ const mcpTools = mergeExternalToolsets(vgBuiltin, projectMcp);
6361
6442
  try {
6362
- const { loadFederation } = await import('./federation-SZWZIFZ7.js');
6363
- const { resolveExecutionEnv } = await import('./execution-env-ZU45JZ4G.js');
6364
- const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-TFBKCNJG.js');
6365
- const { startCodeRuntimeSession } = await import('./runtime-session-EJQZXANB.js');
6366
- const { resolveGraphBackend } = await import('./graph-backend-UTOL3SHE.js');
6367
- const { detectGitRef } = await import('./git-ref-XDXB6JP5.js');
6368
- const { repositoryIdFromRoot } = await import('./paths-2RAH3GME.js');
6369
- const { vgdRequest: vgdRequest2 } = await import('./vgd-3MHSB4KA.js');
6443
+ const { loadFederation } = await import('./federation-MDQPO3PW.js');
6444
+ const { resolveExecutionEnv } = await import('./execution-env-4MS5AYAN.js');
6445
+ const { resolveModelExecutionProfile, mergeModelExecutionProfile } = await import('./model-execution-profile-ELWF3Z6H.js');
6446
+ const { startCodeRuntimeSession } = await import('./runtime-session-4IACVDSY.js');
6447
+ const { resolveGraphBackend } = await import('./graph-backend-GBL33GMW.js');
6448
+ const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
6449
+ const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
6450
+ const { vgdRequest: vgdRequest2 } = await import('./vgd-KDQFS33M.js');
6370
6451
  const federation = loadFederation(root2);
6371
6452
  const modelProfile = mergeModelExecutionProfile(
6372
6453
  resolveModelExecutionProfile({
@@ -7172,7 +7253,7 @@ function registerDaemon(program) {
7172
7253
  if (!await vgdIsRunning({ socketPath })) {
7173
7254
  throw new CliError(`vgd is not running \u2014 start it with \`vg daemon start\` (${socketPath})`, ExitCode.NOT_FOUND);
7174
7255
  }
7175
- const { loadFederation } = await import('./federation-SZWZIFZ7.js');
7256
+ const { loadFederation } = await import('./federation-MDQPO3PW.js');
7176
7257
  const fed = loadFederation(primary);
7177
7258
  if (!fed) throw new CliError(`could not load federation for ${primary}`, ExitCode.ERROR);
7178
7259
  const res = await vgdRequest(
@@ -7200,9 +7281,9 @@ function registerDaemon(program) {
7200
7281
  if (!await vgdIsRunning({ socketPath })) {
7201
7282
  throw new CliError(`vgd is not running \u2014 start it with \`vg daemon ensure\` (${socketPath})`, ExitCode.NOT_FOUND);
7202
7283
  }
7203
- const { loadGraph: loadGraph2 } = await import('./load-QPOWQD7C.js');
7204
- const { detectGitRef } = await import('./git-ref-XDXB6JP5.js');
7205
- const { repositoryIdFromRoot } = await import('./paths-2RAH3GME.js');
7284
+ const { loadGraph: loadGraph2 } = await import('./load-SEFJA3M5.js');
7285
+ const { detectGitRef } = await import('./git-ref-RSRAN4OH.js');
7286
+ const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
7206
7287
  const opts = this.opts();
7207
7288
  const graph = loadGraph2(root2, global.graph);
7208
7289
  if (!graph) {
@@ -7340,7 +7421,7 @@ function sleep(ms) {
7340
7421
  return new Promise((r) => setTimeout(r, ms));
7341
7422
  }
7342
7423
  async function repositoryIdForCwd(socketPath, root2) {
7343
- const { repositoryIdFromRoot } = await import('./paths-2RAH3GME.js');
7424
+ const { repositoryIdFromRoot } = await import('./paths-62AKTFSR.js');
7344
7425
  const reg = await vgdRequest({ op: "register", root: root2 }, { socketPath });
7345
7426
  if (reg.ok && "workspace" in reg) return reg.workspace.id;
7346
7427
  return repositoryIdFromRoot(root2);
@@ -7549,7 +7630,7 @@ var initCommand = new Command("init").description("Initialize vibgrate in a proj
7549
7630
  console.log(chalk7.green("\u2714") + ` Created ${chalk7.bold("vibgrate.config.ts")}`);
7550
7631
  }
7551
7632
  if (opts.baseline) {
7552
- const { runBaseline } = await import('./baseline-PPZJBYAJ.js');
7633
+ const { runBaseline } = await import('./baseline-QD4HVNVJ.js');
7553
7634
  await runBaseline(rootDir);
7554
7635
  }
7555
7636
  console.log("");
@@ -7834,6 +7915,7 @@ function emitDriftScoreLine(score) {
7834
7915
  if (process.env.VIBGRATE_EMIT_MARKERS !== "1") return;
7835
7916
  console.log(`VIBGRATE_DRIFT_SCORE=${score}`);
7836
7917
  }
7918
+ init_cli_invocation();
7837
7919
  var AI_ASSISTANT_DETECTORS = [
7838
7920
  { files: ["CLAUDE.md", ".claude"], name: "claude" },
7839
7921
  { files: [".cursor", ".cursorrules"], name: "cursor" },
@@ -7874,6 +7956,7 @@ function printAiContextPrompt(detectedAssistant) {
7874
7956
  }
7875
7957
 
7876
7958
  // src/reporting/commands/scan.ts
7959
+ init_cli_invocation();
7877
7960
  function shouldBuildCodeMap(opts) {
7878
7961
  return opts.graph !== false && !opts.maxPrivacy && !opts.noLocalArtifacts;
7879
7962
  }
@@ -8346,6 +8429,9 @@ function scanStaleness(rootDir, artifactPath) {
8346
8429
  walk2(rootDir, 0);
8347
8430
  return newest > ref ? { stale: true, newestChanged } : { stale: false };
8348
8431
  }
8432
+
8433
+ // src/reporting/commands/fix.ts
8434
+ init_cli_invocation();
8349
8435
  var MAX_CONTRACTS = 40;
8350
8436
  function escapeRegExp(s) {
8351
8437
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -10152,6 +10238,7 @@ var reportCommand = new Command("report").description("Generate a drift report f
10152
10238
  break;
10153
10239
  }
10154
10240
  });
10241
+ init_cli_invocation();
10155
10242
  function openUrl(url) {
10156
10243
  const platform = process.platform;
10157
10244
  let command;
@@ -11675,7 +11762,7 @@ async function hasRecentDrill(root2, asOf) {
11675
11762
  const dir = path37.join(evidenceDir(root2), "drills");
11676
11763
  if (!await pathExists(dir)) return void 0;
11677
11764
  const { readdir } = await import('fs/promises');
11678
- const { readJsonFile: readJsonFile2 } = await import('./fs-O5IQYXHO.js');
11765
+ const { readJsonFile: readJsonFile2 } = await import('./fs-4G5A65KS.js');
11679
11766
  const files = (await readdir(dir)).filter((f) => f.endsWith(".json"));
11680
11767
  if (files.length === 0) return void 0;
11681
11768
  const cutoff = new Date(new Date(asOf).getTime() - 90 * 24 * 3600 * 1e3).toISOString();