scriptonia 0.8.0 → 0.9.0-rc.2

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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -13
  3. package/assets/grammar-manifest.json +32 -0
  4. package/assets/grammars/tree-sitter-bash.wasm +0 -0
  5. package/assets/grammars/tree-sitter-c.wasm +0 -0
  6. package/assets/grammars/tree-sitter-cpp.wasm +0 -0
  7. package/assets/grammars/tree-sitter-dart.wasm +0 -0
  8. package/assets/grammars/tree-sitter-go.wasm +0 -0
  9. package/assets/grammars/tree-sitter-java.wasm +0 -0
  10. package/assets/grammars/tree-sitter-javascript.wasm +0 -0
  11. package/assets/grammars/tree-sitter-kotlin.wasm +0 -0
  12. package/assets/grammars/tree-sitter-objc.wasm +0 -0
  13. package/assets/grammars/tree-sitter-python.wasm +0 -0
  14. package/assets/grammars/tree-sitter-rust.wasm +0 -0
  15. package/assets/grammars/tree-sitter-swift.wasm +0 -0
  16. package/assets/grammars/tree-sitter-tsx.wasm +0 -0
  17. package/assets/grammars/tree-sitter-typescript.wasm +0 -0
  18. package/assets/licenses/tree-sitter-wasms-LICENSE +24 -0
  19. package/assets/licenses/web-tree-sitter-LICENSE +21 -0
  20. package/assets/queries/manifest.json +12 -0
  21. package/assets/queries/v1/dart.scm +7 -0
  22. package/assets/queries/v1/go.scm +5 -0
  23. package/assets/queries/v1/javascript.scm +15 -0
  24. package/assets/queries/v1/python.scm +5 -0
  25. package/assets/queries/v1/typescript.scm +17 -0
  26. package/assets/tree-sitter.wasm +0 -0
  27. package/bin/scriptonia.mjs +243 -76
  28. package/bin/verify.mjs +40 -6
  29. package/dist/brain-ast-worker.js +62 -0
  30. package/dist/brain-ast-worker.js.map +1 -0
  31. package/dist/chunk-6TLQP3LV.js +4048 -0
  32. package/dist/chunk-6TLQP3LV.js.map +1 -0
  33. package/dist/chunk-ZLKAW77A.js +16613 -0
  34. package/dist/chunk-ZLKAW77A.js.map +1 -0
  35. package/dist/index.js +2431 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/legacy-brain-bridge.js +156 -0
  38. package/dist/legacy-brain-bridge.js.map +1 -0
  39. package/package.json +78 -5
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../packages/core/src/index.ts","../../packages/brain-census/src/walk.ts","../../packages/brain-census/src/languages.ts","../../packages/brain-census/src/manifests.ts","../../packages/brain-census/src/stack.ts","../../packages/brain-census/src/docs.ts","../../packages/brain-census/src/test-map.ts","../../packages/brain-ast/src/query-assets.ts","../../packages/brain-ast/src/grammar-registry.ts","../../packages/brain-ast/src/types.ts","../../packages/brain-ast/src/fallback-parsers.ts","../../packages/brain-ast/src/tree-sitter-parser.ts","../../packages/brain-ast/src/parse-source.ts","../../packages/brain-ast/src/worker-protocol.ts"],"sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\n\nexport type CheckState = \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\nexport type GateState = \"PASS\" | \"PASS_WITH_WARNINGS\" | \"ACTION_REQUIRED\" | \"BLOCKED\" | \"INCOMPLETE\";\nexport type Enforcement = \"observe\" | \"warn\" | \"action_required\" | \"block\";\n\nexport function canonicalize(value: unknown): string {\n return JSON.stringify(normalize(value));\n}\n\nfunction normalize(value: unknown): unknown {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return typeof value === \"string\" ? value.replace(/\\r\\n?/g, \"\\n\") : value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"canonical JSON rejects non-finite numbers\");\n return value;\n }\n if (Array.isArray(value)) return value.map(normalize);\n if (typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, normalize(item)]));\n }\n throw new TypeError(`canonical JSON rejects ${typeof value}`);\n}\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function hashObject(value: unknown): string {\n return sha256(canonicalize(value));\n}\n\nexport function createId(prefix: string, at = Date.now()): string {\n return `${prefix}_${at.toString(36).padStart(9, \"0\")}${randomBytes(8).toString(\"hex\")}`;\n}\n\nexport function normalizeRepoPath(input: string): string {\n if (input.includes(\"\\0\")) throw new Error(\"repository path contains a null byte\");\n const normalized = input.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\//, \"\");\n if (path.posix.isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\") || normalized.includes(\"/../\")) {\n throw new Error(`path escapes repository: ${input}`);\n }\n return path.posix.normalize(normalized);\n}\n\nexport function assertInside(root: string, candidate: string): string {\n const resolvedRoot = path.resolve(root);\n const resolved = path.resolve(candidate);\n if (resolved !== resolvedRoot && !resolved.startsWith(`${resolvedRoot}${path.sep}`)) throw new Error(`path escapes repository: ${candidate}`);\n return resolved;\n}\n\nexport function aggregateGate(checks: Array<{ state: CheckState; enforcement: Enforcement }>, incompleteBlocks = true): GateState {\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"block\")) return \"BLOCKED\";\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"action_required\")) return \"ACTION_REQUIRED\";\n if (checks.some((item) => item.state === \"ERROR\" || (incompleteBlocks && item.state === \"INCONCLUSIVE\" && item.enforcement === \"block\"))) return \"INCOMPLETE\";\n if (checks.some((item) => item.state === \"FAIL\" || item.state === \"INCONCLUSIVE\")) return \"PASS_WITH_WARNINGS\";\n return \"PASS\";\n}\n\nexport function exitCodeForGate(state: GateState): number {\n return state === \"PASS\" || state === \"PASS_WITH_WARNINGS\" ? 0 : state === \"ACTION_REQUIRED\" ? 2 : state === \"BLOCKED\" ? 3 : 4;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { execFileSync } from \"node:child_process\";\nimport ignore, { type Ignore } from \"ignore\";\nimport { assertInside, normalizeRepoPath } from \"@scriptonia/core\";\nimport { analysisPolicy, classifyFile, detectLanguage, isKnownManifest } from \"./languages\";\nimport type { WalkResult, WalkWarning, WalkedFile } from \"./types\";\n\nconst NEVER_DESCEND = new Set([\n \".git\", \".scriptonia\", \".dart_tool\", \".next\", \".turbo\", \".venv\", \"__pycache__\", \"DerivedData\",\n \"Microsoft VS Code\", \"Pods\", \"bazel-bin\", \"bazel-out\", \"bazel-testlogs\", \"node_modules\",\n]);\n\nconst BUILTIN_IGNORE = [\n \".git/\", \".scriptonia/\", \".dart_tool/\", \".next/\", \".turbo/\", \".venv/\", \"**/__pycache__/\", \"**/node_modules/\",\n \"**/DerivedData/\", \"**/Microsoft VS Code/\", \"**/Pods/\", \"**/.cache/\", \"**/build/\", \"**/coverage/\", \"**/dist/\",\n \"bazel-bin/\", \"bazel-out/\", \"bazel-testlogs/\",\n];\n\nconst DEFAULT_MAX_ASSET_BYTES = 2 * 1024 * 1024;\n\nexport type WalkOptions = {\n /** Assets and binary payloads above this size are excluded. Source and manifests remain visible. */\n maxAssetBytes?: number;\n maxFileBytes?: number;\n maxTextBytes?: number;\n extraIgnore?: string[];\n onFile?: (file: WalkedFile) => void;\n};\n\ntype HashedFile = { sha256: string; loc: number; binary: boolean; sample: string };\n\nexport function walkRepo(inputRoot: string, options: WalkOptions = {}): WalkResult {\n const started = performance.now();\n const root = fs.realpathSync(inputRoot);\n const matcher = ignore().add(BUILTIN_IGNORE).add(options.extraIgnore ?? []);\n const forcedMatcher = ignore().add(options.extraIgnore ?? []);\n const tracked = gitTrackedPaths(root);\n const trackedDirectories = new Set<string>();\n for (const filename of tracked) {\n let directory = path.posix.dirname(filename);\n while (directory !== \".\") {\n trackedDirectories.add(directory);\n directory = path.posix.dirname(directory);\n }\n }\n const files: WalkedFile[] = [];\n const warnings: WalkWarning[] = [];\n let ignored = 0;\n const maxAssetBytes = options.maxAssetBytes ?? DEFAULT_MAX_ASSET_BYTES;\n const maxFileBytes = options.maxFileBytes ?? 128 * 1024 * 1024;\n const maxTextBytes = options.maxTextBytes ?? 8 * 1024 * 1024;\n\n const visit = (absoluteDir: string, relativeDir: string): void => {\n loadIgnoreFile(matcher, absoluteDir, relativeDir, warnings);\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(absoluteDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n warnings.push({ path: relativeDir || \".\", kind: \"unreadable\", message: errorMessage(error) });\n return;\n }\n\n for (const entry of entries) {\n const relativeRaw = relativeDir ? `${relativeDir}/${entry.name}` : entry.name;\n let relative: string;\n try {\n relative = normalizeRepoPath(relativeRaw);\n } catch (error) {\n warnings.push({ path: relativeRaw, kind: \"invalid_path\", message: errorMessage(error) });\n continue;\n }\n const absolute = path.join(root, ...relative.split(\"/\"));\n try { assertInside(root, absolute); } catch (error) {\n warnings.push({ path: relative, kind: \"invalid_path\", message: errorMessage(error) });\n continue;\n }\n\n let stat: fs.Stats;\n try { stat = fs.lstatSync(absolute); } catch (error) {\n warnings.push({ path: relative, kind: \"unreadable\", message: errorMessage(error) });\n continue;\n }\n if (stat.isSymbolicLink()) {\n warnings.push({ path: relative, kind: \"symlink\", message: \"symbolic link recorded as metadata and never followed\" });\n try {\n const target = fs.readlinkSync(absolute);\n const language = detectLanguage(relative);\n const fileClass = classifyFile(relative, \"\", false);\n const file: WalkedFile = {\n path: relative,\n ...(language ? { language } : {}),\n class: fileClass,\n analysisMode: \"metadata_only\",\n metadataOnlyReason: \"symlink\",\n size: Buffer.byteLength(target),\n loc: 0,\n sha256: createHash(\"sha256\").update(\"symlink\\0\").update(target).digest(\"hex\"),\n binary: false,\n mtimeMs: stat.mtimeMs,\n };\n files.push(file);\n options.onFile?.(file);\n } catch (error) {\n warnings.push({ path: relative, kind: \"unreadable\", message: errorMessage(error) });\n }\n continue;\n }\n\n if (entry.isDirectory()) {\n if (\n NEVER_DESCEND.has(entry.name) ||\n forcedMatcher.ignores(`${relative}/`) ||\n (matcher.ignores(`${relative}/`) && !trackedDirectories.has(relative))\n ) { ignored++; continue; }\n visit(absolute, relative);\n continue;\n }\n if (!entry.isFile()) continue;\n if (\n forcedMatcher.ignores(relative) ||\n (matcher.ignores(relative) && entry.name !== \".gitignore\" && !tracked.has(relative))\n ) { ignored++; continue; }\n const manifest = isKnownManifest(relative);\n const aboveAssetLimit = stat.size > maxAssetBytes && !manifest;\n const oversized = stat.size > maxFileBytes && !manifest;\n if (oversized) {\n warnings.push({ path: relative, kind: \"oversized\", message: `file exceeds ${maxFileBytes} byte census limit` });\n }\n\n try {\n const inspectText = stat.size <= maxTextBytes || manifest;\n const hashed = hashFile(absolute, inspectText);\n const fileClass = classifyFile(relative, hashed.sample, hashed.binary);\n if (aboveAssetLimit && fileClass === \"asset\") {\n warnings.push({ path: relative, kind: \"oversized\", message: `asset or binary exceeds ${maxAssetBytes} byte full-analysis limit; retained as metadata` });\n }\n const file: WalkedFile = {\n path: relative,\n language: detectLanguage(relative, hashed.sample),\n class: fileClass,\n ...analysisPolicy(relative, fileClass, hashed.binary, oversized || !inspectText || (aboveAssetLimit && fileClass === \"asset\")),\n size: stat.size,\n loc: hashed.loc,\n sha256: hashed.sha256,\n binary: hashed.binary,\n mtimeMs: stat.mtimeMs,\n };\n files.push(file);\n options.onFile?.(file);\n } catch (error) {\n warnings.push({ path: relative, kind: \"unreadable\", message: errorMessage(error) });\n }\n }\n };\n\n visit(root, \"\");\n return { root, files, warnings, ignored, elapsedMs: performance.now() - started };\n}\n\n/** Git-ignore rules must not erase files Git already tracks. */\nfunction gitTrackedPaths(root: string): Set<string> {\n try {\n const output = execFileSync(\"git\", [\"-C\", root, \"ls-files\", \"--cached\", \"-z\"], {\n encoding: \"utf8\",\n maxBuffer: 64 * 1024 * 1024,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n return new Set(output.split(\"\\0\").filter(Boolean).map((filename) => normalizeRepoPath(filename)));\n } catch {\n return new Set();\n }\n}\n\nfunction hashFile(filename: string, inspectText: boolean): HashedFile {\n const hash = createHash(\"sha256\");\n const fd = fs.openSync(filename, \"r\");\n const buffer = Buffer.allocUnsafe(64 * 1024);\n let position = 0;\n let sample = Buffer.alloc(0);\n let binary = false;\n let lineFeeds = 0;\n try {\n while (true) {\n const bytes = fs.readSync(fd, buffer, 0, buffer.length, position);\n if (!bytes) break;\n position += bytes;\n const chunk = buffer.subarray(0, bytes);\n hash.update(chunk);\n if (sample.length < 8192) sample = Buffer.concat([sample, chunk.subarray(0, 8192 - sample.length)]);\n if (!binary && chunk.includes(0)) binary = true;\n if (inspectText && !binary) for (const byte of chunk) if (byte === 10) lineFeeds++;\n }\n } finally {\n fs.closeSync(fd);\n }\n return {\n sha256: hash.digest(\"hex\"),\n loc: binary || !inspectText || position === 0 ? 0 : lineFeeds + 1,\n binary,\n sample: binary ? \"\" : sample.toString(\"utf8\"),\n };\n}\n\nfunction loadIgnoreFile(matcher: Ignore, absoluteDir: string, relativeDir: string, warnings: WalkWarning[]): void {\n const filename = path.join(absoluteDir, \".gitignore\");\n if (!fs.existsSync(filename)) return;\n try {\n const lines = fs.readFileSync(filename, \"utf8\").split(/\\r?\\n/);\n for (const line of lines) matcher.add(scopeIgnorePattern(line, relativeDir));\n } catch (error) {\n warnings.push({ path: relativeDir ? `${relativeDir}/.gitignore` : \".gitignore\", kind: \"unreadable\", message: errorMessage(error) });\n }\n}\n\nfunction scopeIgnorePattern(line: string, base: string): string | string[] {\n if (!base || !line || /^\\s*#/.test(line)) return line;\n const negated = line.startsWith(\"!\");\n const prefix = negated ? \"!\" : \"\";\n const body = negated ? line.slice(1) : line;\n if (!body) return line;\n if (body.startsWith(\"/\")) return `${prefix}${base}/${body.slice(1)}`;\n if (body.includes(\"/\")) return `${prefix}${base}/${body}`;\n return [`${prefix}${base}/${body}`, `${prefix}${base}/**/${body}`];\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import path from \"node:path\";\nimport type { AnalysisMode, FileClass, MetadataOnlyReason, SourceLanguage } from \"./types\";\n\nconst EXTENSIONS = new Map<string, SourceLanguage>([\n [\".c\", \"c\"], [\".h\", \"cpp\"], [\".cc\", \"cpp\"], [\".cp\", \"cpp\"], [\".cpp\", \"cpp\"], [\".cxx\", \"cpp\"],\n [\".hh\", \"cpp\"], [\".hpp\", \"cpp\"], [\".hxx\", \"cpp\"], [\".inc\", \"cpp\"], [\".m\", \"objective-c\"], [\".mm\", \"objective-c\"],\n [\".cs\", \"csharp\"], [\".css\", \"css\"], [\".scss\", \"css\"], [\".sass\", \"css\"], [\".less\", \"css\"],\n [\".dart\", \"dart\"], [\".ex\", \"elixir\"], [\".exs\", \"elixir\"], [\".go\", \"go\"], [\".graphql\", \"graphql\"], [\".gql\", \"graphql\"],\n [\".html\", \"html\"], [\".htm\", \"html\"], [\".java\", \"java\"], [\".js\", \"javascript\"], [\".jsx\", \"javascript\"],\n [\".mjs\", \"javascript\"], [\".cjs\", \"javascript\"], [\".json\", \"json\"], [\".jsonc\", \"json\"], [\".kt\", \"kotlin\"],\n [\".kts\", \"kotlin\"], [\".lua\", \"lua\"], [\".pl\", \"perl\"], [\".pm\", \"perl\"], [\".php\", \"php\"], [\".proto\", \"proto\"],\n [\".py\", \"python\"], [\".pyi\", \"python\"], [\".rb\", \"ruby\"], [\".rs\", \"rust\"], [\".scala\", \"scala\"],\n [\".sh\", \"shell\"], [\".bash\", \"shell\"], [\".zsh\", \"shell\"], [\".fish\", \"shell\"], [\".sql\", \"sql\"],\n [\".bzl\", \"starlark\"], [\".bazel\", \"starlark\"], [\".star\", \"starlark\"], [\".swift\", \"swift\"], [\".toml\", \"toml\"],\n [\".ts\", \"typescript\"], [\".tsx\", \"typescript\"], [\".mts\", \"typescript\"], [\".cts\", \"typescript\"], [\".vue\", \"vue\"],\n [\".xml\", \"xml\"], [\".plist\", \"xml\"], [\".yaml\", \"yaml\"], [\".yml\", \"yaml\"],\n]);\n\nconst STARLARK_BASENAMES = new Set([\"BUILD\", \"WORKSPACE\", \"WORKSPACE.bzlmod\", \"MODULE.bazel\"]);\nconst CONFIG_BASENAMES = new Set([\n \".bazelignore\", \".bazelrc\", \".bazelversion\", \".clang-format\", \".clang-tidy\", \".dockerignore\", \".editorconfig\", \".env.example\",\n \".flake8\", \".gitignore\", \".npmrc\", \".nvmrc\", \".prettierrc\", \".yamllint\", \"CMakeLists.txt\", \"CODEOWNERS\",\n \"Cargo.toml\", \"Dockerfile\", \"Gemfile\", \"Gemfile.lock\", \"Makefile\", \"Podfile\", \"analysis_options.yaml\", \"build.gradle\", \"build.gradle.kts\",\n \"composer.json\", \"composer.lock\", \"deps.yaml\", \"extensions_metadata.yaml\", \"go.mod\", \"go.sum\", \"gradle.properties\", \"MODULE.bazel.lock\",\n \"package-lock.json\", \"package.json\", \"pnpm-lock.yaml\", \"repository_locations.bzl\",\n \"pnpm-workspace.yaml\", \"pom.xml\", \"pubspec.lock\", \"pubspec.yaml\", \"pyproject.toml\", \"requirements.txt\",\n \"settings.gradle\", \"settings.gradle.kts\", \"tsconfig.json\", \"yarn.lock\",\n]);\n\nconst ASSET_EXTENSIONS = new Set([\n \".7z\", \".a\", \".avi\", \".bin\", \".bmp\", \".cer\", \".class\", \".crt\", \".der\", \".dylib\", \".eot\", \".exe\",\n \".fuzz\", \".gif\", \".gold\", \".gz\", \".ico\", \".jar\", \".jpeg\", \".jpg\", \".key\", \".lockb\", \".mmdb\", \".mov\",\n \".mp3\", \".mp4\", \".o\", \".otf\", \".p12\", \".pdf\", \".pem\", \".pfx\", \".png\", \".so\", \".tar\", \".tgz\",\n \".ttf\", \".wav\", \".webm\", \".webp\", \".woff\", \".woff2\", \".xz\", \".zip\",\n]);\n\nconst CERTIFICATE_EXTENSIONS = new Set([\".cer\", \".crt\", \".der\", \".key\", \".p12\", \".pem\", \".pfx\"]);\nconst CORPUS_EXTENSIONS = new Set([\".fuzz\", \".gold\"]);\n\nexport type AnalysisPolicy = { analysisMode: AnalysisMode; metadataOnlyReason?: MetadataOnlyReason };\n\nexport function detectLanguage(filePath: string, sample = \"\"): SourceLanguage | undefined {\n const base = path.posix.basename(filePath);\n if (STARLARK_BASENAMES.has(base) || base === \"BUILD.bazel\") return \"starlark\";\n const extension = path.posix.extname(base).toLowerCase();\n const known = EXTENSIONS.get(extension);\n if (known) return known;\n const firstLine = sample.split(/\\r?\\n/, 1)[0] ?? \"\";\n if (/^#!.*\\bpython(?:3)?\\b/.test(firstLine)) return \"python\";\n if (/^#!.*\\b(?:bash|sh|zsh|fish)\\b/.test(firstLine)) return \"shell\";\n if (/^#!.*\\bnode\\b/.test(firstLine)) return \"javascript\";\n if (/^#!.*\\bruby\\b/.test(firstLine)) return \"ruby\";\n return undefined;\n}\n\nexport function classifyFile(filePath: string, sample: string, binary: boolean): FileClass {\n const normalized = filePath.replaceAll(\"\\\\\", \"/\");\n const lower = normalized.toLowerCase();\n const base = path.posix.basename(normalized);\n const extension = path.posix.extname(base).toLowerCase();\n const language = detectLanguage(normalized, sample);\n if (binary || ASSET_EXTENSIONS.has(extension)) return \"asset\";\n if (isManifestConfigPath(normalized) || CONFIG_BASENAMES.has(base) || STARLARK_BASENAMES.has(base) || /\\.(?:lock|config|conf|ini|properties)$/i.test(base)) return \"config\";\n if (/(?:^|\\/)(?:third_party|vendor|external)\\//i.test(normalized)) return \"vendor\";\n if (/(?:^|\\/)generated(?:\\/|$)/i.test(normalized) || /\\.(?:g|freezed)\\.dart$|\\.pb\\.go$|\\.generated\\.[^.]+$|\\.min\\.(?:js|css)$/i.test(base) || /generated|do not edit/i.test(sample.split(/\\r?\\n/).slice(0, 3).join(\"\\n\"))) return \"generated\";\n if (/\\.(?:md|mdx|rst|adoc|txt)$/i.test(extension) || /(?:^|\\/)(?:docs?|adr|changelogs?)(?:\\/|$)/i.test(normalized)) return \"docs\";\n // A test directory often contains corpus payloads, certificates, templates,\n // and golden data. Only code can enter the source-language coverage\n // denominator; path placement alone must not turn arbitrary bytes into code.\n if (language && (/(?:^|\\/)(?:test|tests|__tests__|spec|integration_test)(?:\\/|$)/i.test(normalized) || /(?:_test\\.dart|\\.(?:test|spec)\\.[cm]?[jt]sx?|test_[^/]+\\.py)$/i.test(base))) return \"test\";\n if (language) return \"source\";\n if (lower.includes(\"/assets/\") || lower.includes(\"/images/\")) return \"asset\";\n return \"asset\";\n}\n\nexport function analysisPolicy(filePath: string, fileClass: FileClass, binary: boolean, oversized = false): AnalysisPolicy {\n const normalized = filePath.replaceAll(\"\\\\\", \"/\");\n const extension = path.posix.extname(path.posix.basename(normalized)).toLowerCase();\n if (/(?:^|\\/)(?:[^/]*_corpus|corpus)(?:\\/|$)/i.test(normalized) || CORPUS_EXTENSIONS.has(extension)) {\n return { analysisMode: \"metadata_only\", metadataOnlyReason: \"corpus\" };\n }\n if (CERTIFICATE_EXTENSIONS.has(extension)) {\n return { analysisMode: \"metadata_only\", metadataOnlyReason: \"certificate\" };\n }\n if (fileClass === \"generated\" || /(?:^|\\/)generated(?:\\/|$)/i.test(normalized)) {\n return { analysisMode: \"metadata_only\", metadataOnlyReason: \"generated\" };\n }\n if (fileClass === \"config\") return { analysisMode: \"full\" };\n if (oversized) return { analysisMode: \"metadata_only\", metadataOnlyReason: \"oversized\" };\n if (binary || fileClass === \"asset\") return { analysisMode: \"metadata_only\", metadataOnlyReason: \"binary_asset\" };\n return { analysisMode: \"full\" };\n}\n\nexport function splitIdentifier(value: string): string[] {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .split(/[^A-Za-z0-9]+/)\n .map((part) => part.toLowerCase())\n .filter(Boolean);\n}\n\nexport function isKnownManifest(filePath: string): boolean {\n const base = path.posix.basename(filePath);\n return CONFIG_BASENAMES.has(base) || STARLARK_BASENAMES.has(base) || isManifestConfigPath(filePath);\n}\n\nfunction isManifestConfigPath(filePath: string): boolean {\n const base = path.posix.basename(filePath);\n return /(?:^|\\/)BUILD(?:\\.bazel)?$/i.test(filePath) ||\n /(?:^|\\/)\\.github\\/workflows\\/[^/]+\\.ya?ml$/i.test(filePath) ||\n /^(?:Dockerfile(?:\\..+)?|requirements(?:[-_.][^/]*)?\\.txt|tsconfig(?:\\.[^/]+)?\\.json)$/i.test(base) ||\n /^(?:docker-)?compose(?:\\.[^/]+)?\\.ya?ml$/i.test(base);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport YAML from \"yaml\";\nimport { z } from \"zod\";\nimport { assertInside, hashObject, normalizeRepoPath } from \"@scriptonia/core\";\nimport type { WalkedFile } from \"./types\";\n\nexport type ManifestParseOptions = {\n /** Detected files above this limit remain in the denominator as failed facts. */\n maxManifestFiles?: number;\n /** A single manifest (including an auxiliary extends/lock file) may not exceed this size. */\n maxManifestBytes?: number;\n /** Total unique bytes read across the parse. Cached auxiliary files count once. */\n maxTotalBytes?: number;\n /** Maximum extracted rows per fact; exceeding it is a hard, explicit parse failure. */\n maxExtractedEntries?: number;\n /** Maximum JSON/JSONC/flow-collection nesting accepted before parsing. */\n maxNestingDepth?: number;\n /** YAML aliases are bounded to prevent expansion bombs. */\n maxYamlAliases?: number;\n /** Local tsconfig extends depth. The execution contract caps this at five. */\n maxTsconfigExtendsDepth?: number;\n /** Reject pathological single-line manifests before parser/regex work. */\n maxLineBytes?: number;\n};\n\ntype ManifestParseLimits = Required<ManifestParseOptions>;\n\ntype CachedText = { ok: true; text: string; bytes: number } | { ok: false; error: string };\n\ntype ManifestParseContext = {\n root: string;\n limits: ManifestParseLimits;\n cache: Map<string, CachedText>;\n totalBytes: number;\n mavenModels: Map<string, MavenModel>;\n manifestPaths: Set<string>;\n};\n\nexport const DEFAULT_MANIFEST_PARSE_LIMITS: Readonly<ManifestParseLimits> = Object.freeze({\n maxManifestFiles: 20_000,\n maxManifestBytes: 16 * 1024 * 1024,\n maxTotalBytes: 256 * 1024 * 1024,\n maxExtractedEntries: 100_000,\n maxNestingDepth: 128,\n maxYamlAliases: 100,\n maxTsconfigExtendsDepth: 5,\n maxLineBytes: 1024 * 1024,\n});\n\nexport const manifestDependencySchema = z.object({\n name: z.string().min(1),\n declared: z.string().optional(),\n resolved: z.string().optional(),\n dev: z.boolean().default(false),\n});\n\nexport const manifestFrameworkSchema = z.object({\n name: z.string().min(1),\n version: z.string().optional(),\n kind: z.enum([\"api\", \"build\", \"database\", \"library\", \"mobile\", \"runtime\", \"test\", \"web\"]),\n});\n\nexport const manifestFactsSchema = z.object({\n id: z.string().min(1),\n path: z.string().min(1),\n kind: z.string().min(1),\n product: z.object({ name: z.string().optional(), version: z.string().optional() }).optional(),\n dependencies: z.array(manifestDependencySchema),\n frameworks: z.array(manifestFrameworkSchema),\n runtimes: z.array(z.object({ name: z.string(), version: z.string().optional() })),\n scripts: z.record(z.string(), z.string()).optional(),\n workspaces: z.array(z.string()).optional(),\n aliases: z.array(z.object({ prefix: z.string(), targets: z.array(z.string()) })).optional(),\n metadata: z.record(z.string(), z.unknown()).default({}),\n errors: z.array(z.string()),\n});\n\nexport type ManifestFacts = z.infer<typeof manifestFactsSchema>;\n\nconst FRAMEWORKS: Record<string, { name: string; kind: ManifestFacts[\"frameworks\"][number][\"kind\"] }> = {\n \"@nestjs/core\": { name: \"NestJS\", kind: \"api\" },\n \"@playwright/test\": { name: \"Playwright\", kind: \"test\" },\n \"@sveltejs/kit\": { name: \"SvelteKit\", kind: \"web\" },\n \"@vitejs/plugin-react\": { name: \"Vite\", kind: \"build\" },\n \"com.android.tools.build:gradle\": { name: \"Android Gradle Plugin\", kind: \"build\" },\n django: { name: \"Django\", kind: \"web\" },\n drizzle: { name: \"Drizzle\", kind: \"database\" },\n express: { name: \"Express\", kind: \"api\" },\n fastapi: { name: \"FastAPI\", kind: \"api\" },\n fastify: { name: \"Fastify\", kind: \"api\" },\n flutter: { name: \"Flutter\", kind: \"mobile\" },\n gin: { name: \"Gin\", kind: \"api\" },\n \"junit:junit\": { name: \"JUnit\", kind: \"test\" },\n \"org.junit.jupiter:junit-jupiter\": { name: \"JUnit Jupiter\", kind: \"test\" },\n \"laravel/framework\": { name: \"Laravel\", kind: \"web\" },\n next: { name: \"Next.js\", kind: \"web\" },\n prisma: { name: \"Prisma\", kind: \"database\" },\n rails: { name: \"Ruby on Rails\", kind: \"web\" },\n react: { name: \"React\", kind: \"web\" },\n supabase_flutter: { name: \"Supabase\", kind: \"database\" },\n \"symfony/framework-bundle\": { name: \"Symfony\", kind: \"web\" },\n svelte: { name: \"Svelte\", kind: \"web\" },\n vite: { name: \"Vite\", kind: \"build\" },\n vitest: { name: \"Vitest\", kind: \"test\" },\n vue: { name: \"Vue\", kind: \"web\" },\n};\n\nexport function parseManifests(rootInput: string, files: WalkedFile[], options: ManifestParseOptions = {}): ManifestFacts[] {\n const root = fs.realpathSync(rootInput);\n const limits = resolveLimits(options);\n const detected = [...new Map(files.filter((file) => isParseableManifest(file.path)).map((file) => [file.path, file])).values()]\n .sort((a, b) => a.path.localeCompare(b.path));\n const context: ManifestParseContext = {\n root,\n limits,\n cache: new Map(),\n totalBytes: 0,\n mavenModels: new Map(),\n manifestPaths: new Set(detected.map((file) => file.path)),\n };\n const facts: Array<ManifestFacts | undefined> = new Array(detected.length);\n const byPath = new Map(detected.map((file, index) => [file.path, { file, index }]));\n const limitedFact = (file: WalkedFile, index: number): ManifestFacts | undefined => {\n if (index >= limits.maxManifestFiles) {\n return finalize(baseFacts(file.path, manifestKind(path.posix.basename(file.path)), [\n `resource limit exceeded: detected manifest ${index + 1} of ${detected.length}; maxManifestFiles=${limits.maxManifestFiles}`,\n ]));\n }\n return undefined;\n };\n // Parse regular files first. Internal manifest aliases can then reuse those\n // facts without ever following the symbolic link.\n detected.forEach((file, index) => {\n const limited = limitedFact(file, index);\n if (limited) facts[index] = limited;\n else if (file.metadataOnlyReason !== \"symlink\") facts[index] = parseOne(context, file.path);\n });\n detected.forEach((file, index) => {\n if (!facts[index]) facts[index] = parseManifestSymlink(context, file.path, byPath, facts);\n });\n return linkInternalMavenManifests(\n facts.map((fact, index) => fact ?? finalize(baseFacts(detected[index]!.path, \"manifest\", [\"manifest parser produced no fact\"]))),\n limits,\n );\n}\n\nfunction parseManifestSymlink(\n context: ManifestParseContext,\n relative: string,\n detected: Map<string, { file: WalkedFile; index: number }>,\n facts: Array<ManifestFacts | undefined>,\n): ManifestFacts {\n try {\n const absolute = assertInside(context.root, path.join(context.root, ...relative.split(\"/\")));\n const rawTarget = fs.readlinkSync(absolute);\n if (path.isAbsolute(rawTarget)) throw new Error(\"absolute symbolic link target\");\n const target = normalizeRepoPath(path.posix.normalize(path.posix.join(path.posix.dirname(relative), rawTarget.replaceAll(\"\\\\\", \"/\"))));\n const targetEntry = detected.get(target);\n if (!targetEntry) throw new Error(`target ${target} is not a detected supported manifest`);\n if (targetEntry.file.metadataOnlyReason === \"symlink\") throw new Error(`target ${target} is another symbolic link`);\n const source = facts[targetEntry.index];\n if (!source) throw new Error(`target ${target} has no parsed fact`);\n const alias: ManifestFacts = {\n ...source,\n id: \"pending\",\n path: relative,\n product: source.product ? { ...source.product } : undefined,\n dependencies: source.dependencies.map((dependency) => ({ ...dependency })),\n frameworks: source.frameworks.map((framework) => ({ ...framework })),\n runtimes: source.runtimes.map((runtime) => ({ ...runtime })),\n scripts: source.scripts ? { ...source.scripts } : undefined,\n workspaces: source.workspaces ? [...source.workspaces] : undefined,\n aliases: source.aliases?.map((entry) => ({ ...entry, targets: [...entry.targets] })),\n metadata: {\n ...source.metadata,\n manifest_alias_target: target,\n manifest_alias_target_sha256: targetEntry.file.sha256,\n },\n errors: [...source.errors],\n };\n return finalize(alias);\n } catch (error) {\n return finalize(baseFacts(relative, manifestKind(path.posix.basename(relative)), [`safe-read rejected symbolic link manifest: ${message(error)}`]));\n }\n}\n\nexport function isParseableManifest(relative: string): boolean {\n const base = path.posix.basename(relative);\n if ([\n \".bazelrc\", \".bazelversion\", \"BUILD\", \"BUILD.bazel\", \"CMakeLists.txt\", \"Dockerfile\", \"MODULE.bazel\", \"MODULE.bazel.lock\",\n \"WORKSPACE\", \"WORKSPACE.bzlmod\", \"deps.yaml\", \"extensions_metadata.yaml\", \"repository_locations.bzl\",\n \".env.example\", \"Cargo.toml\", \"Gemfile\", \"Gemfile.lock\", \"analysis_options.yaml\", \"composer.json\", \"composer.lock\",\n \"build.gradle\", \"build.gradle.kts\", \"gradle-wrapper.properties\", \"gradle.properties\", \"pom.xml\",\n \"settings.gradle\", \"settings.gradle.kts\", \"package-lock.json\", \"package.json\", \"pnpm-lock.yaml\", \"pnpm-workspace.yaml\", \"pubspec.lock\", \"pubspec.yaml\", \"go.mod\",\n \"pyproject.toml\", \"yarn.lock\",\n ].includes(base)) return true;\n return /^(?:Dockerfile(?:\\..+)?|requirements(?:[-_.][^/]*)?\\.txt|tsconfig(?:\\.[^/]+)?\\.json)$/i.test(base) ||\n /^(?:docker-)?compose(?:\\.[^/]+)?\\.ya?ml$/i.test(base) ||\n /(?:^|\\/)\\.github\\/workflows\\/[^/]+\\.ya?ml$/i.test(relative);\n}\n\nfunction parseOne(context: ManifestParseContext, relative: string): ManifestFacts {\n let text = \"\";\n try {\n text = readRepoText(context, relative);\n validateManifestText(text, context.limits);\n } catch (error) {\n return finalize(baseFacts(relative, manifestKind(path.posix.basename(relative)), [message(error)]));\n }\n const base = path.posix.basename(relative);\n try {\n let result: ManifestFacts;\n if (base === \"package.json\") result = parsePackageJson(context, relative, text);\n else if (base === \"package-lock.json\") result = parsePackageLock(context, relative, text);\n else if (base === \"pnpm-lock.yaml\") result = parsePnpmLock(context, relative, text);\n else if (base === \"yarn.lock\") result = parseYarnLock(context, relative, text);\n else if (base === \"pnpm-workspace.yaml\") result = parsePnpmWorkspace(context, relative, text);\n else if (base === \"pubspec.yaml\") result = parsePubspec(context, relative, text);\n else if (base === \"pubspec.lock\") result = parsePubspecLock(context, relative, text);\n else if (base === \"go.mod\") result = parseGoMod(relative, text);\n else if (base === \"Cargo.toml\") result = parseCargo(relative, text);\n else if (base === \"pom.xml\") result = parseMaven(context, relative, text);\n else if (base === \"build.gradle\" || base === \"build.gradle.kts\") result = parseGradleBuild(context, relative, text);\n else if (base === \"settings.gradle\" || base === \"settings.gradle.kts\") result = parseGradleSettings(context, relative, text);\n else if (base === \"gradle-wrapper.properties\") result = parseGradleWrapper(relative, text);\n else if (base === \"gradle.properties\") result = parseGradleProperties(context, relative, text);\n else if (base === \"Gemfile\") result = parseGemfile(context, relative, text);\n else if (base === \"Gemfile.lock\") result = parseGemfileLock(relative, text);\n else if (base === \"composer.json\") result = parseComposerJson(context, relative, text);\n else if (base === \"composer.lock\") result = parseComposerLock(context, relative, text);\n else if (base === \"pyproject.toml\") result = parsePyproject(relative, text);\n else if (/^requirements(?:[-_.][^/]*)?\\.txt$/i.test(base)) result = parseRequirements(relative, text);\n else if (/^tsconfig(?:\\.[^/]+)?\\.json$/i.test(base)) result = parseTsconfig(context, relative, text);\n else if (base === \"analysis_options.yaml\") result = parseAnalysisOptions(context, relative, text);\n else if (base === \".env.example\") result = parseEnvExample(relative, text);\n else if (/^(?:docker-)?compose(?:\\.[^/]+)?\\.ya?ml$/i.test(base)) result = parseDockerCompose(context, relative, text);\n else if (base === \"repository_locations.bzl\") result = parseRepositoryLocations(context, relative, text);\n else if (base === \"deps.yaml\") result = parseDependencyMetadata(context, relative, text);\n else if (base === \"extensions_metadata.yaml\") result = parseExtensionsMetadata(context, relative, text);\n else if (base === \"MODULE.bazel.lock\") result = parseModuleBazelLock(context, relative, text);\n else if (base === \".bazelrc\") result = parseBazelRc(context, relative, text);\n else if (base === \".bazelversion\") result = parseBazelVersion(relative, text);\n else if ([\"MODULE.bazel\", \"WORKSPACE\", \"WORKSPACE.bzlmod\", \"BUILD\", \"BUILD.bazel\"].includes(base)) result = parseBazel(context, relative, text);\n else if (base === \"CMakeLists.txt\") result = parseCmake(relative, text);\n else if (/^Dockerfile(?:\\..+)?$/i.test(base)) result = parseDockerfile(relative, text);\n else if (/(?:^|\\/)\\.github\\/workflows\\//.test(relative)) result = parseWorkflow(context, relative, text);\n else result = finalize(baseFacts(relative, \"config\", [\"detected supported manifest has no registered parser\"]));\n return enforceFactBounds(result, context.limits);\n } catch (error) {\n return finalize(baseFacts(relative, manifestKind(base), [message(error)]));\n }\n}\n\nfunction parsePackageJson(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseJson(context, text);\n const declared = { ...record(value.dependencies), ...record(value.optionalDependencies), ...record(value.peerDependencies) };\n const dev = record(value.devDependencies);\n const exact = npmResolvedVersions(context, path.posix.dirname(relative));\n const dependencies = [\n ...Object.entries(declared).map(([name, version]) => ({ name, declared: String(version), resolved: exact.get(name), dev: false })),\n ...Object.entries(dev).map(([name, version]) => ({ name, declared: String(version), resolved: exact.get(name), dev: true })),\n ].sort((a, b) => a.name.localeCompare(b.name));\n const facts = baseFacts(relative, \"npm\", []);\n facts.product = { name: string(value.name), version: string(value.version) };\n facts.dependencies = dependencies;\n facts.frameworks = inferFrameworks(dependencies);\n facts.runtimes = [{ name: \"Node.js\", version: string(record(value.engines).node) }];\n facts.scripts = stringRecord(value.scripts);\n facts.workspaces = (Array.isArray(value.workspaces) ? value.workspaces : array(record(value.workspaces).packages)).map(String);\n if (!facts.workspaces.length) delete facts.workspaces;\n return finalize(facts);\n}\n\nfunction parsePackageLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseJson(context, text);\n const packages = record(value.packages);\n const dependencies = Object.entries(packages).flatMap(([key, raw]) => {\n const marker = key.lastIndexOf(\"node_modules/\");\n if (marker < 0) return [];\n const row = record(raw);\n return [{ name: key.slice(marker + \"node_modules/\".length), resolved: string(row.version), dev: Boolean(row.dev) }];\n });\n for (const [name, raw] of Object.entries(record(value.dependencies))) {\n const row = record(raw);\n dependencies.push({ name, resolved: string(row.version), dev: Boolean(row.dev) });\n }\n const facts = baseFacts(relative, \"npm-lock\", []);\n facts.dependencies = dedupeDependencies(dependencies);\n return finalize(facts);\n}\n\nfunction parsePnpmLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const dependencies = pnpmResolvedDependencies(context, text);\n const facts = baseFacts(relative, \"pnpm-lock\", []);\n facts.dependencies = dependencies;\n return finalize(facts);\n}\n\nfunction parseYarnLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const dependencies = yarnResolvedDependencies(context, text);\n const facts = baseFacts(relative, \"yarn-lock\", []);\n facts.dependencies = dependencies;\n facts.metadata = { format: /^__metadata\\s*:/m.test(text) ? \"berry\" : \"classic\", entries: dependencies.length };\n if (text.trim() && dependencies.length === 0) facts.errors.push(\"yarn.lock contained no parseable package entries\");\n return finalize(facts);\n}\n\nfunction parsePnpmWorkspace(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"pnpm-workspace.yaml\");\n const packages = array(value.packages).map(String);\n const catalogs = record(value.catalogs);\n const dependencies = Object.values(catalogs).flatMap((catalog) => Object.entries(record(catalog)).map(([name, version]) => ({\n name,\n declared: string(version),\n dev: false,\n })));\n const facts = baseFacts(relative, \"pnpm-workspace\", []);\n facts.workspaces = packages;\n facts.dependencies = dedupeDependencies(dependencies);\n facts.metadata = { package_patterns: packages, catalog_count: Object.keys(catalogs).length };\n return finalize(facts);\n}\n\nfunction parsePubspec(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"pubspec.yaml\");\n const dependenciesRaw = record(value.dependencies);\n const devRaw = record(value.dev_dependencies);\n const lock = pubspecResolvedVersions(context, path.posix.dirname(relative));\n const dependencies = [\n ...Object.entries(dependenciesRaw).map(([name, spec]) => ({ name, declared: yamlVersion(spec), resolved: lock.get(name), dev: false })),\n ...Object.entries(devRaw).map(([name, spec]) => ({ name, declared: yamlVersion(spec), resolved: lock.get(name), dev: true })),\n ].sort((a, b) => a.name.localeCompare(b.name));\n const environment = record(value.environment);\n const facts = baseFacts(relative, \"pubspec\", []);\n facts.product = { name: string(value.name), version: string(value.version) };\n facts.dependencies = dependencies;\n facts.frameworks = inferFrameworks(dependencies);\n if (\"flutter\" in value || \"flutter\" in dependenciesRaw || \"flutter\" in devRaw) facts.frameworks.unshift({ name: \"Flutter\", version: string(environment.flutter) ?? string(environment.sdk), kind: \"mobile\" });\n facts.runtimes = [{ name: \"Dart\", version: string(environment.sdk) }];\n return finalize(facts);\n}\n\nfunction parsePubspecLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"pubspec.lock\");\n const dependencies = Object.entries(record(value.packages)).map(([name, raw]) => ({ name, resolved: string(record(raw).version), dev: false }));\n const facts = baseFacts(relative, \"pubspec-lock\", []);\n facts.dependencies = dependencies.sort((a, b) => a.name.localeCompare(b.name));\n return finalize(facts);\n}\n\nfunction parseGoMod(relative: string, text: string): ManifestFacts {\n const moduleName = text.match(/^module\\s+(\\S+)/m)?.[1];\n const goVersion = text.match(/^go\\s+(\\S+)/m)?.[1];\n const dependencies = [...text.matchAll(/^\\s*([^\\s/][^\\s]*)\\s+(v[^\\s]+)(?:\\s+\\/\\/\\s+indirect)?$/gm)]\n .map((match) => ({ name: match[1]!, resolved: match[2]!, dev: false }));\n const emptyPlaceholder = text.trim().length === 0;\n const facts = baseFacts(relative, \"go\", moduleName || emptyPlaceholder ? [] : [\"go.mod is missing its required module directive\"]);\n facts.product = { name: moduleName };\n facts.dependencies = dependencies;\n facts.runtimes = [{ name: \"Go\", version: goVersion }];\n facts.metadata = emptyPlaceholder ? { empty_placeholder: true } : {};\n return finalize(facts);\n}\n\nfunction parseCargo(relative: string, text: string): ManifestFacts {\n const packageBlock = section(text, \"package\");\n const dependencies = [\n ...parseTomlDependencies(section(text, \"dependencies\"), false),\n ...parseTomlDependencies(section(text, \"dev-dependencies\"), true),\n ];\n const facts = baseFacts(relative, \"cargo\", /^\\s*\\[(?:package|workspace)\\]\\s*$/m.test(text)\n ? []\n : [\"Cargo.toml has neither a [package] nor [workspace] table\"]);\n facts.product = { name: quoted(packageBlock, \"name\"), version: quoted(packageBlock, \"version\") };\n facts.dependencies = dependencies;\n facts.runtimes = [{ name: \"Rust\", version: quoted(packageBlock, \"rust-version\") }];\n return finalize(facts);\n}\n\ntype MavenModel = {\n project: Record<string, unknown>;\n groupId?: string;\n artifactId?: string;\n version?: string;\n properties: Record<string, string>;\n parentPath?: string;\n parentCoordinate?: string;\n sourceDirectory?: string;\n testSourceDirectory?: string;\n parent?: MavenModel;\n};\n\nconst MAVEN_XML = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@_\",\n allowBooleanAttributes: true,\n parseTagValue: false,\n parseAttributeValue: false,\n processEntities: false,\n trimValues: true,\n});\n\nfunction parseMaven(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const model = readMavenModel(context, relative, text, new Set(), 0);\n const managedVersions = mavenManagedVersions(model);\n const direct = mavenDependencyRows(record(model.project.dependencies).dependency, model.properties, false, managedVersions);\n const managed = mavenDependencyRows(record(record(model.project.dependencyManagement).dependencies).dependency, model.properties, true);\n // dependencyManagement supplies versions and constraints; it does not make\n // those artifacts direct dependencies of this module. Applying its versions\n // to direct rows keeps the graph faithful without inventing build edges.\n const dependencies = dedupeDependencies(direct.map(({ name, declared, dev }) => ({ name, ...(declared ? { declared } : {}), dev })));\n const modules = valueArray(record(model.project.modules).module)\n .map((value) => resolveMavenValue(string(value), model.properties))\n .filter((value): value is string => Boolean(value))\n .map((value) => mavenModulePomPath(context, relative, value));\n const javaVersion = mavenJavaVersion(model);\n const mavenVersion = mavenInheritedRequiredVersion(model, \"requireMavenVersion\");\n const coordinate = model.groupId && model.artifactId ? `${model.groupId}:${model.artifactId}` : model.artifactId;\n const platform = mavenPlatform(model, relative);\n const facts = baseFacts(relative, \"maven\", model.artifactId ? [] : [\"pom.xml is missing project.artifactId\"]);\n facts.product = { name: coordinate, version: model.version };\n facts.dependencies = dependencies;\n facts.frameworks = [\n { name: \"Maven\", version: mavenVersion, kind: \"build\" },\n ...inferFrameworks(dependencies),\n ];\n facts.runtimes = [{ name: \"Java\", version: javaVersion }];\n if (modules.length) facts.workspaces = modules;\n facts.metadata = {\n coordinate,\n group_id: model.groupId,\n artifact_id: model.artifactId,\n packaging: resolveMavenValue(string(model.project.packaging), model.properties) ?? \"jar\",\n platform,\n parent_coordinate: model.parentCoordinate,\n parent_path: model.parentPath,\n modules,\n source_directory: model.sourceDirectory,\n test_source_directory: model.testSourceDirectory,\n direct_dependencies: direct,\n direct_dependency_count: direct.length,\n managed_dependencies: managed,\n managed_dependency_count: managed.length,\n };\n return finalize(facts);\n}\n\nfunction mavenModulePomPath(context: ManifestParseContext, manifestPath: string, moduleSpecifier: string): string {\n const joined = normalizeRepoPath(path.posix.join(path.posix.dirname(manifestPath), moduleSpecifier));\n if (context.manifestPaths.has(joined)) return joined;\n const nestedPom = normalizeRepoPath(path.posix.join(joined, \"pom.xml\"));\n if (context.manifestPaths.has(nestedPom)) return nestedPom;\n // A module normally names a directory. Preserve an explicit XML path, but\n // otherwise expose the conventional exact child POM path for graph linking.\n return joined.toLowerCase().endsWith(\".xml\") ? joined : nestedPom;\n}\n\nfunction readMavenModel(\n context: ManifestParseContext,\n relative: string,\n text: string,\n seen: Set<string>,\n depth: number,\n): MavenModel {\n if (depth > 16) throw new Error(\"Maven parent chain exceeds 16 local pom.xml files\");\n if (seen.has(relative)) throw new Error(`Maven parent cycle detected at ${relative}`);\n const cached = context.mavenModels.get(relative);\n if (cached) return cached;\n const nextSeen = new Set(seen).add(relative);\n const parsed = MAVEN_XML.parse(text) as unknown;\n const project = record(record(parsed).project);\n if (!Object.keys(project).length) throw new Error(\"pom.xml root must be a project element\");\n const parent = record(project.parent);\n let inherited: MavenModel | undefined;\n let parentPath: string | undefined;\n if (Object.keys(parent).length) {\n const hasExplicitRelativePath = Object.prototype.hasOwnProperty.call(parent, \"relativePath\");\n const configured = string(parent.relativePath);\n const localSpecifier = hasExplicitRelativePath ? configured : \"../pom.xml\";\n if (localSpecifier) {\n try {\n parentPath = normalizeRepoPath(path.posix.join(path.posix.dirname(relative), localSpecifier));\n } catch {\n parentPath = undefined;\n }\n if (parentPath && context.manifestPaths.has(parentPath)) {\n // A detected local parent is part of this manifest denominator. Its\n // parse and resource-limit failures must not be silently reclassified\n // as an unavailable remote parent.\n const parentText = readRepoText(context, parentPath);\n inherited = readMavenModel(context, parentPath, parentText, nextSeen, depth + 1);\n } else {\n parentPath = undefined;\n }\n }\n }\n const rawProperties = Object.fromEntries(Object.entries(record(project.properties)).flatMap(([key, value]) => {\n const scalar = string(value);\n return scalar === undefined ? [] : [[key, scalar]];\n }));\n let properties: Record<string, string> = { ...(inherited?.properties ?? {}), ...rawProperties };\n const parentGroup = inherited?.groupId ?? resolveMavenValue(string(parent.groupId), properties);\n const parentArtifact = inherited?.artifactId ?? resolveMavenValue(string(parent.artifactId), properties);\n const parentVersion = inherited?.version ?? resolveMavenValue(string(parent.version), properties);\n let groupId = resolveMavenValue(string(project.groupId), properties) ?? parentGroup;\n let artifactId = resolveMavenValue(string(project.artifactId), properties);\n let version = resolveMavenValue(string(project.version), properties) ?? parentVersion;\n const builtins: Record<string, string | undefined> = {\n \"project.groupId\": groupId,\n \"project.artifactId\": artifactId,\n \"project.version\": version,\n \"pom.groupId\": groupId,\n \"pom.artifactId\": artifactId,\n \"pom.version\": version,\n \"project.parent.groupId\": parentGroup,\n \"project.parent.artifactId\": parentArtifact,\n \"project.parent.version\": parentVersion,\n };\n for (const [key, value] of Object.entries(builtins)) if (value !== undefined) properties[key] = value;\n properties = resolveMavenProperties(properties);\n groupId = resolveMavenValue(groupId, properties);\n artifactId = resolveMavenValue(artifactId, properties);\n version = resolveMavenValue(version, properties);\n const build = record(project.build);\n const sourceDirectory = resolveMavenValue(string(build.sourceDirectory), properties) ?? inherited?.sourceDirectory ?? \"src/main/java\";\n const testSourceDirectory = resolveMavenValue(string(build.testSourceDirectory), properties) ?? inherited?.testSourceDirectory ?? \"src/test/java\";\n const model: MavenModel = {\n project,\n groupId,\n artifactId,\n version,\n properties,\n ...(parentPath ? { parentPath } : {}),\n ...(parentGroup && parentArtifact ? { parentCoordinate: `${parentGroup}:${parentArtifact}${parentVersion ? `:${parentVersion}` : \"\"}` } : {}),\n sourceDirectory,\n testSourceDirectory,\n ...(inherited ? { parent: inherited } : {}),\n };\n context.mavenModels.set(relative, model);\n return model;\n}\n\ntype MavenDependencyDetail = {\n name: string;\n declared?: string;\n dev: boolean;\n scope?: string;\n classifier?: string;\n type?: string;\n optional?: boolean;\n exclusions?: string[];\n};\n\nfunction mavenDependencyRows(\n value: unknown,\n properties: Record<string, string>,\n managed: boolean,\n managedVersions: ReadonlyMap<string, string> = new Map(),\n): MavenDependencyDetail[] {\n return valueArray(value).flatMap((raw) => {\n const dependency = record(raw);\n const groupId = resolveMavenValue(string(dependency.groupId), properties);\n const artifactId = resolveMavenValue(string(dependency.artifactId), properties);\n if (!groupId || !artifactId) return [];\n const name = `${groupId}:${artifactId}`;\n const version = resolveMavenValue(string(dependency.version), properties) ?? managedVersions.get(name);\n const scope = resolveMavenValue(string(dependency.scope), properties)?.toLowerCase();\n const classifier = resolveMavenValue(string(dependency.classifier), properties);\n const dependencyType = resolveMavenValue(string(dependency.type), properties);\n const optional = resolveMavenValue(string(dependency.optional), properties)?.toLowerCase();\n const exclusions = valueArray(record(dependency.exclusions).exclusion).flatMap((rawExclusion) => {\n const exclusion = record(rawExclusion);\n const exclusionGroup = resolveMavenValue(string(exclusion.groupId), properties);\n const exclusionArtifact = resolveMavenValue(string(exclusion.artifactId), properties);\n return exclusionGroup && exclusionArtifact ? [`${exclusionGroup}:${exclusionArtifact}`] : [];\n });\n return [{\n name,\n ...(version ? { declared: version } : {}),\n dev: scope === \"test\" || managed && scope === \"test\",\n ...(scope ? { scope } : {}),\n ...(classifier ? { classifier } : {}),\n ...(dependencyType ? { type: dependencyType } : {}),\n ...(optional === \"true\" ? { optional: true } : optional === \"false\" ? { optional: false } : {}),\n ...(exclusions.length ? { exclusions: [...new Set(exclusions)].sort() } : {}),\n }];\n });\n}\n\nfunction mavenManagedVersions(model: MavenModel): Map<string, string> {\n const chain: MavenModel[] = [];\n for (let current: MavenModel | undefined = model; current; current = current.parent) chain.unshift(current);\n const versions = new Map<string, string>();\n // Maven permits child properties to override placeholders from inherited\n // dependencyManagement, so resolve the whole chain against the effective\n // child property set while applying nearest declarations last.\n for (const current of chain) {\n for (const dependency of mavenDependencyRows(\n record(record(current.project.dependencyManagement).dependencies).dependency,\n model.properties,\n true,\n )) {\n if (dependency.declared) versions.set(dependency.name, dependency.declared);\n }\n }\n return versions;\n}\n\nfunction mavenPlatform(model: MavenModel, relative: string): string | undefined {\n const explicit = resolveMavenValue(\n model.properties[\"variant.jvmEnvironmentVariantName\"] ?? model.properties[\"variant.jvmEnvironment\"],\n model.properties,\n )?.trim().toLowerCase();\n if (explicit) return explicit === \"standard-jvm\" ? \"jre\" : explicit;\n const versionPlatform = model.version?.match(/-(android|jre)(?:$|[.-])/i)?.[1]?.toLowerCase();\n if (versionPlatform) return versionPlatform;\n return relative.startsWith(\"android/\") ? \"android\" : undefined;\n}\n\nfunction resolveMavenProperties(input: Record<string, string>): Record<string, string> {\n const result = { ...input };\n for (let pass = 0; pass < 16; pass += 1) {\n let changed = false;\n for (const [key, value] of Object.entries(result)) {\n const resolved = resolveMavenValue(value, result);\n if (resolved !== undefined && resolved !== value) { result[key] = resolved; changed = true; }\n }\n if (!changed) break;\n }\n return result;\n}\n\nfunction resolveMavenValue(value: string | undefined, properties: Record<string, string>): string | undefined {\n if (value === undefined) return undefined;\n let output = value.trim();\n for (let pass = 0; pass < 16; pass += 1) {\n const next = output.replace(/\\$\\{([^}]+)\\}/g, (whole, key: string) => properties[key] ?? whole);\n if (next === output) break;\n output = next;\n }\n return output || undefined;\n}\n\nfunction mavenJavaVersion(model: MavenModel): string | undefined {\n for (const key of [\"maven.compiler.release\", \"maven.compiler.source\", \"java.version\", \"jdk.version\"]) {\n const value = resolveMavenValue(model.properties[key], model.properties);\n if (value) return value;\n }\n for (const plugin of mavenPlugins(model.project)) {\n if (string(plugin.artifactId) !== \"maven-compiler-plugin\") continue;\n const configuration = record(plugin.configuration);\n const configured = string(configuration.release) ?? string(configuration.source) ?? string(configuration.target);\n const value = resolveMavenValue(configured, model.properties);\n if (value) return value;\n }\n return mavenRequiredVersion(model.project, \"requireJavaVersion\", model.properties)\n ?? (model.parent ? mavenJavaVersion(model.parent) : undefined);\n}\n\nfunction mavenInheritedRequiredVersion(model: MavenModel, rule: string): string | undefined {\n return mavenRequiredVersion(model.project, rule, model.properties)\n ?? (model.parent ? mavenInheritedRequiredVersion(model.parent, rule) : undefined);\n}\n\nfunction mavenPlugins(project: Record<string, unknown>): Record<string, unknown>[] {\n const build = record(project.build);\n return [\n ...valueArray(record(build.plugins).plugin),\n ...valueArray(record(record(build.pluginManagement).plugins).plugin),\n ].map(record);\n}\n\nfunction mavenRequiredVersion(project: Record<string, unknown>, rule: string, properties: Record<string, string>): string | undefined {\n const stack: unknown[] = [project];\n let visited = 0;\n while (stack.length && visited < 100_000) {\n const current = stack.pop();\n visited += 1;\n if (Array.isArray(current)) { stack.push(...current); continue; }\n const row = record(current);\n if (!Object.keys(row).length) continue;\n if (rule in row) {\n const value = row[rule];\n const configured = string(value) ?? string(record(value).version);\n const resolved = resolveMavenValue(configured, properties);\n if (resolved) return resolved;\n }\n stack.push(...Object.values(row));\n }\n return undefined;\n}\n\nfunction parseGradleBuild(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const dependencies = gradleDependencies(text);\n const plugins = gradlePlugins(text);\n const version = gradleWrapperVersion(context, path.posix.dirname(relative));\n const facts = baseFacts(relative, \"gradle\", []);\n facts.dependencies = dependencies;\n facts.frameworks = [\n { name: \"Gradle\", version, kind: \"build\" },\n ...inferFrameworks(dependencies),\n ];\n const javaVersion = gradleJavaVersion(text);\n facts.runtimes = [{ name: \"Java\", version: javaVersion }];\n facts.scripts = Object.fromEntries([...text.matchAll(/\\b(?:tasks\\.)?(?:register|create|named)\\s*\\(\\s*[\"']([^\"']+)[\"']/g)].map((match) => [match[1]!, \"Gradle task\"]));\n if (!Object.keys(facts.scripts).length) delete facts.scripts;\n facts.metadata = { plugins, dependency_count: dependencies.length };\n return finalize(facts);\n}\n\nfunction parseGradleSettings(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const version = gradleWrapperVersion(context, path.posix.dirname(relative));\n const name = text.match(/\\brootProject\\.name\\s*=\\s*[\"']([^\"']+)[\"']/)?.[1];\n const modules = [...text.matchAll(/\\binclude\\s*\\(([^)]*)\\)|\\binclude\\s+([^\\n]+)/g)].flatMap((match) =>\n [...(match[1] ?? match[2] ?? \"\").matchAll(/[\"']([^\"']+)[\"']/g)].map((value) => value[1]!.replace(/^:/, \"\").replaceAll(\":\", \"/\")),\n );\n const facts = baseFacts(relative, \"gradle-settings\", []);\n facts.product = { name };\n facts.frameworks = [{ name: \"Gradle\", version, kind: \"build\" }];\n facts.workspaces = [...new Set(modules)].sort();\n if (!facts.workspaces.length) delete facts.workspaces;\n facts.metadata = { root_project_name: name, modules: facts.workspaces ?? [] };\n return finalize(facts);\n}\n\nfunction parseGradleWrapper(relative: string, text: string): ManifestFacts {\n const version = gradleDistributionVersion(text);\n const facts = baseFacts(relative, \"gradle-wrapper\", version ? [] : [\"Gradle wrapper properties contain no versioned distributionUrl\"]);\n facts.frameworks = [{ name: \"Gradle\", version, kind: \"build\" }];\n facts.metadata = { distribution_version: version };\n return finalize(facts);\n}\n\nfunction parseGradleProperties(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const properties = propertyFile(text);\n const facts = baseFacts(relative, \"gradle-properties\", []);\n facts.frameworks = [{ name: \"Gradle\", version: gradleWrapperVersion(context, path.posix.dirname(relative)), kind: \"build\" }];\n facts.metadata = { keys: [...properties.keys()].sort(), key_count: properties.size };\n return finalize(facts);\n}\n\nfunction gradleDependencies(text: string): Array<{ name: string; declared?: string; dev: boolean }> {\n const rows: Array<{ name: string; declared?: string; dev: boolean }> = [];\n const coordinate = /[\"']([A-Za-z0-9_.-]+):([A-Za-z0-9_.-]+)(?::([^\"']+))?[\"']/g;\n for (const match of text.matchAll(coordinate)) {\n const prefix = text.slice(Math.max(0, (match.index ?? 0) - 120), match.index).toLowerCase();\n const configuration = prefix.match(/[\"']?([a-z][a-z0-9_]*)[\"']?\\s*(?:\\(|\\s)\\s*$/)?.[1] ?? \"\";\n if (!/(?:api|implementation|compile|runtime|classpath|constraint|processor)/.test(configuration)) continue;\n rows.push({\n name: `${match[1]}:${match[2]}`,\n ...(match[3] ? { declared: match[3] } : {}),\n dev: /(?:test|benchmark)/.test(configuration),\n });\n }\n return dedupeDependencies(rows);\n}\n\nfunction gradlePlugins(text: string): Array<{ id: string; version?: string }> {\n const plugins: Array<{ id: string; version?: string }> = [\n ...[...text.matchAll(/\\bid\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)\\s*(?:version\\s*[\"']([^\"']+)[\"'])?/g)].map((match) => ({ id: match[1]!, ...(match[2] ? { version: match[2] } : {}) })),\n ...[...text.matchAll(/\\bapply\\s*\\(\\s*plugin\\s*=\\s*[\"']([^\"']+)[\"']/g)].map((match) => ({ id: match[1]! })),\n ...[...text.matchAll(/\\bid\\s+[\"']([^\"']+)[\"']\\s+version\\s+[\"']([^\"']+)[\"']/g)].map((match) => ({ id: match[1]!, version: match[2] })),\n ];\n return dedupeBy(plugins.sort((a, b) => a.id.localeCompare(b.id)), (plugin) => `${plugin.id}:${plugin.version ?? \"\"}`);\n}\n\nfunction gradleJavaVersion(text: string): string | undefined {\n const enumVersion = text.match(/JavaVersion\\.VERSION_([0-9_]+)/)?.[1]?.replaceAll(\"_\", \".\");\n if (enumVersion) return enumVersion;\n return text.match(/JavaLanguageVersion\\.of\\s*\\(\\s*([0-9]+)\\s*\\)/)?.[1]\n ?? text.match(/(?:sourceCompatibility|targetCompatibility)\\s*=\\s*[\"']([^\"']+)[\"']/)?.[1];\n}\n\nfunction gradleWrapperVersion(context: ManifestParseContext, startDirectory: string): string | undefined {\n let directory = startDirectory === \".\" ? \"\" : startDirectory;\n for (let depth = 0; depth < 16; depth += 1) {\n const candidate = joinRepoPath(directory, \"gradle/wrapper/gradle-wrapper.properties\");\n const text = tryReadRepoText(context, candidate);\n const version = text ? gradleDistributionVersion(text) : undefined;\n if (version) return version;\n if (!directory) break;\n const parent = path.posix.dirname(directory);\n directory = parent === \".\" ? \"\" : parent;\n }\n return undefined;\n}\n\nfunction gradleDistributionVersion(text: string): string | undefined {\n const url = propertyFile(text).get(\"distributionUrl\")?.replaceAll(\"\\\\:\", \":\");\n return url?.match(/gradle-([0-9][0-9A-Za-z.+-]*)-(?:all|bin)\\.zip(?:$|[?#])/)?.[1];\n}\n\nfunction propertyFile(text: string): Map<string, string> {\n const result = new Map<string, string>();\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\") || line.startsWith(\"!\")) continue;\n const match = /^([^:=\\s]+)\\s*[:=]\\s*(.*)$/.exec(line);\n if (match?.[1]) result.set(match[1], match[2] ?? \"\");\n }\n return result;\n}\n\nfunction valueArray(value: unknown): unknown[] {\n return value === undefined || value === null ? [] : Array.isArray(value) ? value : [value];\n}\n\nfunction parseGemfile(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const exact = gemResolvedVersions(context, path.posix.dirname(relative));\n const dependencies: Array<{ name: string; declared?: string; resolved?: string; dev: boolean }> = [];\n let developmentDepth = 0;\n const invalidLines: number[] = [];\n text.split(/\\r?\\n/).forEach((rawLine, index) => {\n const line = rawLine.replace(/\\s+#.*$/, \"\").trim();\n if (line && /^gem\\b/.test(line) && !/^gem\\s+[\"'][^\"']+[\"']/.test(line)) invalidLines.push(index + 1);\n if (/^group\\s+.*\\b(?:development|test)\\b.*\\bdo\\b/.test(line)) developmentDepth += 1;\n const match = line.match(/^gem\\s+[\"']([^\"']+)[\"'](?:\\s*,\\s*[\"']([^\"']+)[\"'])?/);\n if (match?.[1]) dependencies.push({\n name: match[1],\n ...(match[2] ? { declared: match[2] } : {}),\n ...(exact.get(match[1]) ? { resolved: exact.get(match[1]) } : {}),\n dev: developmentDepth > 0,\n });\n if (developmentDepth > 0 && /^end\\b/.test(line)) developmentDepth -= 1;\n });\n const ruby = text.match(/^ruby\\s+[\"']([^\"']+)[\"']/m)?.[1];\n const facts = baseFacts(relative, \"bundler\", invalidLines.length ? [`invalid Gemfile gem declaration at lines ${invalidLines.join(\", \")}`] : []);\n facts.dependencies = dedupeDependencies(dependencies);\n facts.runtimes = [{ name: \"Ruby\", version: ruby }];\n facts.frameworks = inferFrameworks(dependencies);\n return finalize(facts);\n}\n\nfunction parseGemfileLock(relative: string, text: string): ManifestFacts {\n const dependencies: Array<{ name: string; resolved?: string; dev: boolean }> = [];\n let inSpecs = false;\n for (const line of text.split(/\\r?\\n/)) {\n if (/^(?:GEM|PATH|GIT)$/.test(line)) { inSpecs = false; continue; }\n if (/^ specs:$/.test(line)) { inSpecs = true; continue; }\n if (/^[A-Z][A-Z ]+$/.test(line)) { inSpecs = false; continue; }\n if (!inSpecs) continue;\n const match = line.match(/^ ([A-Za-z0-9_.-]+) \\(([^)]+)\\)\\s*$/);\n if (match?.[1]) dependencies.push({ name: match[1], resolved: match[2], dev: false });\n }\n const facts = baseFacts(relative, \"bundler-lock\", []);\n facts.dependencies = dedupeDependencies(dependencies);\n facts.metadata = {\n bundler_version: text.match(/^BUNDLED WITH\\s*\\n\\s+([^\\s]+)$/m)?.[1],\n ruby_version: text.match(/^RUBY VERSION\\s*\\n\\s+ruby\\s+([^\\s]+)$/m)?.[1],\n };\n if (text.trim() && !/^(?:GEM|PATH|GIT)\\s*$/m.test(text)) facts.errors.push(\"Gemfile.lock contained no GEM, PATH, or GIT section\");\n return finalize(facts);\n}\n\nfunction parseComposerJson(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseJson(context, text);\n const declared = record(value.require);\n const dev = record(value[\"require-dev\"]);\n const exact = composerResolvedVersions(context, path.posix.dirname(relative));\n const dependencies = [\n ...Object.entries(declared).filter(([name]) => name !== \"php\").map(([name, version]) => ({\n name,\n declared: string(version),\n resolved: exact.get(name),\n dev: false,\n })),\n ...Object.entries(dev).map(([name, version]) => ({\n name,\n declared: string(version),\n resolved: exact.get(name),\n dev: true,\n })),\n ];\n const facts = baseFacts(relative, \"composer\", []);\n facts.product = { name: string(value.name), version: string(value.version) };\n facts.dependencies = dedupeDependencies(dependencies);\n facts.frameworks = inferFrameworks(dependencies);\n facts.runtimes = [{ name: \"PHP\", version: string(declared.php) }];\n facts.scripts = composerScripts(value.scripts);\n return finalize(facts);\n}\n\nfunction parseComposerLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseJson(context, text);\n const dependencies = [\n ...array(value.packages).flatMap((raw) => {\n const row = record(raw);\n const name = string(row.name);\n return name ? [{ name, resolved: string(row.version), dev: false }] : [];\n }),\n ...array(value[\"packages-dev\"]).flatMap((raw) => {\n const row = record(raw);\n const name = string(row.name);\n return name ? [{ name, resolved: string(row.version), dev: true }] : [];\n }),\n ];\n const facts = baseFacts(relative, \"composer-lock\", []);\n facts.dependencies = dedupeDependencies(dependencies);\n facts.metadata = { content_hash: string(value[\"content-hash\"]), plugin_api_version: string(value[\"plugin-api-version\"]) };\n return finalize(facts);\n}\n\nfunction parsePyproject(relative: string, text: string): ManifestFacts {\n const project = section(text, \"project\");\n const poetry = section(text, \"tool.poetry\");\n const dependencyLines = section(text, \"tool.poetry.dependencies\");\n const dependencies = parseTomlDependencies(dependencyLines, false).filter((dependency) => dependency.name !== \"python\");\n dependencies.push(...parseTomlDependencies(section(text, \"tool.poetry.dev-dependencies\"), true));\n for (const group of sectionsMatching(text, /^tool\\.poetry\\.group\\.[^.]+\\.dependencies$/)) {\n dependencies.push(...parseTomlDependencies(group.body, true));\n }\n const pyList = project.match(/dependencies\\s*=\\s*\\[([\\s\\S]*?)\\]/)?.[1] ?? \"\";\n for (const match of pyList.matchAll(/[\"']([A-Za-z0-9_.-]+)([^\"']*)[\"']/g)) dependencies.push({ name: match[1]!, declared: match[2]?.trim() || undefined, dev: false });\n for (const optional of sectionsMatching(text, /^project\\.optional-dependencies$/)) {\n for (const match of optional.body.matchAll(/[\"']([A-Za-z0-9_.-]+)([^\"']*)[\"']/g)) {\n dependencies.push({ name: match[1]!, declared: match[2]?.trim() || undefined, dev: true });\n }\n }\n const facts = baseFacts(relative, \"pyproject\", /^\\s*\\[[^\\]]+\\]\\s*$/m.test(text)\n ? []\n : [\"pyproject.toml contains no TOML table\"]);\n facts.product = { name: quoted(project, \"name\") ?? quoted(poetry, \"name\"), version: quoted(project, \"version\") ?? quoted(poetry, \"version\") };\n facts.dependencies = dedupeDependencies(dependencies);\n facts.frameworks = inferFrameworks(facts.dependencies);\n facts.runtimes = [{ name: \"Python\", version: quoted(project, \"requires-python\") ?? quoted(dependencyLines, \"python\") }];\n return finalize(facts);\n}\n\nfunction parseRequirements(relative: string, text: string): ManifestFacts {\n const includes: string[] = [];\n const constraints: string[] = [];\n const directives: string[] = [];\n const invalidLines: number[] = [];\n const dependencies = text.split(/\\r?\\n/).flatMap((line, index) => {\n const cleaned = line.replace(/^\\s*#.*$/, \"\").replace(/\\s+#.*$/, \"\").trim();\n const include = cleaned.match(/^(?:-r|--require)\\s+(.+)$/);\n if (include?.[1]) { includes.push(include[1].trim()); return []; }\n const constraint = cleaned.match(/^(?:-c|--constraint)\\s+(.+)$/);\n if (constraint?.[1]) { constraints.push(constraint[1].trim()); return []; }\n if (!cleaned) return [];\n if (cleaned.includes(\"git+\")) {\n const egg = cleaned.match(/[#&]egg=([A-Za-z0-9_.-]+)/)?.[1];\n if (egg) return [{ name: egg, declared: cleaned, dev: /(?:dev|test)/i.test(path.posix.basename(relative)) }];\n invalidLines.push(index + 1);\n return [];\n }\n if (cleaned.startsWith(\"-\")) {\n const directive = cleaned.match(/^(--?[A-Za-z][A-Za-z-]*)\\b/)?.[1];\n if (directive) directives.push(directive);\n else invalidLines.push(index + 1);\n return [];\n }\n const match = cleaned.match(/^([A-Za-z0-9_.-]+)\\s*(.*)$/);\n if (!match?.[1]) { invalidLines.push(index + 1); return []; }\n return [{ name: match[1], declared: match[2] || undefined, dev: /(?:dev|test)/i.test(path.posix.basename(relative)) }];\n });\n const facts = baseFacts(relative, \"requirements\", invalidLines.length\n ? [`unparsed requirements syntax at lines ${invalidLines.slice(0, 20).join(\", \")}${invalidLines.length > 20 ? \"…\" : \"\"}`]\n : []);\n facts.dependencies = dependencies;\n facts.frameworks = inferFrameworks(dependencies);\n facts.runtimes = [{ name: \"Python\" }];\n facts.metadata = { includes, constraints, directives: [...new Set(directives)].sort() };\n return finalize(facts);\n}\n\ntype TsconfigLayer = {\n compiler: Record<string, unknown>;\n chain: string[];\n externalExtends: string[];\n pathsOrigin: string;\n baseUrlOrigin: string;\n};\n\nfunction parseTsconfig(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const errors: string[] = [];\n const layer = loadTsconfigLayer(context, relative, text, 0, new Set(), errors);\n const compiler = layer.compiler;\n const aliases = Object.entries(record(compiler.paths)).map(([prefix, targets]) => ({ prefix, targets: array(targets).map(String) }));\n const declaringDirectory = path.posix.dirname(relative);\n const resolutionOrigin = Object.prototype.hasOwnProperty.call(compiler, \"baseUrl\") ? layer.baseUrlOrigin : layer.pathsOrigin;\n const baseDirectory = path.posix.dirname(resolutionOrigin || relative);\n const declaredBaseUrl = string(compiler.baseUrl) ?? \"\";\n const effectiveBaseUrl = normalizeRelativeJoin(declaringDirectory, baseDirectory, declaredBaseUrl);\n const facts = baseFacts(relative, \"tsconfig\", errors);\n facts.runtimes = [{ name: \"TypeScript\", version: string(compiler.target) }];\n facts.aliases = aliases;\n facts.metadata = {\n baseUrl: effectiveBaseUrl,\n extends_chain: layer.chain,\n external_extends: [...new Set(layer.externalExtends)].sort(),\n paths_origin: layer.pathsOrigin,\n base_url_origin: layer.baseUrlOrigin,\n };\n return finalize(facts);\n}\n\nfunction loadTsconfigLayer(\n context: ManifestParseContext,\n relative: string,\n providedText: string | undefined,\n depth: number,\n visiting: Set<string>,\n errors: string[],\n): TsconfigLayer {\n if (depth > context.limits.maxTsconfigExtendsDepth) {\n errors.push(`tsconfig extends depth exceeds ${context.limits.maxTsconfigExtendsDepth} at ${relative}`);\n return { compiler: {}, chain: [], externalExtends: [], pathsOrigin: relative, baseUrlOrigin: relative };\n }\n if (visiting.has(relative)) {\n errors.push(`tsconfig extends cycle detected at ${relative}`);\n return { compiler: {}, chain: [], externalExtends: [], pathsOrigin: relative, baseUrlOrigin: relative };\n }\n visiting.add(relative);\n let value: Record<string, unknown>;\n try {\n const text = providedText ?? readRepoText(context, relative);\n validateManifestText(text, context.limits);\n value = parseJson(context, text, true);\n } catch (error) {\n errors.push(`cannot parse extended tsconfig ${relative}: ${message(error)}`);\n visiting.delete(relative);\n return { compiler: {}, chain: [], externalExtends: [], pathsOrigin: relative, baseUrlOrigin: relative };\n }\n let effective: TsconfigLayer = { compiler: {}, chain: [], externalExtends: [], pathsOrigin: relative, baseUrlOrigin: relative };\n for (const specifier of tsconfigExtends(value.extends)) {\n const target = resolveTsconfigExtends(relative, specifier);\n if (!target) {\n effective.externalExtends.push(specifier);\n continue;\n }\n const parent = loadTsconfigLayer(context, target, undefined, depth + 1, visiting, errors);\n effective = mergeTsconfigLayers(effective, parent);\n }\n const current = record(value.compilerOptions);\n const mergedCompiler = { ...effective.compiler, ...current };\n if (Object.prototype.hasOwnProperty.call(current, \"paths\")) effective.pathsOrigin = relative;\n if (Object.prototype.hasOwnProperty.call(current, \"baseUrl\")) effective.baseUrlOrigin = relative;\n effective.compiler = mergedCompiler;\n effective.chain.push(relative);\n visiting.delete(relative);\n return effective;\n}\n\nfunction parseAnalysisOptions(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"analysis_options.yaml\");\n const analyzer = record(value.analyzer);\n const linter = record(value.linter);\n const plugins = array(analyzer.plugins).map(String);\n const excludes = array(analyzer.exclude).map(String);\n const rulesValue = linter.rules;\n const lintRules = Array.isArray(rulesValue)\n ? rulesValue.map(String)\n : Object.entries(record(rulesValue)).filter(([, enabled]) => enabled !== false).map(([name]) => name);\n const facts = baseFacts(relative, \"dart-analysis-options\", []);\n facts.runtimes = [{ name: \"Dart analyzer\" }];\n facts.metadata = { include: string(value.include), plugins, excludes, lint_rules: lintRules.sort() };\n return finalize(facts);\n}\n\nfunction parseEnvExample(relative: string, text: string): ManifestFacts {\n const keys: string[] = [];\n const invalidLines: number[] = [];\n text.split(/\\r?\\n/).forEach((raw, index) => {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) return;\n const match = line.match(/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=/);\n if (match?.[1]) keys.push(match[1]);\n else invalidLines.push(index + 1);\n });\n const facts = baseFacts(relative, \"environment-template\", invalidLines.length\n ? [`invalid dotenv assignment syntax at lines ${invalidLines.slice(0, 20).join(\", \")}${invalidLines.length > 20 ? \"…\" : \"\"}`]\n : []);\n // Values are intentionally never retained; even examples can contain live credentials.\n facts.metadata = { keys: [...new Set(keys)].sort(), key_count: new Set(keys).size };\n return finalize(facts);\n}\n\nfunction parseDockerCompose(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"Docker Compose manifest\");\n if (!(\"services\" in value) || !value.services || typeof value.services !== \"object\" || Array.isArray(value.services)) {\n throw new Error(\"Docker Compose manifest must contain a services mapping\");\n }\n const services = Object.entries(record(value.services)).map(([name, raw]) => {\n const service = record(raw);\n const environment = service.environment;\n const environmentKeys = Array.isArray(environment)\n ? environment.flatMap((entry) => {\n const key = String(entry).split(\"=\", 1)[0]?.trim();\n return key ? [key] : [];\n })\n : Object.keys(record(environment));\n const build = typeof service.build === \"string\" ? service.build : string(record(service.build).context);\n return {\n name,\n image: string(service.image),\n build,\n depends_on: Array.isArray(service.depends_on) ? service.depends_on.map(String) : Object.keys(record(service.depends_on)),\n environment_keys: [...new Set(environmentKeys)].sort(),\n env_files: array(service.env_file).map(String),\n };\n }).sort((a, b) => a.name.localeCompare(b.name));\n const facts = baseFacts(relative, \"docker-compose\", []);\n facts.frameworks = [{ name: \"Docker Compose\", kind: \"build\" }];\n facts.metadata = { service_count: services.length, services };\n return finalize(facts);\n}\n\nfunction parseRepositoryLocations(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const repositories = starlarkRepositoryEntries(text);\n const facts = baseFacts(relative, \"bazel-repository-locations\", []);\n facts.dependencies = dedupeDependencies(repositories.map((entry) => ({\n name: entry.name,\n ...(entry.version ? { declared: entry.version, resolved: entry.version } : {}),\n dev: false,\n })));\n facts.frameworks = bazelFramework(context);\n facts.metadata = {\n repository_count: repositories.length,\n repositories: repositories.slice(0, 500),\n truncated: repositories.length > 500,\n };\n return finalize(facts);\n}\n\nfunction parseDependencyMetadata(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYaml(context, text);\n const dependencies = collectYamlDependencies(value, undefined, [], new WeakSet(), 0, context.limits.maxNestingDepth);\n const facts = baseFacts(relative, \"envoy-dependency-metadata\", []);\n facts.dependencies = dedupeDependencies(dependencies);\n facts.frameworks = bazelFramework(context);\n facts.metadata = {\n dependency_count: facts.dependencies.length,\n dependency_names: facts.dependencies.map((dependency) => dependency.name).slice(0, 1_000),\n truncated: facts.dependencies.length > 1_000,\n };\n return finalize(facts);\n}\n\nfunction parseExtensionsMetadata(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"extensions metadata\");\n const nested = record(value.extensions);\n const source = Object.keys(nested).length ? nested : value;\n const extensions = Object.entries(source).flatMap(([name, raw]) => {\n const row = record(raw);\n if (!Object.keys(row).length) return [];\n return [{\n name,\n status: string(row.status),\n security_posture: string(row.security_posture),\n categories: array(row.categories).map(String),\n type_urls: array(row.type_urls).map(String),\n }];\n }).sort((a, b) => a.name.localeCompare(b.name));\n const facts = baseFacts(relative, \"envoy-extensions-metadata\", []);\n facts.metadata = {\n extension_count: extensions.length,\n extensions: extensions.slice(0, 1_000),\n truncated: extensions.length > 1_000,\n };\n return finalize(facts);\n}\n\nfunction parseModuleBazelLock(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseJson(context, text);\n const registryFiles = Object.keys(record(value.registryFileHashes));\n const modules = registryFiles.flatMap((filename) => {\n const match = filename.match(/\\/modules\\/([^/]+)\\/([^/]+)\\//);\n return match?.[1] && match[2] ? [{ name: decodeURIComponent(match[1]), resolved: decodeURIComponent(match[2]), dev: false }] : [];\n });\n const moduleExtensions = Object.keys(record(value.moduleExtensions)).sort();\n const facts = baseFacts(relative, \"bazel-module-lock\", []);\n facts.dependencies = dedupeDependencies(modules);\n facts.frameworks = bazelFramework(context);\n facts.metadata = {\n lock_file_version: typeof value.lockFileVersion === \"number\" ? value.lockFileVersion : string(value.lockFileVersion),\n registry_file_count: registryFiles.length,\n module_extension_count: moduleExtensions.length,\n module_extensions: moduleExtensions.slice(0, 500),\n generated_repository_count: countRecordEntriesNamed(value, \"generatedRepoSpecs\", context.limits.maxNestingDepth),\n truncated: moduleExtensions.length > 500,\n };\n return finalize(facts);\n}\n\nfunction parseBazelRc(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const commandCounts = new Map<string, number>();\n const configs = new Set<string>();\n const imports: string[] = [];\n let optionCount = 0;\n for (const rawLine of text.split(/\\r?\\n/)) {\n const line = rawLine.replace(/\\s+#.*$/, \"\").trim();\n if (!line || line.startsWith(\"#\")) continue;\n const [selector = \"\", ...options] = line.split(/\\s+/);\n if (selector === \"import\" || selector === \"try-import\") {\n if (options[0]) imports.push(options[0]);\n continue;\n }\n const [command = selector, config] = selector.split(\":\", 2);\n commandCounts.set(command, (commandCounts.get(command) ?? 0) + 1);\n if (config) configs.add(config);\n optionCount += options.length;\n }\n const facts = baseFacts(relative, \"bazel-config\", []);\n facts.frameworks = bazelFramework(context);\n facts.metadata = {\n commands: [...commandCounts].sort(([a], [b]) => a.localeCompare(b)).map(([command, lines]) => ({ command, lines })),\n configs: [...configs].sort(),\n imports: [...new Set(imports)].sort(),\n option_count: optionCount,\n };\n return finalize(facts);\n}\n\nfunction parseBazelVersion(relative: string, text: string): ManifestFacts {\n const version = text.trim() || undefined;\n const facts = baseFacts(relative, \"bazel-version\", []);\n facts.frameworks = [{ name: \"Bazel\", version, kind: \"build\" }];\n facts.runtimes = version ? [{ name: \"Bazel\", version }] : [];\n facts.metadata = { version };\n return finalize(facts);\n}\n\nfunction parseBazel(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const base = path.posix.basename(relative);\n const kind = base.startsWith(\"BUILD\") ? \"bazel-build\" : \"bazel-workspace\";\n const dependencies = [...text.matchAll(/bazel_dep\\s*\\(\\s*name\\s*=\\s*[\"']([^\"']+)[\"'][\\s\\S]*?version\\s*=\\s*[\"']([^\"']+)[\"']/g)]\n .map((match) => ({ name: match[1]!, resolved: match[2]!, dev: false }));\n const moduleCall = text.match(/module\\s*\\(([\\s\\S]*?)\\)/)?.[1] ?? \"\";\n const facts = baseFacts(relative, kind, []);\n facts.product = { name: attribute(moduleCall, \"name\"), version: attribute(moduleCall, \"version\") };\n facts.dependencies = dependencies;\n facts.frameworks = bazelFramework(context);\n facts.metadata = {\n rule_count: [...text.matchAll(/(?:^|\\n)\\s*([a-zA-Z_][\\w.]*)\\s*\\(/g)].length,\n targets: [...text.matchAll(/\\bname\\s*=\\s*[\"']([^\"']+)[\"']/g)].map((match) => match[1]).slice(0, 500),\n };\n return finalize(facts);\n}\n\nfunction parseCmake(relative: string, text: string): ManifestFacts {\n const project = text.match(/project\\s*\\(\\s*([^\\s)]+)(?:\\s+VERSION\\s+([^\\s)]+))?/i);\n const facts = baseFacts(relative, \"cmake\", []);\n facts.product = { name: project?.[1], version: project?.[2] };\n facts.frameworks = [{ name: \"CMake\", version: text.match(/cmake_minimum_required\\s*\\(\\s*VERSION\\s+([^\\s)]+)/i)?.[1], kind: \"build\" }];\n return finalize(facts);\n}\n\nfunction parseDockerfile(relative: string, text: string): ManifestFacts {\n const images = [...text.matchAll(/^FROM\\s+([^\\s]+)(?:\\s+AS\\s+([^\\s]+))?/gim)].map((match) => ({ image: match[1], stage: match[2] }));\n const facts = baseFacts(relative, \"docker\", images.length ? [] : [\"Dockerfile contains no FROM instruction\"]);\n facts.frameworks = [{ name: \"Docker\", kind: \"build\" }];\n facts.metadata = { images };\n return finalize(facts);\n}\n\nfunction parseWorkflow(context: ManifestParseContext, relative: string, text: string): ManifestFacts {\n const value = parseYamlRecord(context, text, \"GitHub Actions workflow\");\n if (!(\"jobs\" in value) || !value.jobs || typeof value.jobs !== \"object\" || Array.isArray(value.jobs)) {\n throw new Error(\"GitHub Actions workflow must contain a jobs mapping\");\n }\n const jobs = Object.entries(record(value.jobs)).map(([id, row]) => ({ id, name: string(record(row).name) ?? id, uses: string(record(row).uses) }));\n const facts = baseFacts(relative, \"github-actions\", []);\n facts.metadata = { name: string(value.name), jobs };\n return finalize(facts);\n}\n\nfunction baseFacts(relative: string, kind: string, errors: string[]): ManifestFacts {\n return { id: \"pending\", path: relative, kind, dependencies: [], frameworks: [], runtimes: [], metadata: {}, errors };\n}\n\ntype MavenManifestCandidate = {\n coordinate: string;\n path: string;\n version?: string;\n platform?: string;\n};\n\n/**\n * Add exact, repository-local POM references only after every manifest has\n * been parsed. This avoids parser-order dependence and lets the graph builder\n * consume the paths without teaching it Maven coordinate semantics.\n */\nfunction linkInternalMavenManifests(facts: ManifestFacts[], limits: ManifestParseLimits): ManifestFacts[] {\n const byCoordinate = new Map<string, MavenManifestCandidate[]>();\n for (const fact of facts) {\n if (fact.kind !== \"maven\" || typeof fact.metadata.manifest_alias_target === \"string\") continue;\n const coordinate = typeof fact.metadata.coordinate === \"string\" ? fact.metadata.coordinate : undefined;\n if (!coordinate) continue;\n const candidate: MavenManifestCandidate = {\n coordinate,\n path: fact.path,\n ...(fact.product?.version ? { version: fact.product.version } : {}),\n ...(typeof fact.metadata.platform === \"string\" ? { platform: fact.metadata.platform } : {}),\n };\n const candidates = byCoordinate.get(coordinate) ?? [];\n candidates.push(candidate);\n byCoordinate.set(coordinate, candidates);\n }\n for (const candidates of byCoordinate.values()) candidates.sort((a, b) => a.path.localeCompare(b.path));\n\n return facts.map((fact) => {\n if (fact.kind !== \"maven\" || typeof fact.metadata.manifest_alias_target === \"string\") return fact;\n const sourcePlatform = typeof fact.metadata.platform === \"string\" ? fact.metadata.platform : undefined;\n const managed = valueArray(fact.metadata.managed_dependencies).flatMap((value) => {\n const row = record(value);\n const name = string(row.name);\n if (!name) return [];\n return [{ name, declared: string(row.declared), resolved: string(row.resolved), dev: Boolean(row.dev), managed: true }];\n });\n const dependencies = [\n ...fact.dependencies.map((dependency) => ({ ...dependency, managed: false })),\n ...managed,\n ];\n const linked: Array<{ coordinate: string; path: string; version?: string; platform?: string; managed: boolean }> = [];\n const ambiguities: Array<{ coordinate: string; version?: string; platform?: string; candidate_count: number }> = [];\n for (const dependency of dependencies) {\n let candidates = (byCoordinate.get(dependency.name) ?? []).filter((candidate) => candidate.path !== fact.path);\n if (!candidates.length) continue;\n const version = dependency.resolved ?? dependency.declared;\n if (version) {\n // An unresolved property or Maven version range is not an exact pin;\n // never turn it into a potentially wrong local build edge.\n if (version.includes(\"${\") || /^[[(]/.test(version)) continue;\n candidates = candidates.filter((candidate) => candidate.version === version);\n if (!candidates.length) continue;\n }\n if (candidates.length > 1 && sourcePlatform) {\n const samePlatform = candidates.filter((candidate) => candidate.platform === sourcePlatform);\n if (samePlatform.length) candidates = samePlatform;\n }\n if (candidates.length !== 1) {\n ambiguities.push({\n coordinate: dependency.name,\n ...(version ? { version } : {}),\n ...(sourcePlatform ? { platform: sourcePlatform } : {}),\n candidate_count: candidates.length,\n });\n continue;\n }\n const candidate = candidates[0]!;\n linked.push({\n coordinate: dependency.name,\n path: candidate.path,\n ...(version ? { version } : {}),\n ...(candidate.platform ? { platform: candidate.platform } : {}),\n managed: dependency.managed,\n });\n }\n const uniqueLinks = dedupeBy(\n linked.sort((a, b) => a.coordinate.localeCompare(b.coordinate) || a.path.localeCompare(b.path) || Number(a.managed) - Number(b.managed)),\n (entry) => `${entry.coordinate}:${entry.path}:${entry.managed}`,\n );\n const uniqueAmbiguities = dedupeBy(\n ambiguities.sort((a, b) => a.coordinate.localeCompare(b.coordinate) || (a.version ?? \"\").localeCompare(b.version ?? \"\")),\n (entry) => `${entry.coordinate}:${entry.version ?? \"\"}:${entry.platform ?? \"\"}:${entry.candidate_count}`,\n );\n const metadata: Record<string, unknown> = { ...fact.metadata };\n if (uniqueLinks.length) {\n metadata.internal_dependency_paths = [...new Set(uniqueLinks.map((entry) => entry.path))].sort();\n metadata.internal_dependencies = uniqueLinks;\n }\n if (uniqueAmbiguities.length) metadata.ambiguous_internal_dependencies = uniqueAmbiguities;\n return enforceFactBounds({ ...fact, metadata, errors: [...fact.errors] }, limits);\n });\n}\n\nfunction finalize(input: ManifestFacts): ManifestFacts {\n input.id = `manifest_${hashObject({ path: input.path, kind: input.kind, product: input.product, dependencies: input.dependencies, frameworks: input.frameworks, runtimes: input.runtimes, scripts: input.scripts, workspaces: input.workspaces, aliases: input.aliases, metadata: input.metadata, errors: input.errors }).slice(0, 24)}`;\n input.frameworks = dedupeBy(input.frameworks, (item) => `${item.name}:${item.version ?? \"\"}:${item.kind}`);\n input.runtimes = dedupeBy(input.runtimes, (item) => `${item.name}:${item.version ?? \"\"}`);\n return manifestFactsSchema.parse(input);\n}\n\nfunction enforceFactBounds(input: ManifestFacts, limits: ManifestParseLimits): ManifestFacts {\n const overflows: string[] = [];\n const truncate = <T>(label: string, items: T[]): T[] => {\n if (items.length <= limits.maxExtractedEntries) return items;\n overflows.push(`resource limit exceeded: ${label}=${items.length}; maxExtractedEntries=${limits.maxExtractedEntries}`);\n return items.slice(0, limits.maxExtractedEntries);\n };\n input.dependencies = truncate(\"dependencies\", input.dependencies);\n input.frameworks = truncate(\"frameworks\", input.frameworks);\n input.runtimes = truncate(\"runtimes\", input.runtimes);\n if (input.workspaces) input.workspaces = truncate(\"workspaces\", input.workspaces);\n if (input.aliases) {\n input.aliases = truncate(\"aliases\", input.aliases).map((alias) => ({\n ...alias,\n targets: truncate(`alias targets (${alias.prefix})`, alias.targets),\n }));\n }\n if (input.scripts) {\n const entries = Object.entries(input.scripts);\n if (entries.length > limits.maxExtractedEntries) {\n overflows.push(`resource limit exceeded: scripts=${entries.length}; maxExtractedEntries=${limits.maxExtractedEntries}`);\n input.scripts = Object.fromEntries(entries.slice(0, limits.maxExtractedEntries));\n }\n }\n input.metadata = boundMetadata(input.metadata, \"metadata\", limits.maxExtractedEntries, overflows, 0, limits.maxNestingDepth) as Record<string, unknown>;\n input.errors = [...new Set([...input.errors, ...overflows])];\n return finalize(input);\n}\n\nfunction boundMetadata(\n value: unknown,\n label: string,\n maximum: number,\n errors: string[],\n depth: number,\n maxDepth: number,\n): unknown {\n if (depth > maxDepth) {\n errors.push(`resource limit exceeded: ${label} depth exceeds maxNestingDepth=${maxDepth}`);\n return null;\n }\n if (Array.isArray(value)) {\n if (value.length > maximum) errors.push(`resource limit exceeded: ${label}=${value.length}; maxExtractedEntries=${maximum}`);\n return value.slice(0, maximum).map((item, index) => boundMetadata(item, `${label}[${index}]`, maximum, errors, depth + 1, maxDepth));\n }\n if (!value || typeof value !== \"object\") return value;\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length > maximum) errors.push(`resource limit exceeded: ${label} keys=${entries.length}; maxExtractedEntries=${maximum}`);\n return Object.fromEntries(entries.slice(0, maximum).map(([key, item]) => [\n key,\n boundMetadata(item, `${label}.${key}`, maximum, errors, depth + 1, maxDepth),\n ]));\n}\n\nfunction resolveLimits(options: ManifestParseOptions): ManifestParseLimits {\n const limits = { ...DEFAULT_MANIFEST_PARSE_LIMITS, ...options };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value <= 0) throw new Error(`${name} must be a positive safe integer`);\n }\n if (limits.maxTsconfigExtendsDepth > 5) throw new Error(\"maxTsconfigExtendsDepth cannot exceed the execution contract limit of 5\");\n if (limits.maxTotalBytes < limits.maxManifestBytes) throw new Error(\"maxTotalBytes cannot be lower than maxManifestBytes\");\n return limits;\n}\n\nfunction readRepoText(context: ManifestParseContext, relativeInput: string): string {\n const relative = normalizeRepoPath(relativeInput);\n const cached = context.cache.get(relative);\n if (cached) {\n if (!cached.ok) throw new Error(cached.error);\n return cached.text;\n }\n const absolute = assertInside(context.root, path.join(context.root, ...relative.split(\"/\")));\n const flags = fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0);\n let descriptor: number | undefined;\n const chunks: Buffer[] = [];\n let bytes = 0;\n try {\n descriptor = fs.openSync(absolute, flags);\n const stat = fs.fstatSync(descriptor);\n if (!stat.isFile()) throw new Error(\"safe-read rejected non-regular manifest\");\n if (stat.size > context.limits.maxManifestBytes) {\n throw new Error(`resource limit exceeded: file bytes=${stat.size}; maxManifestBytes=${context.limits.maxManifestBytes}`);\n }\n if (context.totalBytes + stat.size > context.limits.maxTotalBytes) {\n throw new Error(`resource limit exceeded: total unique bytes would exceed maxTotalBytes=${context.limits.maxTotalBytes}`);\n }\n const buffer = Buffer.allocUnsafe(64 * 1024);\n while (true) {\n const read = fs.readSync(descriptor, buffer, 0, buffer.length, null);\n if (!read) break;\n bytes += read;\n if (bytes > context.limits.maxManifestBytes) {\n throw new Error(`resource limit exceeded: file grew beyond maxManifestBytes=${context.limits.maxManifestBytes}`);\n }\n if (context.totalBytes + bytes > context.limits.maxTotalBytes) {\n throw new Error(`resource limit exceeded: total unique bytes exceed maxTotalBytes=${context.limits.maxTotalBytes}`);\n }\n chunks.push(Buffer.from(buffer.subarray(0, read)));\n }\n context.totalBytes += bytes;\n const text = Buffer.concat(chunks, bytes).toString(\"utf8\");\n context.cache.set(relative, { ok: true, text, bytes });\n return text;\n } catch (error) {\n const detail = message(error);\n context.cache.set(relative, { ok: false, error: detail });\n throw new Error(detail);\n } finally {\n if (descriptor !== undefined) fs.closeSync(descriptor);\n }\n}\n\nfunction tryReadRepoText(context: ManifestParseContext, relative: string): string | undefined {\n try { return readRepoText(context, relative); } catch { return undefined; }\n}\n\nfunction validateManifestText(text: string, limits: ManifestParseLimits): void {\n let lineBytes = 0;\n let depth = 0;\n let quote: \"\\\"\" | \"'\" | undefined;\n let escaped = false;\n for (let index = 0; index < text.length; index += 1) {\n const character = text[index]!;\n lineBytes += Buffer.byteLength(character);\n if (lineBytes > limits.maxLineBytes) throw new Error(`resource limit exceeded: line bytes exceed maxLineBytes=${limits.maxLineBytes}`);\n if (character === \"\\n\") { lineBytes = 0; continue; }\n if (quote) {\n if (escaped) { escaped = false; continue; }\n if (character === \"\\\\\") { escaped = true; continue; }\n if (character === quote) quote = undefined;\n continue;\n }\n if (character === \"\\\"\" || character === \"'\") { quote = character; continue; }\n if (character === \"{\" || character === \"[\") {\n depth += 1;\n if (depth > limits.maxNestingDepth) throw new Error(`resource limit exceeded: nesting depth exceeds maxNestingDepth=${limits.maxNestingDepth}`);\n } else if ((character === \"}\" || character === \"]\") && depth > 0) depth -= 1;\n }\n}\n\nfunction parseJson(context: ManifestParseContext, text: string, jsonc = false): Record<string, unknown> {\n const source = jsonc ? stripJsonComments(text).replace(/,\\s*([}\\]])/g, \"$1\") : text;\n validateManifestText(source, context.limits);\n const value = JSON.parse(source) as unknown;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"JSON manifest root must be an object\");\n return value as Record<string, unknown>;\n}\n\nfunction parseYaml(context: ManifestParseContext, text: string): unknown {\n return YAML.parse(text, { maxAliasCount: context.limits.maxYamlAliases });\n}\n\nfunction parseYamlRecord(context: ManifestParseContext, text: string, label: string): Record<string, unknown> {\n const value = parseYaml(context, text);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(`${label} root must be a mapping`);\n return value as Record<string, unknown>;\n}\n\nfunction inferFrameworks(dependencies: Array<{ name: string; declared?: string; resolved?: string }>): ManifestFacts[\"frameworks\"] {\n return dependencies.flatMap((dependency) => {\n const mapping = FRAMEWORKS[dependency.name.toLowerCase()];\n return mapping ? [{ ...mapping, version: dependency.resolved ?? dependency.declared }] : [];\n });\n}\n\nfunction npmResolvedVersions(context: ManifestParseContext, relativeDir: string): Map<string, string> {\n const result = new Map<string, string>();\n const directories = [...new Set([relativeDir, \"\"])] as string[];\n for (const directory of directories) {\n const packageLock = joinRepoPath(directory, \"package-lock.json\");\n try {\n const text = tryReadRepoText(context, packageLock);\n if (text) {\n const value = parseJson(context, text);\n const packages = record(value.packages);\n for (const [key, raw] of Object.entries(packages)) if (key.startsWith(\"node_modules/\")) {\n const version = string(record(raw).version);\n if (version) result.set(key.slice(\"node_modules/\".length), version);\n }\n for (const [name, raw] of Object.entries(record(value.dependencies))) {\n const version = string(record(raw).version);\n if (version) result.set(name, version);\n }\n }\n } catch { /* optional */ }\n const pnpmText = tryReadRepoText(context, joinRepoPath(directory, \"pnpm-lock.yaml\"));\n if (pnpmText) for (const dependency of pnpmResolvedDependencies(context, pnpmText)) {\n if (dependency.resolved && !result.has(dependency.name)) result.set(dependency.name, dependency.resolved);\n }\n const yarnText = tryReadRepoText(context, joinRepoPath(directory, \"yarn.lock\"));\n if (yarnText) for (const dependency of yarnResolvedDependencies(context, yarnText)) {\n if (dependency.resolved && !result.has(dependency.name)) result.set(dependency.name, dependency.resolved);\n }\n if (result.size) return result;\n }\n return result;\n}\n\nfunction pubspecResolvedVersions(context: ManifestParseContext, relativeDir: string): Map<string, string> {\n const result = new Map<string, string>();\n try {\n const text = tryReadRepoText(context, joinRepoPath(relativeDir, \"pubspec.lock\"));\n if (!text) return result;\n const value = parseYamlRecord(context, text, \"pubspec.lock\");\n for (const [name, raw] of Object.entries(record(value.packages))) {\n const version = string(record(raw).version);\n if (version) result.set(name, version);\n }\n } catch { /* optional */ }\n return result;\n}\n\nfunction bazelFramework(context: ManifestParseContext): ManifestFacts[\"frameworks\"] {\n let version: string | undefined;\n try { version = tryReadRepoText(context, \".bazelversion\")?.trim() || undefined; } catch { /* optional */ }\n return [{ name: \"Bazel\", version, kind: \"build\" }];\n}\n\nfunction pnpmResolvedDependencies(context: ManifestParseContext, text: string): Array<{ name: string; resolved?: string; dev: boolean }> {\n const value = parseYamlRecord(context, text, \"pnpm-lock.yaml\");\n const snapshots = { ...record(value.packages), ...record(value.snapshots) };\n const dependencies = Object.keys(snapshots).flatMap((key) => {\n const cleaned = key.replace(/^\\//, \"\").replace(/\\(.+\\)$/, \"\");\n const modern = cleaned.match(/^(@[^/]+\\/[^@]+|[^@/]+)@(.+)$/);\n if (modern?.[1] && modern[2]) return [{ name: modern[1], resolved: modern[2], dev: false }];\n const legacy = cleaned.match(/^(@[^/]+\\/[^/]+|[^/]+)\\/(.+)$/);\n return legacy?.[1] && legacy[2] ? [{ name: legacy[1], resolved: legacy[2], dev: false }] : [];\n });\n return dedupeDependencies(dependencies);\n}\n\nfunction yarnResolvedDependencies(context: ManifestParseContext, text: string): Array<{ name: string; resolved?: string; dev: boolean }> {\n if (/^__metadata\\s*:/m.test(text)) {\n const value = parseYamlRecord(context, text, \"yarn.lock\");\n const dependencies = Object.entries(value).flatMap(([selector, raw]) => {\n if (selector === \"__metadata\") return [];\n const row = record(raw);\n const resolved = string(row.version);\n return yarnSelectorNames(selector).map((name) => ({ name, resolved, dev: false }));\n });\n return dedupeDependencies(dependencies);\n }\n const dependencies: Array<{ name: string; resolved?: string; dev: boolean }> = [];\n let selectors: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n if (line && !/^\\s/.test(line) && line.endsWith(\":\")) {\n selectors = yarnSelectorNames(line.slice(0, -1));\n continue;\n }\n const version = line.match(/^\\s+version(?:\\s+|:\\s*)[\"']?([^\"'\\s]+)[\"']?\\s*$/)?.[1];\n if (!version || !selectors.length) continue;\n dependencies.push(...selectors.map((name) => ({ name, resolved: version, dev: false })));\n selectors = [];\n }\n return dedupeDependencies(dependencies);\n}\n\nfunction yarnSelectorNames(raw: string): string[] {\n return raw.split(/,\\s*(?=[\"']?@?[^\"']+@)/).flatMap((part) => {\n const selector = part.trim().replace(/^[\"']|[\"']$/g, \"\");\n const match = selector.match(/^(@[^/]+\\/[^@]+|[^@]+)@/);\n return match?.[1] ? [match[1]] : [];\n });\n}\n\nfunction gemResolvedVersions(context: ManifestParseContext, relativeDir: string): Map<string, string> {\n const result = new Map<string, string>();\n const text = tryReadRepoText(context, joinRepoPath(relativeDir, \"Gemfile.lock\"));\n if (!text) return result;\n const facts = parseGemfileLock(joinRepoPath(relativeDir, \"Gemfile.lock\"), text);\n for (const dependency of facts.dependencies) if (dependency.resolved) result.set(dependency.name, dependency.resolved);\n return result;\n}\n\nfunction composerResolvedVersions(context: ManifestParseContext, relativeDir: string): Map<string, string> {\n const result = new Map<string, string>();\n const text = tryReadRepoText(context, joinRepoPath(relativeDir, \"composer.lock\"));\n if (!text) return result;\n try {\n const value = parseJson(context, text);\n for (const raw of [...array(value.packages), ...array(value[\"packages-dev\"])]) {\n const row = record(raw);\n const name = string(row.name);\n const version = string(row.version);\n if (name && version) result.set(name, version);\n }\n } catch { /* the composer.lock fact reports its own hard-gate diagnostic */ }\n return result;\n}\n\nfunction composerScripts(value: unknown): Record<string, string> | undefined {\n const entries = Object.entries(record(value)).flatMap(([name, command]) => {\n if (typeof command === \"string\") return [[name, command] as const];\n if (Array.isArray(command) && command.every((item) => typeof item === \"string\")) return [[name, command.join(\" && \")] as const];\n return [];\n });\n return entries.length ? Object.fromEntries(entries) : undefined;\n}\n\nfunction tsconfigExtends(value: unknown): string[] {\n if (typeof value === \"string\") return [value];\n return array(value).flatMap((entry) => typeof entry === \"string\" ? [entry] : []);\n}\n\nfunction resolveTsconfigExtends(from: string, specifier: string): string | undefined {\n if (!specifier.startsWith(\".\")) return undefined;\n const base = path.posix.normalize(path.posix.join(path.posix.dirname(from), specifier));\n const withExtension = /\\.json$/i.test(base) ? base : `${base}.json`;\n return normalizeRepoPath(withExtension);\n}\n\nfunction mergeTsconfigLayers(left: TsconfigLayer, right: TsconfigLayer): TsconfigLayer {\n const rightHasPaths = Object.prototype.hasOwnProperty.call(right.compiler, \"paths\");\n const rightHasBaseUrl = Object.prototype.hasOwnProperty.call(right.compiler, \"baseUrl\");\n return {\n compiler: { ...left.compiler, ...right.compiler },\n chain: [...left.chain, ...right.chain],\n externalExtends: [...left.externalExtends, ...right.externalExtends],\n pathsOrigin: rightHasPaths ? right.pathsOrigin : left.pathsOrigin,\n baseUrlOrigin: rightHasBaseUrl ? right.baseUrlOrigin : left.baseUrlOrigin,\n };\n}\n\nfunction normalizeRelativeJoin(fromDirectory: string, originDirectory: string, baseUrl: string): string {\n const originBase = path.posix.normalize(path.posix.join(originDirectory, baseUrl || \".\"));\n const result = path.posix.relative(fromDirectory === \".\" ? \"\" : fromDirectory, originBase);\n return result || \".\";\n}\n\nfunction joinRepoPath(directory: string, filename: string): string {\n return directory && directory !== \".\" ? `${directory}/${filename}` : filename;\n}\n\nfunction starlarkRepositoryEntries(text: string): Array<{\n name: string;\n project_name?: string;\n version?: string;\n project_url?: string;\n release_date?: string;\n sha256?: string;\n}> {\n const entries: Array<{\n name: string;\n project_name?: string;\n version?: string;\n project_url?: string;\n release_date?: string;\n sha256?: string;\n }> = [];\n const pattern = /(?:^|\\n)[ \\t]*(?:[\"']([^\"']+)[\"']|([A-Za-z_][A-Za-z0-9_]*))[ \\t]*(?:=|:)[ \\t]*dict[ \\t]*\\(/g;\n for (const match of text.matchAll(pattern)) {\n const name = match[1] ?? match[2];\n if (!name || /^[A-Z][A-Z0-9_]*$/.test(name) || match.index === undefined) continue;\n const open = match.index + match[0].lastIndexOf(\"(\");\n const body = balancedParenthesisBody(text, open);\n if (body === undefined) continue;\n const entry = {\n name,\n project_name: attribute(body, \"project_name\"),\n version: attribute(body, \"version\"),\n project_url: attribute(body, \"project_url\"),\n release_date: attribute(body, \"release_date\"),\n sha256: attribute(body, \"sha256\"),\n };\n if (!entry.project_name && !entry.version && !entry.project_url && !entry.sha256) continue;\n entries.push(entry);\n }\n return dedupeBy(entries.sort((a, b) => a.name.localeCompare(b.name)), (entry) => entry.name);\n}\n\nfunction balancedParenthesisBody(text: string, open: number): string | undefined {\n if (text[open] !== \"(\") return undefined;\n let depth = 0;\n let quote: \"\\\"\" | \"'\" | \"\\\"\\\"\\\"\" | \"'''\" | undefined;\n for (let index = open; index < text.length; index++) {\n if (quote) {\n if (text[index] === \"\\\\\") { index++; continue; }\n if (text.startsWith(quote, index)) { index += quote.length - 1; quote = undefined; }\n continue;\n }\n if (text.startsWith(\"\\\"\\\"\\\"\", index) || text.startsWith(\"'''\", index)) {\n quote = text.startsWith(\"\\\"\\\"\\\"\", index) ? \"\\\"\\\"\\\"\" : \"'''\";\n index += 2;\n continue;\n }\n if (text[index] === \"\\\"\" || text[index] === \"'\") { quote = text[index] as \"\\\"\" | \"'\"; continue; }\n if (text[index] === \"(\") depth++;\n if (text[index] === \")\" && --depth === 0) return text.slice(open + 1, index);\n }\n return undefined;\n}\n\nfunction collectYamlDependencies(\n value: unknown,\n nameHint?: string,\n output: Array<{ name: string; declared?: string; resolved?: string; dev: boolean }> = [],\n seen: WeakSet<object> = new WeakSet(),\n depth = 0,\n maxDepth = DEFAULT_MANIFEST_PARSE_LIMITS.maxNestingDepth,\n): Array<{ name: string; declared?: string; resolved?: string; dev: boolean }> {\n if (depth > maxDepth) throw new Error(`resource limit exceeded: YAML value depth exceeds maxNestingDepth=${maxDepth}`);\n if (Array.isArray(value)) {\n if (seen.has(value)) return output;\n seen.add(value);\n for (const item of value) collectYamlDependencies(item, undefined, output, seen, depth + 1, maxDepth);\n return output;\n }\n const row = record(value);\n if (!Object.keys(row).length) return output;\n if (seen.has(row)) return output;\n seen.add(row);\n const explicitName = string(row.name) ?? string(row.repository) ?? string(row.repo) ?? string(row.canonical_name) ?? string(row.project_name);\n const resolved = string(row.version) ?? string(row.release) ?? string(row.tag) ?? string(row.commit) ?? string(row.revision);\n const locator = resolved ?? string(row.sha256) ?? string(row.project_url) ?? string(row.url);\n const name = explicitName ?? (nameHint && locator ? nameHint : undefined);\n if (name && locator) output.push({ name, ...(resolved ? { declared: resolved, resolved } : {}), dev: Boolean(row.dev) });\n for (const [key, item] of Object.entries(row)) if (item && typeof item === \"object\") collectYamlDependencies(item, key, output, seen, depth + 1, maxDepth);\n return output;\n}\n\nfunction countRecordEntriesNamed(value: unknown, keyName: string, maxDepth: number): number {\n let count = 0;\n const seen = new WeakSet<object>();\n const pending: Array<{ value: unknown; depth: number }> = [{ value, depth: 0 }];\n while (pending.length) {\n const current = pending.pop()!;\n if (current.depth > maxDepth) throw new Error(`resource limit exceeded: JSON value depth exceeds maxNestingDepth=${maxDepth}`);\n if (!current.value || typeof current.value !== \"object\") continue;\n if (seen.has(current.value)) continue;\n seen.add(current.value);\n if (Array.isArray(current.value)) {\n for (const item of current.value) pending.push({ value: item, depth: current.depth + 1 });\n continue;\n }\n for (const [key, item] of Object.entries(current.value as Record<string, unknown>)) {\n if (key === keyName) count += Object.keys(record(item)).length;\n pending.push({ value: item, depth: current.depth + 1 });\n }\n }\n return count;\n}\n\nfunction parseTomlDependencies(text: string, dev: boolean): Array<{ name: string; declared?: string; dev: boolean }> {\n return text.split(/\\r?\\n/).flatMap((line) => {\n const match = line.match(/^\\s*([A-Za-z0-9_.-]+)\\s*=\\s*(.+?)\\s*(?:#.*)?$/);\n if (!match?.[1] || !match[2]) return [];\n const quotedVersion = match[2].match(/[\"']([^\"']+)[\"']/)?.[1];\n const inlineVersion = match[2].match(/\\bversion\\s*=\\s*[\"']([^\"']+)[\"']/)?.[1];\n return [{ name: match[1], declared: inlineVersion ?? quotedVersion, dev }];\n });\n}\n\nfunction section(text: string, name: string): string {\n const lines = text.split(/\\r?\\n/);\n const wanted = `[${name}]`;\n const body: string[] = [];\n let found = false;\n for (const line of lines) {\n const candidate = line.replace(/\\s+#.*$/, \"\").trim();\n if (candidate === wanted) { found = true; continue; }\n if (found && /^\\[\\[?.+\\]\\]?$/.test(candidate)) break;\n if (found) body.push(line);\n }\n return body.join(\"\\n\");\n}\n\nfunction sectionsMatching(text: string, pattern: RegExp): Array<{ name: string; body: string }> {\n const output: Array<{ name: string; body: string }> = [];\n let active: { name: string; lines: string[] } | undefined;\n for (const line of text.split(/\\r?\\n/)) {\n const header = line.replace(/\\s+#.*$/, \"\").trim().match(/^\\[([^\\]]+)\\]$/)?.[1];\n if (header) {\n if (active) output.push({ name: active.name, body: active.lines.join(\"\\n\") });\n active = pattern.test(header) ? { name: header, lines: [] } : undefined;\n pattern.lastIndex = 0;\n continue;\n }\n active?.lines.push(line);\n }\n if (active) output.push({ name: active.name, body: active.lines.join(\"\\n\") });\n return output;\n}\n\nfunction quoted(text: string, key: string): string | undefined {\n const escaped = key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return text.match(new RegExp(`^\\\\s*${escaped}\\\\s*=\\\\s*[\\\"']([^\\\"']+)[\\\"']`, \"m\"))?.[1];\n}\n\nfunction attribute(text: string, key: string): string | undefined {\n const escaped = key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return text.match(new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*[\\\"']([^\\\"']+)[\\\"']`))?.[1];\n}\n\nfunction yamlVersion(value: unknown): string | undefined {\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n const row = record(value);\n return string(row.version) ?? string(row.path) ?? string(row.git);\n}\n\nfunction stripJsonComments(value: string): string {\n let output = \"\";\n let state: \"code\" | \"string\" | \"line\" | \"block\" = \"code\";\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index] ?? \"\";\n const next = value[index + 1] ?? \"\";\n if (state === \"string\") {\n output += character;\n if (character === \"\\\\\" && next) { output += next; index += 1; }\n else if (character === '\"') state = \"code\";\n continue;\n }\n if (state === \"line\") {\n if (character === \"\\n\") { output += \"\\n\"; state = \"code\"; }\n else output += \" \";\n continue;\n }\n if (state === \"block\") {\n if (character === \"*\" && next === \"/\") { output += \" \"; index += 1; state = \"code\"; }\n else output += character === \"\\n\" ? \"\\n\" : \" \";\n continue;\n }\n if (character === '\"') { output += character; state = \"string\"; continue; }\n if (character === \"/\" && next === \"/\") { output += \" \"; index += 1; state = \"line\"; continue; }\n if (character === \"/\" && next === \"*\") { output += \" \"; index += 1; state = \"block\"; continue; }\n output += character;\n }\n return output;\n}\n\nfunction manifestKind(base: string): string {\n return base.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\") || \"manifest\";\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n\nfunction string(value: unknown): string | undefined {\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\nfunction array(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction stringRecord(value: unknown): Record<string, string> | undefined {\n const entries = Object.entries(record(value)).flatMap(([key, item]) => typeof item === \"string\" ? [[key, item] as const] : []);\n return entries.length ? Object.fromEntries(entries) : undefined;\n}\n\nfunction dedupeDependencies<T extends { name: string; resolved?: string; declared?: string; dev: boolean }>(items: T[]): T[] {\n return dedupeBy(items.sort((a, b) => a.name.localeCompare(b.name)), (item) => `${item.name}:${item.resolved ?? item.declared ?? \"\"}:${item.dev}`);\n}\n\nfunction dedupeBy<T>(items: T[], key: (item: T) => string): T[] {\n const seen = new Set<string>();\n return items.filter((item) => { const value = key(item); if (seen.has(value)) return false; seen.add(value); return true; });\n}\n\nfunction message(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { hashObject } from \"@scriptonia/core\";\nimport type { ManifestFacts } from \"./manifests\";\nimport type { SourceLanguage, WalkedFile } from \"./types\";\n\nexport type LanguageFact = { language: SourceLanguage; files: number; loc: number; share: number };\nexport type StackReport = {\n id: string;\n summary: string;\n languages: LanguageFact[];\n frameworks: ManifestFacts[\"frameworks\"];\n runtimes: ManifestFacts[\"runtimes\"];\n manifests: number;\n failures: string[];\n};\n\nconst DISPLAY: Record<SourceLanguage, string> = {\n c: \"C\", cpp: \"C++\", csharp: \"C#\", css: \"CSS\", dart: \"Dart\", elixir: \"Elixir\", go: \"Go\", graphql: \"GraphQL\",\n html: \"HTML\", java: \"Java\", javascript: \"JavaScript\", json: \"JSON\", kotlin: \"Kotlin\", lua: \"Lua\",\n \"objective-c\": \"Objective-C\", perl: \"Perl\", php: \"PHP\", proto: \"Protobuf\", python: \"Python\", ruby: \"Ruby\",\n rust: \"Rust\", scala: \"Scala\", shell: \"Shell\", sql: \"SQL\", starlark: \"Starlark\", swift: \"Swift\", toml: \"TOML\",\n typescript: \"TypeScript\", vue: \"Vue\", xml: \"XML\", yaml: \"YAML\",\n};\n\nexport function synthesizeStack(files: WalkedFile[], manifests: ManifestFacts[]): StackReport {\n const counts = new Map<SourceLanguage, { files: number; loc: number }>();\n for (const file of files) {\n if (!file.language || ![\"source\", \"test\", \"generated\"].includes(file.class)) continue;\n const current = counts.get(file.language) ?? { files: 0, loc: 0 };\n current.files++;\n current.loc += file.loc;\n counts.set(file.language, current);\n }\n const totalLoc = [...counts.values()].reduce((sum, item) => sum + item.loc, 0);\n const languages = [...counts.entries()]\n .map(([language, value]) => ({ language, ...value, share: totalLoc ? value.loc / totalLoc : 0 }))\n .sort((a, b) => b.loc - a.loc || a.language.localeCompare(b.language));\n const frameworks = dedupe(manifests.flatMap((manifest) => manifest.frameworks), (item) => `${item.name}:${item.version ?? \"\"}:${item.kind}`);\n const runtimes = dedupe(manifests.flatMap((manifest) => manifest.runtimes), (item) => `${item.name}:${item.version ?? \"\"}`);\n const failures = manifests.flatMap((manifest) => manifest.errors.map((error) => `${manifest.path}: ${error}`));\n if (!languages.length && !manifests.length) failures.push(\"no source language or supported manifest was detected\");\n\n const primaryFrameworks = summaryFrameworks(frameworks.filter((framework) => ![\"build\", \"test\"].includes(framework.kind)));\n const buildFrameworks = summaryFrameworks(frameworks.filter((framework) => framework.kind === \"build\"));\n const summaryParts = [\n ...primaryFrameworks.slice(0, 4).map(formatVersioned),\n ...languages.filter((language) => language.share >= 0.05 || language === languages[0]).slice(0, 5).map((language) => DISPLAY[language.language]),\n ...buildFrameworks.slice(0, 2).map(formatVersioned),\n ];\n const summary = [...new Set(summaryParts)].join(\" · \") || \"UNMAPPED\";\n const body = { summary, languages, frameworks, runtimes, manifests: manifests.length, failures };\n return { id: `stack_${hashObject(body).slice(0, 24)}`, ...body };\n}\n\nfunction summaryFrameworks(items: ManifestFacts[\"frameworks\"]): ManifestFacts[\"frameworks\"] {\n const byName = new Map<string, ManifestFacts[\"frameworks\"][number]>();\n for (const item of items) {\n const current = byName.get(item.name);\n if (!current || !current.version && item.version) byName.set(item.name, item);\n }\n return [...byName.values()];\n}\n\nfunction formatVersioned(item: { name: string; version?: string }): string {\n return item.version ? `${item.name} ${item.version}` : item.name;\n}\n\nfunction dedupe<T>(items: T[], key: (item: T) => string): T[] {\n const seen = new Set<string>();\n return items.filter((item) => { const value = key(item); if (seen.has(value)) return false; seen.add(value); return true; });\n}\n","import { hashObject, sha256 } from \"@scriptonia/core\";\n\nexport type DocumentChunk = {\n id: string;\n path: string;\n heading: string;\n content: string;\n contentHash: string;\n startLine: number;\n endLine: number;\n estimatedTokens: number;\n startByte: number;\n endByte: number;\n trust: \"untrusted_repository_text\";\n};\n\nexport function chunkMarkdown(path: string, markdown: string, options: { targetChars?: number; maxChars?: number } = {}): DocumentChunk[] {\n const targetChars = options.targetChars ?? 1_200;\n const maxChars = options.maxChars ?? 2_000;\n const normalized = markdown.replace(/\\r\\n?/g, \"\\n\");\n const lines = normalized.split(\"\\n\");\n const chunks: DocumentChunk[] = [];\n let breadcrumb: string[] = [];\n let buffer: string[] = [];\n let startLine = 1;\n let searchCharacterOffset = 0;\n let searchByteOffset = 0;\n\n const flush = (): void => {\n const content = buffer.join(\"\\n\").trim();\n if (!content) { buffer = []; return; }\n for (let offset = 0; offset < content.length; offset += maxChars) {\n const part = content.slice(offset, offset + maxChars).trim();\n if (!part) continue;\n const lineOffset = content.slice(0, offset).split(\"\\n\").length - 1;\n const partLines = part.split(\"\\n\").length;\n const heading = breadcrumb.join(\" > \") || \"Document\";\n const contentHash = sha256(part);\n const partCharacterOffset = normalized.indexOf(part, searchCharacterOffset);\n if (partCharacterOffset < 0) throw new Error(`document chunk cannot be mapped back to ${path}`);\n const startByte = searchByteOffset + Buffer.byteLength(normalized.slice(searchCharacterOffset, partCharacterOffset), \"utf8\");\n const endByte = startByte + Buffer.byteLength(part, \"utf8\");\n searchCharacterOffset = partCharacterOffset + part.length;\n searchByteOffset = endByte;\n chunks.push({\n id: `doc_${hashObject({ path, heading, startLine: startLine + lineOffset, contentHash }).slice(0, 24)}`,\n path,\n heading,\n content: part,\n contentHash,\n startLine: startLine + lineOffset,\n endLine: startLine + lineOffset + partLines - 1,\n estimatedTokens: Math.ceil(part.length / 4),\n startByte,\n endByte,\n trust: \"untrusted_repository_text\",\n });\n }\n buffer = [];\n };\n\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index]!;\n const heading = line.match(/^(#{1,3})\\s+(.+?)\\s*#*$/);\n if (heading?.[1] && heading[2]) {\n flush();\n const depth = heading[1].length;\n breadcrumb = [...breadcrumb.slice(0, depth - 1), heading[2].trim()];\n startLine = index + 2;\n continue;\n }\n if (!buffer.length) startLine = index + 1;\n buffer.push(line);\n if (buffer.join(\"\\n\").length >= targetChars && !line.trim()) flush();\n }\n flush();\n return chunks;\n}\n","import path from \"node:path\";\n\nconst NATIVE_IMPLEMENTATION_EXTENSIONS = [\".c\", \".cc\", \".cpp\", \".cxx\", \".m\", \".mm\"] as const;\nconst NATIVE_HEADER_EXTENSIONS = [\".h\", \".hh\", \".hpp\", \".hxx\"] as const;\nconst NATIVE_TEST_EXTENSIONS = new Set<string>(NATIVE_IMPLEMENTATION_EXTENSIONS);\n\nfunction genericConventionPaths(testPath: string, files: ReadonlySet<string>): string[] {\n const directory = path.posix.dirname(testPath);\n const basename = path.posix.basename(testPath);\n const transformed = basename\n .replace(/\\.(?:test|spec)(?=\\.[^.]+$)/i, \"\")\n .replace(/_(?:test|spec)(?=\\.[^.]+$)/i, \"\")\n .replace(/^test_(?=[^.]+\\.[^.]+$)/i, \"\");\n if (transformed === basename) return [];\n const directories = new Set([directory]);\n const segments = directory === \".\" ? [] : directory.split(\"/\");\n for (let index = 0; index < segments.length; index += 1) {\n if (!/^(?:__tests__|tests?|spec)$/.test(segments[index] ?? \"\")) continue;\n const without = [...segments.slice(0, index), ...segments.slice(index + 1)].join(\"/\") || \".\";\n directories.add(without);\n if (index === 0) for (const root of [\"src\", \"source\", \"lib\"]) directories.add([root, ...segments.slice(1)].join(\"/\"));\n }\n const exactExtension = [...directories]\n .map((candidate) => path.posix.join(candidate, transformed))\n .filter((candidate) => files.has(candidate));\n if (exactExtension.length > 0) return exactExtension;\n\n const extension = path.posix.extname(transformed).toLowerCase();\n if (!NATIVE_TEST_EXTENSIONS.has(extension)) return [];\n const stem = transformed.slice(0, -extension.length);\n const nativeCounterparts = [...directories].flatMap((directory) =>\n [...NATIVE_IMPLEMENTATION_EXTENSIONS, ...NATIVE_HEADER_EXTENSIONS]\n .map((candidateExtension) => path.posix.join(directory, `${stem}${candidateExtension}`)))\n .filter((candidate) => files.has(candidate));\n // Cross-extension fallback is intentionally unique-only. A test named\n // foo_test.cc can map directly to foo.h when that is the sole canonical\n // counterpart, but foo.h plus foo.hpp (or multiple source variants) is an\n // ambiguous family and must not receive HIGH-confidence TEST_OF evidence.\n return nativeCounterparts.length === 1 ? nativeCounterparts : [];\n}\n\nfunction javaModuleRoot(testPath: string, markerIndex: number): string {\n return testPath.split(\"/\").slice(0, markerIndex).join(\"/\");\n}\n\nfunction javaProductionModule(testModule: string): string {\n const segments = testModule.split(\"/\");\n const module = segments.at(-1) ?? \"\";\n if (module.endsWith(\"-tests\")) segments[segments.length - 1] = module.slice(0, -\"-tests\".length);\n return segments.filter(Boolean).join(\"/\");\n}\n\nfunction javaFlavor(filePath: string): \"android\" | \"jre\" {\n return filePath === \"android\" || filePath.startsWith(\"android/\") ? \"android\" : \"jre\";\n}\n\nfunction javaConventionPath(testPath: string, files: ReadonlySet<string>): string | undefined {\n const basename = path.posix.basename(testPath);\n const match = /^(.+?)(?:Test|Tests|Spec)\\.java$/.exec(basename);\n if (!match?.[1]) return undefined;\n const targetBasename = `${match[1]}.java`;\n const segments = testPath.split(\"/\");\n const markerIndex = segments.findLastIndex((segment) => /^(?:test|test-super|tests)$/.test(segment));\n if (markerIndex < 0) return undefined;\n const packageSegments = segments.slice(markerIndex + 1, -1);\n const packageSuffix = [...packageSegments, targetBasename].join(\"/\");\n const testModule = javaModuleRoot(testPath, markerIndex);\n const expectedModule = javaProductionModule(testModule);\n const candidates = [...files].filter((candidate) => {\n if (candidate === testPath || path.posix.basename(candidate) !== targetBasename) return false;\n if (!(candidate === packageSuffix || candidate.endsWith(`/${packageSuffix}`))) return false;\n return !/(?:^|\\/)(?:test|test-super|tests)(?:\\/|$)/.test(candidate);\n });\n return candidates.sort((left, right) => {\n const score = (candidate: string): number => {\n let value = javaFlavor(candidate) === javaFlavor(testPath) ? 1_000_000 : 0;\n if (candidate.startsWith(`${expectedModule}/`)) value += 200_000;\n if (candidate.startsWith(`${testModule}/`)) value += 150_000;\n if (/(?:^|\\/)src(?:\\/|$)/.test(candidate)) value += 10_000;\n return value;\n };\n return score(right) - score(left) || left.localeCompare(right);\n })[0];\n}\n\n/**\n * Deterministic naming-convention map shared by build-time persistence and\n * graph hydration. Java adds reactor/source-set awareness for layouts such as\n * Guava's `guava-tests/test/.../FooTest.java` -> `guava/src/.../Foo.java`.\n */\nexport function findConventionalSourcePaths(testPath: string, files: ReadonlySet<string>): string[] {\n const results = genericConventionPaths(testPath, files);\n if (testPath.endsWith(\".java\")) {\n const java = javaConventionPath(testPath, files);\n if (java) results.push(java);\n }\n return [...new Set(results)].sort();\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { SourceLanguage } from \"@scriptonia/brain-census\";\nimport { sha256 } from \"@scriptonia/core\";\nimport { Query, type Language } from \"web-tree-sitter\";\nimport { z } from \"zod\";\nimport { loadGrammar } from \"./grammar-registry\";\n\n/**\n * Version of the shipped Tree-sitter extraction-query contract. This value is\n * also recorded in every brain build identity, so changing any query requires\n * an explicit version bump and invalidates incremental AST reuse.\n */\nexport const AST_QUERY_VERSION = \"1\" as const;\n\nconst queryEntrySchema = z.object({\n id: z.string().min(1),\n languages: z.array(z.string().min(1)).min(1),\n extensions: z.array(z.string().startsWith(\".\")).optional(),\n file: z.string().min(1),\n sample_path: z.string().min(1),\n}).strict();\n\nconst queryManifestSchema = z.object({\n schema_version: z.literal(1),\n query_version: z.literal(AST_QUERY_VERSION),\n queries: z.array(queryEntrySchema).min(1),\n}).strict();\n\nexport type AstQueryManifest = z.infer<typeof queryManifestSchema>;\nexport type AstQueryDescriptor = AstQueryManifest[\"queries\"][number];\nexport type LoadedAstQueryAsset = {\n descriptor: AstQueryDescriptor;\n version: typeof AST_QUERY_VERSION;\n source: string;\n sha256: string;\n path: string;\n};\n\nconst defaultAssetRoot = fileURLToPath(new URL(\"../assets\", import.meta.url));\nconst manifestCache = new Map<string, AstQueryManifest>();\nconst sourceCache = new Map<string, LoadedAstQueryAsset>();\nconst compiledCompatibility = new WeakMap<Language, Set<string>>();\n\nfunction safeAssetPath(root: string, relative: string): string {\n const resolvedRoot = path.resolve(root);\n const candidate = path.resolve(resolvedRoot, relative);\n if (candidate !== resolvedRoot && !candidate.startsWith(`${resolvedRoot}${path.sep}`)) {\n throw new Error(`AST query asset escapes its root: ${relative}`);\n }\n return candidate;\n}\n\nexport function loadAstQueryManifest(assetRoot = defaultAssetRoot): AstQueryManifest {\n const root = path.resolve(assetRoot);\n const cached = manifestCache.get(root);\n if (cached) return cached;\n const manifestPath = safeAssetPath(root, \"queries/manifest.json\");\n const manifest = queryManifestSchema.parse(JSON.parse(fs.readFileSync(manifestPath, \"utf8\")));\n const ids = new Set<string>();\n for (const query of manifest.queries) {\n if (ids.has(query.id)) throw new Error(`duplicate AST query id: ${query.id}`);\n ids.add(query.id);\n }\n manifestCache.set(root, manifest);\n return manifest;\n}\n\nfunction queryDescriptor(language: SourceLanguage, filePath: string, assetRoot: string): AstQueryDescriptor | undefined {\n const extension = path.posix.extname(filePath.replaceAll(\"\\\\\", \"/\")).toLowerCase();\n const candidates = loadAstQueryManifest(assetRoot).queries.filter((query) => query.languages.includes(language));\n return candidates.find((query) => query.extensions?.includes(extension))\n ?? candidates.find((query) => !query.extensions);\n}\n\n/** Load a versioned query source with a stable content digest. */\nexport function loadAstQueryAsset(\n language: SourceLanguage,\n filePath: string,\n assetRoot = defaultAssetRoot,\n): LoadedAstQueryAsset | undefined {\n const root = path.resolve(assetRoot);\n const descriptor = queryDescriptor(language, filePath, root);\n if (!descriptor) return undefined;\n const assetPath = safeAssetPath(path.join(root, \"queries\"), descriptor.file);\n const cacheKey = `${descriptor.id}\\0${assetPath}\\0${AST_QUERY_VERSION}`;\n const cached = sourceCache.get(cacheKey);\n if (cached) return cached;\n const source = fs.readFileSync(assetPath, \"utf8\");\n if (!source.trim()) throw new Error(`AST query asset is empty: ${descriptor.file}`);\n const loaded = { descriptor, version: AST_QUERY_VERSION, source, sha256: sha256(source), path: assetPath };\n sourceCache.set(cacheKey, loaded);\n return loaded;\n}\n\n/**\n * Compile each query against its exact grammar at first use. Extraction keeps\n * its richer normalization traversal, but a missing or grammar-incompatible\n * shipped query is now a hard AST-stage failure rather than dead packaging.\n */\nexport function assertAstQueryCompatible(\n language: SourceLanguage,\n filePath: string,\n grammar: Language,\n assetRoot = defaultAssetRoot,\n): LoadedAstQueryAsset | undefined {\n const asset = loadAstQueryAsset(language, filePath, assetRoot);\n if (!asset) return undefined;\n const cache = compiledCompatibility.get(grammar) ?? new Set<string>();\n const identity = `${asset.descriptor.id}\\0${asset.sha256}`;\n if (!cache.has(identity)) {\n const query = new Query(grammar, asset.source);\n try {\n if (!query.captureNames.includes(\"symbol\") && !query.captureNames.includes(\"import\")) {\n throw new Error(`AST query ${asset.descriptor.id} has no symbol or import captures`);\n }\n } finally {\n query.delete();\n }\n cache.add(identity);\n compiledCompatibility.set(grammar, cache);\n }\n return asset;\n}\n\n/** Validate every packaged query, including both TypeScript and TSX grammars. */\nexport async function validateAstQueryAssets(assetRoot = defaultAssetRoot): Promise<LoadedAstQueryAsset[]> {\n const manifest = loadAstQueryManifest(assetRoot);\n const validated: LoadedAstQueryAsset[] = [];\n for (const descriptor of manifest.queries) {\n const language = descriptor.languages[0] as SourceLanguage | undefined;\n if (!language) continue;\n const grammar = await loadGrammar(language, descriptor.sample_path, { assetRoot });\n if (!grammar) throw new Error(`AST query ${descriptor.id} has no matching grammar`);\n const asset = assertAstQueryCompatible(language, descriptor.sample_path, grammar.language, assetRoot);\n if (!asset) throw new Error(`AST query ${descriptor.id} could not be selected`);\n validated.push(asset);\n }\n return validated;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport { setFlagsFromString } from \"node:v8\";\nimport { sha256 } from \"@scriptonia/core\";\nimport type { SourceLanguage } from \"@scriptonia/brain-census\";\nimport { z } from \"zod\";\nimport { LANGUAGE_VERSION, Language, MIN_COMPATIBLE_VERSION, Parser } from \"web-tree-sitter\";\nimport type { GrammarProvenance } from \"./types\";\n\nconst grammarEntrySchema = z.object({\n id: z.string().min(1),\n languages: z.array(z.string().min(1)).min(1),\n extensions: z.array(z.string().startsWith(\".\")).optional(),\n file: z.string().min(1),\n package_subpath: z.string().min(1),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n abi: z.number().int().positive(),\n}).strict();\n\nconst grammarManifestSchema = z.object({\n schema_version: z.literal(1),\n runtime: z.object({\n package: z.literal(\"web-tree-sitter\"),\n version: z.string(),\n license: z.string(),\n abi_min: z.number().int(),\n abi_max: z.number().int(),\n }).strict(),\n source_package: z.object({\n name: z.literal(\"tree-sitter-wasms\"),\n version: z.string(),\n license: z.string(),\n repository: z.string().url(),\n }).strict(),\n grammars: z.array(grammarEntrySchema).min(1),\n}).strict();\n\nexport type GrammarManifest = z.infer<typeof grammarManifestSchema>;\nexport type GrammarDescriptor = GrammarManifest[\"grammars\"][number];\n\nconst defaultAssetRoot = fileURLToPath(new URL(\"../assets\", import.meta.url));\nconst require = createRequire(import.meta.url);\nconst manifestCache = new Map<string, GrammarManifest>();\nconst languageCache = new Map<string, Promise<LoadedGrammar>>();\nlet runtimeInitialization: Promise<void> | undefined;\nlet initializedCorePath: string | undefined;\nlet boundedWasmCompilationConfigured = false;\n// V8 compiles each grammar WASM module on load. Loading different grammars in\n// parallel can multiply the compiler's native peak memory even when callers\n// bound their JavaScript heap. Keep the per-grammar promise cache, but serialize\n// first-time module compilation so large polyglot repositories stay bounded.\nlet grammarLoadTail: Promise<void> = Promise.resolve();\n\ntype LebValue = { value: number; nextOffset: number };\n\nfunction readUnsignedLeb(bytes: Uint8Array, offset: number): LebValue {\n let value = 0;\n let shift = 0;\n for (let cursor = offset; cursor < bytes.length && shift <= 28; cursor += 1, shift += 7) {\n const byte = bytes[cursor];\n if (byte === undefined) break;\n value += (byte & 0x7f) * (2 ** shift);\n if ((byte & 0x80) === 0) return { value, nextOffset: cursor + 1 };\n }\n throw new GrammarLoadError(\"grammar_integrity\", \"invalid unsigned LEB128 value in Tree-sitter core WASM\");\n}\n\nfunction encodeUnsignedLeb(value: number): Uint8Array {\n if (!Number.isSafeInteger(value) || value < 0 || value > 0xffff_ffff) {\n throw new GrammarLoadError(\"grammar_integrity\", `cannot encode WASM unsigned integer ${value}`);\n }\n const encoded: number[] = [];\n let remaining = value;\n do {\n let byte = remaining % 128;\n remaining = Math.floor(remaining / 128);\n if (remaining > 0) byte |= 0x80;\n encoded.push(byte);\n } while (remaining > 0);\n return Uint8Array.from(encoded);\n}\n\n/**\n * tree-sitter-wasms 0.1.13's Bash scanner imports the C `isalpha` symbol,\n * while web-tree-sitter 0.25 exports the ABI-equivalent wide-character\n * implementation as `iswalpha`. Add a second WASM export pointing at that\n * exact function index so Emscripten's side-module linker can resolve the\n * scanner without rewriting source text or falling back to regex parsing.\n */\nfunction addShellScannerCoreAlias(coreBytes: Uint8Array): Uint8Array {\n if (coreBytes.length < 8 || Buffer.from(coreBytes.subarray(0, 4)).toString(\"hex\") !== \"0061736d\") {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core is not a valid WASM binary\");\n }\n let sectionOffset = 8;\n while (sectionOffset < coreBytes.length) {\n const sectionId = coreBytes[sectionOffset];\n if (sectionId === undefined) break;\n const sectionSize = readUnsignedLeb(coreBytes, sectionOffset + 1);\n const payloadStart = sectionSize.nextOffset;\n const payloadEnd = payloadStart + sectionSize.value;\n if (payloadEnd > coreBytes.length) {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core contains a truncated WASM section\");\n }\n if (sectionId !== 7) {\n sectionOffset = payloadEnd;\n continue;\n }\n\n const exportCount = readUnsignedLeb(coreBytes, payloadStart);\n let cursor = exportCount.nextOffset;\n let sourceFunctionIndex: number | undefined;\n let targetAlreadyPresent = false;\n for (let index = 0; index < exportCount.value; index += 1) {\n const nameLength = readUnsignedLeb(coreBytes, cursor);\n const nameEnd = nameLength.nextOffset + nameLength.value;\n if (nameEnd + 1 > payloadEnd) {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core contains a truncated WASM export\");\n }\n const name = Buffer.from(coreBytes.subarray(nameLength.nextOffset, nameEnd)).toString(\"utf8\");\n const kind = coreBytes[nameEnd];\n const itemIndex = readUnsignedLeb(coreBytes, nameEnd + 1);\n if (name === \"isalpha\") targetAlreadyPresent = true;\n if (name === \"iswalpha\" && kind === 0) sourceFunctionIndex = itemIndex.value;\n cursor = itemIndex.nextOffset;\n }\n if (cursor !== payloadEnd) {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core WASM export section has trailing bytes\");\n }\n if (targetAlreadyPresent) return coreBytes;\n if (sourceFunctionIndex === undefined) {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core does not export iswalpha for the Bash scanner compatibility alias\");\n }\n\n const aliasName = Buffer.from(\"isalpha\", \"utf8\");\n const alias = Buffer.concat([\n Buffer.from(encodeUnsignedLeb(aliasName.length)),\n aliasName,\n Buffer.from([0]),\n Buffer.from(encodeUnsignedLeb(sourceFunctionIndex)),\n ]);\n const newPayload = Buffer.concat([\n Buffer.from(encodeUnsignedLeb(exportCount.value + 1)),\n Buffer.from(coreBytes.subarray(exportCount.nextOffset, payloadEnd)),\n alias,\n ]);\n return Buffer.concat([\n Buffer.from(coreBytes.subarray(0, sectionOffset)),\n Buffer.from([sectionId]),\n Buffer.from(encodeUnsignedLeb(newPayload.length)),\n newPayload,\n Buffer.from(coreBytes.subarray(payloadEnd)),\n ]);\n }\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter core WASM does not contain an export section\");\n}\n\nexport class GrammarLoadError extends Error {\n constructor(readonly code: \"grammar_unavailable\" | \"grammar_integrity\", message: string) {\n super(message);\n this.name = \"GrammarLoadError\";\n }\n}\n\nexport type LoadedGrammar = {\n descriptor: GrammarDescriptor;\n language: Language;\n provenance: GrammarProvenance;\n assetPath: string;\n};\n\nfunction configureBoundedWasmCompilation(): void {\n if (boundedWasmCompilationConfigured) return;\n boundedWasmCompilationConfigured = true;\n // Large generated grammar modules (notably C++ and Objective-C) can make\n // modern V8 schedule a very large TurboFan tier-up job in the background.\n // That native compiler allocation is outside the JS heap and can terminate\n // the process before a catch/finally boundary runs. Baseline Liftoff code is\n // fully correct for parsing and keeps memory deterministic for a CLI job.\n setFlagsFromString(\"--no-wasm-tier-up --no-wasm-dynamic-tiering\");\n}\n\nfunction safeAssetPath(root: string, relative: string): string {\n const candidate = path.resolve(root, relative);\n const resolvedRoot = path.resolve(root);\n if (candidate !== resolvedRoot && !candidate.startsWith(`${resolvedRoot}${path.sep}`)) {\n throw new GrammarLoadError(\"grammar_integrity\", `grammar asset escapes its root: ${relative}`);\n }\n return candidate;\n}\n\nexport function loadGrammarManifest(assetRoot = defaultAssetRoot): GrammarManifest {\n const resolvedRoot = path.resolve(assetRoot);\n const cached = manifestCache.get(resolvedRoot);\n if (cached) return cached;\n const manifestPath = safeAssetPath(resolvedRoot, \"grammar-manifest.json\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(manifestPath, \"utf8\"));\n } catch (error) {\n throw new GrammarLoadError(\"grammar_unavailable\", `cannot read grammar manifest at ${manifestPath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n const manifest = grammarManifestSchema.parse(parsed);\n if (manifest.grammars.some((grammar) => grammar.abi < manifest.runtime.abi_min || grammar.abi > manifest.runtime.abi_max)) {\n throw new GrammarLoadError(\n \"grammar_integrity\",\n `grammar manifest contains an entry outside its declared ABI range ${manifest.runtime.abi_min}-${manifest.runtime.abi_max}`,\n );\n }\n manifestCache.set(resolvedRoot, manifest);\n return manifest;\n}\n\nexport function grammarFor(language: SourceLanguage, filePath: string, assetRoot = defaultAssetRoot): GrammarDescriptor | undefined {\n const extension = path.posix.extname(filePath.replaceAll(\"\\\\\", \"/\")).toLowerCase();\n const matches = loadGrammarManifest(assetRoot).grammars.filter((entry) => entry.languages.includes(language));\n return matches.find((entry) => entry.extensions?.includes(extension)) ?? matches.find((entry) => !entry.extensions);\n}\n\nfunction resolveGrammarAsset(entry: GrammarDescriptor, assetRoot: string): string {\n const bundled = safeAssetPath(assetRoot, entry.file);\n if (fs.existsSync(bundled)) return bundled;\n try {\n return require.resolve(`${loadGrammarManifest(assetRoot).source_package.name}/${entry.package_subpath}`);\n } catch {\n throw new GrammarLoadError(\"grammar_unavailable\", `missing grammar ${entry.id}; expected ${bundled} or dependency subpath ${entry.package_subpath}`);\n }\n}\n\nasync function initializeRuntime(coreWasmPath: string | undefined, assetRoot: string): Promise<void> {\n if (runtimeInitialization) {\n if (coreWasmPath && initializedCorePath && path.resolve(coreWasmPath) !== initializedCorePath) {\n throw new GrammarLoadError(\"grammar_integrity\", \"Tree-sitter runtime was already initialized with a different core WASM\");\n }\n return runtimeInitialization;\n }\n const resolvedCorePath = coreWasmPath ? path.resolve(coreWasmPath) : require.resolve(\"web-tree-sitter/tree-sitter.wasm\");\n initializedCorePath = resolvedCorePath;\n const compatibleCore = addShellScannerCoreAlias(fs.readFileSync(resolvedCorePath));\n runtimeInitialization = Parser.init({ wasmBinary: compatibleCore } as unknown as NonNullable<Parameters<typeof Parser.init>[0]>).then(() => {\n const manifest = loadGrammarManifest(assetRoot);\n if (manifest.runtime.abi_min !== MIN_COMPATIBLE_VERSION || manifest.runtime.abi_max !== LANGUAGE_VERSION) {\n throw new GrammarLoadError(\n \"grammar_integrity\",\n `grammar manifest ABI range ${manifest.runtime.abi_min}-${manifest.runtime.abi_max} does not match runtime ${MIN_COMPATIBLE_VERSION}-${LANGUAGE_VERSION}`,\n );\n }\n });\n return runtimeInitialization;\n}\n\nasync function loadLanguageSerialized(bytes: Uint8Array): Promise<Language> {\n const previous = grammarLoadTail.catch(() => undefined);\n let release!: () => void;\n grammarLoadTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n await previous;\n try {\n return await Language.load(bytes);\n } finally {\n release();\n }\n}\n\nexport async function loadGrammar(\n language: SourceLanguage,\n filePath: string,\n options: { assetRoot?: string; coreWasmPath?: string } = {},\n): Promise<LoadedGrammar | undefined> {\n const assetRoot = path.resolve(options.assetRoot ?? defaultAssetRoot);\n const descriptor = grammarFor(language, filePath, assetRoot);\n if (!descriptor) return undefined;\n const assetPath = resolveGrammarAsset(descriptor, assetRoot);\n const packagedCore = safeAssetPath(assetRoot, \"tree-sitter.wasm\");\n const coreWasmPath = options.coreWasmPath ?? (fs.existsSync(packagedCore) ? packagedCore : undefined);\n const key = `${assetPath}:${descriptor.sha256}`;\n let pending = languageCache.get(key);\n if (!pending) {\n pending = (async () => {\n configureBoundedWasmCompilation();\n await initializeRuntime(coreWasmPath, assetRoot);\n const bytes = fs.readFileSync(assetPath);\n const actualHash = sha256(bytes);\n if (actualHash !== descriptor.sha256) {\n throw new GrammarLoadError(\"grammar_integrity\", `grammar ${descriptor.id} hash mismatch: expected ${descriptor.sha256}, received ${actualHash}`);\n }\n const loaded = await loadLanguageSerialized(bytes);\n if (loaded.abiVersion !== descriptor.abi || loaded.abiVersion < MIN_COMPATIBLE_VERSION || loaded.abiVersion > LANGUAGE_VERSION) {\n throw new GrammarLoadError(\n \"grammar_integrity\",\n `grammar ${descriptor.id} ABI ${loaded.abiVersion} is incompatible with runtime ${MIN_COMPATIBLE_VERSION}-${LANGUAGE_VERSION}`,\n );\n }\n return {\n descriptor,\n language: loaded,\n provenance: {\n id: descriptor.id,\n abi: loaded.abiVersion,\n sha256: actualHash,\n runtime: \"web-tree-sitter@0.25.10\",\n source: `${loadGrammarManifest(assetRoot).source_package.repository}@${loadGrammarManifest(assetRoot).source_package.version}`,\n license: loadGrammarManifest(assetRoot).source_package.license,\n },\n assetPath,\n } satisfies LoadedGrammar;\n })();\n languageCache.set(key, pending);\n }\n try {\n return await pending;\n } catch (error) {\n languageCache.delete(key);\n throw error;\n }\n}\n\nexport async function validateGrammarAssets(options: { assetRoot?: string; coreWasmPath?: string } = {}): Promise<GrammarProvenance[]> {\n const assetRoot = options.assetRoot ?? defaultAssetRoot;\n const manifest = loadGrammarManifest(assetRoot);\n const results: GrammarProvenance[] = [];\n for (const descriptor of manifest.grammars) {\n const language = descriptor.languages[0] as SourceLanguage | undefined;\n if (!language) continue;\n const extension = descriptor.extensions?.[0] ?? \"\";\n const loaded = await loadGrammar(language, `fixture${extension}`, options);\n if (!loaded || loaded.descriptor.id !== descriptor.id) {\n throw new GrammarLoadError(\"grammar_integrity\", `grammar ${descriptor.id} cannot be selected from the manifest`);\n }\n results.push(loaded.provenance);\n }\n return results;\n}\n\nexport function defaultGrammarAssetRoot(): string {\n return defaultAssetRoot;\n}\n","import type { SourceLanguage } from \"@scriptonia/brain-census\";\n\n/** Published per-file parser deadline from the Deep Brain execution contract. */\nexport const DEFAULT_AST_FILE_TIMEOUT_MS = 2_000;\n\nexport type AstParseStatus = \"parsed\" | \"partial\" | \"unsupported\" | \"failed\";\n/** Normalized parser implementation identity. Parse status alone never proves this value. */\nexport type AstParserRuntime = \"web-tree-sitter\" | \"structural-fallback\" | \"unavailable\";\nexport type AstConfidence = \"high\" | \"medium\" | \"low\";\nexport type AstSymbolKind =\n | \"class\"\n | \"constant\"\n | \"enum\"\n | \"field\"\n | \"function\"\n | \"interface\"\n | \"message\"\n | \"method\"\n | \"module\"\n | \"namespace\"\n | \"rpc\"\n | \"service\"\n | \"struct\"\n | \"target\"\n | \"trait\"\n | \"type\"\n | \"variable\";\n\n/**\n * Canonical declaration kinds that introduce a resolvable type identity.\n * Grammar-specific forms normalize into these values: Java records -> struct,\n * annotations/protocols -> interface, Kotlin objects -> class, and union/type\n * aliases -> type.\n */\nexport const AST_TYPE_DECLARATION_KINDS = [\n \"class\", \"enum\", \"interface\", \"message\", \"service\", \"struct\", \"trait\", \"type\",\n] as const satisfies readonly AstSymbolKind[];\n\nconst AST_TYPE_DECLARATION_KIND_SET: ReadonlySet<string> = new Set(AST_TYPE_DECLARATION_KINDS);\n\nexport function isAstTypeDeclarationKind(kind: string): kind is (typeof AST_TYPE_DECLARATION_KINDS)[number] {\n return AST_TYPE_DECLARATION_KIND_SET.has(kind);\n}\n\nexport type DartWidgetKind = \"consumer\" | \"stateful\" | \"stateless\";\n\nexport type SourceSpan = {\n startByte: number;\n endByte: number;\n startLine: number;\n startColumn: number;\n endLine: number;\n endColumn: number;\n};\n\nexport type AstDiagnostic = {\n code: \"grammar_unavailable\" | \"grammar_integrity\" | \"parse_error\" | \"parse_timeout\" | \"parser_failure\" | \"unsupported_construct\";\n severity: \"info\" | \"warning\" | \"error\";\n message: string;\n span?: SourceSpan;\n};\n\nexport type AstSymbol = {\n factId: string;\n path: string;\n language: SourceLanguage;\n kind: AstSymbolKind;\n name: string;\n qualifiedName: string;\n signature: string;\n /** Syntax-derived public API visibility when the language makes it unambiguous. */\n exported?: boolean;\n /** Raw leading documentation comment text captured from syntax nodes. */\n docComment?: string;\n /** Declared superclass for languages that expose one, including qualifiers. */\n superclass?: string;\n /** Explicit for Dart classes; true only for the supported Flutter widget bases. */\n widget?: boolean;\n /** More precise classification when `widget` is true. */\n widgetKind?: DartWidgetKind;\n nodeType: string;\n span: SourceSpan;\n confidence: AstConfidence;\n provenance: \"tree_sitter\" | \"structural_fallback\";\n};\n\nexport type AstImport = {\n factId: string;\n path: string;\n language: SourceLanguage;\n kind: \"import\" | \"include\" | \"export\" | \"load\" | \"package\" | \"use\" | \"dynamic_import\" | \"require\";\n specifier: string;\n importedNames: string[];\n /** Java `import static`; retained separately from the canonical specifier. */\n isStatic?: boolean;\n /** True when the source declaration ends in `.*`. */\n wildcard?: boolean;\n span: SourceSpan;\n confidence: AstConfidence;\n provenance: \"tree_sitter\" | \"structural_fallback\";\n};\n\nexport type AstCallCandidate = {\n factId: string;\n path: string;\n language: SourceLanguage;\n callee: string;\n /** Syntax-derived argument count when the grammar exposes an argument list. */\n argumentCount?: number;\n span: SourceSpan;\n confidence: \"low\";\n resolution: \"unresolved\";\n provenance: \"tree_sitter\" | \"structural_fallback\";\n};\n\nexport type GrammarProvenance = {\n id: string;\n abi: number;\n sha256: string;\n runtime: \"web-tree-sitter@0.25.10\" | \"structural-fallback@1\" | \"unavailable\";\n source: string;\n license: string;\n};\n\nexport function parserRuntimeForGrammar(grammar: Pick<GrammarProvenance, \"runtime\">): AstParserRuntime {\n if (grammar.runtime === \"web-tree-sitter@0.25.10\") return \"web-tree-sitter\";\n if (grammar.runtime === \"structural-fallback@1\") return \"structural-fallback\";\n return \"unavailable\";\n}\n\nexport type AstCoverage = {\n sourceBytes: number;\n parsedBytes: number;\n errorBytes: number;\n errorByteRatio: number;\n errorNodes: number;\n missingNodes: number;\n parseMs: number;\n};\n\nexport type AstParseResult = {\n schemaVersion: 1;\n status: AstParseStatus;\n path: string;\n language: SourceLanguage;\n sourceSha256: string;\n /** Unversioned implementation family used for honest aggregate reporting. */\n parserRuntime: AstParserRuntime;\n grammar: GrammarProvenance;\n rootType: string;\n symbols: AstSymbol[];\n imports: AstImport[];\n calls: AstCallCandidate[];\n diagnostics: AstDiagnostic[];\n coverage: AstCoverage;\n};\n\nexport type ParseSourceInput = {\n path: string;\n source: string;\n language?: SourceLanguage;\n sourceSha256?: string;\n timeoutMs?: number;\n assetRoot?: string;\n coreWasmPath?: string;\n};\n\nexport type ParseSourcesOptions = {\n concurrency?: number;\n /** Cancels queued work and retires workers that are parsing in-flight files. */\n signal?: AbortSignal;\n};\n\nexport type SemanticFact = {\n factId: string;\n provider: string;\n providerVersion: string;\n kind: \"resolved_call\" | \"resolved_type\" | \"override\" | \"implementation\" | \"diagnostic\";\n sourceFactId?: string;\n targetFactId?: string;\n path: string;\n span?: SourceSpan;\n detail: string;\n confidence: AstConfidence;\n};\n\nexport type SemanticAnalysis = {\n provider: string;\n providerVersion: string;\n sourceSha256: string;\n status: \"complete\" | \"partial\" | \"failed\";\n facts: SemanticFact[];\n diagnostics: string[];\n};\n\nexport interface TypedSemanticProvider {\n readonly id: string;\n readonly version: string;\n supports(language: SourceLanguage, repoRoot: string): boolean | Promise<boolean>;\n analyze(input: { repoRoot: string; result: AstParseResult; signal?: AbortSignal }): Promise<SemanticAnalysis>;\n}\n","import { normalizeRepoPath, sha256 } from \"@scriptonia/core\";\nimport type { SourceLanguage } from \"@scriptonia/brain-census\";\nimport { performance } from \"node:perf_hooks\";\nimport type {\n AstCallCandidate,\n AstDiagnostic,\n AstImport,\n AstParseResult,\n AstSymbol,\n AstSymbolKind,\n ParseSourceInput,\n SourceSpan,\n} from \"./types\";\n\ntype LocatedSource = {\n span(start: number, end: number): SourceSpan;\n lineStart(lineIndex: number): number;\n};\n\nfunction locate(source: string): LocatedSource {\n const starts = [0];\n for (let index = 0; index < source.length; index += 1) if (source.charCodeAt(index) === 10) starts.push(index + 1);\n function point(offset: number): { line: number; column: number; byte: number } {\n let low = 0;\n let high = starts.length - 1;\n while (low <= high) {\n const middle = Math.floor((low + high) / 2);\n const value = starts[middle] ?? 0;\n if (value <= offset) low = middle + 1;\n else high = middle - 1;\n }\n const lineIndex = Math.max(0, high);\n const start = starts[lineIndex] ?? 0;\n return {\n line: lineIndex + 1,\n column: Buffer.byteLength(source.slice(start, offset), \"utf8\"),\n byte: Buffer.byteLength(source.slice(0, start), \"utf8\") + Buffer.byteLength(source.slice(start, offset), \"utf8\"),\n };\n }\n return {\n span(start, end) {\n const first = point(Math.max(0, start));\n const last = point(Math.max(start, end));\n return {\n startByte: first.byte,\n endByte: last.byte,\n startLine: first.line,\n startColumn: first.column,\n endLine: last.line,\n endColumn: last.column,\n };\n },\n lineStart(lineIndex) { return starts[lineIndex] ?? source.length; },\n };\n}\n\nfunction fallbackGrammar(id: \"proto\" | \"starlark\"): AstParseResult[\"grammar\"] {\n return {\n id: `${id}-structural`,\n abi: 1,\n sha256: sha256(`scriptonia:${id}:structural-fallback:1`),\n runtime: \"structural-fallback@1\",\n source: \"@scriptonia/brain-ast\",\n license: \"project\",\n };\n}\n\nfunction baseResult(input: ParseSourceInput, language: \"proto\" | \"starlark\"): Omit<AstParseResult, \"status\" | \"rootType\" | \"symbols\" | \"imports\" | \"calls\" | \"diagnostics\" | \"coverage\"> & { sourceBytes: number } {\n const sourceSha256 = input.sourceSha256 ?? sha256(input.source);\n return {\n schemaVersion: 1,\n path: normalizeRepoPath(input.path),\n language,\n sourceSha256,\n parserRuntime: \"structural-fallback\",\n grammar: fallbackGrammar(language),\n sourceBytes: Buffer.byteLength(input.source, \"utf8\"),\n };\n}\n\nfunction factSymbol(\n base: ReturnType<typeof baseResult>,\n kind: AstSymbolKind,\n name: string,\n qualifiedName: string,\n signature: string,\n nodeType: string,\n span: SourceSpan,\n): AstSymbol {\n return {\n factId: `symbol_${sha256(`${base.sourceSha256}\\0${base.path}\\0${kind}\\0${qualifiedName}\\0${span.startByte}`).slice(0, 24)}`,\n path: base.path,\n language: base.language,\n kind,\n name,\n qualifiedName,\n signature: signature.replace(/\\s+/g, \" \").trim().slice(0, 1_000),\n nodeType,\n span,\n confidence: \"medium\",\n provenance: \"structural_fallback\",\n };\n}\n\nfunction factImport(\n base: ReturnType<typeof baseResult>,\n kind: AstImport[\"kind\"],\n specifier: string,\n importedNames: string[],\n span: SourceSpan,\n): AstImport {\n return {\n factId: `import_${sha256(`${base.sourceSha256}\\0${base.path}\\0${kind}\\0${specifier}\\0${span.startByte}`).slice(0, 24)}`,\n path: base.path,\n language: base.language,\n kind,\n specifier,\n importedNames,\n span,\n confidence: \"medium\",\n provenance: \"structural_fallback\",\n };\n}\n\nfunction stripComments(source: string): string {\n let output = \"\";\n let state: \"code\" | \"line\" | \"block\" | \"single\" | \"double\" = \"code\";\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index] ?? \"\";\n const next = source[index + 1] ?? \"\";\n if (state === \"line\") {\n if (char === \"\\n\") { state = \"code\"; output += \"\\n\"; } else output += \" \";\n continue;\n }\n if (state === \"block\") {\n if (char === \"*\" && next === \"/\") { output += \" \"; index += 1; state = \"code\"; }\n else output += char === \"\\n\" ? \"\\n\" : \" \";\n continue;\n }\n if (state === \"single\" || state === \"double\") {\n output += char;\n if (char === \"\\\\\" && next) { output += next; index += 1; continue; }\n if ((state === \"single\" && char === \"'\") || (state === \"double\" && char === '\"')) state = \"code\";\n continue;\n }\n if (char === \"/\" && next === \"/\") { output += \" \"; index += 1; state = \"line\"; continue; }\n if (char === \"/\" && next === \"*\") { output += \" \"; index += 1; state = \"block\"; continue; }\n if (char === \"#\") { output += \" \"; state = \"line\"; continue; }\n if (char === \"'\") state = \"single\";\n else if (char === '\"') state = \"double\";\n output += char;\n }\n return output;\n}\n\nfunction braceDelta(line: string): number {\n let delta = 0;\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < line.length; index += 1) {\n const char = line[index];\n if (quote) {\n if (char === \"\\\\\") index += 1;\n else if (char === quote) quote = undefined;\n } else if (char === \"'\" || char === '\"') quote = char;\n else if (char === \"{\") delta += 1;\n else if (char === \"}\") delta -= 1;\n }\n return delta;\n}\n\nexport function parseProtoFallback(input: ParseSourceInput): AstParseResult {\n const startedAt = performance.now();\n const base = baseResult(input, \"proto\");\n const locator = locate(input.source);\n const cleaned = stripComments(input.source);\n const lines = cleaned.split(/\\n/);\n const originalLines = input.source.split(/\\n/);\n const symbols: AstSymbol[] = [];\n const imports: AstImport[] = [];\n const diagnostics: AstDiagnostic[] = [{ code: \"grammar_unavailable\", severity: \"info\", message: \"Proto uses the deterministic structural parser; semantic type resolution is not claimed\" }];\n const scope: Array<{ name: string; depth: number; symbolIndex: number }> = [];\n let depth = 0;\n let packageName = \"\";\n let negativeDepth = false;\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex] ?? \"\";\n const original = originalLines[lineIndex] ?? \"\";\n const start = locator.lineStart(lineIndex);\n const end = start + original.length;\n const packageMatch = /^\\s*package\\s+([A-Za-z_][\\w.]*)\\s*;/.exec(line);\n if (packageMatch?.[1]) {\n packageName = packageMatch[1];\n imports.push(factImport(base, \"package\", packageName, [], locator.span(start, end)));\n }\n const importMatch = /^\\s*import\\s+(?:public\\s+|weak\\s+)?[\"']([^\"']+)[\"']\\s*;/.exec(line);\n if (importMatch?.[1]) imports.push(factImport(base, \"import\", importMatch[1], [], locator.span(start, end)));\n const declaration = /^\\s*(message|enum|service|oneof)\\s+([A-Za-z_][\\w]*)\\b/.exec(line);\n if (declaration?.[1] && declaration[2]) {\n const kind = declaration[1] === \"message\" || declaration[1] === \"oneof\" ? \"message\" : declaration[1] as \"enum\" | \"service\";\n const names = [packageName, ...scope.map((entry) => entry.name), declaration[2]].filter(Boolean);\n const symbol = factSymbol(base, kind, declaration[2], names.join(\".\"), original, `proto_${declaration[1]}`, locator.span(start, end));\n symbols.push(symbol);\n if (line.includes(\"{\")) scope.push({ name: declaration[2], depth, symbolIndex: symbols.length - 1 });\n }\n const rpc = /^\\s*rpc\\s+([A-Za-z_][\\w]*)\\s*\\(/.exec(line);\n if (rpc?.[1]) {\n const names = [packageName, ...scope.map((entry) => entry.name), rpc[1]].filter(Boolean);\n symbols.push(factSymbol(base, \"rpc\", rpc[1], names.join(\".\"), original, \"proto_rpc\", locator.span(start, end)));\n }\n depth += braceDelta(line);\n if (depth < 0) { negativeDepth = true; depth = 0; }\n while (scope.length > 0 && depth <= (scope.at(-1)?.depth ?? -1)) {\n const closed = scope.pop();\n if (!closed) continue;\n const existing = symbols[closed.symbolIndex];\n if (existing) existing.span = { ...existing.span, ...{ endByte: locator.span(start, end).endByte, endLine: lineIndex + 1, endColumn: Buffer.byteLength(original, \"utf8\") } };\n }\n }\n const broken = negativeDepth || depth !== 0;\n if (broken) diagnostics.push({ code: \"parse_error\", severity: \"warning\", message: \"unbalanced Proto braces; extracted facts are partial\" });\n const parseMs = performance.now() - startedAt;\n const errorBytes = broken ? Math.min(base.sourceBytes, Math.max(1, Math.abs(depth))) : 0;\n return {\n schemaVersion: base.schemaVersion, path: base.path, language: base.language, sourceSha256: base.sourceSha256, parserRuntime: base.parserRuntime, grammar: base.grammar,\n status: broken ? \"partial\" : \"parsed\",\n rootType: \"proto_file\",\n symbols,\n imports,\n calls: [],\n diagnostics,\n coverage: { sourceBytes: base.sourceBytes, parsedBytes: base.sourceBytes - errorBytes, errorBytes, errorByteRatio: base.sourceBytes === 0 ? 0 : errorBytes / base.sourceBytes, errorNodes: broken ? 1 : 0, missingNodes: 0, parseMs },\n };\n}\n\ntype BalancedCall = { name: string; start: number; end: number; text: string; closed: boolean };\n\nfunction balancedCallArgumentCount(text: string): number | undefined {\n const open = text.indexOf(\"(\");\n const close = text.lastIndexOf(\")\");\n if (open < 0 || close < open) return undefined;\n const body = text.slice(open + 1, close).trim();\n if (!body) return 0;\n let count = 1;\n let depth = 0;\n let quote: \"'\" | '\"' | undefined;\n for (let index = 0; index < body.length; index += 1) {\n const character = body[index];\n if (quote) {\n if (character === \"\\\\\") index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === \"'\" || character === '\"') quote = character;\n else if (\"([{<\".includes(character ?? \"\")) depth += 1;\n else if (\")]}>\".includes(character ?? \"\")) depth = Math.max(0, depth - 1);\n else if (character === \",\" && depth === 0) count += 1;\n }\n return count;\n}\n\nfunction balancedCalls(source: string): BalancedCall[] {\n const cleaned = stripComments(source);\n const calls: BalancedCall[] = [];\n const pattern = /\\b([A-Za-z_][\\w.]*)\\s*\\(/g;\n for (let match = pattern.exec(cleaned); match; match = pattern.exec(cleaned)) {\n const name = match[1];\n if (!name) continue;\n const open = cleaned.indexOf(\"(\", match.index + name.length);\n let depth = 0;\n let quote: \"'\" | '\"' | undefined;\n let end = open + 1;\n let closed = false;\n for (let index = open; index < cleaned.length; index += 1) {\n const char = cleaned[index];\n if (quote) {\n if (char === \"\\\\\") index += 1;\n else if (char === quote) quote = undefined;\n } else if (char === \"'\" || char === '\"') quote = char;\n else if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) { end = index + 1; closed = true; break; }\n }\n }\n calls.push({ name, start: match.index, end, text: source.slice(match.index, end), closed });\n if (closed) pattern.lastIndex = end;\n }\n return calls;\n}\n\nexport function parseStarlarkFallback(input: ParseSourceInput): AstParseResult {\n const startedAt = performance.now();\n const base = baseResult(input, \"starlark\");\n const locator = locate(input.source);\n const symbols: AstSymbol[] = [];\n const imports: AstImport[] = [];\n const calls: AstCallCandidate[] = [];\n const diagnostics: AstDiagnostic[] = [{ code: \"grammar_unavailable\", severity: \"info\", message: \"Bazel/Starlark uses the deterministic structural parser; macro expansion is recorded as unresolved\" }];\n const cleaned = stripComments(input.source);\n // Horizontal whitespace only: `\\s` also consumes preceding newlines and\n // would make a declaration's source span begin on an earlier blank line.\n const definitionPattern = /^[\\t ]*def[\\t ]+([A-Za-z_][\\w]*)[\\t ]*\\([^\\n]*/gm;\n for (let match = definitionPattern.exec(cleaned); match; match = definitionPattern.exec(cleaned)) {\n const name = match[1];\n if (!name) continue;\n const end = cleaned.indexOf(\"\\n\", match.index);\n const finalEnd = end === -1 ? cleaned.length : end;\n symbols.push(factSymbol(base, \"function\", name, name, input.source.slice(match.index, finalEnd), \"starlark_function\", locator.span(match.index, finalEnd)));\n }\n let unclosed = 0;\n for (const call of balancedCalls(input.source)) {\n if (!call.closed) unclosed += 1;\n const callSpan = locator.span(call.start, call.end);\n const argumentCount = call.closed ? balancedCallArgumentCount(call.text) : undefined;\n calls.push({\n factId: `call_${sha256(`${base.sourceSha256}\\0${base.path}\\0${call.name}\\0${callSpan.startByte}`).slice(0, 24)}`,\n path: base.path,\n language: \"starlark\",\n callee: call.name,\n ...(argumentCount === undefined ? {} : { argumentCount }),\n span: callSpan,\n confidence: \"low\",\n resolution: \"unresolved\",\n provenance: \"structural_fallback\",\n });\n const strings = [...call.text.matchAll(/[\"']([^\"']+)[\"']/g)].map((match) => match[1]).filter((item): item is string => Boolean(item));\n if (call.name === \"load\" && strings[0]) {\n imports.push(factImport(base, \"load\", strings[0], strings.slice(1), callSpan));\n continue;\n }\n const targetName = /\\bname\\s*=\\s*[\"']([^\"']+)[\"']/.exec(call.text)?.[1];\n if (targetName) {\n const packagePath = base.path.replace(/(?:^|\\/)(?:BUILD(?:\\.bazel)?|[^/]+\\.bzl)$/, \"\").replace(/^\\//, \"\");\n const label = `//${packagePath}${packagePath ? \":\" : \"\"}${targetName}`;\n symbols.push(factSymbol(base, \"target\", targetName, label, `${call.name}(name = ${JSON.stringify(targetName)})`, `bazel_${call.name}`, callSpan));\n }\n }\n if (unclosed > 0) diagnostics.push({ code: \"parse_error\", severity: \"warning\", message: `${unclosed} unclosed Starlark call expression(s)` });\n const parseMs = performance.now() - startedAt;\n const errorBytes = unclosed > 0 ? Math.min(base.sourceBytes, unclosed) : 0;\n return {\n schemaVersion: base.schemaVersion, path: base.path, language: base.language, sourceSha256: base.sourceSha256, parserRuntime: base.parserRuntime, grammar: base.grammar,\n status: unclosed > 0 ? \"partial\" : \"parsed\",\n rootType: \"starlark_file\",\n symbols,\n imports,\n calls,\n diagnostics,\n coverage: { sourceBytes: base.sourceBytes, parsedBytes: base.sourceBytes - errorBytes, errorBytes, errorByteRatio: base.sourceBytes === 0 ? 0 : errorBytes / base.sourceBytes, errorNodes: unclosed, missingNodes: 0, parseMs },\n };\n}\n\nexport function parseStructuralFallback(input: ParseSourceInput, language: SourceLanguage): AstParseResult | undefined {\n if (language === \"proto\") return parseProtoFallback({ ...input, language });\n if (language === \"starlark\") return parseStarlarkFallback({ ...input, language });\n return undefined;\n}\n","import path from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { detectLanguage } from \"@scriptonia/brain-census\";\nimport type { SourceLanguage } from \"@scriptonia/brain-census\";\nimport { normalizeRepoPath, sha256 } from \"@scriptonia/core\";\nimport { Node, Parser } from \"web-tree-sitter\";\nimport { GrammarLoadError, loadGrammar } from \"./grammar-registry\";\nimport { assertAstQueryCompatible } from \"./query-assets\";\nimport { DEFAULT_AST_FILE_TIMEOUT_MS } from \"./types\";\nimport type {\n AstCallCandidate,\n AstCoverage,\n AstDiagnostic,\n AstImport,\n AstParseResult,\n AstSymbol,\n AstSymbolKind,\n DartWidgetKind,\n ParseSourceInput,\n SourceSpan,\n} from \"./types\";\n\nconst SYMBOL_TYPES = new Map<string, AstSymbolKind>([\n [\"class_specifier\", \"class\"], [\"struct_specifier\", \"struct\"], [\"enum_specifier\", \"enum\"], [\"namespace_definition\", \"namespace\"],\n [\"function_definition\", \"function\"], [\"type_definition\", \"type\"], [\"alias_declaration\", \"type\"], [\"type_alias_declaration\", \"type\"],\n [\"class_declaration\", \"class\"], [\"interface_declaration\", \"interface\"], [\"enum_declaration\", \"enum\"],\n [\"annotation_type_declaration\", \"interface\"], [\"record_declaration\", \"struct\"], [\"method_declaration\", \"method\"],\n [\"constructor_declaration\", \"method\"], [\"function_declaration\", \"function\"], [\"generator_function_declaration\", \"function\"],\n [\"class_definition\", \"class\"], [\"function_definition\", \"function\"],\n [\"function_item\", \"function\"], [\"struct_item\", \"struct\"], [\"enum_item\", \"enum\"], [\"trait_item\", \"trait\"],\n [\"mod_item\", \"module\"], [\"type_item\", \"type\"], [\"const_item\", \"constant\"], [\"static_item\", \"constant\"],\n [\"method_definition\", \"method\"], [\"abstract_method_signature\", \"method\"], [\"function_signature\", \"function\"],\n [\"method_signature\", \"method\"], [\"getter_signature\", \"method\"], [\"setter_signature\", \"method\"],\n [\"object_declaration\", \"class\"], [\"protocol_declaration\", \"interface\"], [\"actor_declaration\", \"class\"],\n [\"function_declaration\", \"function\"], [\"function_definition\", \"function\"], [\"method_definition\", \"method\"],\n]);\n\nconst IMPORT_TYPES = new Set([\n \"preproc_include\", \"import_declaration\", \"import_statement\", \"import_from_statement\", \"export_statement\", \"use_declaration\",\n \"package_clause\", \"package_declaration\", \"library_import\", \"part_directive\", \"import_or_export\",\n]);\nconst CALL_TYPES = new Set([\n \"call_expression\", \"function_call\", \"method_invocation\", \"object_creation_expression\", \"method_reference\", \"command\", \"command_substitution\",\n]);\nconst IDENTIFIER_TYPES = new Set([\n \"identifier\", \"field_identifier\", \"type_identifier\", \"property_identifier\", \"simple_identifier\", \"operator_name\",\n \"constant\", \"destructor_name\",\n]);\nconst SCOPE_KINDS = new Set<AstSymbolKind>([\"class\", \"interface\", \"module\", \"namespace\", \"service\", \"struct\", \"trait\"]);\nconst DECLARATION_WRAPPER_TYPES = new Set([\"ambient_declaration\", \"decorated_definition\", \"export_statement\"]);\nconst JAVASCRIPT_FAMILY = new Set<SourceLanguage>([\"javascript\", \"typescript\"]);\nconst DART_WIDGET_BASES = new Map<string, DartWidgetKind>([\n [\"ConsumerWidget\", \"consumer\"],\n [\"StatefulWidget\", \"stateful\"],\n [\"StatelessWidget\", \"stateless\"],\n]);\nconst MAX_SOURCE_BYTES = 32 * 1024 * 1024;\nconst MAX_FACTS_PER_KIND = 50_000;\n\nfunction ancestor(node: Node, predicate: (candidate: Node) => boolean): Node | undefined {\n for (let candidate = node.parent; candidate; candidate = candidate.parent) {\n if (predicate(candidate)) return candidate;\n }\n return undefined;\n}\n\nfunction symbolKind(node: Node, language: SourceLanguage): AstSymbolKind | undefined {\n if (language === \"kotlin\" && node.type === \"class_declaration\" && /^interface\\b/.test(node.text.trimStart())) {\n return \"interface\";\n }\n // C and C++ do not permit named nested function definitions. Macro-heavy\n // bodies can recover into exactly that shape; indexing the recovered macro\n // invocation creates fictitious symbols with multi-kilobyte spans.\n if ((language === \"c\" || language === \"cpp\") && node.type === \"function_definition\"\n && ancestor(node, (candidate) => candidate.type === \"function_definition\")) return undefined;\n if ((language === \"c\" || language === \"cpp\") && node.type === \"function_definition\"\n && !node.childForFieldName(\"type\")) {\n const declarator = node.childForFieldName(\"declarator\");\n const name = declarator ? innermostDeclaratorIdentifier(declarator)?.text.trim() : undefined;\n const isClassMember = Boolean(ancestor(node, (candidate) => candidate.type === \"class_specifier\" || candidate.type === \"struct_specifier\"));\n // Declaration macros such as TEST(Name, Case) are accepted by the C++\n // grammar as untyped free functions. Keep the valid syntax tree and its\n // body facts, but do not promote the macro token to a fictitious symbol.\n // Constructors remain eligible: they are class members or qualified.\n if (name && /^[A-Z][A-Z0-9_]{2,}$/.test(name) && !isClassMember && !declarator?.text.includes(\"::\")) return undefined;\n }\n const direct = SYMBOL_TYPES.get(node.type);\n if (direct) return direct;\n if ((language === \"c\" || language === \"cpp\") && (node.type === \"declaration\" || node.type === \"field_declaration\")) {\n const callable = callableDeclarator(node);\n if (!callable) return undefined;\n return node.type === \"field_declaration\"\n || Boolean(ancestor(node, (candidate) => candidate.type === \"class_specifier\" || candidate.type === \"struct_specifier\"))\n ? \"method\"\n : \"function\";\n }\n if (JAVASCRIPT_FAMILY.has(language) && node.type === \"variable_declarator\") {\n const lexical = ancestor(node, (candidate) => candidate.type === \"lexical_declaration\");\n if (lexical?.parent?.type === \"export_statement\" && /^const\\b/.test(lexical.text.trimStart())) return \"constant\";\n }\n return undefined;\n}\n\n/**\n * Follow only Tree-sitter's declarator fields. Searching every descendant also\n * enters initializers and macro arguments, which can turn a call or lambda in\n * an ordinary variable declaration into a fictitious C++ function symbol.\n */\nfunction callableDeclarator(node: Node): Node | undefined {\n let cursor = node.childForFieldName(\"declarator\") ?? undefined;\n const visited = new Set<number>();\n while (cursor && !visited.has(cursor.id)) {\n visited.add(cursor.id);\n if (cursor.type === \"function_declarator\") return cursor;\n cursor = cursor.childForFieldName(\"declarator\") ?? undefined;\n }\n return undefined;\n}\n\nfunction spanFor(node: Node): SourceSpan {\n return {\n startByte: node.startIndex,\n endByte: node.endIndex,\n startLine: node.startPosition.row + 1,\n startColumn: node.startPosition.column,\n endLine: node.endPosition.row + 1,\n endColumn: node.endPosition.column,\n };\n}\n\nfunction firstNamedDescendant(node: Node, predicate: (candidate: Node) => boolean): Node | undefined {\n const stack = [...node.namedChildren].filter((child): child is Node => child !== null).reverse();\n while (stack.length > 0) {\n const candidate = stack.pop();\n if (!candidate) continue;\n if (predicate(candidate)) return candidate;\n for (const child of [...candidate.namedChildren].reverse()) if (child) stack.push(child);\n }\n return undefined;\n}\n\nfunction firstDescendantField(node: Node, fieldName: string): Node | undefined {\n const stack = [...node.namedChildren].filter((child): child is Node => child !== null).reverse();\n while (stack.length > 0) {\n const candidate = stack.pop();\n if (!candidate) continue;\n const field = candidate.childForFieldName(fieldName);\n if (field?.text.trim()) return field;\n for (const child of [...candidate.namedChildren].reverse()) if (child) stack.push(child);\n }\n return undefined;\n}\n\nfunction symbolName(node: Node): string | undefined {\n const direct = node.childForFieldName(\"name\");\n if (direct?.text.trim()) return (innermostDeclaratorIdentifier(direct)?.text ?? direct.text).trim();\n if (node.type === \"namespace_definition\") return undefined;\n const declarator = node.childForFieldName(\"declarator\");\n if (declarator) {\n const identifier = innermostDeclaratorIdentifier(declarator);\n if (identifier?.text.trim()) return identifier.text.trim();\n }\n // Some grammars wrap the callable signature (Dart method_signature is the\n // important case), so prefer a descendant's explicit `name` field over its\n // leading return-type identifier.\n const descendantName = firstDescendantField(node, \"name\");\n if (descendantName?.text.trim()) return descendantName.text.trim();\n const identifier = firstNamedDescendant(node, (candidate) => IDENTIFIER_TYPES.has(candidate.type));\n if (identifier?.text.trim()) return identifier.text.trim();\n const head = node.text.slice(0, 500).replace(/\\s+/g, \" \");\n return /\\b(?:actor|class|def|enum|fn|func|fun|function|interface|namespace|object|protocol|record|struct|trait|type)\\s+([A-Za-z_$][\\w$]*)/.exec(head)?.[1]\n ?? /\\b([A-Za-z_$][\\w$]*)\\s*\\(/.exec(head)?.[1];\n}\n\n/** Resolves `Class::method(args)` to the innermost declared name `method`. */\nfunction innermostDeclaratorIdentifier(node: Node): Node | undefined {\n let cursor: Node | undefined = node;\n const visited = new Set<number>();\n while (cursor && !visited.has(cursor.id)) {\n visited.add(cursor.id);\n if (IDENTIFIER_TYPES.has(cursor.type)) return cursor;\n const explicitName = cursor.childForFieldName(\"name\");\n if (explicitName) {\n const nested = innermostDeclaratorIdentifier(explicitName);\n if (nested) return nested;\n }\n cursor = cursor.childForFieldName(\"declarator\") ?? undefined;\n }\n return undefined;\n}\n\nfunction signatureFor(node: Node): string {\n const body = node.childForFieldName(\"body\");\n const text = body ? node.text.slice(0, Math.max(0, body.startIndex - node.startIndex)) : node.text;\n const normalized = text.replace(/\\s+/g, \" \").trim();\n const exported = ancestor(node, (candidate) => candidate.type === \"export_statement\");\n return `${exported && !/^export\\b/.test(normalized) ? \"export \" : \"\"}${normalized}`.slice(0, 1_000);\n}\n\nfunction declarationAnchor(node: Node): Node {\n let anchor = node;\n while (anchor.parent && DECLARATION_WRAPPER_TYPES.has(anchor.parent.type)) anchor = anchor.parent;\n return anchor;\n}\n\nfunction isDocumentationComment(node: Node, language: SourceLanguage): boolean {\n if (language === \"dart\") return node.type === \"documentation_comment\";\n if (language === \"java\") return node.type === \"block_comment\" && node.text.trimStart().startsWith(\"/**\");\n if (!JAVASCRIPT_FAMILY.has(language) || node.type !== \"comment\") return false;\n const text = node.text.trimStart();\n return text.startsWith(\"/**\") || text.startsWith(\"///\");\n}\n\n/**\n * Reads only adjacent comment syntax nodes. Row adjacency rejects detached\n * module/file comments, and ascending through declaration wrappers associates\n * TSDoc with `export class/function` rather than with the wrapper itself.\n */\nfunction leadingDocComment(node: Node, language: SourceLanguage): string | undefined {\n let cursor = declarationAnchor(node);\n const comments: string[] = [];\n for (let sibling = cursor.previousNamedSibling; sibling; sibling = sibling.previousNamedSibling) {\n if (!isDocumentationComment(sibling, language)) break;\n if (cursor.startPosition.row - sibling.endPosition.row > 1) break;\n comments.unshift(sibling.text);\n cursor = sibling;\n }\n const text = comments.join(\"\\n\").trim();\n return text.length > 0 ? text : undefined;\n}\n\nfunction dartClassMetadata(node: Node, language: SourceLanguage, kind: AstSymbolKind): Pick<AstSymbol, \"superclass\" | \"widget\" | \"widgetKind\"> {\n if (language !== \"dart\" || kind !== \"class\" || node.type !== \"class_definition\") return {};\n const superclassNode = node.childForFieldName(\"superclass\");\n const superclassParts = superclassNode?.namedChildren\n .filter((child): child is Node => child !== null && child.type === \"type_identifier\")\n .map((child) => child.text.trim())\n .filter(Boolean) ?? [];\n const superclass = superclassParts.length > 0 ? superclassParts.join(\".\") : undefined;\n const unqualifiedSuperclass = superclassParts.at(-1);\n const widgetKind = unqualifiedSuperclass ? DART_WIDGET_BASES.get(unqualifiedSuperclass) : undefined;\n return {\n ...(superclass ? { superclass } : {}),\n widget: widgetKind !== undefined,\n ...(widgetKind ? { widgetKind } : {}),\n };\n}\n\nfunction javaClassMetadata(node: Node, language: SourceLanguage, kind: AstSymbolKind): Pick<AstSymbol, \"superclass\"> {\n if (language !== \"java\" || kind !== \"class\" || node.type !== \"class_declaration\") return {};\n const superclassNode = node.childForFieldName(\"superclass\");\n const superclass = superclassNode?.firstNamedChild?.text.trim();\n return superclass ? { superclass } : {};\n}\n\n/**\n * Java interface methods are public even when the source omits `public`.\n * Inspect only the direct syntax parent so a package-private method in a class\n * nested inside an interface is not accidentally promoted to public API.\n */\nfunction javaSymbolVisibility(node: Node, language: SourceLanguage, kind: AstSymbolKind): Pick<AstSymbol, \"exported\"> {\n if (language !== \"java\") return {};\n const modifiers = node.namedChildren.find((child) => child?.type === \"modifiers\")?.text ?? \"\";\n if (/(?:^|\\s)public(?:\\s|$)/.test(modifiers)) return { exported: true };\n if (/(?:^|\\s)(?:private|protected)(?:\\s|$)/.test(modifiers)) return { exported: false };\n if (kind !== \"method\" || node.type !== \"method_declaration\") return {};\n const body = node.parent;\n const declaration = body?.parent;\n if (body?.type !== \"interface_body\" || declaration?.type !== \"interface_declaration\") return {};\n return { exported: true };\n}\n\nfunction javaPackageName(root: Node, language: SourceLanguage): string | undefined {\n if (language !== \"java\") return undefined;\n const declaration = root.namedChildren.find((child) => child?.type === \"package_declaration\");\n const value = declaration?.firstNamedChild?.text.trim();\n return value || undefined;\n}\n\nfunction importFact(node: Node, language: SourceLanguage, filePath: string, sourceHash: string): AstImport | undefined {\n const text = node.text.trim();\n let kind: AstImport[\"kind\"] = \"import\";\n let specifier: string | undefined;\n let isStatic = false;\n let wildcard = false;\n if (node.type === \"preproc_include\" || /^#\\s*include\\b/.test(text)) {\n kind = \"include\";\n specifier = /[<\"]([^>\"]+)[>\"]/.exec(text)?.[1];\n } else if (/^export\\b/.test(text)) {\n kind = \"export\";\n specifier = /\\bfrom\\s*[\"']([^\"']+)[\"']/.exec(text)?.[1]\n ?? /^export\\s*\\*\\s*[\"']([^\"']+)[\"']/.exec(text)?.[1];\n } else if (/^use\\b/.test(text)) {\n kind = \"use\";\n specifier = text.replace(/^use\\s+/, \"\").replace(/;$/, \"\").trim();\n } else if (/^package\\b/.test(text)) {\n kind = \"package\";\n specifier = text.replace(/^package\\s+/, \"\").replace(/[;\\s]+$/, \"\").trim();\n } else if (language === \"java\" && node.type === \"import_declaration\") {\n isStatic = /^import\\s+static\\b/.test(text);\n specifier = text.replace(/^import\\s+(?:static\\s+)?/, \"\").replace(/[;\\s]+$/, \"\").trim();\n wildcard = specifier.endsWith(\".*\");\n } else {\n specifier = /[\"']([^\"']+)[\"']/.exec(text)?.[1]\n ?? /^from\\s+([^\\s]+)\\s+import\\b/.exec(text)?.[1]\n ?? /^import\\s+([^\\s;,]+)/.exec(text)?.[1];\n }\n if (!specifier) return undefined;\n const importedNames = text.match(/[A-Za-z_$][\\w$]*/g)?.filter((name) => ![\"as\", \"export\", \"from\", \"import\", \"include\", \"package\", \"part\", \"show\", \"static\", \"use\"].includes(name)) ?? [];\n const span = spanFor(node);\n return {\n factId: `import_${sha256(`${sourceHash}\\0${filePath}\\0${kind}\\0${specifier}\\0${span.startByte}`).slice(0, 24)}`,\n path: filePath,\n language,\n kind,\n specifier,\n importedNames: [...new Set(importedNames)].slice(0, 100),\n ...(isStatic ? { isStatic: true } : {}),\n ...(wildcard ? { wildcard: true } : {}),\n span,\n confidence: \"high\",\n provenance: \"tree_sitter\",\n };\n}\n\n/** Capture runtime module loads as import facts, not ordinary call candidates. */\nfunction dynamicImportFact(node: Node, language: SourceLanguage, filePath: string, sourceHash: string): AstImport | undefined {\n if (!JAVASCRIPT_FAMILY.has(language) || node.type !== \"call_expression\") return undefined;\n const calleeNode = node.childForFieldName(\"function\") ?? node.firstNamedChild;\n const callee = calleeNode?.text.trim();\n if (callee !== \"import\" && callee !== \"require\") return undefined;\n const argumentsNode = node.childForFieldName(\"arguments\")\n ?? node.namedChildren.find((child) => child?.type === \"arguments\")\n ?? undefined;\n const expression = argumentsNode?.namedChildren[0]?.text.trim();\n if (!expression) return undefined;\n const quoted = /^(?:'([^']+)'|\"([^\"]+)\"|`([^`$]+)`)$/s.exec(expression);\n const specifier = (quoted?.[1] ?? quoted?.[2] ?? quoted?.[3] ?? expression).slice(0, 1_000);\n if (!specifier) return undefined;\n const kind: AstImport[\"kind\"] = callee === \"import\" ? \"dynamic_import\" : \"require\";\n const span = spanFor(node);\n return {\n factId: `import_${sha256(`${sourceHash}\\0${filePath}\\0${kind}\\0${specifier}\\0${span.startByte}`).slice(0, 24)}`,\n path: filePath,\n language,\n kind,\n specifier,\n importedNames: [],\n span,\n confidence: quoted ? \"high\" : \"medium\",\n provenance: \"tree_sitter\",\n };\n}\n\nfunction callFact(node: Node, language: SourceLanguage, filePath: string, sourceHash: string): AstCallCandidate | undefined {\n const calleeNode = node.type === \"object_creation_expression\"\n ? node.childForFieldName(\"type\") ?? node.firstNamedChild\n : node.childForFieldName(\"function\") ?? node.childForFieldName(\"name\") ?? node.firstNamedChild;\n const callee = (node.type === \"method_reference\" ? node.text : calleeNode?.text)?.replace(/\\s+/g, \" \").trim();\n if (!callee || callee.length > 300) return undefined;\n const argumentsNode = node.childForFieldName(\"arguments\")\n ?? node.namedChildren.find((child) => child?.type === \"arguments\")\n ?? undefined;\n const span = spanFor(node);\n return {\n factId: `call_${sha256(`${sourceHash}\\0${filePath}\\0${callee}\\0${span.startByte}`).slice(0, 24)}`,\n path: filePath,\n language,\n callee,\n ...(argumentsNode ? { argumentCount: argumentsNode.namedChildCount } : {}),\n span,\n confidence: \"low\",\n resolution: \"unresolved\",\n provenance: \"tree_sitter\",\n };\n}\n\nfunction mergeErrorRanges(ranges: Array<[number, number]>): number {\n ranges.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n let bytes = 0;\n let start = -1;\n let end = -1;\n for (const [nextStart, nextEnd] of ranges) {\n if (nextStart > end) {\n if (end >= start) bytes += end - start;\n start = nextStart;\n end = nextEnd;\n } else {\n end = Math.max(end, nextEnd);\n }\n }\n if (end >= start) bytes += end - start;\n return bytes;\n}\n\ntype SyntaxRecoveryScore = {\n errorBytes: number;\n errorNodes: number;\n missingNodes: number;\n};\n\n/**\n * Score only Tree-sitter recovery, before extracting any semantic facts. This\n * lets the C/C++ parser compare the original source with its macro-normalized\n * recovery candidate without allowing normalization to make a valid parse\n * worse. Error bytes are the primary signal because one recovered ERROR node\n * can otherwise cover nearly an entire file.\n */\nfunction syntaxRecoveryScore(root: Node): SyntaxRecoveryScore {\n const errorRanges: Array<[number, number]> = [];\n let errorNodes = 0;\n let missingNodes = 0;\n const stack = [root];\n while (stack.length > 0) {\n const node = stack.pop();\n if (!node) continue;\n if (node.isError) {\n errorNodes += 1;\n errorRanges.push([node.startIndex, node.endIndex]);\n }\n if (node.isMissing) missingNodes += 1;\n for (const child of node.namedChildren) if (child) stack.push(child);\n }\n return { errorBytes: mergeErrorRanges(errorRanges), errorNodes, missingNodes };\n}\n\nfunction hasBetterSyntaxRecovery(candidate: SyntaxRecoveryScore, baseline: SyntaxRecoveryScore): boolean {\n if (candidate.errorBytes !== baseline.errorBytes) return candidate.errorBytes < baseline.errorBytes;\n if (candidate.missingNodes !== baseline.missingNodes) return candidate.missingNodes < baseline.missingNodes;\n return candidate.errorNodes < baseline.errorNodes;\n}\n\ntype CppParserNormalization = {\n source: string;\n maskedRanges: Array<[number, number]>;\n maskedDefinitions: number;\n maskedInvocations: number;\n maskedSuffixes: number;\n};\n\n/**\n * Tree-sitter cannot expand C/C++ preprocessor macros. Function-like macro\n * definitions inside a class and declaration-generating macro invocations can\n * make recovery wrap the rest of a valid namespace in one ERROR node. This\n * creates a recovery candidate by masking those constructs with ASCII spaces,\n * preserving every newline and UTF-8 byte offset so citations still point at\n * the original source. The caller retains this candidate only when its syntax\n * recovery is strictly better than parsing the unmodified source. Includes\n * and conditional compilation directives remain visible.\n */\nfunction normalizeCppParserSource(source: string): CppParserNormalization {\n const lines = source.split(\"\\n\");\n const normalized: string[] = [];\n const maskedRanges: Array<[number, number]> = [];\n let byteOffset = 0;\n let defineContinuation = false;\n let invocationDepth = 0;\n let maskedDefinitions = 0;\n let maskedInvocations = 0;\n let maskedSuffixes = 0;\n const maskLine = (line: string): string => \" \".repeat(line.length);\n const parenDelta = (line: string): number => {\n let delta = 0;\n for (const character of line) {\n if (character === \"(\") delta += 1;\n else if (character === \")\") delta -= 1;\n }\n return delta;\n };\n for (const line of lines) {\n const lineBytes = Buffer.byteLength(line, \"utf8\");\n const trimmed = line.trimStart();\n if (!defineContinuation && /^#\\s*define\\b/.test(trimmed)) defineContinuation = true;\n if (defineContinuation) {\n normalized.push(maskLine(line));\n maskedRanges.push([byteOffset, byteOffset + lineBytes]);\n maskedDefinitions += 1;\n defineContinuation = line.trimEnd().endsWith(\"\\\\\");\n byteOffset += lineBytes + 1;\n continue;\n }\n\n const startsInvocation = invocationDepth === 0 && /^[A-Z][A-Z0-9_]{2,}\\s*\\(/.test(trimmed);\n if (startsInvocation || invocationDepth > 0) {\n invocationDepth += parenDelta(line);\n normalized.push(maskLine(line));\n maskedRanges.push([byteOffset, byteOffset + lineBytes]);\n maskedInvocations += 1;\n if (invocationDepth <= 0) invocationDepth = 0;\n byteOffset += lineBytes + 1;\n continue;\n }\n\n let rewritten = line;\n const suffix = /\\b([A-Z][A-Z0-9_]{2,})(?=\\s*;\\s*(?:\\/\\/.*)?$)/.exec(line);\n if (suffix?.index !== undefined) {\n const before = line.slice(0, suffix.index);\n const closingParen = before.lastIndexOf(\")\");\n const between = closingParen >= 0 ? before.slice(closingParen + 1) : \"\";\n if (closingParen >= 0 && /^\\s*(?:(?:const|final|noexcept|override)\\s*)*$/.test(between)) {\n const token = suffix[1]!;\n const tokenIndex = suffix.index;\n rewritten = `${line.slice(0, tokenIndex)}${\" \".repeat(token.length)}${line.slice(tokenIndex + token.length)}`;\n const tokenByte = byteOffset + Buffer.byteLength(line.slice(0, tokenIndex), \"utf8\");\n maskedRanges.push([tokenByte, tokenByte + token.length]);\n maskedSuffixes += 1;\n }\n }\n normalized.push(rewritten);\n byteOffset += lineBytes + 1;\n }\n return { source: normalized.join(\"\\n\"), maskedRanges, maskedDefinitions, maskedInvocations, maskedSuffixes };\n}\n\n/** Find the lexical closing brace for a recovered scope node. */\nfunction lexicalScopeEnd(node: Node, language: SourceLanguage, source: string): number {\n if (language !== \"c\" && language !== \"cpp\") return node.endIndex;\n const body = node.childForFieldName(\"body\");\n if (!body) return node.endIndex;\n const bytes = Buffer.from(source, \"utf8\");\n let opening = body.startIndex;\n while (opening < Math.min(bytes.length, node.endIndex) && bytes[opening] !== 0x7b) opening += 1;\n if (opening >= Math.min(bytes.length, node.endIndex)) return node.endIndex;\n let depth = 0;\n let quote = 0;\n let lineComment = false;\n let blockComment = false;\n for (let index = opening; index < bytes.length; index += 1) {\n const current = bytes[index]!;\n const next = bytes[index + 1];\n if (lineComment) {\n if (current === 0x0a) lineComment = false;\n continue;\n }\n if (blockComment) {\n if (current === 0x2a && next === 0x2f) { blockComment = false; index += 1; }\n continue;\n }\n if (quote !== 0) {\n if (current === 0x5c) { index += 1; continue; }\n if (current === quote) quote = 0;\n continue;\n }\n if (current === 0x2f && next === 0x2f) { lineComment = true; index += 1; continue; }\n if (current === 0x2f && next === 0x2a) { blockComment = true; index += 1; continue; }\n if (current === 0x22 || current === 0x27) { quote = current; continue; }\n if (current === 0x7b) depth += 1;\n else if (current === 0x7d) {\n depth -= 1;\n if (depth === 0) return index + 1;\n }\n }\n return node.endIndex;\n}\n\nfunction extractFacts(\n root: Node,\n language: SourceLanguage,\n filePath: string,\n sourceHash: string,\n sourceBytes: number,\n parseMs: number,\n parserSource: string,\n normalization?: CppParserNormalization,\n): {\n symbols: AstSymbol[];\n imports: AstImport[];\n calls: AstCallCandidate[];\n diagnostics: AstDiagnostic[];\n coverage: AstCoverage;\n} {\n const symbols: AstSymbol[] = [];\n const imports: AstImport[] = [];\n const calls: AstCallCandidate[] = [];\n const diagnostics: AstDiagnostic[] = [];\n // Coverage.errorBytes is the byte union of actual Tree-sitter ERROR nodes.\n // Parser normalization is an explicitly reported unsupported construct,\n // not a parse error; mixing its bytes into this metric makes a successfully\n // recovered macro definition indistinguishable from corrupted syntax.\n const errorRanges: Array<[number, number]> = [];\n let errorNodes = 0;\n let missingNodes = 0;\n const packageName = javaPackageName(root, language);\n type ActiveScope = { name: string; endByte: number };\n const stack: Array<{ node: Node; scopes: ActiveScope[] }> = [{\n node: root,\n scopes: packageName ? [{ name: packageName, endByte: Number.MAX_SAFE_INTEGER }] : [],\n }];\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current) continue;\n const { node } = current;\n const scopes = [...current.scopes];\n while (scopes.length > 0 && scopes.at(-1)!.endByte <= node.startIndex) scopes.pop();\n const scope = scopes.map((entry) => entry.name);\n if (node.isMissing) {\n missingNodes += 1;\n if (diagnostics.length < 1_000) diagnostics.push({ code: \"parse_error\", severity: \"warning\", message: `parser inserted missing ${node.type}`, span: spanFor(node) });\n }\n if (node.isError) {\n errorNodes += 1;\n errorRanges.push([node.startIndex, node.endIndex]);\n if (diagnostics.length < 1_000) diagnostics.push({ code: \"parse_error\", severity: \"warning\", message: \"Tree-sitter could not parse this source range\", span: spanFor(node) });\n }\n const recovered = node.isError || Boolean(ancestor(node, (candidate) => candidate.isError));\n const kind = recovered ? undefined : symbolKind(node, language);\n let childScopes = scopes;\n if (kind && symbols.length < MAX_FACTS_PER_KIND) {\n const name = symbolName(node);\n if (name) {\n const span = spanFor(node);\n const qualifiedName = [...scope, name].join(\".\");\n const docComment = leadingDocComment(node, language);\n const classMetadata = {\n ...dartClassMetadata(node, language, kind),\n ...javaClassMetadata(node, language, kind),\n ...javaSymbolVisibility(node, language, kind),\n };\n symbols.push({\n factId: `symbol_${sha256(`${sourceHash}\\0${filePath}\\0${kind}\\0${qualifiedName}\\0${span.startByte}`).slice(0, 24)}`,\n path: filePath,\n language,\n kind,\n name,\n qualifiedName,\n signature: signatureFor(node),\n ...(docComment ? { docComment } : {}),\n ...classMetadata,\n nodeType: node.type,\n span,\n confidence: \"high\",\n provenance: \"tree_sitter\",\n });\n if (SCOPE_KINDS.has(kind)) childScopes = [...scopes, {\n name,\n endByte: lexicalScopeEnd(node, language, parserSource),\n }];\n }\n }\n // A Java package declaration scopes symbols; it is not a dependency edge.\n // Proto package declarations remain facts because the structural resolver\n // uses them as schema namespace evidence.\n if (!recovered && IMPORT_TYPES.has(node.type) && !(language === \"java\" && node.type === \"package_declaration\") && imports.length < MAX_FACTS_PER_KIND) {\n const fact = importFact(node, language, filePath, sourceHash);\n if (fact) imports.push(fact);\n }\n if (!recovered && CALL_TYPES.has(node.type)) {\n const dynamicImport = imports.length < MAX_FACTS_PER_KIND\n ? dynamicImportFact(node, language, filePath, sourceHash)\n : undefined;\n if (dynamicImport) imports.push(dynamicImport);\n else if (calls.length < MAX_FACTS_PER_KIND) {\n const fact = callFact(node, language, filePath, sourceHash);\n if (fact) calls.push(fact);\n }\n }\n const children = node.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n if (child) stack.push({ node: child, scopes: childScopes });\n }\n }\n if (normalization && normalization.maskedRanges.length > 0) {\n diagnostics.push({\n code: \"unsupported_construct\",\n severity: \"warning\",\n message: `parser masked ${normalization.maskedDefinitions} C/C++ macro-definition lines, ${normalization.maskedInvocations} declaration-macro lines, and ${normalization.maskedSuffixes} declaration suffixes while preserving source offsets`,\n });\n }\n if (symbols.length >= MAX_FACTS_PER_KIND || imports.length >= MAX_FACTS_PER_KIND || calls.length >= MAX_FACTS_PER_KIND) {\n diagnostics.push({ code: \"unsupported_construct\", severity: \"warning\", message: `fact extraction reached the per-file cap of ${MAX_FACTS_PER_KIND}` });\n }\n const errorBytes = mergeErrorRanges(errorRanges);\n return {\n symbols,\n imports,\n calls,\n diagnostics,\n coverage: {\n sourceBytes,\n parsedBytes: Math.max(0, sourceBytes - errorBytes),\n errorBytes,\n errorByteRatio: sourceBytes === 0 ? 0 : errorBytes / sourceBytes,\n errorNodes,\n missingNodes,\n parseMs,\n },\n };\n}\n\nexport async function parseWithTreeSitter(input: ParseSourceInput): Promise<AstParseResult | undefined> {\n const filePath = normalizeRepoPath(input.path);\n const language = input.language ?? detectLanguage(filePath, input.source.slice(0, 500));\n if (!language) return undefined;\n const sourceBytes = Buffer.byteLength(input.source, \"utf8\");\n if (sourceBytes > MAX_SOURCE_BYTES) {\n const sourceHash = input.sourceSha256 ?? sha256(input.source);\n return {\n schemaVersion: 1,\n status: \"failed\",\n path: filePath,\n language,\n sourceSha256: sourceHash,\n parserRuntime: \"unavailable\",\n grammar: { id: \"unloaded\", abi: 0, sha256: \"0\".repeat(64), runtime: \"unavailable\", source: \"none\", license: \"none\" },\n rootType: \"\",\n symbols: [], imports: [], calls: [],\n diagnostics: [{ code: \"parser_failure\", severity: \"error\", message: `source exceeds the ${MAX_SOURCE_BYTES}-byte parser limit` }],\n coverage: { sourceBytes, parsedBytes: 0, errorBytes: sourceBytes, errorByteRatio: 1, errorNodes: 0, missingNodes: 0, parseMs: 0 },\n };\n }\n let loaded;\n try {\n loaded = await loadGrammar(language, filePath, { assetRoot: input.assetRoot, coreWasmPath: input.coreWasmPath });\n } catch (error) {\n if (error instanceof GrammarLoadError) throw error;\n throw new GrammarLoadError(\"grammar_unavailable\", error instanceof Error ? error.message : String(error));\n }\n if (!loaded) return undefined;\n assertAstQueryCompatible(language, filePath, loaded.language, input.assetRoot);\n const sourceHash = input.sourceSha256 ?? sha256(input.source);\n const parser = new Parser();\n parser.setLanguage(loaded.language);\n const startedAt = performance.now();\n const timeoutMs = input.timeoutMs ?? DEFAULT_AST_FILE_TIMEOUT_MS;\n let timedOut = false;\n try {\n const parseOptions = {\n progressCallback: () => {\n timedOut = performance.now() - startedAt > timeoutMs;\n return timedOut;\n },\n };\n const rawTree = parser.parse(input.source, null, parseOptions);\n const parseMs = performance.now() - startedAt;\n if (!rawTree) {\n return {\n schemaVersion: 1,\n status: \"failed\",\n path: filePath,\n language,\n sourceSha256: sourceHash,\n parserRuntime: \"web-tree-sitter\",\n grammar: loaded.provenance,\n rootType: \"\",\n symbols: [], imports: [], calls: [],\n diagnostics: [{ code: timedOut ? \"parse_timeout\" : \"parser_failure\", severity: \"error\", message: timedOut ? `Tree-sitter exceeded ${timeoutMs}ms` : \"Tree-sitter returned no syntax tree\" }],\n coverage: { sourceBytes, parsedBytes: 0, errorBytes: sourceBytes, errorByteRatio: sourceBytes === 0 ? 0 : 1, errorNodes: 0, missingNodes: 0, parseMs },\n };\n }\n const trees = [rawTree];\n try {\n let selectedTree = rawTree;\n let parserSource = input.source;\n let selectedNormalization: CppParserNormalization | undefined;\n if (language === \"c\" || language === \"cpp\") {\n const rawScore = syntaxRecoveryScore(rawTree.rootNode);\n if (rawScore.errorNodes > 0 || rawScore.missingNodes > 0) {\n const normalization = normalizeCppParserSource(input.source);\n if (normalization.maskedRanges.length > 0) {\n const normalizedTree = parser.parse(normalization.source, null, parseOptions);\n if (normalizedTree) {\n trees.push(normalizedTree);\n const normalizedScore = syntaxRecoveryScore(normalizedTree.rootNode);\n if (hasBetterSyntaxRecovery(normalizedScore, rawScore)) {\n selectedTree = normalizedTree;\n parserSource = normalization.source;\n selectedNormalization = normalization;\n }\n }\n }\n }\n }\n const root = selectedTree.rootNode;\n const totalParseMs = performance.now() - startedAt;\n const extracted = extractFacts(root, language, filePath, sourceHash, sourceBytes, totalParseMs, parserSource, selectedNormalization);\n return {\n schemaVersion: 1,\n status: extracted.coverage.errorNodes > 0 || extracted.coverage.missingNodes > 0 || extracted.diagnostics.length > 0 ? \"partial\" : \"parsed\",\n path: filePath,\n language,\n sourceSha256: sourceHash,\n parserRuntime: \"web-tree-sitter\",\n grammar: loaded.provenance,\n rootType: root.type,\n symbols: extracted.symbols,\n imports: extracted.imports,\n calls: extracted.calls,\n diagnostics: extracted.diagnostics,\n coverage: extracted.coverage,\n };\n } finally {\n for (const tree of trees) tree.delete();\n }\n } finally {\n parser.delete();\n }\n}\n","import { detectLanguage } from \"@scriptonia/brain-census\";\nimport type { SourceLanguage } from \"@scriptonia/brain-census\";\nimport { normalizeRepoPath, sha256 } from \"@scriptonia/core\";\nimport { parseStructuralFallback } from \"./fallback-parsers\";\nimport { GrammarLoadError } from \"./grammar-registry\";\nimport { parseWithTreeSitter } from \"./tree-sitter-parser\";\nimport type { AstParseResult, ParseSourceInput } from \"./types\";\n\nfunction unavailableResult(\n input: ParseSourceInput,\n language: SourceLanguage,\n status: \"unsupported\" | \"failed\",\n code: \"grammar_unavailable\" | \"grammar_integrity\" | \"parser_failure\",\n message: string,\n): AstParseResult {\n const sourceBytes = Buffer.byteLength(input.source, \"utf8\");\n return {\n schemaVersion: 1,\n status,\n path: normalizeRepoPath(input.path),\n language,\n sourceSha256: sha256(input.source),\n parserRuntime: \"unavailable\",\n grammar: { id: \"unavailable\", abi: 0, sha256: \"0\".repeat(64), runtime: \"unavailable\", source: \"none\", license: \"none\" },\n rootType: \"\",\n symbols: [],\n imports: [],\n calls: [],\n diagnostics: [{ code, severity: status === \"failed\" ? \"error\" : \"warning\", message }],\n coverage: {\n sourceBytes,\n parsedBytes: 0,\n errorBytes: status === \"failed\" ? sourceBytes : 0,\n errorByteRatio: status === \"failed\" && sourceBytes > 0 ? 1 : 0,\n errorNodes: 0,\n missingNodes: 0,\n parseMs: 0,\n },\n };\n}\n\nexport async function parseSource(input: ParseSourceInput): Promise<AstParseResult | undefined> {\n const actualSha = sha256(input.source);\n if (input.sourceSha256 && input.sourceSha256 !== actualSha) {\n throw new Error(`source hash mismatch for ${input.path}: expected ${input.sourceSha256}, received ${actualSha}`);\n }\n const normalized: ParseSourceInput = { ...input, path: normalizeRepoPath(input.path), sourceSha256: actualSha };\n const language = input.language ?? detectLanguage(normalized.path, input.source.slice(0, 500));\n if (!language) return undefined;\n const fallback = parseStructuralFallback(normalized, language);\n if (fallback) return fallback;\n try {\n const parsed = await parseWithTreeSitter({ ...normalized, language });\n return parsed ?? unavailableResult(normalized, language, \"unsupported\", \"grammar_unavailable\", `no parser runtime is registered for ${language}`);\n } catch (error) {\n if (error instanceof GrammarLoadError) {\n return unavailableResult(normalized, language, \"failed\", error.code, error.message);\n }\n return unavailableResult(normalized, language, \"failed\", \"parser_failure\", error instanceof Error ? error.message : String(error));\n }\n}\n","import type { AstParseResult, ParseSourceInput } from \"./types\";\n\nexport const AST_WORKER_PROTOCOL_VERSION = 1 as const;\n\nexport type AstWorkerRequest = {\n protocolVersion: typeof AST_WORKER_PROTOCOL_VERSION;\n type: \"parse\";\n jobId: number;\n input: ParseSourceInput;\n};\n\nexport type SerializedWorkerError = {\n name: string;\n message: string;\n stack?: string;\n code?: string;\n};\n\nexport type AstWorkerResponse = {\n protocolVersion: typeof AST_WORKER_PROTOCOL_VERSION;\n type: \"result\";\n jobId: number;\n threadId: number;\n result: AstParseResult | undefined;\n} | {\n protocolVersion: typeof AST_WORKER_PROTOCOL_VERSION;\n type: \"error\";\n jobId: number;\n threadId: number;\n error: SerializedWorkerError;\n};\n\nexport function isAstWorkerRequest(value: unknown): value is AstWorkerRequest {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Partial<AstWorkerRequest>;\n return candidate.protocolVersion === AST_WORKER_PROTOCOL_VERSION\n && candidate.type === \"parse\"\n && typeof candidate.jobId === \"number\"\n && Number.isSafeInteger(candidate.jobId)\n && candidate.jobId >= 0\n && Boolean(candidate.input)\n && typeof candidate.input === \"object\"\n && typeof candidate.input.path === \"string\"\n && typeof candidate.input.source === \"string\";\n}\n\nexport function isAstWorkerResponse(value: unknown): value is AstWorkerResponse {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Partial<AstWorkerResponse>;\n if (candidate.protocolVersion !== AST_WORKER_PROTOCOL_VERSION\n || (candidate.type !== \"result\" && candidate.type !== \"error\")\n || typeof candidate.jobId !== \"number\"\n || !Number.isSafeInteger(candidate.jobId)\n || candidate.jobId < 0\n || typeof candidate.threadId !== \"number\"\n || !Number.isSafeInteger(candidate.threadId)\n || candidate.threadId <= 0) return false;\n if (candidate.type === \"result\") return \"result\" in candidate;\n const serialized = \"error\" in candidate ? candidate.error : undefined;\n return Boolean(serialized)\n && typeof serialized === \"object\"\n && typeof serialized.name === \"string\"\n && typeof serialized.message === \"string\";\n}\n"],"mappings":"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","names":["path","createHash","path","path","path","createHash","fs","path","fs","path","candidate","dependencies","path","path","directory","fs","path","fileURLToPath","z","fs","path","z","require","message","path","fs","z","defaultAssetRoot","fileURLToPath","manifestCache","safeAssetPath","path","fs","performance","performance","Parser","identifier","quoted","sourceHash","Parser","performance","message"]}