@vibgrate/cli 2026.817.1 → 2026.818.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/DOCS.md +61 -0
  2. package/README.md +1 -0
  3. package/dist/activity-MF2GNYAI.js +5 -0
  4. package/dist/activity-MF2GNYAI.js.map +1 -0
  5. package/dist/agent-CUK24AWF.js +30 -0
  6. package/dist/{agent-CUYQKC6S.js.map → agent-CUK24AWF.js.map} +1 -1
  7. package/dist/{approvals-IPMUDEDV.js → approvals-YFOU6GVB.js} +6 -5
  8. package/dist/{approvals-IPMUDEDV.js.map → approvals-YFOU6GVB.js.map} +1 -1
  9. package/dist/attach-6S3XS7VO.js +9 -0
  10. package/dist/attach-6S3XS7VO.js.map +1 -0
  11. package/dist/baseline-OBZJRCCP.js +9 -0
  12. package/dist/{baseline-NZFGLMER.js.map → baseline-OBZJRCCP.js.map} +1 -1
  13. package/dist/{chunk-RJCRWQNS.js → chunk-43ESHUM5.js} +179 -463
  14. package/dist/chunk-43ESHUM5.js.map +1 -0
  15. package/dist/{chunk-YL4OIUA5.js → chunk-4QAMUBAC.js} +13 -12
  16. package/dist/chunk-4QAMUBAC.js.map +1 -0
  17. package/dist/{chunk-2BURPMYA.js → chunk-6ABMV74F.js} +72 -976
  18. package/dist/chunk-6ABMV74F.js.map +1 -0
  19. package/dist/chunk-6BEBJCK4.js +467 -0
  20. package/dist/chunk-6BEBJCK4.js.map +1 -0
  21. package/dist/{chunk-NKRWKCME.js → chunk-6LY3JH6S.js} +4 -4
  22. package/dist/{chunk-NKRWKCME.js.map → chunk-6LY3JH6S.js.map} +1 -1
  23. package/dist/chunk-6WRG7VDO.js +118 -0
  24. package/dist/chunk-6WRG7VDO.js.map +1 -0
  25. package/dist/chunk-DBX3DL27.js +26 -0
  26. package/dist/chunk-DBX3DL27.js.map +1 -0
  27. package/dist/{chunk-ZSECAGSU.js → chunk-DH6EDSQP.js} +3 -3
  28. package/dist/{chunk-ZSECAGSU.js.map → chunk-DH6EDSQP.js.map} +1 -1
  29. package/dist/{chunk-3GZSDY35.js → chunk-DM6MJ7IF.js} +4 -4
  30. package/dist/{chunk-3GZSDY35.js.map → chunk-DM6MJ7IF.js.map} +1 -1
  31. package/dist/{chunk-2TJ5EY4I.js → chunk-DUCEKH7Q.js} +12 -6
  32. package/dist/chunk-DUCEKH7Q.js.map +1 -0
  33. package/dist/{chunk-45AKSS4A.js → chunk-E7RVA2ZI.js} +4 -4
  34. package/dist/{chunk-45AKSS4A.js.map → chunk-E7RVA2ZI.js.map} +1 -1
  35. package/dist/{chunk-NHB53JTV.js → chunk-FFYO7G3T.js} +4 -4
  36. package/dist/{chunk-NHB53JTV.js.map → chunk-FFYO7G3T.js.map} +1 -1
  37. package/dist/chunk-G7ZFSH5J.js +132 -0
  38. package/dist/chunk-G7ZFSH5J.js.map +1 -0
  39. package/dist/{chunk-A7EKFLAN.js → chunk-GKZU6MII.js} +166 -31
  40. package/dist/chunk-GKZU6MII.js.map +1 -0
  41. package/dist/chunk-H5Q4JUY4.js +47 -0
  42. package/dist/chunk-H5Q4JUY4.js.map +1 -0
  43. package/dist/{chunk-JHLCKMKF.js → chunk-H6RV2OAX.js} +32 -10
  44. package/dist/chunk-H6RV2OAX.js.map +1 -0
  45. package/dist/{chunk-4W5SYK2M.js → chunk-I3PKYYRP.js} +5 -4
  46. package/dist/chunk-I3PKYYRP.js.map +1 -0
  47. package/dist/{chunk-6NOGNOE4.js → chunk-J3A3O4IA.js} +142 -127
  48. package/dist/chunk-J3A3O4IA.js.map +1 -0
  49. package/dist/{chunk-K267DHCF.js → chunk-J7CVFTLG.js} +6 -6
  50. package/dist/{chunk-K267DHCF.js.map → chunk-J7CVFTLG.js.map} +1 -1
  51. package/dist/{chunk-UBEVY5UT.js → chunk-LHQYYBCH.js} +5 -5
  52. package/dist/{chunk-UBEVY5UT.js.map → chunk-LHQYYBCH.js.map} +1 -1
  53. package/dist/{chunk-OWSXI3PJ.js → chunk-MHJBIGWV.js} +752 -51
  54. package/dist/chunk-MHJBIGWV.js.map +1 -0
  55. package/dist/{chunk-QPXVTQ7O.js → chunk-MVPRPSXU.js} +7 -4
  56. package/dist/chunk-MVPRPSXU.js.map +1 -0
  57. package/dist/chunk-NDNNOAS6.js +16 -0
  58. package/dist/chunk-NDNNOAS6.js.map +1 -0
  59. package/dist/{chunk-DT4KIVRI.js → chunk-NG4KIJW6.js} +34 -2
  60. package/dist/chunk-NG4KIJW6.js.map +1 -0
  61. package/dist/{chunk-RBIRXQR6.js → chunk-NO4BMW7M.js} +4 -14
  62. package/dist/chunk-NO4BMW7M.js.map +1 -0
  63. package/dist/chunk-O3LABX6I.js +43 -0
  64. package/dist/chunk-O3LABX6I.js.map +1 -0
  65. package/dist/{chunk-FD2HPGX2.js → chunk-OS4YFOFJ.js} +31 -10
  66. package/dist/chunk-OS4YFOFJ.js.map +1 -0
  67. package/dist/{chunk-NQUWC2IA.js → chunk-OVUZWR67.js} +108 -543
  68. package/dist/chunk-OVUZWR67.js.map +1 -0
  69. package/dist/chunk-POOL355F.js +237 -0
  70. package/dist/chunk-POOL355F.js.map +1 -0
  71. package/dist/{chunk-ENFSSUNK.js → chunk-Q7TWHJJ6.js} +5 -43
  72. package/dist/chunk-Q7TWHJJ6.js.map +1 -0
  73. package/dist/{chunk-MIYXVY57.js → chunk-SBHK4ECM.js} +4 -4
  74. package/dist/{chunk-MIYXVY57.js.map → chunk-SBHK4ECM.js.map} +1 -1
  75. package/dist/chunk-SUD54UGN.js +6 -0
  76. package/dist/{chunk-PV76EO4G.js.map → chunk-SUD54UGN.js.map} +1 -1
  77. package/dist/chunk-T7RSQ5WD.js +227 -0
  78. package/dist/chunk-T7RSQ5WD.js.map +1 -0
  79. package/dist/{chunk-ANYL7SUI.js → chunk-V2UGRUTL.js} +4761 -976
  80. package/dist/chunk-V2UGRUTL.js.map +1 -0
  81. package/dist/{chunk-2GSMCOIC.js → chunk-WVTGF2MP.js} +39 -20
  82. package/dist/chunk-WVTGF2MP.js.map +1 -0
  83. package/dist/{chunk-RQAKBRAV.js → chunk-X4DECFUG.js} +4 -4
  84. package/dist/{chunk-RQAKBRAV.js.map → chunk-X4DECFUG.js.map} +1 -1
  85. package/dist/{chunk-OZ3IFXRD.js → chunk-YENM3HT7.js} +5 -4
  86. package/dist/chunk-YENM3HT7.js.map +1 -0
  87. package/dist/{chunk-FMS6G67U.js → chunk-ZWFMJUXC.js} +151 -42
  88. package/dist/chunk-ZWFMJUXC.js.map +1 -0
  89. package/dist/cli.d.ts +6 -0
  90. package/dist/cli.js +1895 -872
  91. package/dist/cli.js.map +1 -1
  92. package/dist/daemon-4Q5QBBAF.js +31 -0
  93. package/dist/{daemon-J2HX4GY3.js.map → daemon-4Q5QBBAF.js.map} +1 -1
  94. package/dist/embed-worker-main.js +5 -4
  95. package/dist/embed-worker-main.js.map +1 -1
  96. package/dist/ensure-map-B2PS5ALS.js +40 -0
  97. package/dist/{ensure-map-5C6KG66X.js.map → ensure-map-B2PS5ALS.js.map} +1 -1
  98. package/dist/{fs-NTQUFCXV.js → fs-TLPOWC2D.js} +3 -3
  99. package/dist/fs-TLPOWC2D.js.map +1 -0
  100. package/dist/graph-backend-EEXMD6XY.js +16 -0
  101. package/dist/{graph-backend-HH5IIQ55.js.map → graph-backend-EEXMD6XY.js.map} +1 -1
  102. package/dist/index.d.ts +627 -6
  103. package/dist/index.js +28 -20
  104. package/dist/index.js.map +1 -1
  105. package/dist/{interactive-FXPAZAUJ.js → interactive-KEPGE5HD.js} +44 -36
  106. package/dist/interactive-KEPGE5HD.js.map +1 -0
  107. package/dist/load-H5HAME25.js +11 -0
  108. package/dist/{load-OR2XVGAV.js.map → load-H5HAME25.js.map} +1 -1
  109. package/dist/parse-worker.d.ts +1 -1
  110. package/dist/parse-worker.js +6 -2
  111. package/dist/parse-worker.js.map +1 -1
  112. package/dist/{run-outcome-M4546HLJ.js → run-outcome-V3L4GAN4.js} +7 -6
  113. package/dist/run-outcome-V3L4GAN4.js.map +1 -0
  114. package/dist/runtime-session-M2FRGTDS.js +27 -0
  115. package/dist/{runtime-session-6KKMFS6Q.js.map → runtime-session-M2FRGTDS.js.map} +1 -1
  116. package/dist/session-77YXFUC7.js +17 -0
  117. package/dist/{session-HCFJUSKN.js.map → session-77YXFUC7.js.map} +1 -1
  118. package/dist/slot-subscription-25GOARW5.js +95 -0
  119. package/dist/slot-subscription-25GOARW5.js.map +1 -0
  120. package/dist/{stream-json-4DL65D6U.js → stream-json-S6E3W2US.js} +21 -17
  121. package/dist/stream-json-S6E3W2US.js.map +1 -0
  122. package/dist/{types-8SYlXhzm.d.ts → types-DHqH0XIE.d.ts} +11 -0
  123. package/dist/version-VRZT5G4T.js +4 -0
  124. package/dist/{version-UPIC3F4P.js.map → version-VRZT5G4T.js.map} +1 -1
  125. package/dist/{vg-mcp-bridge-FZGX6DYO.js → vg-mcp-bridge-HCPJWJKJ.js} +16 -14
  126. package/dist/vg-mcp-bridge-HCPJWJKJ.js.map +1 -0
  127. package/dist/{vgd-QR26FAZD.js → vgd-R2PNIDEP.js} +17 -11
  128. package/dist/vgd-R2PNIDEP.js.map +1 -0
  129. package/package.json +7 -7
  130. package/dist/agent-CUYQKC6S.js +0 -26
  131. package/dist/baseline-NZFGLMER.js +0 -9
  132. package/dist/chunk-2BURPMYA.js.map +0 -1
  133. package/dist/chunk-2GSMCOIC.js.map +0 -1
  134. package/dist/chunk-2TJ5EY4I.js.map +0 -1
  135. package/dist/chunk-4W5SYK2M.js.map +0 -1
  136. package/dist/chunk-6NOGNOE4.js.map +0 -1
  137. package/dist/chunk-A7EKFLAN.js.map +0 -1
  138. package/dist/chunk-ANYL7SUI.js.map +0 -1
  139. package/dist/chunk-DT4KIVRI.js.map +0 -1
  140. package/dist/chunk-ENFSSUNK.js.map +0 -1
  141. package/dist/chunk-FD2HPGX2.js.map +0 -1
  142. package/dist/chunk-FMS6G67U.js.map +0 -1
  143. package/dist/chunk-JHLCKMKF.js.map +0 -1
  144. package/dist/chunk-NQUWC2IA.js.map +0 -1
  145. package/dist/chunk-OWSXI3PJ.js.map +0 -1
  146. package/dist/chunk-OZ3IFXRD.js.map +0 -1
  147. package/dist/chunk-PV76EO4G.js +0 -6
  148. package/dist/chunk-QPXVTQ7O.js.map +0 -1
  149. package/dist/chunk-RBIRXQR6.js.map +0 -1
  150. package/dist/chunk-RJCRWQNS.js.map +0 -1
  151. package/dist/chunk-RXP66R2E.js +0 -39
  152. package/dist/chunk-RXP66R2E.js.map +0 -1
  153. package/dist/chunk-YL4OIUA5.js.map +0 -1
  154. package/dist/daemon-J2HX4GY3.js +0 -25
  155. package/dist/ensure-map-5C6KG66X.js +0 -32
  156. package/dist/fs-NTQUFCXV.js.map +0 -1
  157. package/dist/graph-backend-HH5IIQ55.js +0 -14
  158. package/dist/interactive-FXPAZAUJ.js.map +0 -1
  159. package/dist/load-OR2XVGAV.js +0 -10
  160. package/dist/run-outcome-M4546HLJ.js.map +0 -1
  161. package/dist/runtime-session-6KKMFS6Q.js +0 -21
  162. package/dist/session-HCFJUSKN.js +0 -16
  163. package/dist/stream-json-4DL65D6U.js.map +0 -1
  164. package/dist/version-UPIC3F4P.js +0 -4
  165. package/dist/vg-mcp-bridge-FZGX6DYO.js.map +0 -1
  166. package/dist/vgd-QR26FAZD.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core-open/utils/semaphore.ts","../src/core-open/utils/glob.ts","../src/core-open/utils/fs.ts"],"names":["resolve","path","stat"],"mappings":"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","file":"chunk-NG4KIJW6.js","sourcesContent":["// VENDORED from @vibgrate/core-open (packages/vibgrate-core-open) by\n// scripts/vendor-core-open.mjs. Do not edit here — change the source package\n// and re-run the vendor script. Apache-2.0.\n/** Simple concurrency limiter */\nexport class Semaphore {\n private available: number;\n private queue: Array<() => void> = [];\n\n constructor(max: number) {\n this.available = max;\n }\n\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n\n private acquire(): Promise<void> {\n if (this.available > 0) {\n this.available--;\n return Promise.resolve();\n }\n return new Promise((resolve) => this.queue.push(resolve));\n }\n\n private release() {\n const next = this.queue.shift();\n if (next) next();\n else this.available++;\n }\n}\n","// VENDORED from @vibgrate/core-open (packages/vibgrate-core-open) by\n// scripts/vendor-core-open.mjs. Do not edit here — change the source package\n// and re-run the vendor script. Apache-2.0.\nimport * as path from 'node:path';\n\n/**\n * Lightweight glob matcher — zero external dependencies.\n *\n * Supports the patterns most commonly used in vibgrate config `exclude`:\n * - `*` matches any sequence of non-separator chars\n * - `**` matches any sequence of chars including separators (recursive)\n * - `?` matches exactly one non-separator char\n * - `{a,b}` alternation\n * - `[abc]` character class\n * - Literal folder names like `legacy` match as a prefix (`legacy/**`)\n *\n * Paths are normalised to forward-slash before matching so patterns\n * work identically on Windows and Unix.\n */\n\n/**\n * Compile an array of glob patterns into a single predicate function\n * that tests a **relative** path (forward-slash separated).\n *\n * Returns `null` if the pattern list is empty (nothing excluded).\n */\n/**\n * Split one or more raw exclude inputs into individual glob patterns.\n *\n * Each input may contain multiple patterns separated by commas or\n * semicolons, e.g. `\"legacy/**, vendor/**; dist\"`. Surrounding\n * whitespace is trimmed and empty entries are dropped. Pass an array\n * (e.g. a repeated `--exclude` flag) and every element is expanded and\n * flattened into a single de-duplicated list.\n */\nexport function parseExcludePatterns(input: string | string[] | undefined): string[] {\n if (input === undefined) return [];\n const raw = Array.isArray(input) ? input : [input];\n const out: string[] = [];\n for (const entry of raw) {\n for (const part of entry.split(/[,;]/)) {\n const trimmed = part.trim();\n if (trimmed) out.push(trimmed);\n }\n }\n return [...new Set(out)];\n}\n\nexport function compileGlobs(patterns: string[]): ((relPath: string) => boolean) | null {\n if (patterns.length === 0) return null;\n\n const matchers = patterns.map((p) => compileOne(normalise(p)));\n\n return (relPath: string) => {\n const norm = normalise(relPath);\n return matchers.some((m) => m(norm));\n };\n}\n\nfunction normalise(p: string): string {\n // Always use forward-slash for matching\n return p.split(path.sep).join('/').replace(/\\/+$/, '');\n}\n\nfunction compileOne(pattern: string): (p: string) => boolean {\n // If the pattern has no glob metacharacters and no path separator,\n // treat it as a directory name prefix match (e.g. \"legacy\" → \"legacy/**\")\n if (!pattern.includes('/') && !hasGlobChars(pattern)) {\n const prefix = pattern + '/';\n return (p) => p === pattern || p.startsWith(prefix);\n }\n\n const re = globToRegex(pattern);\n return (p) => re.test(p);\n}\n\nfunction hasGlobChars(s: string): boolean {\n return /[*?[\\]{}]/.test(s);\n}\n\nfunction globToRegex(pattern: string): RegExp {\n let i = 0;\n let re = '^';\n const len = pattern.length;\n\n while (i < len) {\n const ch = pattern[i]!;\n\n if (ch === '*') {\n if (pattern[i + 1] === '*') {\n // ** — match everything (including separators)\n i += 2;\n if (pattern[i] === '/') {\n // **/ — matches zero or more path segments followed by /\n i++;\n re += '(?:.+/)?';\n } else {\n // ** at end of pattern — matches everything remaining\n re += '.*';\n }\n } else {\n // * — match non-separator chars\n i++;\n re += '[^/]*';\n }\n } else if (ch === '?') {\n i++;\n re += '[^/]';\n } else if (ch === '[') {\n // Character class — pass through until ]\n const start = i;\n i++; // skip [\n while (i < len && pattern[i] !== ']') i++;\n i++; // skip ]\n re += pattern.slice(start, i);\n } else if (ch === '{') {\n // Alternation {a,b,c}\n i++; // skip {\n const alternatives: string[] = [];\n let current = '';\n while (i < len && pattern[i] !== '}') {\n if (pattern[i] === ',') {\n alternatives.push(current);\n current = '';\n } else {\n current += pattern[i];\n }\n i++;\n }\n alternatives.push(current);\n i++; // skip }\n re += '(?:' + alternatives.map(escapeRegex).join('|') + ')';\n } else {\n re += escapeRegex(ch);\n i++;\n }\n }\n\n re += '$';\n return new RegExp(re);\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","// VENDORED from @vibgrate/core-open (packages/vibgrate-core-open) by\n// scripts/vendor-core-open.mjs. Do not edit here — change the source package\n// and re-run the vendor script. Apache-2.0.\nimport { execFile } from 'node:child_process';\nimport * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { promisify } from 'node:util';\nimport type { Dirent } from 'node:fs';\nimport ignore, { type Ignore } from 'ignore';\nimport { Semaphore } from './semaphore.js';\nimport { compileGlobs } from './glob.js';\n\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * One `.gitignore`'s compiled matcher, scoped to the directory it lives in.\n * `.gitignore` patterns are relative to their own directory (not the walk\n * root), so each level is tested independently against a path relative to\n * `dir`, and results are combined root-to-leaf so a deeper `.gitignore` can\n * re-include (negate) something an ancestor ignored — the same precedence\n * git itself uses.\n */\ninterface GitignoreLevel {\n dir: string;\n ig: Ignore;\n}\n\n/**\n * Load `dir/.gitignore` if present and return a new level list with it\n * appended. Returns `levels` unchanged (no allocation) when the directory has\n * no `.gitignore`, which is the common case.\n */\nasync function extendGitignoreLevels(dir: string, levels: GitignoreLevel[]): Promise<GitignoreLevel[]> {\n try {\n const txt = await fs.readFile(path.join(dir, '.gitignore'), 'utf8');\n return [...levels, { dir, ig: ignore().add(txt) }];\n } catch {\n return levels;\n }\n}\n\n/**\n * Test whether `absPath` is ignored by any `.gitignore` level collected while\n * walking down from the repo root. Walks levels in root-to-leaf order so a\n * later (deeper) match — ignore or negated un-ignore — wins, matching git's\n * own precedence rules.\n */\nfunction isGitignored(levels: GitignoreLevel[], absPath: string, isDir: boolean): boolean {\n if (levels.length === 0) return false;\n let ignored = false;\n for (const { dir, ig } of levels) {\n const rel = path.relative(dir, absPath);\n if (!rel || rel.startsWith('..')) continue;\n const relPosix = rel.split(path.sep).join('/');\n const testPath = isDir ? `${relPosix}/` : relPosix;\n const result = ig.test(testPath);\n if (result.ignored) ignored = true;\n else if (result.unignored) ignored = false;\n }\n return ignored;\n}\n\n/**\n * Directories pruned entirely from the walk — third-party dependency trees,\n * build/output directories, and VCS/IDE metadata. Skipping them keeps their\n * contents out of BOTH project discovery (no phantom projects) AND the billing\n * source-size signals. Matched by exact directory name at any depth.\n *\n * Correctness is load-bearing for pricing: a *missing* entry lets vendored\n * third-party code inflate the project count and size (over-billing — e.g. a\n * React Native app's `Pods/` minting hundreds of phantom C/Obj-C projects),\n * while a *wrong* entry silently drops real source (under-billing). Every name\n * here must be one that is effectively never hand-written source in its\n * ecosystem. Keep in sync with `docs/DEPENDENCY-EXCLUSIONS.md`.\n *\n * Exported so other walkers (e.g. the graph engine's discovery, which keeps\n * its own self-contained copy) can assert in tests that they cover at least\n * this set — the scanner and the graph must never disagree on what is a\n * dependency/build tree.\n */\nexport const SKIP_DIRS = new Set([\n // ── Version control, IDE & tool metadata (never billable source) ──\n '.git', '.svn', '.hg',\n '.idea', '.vscode', '.vs',\n // Claude Code agent state / worktrees (full monorepo copies under .claude/worktrees/)\n '.claude',\n '.vibgrate', '.wrangler', '.turbo', '.cache',\n\n // ── JavaScript / Node — installed dependency trees ──\n 'node_modules', // npm / pnpm / yarn classic\n 'bower_components', // Bower (legacy)\n 'jspm_packages', // jspm (legacy)\n 'web_modules', // Snowpack (legacy)\n '.pnpm-store', // pnpm content-addressable store\n '.yarn', // Yarn Berry cache / unplugged / releases\n\n // ── JS/TS meta-framework & bundler build output ──\n '.next', '.nuxt', '.output', '.svelte-kit', '.astro',\n '.vercel', '.netlify', '.angular', '.parcel-cache', '.docusaurus',\n 'storybook-static',\n\n // ── Generic build / dist / coverage output ──\n 'dist', 'build', 'out', 'coverage',\n\n // ── Vendored third-party source trees ──\n 'vendor', // Go vendor/, PHP Composer, Rails vendor/bundle\n 'Pods', // CocoaPods (iOS/macOS)\n 'Carthage', // Carthage (iOS/macOS)\n\n // ── Python — virtualenvs & tool caches ──\n // Exact names only; custom-named envs (`.venv-foo`) and `site-packages`\n // are handled by {@link isSkippedDirName}.\n '.venv', 'venv', 'virtualenv', '.tox', '.nox',\n '__pycache__', '.mypy_cache', '.pytest_cache', '.ruff_cache',\n '.eggs', '.ipynb_checkpoints',\n\n // ── Ruby ──\n '.bundle', // bundler config / vendored gems\n\n // ── Rust / Maven / sbt / Clojure — all build into target/ ──\n 'target',\n\n // ── JVM (Gradle / Maven) & .NET build output ──\n '.gradle', 'bin', 'obj', 'TestResults',\n\n // ── Swift / Xcode ──\n '.build', '.swiftpm', 'DerivedData',\n\n // ── Dart / Flutter ──\n '.dart_tool',\n\n // ── Elixir / Erlang ──\n '_build', 'deps',\n\n // ── Haskell (Cabal / Stack) ──\n 'dist-newstyle', '.stack-work',\n\n // ── Infrastructure-as-code build/state ──\n '.terraform', '.serverless', 'cdk.out', '.aws-sam',\n]);\n\n/**\n * True when a directory basename must be pruned from discovery / billing walks.\n * Covers exact {@link SKIP_DIRS} names plus custom virtualenv names\n * (`.venv-contextbench`, `venv-tools`, …) and Python install trees\n * (`site-packages`) that otherwise mint phantom nested projects.\n */\nexport function isSkippedDirName(name: string): boolean {\n if (!name) return false;\n if (SKIP_DIRS.has(name)) return true;\n if (name.startsWith('.venv') || name.startsWith('venv-')) return true;\n if (name === 'site-packages') return true;\n return false;\n}\n\n/** File extensions skipped during the walk — binary/font/media that no scanner needs to read */\nconst SKIP_EXTENSIONS = new Set([\n // Fonts\n '.woff', '.woff2', '.ttf', '.otf', '.eot',\n // Images & vector\n '.png', '.jpg', '.jpeg', '.gif', '.ico', '.bmp', '.tiff', '.tif', '.webp', '.avif', '.svg',\n '.heic', '.heif', '.jfif', '.psd', '.ai', '.eps', '.raw', '.cr2', '.nef', '.dng',\n // Video\n '.mp4', '.webm', '.avi', '.mov', '.mkv', '.wmv', '.flv', '.m4v', '.mpg', '.mpeg', '.3gp', '.ogv',\n // Audio\n '.mp3', '.wav', '.ogg', '.flac', '.aac', '.wma', '.m4a', '.opus', '.aiff', '.mid', '.midi',\n // Archives\n '.zip', '.tar', '.gz', '.bz2', '.7z', '.rar',\n // Compiled / binary\n '.exe', '.dll', '.so', '.dylib', '.o', '.a', '.class', '.pyc', '.pdb',\n // Source maps & lockfiles (large, not useful for drift analysis)\n '.map',\n]);\n\n// Folded into SKIP_DIRS above (single source of truth). Kept as an empty set\n// so the existing walk/ripgrep call sites that OR-check it stay valid.\nconst EXTRA_SKIP_DIRS = new Set<string>([]);\n\n/**\n * Lockfiles and generated dependency manifests excluded from the billing\n * source-size metrics. They are not hand-written source, and a single one\n * (e.g. a pnpm-lock.yaml) can exceed 1 MB on its own, which would otherwise\n * inflate a genuinely tiny project past the micro/small size thresholds.\n *\n * Unlike {@link SKIP_DIRS}, these files legitimately sit at a project root\n * (next to the manifest that declares the project), so they are filtered\n * per-file rather than by pruning a directory. Manifests that *define* a\n * project (package.json, go.mod, Cargo.toml, *.csproj, …) are deliberately NOT\n * here — they are the source of truth for project discovery. Compared\n * case-insensitively against the basename, so every entry must be lowercase.\n * Keep in sync with `docs/DEPENDENCY-EXCLUSIONS.md`.\n */\nexport const SOURCE_EXCLUDE_FILES = new Set([\n // JavaScript / Node\n 'package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock',\n 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock', 'deno.lock',\n '.pnp.cjs', '.pnp.data.json', // Yarn PnP (generated, can be large)\n // Python\n 'poetry.lock', 'pipfile.lock', 'pdm.lock', 'uv.lock',\n 'pylock.toml', // PEP 751 standard lock\n 'conda-lock.yml',\n // Ruby\n 'gemfile.lock',\n // PHP\n 'composer.lock',\n // Rust\n 'cargo.lock',\n // Go\n 'go.sum', 'go.work.sum', 'gopkg.lock', 'glide.lock',\n // .NET\n 'packages.lock.json',\n // Java / JVM (Gradle)\n 'gradle.lockfile',\n // Swift / Xcode\n 'package.resolved',\n // Dart / Flutter\n 'pubspec.lock',\n // Elixir\n 'mix.lock',\n // Haskell (Cabal / Stack)\n 'cabal.project.freeze', 'stack.yaml.lock',\n // Julia\n 'manifest.toml',\n // R\n 'renv.lock',\n // Perl (Carton)\n 'cpanfile.snapshot',\n // CocoaPods / Carthage\n 'podfile.lock', 'cartfile.resolved',\n // Terraform / IaC\n '.terraform.lock.hcl',\n // Helm\n 'chart.lock',\n // C / C++ (Conan)\n 'conan.lock',\n // Bazel\n 'module.bazel.lock',\n // Nix\n 'flake.lock',\n]);\n\n// ── Directory entry gathered in a single walk ──\n\nexport interface DirEntry {\n /** Absolute path */\n absPath: string;\n /** Path relative to the walk root */\n relPath: string;\n /** Filename (basename) */\n name: string;\n /** Whether this is a regular file */\n isFile: boolean;\n /** Whether this is a directory */\n isDirectory: boolean;\n}\n\n// ── FileCache: walk once, read once ──\n\n/**\n * Maximum file size (in bytes) that will be held in the text cache.\n * Files larger than this are read from disk but NOT stored — this prevents\n * lockfiles (pnpm-lock.yaml, package-lock.json, etc.) from consuming\n * 50-200 MB of heap. Small config files like package.json (~1-5 KB each)\n * are cached normally.\n */\nconst TEXT_CACHE_MAX_BYTES = 1_048_576; // 1 MB\n\n/**\n * Shared cache that ensures the filesystem is walked at most once per root dir\n * and every small file is read at most once across all scanners.\n *\n * Memory-conscious design:\n * - Walk results are stored once; consumers filter in-memory.\n * - File content is only cached when ≤ TEXT_CACHE_MAX_BYTES (1 MB).\n * Large files (lockfiles) pass straight through without caching.\n * - readJsonFile evicts the raw-text entry after parsing so we never\n * hold *both* the string and the parsed object for the same file.\n * - No stat caching — only file-hotspots uses stat and there's no\n * cross-scanner reuse to justify holding thousands of Stats objects.\n * - Call `clear()` after the scan to release all remaining references.\n */\nexport class FileCache {\n /** Directory walk results keyed by rootDir */\n private walkCache = new Map<string, Promise<DirEntry[]>>();\n /** File content keyed by absolute path (only files ≤ TEXT_CACHE_MAX_BYTES) */\n private textCache = new Map<string, Promise<string>>();\n /** Parsed JSON keyed by absolute path */\n private jsonCache = new Map<string, Promise<unknown>>();\n /** pathExists keyed by absolute path */\n private existsCache = new Map<string, Promise<boolean>>();\n /** User-configured exclude predicate (compiled from glob patterns) */\n private excludePredicate: ((relPath: string) => boolean) | null = null;\n /** Directories that were auto-skipped because they were stuck */\n private _stuckPaths: string[] = [];\n /** Files skipped because they exceed maxFileSizeToScan */\n private _skippedLargeFiles: string[] = [];\n /** Maximum file size (bytes) we will read. 0 = unlimited. */\n private _maxFileSize = 0;\n /** Per-project / per-directory scan timeout in ms. */\n private _projectScanTimeout = 180_000;\n /** Whether we have already shown the \"increase projectScanTimeout\" hint */\n private _timeoutHintShown = false;\n /** Root dir for relative-path computation (set by the first walkDir call) */\n private _rootDir: string | null = null;\n /** Cached tree summary captured during the shared walk */\n private walkSummary = new Map<string, TreeCount>();\n /** Fast lookup for exact filename (e.g. package.json) */\n private fileNameIndex = new Map<string, Map<string, string[]>>();\n /** Per-file byte size keyed by absolute path (memoised so nested projects don't re-stat) */\n private sizeCache = new Map<string, Promise<number>>();\n /** Concurrency limiter for size stats */\n private sizeSem = new Semaphore(64);\n\n /** Set exclude patterns from config (call once before the walk) */\n setExcludePatterns(patterns: string[]): void {\n this.excludePredicate = compileGlobs(patterns);\n }\n\n /** Set the maximum file size in bytes that readTextFile / readJsonFile will process */\n setMaxFileSize(bytes: number): void {\n this._maxFileSize = bytes;\n }\n\n /** Set the per-project scan timeout (milliseconds). Scanners use this\n * instead of a hard-coded constant so the user can override it via config. */\n setProjectScanTimeout(ms: number): void {\n this._projectScanTimeout = ms;\n }\n\n /** Current per-project scan timeout in milliseconds */\n get projectScanTimeout(): number {\n return this._projectScanTimeout;\n }\n\n /** Record a path that timed out or was stuck during scanning */\n addStuckPath(relPath: string): void {\n this._stuckPaths.push(relPath);\n }\n\n /**\n * Returns true the first time it is called, false thereafter.\n * Used by scanners to print the \"increase projectScanTimeout\" hint\n * only once per scan run.\n */\n shouldShowTimeoutHint(): boolean {\n if (this._timeoutHintShown) return false;\n this._timeoutHintShown = true;\n return true;\n }\n\n /** Get all paths that were auto-skipped due to being stuck (dirs + scanner files) */\n get stuckPaths(): readonly string[] {\n return this._stuckPaths;\n }\n\n /** @deprecated Use stuckPaths instead */\n get stuckDirs(): readonly string[] {\n return this._stuckPaths;\n }\n\n /** Get files that were skipped because they exceeded maxFileSizeToScan */\n get skippedLargeFiles(): readonly string[] {\n return this._skippedLargeFiles;\n }\n\n // ── Directory walking ──\n\n /**\n * Walk the directory tree from `rootDir` once, skipping SKIP_DIRS plus\n * common framework output dirs (.nuxt, .output, .svelte-kit).\n *\n * The result is memoised so every scanner filters the same array.\n * Consumers that need additional filtering (e.g. SOURCE_EXTENSIONS,\n * SKIP_EXTENSIONS) do so on the returned entries — no separate walk.\n */\n walkDir(rootDir: string, onProgress?: (filesFound: number, currentPath: string) => void): Promise<DirEntry[]> {\n this._rootDir = rootDir;\n const cached = this.walkCache.get(rootDir);\n if (cached) return cached;\n\n const promise = this._doWalk(rootDir, onProgress);\n this.walkCache.set(rootDir, promise);\n return promise;\n }\n\n /**\n * Entries under `absDir`, reusing an already-cached ancestor walk when one\n * exists. Per-project scanners must call this instead of `walkDir(projectDir)`\n * so a large monorepo is not re-walked once per package.\n *\n * `relPath` is rebased to `absDir` so callers see the same shape as a\n * fresh `walkDir` of that directory.\n */\n async walkDirUnder(absDir: string): Promise<DirEntry[]> {\n const resolved = path.resolve(absDir);\n\n let exact: Promise<DirEntry[]> | undefined;\n let bestAncestor: { root: string; promise: Promise<DirEntry[]> } | undefined;\n for (const [key, promise] of this.walkCache) {\n const cachedRoot = path.resolve(key);\n if (cachedRoot === resolved) {\n exact = promise;\n break;\n }\n const rel = path.relative(cachedRoot, resolved);\n if (!rel || rel.startsWith('..') || path.isAbsolute(rel)) continue;\n if (!bestAncestor || cachedRoot.length > path.resolve(bestAncestor.root).length) {\n bestAncestor = { root: key, promise };\n }\n }\n if (exact) return exact;\n\n if (bestAncestor) {\n const entries = await bestAncestor.promise;\n const prefix = resolved.endsWith(path.sep) ? resolved : resolved + path.sep;\n return entries\n .filter((e) => e.absPath === resolved || e.absPath.startsWith(prefix))\n .map((e) => ({ ...e, relPath: path.relative(resolved, e.absPath) }));\n }\n\n return this.walkDir(resolved);\n }\n\n /** Return tree summary from the cached walk, if available. */\n getWalkSummary(rootDir: string): TreeCount | undefined {\n return this.walkSummary.get(rootDir);\n }\n\n /** Additional dirs skipped only by the cached walk (framework outputs) */\n private static readonly EXTRA_SKIP = EXTRA_SKIP_DIRS;\n\n private async _doWalk(rootDir: string, onProgress?: (filesFound: number, currentPath: string) => void): Promise<DirEntry[]> {\n const results: DirEntry[] = [];\n const cores = typeof os.availableParallelism === 'function' ? os.availableParallelism() : os.cpus().length || 4;\n const maxConcurrentReads = Math.max(8, Math.min(64, cores * 4));\n let foundCount = 0;\n let lastReported = 0;\n const REPORT_INTERVAL = 50; // report every N files\n // Semaphore limits concurrent readdir I/O only — NOT the entire\n // recursive walk. Previously sem.run wrapped the whole walk(),\n // so parent directories held a slot while awaiting children,\n // starving deep trees into near-serial execution.\n const sem = new Semaphore(maxConcurrentReads);\n const STUCK_TIMEOUT_MS = this._projectScanTimeout;\n\n const extraSkip = FileCache.EXTRA_SKIP;\n const isExcluded = this.excludePredicate;\n const stuckDirs = this._stuckPaths;\n\n async function walk(dir: string, gitignoreLevels: GitignoreLevel[]) {\n const relDir = path.relative(rootDir, dir);\n\n // Report the directory we are ABOUT to read so the UI shows\n // where we are if this readdir gets stuck.\n if (onProgress) {\n onProgress(foundCount, relDir || '.');\n }\n\n // Extend the .gitignore chain with this directory's own file (if any)\n // BEFORE reading entries, so its rules apply to its own children —\n // matching git's precedence (deepest applicable .gitignore wins).\n const levels = await extendGitignoreLevels(dir, gitignoreLevels);\n\n // Acquire the semaphore ONLY for the readdir I/O, then release\n // immediately so parent dirs don't hold slots while awaiting children.\n let entries: Dirent[] | null;\n try {\n entries = await sem.run(async () => {\n const readPromise = fs.readdir(dir, { withFileTypes: true });\n let stuckTimer: ReturnType<typeof setTimeout>;\n const result = await Promise.race([\n readPromise.then((e) => ({ ok: true as const, entries: e })),\n new Promise<{ ok: false }>((resolve) => {\n stuckTimer = setTimeout(() => resolve({ ok: false }), STUCK_TIMEOUT_MS);\n stuckTimer.unref();\n }),\n ]);\n clearTimeout(stuckTimer!);\n if (!result.ok) {\n // Directory read timed out — record and skip\n stuckDirs.push(relDir || dir);\n return null;\n }\n return result.entries;\n });\n } catch {\n return;\n }\n if (!entries) return;\n\n const subWalks: Promise<void>[] = [];\n for (const e of entries) {\n const absPath = path.join(dir, e.name);\n const relPath = path.relative(rootDir, absPath);\n\n // Check user-configured excludes\n if (isExcluded && isExcluded(relPath)) continue;\n\n if (e.isDirectory()) {\n if (isSkippedDirName(e.name) || extraSkip.has(e.name)) continue;\n // Respect .gitignore (root + any nested ones seen so far) so\n // repo-specific, non-canonically-named build/dependency/cache dirs\n // (e.g. a custom-named virtualenv) don't get walked just because\n // they aren't on the hardcoded SKIP_DIRS list.\n if (isGitignored(levels, absPath, true)) continue;\n results.push({ absPath, relPath, name: e.name, isFile: false, isDirectory: true });\n // Launch sub-walk WITHOUT wrapping in sem.run — child walks\n // acquire the semaphore independently for their own readdir.\n subWalks.push(walk(absPath, levels));\n } else if (e.isFile()) {\n // Skip binary/font/media files that no scanner needs\n const ext = path.extname(e.name).toLowerCase();\n if (SKIP_EXTENSIONS.has(ext)) continue;\n if (isGitignored(levels, absPath, false)) continue;\n results.push({ absPath, relPath, name: e.name, isFile: true, isDirectory: false });\n foundCount++;\n if (onProgress && foundCount - lastReported >= REPORT_INTERVAL) {\n lastReported = foundCount;\n onProgress(foundCount, relPath);\n }\n }\n }\n await Promise.all(subWalks);\n }\n\n await walk(rootDir, []);\n\n let totalDirs = 0;\n const rootNameIndex = new Map<string, string[]>();\n for (const entry of results) {\n if (entry.isDirectory) totalDirs++;\n if (!entry.isFile) continue;\n const bucket = rootNameIndex.get(entry.name);\n if (bucket) {\n bucket.push(entry.absPath);\n } else {\n rootNameIndex.set(entry.name, [entry.absPath]);\n }\n }\n this.walkSummary.set(rootDir, { totalFiles: foundCount, totalDirs });\n this.fileNameIndex.set(rootDir, rootNameIndex);\n\n // Final progress report\n if (onProgress && foundCount !== lastReported) {\n onProgress(foundCount, '');\n }\n return results;\n }\n\n /**\n * Find files matching a predicate from the cached walk.\n * Returns absolute paths (same contract as the standalone `findFiles`).\n */\n async findFiles(rootDir: string, predicate: (name: string) => boolean): Promise<string[]> {\n const entries = await this.walkDir(rootDir);\n return entries.filter((e) => e.isFile && predicate(e.name)).map((e) => e.absPath);\n }\n\n async findPackageJsonFiles(rootDir: string): Promise<string[]> {\n await this.walkDir(rootDir);\n return this.fileNameIndex.get(rootDir)?.get('package.json') ?? [];\n }\n\n async findCsprojFiles(rootDir: string): Promise<string[]> {\n const entries = await this.walkDir(rootDir);\n return entries.filter((e) => e.isFile && e.name.endsWith('.csproj')).map((e) => e.absPath);\n }\n\n async findSolutionFiles(rootDir: string): Promise<string[]> {\n const entries = await this.walkDir(rootDir);\n return entries.filter((e) => e.isFile && e.name.endsWith('.sln')).map((e) => e.absPath);\n }\n\n /**\n * Count files under a given directory using the cached walk data.\n * Avoids a redundant recursive readdir that can be slow on large\n * project trees (the main cause of per-project timeout hits).\n * Falls back to the standalone `countFilesInDir` if the walk hasn't\n * been populated yet.\n */\n async countFilesUnder(rootDir: string, dir: string): Promise<number> {\n const entries = this.walkCache.get(rootDir);\n if (!entries) {\n // Walk not done yet — fall back to standalone count\n return countFilesInDir(dir);\n }\n const resolved = await entries;\n const prefix = dir.endsWith(path.sep) ? dir : dir + path.sep;\n let count = 0;\n for (const e of resolved) {\n if (!e.isFile) continue;\n // File is directly in `dir` or in a subdirectory of `dir`\n if (e.absPath === dir || e.absPath.startsWith(prefix)) {\n count++;\n }\n }\n return count;\n }\n\n /** Stat a single file's byte size, memoised and concurrency-limited. */\n private statSize(absPath: string): Promise<number> {\n const cached = this.sizeCache.get(absPath);\n if (cached) return cached;\n const promise = this.sizeSem.run(async () => {\n try {\n const stat = await fs.stat(absPath);\n return stat.size;\n } catch {\n return 0;\n }\n });\n this.sizeCache.set(absPath, promise);\n return promise;\n }\n\n /**\n * Sum the byte size of every file under `dir` using the cached walk.\n * Mirrors {@link countFilesUnder}; per-file stats are memoised so nested\n * project trees are never stat-ed twice. Falls back to a standalone walk\n * when the cache has not been populated yet.\n */\n async bytesUnder(rootDir: string, dir: string): Promise<number> {\n const entries = this.walkCache.get(rootDir);\n if (!entries) {\n // Walk not done yet — fall back to a standalone size walk\n return bytesInDir(dir);\n }\n const resolved = await entries;\n const prefix = dir.endsWith(path.sep) ? dir : dir + path.sep;\n const sizes = await Promise.all(\n resolved\n .filter((e) => e.isFile && (e.absPath === dir || e.absPath.startsWith(prefix)))\n .map((e) => this.statSize(e.absPath)),\n );\n return sizes.reduce((total, size) => total + size, 0);\n }\n\n /**\n * Source-only file count and byte size under `dir`, used for billing\n * classification. Identical to {@link countFilesUnder} / {@link bytesUnder}\n * but additionally excludes lockfiles and generated dependency manifests\n * (see {@link SOURCE_EXCLUDE_FILES}); vendored and build-output directories\n * are already excluded by the shared walk. Walks the cached entries once so\n * the count and size stay consistent. Falls back to the standalone walks\n * when the cache has not been populated yet.\n */\n async sourceMetricsUnder(rootDir: string, dir: string): Promise<{ fileCount: number; sizeBytes: number }> {\n const entries = this.walkCache.get(rootDir);\n if (!entries) {\n // Walk not done yet — fall back to standalone walks.\n const [fileCount, sizeBytes] = await Promise.all([countFilesInDir(dir), bytesInDir(dir)]);\n return { fileCount, sizeBytes };\n }\n const resolved = await entries;\n const prefix = dir.endsWith(path.sep) ? dir : dir + path.sep;\n const sourceFiles = resolved.filter(\n (e) =>\n e.isFile &&\n (e.absPath === dir || e.absPath.startsWith(prefix)) &&\n !SOURCE_EXCLUDE_FILES.has(e.name.toLowerCase()),\n );\n const sizes = await Promise.all(sourceFiles.map((e) => this.statSize(e.absPath)));\n return {\n fileCount: sourceFiles.length,\n sizeBytes: sizes.reduce((total, size) => total + size, 0),\n };\n }\n\n // ── File content reading ──\n\n /**\n * Read a text file. Files ≤ 1 MB are cached so subsequent calls from\n * different scanners return the same string. Files > 1 MB (lockfiles,\n * large generated files) are read directly and never retained.\n *\n * If maxFileSizeToScan is set and the file exceeds it, the file is\n * recorded as skipped and an empty string is returned.\n */\n readTextFile(filePath: string): Promise<string> {\n const abs = path.resolve(filePath);\n const cached = this.textCache.get(abs);\n if (cached) return cached;\n\n const maxSize = this._maxFileSize;\n const skippedLarge = this._skippedLargeFiles;\n const rootDir = this._rootDir;\n\n // Read file, then decide whether to cache based on size\n const promise = (async () => {\n // Check file size before reading when a limit is configured\n if (maxSize > 0) {\n try {\n const stat = await fs.stat(abs);\n if (stat.size > maxSize) {\n const rel = rootDir ? path.relative(rootDir, abs) : abs;\n skippedLarge.push(rel);\n this.textCache.delete(abs);\n return '';\n }\n } catch {\n // If stat fails, fall through and let readFile handle it\n }\n }\n\n const content = await fs.readFile(abs, 'utf8');\n if (content.length > TEXT_CACHE_MAX_BYTES) {\n // Too large for cache — evict so we don't hold it\n this.textCache.delete(abs);\n }\n return content;\n })();\n\n // Temporarily store the promise so concurrent callers during the same\n // tick await the same read (avoids double-reads even for large files).\n this.textCache.set(abs, promise);\n return promise;\n }\n\n /**\n * Read and parse a JSON file. The parsed object is cached; the raw\n * text is evicted immediately so we never hold both representations.\n */\n readJsonFile<T>(filePath: string): Promise<T> {\n const abs = path.resolve(filePath);\n const cached = this.jsonCache.get(abs);\n if (cached) return cached as Promise<T>;\n\n const promise = this.readTextFile(abs).then((txt) => {\n // Evict raw text — we now have the parsed object\n this.textCache.delete(abs);\n return JSON.parse(stripBom(txt)) as T;\n });\n this.jsonCache.set(abs, promise);\n return promise;\n }\n\n // ── Existence checks ──\n\n pathExists(p: string): Promise<boolean> {\n const abs = path.resolve(p);\n const cached = this.existsCache.get(abs);\n if (cached) return cached;\n const promise = fs.access(abs).then(() => true, () => false);\n this.existsCache.set(abs, promise);\n return promise;\n }\n\n // ── Lifecycle ──\n\n /** Release all cached data. Call after the scan completes. */\n clear(): void {\n this.walkCache.clear();\n this.walkSummary.clear();\n this.fileNameIndex.clear();\n this.textCache.clear();\n this.jsonCache.clear();\n this.existsCache.clear();\n this.sizeCache.clear();\n }\n\n /** Number of file content entries currently held */\n get textCacheSize(): number { return this.textCache.size; }\n /** Number of parsed JSON entries currently held */\n get jsonCacheSize(): number { return this.jsonCache.size; }\n}\n\n// ── Quick tree count (fast pre-scan) ──\n\nexport interface TreeCount {\n /** Total files discovered (excluding skipped dirs) */\n totalFiles: number;\n /** Total subdirectories discovered (excluding skipped dirs) */\n totalDirs: number;\n}\n\n/**\n * Fast, lightweight traversal that only *counts* files and directories\n * without storing entries. Used before the main scan so the progress\n * bar can show an accurate percentage.\n *\n * Respects the same SKIP_DIRS as the full walk.\n */\nexport async function quickTreeCount(rootDir: string, excludePatterns?: string[]): Promise<TreeCount> {\n const native = await quickTreeCountWithRipgrep(rootDir, excludePatterns);\n if (native) return native;\n\n let totalFiles = 0;\n let totalDirs = 0;\n const cores = typeof os.availableParallelism === 'function' ? os.availableParallelism() : os.cpus().length || 4;\n const maxConcurrent = Math.max(8, Math.min(128, cores * 8));\n const sem = new Semaphore(maxConcurrent);\n const extraSkip = EXTRA_SKIP_DIRS;\n const isExcluded = excludePatterns ? compileGlobs(excludePatterns) : null;\n\n async function count(dir: string, gitignoreLevels: GitignoreLevel[]) {\n let entries: Dirent[];\n try {\n entries = await sem.run(() => fs.readdir(dir, { withFileTypes: true }));\n } catch {\n return;\n }\n const levels = await extendGitignoreLevels(dir, gitignoreLevels);\n const subs: Promise<void>[] = [];\n for (const e of entries) {\n const absPath = path.join(dir, e.name);\n const relPath = path.relative(rootDir, absPath);\n if (isExcluded && isExcluded(relPath)) continue;\n\n if (e.isDirectory()) {\n if (isSkippedDirName(e.name) || extraSkip.has(e.name)) continue;\n if (isGitignored(levels, absPath, true)) continue;\n totalDirs++;\n subs.push(count(absPath, levels));\n } else if (e.isFile()) {\n const ext = path.extname(e.name).toLowerCase();\n if (SKIP_EXTENSIONS.has(ext)) continue;\n if (isGitignored(levels, absPath, false)) continue;\n totalFiles++;\n }\n }\n await Promise.all(subs);\n }\n\n await count(rootDir, []);\n return { totalFiles, totalDirs };\n}\n\n\n\nexport function normalizeGlobForRipgrep(pattern: string): string {\n return pattern.replace(/\\\\/g, '/');\n}\n\nasync function quickTreeCountWithRipgrep(rootDir: string, excludePatterns?: string[]): Promise<TreeCount | null> {\n // `--hidden` includes dotfiles/dot-dirs (ripgrep skips them by default);\n // deliberately NOT passing `--no-ignore` here so ripgrep applies its own\n // (correct, battle-tested) .gitignore handling — root, nested, and global\n // excludes — the same way `git status` would. This must stay in sync with\n // the manual .gitignore handling in the JS walk fallback (`_doWalk`,\n // `quickTreeCount`'s `count()`) below, which exists only for machines\n // without `rg` on PATH.\n const args = ['--files', '--hidden', '--null'];\n\n for (const dir of SKIP_DIRS) {\n args.push('-g', `!**/${dir}/**`);\n }\n for (const dir of EXTRA_SKIP_DIRS) {\n args.push('-g', `!**/${dir}/**`);\n }\n for (const ext of SKIP_EXTENSIONS) {\n args.push('-g', `!**/*${ext}`);\n }\n for (const pattern of (excludePatterns ?? [])) {\n const trimmed = pattern.trim();\n if (!trimmed) continue;\n args.push('-g', `!${normalizeGlobForRipgrep(trimmed)}`);\n }\n\n try {\n const { stdout } = await execFileAsync('rg', args, { cwd: rootDir, maxBuffer: 64 * 1024 * 1024, encoding: 'utf8' });\n if (!stdout) return { totalFiles: 0, totalDirs: 0 };\n\n const files = stdout.split('\\0').filter(Boolean);\n const dirs = new Set<string>();\n for (const file of files) {\n const dir = path.dirname(file);\n if (dir && dir !== '.') dirs.add(dir);\n }\n\n return { totalFiles: files.length, totalDirs: dirs.size };\n } catch {\n return null;\n }\n}\n\n/**\n * Count the number of source files in a directory (non-recursive by default).\n * For project-level file counting, skips binary/media files.\n */\nexport async function countFilesInDir(dir: string, recursive = true): Promise<number> {\n let count = 0;\n const extraSkip = new Set(['obj', 'bin', 'Debug', 'Release', 'TestResults']);\n\n async function walk(currentDir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await fs.readdir(currentDir, { withFileTypes: true });\n } catch {\n return;\n }\n const subs: Promise<void>[] = [];\n for (const e of entries) {\n if (e.isDirectory()) {\n if (!recursive) continue;\n if (isSkippedDirName(e.name) || extraSkip.has(e.name)) continue;\n subs.push(walk(path.join(currentDir, e.name)));\n } else if (e.isFile()) {\n const ext = path.extname(e.name).toLowerCase();\n if (!SKIP_EXTENSIONS.has(ext)) count++;\n }\n }\n await Promise.all(subs);\n }\n\n await walk(dir);\n return count;\n}\n\n/**\n * Sum the byte size of all source files in a directory (recursive),\n * skipping common build/output dirs and binary/media files. Standalone\n * fallback for {@link FileCache.bytesUnder} when the cached walk is cold.\n */\nexport async function bytesInDir(dir: string, recursive = true): Promise<number> {\n let bytes = 0;\n const extraSkip = new Set(['obj', 'bin', 'Debug', 'Release', 'TestResults']);\n\n async function walk(currentDir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await fs.readdir(currentDir, { withFileTypes: true });\n } catch {\n return;\n }\n const subs: Promise<void>[] = [];\n for (const e of entries) {\n if (e.isDirectory()) {\n if (!recursive) continue;\n if (isSkippedDirName(e.name) || extraSkip.has(e.name)) continue;\n subs.push(walk(path.join(currentDir, e.name)));\n } else if (e.isFile()) {\n const ext = path.extname(e.name).toLowerCase();\n if (SKIP_EXTENSIONS.has(ext)) continue;\n try {\n const stat = await fs.stat(path.join(currentDir, e.name));\n bytes += stat.size;\n } catch {\n // ignore unreadable files\n }\n }\n }\n await Promise.all(subs);\n }\n\n await walk(dir);\n return bytes;\n}\n\n/** Recursively find files matching a predicate, skipping common build/output dirs */\nexport async function findFiles(\n rootDir: string,\n predicate: (name: string) => boolean,\n): Promise<string[]> {\n const results: string[] = [];\n const cores = typeof os.availableParallelism === 'function' ? os.availableParallelism() : os.cpus().length || 4;\n const maxConcurrentReads = Math.max(8, Math.min(64, cores * 4));\n const readDirSemaphore = new Semaphore(maxConcurrentReads);\n\n async function walk(dir: string) {\n let entries: Dirent[];\n try {\n entries = await readDirSemaphore.run(() => fs.readdir(dir, { withFileTypes: true }));\n } catch {\n return;\n }\n\n const subDirectoryWalks: Promise<void>[] = [];\n\n for (const e of entries) {\n if (e.isDirectory()) {\n if (isSkippedDirName(e.name)) continue;\n subDirectoryWalks.push(walk(path.join(dir, e.name)));\n } else if (e.isFile() && predicate(e.name)) {\n const ext = path.extname(e.name).toLowerCase();\n if (!SKIP_EXTENSIONS.has(ext)) results.push(path.join(dir, e.name));\n }\n }\n\n await Promise.all(subDirectoryWalks);\n }\n\n await walk(rootDir);\n return results;\n}\n\nexport async function findPackageJsonFiles(rootDir: string): Promise<string[]> {\n return findFiles(rootDir, (name) => name === 'package.json');\n}\n\nexport async function findSolutionFiles(rootDir: string): Promise<string[]> {\n return findFiles(rootDir, (name) => name.endsWith('.sln'));\n}\n\nexport async function findCsprojFiles(rootDir: string): Promise<string[]> {\n return findFiles(rootDir, (name) => name.endsWith('.csproj'));\n}\n\n/**\n * Strip a UTF-8 byte-order mark — editors on Windows commonly save\n * manifests with a BOM, and JSON.parse rejects it, which silently\n * dropped the project from scan results.\n */\nexport function stripBom(text: string): string {\n return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text;\n}\n\nexport async function readJsonFile<T>(filePath: string): Promise<T> {\n const txt = await fs.readFile(filePath, 'utf8');\n return JSON.parse(stripBom(txt)) as T;\n}\n\nexport async function readTextFile(filePath: string): Promise<string> {\n return fs.readFile(filePath, 'utf8');\n}\n\nexport async function pathExists(p: string): Promise<boolean> {\n try {\n await fs.access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n}\n\nexport async function writeJsonFile(filePath: string, data: unknown): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf8');\n}\n\nexport async function writeTextFile(filePath: string, content: string): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content, 'utf8');\n}\n"]}
@@ -1,16 +1,6 @@
1
- import { daemonDir } from './chunk-BWPBB45M.js';
2
- import * as path from 'path';
1
+ import { vgdSocketPath } from './chunk-NDNNOAS6.js';
3
2
  import * as net from 'net';
4
3
 
5
- function vgdSocketPath(env = process.env, platform = process.platform) {
6
- if (platform === "win32") {
7
- return path.join("\\\\.\\pipe", "vibgrate-vgd");
8
- }
9
- return path.join(daemonDir(env, platform), "vgd.sock");
10
- }
11
- function vgdPidPath(env = process.env, platform = process.platform) {
12
- return path.join(daemonDir(env, platform), "vgd.pid");
13
- }
14
4
  function defaultVgdTimeoutMs(op) {
15
5
  switch (op) {
16
6
  case "ping":
@@ -75,6 +65,6 @@ async function vgdIsRunning(options = {}) {
75
65
  }
76
66
  }
77
67
 
78
- export { vgdIsRunning, vgdPidPath, vgdRequest, vgdSocketPath };
79
- //# sourceMappingURL=chunk-RBIRXQR6.js.map
80
- //# sourceMappingURL=chunk-RBIRXQR6.js.map
68
+ export { vgdIsRunning, vgdRequest };
69
+ //# sourceMappingURL=chunk-NO4BMW7M.js.map
70
+ //# sourceMappingURL=chunk-NO4BMW7M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/vgd/client.ts"],"names":[],"mappings":"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","file":"chunk-NO4BMW7M.js","sourcesContent":["import * as net from 'node:net';\nimport type { VgdRequest, VgdResponse } from './protocol.js';\nimport { vgdSocketPath } from './paths.js';\n\nexport interface VgdClientOptions {\n socketPath?: string;\n /** End-to-end response timeout in ms (default: per-op, see {@link defaultVgdTimeoutMs}). */\n timeoutMs?: number;\n}\n\n/**\n * Default response timeout per operation.\n *\n * The timer spans the whole round trip — writing the request, the daemon\n * handling it, and the reply. Liveness probes must fail fast, but a flat 2s\n * default guaranteed false \"vgd did not respond\" failures on large repos:\n * `put-graph` ships the entire code map as one JSON line (tens of MB for a\n * 40k-file workspace), and the single-threaded daemon needs seconds to read\n * and store it. Ops that ride on a busy daemon's event loop get headroom too.\n */\nexport function defaultVgdTimeoutMs(op: VgdRequest['op']): number {\n switch (op) {\n case 'ping':\n case 'status':\n return 2000; // liveness probes — fail fast\n case 'put-graph':\n case 'load-graph':\n case 'host-load':\n return 120_000; // large payload / disk load / model load\n case 'host-generate':\n return 300_000; // local model generation\n default:\n return 10_000; // registry + graph queries — may queue behind a put-graph\n }\n}\n\n/**\n * Send one request to a running vgd and return the parsed response.\n * Rejects if the daemon is not reachable.\n */\nexport function vgdRequest(request: VgdRequest, options: VgdClientOptions = {}): Promise<VgdResponse> {\n const socketPath = options.socketPath ?? vgdSocketPath();\n const timeoutMs = options.timeoutMs ?? defaultVgdTimeoutMs(request.op);\n\n return new Promise((resolve, reject) => {\n const socket = net.createConnection(socketPath);\n let settled = false;\n let buffer = '';\n\n const finish = (err?: Error, value?: VgdResponse): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n socket.destroy();\n if (err) reject(err);\n else resolve(value!);\n };\n\n const timer = setTimeout(() => finish(new Error(`vgd did not respond within ${timeoutMs}ms`)), timeoutMs);\n\n socket.setEncoding('utf8');\n socket.on('connect', () => {\n socket.write(JSON.stringify(request) + '\\n');\n });\n socket.on('data', (chunk: string) => {\n buffer += chunk;\n const nl = buffer.indexOf('\\n');\n if (nl < 0) return;\n const line = buffer.slice(0, nl).trim();\n try {\n finish(undefined, JSON.parse(line) as VgdResponse);\n } catch (e) {\n finish(e instanceof Error ? e : new Error(String(e)));\n }\n });\n socket.on('error', (err) => finish(err));\n socket.on('end', () => {\n if (!settled) finish(new Error('vgd closed the connection before responding'));\n });\n });\n}\n\n/** True when a local vgd answers ping. */\nexport async function vgdIsRunning(options: VgdClientOptions = {}): Promise<boolean> {\n try {\n const res = await vgdRequest({ op: 'ping' }, options);\n return res.ok === true && 'pong' in res && res.pong === true;\n } catch {\n return false;\n }\n}\n"]}
@@ -0,0 +1,43 @@
1
+ // src/engine/serialize.ts
2
+ function serializeGraph(graph, opts) {
3
+ const indent = opts?.compact ? 0 : 2;
4
+ return `${stableStringify(graph, indent)}
5
+ `;
6
+ }
7
+ function slimGraphForExport(graph) {
8
+ return {
9
+ ...graph,
10
+ areas: graph.areas.map((a) => ({
11
+ ...a,
12
+ members: []
13
+ // member id lists dominate XL exports; area id still on nodes
14
+ })),
15
+ grounding: void 0,
16
+ facts: graph.facts
17
+ // Keep summaries/unknowns — small and useful to agents.
18
+ };
19
+ }
20
+ function stableStringify(value, indent = 2) {
21
+ return JSON.stringify(sortKeys(value), null, indent);
22
+ }
23
+ function sortKeys(value) {
24
+ if (Array.isArray(value)) return value.map(sortKeys);
25
+ if (value && typeof value === "object") {
26
+ const input = value;
27
+ const out = {};
28
+ for (const key of Object.keys(input).sort()) {
29
+ const v = input[key];
30
+ if (v === void 0) continue;
31
+ out[key] = sortKeys(v);
32
+ }
33
+ return out;
34
+ }
35
+ return value;
36
+ }
37
+ function parseGraph(json) {
38
+ return JSON.parse(json);
39
+ }
40
+
41
+ export { parseGraph, serializeGraph, slimGraphForExport, stableStringify };
42
+ //# sourceMappingURL=chunk-O3LABX6I.js.map
43
+ //# sourceMappingURL=chunk-O3LABX6I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/serialize.ts"],"names":[],"mappings":";AAWO,SAAS,cAAA,CAAe,OAAgB,IAAA,EAAsC;AAEnF,EAAA,MAAM,MAAA,GAAS,IAAA,EAAM,OAAA,GAAU,CAAA,GAAI,CAAA;AACnC,EAAA,OAAO,CAAA,EAAG,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC;AAAA,CAAA;AAC1C;AAMO,SAAS,mBAAmB,KAAA,EAAyB;AAC1D,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC7B,GAAG,CAAA;AAAA,MACH,SAAS;AAAC;AAAA,KACZ,CAAE,CAAA;AAAA,IACF,SAAA,EAAW,MAAA;AAAA,IACX,OAAO,KAAA,CAAM;AAAA;AAAA,GAEf;AACF;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAgB,MAAA,GAAS,CAAA,EAAW;AAClE,EAAA,OAAO,KAAK,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG,MAAM,MAAM,CAAA;AACrD;AAEA,SAAS,SAAS,KAAA,EAAyB;AACzC,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,QAAQ,CAAA;AACnD,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAK,EAAG;AAC3C,MAAA,MAAM,CAAA,GAAI,MAAM,GAAG,CAAA;AACnB,MAAA,IAAI,MAAM,MAAA,EAAW;AACrB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAW,IAAA,EAAuB;AAChD,EAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AACxB","file":"chunk-O3LABX6I.js","sourcesContent":["import type { VgGraph } from '../schema.js';\n\n/**\n * Deterministic serialization of `graph.json`.\n *\n * Object keys are sorted recursively and arrays are emitted in the (already\n * stable) order the engine produced them, so two runs over identical content\n * yield byte-identical output — the determinism contract (VG-CLI-SPEC §1.3).\n * Pretty-printed (2-space) and newline-terminated so the committed artifact is\n * human-diffable and plays well with the union merge driver.\n */\nexport function serializeGraph(graph: VgGraph, opts?: { compact?: boolean }): string {\n // Compact (no pretty-print) for large maps / CI artifacts — still deterministic.\n const indent = opts?.compact ? 0 : 2;\n return `${stableStringify(graph, indent)}\\n`;\n}\n\n/**\n * Drop heavy optional fields for export/sharing when size matters.\n * Does not mutate the input graph.\n */\nexport function slimGraphForExport(graph: VgGraph): VgGraph {\n return {\n ...graph,\n areas: graph.areas.map((a) => ({\n ...a,\n members: [], // member id lists dominate XL exports; area id still on nodes\n })),\n grounding: undefined,\n facts: graph.facts,\n // Keep summaries/unknowns — small and useful to agents.\n };\n}\n\nexport function stableStringify(value: unknown, indent = 2): string {\n return JSON.stringify(sortKeys(value), null, indent);\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value && typeof value === 'object') {\n const input = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(input).sort()) {\n const v = input[key];\n if (v === undefined) continue; // omit undefined for stable output\n out[key] = sortKeys(v);\n }\n return out;\n }\n return value;\n}\n\nexport function parseGraph(json: string): VgGraph {\n return JSON.parse(json) as VgGraph;\n}\n"]}
@@ -1,14 +1,16 @@
1
+ import { loadConfig, computeUpgradeImpact, getChangelogSignals, gitHistoryAvailable, buildVersionTimelines, findPackageTimeline, severityRank, projectTypeToVulnEcosystem } from './chunk-V2UGRUTL.js';
1
2
  import { availableRegionIds, resolveIngestHost, dashHostForIngestHost, ingestHostForRegionId } from './chunk-HTLDXEHW.js';
2
- import { loadConfig, computeUpgradeImpact, getChangelogSignals, gitHistoryAvailable, buildVersionTimelines, findPackageTimeline, severityRank, projectTypeToVulnEcosystem } from './chunk-ANYL7SUI.js';
3
- import { searchSymbols, resolveVersion, resolveLib, loadCatalog, driftFor, localPackageDocs, readDoc, inventory, localApiSurface } from './chunk-NQUWC2IA.js';
4
- import { resolveOne } from './chunk-J7LKEB2R.js';
5
- import { impactOf, indexFor, queryGraphSemantic, queryGraph } from './chunk-2TJ5EY4I.js';
3
+ import { searchSymbols, resolveVersion, resolveLib, loadCatalog, driftFor, localPackageDocs, readDoc, localApiSurface } from './chunk-OVUZWR67.js';
6
4
  import { discoverModels } from './chunk-CQDUBAQY.js';
7
- import { loadOrDiscoverFederation, highConfidenceBridges } from './chunk-5I4VSBWQ.js';
8
5
  import { writeTextFile, pathExists, readJsonFile } from './chunk-CRAMOEBE.js';
9
- import { withTimeout, getNodeEmbeddings, loadEmbedder, isModelReady } from './chunk-2GSMCOIC.js';
10
- import { cacheDir } from './chunk-QPXVTQ7O.js';
11
- import { parseGraph, analyzeQuestion, loadTopicTags } from './chunk-ENFSSUNK.js';
6
+ import { inventory } from './chunk-6BEBJCK4.js';
7
+ import { resolveOne } from './chunk-J7LKEB2R.js';
8
+ import { impactOf, indexFor, queryGraphSemantic, queryGraph } from './chunk-DUCEKH7Q.js';
9
+ import { loadOrDiscoverFederation, highConfidenceBridges } from './chunk-5I4VSBWQ.js';
10
+ import { withTimeout, getNodeEmbeddings, loadEmbedder, isModelReady } from './chunk-WVTGF2MP.js';
11
+ import { analyzeQuestion, loadTopicTags } from './chunk-Q7TWHJJ6.js';
12
+ import { cacheDir } from './chunk-MVPRPSXU.js';
13
+ import { parseGraph } from './chunk-O3LABX6I.js';
12
14
  import { repositoryIdFromRoot } from './chunk-BWPBB45M.js';
13
15
  import { bidirectional } from 'graphology-shortest-path/unweighted.js';
14
16
  import Graph from 'graphology';
@@ -1413,6 +1415,25 @@ async function retrieve(graph, question, budget, ctx) {
1413
1415
  let mode = "lexical";
1414
1416
  const relevance = await analyzeQuestion(question);
1415
1417
  const topicTags = relevance ? await loadTopicTags(graph, ctx.root, ctx.graphPath) : null;
1418
+ if (ctx.semanticSession && !ctx.local) {
1419
+ try {
1420
+ const ranked = await withTimeout(
1421
+ ctx.semanticSession.rank(question, graph.provenance?.corpusHash),
1422
+ SEMANTIC_BUDGET_MS,
1423
+ "daemon ranking over budget"
1424
+ );
1425
+ if (ranked) {
1426
+ const q = await queryGraphSemantic(graph, question, {
1427
+ budget,
1428
+ semanticRanked: ranked.ranked,
1429
+ relevance,
1430
+ topicTags
1431
+ });
1432
+ return { q, mode: `semantic (vgd${ranked.model ? `, ${ranked.model}` : ""})` };
1433
+ }
1434
+ } catch {
1435
+ }
1436
+ }
1416
1437
  try {
1417
1438
  const q = await withTimeout(
1418
1439
  (async () => {
@@ -2224,5 +2245,5 @@ function navigationToolsetConfig(serverName = "vibgrate") {
2224
2245
  }
2225
2246
 
2226
2247
  export { FREE_PACK, HOT_TOOLS, TOOLS, assessDocQuality, budgetSuffix, clearStoredCredentials, countTokens, coveringTests, createWorkspaceDsn, credentialsPath, deferredToolNames, detectRunner, dsnCommand, ensureGitignored, fetchHostedDocsCached, findGitRoot, gitignoreEntryForCredentials, homeCredentialsPath, hostedBase, listedToolNames, navigationToolsetConfig, parseDsn, pathDisconnect, projectCredentialsPath, publishPrivateLibrary, pushCommand, readScanArtifact, readStoredCredentials, renderToolResult, resolveDsn, selectForBudget, shortestPath, symbolsFromApi, testsToRun, uploadScanArtifact, warmEmbedderInBackground, writeStoredCredentials };
2227
- //# sourceMappingURL=chunk-FD2HPGX2.js.map
2228
- //# sourceMappingURL=chunk-FD2HPGX2.js.map
2248
+ //# sourceMappingURL=chunk-OS4YFOFJ.js.map
2249
+ //# sourceMappingURL=chunk-OS4YFOFJ.js.map