@saptools/service-flow 0.1.66 → 0.1.68

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 (80) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +20 -8
  3. package/TECHNICAL-NOTE.md +27 -0
  4. package/dist/{chunk-TOVX4WYH.js → chunk-AEM4JY22.js} +12676 -6714
  5. package/dist/chunk-AEM4JY22.js.map +1 -0
  6. package/dist/cli.js +2325 -413
  7. package/dist/cli.js.map +1 -1
  8. package/dist/index.d.ts +61 -2
  9. package/dist/index.js +1 -1
  10. package/package.json +1 -1
  11. package/src/cli/003-doctor-package-resolution.ts +68 -0
  12. package/src/cli/doctor.ts +25 -14
  13. package/src/db/000-call-fact-repository.ts +475 -342
  14. package/src/db/001-fact-lifecycle.ts +60 -30
  15. package/src/db/002-fact-json-inventory.ts +169 -0
  16. package/src/db/003-current-fact-semantics.ts +698 -0
  17. package/src/db/004-package-target-invalidation.ts +173 -0
  18. package/src/db/005-schema-structure.ts +201 -0
  19. package/src/db/006-relative-symbol-resolution.ts +443 -0
  20. package/src/db/007-package-fact-semantics.ts +573 -0
  21. package/src/db/008-relative-fact-semantics.ts +207 -0
  22. package/src/db/009-binding-fact-semantics.ts +347 -0
  23. package/src/db/010-package-symbol-surface-semantics.ts +320 -0
  24. package/src/db/011-symbol-call-semantics.ts +144 -0
  25. package/src/db/012-binding-reference-proof.ts +264 -0
  26. package/src/db/migrations.ts +16 -3
  27. package/src/db/repositories.ts +113 -6
  28. package/src/db/schema.ts +4 -2
  29. package/src/index.ts +12 -0
  30. package/src/indexer/repository-indexer.ts +72 -11
  31. package/src/indexer/workspace-indexer.ts +123 -32
  32. package/src/linker/003-package-import-symbol-resolver.ts +363 -131
  33. package/src/linker/004-event-subscription-handler-linker.ts +2 -0
  34. package/src/linker/005-odata-path-structure.ts +371 -0
  35. package/src/linker/cross-repo-linker.ts +2 -1
  36. package/src/linker/odata-path-normalizer.ts +273 -180
  37. package/src/linker/service-resolver.ts +197 -77
  38. package/src/parsers/002-symbol-import-bindings.ts +516 -0
  39. package/src/parsers/003-package-public-surface.ts +661 -0
  40. package/src/parsers/004-fact-identity.ts +108 -0
  41. package/src/parsers/005-event-subscription-facts.ts +281 -0
  42. package/src/parsers/006-binding-identity.ts +343 -0
  43. package/src/parsers/007-source-fact-reconciliation.ts +105 -0
  44. package/src/parsers/008-package-surface-publication.ts +82 -0
  45. package/src/parsers/009-symbol-call-facts.ts +528 -0
  46. package/src/parsers/010-package-public-surface-analysis.ts +352 -0
  47. package/src/parsers/011-binding-lexical-scope.ts +583 -0
  48. package/src/parsers/012-package-fact-contract.ts +306 -0
  49. package/src/parsers/013-executable-body-eligibility.ts +35 -0
  50. package/src/parsers/014-service-binding-helper-flow.ts +240 -0
  51. package/src/parsers/015-service-binding-collector.ts +693 -0
  52. package/src/parsers/016-local-symbol-reference.ts +261 -0
  53. package/src/parsers/017-symbol-derived-contexts.ts +268 -0
  54. package/src/parsers/018-package-commonjs-syntax.ts +142 -0
  55. package/src/parsers/019-binding-assignment-targets.ts +76 -0
  56. package/src/parsers/020-stable-local-value.ts +217 -0
  57. package/src/parsers/021-binding-visibility.ts +152 -0
  58. package/src/parsers/operation-path-analysis.ts +6 -1
  59. package/src/parsers/outbound-call-parser.ts +19 -6
  60. package/src/parsers/package-json-parser.ts +45 -3
  61. package/src/parsers/service-binding-parser-helpers.ts +86 -15
  62. package/src/parsers/service-binding-parser.ts +147 -597
  63. package/src/parsers/symbol-parser.ts +482 -353
  64. package/src/trace/002-trace-diagnostics.ts +36 -1
  65. package/src/trace/016-compact-projector.ts +16 -17
  66. package/src/trace/020-compact-field-projection.ts +48 -37
  67. package/src/trace/021-compact-decision-normalization.ts +105 -0
  68. package/src/trace/022-trace-fact-preflight.ts +21 -0
  69. package/src/trace/023-nested-event-scopes.ts +23 -0
  70. package/src/trace/024-compact-observation-decision.ts +76 -0
  71. package/src/trace/025-trace-implementation-scope.ts +123 -0
  72. package/src/trace/026-trace-start-scope.ts +335 -0
  73. package/src/trace/027-trace-scope-execution.ts +566 -0
  74. package/src/trace/028-trace-operation-execution.ts +336 -0
  75. package/src/trace/029-trace-start-implementation.ts +172 -0
  76. package/src/trace/trace-engine.ts +122 -624
  77. package/src/types.ts +56 -0
  78. package/src/utils/001-placeholders.ts +188 -10
  79. package/src/version.ts +1 -1
  80. package/dist/chunk-TOVX4WYH.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/version.ts","../src/discovery/discover-repositories.ts","../src/utils/path-utils.ts","../src/parsers/package-json-parser.ts","../src/parsers/cds-parser.ts","../src/parsers/decorator-parser.ts","../src/linker/operation-decorator-normalizer.ts","../src/parsers/ts-project.ts","../src/parsers/handler-registration-parser.ts","../src/utils/redaction.ts","../src/parsers/service-binding-parser.ts","../src/parsers/service-binding-parser-helpers.ts","../src/utils/001-placeholders.ts","../src/parsers/014-service-binding-helper-flow.ts","../src/parsers/011-binding-lexical-scope.ts","../src/parsers/019-binding-assignment-targets.ts","../src/parsers/021-binding-visibility.ts","../src/parsers/015-service-binding-collector.ts","../src/parsers/outbound-call-parser.ts","../src/linker/external-http-target.ts","../src/utils/000-bounded-projection.ts","../src/linker/005-odata-path-structure.ts","../src/linker/odata-path-normalizer.ts","../src/parsers/imported-wrapper-parser.ts","../src/parsers/operation-path-analysis.ts","../src/parsers/000-direct-query-execution.ts","../src/parsers/001-query-entity-resolution.ts","../src/linker/dynamic-edge-resolver.ts","../src/trace/implementation-hints.ts","../src/linker/remote-query-target.ts","../src/linker/001-implementation-evidence-projection.ts","../src/linker/000-implementation-candidates.ts","../src/linker/service-resolver.ts","../src/linker/helper-package-linker.ts","../src/linker/002-call-evidence.ts","../src/parsers/003-package-public-surface.ts","../src/parsers/018-package-commonjs-syntax.ts","../src/parsers/002-symbol-import-bindings.ts","../src/parsers/020-stable-local-value.ts","../src/parsers/010-package-public-surface-analysis.ts","../src/parsers/012-package-fact-contract.ts","../src/linker/003-package-import-symbol-resolver.ts","../src/linker/004-event-subscription-handler-linker.ts","../src/db/schema.ts","../src/db/migrations.ts","../src/db/002-fact-json-inventory.ts","../src/db/010-package-symbol-surface-semantics.ts","../src/db/007-package-fact-semantics.ts","../src/db/006-relative-symbol-resolution.ts","../src/db/008-relative-fact-semantics.ts","../src/db/012-binding-reference-proof.ts","../src/db/009-binding-fact-semantics.ts","../src/parsers/004-fact-identity.ts","../src/db/000-call-fact-repository.ts","../src/db/011-symbol-call-semantics.ts","../src/db/003-current-fact-semantics.ts","../src/db/005-schema-structure.ts","../src/db/001-fact-lifecycle.ts","../src/linker/cross-repo-linker.ts","../src/trace/selectors.ts","../src/trace/004-dynamic-candidate-sources.ts","../src/trace/001-dynamic-identity.ts","../src/trace/003-dynamic-references.ts","../src/trace/dynamic-targets.ts","../src/trace/006-contextual-projection.ts","../src/trace/008-contextual-runtime-state.ts","../src/trace/evidence.ts","../src/trace/002-trace-diagnostics.ts","../src/trace/010-traversal-scope.ts","../src/trace/013-trace-root-scopes.ts","../src/trace/015-trace-edge-recorder.ts","../src/trace/005-implementation-selection.ts","../src/trace/007-implementation-start-diagnostic.ts","../src/trace/017-trace-context.ts","../src/trace/022-trace-fact-preflight.ts","../src/trace/025-trace-implementation-scope.ts","../src/trace/026-trace-start-scope.ts","../src/trace/dynamic-branches.ts","../src/trace/011-event-subscriber-traversal.ts","../src/trace/012-trace-graph-lookups.ts","../src/trace/019-trace-edge-semantics.ts","../src/trace/023-nested-event-scopes.ts","../src/trace/009-selected-handler-provenance.ts","../src/trace/028-trace-operation-execution.ts","../src/trace/027-trace-scope-execution.ts","../src/trace/029-trace-start-implementation.ts","../src/trace/trace-engine.ts","../src/trace/014-compact-contract.ts","../src/trace/021-compact-decision-normalization.ts","../src/trace/020-compact-field-projection.ts","../src/trace/024-compact-observation-decision.ts","../src/trace/016-compact-projector.ts","../src/trace/018-compact-trace.ts"],"sourcesContent":["{\n \"name\": \"@saptools/service-flow\",\n \"version\": \"0.1.68\",\n \"description\": \"Trace SAP CAP service-to-service flows across multi-repository workspaces with runtime-aware graph resolution\",\n \"type\": \"module\",\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n },\n \"bin\": {\n \"service-flow\": \"dist/cli.js\"\n },\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"CHANGELOG.md\",\n \"README.md\",\n \"TECHNICAL-NOTE.md\",\n \"dist\",\n \"src\"\n ],\n \"engines\": {\n \"node\": \">=24.0.0\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src tests\",\n \"test\": \"vitest run tests/unit\",\n \"test:unit\": \"vitest run tests/unit\",\n \"test:e2e\": \"vitest run tests/e2e\",\n \"test:e2e:fake\": \"vitest run tests/e2e\"\n },\n \"keywords\": [\n \"sap\",\n \"cap\",\n \"cds\",\n \"btp\",\n \"cli\",\n \"service-graph\",\n \"call-graph\",\n \"sqlite\",\n \"saptools\"\n ],\n \"author\": \"Dong Tran\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/dongitran/saptools.git\",\n \"directory\": \"packages/service-flow\"\n },\n \"homepage\": \"https://github.com/dongitran/saptools/tree/main/packages/service-flow#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/dongitran/saptools/issues\"\n },\n \"dependencies\": {\n \"commander\": \"13.1.0\",\n \"picocolors\": \"1.1.1\",\n \"typescript\": \"5.9.3\",\n \"zod\": \"4.4.3\"\n },\n \"devDependencies\": {\n \"@vitest/coverage-v8\": \"3.2.4\",\n \"tsup\": \"8.5.1\",\n \"vitest\": \"3.2.4\"\n }\n}\n","import packageJson from '../package.json' with { type: 'json' };\n\nexport const VERSION = packageJson.version;\nexport const ANALYZER_VERSION = '0.1.68-facts.1';\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { DiscoveredRepository } from '../types.js';\nimport { relativePath } from '../utils/path-utils.js';\nexport async function discoverRepositories(\n rootPath: string,\n ignore: readonly string[]\n): Promise<DiscoveredRepository[]> {\n const root = path.resolve(rootPath);\n const ignored = new Set(ignore);\n const found: DiscoveredRepository[] = [];\n async function isRealGitMarker(dir: string): Promise<boolean> {\n const gitPath = path.join(dir, '.git');\n try {\n const st = await fs.stat(gitPath);\n if (st.isDirectory()) {\n const children = await fs.readdir(gitPath);\n return children.includes('HEAD') || children.includes('config');\n }\n if (st.isFile()) {\n const text = await fs.readFile(gitPath, 'utf8');\n return text.trimStart().startsWith('gitdir:');\n }\n } catch {\n /* not a normal git marker */\n }\n try {\n const fixture = await fs.stat(path.join(dir, '.git-fixture'));\n return fixture.isFile() || fixture.isDirectory();\n } catch {\n return false;\n }\n }\n async function walk(dir: string): Promise<void> {\n const rel = relativePath(root, dir);\n if (rel !== '.' && rel.split('/').some((part) => ignored.has(part))) return;\n let entries: Array<{ name: string; isDirectory: () => boolean }>;\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n const hasMarker = entries.some((e) => e.name === '.git' || e.name === '.git-fixture');\n if (hasMarker && await isRealGitMarker(dir)) {\n found.push({\n name: path.basename(dir),\n absolutePath: dir,\n relativePath: relativePath(root, dir),\n isGitRepo: true\n });\n }\n for (const entry of entries)\n if (entry.isDirectory() && !ignore.includes(entry.name))\n await walk(path.join(dir, entry.name));\n }\n await walk(root);\n return found.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n}\n","import path from 'node:path';\nexport function normalizePath(value: string): string {\n return value.split(path.sep).join('/');\n}\nexport function relativePath(root: string, value: string): string {\n return normalizePath(path.relative(root, value) || '.');\n}\nexport function ensureLeadingSlash(value: string): string {\n return value.startsWith('/') ? value : `/${value}`;\n}\nexport function stripQuotes(value: string): string {\n return value.replace(/^['\"`]|['\"`]$/g, '');\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { CdsRequire, PackageFacts } from '../types.js';\ninterface ParsePackageJsonOptions {\n strict?: boolean;\n allowMissing?: boolean;\n}\nexport interface PackageJsonSnapshot {\n facts: PackageFacts;\n manifest: PackageEntrypointManifest;\n rawText: string;\n}\nexport interface PackageEntrypointManifest {\n mainPresent: boolean;\n main: string | null;\n modulePresent: boolean;\n module: string | null;\n exportsPresent: boolean;\n exportsValue: unknown;\n}\nfunction emptyManifest(): PackageEntrypointManifest {\n return {\n mainPresent: false,\n main: null,\n modulePresent: false,\n module: null,\n exportsPresent: false,\n exportsValue: null,\n };\n}\nfunction entrypointManifest(\n json: Record<string, unknown>,\n): PackageEntrypointManifest {\n const mainPresent = Object.hasOwn(json, 'main');\n const modulePresent = Object.hasOwn(json, 'module');\n const exportsPresent = Object.hasOwn(json, 'exports');\n return {\n mainPresent,\n main: typeof json.main === 'string' ? json.main : null,\n modulePresent,\n module: typeof json.module === 'string' ? json.module : null,\n exportsPresent,\n exportsValue: exportsPresent ? json.exports : null,\n };\n}\nfunction emptyPackageFacts(): PackageFacts {\n return { dependencies: {}, cdsRequires: [], scripts: {} };\n}\nfunction isMissingFileError(error: unknown): boolean {\n return typeof error === 'object' && error !== null\n && 'code' in error && error.code === 'ENOENT';\n}\nfunction recordOfString(value: unknown): Record<string, string> {\n if (!value || typeof value !== 'object') return {};\n return Object.fromEntries(\n Object.entries(value).filter(([, v]) => typeof v === 'string')\n ) as Record<string, string>;\n}\nfunction readRequires(cds: unknown): CdsRequire[] {\n const requires =\n cds && typeof cds === 'object' && 'requires' in cds\n ? (cds as { requires?: unknown }).requires\n : undefined;\n if (!requires || typeof requires !== 'object') return [];\n return Object.entries(requires).flatMap(([alias, raw]) => {\n if (!raw || typeof raw !== 'object') return [];\n const obj = raw as Record<string, unknown>;\n const credentials =\n obj.credentials && typeof obj.credentials === 'object'\n ? (obj.credentials as Record<string, unknown>)\n : {};\n return [\n {\n alias,\n kind: typeof obj.kind === 'string' ? obj.kind : undefined,\n model: typeof obj.model === 'string' ? obj.model : undefined,\n destination:\n typeof credentials.destination === 'string'\n ? credentials.destination\n : undefined,\n servicePath:\n typeof credentials.path === 'string' ? credentials.path : undefined,\n requestTimeout:\n typeof credentials.requestTimeout === 'number'\n ? credentials.requestTimeout\n : undefined,\n rawJson: JSON.stringify(raw)\n }\n ];\n });\n}\nexport async function parsePackageJson(\n repoPath: string,\n options: ParsePackageJsonOptions = {},\n): Promise<PackageFacts> {\n return (await loadPackageJsonSnapshot(repoPath, options)).facts;\n}\nexport async function loadPackageJsonSnapshot(\n repoPath: string,\n options: ParsePackageJsonOptions = {},\n): Promise<PackageJsonSnapshot> {\n try {\n const raw = await fs.readFile(path.join(repoPath, 'package.json'), 'utf8');\n const json = JSON.parse(raw) as Record<string, unknown>;\n return {\n rawText: raw,\n manifest: entrypointManifest(json),\n facts: {\n packageName: typeof json.name === 'string' ? json.name : undefined,\n packageVersion:\n typeof json.version === 'string' ? json.version : undefined,\n dependencies: {\n ...recordOfString(json.dependencies),\n ...recordOfString(json.devDependencies),\n },\n cdsRequires: readRequires(json.cds),\n scripts: recordOfString(json.scripts),\n },\n };\n } catch (error) {\n const missing = isMissingFileError(error);\n if (!options.strict || (options.allowMissing && missing))\n return {\n facts: emptyPackageFacts(),\n manifest: emptyManifest(),\n rawText: '',\n };\n throw error;\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { CdsOperationFact, CdsServiceFact } from '../types.js';\nimport { ensureLeadingSlash, normalizePath } from '../utils/path-utils.js';\nimport type { RepositorySourceContext } from './ts-project.js';\n\nfunction lineOf(text: string, index: number): number {\n return text.slice(0, index).split('\\n').length;\n}\n\nfunction maskCommentsAndStrings(text: string): string {\n let out = '';\n let mode: 'code' | 'line' | 'block' | 'single' | 'double' | 'template' =\n 'code';\n for (let i = 0; i < text.length; i += 1) {\n const c = text[i] ?? '';\n const n = text[i + 1] ?? '';\n if (mode === 'code' && c === '/' && n === '/') {\n mode = 'line';\n out += ' ';\n i += 1;\n continue;\n }\n if (mode === 'code' && c === '/' && n === '*') {\n mode = 'block';\n out += ' ';\n i += 1;\n continue;\n }\n if (mode === 'line' && c === '\\n') mode = 'code';\n if (mode === 'block' && c === '*' && n === '/') {\n mode = 'code';\n out += ' ';\n i += 1;\n continue;\n }\n if (mode === 'code' && (c === \"'\" || c === '\"' || c === '`')) {\n mode = c === \"'\" ? 'single' : c === '\"' ? 'double' : 'template';\n out += ' ';\n continue;\n }\n if ((mode === 'single' && c === \"'\") || (mode === 'double' && c === '\"') || (mode === 'template' && c === '`'))\n mode = 'code';\n out += mode === 'code' || c === '\\n' ? c : ' ';\n }\n return out;\n}\n\nfunction maskComments(text: string): string {\n let out = '';\n let mode: 'code' | 'line' | 'block' | 'single' | 'double' | 'template' = 'code';\n for (let i = 0; i < text.length; i += 1) {\n const c = text[i] ?? '';\n const n = text[i + 1] ?? '';\n if (mode === 'code' && c === '/' && n === '/') { mode = 'line'; out += ' '; i += 1; continue; }\n if (mode === 'code' && c === '/' && n === '*') { mode = 'block'; out += ' '; i += 1; continue; }\n if (mode === 'line' && c === '\\n') mode = 'code';\n if (mode === 'block' && c === '*' && n === '/') { mode = 'code'; out += ' '; i += 1; continue; }\n if (mode === 'code' && (c === \"'\" || c === '\"' || c === '`')) mode = c === \"'\" ? 'single' : c === '\"' ? 'double' : 'template';\n else if ((mode === 'single' && c === \"'\") || (mode === 'double' && c === '\"') || (mode === 'template' && c === '`')) mode = 'code';\n out += mode === 'line' || mode === 'block' ? (c === '\\n' ? '\\n' : ' ') : c;\n }\n return out;\n}\n\nfunction readAnnotation(text: string, index: number): { end: number; raw: string } | undefined {\n if (text[index] !== '@') return undefined;\n let i = index + 1;\n while (/\\s/.test(text[i] ?? '')) i += 1;\n if (text[i] !== '(') return undefined;\n let depth = 0;\n for (; i < text.length; i += 1) {\n if (text[i] === '(') depth += 1;\n if (text[i] === ')') depth -= 1;\n if (depth === 0) return { end: i + 1, raw: text.slice(index, i + 1) };\n }\n return undefined;\n}\n\nfunction collectAnnotations(text: string, index: number): { end: number; raw: string } {\n let i = index;\n let raw = '';\n while (i < text.length) {\n while (/\\s/.test(text[i] ?? '')) i += 1;\n const annotation = readAnnotation(text, i);\n if (!annotation) break;\n raw += annotation.raw;\n i = annotation.end;\n }\n return { end: i, raw };\n}\n\nfunction pathAnnotation(raw: string): string | undefined {\n return /path\\s*:\\s*(['\"])(.*?)\\1/s.exec(raw)?.[2];\n}\n\nfunction matchingBrace(maskedText: string, open: number): number {\n let depth = 0;\n for (let i = open; i < maskedText.length; i += 1) {\n if (maskedText[i] === '{') depth += 1;\n if (maskedText[i] === '}') depth -= 1;\n if (depth === 0) return i;\n }\n return maskedText.length - 1;\n}\nfunction annotationRawAt(original: string, masked: string, index: number): { end: number; raw: string } {\n const collected = collectAnnotations(masked, index);\n return { end: collected.end, raw: original.slice(index, collected.end) };\n}\n\n\ninterface CdsUsing { importedSymbol: string; localAlias: string; moduleSpecifier: string; importKind: 'relative' | 'package' }\nfunction collectUsings(masked: string): Map<string, CdsUsing> {\n const imports = new Map<string, CdsUsing>();\n for (const m of masked.matchAll(/\\busing\\s*\\{([^}]*)\\}\\s*from\\s*(['\"])(.*?)\\2\\s*;/gs)) {\n const moduleSpecifier = m[3] ?? '';\n for (const part of (m[1] ?? '').split(',')) {\n const text = part.trim();\n if (!text) continue;\n const alias = /^(\\w+)\\s+as\\s+(\\w+)$/.exec(text) ?? /^(\\w+)\\s*:\\s*(\\w+)$/.exec(text);\n const importedSymbol = alias?.[1] ?? text;\n const localAlias = alias?.[2] ?? importedSymbol;\n imports.set(localAlias, { importedSymbol, localAlias, moduleSpecifier, importKind: moduleSpecifier.startsWith('.') ? 'relative' : 'package' });\n }\n }\n return imports;\n}\nfunction operationsFromBody(text: string, maskedBody: string, bodyOffset: number, filePath: string): CdsOperationFact[] {\n return [...maskedBody.matchAll(/\\b(action|function|event)\\s+(\\w+)\\s*(?:\\(([^)]*)\\))?\\s*(?:returns\\s+([^;{]+))?/g)].map((m) => ({\n operationType: (m[1] as 'action' | 'function' | 'event') ?? 'action',\n operationName: m[2] ?? 'unknown',\n operationPath: ensureLeadingSlash(m[2] ?? 'unknown'),\n paramsJson: JSON.stringify((m[3] ?? '').split(',').map((part) => part.trim()).filter(Boolean)),\n returnType: m[4]?.trim(),\n sourceFile: normalizePath(filePath),\n sourceLine: lineOf(text, bodyOffset + (m.index ?? 0))\n }));\n}\n\nexport async function parseCdsFile(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n): Promise<CdsServiceFact[]> {\n const absolute = path.join(repoPath, filePath);\n const text = context?.get(filePath)?.text\n ?? await fs.readFile(absolute, 'utf8');\n const masked = maskCommentsAndStrings(text);\n const namespace = /namespace\\s+([\\w.]+)\\s*;/.exec(masked)?.[1];\n const services: CdsServiceFact[] = [];\n const pendingAnnotations: Array<{ end: number; raw: string }> = [];\n const usings = collectUsings(maskComments(text));\n for (const a of masked.matchAll(/@\\s*\\(/g)) pendingAnnotations.push(annotationRawAt(text, masked, a.index ?? 0));\n const serviceRegex = /\\b(?:(extend)\\s+)?(?:(service)\\s+)?([A-Za-z_]\\w*(?:\\.[A-Za-z_]\\w*)*)\\b/g;\n let match: RegExpExecArray | null;\n while ((match = serviceRegex.exec(masked))) {\n const isExtend = match[1] === 'extend';\n const hasServiceKeyword = match[2] === 'service';\n if (!isExtend && !hasServiceKeyword) continue;\n const afterName = annotationRawAt(text, masked, serviceRegex.lastIndex);\n const open = masked.indexOf('{', afterName.end);\n if (open === -1) continue;\n const between = masked.slice(afterName.end, open).trim();\n if (between.length > 0) continue;\n const matchIndex = match.index;\n const prefix = pendingAnnotations\n .filter((a) => a.end <= matchIndex && matchIndex - a.end < 8)\n .map((a) => a.raw)\n .join('');\n const annotations = `${prefix}${afterName.raw}`;\n const end = matchingBrace(masked, open);\n const body = masked.slice(open + 1, end);\n const name = match[3] ?? 'UnknownService';\n const serviceName = name.split('.').pop() ?? name;\n const imported = isExtend ? usings.get(name) ?? usings.get(serviceName) : undefined;\n const servicePath = ensureLeadingSlash(pathAnnotation(annotations) ?? serviceName);\n services.push({\n namespace,\n serviceName,\n qualifiedName: name.includes('.') ? name : namespace ? `${namespace}.${name}` : name,\n servicePath,\n isExtend,\n sourceFile: normalizePath(filePath),\n sourceLine: lineOf(text, match.index),\n operations: operationsFromBody(text, body, open + 1, filePath),\n extension: isExtend ? { localReference: name, importedSymbol: imported?.importedSymbol, localAlias: imported?.localAlias, moduleSpecifier: imported?.moduleSpecifier, importKind: imported?.importKind ?? 'none' } : undefined\n });\n serviceRegex.lastIndex = end + 1;\n }\n const baseOps = new Map(services.filter((s) => !s.isExtend).map((s) => [s.qualifiedName, s.operations]));\n for (const service of services.filter((s) => s.isExtend && s.operations.length === 0)) {\n if (service.extension?.moduleSpecifier) continue;\n const inherited = baseOps.get(service.qualifiedName) ?? baseOps.get(service.serviceName);\n if (inherited) service.operations = inherited.map((op) => ({ ...op, provenance: 'inherited' }));\n }\n return services;\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport type {\n HandlerClassFact,\n HandlerLifecycleEvent,\n HandlerLifecyclePhase,\n HandlerMethodFact,\n HandlerMethodKind,\n} from '../types.js';\nimport { generatedOperationNameFromConstant } from '../linker/operation-decorator-normalizer.js';\nimport {\n createSourceFile,\n type RepositorySourceContext,\n} from './ts-project.js';\nimport { normalizePath } from '../utils/path-utils.js';\n\ntype DecoratorResolution = HandlerMethodFact['decoratorResolution'];\ntype ResolvedArgumentKind = Exclude<\n DecoratorResolution['resolutionKind'],\n 'lifecycle_implicit' | 'unresolved'\n>;\ninterface StringLookups {\n identifiers: Map<string, string>;\n enumMembers: Map<string, string>;\n objectProperties: Map<string, string>;\n capDecoratorNames: Map<string, string>;\n capDecoratorNamespaces: Set<string>;\n}\ninterface LifecycleMetadata {\n phase: HandlerLifecyclePhase;\n event: HandlerLifecycleEvent;\n}\ninterface MethodClassification {\n handlerKind: HandlerMethodKind;\n executable: boolean;\n lifecyclePhase?: HandlerLifecyclePhase;\n lifecycleEvent?: HandlerLifecycleEvent;\n}\ninterface ParsedMethodDecorator {\n classification: MethodClassification;\n resolution: DecoratorResolution;\n decoratorKind: string;\n importedKind?: string;\n}\n\nconst OPERATION_DECORATORS = new Set(['Action', 'Func', 'On']);\nconst EVENT_DECORATORS = new Set(['Event']);\nconst LIFECYCLE_DECORATORS = new Map<string, LifecycleMetadata>([\n ['BeforeCreate', { phase: 'before', event: 'CREATE' }],\n ['OnCreate', { phase: 'on', event: 'CREATE' }],\n ['AfterCreate', { phase: 'after', event: 'CREATE' }],\n ['BeforeRead', { phase: 'before', event: 'READ' }],\n ['OnRead', { phase: 'on', event: 'READ' }],\n ['AfterRead', { phase: 'after', event: 'READ' }],\n ['BeforeUpdate', { phase: 'before', event: 'UPDATE' }],\n ['OnUpdate', { phase: 'on', event: 'UPDATE' }],\n ['AfterUpdate', { phase: 'after', event: 'UPDATE' }],\n ['BeforeDelete', { phase: 'before', event: 'DELETE' }],\n ['OnDelete', { phase: 'on', event: 'DELETE' }],\n ['AfterDelete', { phase: 'after', event: 'DELETE' }],\n]);\n\nfunction line(sf: ts.SourceFile, pos: number): number {\n return sf.getLineAndCharacterOfPosition(pos).line + 1;\n}\nfunction decs(node: ts.Node): ts.Decorator[] {\n return ts.canHaveDecorators(node) ? [...(ts.getDecorators(node) ?? [])] : [];\n}\nfunction callName(d: ts.Decorator): string {\n const e = d.expression;\n return ts.isCallExpression(e) ? e.expression.getText() : e.getText();\n}\nfunction firstArg(d: ts.Decorator): ts.Expression | undefined {\n const e = d.expression;\n return ts.isCallExpression(e) ? e.arguments[0] : undefined;\n}\nfunction decoratorArguments(d: ts.Decorator): readonly ts.Expression[] | undefined {\n return ts.isCallExpression(d.expression) ? d.expression.arguments : undefined;\n}\nfunction methodName(name: ts.PropertyName): string {\n return ts.isIdentifier(name) || ts.isStringLiteralLike(name)\n || ts.isNumericLiteral(name)\n ? name.text\n : name.getText();\n}\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (\n ts.isParenthesizedExpression(current)\n || ts.isAsExpression(current)\n || ts.isTypeAssertionExpression(current)\n || ts.isSatisfiesExpression(current)\n ) current = current.expression;\n return current;\n}\nfunction stringValue(expression: ts.Expression | undefined): string | undefined {\n if (!expression) return undefined;\n const unwrapped = unwrapExpression(expression);\n return ts.isStringLiteralLike(unwrapped) ? unwrapped.text : undefined;\n}\nfunction propertyName(node: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(node) || ts.isStringLiteralLike(node)) return node.text;\n return undefined;\n}\nfunction collectEnumMembers(\n statement: ts.EnumDeclaration,\n lookups: StringLookups,\n): void {\n for (const member of statement.members) {\n const name = propertyName(member.name);\n const value = stringValue(member.initializer);\n if (name && value !== undefined)\n lookups.enumMembers.set(`${statement.name.text}.${name}`, value);\n }\n}\nfunction collectObjectProperties(\n name: string,\n initializer: ts.Expression,\n lookups: StringLookups,\n): void {\n const object = unwrapExpression(initializer);\n if (!ts.isObjectLiteralExpression(object)) return;\n for (const property of object.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const key = propertyName(property.name);\n const value = stringValue(property.initializer);\n if (key && value !== undefined)\n lookups.objectProperties.set(`${name}.${key}`, value);\n }\n}\nfunction collectStringLookups(source: ts.SourceFile): StringLookups {\n const lookups: StringLookups = {\n identifiers: new Map(),\n enumMembers: new Map(),\n objectProperties: new Map(),\n capDecoratorNames: new Map(),\n capDecoratorNamespaces: new Set(),\n };\n for (const statement of source.statements) {\n collectCapDecoratorImports(statement, lookups);\n if (ts.isEnumDeclaration(statement)) collectEnumMembers(statement, lookups);\n if (!ts.isVariableStatement(statement)\n || !(statement.declarationList.flags & ts.NodeFlags.Const)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;\n const value = stringValue(declaration.initializer);\n if (value !== undefined) lookups.identifiers.set(declaration.name.text, value);\n collectObjectProperties(declaration.name.text, declaration.initializer, lookups);\n }\n }\n return lookups;\n}\nfunction collectCapDecoratorImports(\n statement: ts.Statement,\n lookups: StringLookups,\n): void {\n if (!ts.isImportDeclaration(statement)\n || !ts.isStringLiteral(statement.moduleSpecifier)\n || statement.moduleSpecifier.text !== 'cds-routing-handlers') return;\n const clause = statement.importClause;\n if (!clause || clause.isTypeOnly) return;\n const bindings = clause.namedBindings;\n if (bindings && ts.isNamedImports(bindings)) {\n for (const element of bindings.elements) {\n if (element.isTypeOnly) continue;\n lookups.capDecoratorNames.set(\n element.name.text,\n element.propertyName?.text ?? element.name.text,\n );\n }\n }\n if (bindings && ts.isNamespaceImport(bindings))\n lookups.capDecoratorNamespaces.add(bindings.name.text);\n}\nfunction capDecoratorName(\n decorator: ts.Decorator,\n lookups: StringLookups,\n): string | undefined {\n const expression = ts.isCallExpression(decorator.expression)\n ? decorator.expression.expression\n : decorator.expression;\n if (ts.isIdentifier(expression))\n return lookups.capDecoratorNames.get(expression.text);\n if (ts.isPropertyAccessExpression(expression)\n && ts.isIdentifier(expression.expression)\n && lookups.capDecoratorNamespaces.has(expression.expression.text))\n return expression.name.text;\n return undefined;\n}\nfunction unresolved(\n rawExpression: string,\n reason: string,\n argumentExpression?: string,\n): DecoratorResolution {\n return {\n rawExpression,\n argumentExpression,\n resolutionKind: 'unresolved',\n unresolvedReason: reason,\n };\n}\nfunction resolved(\n rawExpression: string,\n argumentExpression: string,\n resolvedValue: string,\n resolutionKind: ResolvedArgumentKind,\n): DecoratorResolution {\n return { rawExpression, argumentExpression, resolvedValue, resolutionKind };\n}\nfunction generatedConstant(rawExpression: string): string | undefined {\n const match = /(?:^|\\.)(Action[A-Z][\\w$]*|Func[A-Z][\\w$]*)\\.name$/\n .exec(rawExpression.trim());\n return match?.[1]\n ? generatedOperationNameFromConstant(match[1])\n : undefined;\n}\nfunction resolveDecoratorArgument(\n argument: ts.Expression | undefined,\n lookups: StringLookups,\n rawExpression: string,\n): DecoratorResolution {\n if (!argument) return unresolved(rawExpression, 'decorator_argument_missing');\n const argumentExpression = argument.getText();\n const expression = unwrapExpression(argument);\n if (ts.isStringLiteralLike(expression))\n return resolved(rawExpression, argumentExpression, expression.text, 'literal');\n if (ts.isIdentifier(expression)) {\n const value = lookups.identifiers.get(expression.text);\n return value === undefined\n ? unresolved(rawExpression, 'identifier_not_resolved_to_local_const_string', argumentExpression)\n : resolved(rawExpression, argumentExpression, value, 'const_identifier');\n }\n if (ts.isPropertyAccessExpression(expression)\n && ts.isIdentifier(expression.expression)) {\n const key = `${expression.expression.text}.${expression.name.text}`;\n const enumValue = lookups.enumMembers.get(key);\n if (enumValue !== undefined)\n return resolved(rawExpression, argumentExpression, enumValue, 'enum_member');\n const objectValue = lookups.objectProperties.get(key);\n if (objectValue !== undefined)\n return resolved(rawExpression, argumentExpression, objectValue, 'const_object_property');\n }\n const generatedValue = generatedConstant(argumentExpression);\n if (generatedValue !== undefined)\n return resolved(\n rawExpression,\n argumentExpression,\n generatedValue,\n 'generated_constant_name',\n );\n if (ts.isPropertyAccessExpression(expression))\n return unresolved(\n rawExpression,\n 'property_access_not_resolved_to_local_string',\n argumentExpression,\n );\n return unresolved(rawExpression, 'unsupported_decorator_expression', argumentExpression);\n}\nfunction classificationFor(name: string): MethodClassification | undefined {\n if (OPERATION_DECORATORS.has(name))\n return { handlerKind: 'operation', executable: true };\n if (EVENT_DECORATORS.has(name))\n return { handlerKind: 'event', executable: true };\n const lifecycle = LIFECYCLE_DECORATORS.get(name);\n if (!lifecycle) return undefined;\n return {\n handlerKind: 'entity_lifecycle',\n executable: true,\n lifecyclePhase: lifecycle.phase,\n lifecycleEvent: lifecycle.event,\n };\n}\nfunction lifecycleLikePhase(name: string): HandlerLifecyclePhase | undefined {\n if (/^On[A-Z]/.test(name)) return 'on';\n if (/^Before[A-Z]/.test(name)) return 'before';\n if (/^After[A-Z]/.test(name)) return 'after';\n return undefined;\n}\nfunction withClassification(\n resolution: DecoratorResolution,\n classification: MethodClassification,\n): DecoratorResolution {\n return {\n ...resolution,\n handlerKind: classification.handlerKind,\n executable: classification.executable,\n lifecyclePhase: classification.lifecyclePhase,\n lifecycleEvent: classification.lifecycleEvent,\n };\n}\nfunction withDecoratorEvidence(\n resolution: DecoratorResolution,\n decorator: ts.Decorator,\n resolvedDecoratorKind: string | undefined,\n): DecoratorResolution {\n return {\n ...resolution,\n decoratorExpression: decorator.expression.getText(),\n resolvedDecoratorKind,\n decoratorImportSource: resolvedDecoratorKind\n ? 'cds-routing-handlers'\n : undefined,\n };\n}\nfunction lifecycleDecoratorResolution(\n decorator: ts.Decorator,\n lookups: StringLookups,\n classification: MethodClassification,\n): { classification: MethodClassification; resolution: DecoratorResolution } {\n const rawExpression = decorator.expression.getText();\n const args = decoratorArguments(decorator);\n if (args?.length === 0)\n return {\n classification,\n resolution: withClassification({\n rawExpression,\n resolutionKind: 'lifecycle_implicit',\n }, classification),\n };\n const resolution = args?.length === 1\n ? resolveDecoratorArgument(args[0], lookups, rawExpression)\n : unresolved(rawExpression, args ? 'unsupported_lifecycle_argument_count' : 'lifecycle_decorator_call_required');\n const unsupported = { ...classification, handlerKind: 'unsupported_lifecycle', executable: false } as const;\n const unsupportedResolution = args?.length === 1\n ? { ...resolution, unresolvedReason: 'lifecycle_decorator_arguments_not_supported' }\n : resolution;\n return {\n classification: unsupported,\n resolution: withClassification(unsupportedResolution, unsupported),\n };\n}\nfunction unsupportedLifecycleResolution(\n decorator: ts.Decorator,\n phase: HandlerLifecyclePhase,\n): { classification: MethodClassification; resolution: DecoratorResolution } {\n const classification: MethodClassification = {\n handlerKind: 'unsupported_lifecycle',\n executable: false,\n lifecyclePhase: phase,\n };\n const resolution = unresolved(\n decorator.expression.getText(),\n 'lifecycle_decorator_not_allowlisted',\n );\n return { classification, resolution: withClassification(resolution, classification) };\n}\nfunction unsupportedDecoratorResolution(\n decorator: ts.Decorator,\n reason: string,\n phase?: HandlerLifecyclePhase,\n): { classification: MethodClassification; resolution: DecoratorResolution } {\n const classification: MethodClassification = {\n handlerKind: phase ? 'unsupported_lifecycle' : 'unsupported_decorator',\n executable: false,\n lifecyclePhase: phase,\n };\n return {\n classification,\n resolution: withClassification(\n unresolved(decorator.expression.getText(), reason),\n classification,\n ),\n };\n}\nfunction parseMethodDecorator(\n decorator: ts.Decorator,\n lookups: StringLookups,\n handlerClass: boolean,\n allowLifecycle: boolean,\n): ParsedMethodDecorator | undefined {\n const decoratorKind = callName(decorator);\n const importedKind = capDecoratorName(decorator, lookups);\n const resolvedKind = importedKind ?? decoratorKind;\n const base = classificationFor(resolvedKind);\n const phase = lifecycleLikePhase(resolvedKind);\n const isLifecycle = base?.handlerKind === 'entity_lifecycle' || Boolean(phase && !base);\n if (!handlerClass && isLifecycle) return undefined;\n const parsed = isLifecycle && (!allowLifecycle || !importedKind)\n ? unsupportedDecoratorResolution(\n decorator, 'lifecycle_decorator_import_not_supported', phase,\n )\n : base?.handlerKind === 'entity_lifecycle'\n ? lifecycleDecoratorResolution(decorator, lookups, base)\n : phase && !base\n ? unsupportedLifecycleResolution(decorator, phase)\n : !base && handlerClass\n ? unsupportedDecoratorResolution(decorator, 'decorator_not_allowlisted')\n : {\n classification: base,\n resolution: resolveDecoratorArgument(\n firstArg(decorator),\n lookups,\n firstArg(decorator)?.getText() ?? decorator.expression.getText(),\n ),\n };\n if (!parsed.classification) return undefined;\n return {\n classification: parsed.classification,\n resolution: parsed.resolution,\n decoratorKind,\n importedKind,\n };\n}\nfunction methodDecoratorFact(\n method: ts.MethodDeclaration,\n decorator: ts.Decorator,\n lookups: StringLookups,\n source: ts.SourceFile,\n filePath: string,\n handlerClass: boolean,\n allowLifecycle: boolean,\n): HandlerMethodFact | undefined {\n const parsed = parseMethodDecorator(decorator, lookups, handlerClass, allowLifecycle);\n if (!parsed) return undefined;\n const classification = method.body\n ? parsed.classification\n : { ...parsed.classification, executable: false };\n const resolution = method.body\n ? parsed.resolution\n : { ...parsed.resolution, unresolvedReason: 'handler_method_body_missing' };\n const argumentExpression = firstArg(decorator)?.getText();\n return {\n methodName: methodName(method.name),\n decoratorKind: parsed.decoratorKind,\n decoratorValue: parsed.resolution.resolvedValue,\n decoratorRawExpression: argumentExpression ?? decorator.expression.getText(),\n handlerKind: classification.handlerKind,\n executable: classification.executable,\n lifecyclePhase: classification.lifecyclePhase,\n lifecycleEvent: classification.lifecycleEvent,\n decoratorResolution: withDecoratorEvidence(\n withClassification(resolution, classification),\n decorator,\n parsed.importedKind,\n ),\n sourceFile: normalizePath(filePath),\n sourceLine: line(source, method.getStart()),\n };\n}\nfunction unique(values: string[]): string[] {\n return [...new Set(values)];\n}\nfunction parseClassMethods(\n node: ts.ClassDeclaration,\n lookups: StringLookups,\n source: ts.SourceFile,\n filePath: string,\n handlerClass: boolean,\n allowLifecycle: boolean,\n): Pick<HandlerClassFact, 'methods' | 'observedDecoratorNames' | 'unsupportedDecoratorNames'> {\n const methods: HandlerMethodFact[] = [];\n const observed: string[] = [];\n const unsupported: string[] = [];\n for (const method of node.members.filter(ts.isMethodDeclaration)) {\n for (const decorator of decs(method)) {\n observed.push(callName(decorator));\n const fact = methodDecoratorFact(\n method, decorator, lookups, source, filePath, handlerClass, allowLifecycle,\n );\n if (fact) methods.push(fact);\n if (!fact?.executable) unsupported.push(callName(decorator));\n }\n }\n return {\n methods,\n observedDecoratorNames: unique(observed),\n unsupportedDecoratorNames: unique(unsupported),\n };\n}\nfunction parseHandlerClass(\n node: ts.ClassDeclaration,\n lookups: StringLookups,\n source: ts.SourceFile,\n filePath: string,\n): HandlerClassFact | undefined {\n const classDecoratorNames = unique(decs(node).map(callName));\n const classDecorators = decs(node);\n const hasImportedHandler = classDecorators.some((decorator) =>\n capDecoratorName(decorator, lookups) === 'Handler');\n const hasHandlerDecorator = hasImportedHandler\n || classDecoratorNames.includes('Handler');\n const parsed = parseClassMethods(\n node, lookups, source, filePath, hasHandlerDecorator, hasImportedHandler,\n );\n if (!hasHandlerDecorator && parsed.methods.length === 0) return undefined;\n return {\n className: node.name?.text ?? 'AnonymousHandler',\n sourceFile: normalizePath(filePath),\n sourceLine: line(source, node.getStart()),\n ...parsed,\n hasHandlerDecorator,\n classDecoratorNames,\n };\n}\nexport async function parseDecorators(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n): Promise<HandlerClassFact[]> {\n const snapshot = context?.get(filePath);\n const text = snapshot?.text\n ?? await fs.readFile(path.join(repoPath, filePath), 'utf8');\n const sf = snapshot?.sourceFile() ?? createSourceFile(filePath, text);\n const lookups = collectStringLookups(sf);\n const handlers: HandlerClassFact[] = [];\n function visit(node: ts.Node): void {\n if (ts.isClassDeclaration(node)) {\n const handler = parseHandlerClass(node, lookups, sf, filePath);\n if (handler) handlers.push(handler);\n }\n ts.forEachChild(node, visit);\n }\n visit(sf);\n return handlers;\n}\n","function lowerFirst(value: string): string {\n return value ? `${value[0]?.toLowerCase() ?? ''}${value.slice(1)}` : value;\n}\nexport type DecoratorOperationSignal =\n | { status: 'resolved'; operationName: string; raw?: string }\n | { status: 'none'; raw?: string }\n | { status: 'unsupported'; raw: string; reason: string }\n | { status: 'malformed'; raw: string; reason: string };\nexport function normalizedOperationName(value: string): string {\n return value.replace(/^\\//, '');\n}\nfunction clean(value: string): string {\n return value.replace(/^[`'\"]|[`'\"]$/g, '');\n}\nexport function generatedOperationNameFromConstant(value: string): string | undefined {\n for (const prefix of ['Action', 'Func']) {\n if (value.startsWith(prefix) && value.length > prefix.length && /^[A-Z]/.test(value.slice(prefix.length))) return lowerFirst(value.slice(prefix.length));\n }\n return undefined;\n}\nfunction resolved(value: string, raw?: string): DecoratorOperationSignal {\n const literal = clean(value);\n const generated = generatedOperationNameFromConstant(literal);\n return { status: 'resolved', operationName: generated ?? normalizedOperationName(literal), raw };\n}\nexport function normalizeDecoratorOperationSignal(value: string | undefined, raw: string | undefined, candidateOperation?: string): DecoratorOperationSignal {\n if (value) return resolved(value, raw);\n if (!raw || raw.trim().length === 0) return { status: 'none', raw };\n const expression = raw.trim();\n const nameMatch = /(?:^|\\.)(Action[A-Z][\\w$]*|Func[A-Z][\\w$]*)\\.name$/.exec(expression);\n if (nameMatch?.[1]) return resolved(nameMatch[1], expression);\n const stringMatch = /^String\\(([A-Za-z_$][\\w$]*)\\)$/.exec(expression);\n if (stringMatch?.[1]) {\n const identifier = stringMatch[1];\n const generated = generatedOperationNameFromConstant(identifier);\n const normalizedCandidate = candidateOperation ? normalizedOperationName(candidateOperation) : undefined;\n if (generated) return { status: 'resolved', operationName: generated, raw: expression };\n if (normalizedCandidate && identifier === normalizedCandidate) return { status: 'resolved', operationName: identifier, raw: expression };\n return { status: 'unsupported', raw: expression, reason: 'string_wrapper_identifier_not_resolved' };\n }\n if (/^[`'\"]/.test(expression) && !/[`'\"]$/.test(expression)) return { status: 'malformed', raw: expression, reason: 'unterminated_literal' };\n return { status: 'unsupported', raw: expression, reason: 'unsupported_decorator_expression' };\n}\nexport function normalizeDecoratorOperation(value: string | undefined, raw: string | undefined): string | undefined {\n const signal = normalizeDecoratorOperationSignal(value, raw);\n return signal.status === 'resolved' ? signal.operationName : undefined;\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport { normalizePath } from '../utils/path-utils.js';\n\nexport interface SourceContextInstrumentation {\n onSourceRead?: (\n repoPath: string,\n filePath: string,\n ) => void | Promise<void>;\n onAstCreated?: (repoPath: string, filePath: string) => void;\n}\n\nexport interface SourceFileSnapshot {\n repoPath: string;\n filePath: string;\n text: string;\n sizeBytes: number;\n sourceFile: () => ts.SourceFile;\n}\n\nexport interface RepositorySourceContext {\n get: (filePath: string) => SourceFileSnapshot | undefined;\n entries: () => SourceFileSnapshot[];\n}\n\nexport async function loadRepositorySourceContext(\n repoPath: string,\n filePaths: string[],\n instrumentation?: SourceContextInstrumentation,\n): Promise<RepositorySourceContext> {\n const snapshots = new Map<string, SourceFileSnapshot>();\n for (const inputPath of filePaths) {\n const filePath = normalizePath(inputPath);\n await instrumentation?.onSourceRead?.(repoPath, filePath);\n const text = await fs.readFile(path.join(repoPath, filePath), 'utf8');\n let ast: ts.SourceFile | undefined;\n snapshots.set(filePath, {\n repoPath,\n filePath,\n text,\n sizeBytes: Buffer.byteLength(text),\n sourceFile: () => {\n if (ast) return ast;\n instrumentation?.onAstCreated?.(repoPath, filePath);\n ast = createSourceFile(filePath, text);\n return ast;\n },\n });\n }\n return {\n get: (filePath) => snapshots.get(normalizePath(filePath)),\n entries: () => [...snapshots.values()],\n };\n}\nexport function createSourceFile(\n filePath: string,\n text: string\n): ts.SourceFile {\n return ts.createSourceFile(\n filePath,\n text,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.js') ? ts.ScriptKind.JS : ts.ScriptKind.TS\n );\n}\n","import fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport type { HandlerRegistrationFact } from '../types.js';\nimport { normalizePath } from '../utils/path-utils.js';\nimport type { RepositorySourceContext } from './ts-project.js';\n\ninterface ImportEvidence { importedName: string; source: string }\ninterface ClassEvidence { className: string; importSource?: string }\ninterface FileExports { arrays: Map<string, ClassEvidence[]>; defaultArray?: ClassEvidence[]; aliases: Map<string, string> }\n\nconst MAX_EXPORT_DEPTH = 5;\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;\n}\nfunction isRelative(source: string): boolean {\n return source.startsWith('./') || source.startsWith('../');\n}\nfunction sourceText(node: ts.PropertyName, sourceFile: ts.SourceFile): string | undefined {\n if (ts.isIdentifier(node) || ts.isStringLiteral(node) || ts.isNumericLiteral(node)) return node.text;\n return node.getText(sourceFile);\n}\nfunction importSourceFor(identifier: string, imports: Map<string, ImportEvidence>): string | undefined {\n const evidence = imports.get(identifier);\n return evidence ? `${evidence.source}#${evidence.importedName}` : undefined;\n}\n\nexport async function parseHandlerRegistrations(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n): Promise<HandlerRegistrationFact[]> {\n const absolutePath = path.join(repoPath, filePath);\n const snapshot = context?.get(filePath);\n const text = snapshot?.text ?? await fs.readFile(absolutePath, 'utf8');\n const sourceFile = snapshot?.sourceFile() ?? ts.createSourceFile(\n filePath, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS,\n );\n const imports = collectImports(sourceFile);\n const localArrays = collectLocalArrays(\n sourceFile, imports, new Map(), repoPath, filePath, context,\n );\n const out: HandlerRegistrationFact[] = [];\n function emitFromExpression(expression: ts.Expression, call: ts.CallExpression): void {\n const classes = resolveArrayExpression(\n expression, localArrays, imports, repoPath, filePath, new Set(), context,\n );\n for (const cls of classes) {\n out.push({\n className: cls.className,\n importSource: cls.importSource,\n registrationFile: normalizePath(filePath),\n registrationLine: lineOf(sourceFile, call),\n registrationKind: 'combined-handler-class',\n confidence: 0.95,\n });\n }\n if (classes.length === 0) {\n out.push({\n registrationFile: normalizePath(filePath),\n registrationLine: lineOf(sourceFile, call),\n registrationKind: 'combined-handler',\n confidence: 0.75,\n });\n }\n }\n function visit(node: ts.Node): void {\n if (ts.isCallExpression(node) && isRegistrationCall(node)) {\n const handlerExpr = handlerExpression(node, sourceFile);\n if (handlerExpr) emitFromExpression(handlerExpr, node);\n else out.push({ registrationFile: normalizePath(filePath), registrationLine: lineOf(sourceFile, node), registrationKind: 'combined-handler', confidence: 0.75 });\n }\n ts.forEachChild(node, visit);\n }\n visit(sourceFile);\n return out;\n}\n\nfunction isRegistrationCall(call: ts.CallExpression): boolean {\n const text = call.expression.getText();\n return text.endsWith('createCombinedHandler') || text.endsWith('srv.prepend') || text.endsWith('cds.serve');\n}\nfunction handlerExpression(call: ts.CallExpression, sourceFile: ts.SourceFile): ts.Expression | undefined {\n for (const arg of call.arguments) {\n if (!ts.isObjectLiteralExpression(arg)) continue;\n for (const prop of arg.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (sourceText(prop.name, sourceFile) === 'handler') return prop.initializer;\n }\n }\n return undefined;\n}\nfunction collectImports(sourceFile: ts.SourceFile): Map<string, ImportEvidence> {\n const imports = new Map<string, ImportEvidence>();\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue;\n const source = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n if (!clause) continue;\n if (clause.name) imports.set(clause.name.text, { importedName: 'default', source });\n const named = clause.namedBindings;\n if (named && ts.isNamedImports(named)) {\n for (const element of named.elements) imports.set(element.name.text, { importedName: element.propertyName?.text ?? element.name.text, source });\n }\n if (named && ts.isNamespaceImport(named)) imports.set(named.name.text, { importedName: '*', source });\n }\n return imports;\n}\nfunction collectLocalArrays(sourceFile: ts.SourceFile, imports: Map<string, ImportEvidence>, seed: Map<string, ClassEvidence[]>, repoPath = '', fromFile = '', context?: RepositorySourceContext): Map<string, ClassEvidence[]> {\n const arrays = new Map(seed);\n for (const statement of sourceFile.statements) {\n if (ts.isVariableStatement(statement)) {\n for (const decl of statement.declarationList.declarations) {\n if (ts.isIdentifier(decl.name) && decl.initializer && ts.isArrayLiteralExpression(decl.initializer)) {\n arrays.set(decl.name.text, resolveArrayLiteral(\n decl.initializer, arrays, imports, repoPath, fromFile, new Set(), context,\n ));\n }\n }\n }\n }\n return arrays;\n}\nfunction resolveArrayExpression(expr: ts.Expression, arrays: Map<string, ClassEvidence[]>, imports: Map<string, ImportEvidence>, repoPath: string, fromFile: string, seen: Set<string>, context?: RepositorySourceContext): ClassEvidence[] {\n if (ts.isArrayLiteralExpression(expr)) return resolveArrayLiteral(expr, arrays, imports, repoPath, fromFile, seen, context);\n if (ts.isIdentifier(expr)) {\n const local = arrays.get(expr.text);\n if (local) return local;\n const evidence = imports.get(expr.text);\n if (evidence && isRelative(evidence.source)) return resolveImportedArray(repoPath, fromFile, evidence, seen, context);\n if (evidence) return [{ className: evidence.importedName === 'default' ? expr.text : evidence.importedName, importSource: `${evidence.source}#${evidence.importedName}` }];\n }\n return [];\n}\nfunction resolveArrayLiteral(array: ts.ArrayLiteralExpression, arrays: Map<string, ClassEvidence[]>, imports: Map<string, ImportEvidence>, repoPath: string, fromFile: string, seen: Set<string>, context?: RepositorySourceContext): ClassEvidence[] {\n const out: ClassEvidence[] = [];\n for (const element of array.elements) {\n if (ts.isSpreadElement(element)) out.push(...resolveArrayExpression(element.expression, arrays, imports, repoPath, fromFile, seen, context));\n else if (ts.isIdentifier(element)) out.push({ className: element.text, importSource: importSourceFor(element.text, imports) });\n }\n return out;\n}\nfunction resolveImportedArray(repoPath: string, fromFile: string, evidence: ImportEvidence, seen: Set<string>, context?: RepositorySourceContext): ClassEvidence[] {\n const moduleFile = resolveRelativeModule(repoPath, fromFile, evidence.source);\n if (!moduleFile) return [];\n const key = `${moduleFile}:${evidence.importedName}`;\n if (seen.has(key) || seen.size > MAX_EXPORT_DEPTH) return [];\n seen.add(key);\n const exports = readExports(repoPath, moduleFile, seen, context);\n if (evidence.importedName === 'default') return exports.defaultArray ?? [];\n return exports.arrays.get(evidence.importedName) ?? exports.arrays.get(exports.aliases.get(evidence.importedName) ?? evidence.importedName) ?? [];\n}\nfunction resolveRelativeModule(repoPath: string, fromFile: string, specifier: string): string | undefined {\n const base = path.resolve(repoPath, path.dirname(fromFile), specifier);\n for (const candidate of [base, `${base}.ts`, `${base}.js`, path.join(base, 'index.ts'), path.join(base, 'index.js')]) {\n try {\n const stat = fsSync.statSync(candidate);\n if (stat.isFile()) return normalizePath(path.relative(repoPath, candidate));\n } catch { /* ignore missing candidate */ }\n }\n return undefined;\n}\nfunction readExports(repoPath: string, filePath: string, seen: Set<string>, context?: RepositorySourceContext): FileExports {\n const absolute = path.join(repoPath, filePath);\n let text: string;\n const snapshot = context?.get(filePath);\n try { text = snapshot?.text ?? fsSync.readFileSync(absolute, 'utf8'); } catch { return { arrays: new Map(), aliases: new Map() }; }\n const sourceFile = snapshot?.sourceFile() ?? ts.createSourceFile(filePath, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const imports = collectImports(sourceFile);\n const arrays = collectLocalArrays(\n sourceFile, imports, new Map(), repoPath, filePath, context,\n );\n const aliases = new Map<string, string>();\n let defaultArray: ClassEvidence[] | undefined;\n for (const statement of sourceFile.statements) {\n if (ts.isExportAssignment(statement) && ts.isIdentifier(statement.expression)) defaultArray = arrays.get(statement.expression.text);\n if (ts.isExportDeclaration(statement) && statement.exportClause && ts.isNamedExports(statement.exportClause)) {\n const module = statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier) ? statement.moduleSpecifier.text : undefined;\n for (const element of statement.exportClause.elements) {\n const local = element.propertyName?.text ?? element.name.text;\n aliases.set(element.name.text, local);\n if (module && isRelative(module)) {\n const imported = resolveImportedArray(\n repoPath, filePath, { source: module, importedName: local }, seen, context,\n );\n if (imported.length > 0) arrays.set(element.name.text, imported);\n }\n }\n }\n }\n return { arrays, defaultArray, aliases };\n}\n","const SENSITIVE = /authorization|cookie|token|secret|password|key|credential/i;\nconst SENSITIVE_KEYWORD = /authorization|cookie|token|secret|password|key|credential/gi;\n\ninterface RedactionSpan {\n readonly start: number;\n readonly end: number;\n readonly keyword: string;\n}\n\nfunction isWhitespace(value: string | undefined): boolean {\n return value !== undefined && /\\s/u.test(value);\n}\n\nfunction redactionSpan(text: string, start: number, keyword: string): RedactionSpan | undefined {\n let cursor = start + keyword.length;\n while (isWhitespace(text[cursor])) cursor += 1;\n if (text[cursor] !== ':' && text[cursor] !== '=') return undefined;\n cursor += 1;\n while (isWhitespace(text[cursor])) cursor += 1;\n const candidateQuote = text[cursor];\n const quote = candidateQuote === \"'\" || candidateQuote === '\"' || candidateQuote === '`'\n ? candidateQuote\n : undefined;\n if (quote !== undefined) cursor += 1;\n const valueStart = cursor;\n while (cursor < text.length && !/[,'\"`}\\s]/u.test(text[cursor] ?? '')) cursor += 1;\n if (cursor === valueStart) return undefined;\n if (quote !== undefined) {\n if (text[cursor] !== quote) return undefined;\n cursor += 1;\n }\n return { start, end: cursor, keyword };\n}\n\nexport function redactText(text: string): string {\n let cursor = 0;\n let output = '';\n for (const match of text.matchAll(SENSITIVE_KEYWORD)) {\n const start = match.index ?? 0;\n if (start < cursor) continue;\n const span = redactionSpan(text, start, match[0]);\n if (span === undefined) continue;\n output += text.slice(cursor, span.start) + `${span.keyword}: [REDACTED]`;\n cursor = span.end;\n }\n return output + text.slice(cursor);\n}\nexport function redactValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactValue);\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value))\n out[k] = SENSITIVE.test(k) ? '[REDACTED]' : redactValue(v);\n return out;\n }\n return typeof value === 'string' ? redactText(value) : value;\n}\nexport function summarizeExpression(text: string): string {\n return redactText(text).slice(0, 240);\n}\n","import path from 'node:path';\nimport ts from 'typescript';\nimport type { ServiceBindingFact } from '../types.js';\nimport { normalizePath } from '../utils/path-utils.js';\nimport {\n importsFor,\n lineOf,\n readSource,\n type ClassHelperReturn,\n type HelperBinding,\n} from './service-binding-parser-helpers.js';\nimport {\n collectReturnedObjectBindings,\n directConnectFact,\n directConnectFactFromFunctionLike,\n functionLikeInitializer,\n type LocalBindingFact,\n} from './014-service-binding-helper-flow.js';\nimport { collectServiceBindings } from './015-service-binding-collector.js';\nimport type { RepositorySourceContext } from './ts-project.js';\n\ninterface LocalHelperFact extends LocalBindingFact {\n sourceLine: number;\n returnedProperty?: string;\n}\n\nfunction directlyExportedNames(statement: ts.Statement): string[] {\n const direct = ts.canHaveModifiers(statement)\n && (ts.getModifiers(statement)?.some((modifier) =>\n modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false);\n if (!direct) return [];\n if (ts.isFunctionDeclaration(statement) && statement.name)\n return [statement.name.text];\n if (!ts.isVariableStatement(statement)) return [];\n return statement.declarationList.declarations.flatMap((declaration) =>\n ts.isIdentifier(declaration.name) ? [declaration.name.text] : []);\n}\n\nfunction namedExports(statement: ts.Statement): Array<{\n exportedName: string;\n localName: string;\n}> {\n if (!ts.isExportDeclaration(statement)\n || !statement.exportClause\n || !ts.isNamedExports(statement.exportClause)) return [];\n return statement.exportClause.elements.map((element) => ({\n exportedName: element.name.text,\n localName: element.propertyName?.text ?? element.name.text,\n }));\n}\n\nfunction exportedLocalNames(source: ts.SourceFile): Map<string, string> {\n const exports = new Map<string, string>();\n for (const statement of source.statements) {\n for (const name of directlyExportedNames(statement))\n exports.set(name, name);\n for (const entry of namedExports(statement))\n exports.set(entry.exportedName, entry.localName);\n }\n return exports;\n}\n\nfunction recordFunctionFacts(\n facts: Map<string, LocalHelperFact>,\n localName: string,\n node: ts.Node,\n helper: ts.FunctionLikeDeclaration,\n source: ts.SourceFile,\n): void {\n const sourceLine = lineOf(source, node);\n const direct = directConnectFactFromFunctionLike(helper);\n if (direct) facts.set(localName, { ...direct, sourceLine });\n for (const [returnedProperty, fact] of collectReturnedObjectBindings(helper))\n facts.set(`${localName}#${returnedProperty}`, {\n ...fact,\n returnedProperty,\n sourceLine,\n });\n}\n\nfunction localHelperFacts(source: ts.SourceFile): Map<string, LocalHelperFact> {\n const facts = new Map<string, LocalHelperFact>();\n for (const statement of source.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name)\n recordFunctionFacts(\n facts, statement.name.text, statement, statement, source,\n );\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer)\n continue;\n const helper = functionLikeInitializer(declaration.initializer);\n if (helper)\n recordFunctionFacts(\n facts, declaration.name.text, declaration, helper, source,\n );\n else {\n const fact = directConnectFact(declaration.initializer);\n if (fact)\n facts.set(declaration.name.text, {\n ...fact,\n sourceLine: lineOf(source, declaration),\n });\n }\n }\n }\n return facts;\n}\n\nfunction exportedHelperFacts(\n source: ts.SourceFile,\n filePath: string,\n): HelperBinding[] {\n const facts = localHelperFacts(source);\n const output: HelperBinding[] = [];\n for (const [exportedName, localName] of exportedLocalNames(source))\n for (const [key, fact] of facts) {\n const [factLocal, returnedProperty] = key.split('#');\n if (factLocal !== localName) continue;\n output.push({\n ...fact,\n exportedName,\n returnedProperty,\n sourceFile: normalizePath(filePath),\n });\n }\n return output;\n}\n\nasync function helperBindings(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n): Promise<HelperBinding[]> {\n const source = await readSource(\n path.join(repoPath, filePath), context, filePath,\n );\n return source ? exportedHelperFacts(source, filePath) : [];\n}\n\nfunction classHelperFacts(\n source: ts.SourceFile,\n className: string,\n helperName: string,\n helper: ts.FunctionLikeDeclaration,\n): ClassHelperReturn[] {\n return [...collectReturnedObjectBindings(helper)].map(\n ([propertyName, fact]) => ({\n className,\n helperName,\n propertyName,\n variableName: propertyName,\n fact,\n sourceLine: lineOf(source, helper),\n }),\n );\n}\n\nfunction collectClassHelpers(source: ts.SourceFile): ClassHelperReturn[] {\n const helpers: ClassHelperReturn[] = [];\n for (const statement of source.statements) {\n if (!ts.isClassDeclaration(statement) || !statement.name) continue;\n for (const member of statement.members) {\n if (!ts.isPropertyDeclaration(member)\n || !ts.isIdentifier(member.name)\n || !member.initializer) continue;\n const helper = functionLikeInitializer(member.initializer);\n if (helper)\n helpers.push(...classHelperFacts(\n source, statement.name.text, member.name.text, helper,\n ));\n }\n }\n return helpers;\n}\n\nexport async function parseServiceBindings(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n): Promise<ServiceBindingFact[]> {\n const source = await readSource(\n path.join(repoPath, filePath), context, filePath,\n );\n if (!source) return [];\n return collectServiceBindings({\n source,\n filePath,\n imports: await importsFor(repoPath, filePath, source),\n classHelpers: collectClassHelpers(source),\n loadHelperBindings: async (helperFile) =>\n helperBindings(repoPath, helperFile, context),\n });\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport { normalizePath } from '../utils/path-utils.js';\nimport { extractPlaceholderKeys } from '../utils/001-placeholders.js';\nimport type { RepositorySourceContext } from './ts-project.js';\n\nexport interface HelperBinding {\n exportedName: string;\n returnedProperty?: string;\n alias?: string;\n aliasExpr?: string;\n destinationExpr?: string;\n servicePathExpr?: string;\n isDynamic: boolean;\n placeholders: string[];\n helperChain?: Array<Record<string, unknown>>;\n sourceFile: string;\n sourceLine: number;\n}\nexport interface ImportBinding {\n localName: string;\n exportedName: string;\n sourceFile?: string;\n}\nexport interface ClassHelperReturn {\n className: string;\n helperName: string;\n propertyName: string;\n variableName: string;\n fact: Omit<HelperBinding, 'exportedName' | 'sourceFile' | 'sourceLine'>;\n sourceLine: number;\n}\n\nexport function lineOf(sf: ts.SourceFile, node: ts.Node): number {\n return sf.getLineAndCharacterOfPosition(node.getStart(sf)).line + 1;\n}\n\nfunction stringValue(node: ts.Expression | undefined): string | undefined {\n if (!node) return undefined;\n if (ts.isStringLiteralLike(node) || ts.isNoSubstitutionTemplateLiteral(node)) return node.text;\n if (ts.isTemplateExpression(node)) return node.getText().replace(/^`|`$/g, '');\n return node.getText();\n}\n\nfunction placeholders(value?: string): string[] {\n return extractPlaceholderKeys(value);\n}\n\ntype ConnectFact = Omit<\n HelperBinding,\n 'exportedName' | 'sourceFile' | 'sourceLine'\n>;\n\nfunction connectMethod(\n call: ts.CallExpression,\n): 'to' | 'messaging' | undefined {\n const expression = call.expression;\n if (!ts.isPropertyAccessExpression(expression)\n || !['to', 'messaging'].includes(expression.name.text)) return undefined;\n const receiver = expression.expression;\n if (!ts.isPropertyAccessExpression(receiver)\n || receiver.name.text !== 'connect'\n || receiver.expression.getText() !== 'cds') return undefined;\n return expression.name.text === 'messaging' ? 'messaging' : 'to';\n}\n\nfunction connectObject(\n first: ts.Expression,\n second: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | undefined {\n if (ts.isObjectLiteralExpression(first)) return first;\n return second && ts.isObjectLiteralExpression(second)\n ? second\n : undefined;\n}\n\nfunction connectNames(\n method: 'to' | 'messaging',\n first: ts.Expression,\n): { alias?: string; aliasExpr?: string } {\n if (ts.isStringLiteralLike(first)\n || ts.isNoSubstitutionTemplateLiteral(first))\n return { alias: first.text };\n if (ts.isObjectLiteralExpression(first))\n return method === 'messaging' ? { alias: 'messaging' } : {};\n return { aliasExpr: stringValue(first) };\n}\n\nfunction literalConnectFact(\n first: ts.Expression,\n object: ts.ObjectLiteralExpression | undefined,\n): ConnectFact | undefined {\n if (object || (!ts.isStringLiteralLike(first)\n && !ts.isNoSubstitutionTemplateLiteral(first))) return undefined;\n return { alias: first.text, isDynamic: false, placeholders: [] };\n}\n\nfunction dynamicConnectFact(\n placeholdersFound: readonly string[],\n expressions: { destinationExpr?: string; servicePathExpr?: string },\n): boolean {\n return placeholdersFound.length > 0\n || (!expressions.destinationExpr && !expressions.servicePathExpr);\n}\n\nexport function connectFactFromCall(\n call: ts.CallExpression,\n): ConnectFact | undefined {\n const method = connectMethod(call);\n if (!method) return undefined;\n const first = call.arguments[0];\n if (!first)\n return method === 'messaging'\n ? { alias: 'messaging', isDynamic: false, placeholders: [] }\n : undefined;\n const second = call.arguments[1];\n const objectArg = connectObject(first, second);\n const names = connectNames(method, first);\n const literal = literalConnectFact(first, objectArg);\n if (literal) return literal;\n if (!objectArg && names.aliasExpr) return {\n aliasExpr: names.aliasExpr,\n isDynamic: true,\n placeholders: placeholders(names.aliasExpr),\n };\n const expressions = objectArg ? objectExpressions(objectArg) : {};\n const ph = [\n ...placeholders(names.aliasExpr ?? names.alias),\n ...placeholders(expressions.destinationExpr),\n ...placeholders(expressions.servicePathExpr),\n ];\n return {\n ...names,\n ...expressions,\n isDynamic: dynamicConnectFact(ph, expressions),\n placeholders: ph,\n };\n}\n\nfunction objectExpressions(objectArg: ts.ObjectLiteralExpression): { destinationExpr?: string; servicePathExpr?: string } {\n const out: { destinationExpr?: string; servicePathExpr?: string } = {};\n function visitObject(obj: ts.ObjectLiteralExpression): void {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const name = ts.isIdentifier(prop.name) || ts.isStringLiteralLike(prop.name) ? prop.name.text : undefined;\n if (name === 'destination') out.destinationExpr = stringValue(prop.initializer);\n if (name === 'path' || name === 'servicePath') out.servicePathExpr = stringValue(prop.initializer);\n if (ts.isObjectLiteralExpression(prop.initializer)) visitObject(prop.initializer);\n }\n }\n visitObject(objectArg);\n return out;\n}\n\nexport function unwrapCall(expr: ts.Expression): ts.CallExpression | undefined {\n if (ts.isAwaitExpression(expr)) return unwrapCall(expr.expression);\n if (ts.isParenthesizedExpression(expr)) return unwrapCall(expr.expression);\n if (ts.isAsExpression(expr) || ts.isSatisfiesExpression(expr)) return unwrapCall(expr.expression);\n if (ts.isTypeAssertionExpression(expr)) return unwrapCall(expr.expression);\n if (ts.isCallExpression(expr)) return expr;\n return undefined;\n}\n\nexport function unwrapIdentityExpression(expr: ts.Expression): ts.Expression {\n if (ts.isAwaitExpression(expr)) return unwrapIdentityExpression(expr.expression);\n if (ts.isParenthesizedExpression(expr)) return unwrapIdentityExpression(expr.expression);\n if (ts.isAsExpression(expr) || ts.isSatisfiesExpression(expr)) return unwrapIdentityExpression(expr.expression);\n if (ts.isTypeAssertionExpression(expr)) return unwrapIdentityExpression(expr.expression);\n return expr;\n}\n\nexport function transactionReceiverName(expr: ts.Expression): string | undefined {\n const call = unwrapCall(expr);\n if (call && ts.isPropertyAccessExpression(call.expression) && ['tx', 'transaction'].includes(call.expression.name.text) && ts.isIdentifier(call.expression.expression)) return call.expression.expression.text;\n const unwrapped = unwrapIdentityExpression(expr);\n if (!ts.isConditionalExpression(unwrapped)) return undefined;\n const left = transactionReceiverName(unwrapped.whenTrue);\n const right = transactionReceiverName(unwrapped.whenFalse);\n return left && left === right ? left : undefined;\n}\n\nexport function findConnectInExpression(expr: ts.Expression): Omit<HelperBinding, 'exportedName' | 'sourceFile' | 'sourceLine'> | undefined {\n const direct = unwrapCall(expr);\n if (direct) {\n const fact = connectFactFromCall(direct);\n if (fact) return fact;\n }\n let found: Omit<HelperBinding, 'exportedName' | 'sourceFile' | 'sourceLine'> | undefined;\n function visit(node: ts.Node): void {\n if (found) return;\n if (ts.isCallExpression(node)) found = connectFactFromCall(node);\n if (!found) ts.forEachChild(node, visit);\n }\n visit(expr);\n return found;\n}\n\nexport async function readSource(\n abs: string,\n context?: RepositorySourceContext,\n filePath?: string,\n): Promise<ts.SourceFile | undefined> {\n const snapshot = filePath ? context?.get(filePath) : undefined;\n if (snapshot) return snapshot.sourceFile();\n try {\n const text = await fs.readFile(abs, 'utf8');\n return ts.createSourceFile(abs, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n } catch {\n return undefined;\n }\n}\n\nasync function resolveImport(repoPath: string, fromFile: string, spec: string): Promise<string | undefined> {\n if (!spec.startsWith('.')) return undefined;\n const rawBase = path.resolve(repoPath, path.dirname(fromFile), spec);\n const parsed = path.parse(rawBase);\n const base = ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'].includes(parsed.ext) ? path.join(parsed.dir, parsed.name) : rawBase;\n for (const candidate of [base, `${base}.ts`, `${base}.js`, path.join(base, 'index.ts'), path.join(base, 'index.js')]) {\n const stat = await fs.stat(candidate).catch(() => undefined);\n if (stat?.isFile()) return normalizePath(path.relative(repoPath, candidate));\n }\n return undefined;\n}\n\nexport async function importsFor(repoPath: string, filePath: string, sf: ts.SourceFile): Promise<ImportBinding[]> {\n const imports: ImportBinding[] = [];\n for (const stmt of sf.statements) {\n if (!ts.isImportDeclaration(stmt) || !ts.isStringLiteralLike(stmt.moduleSpecifier)) continue;\n const sourceFile = await resolveImport(repoPath, filePath, stmt.moduleSpecifier.text);\n const clause = stmt.importClause;\n if (!clause) continue;\n if (clause.name) imports.push({ localName: clause.name.text, exportedName: 'default', sourceFile });\n const bindings = clause.namedBindings;\n if (bindings && ts.isNamedImports(bindings))\n for (const el of bindings.elements) imports.push({ localName: el.name.text, exportedName: el.propertyName?.text ?? el.name.text, sourceFile });\n }\n return imports;\n}\n","import ts from 'typescript';\n\nexport interface PlaceholderSpan {\n readonly start: number;\n readonly end: number;\n readonly key: string;\n}\n\nexport type PlaceholderScanReason =\n | 'placeholder_expression_empty'\n | 'placeholder_delimiter_mismatch'\n | 'placeholder_token_unterminated'\n | 'placeholder_unterminated';\n\nexport interface PlaceholderScanResult {\n readonly status: 'balanced' | 'malformed';\n readonly spans: readonly PlaceholderSpan[];\n readonly reason?: PlaceholderScanReason;\n readonly failureOffset?: number;\n}\n\ntype Delimiter = 'brace' | 'bracket' | 'paren' | 'template';\n\ninterface PlaceholderMatch {\n readonly span?: PlaceholderSpan;\n readonly reason?: PlaceholderScanReason;\n readonly failureOffset?: number;\n}\n\nconst expressionEndTokens = new Set<ts.SyntaxKind>([\n ts.SyntaxKind.Identifier,\n ts.SyntaxKind.PrivateIdentifier,\n ts.SyntaxKind.NumericLiteral,\n ts.SyntaxKind.BigIntLiteral,\n ts.SyntaxKind.StringLiteral,\n ts.SyntaxKind.RegularExpressionLiteral,\n ts.SyntaxKind.NoSubstitutionTemplateLiteral,\n ts.SyntaxKind.TemplateTail,\n ts.SyntaxKind.TrueKeyword,\n ts.SyntaxKind.FalseKeyword,\n ts.SyntaxKind.NullKeyword,\n ts.SyntaxKind.ThisKeyword,\n ts.SyntaxKind.SuperKeyword,\n ts.SyntaxKind.CloseBraceToken,\n ts.SyntaxKind.CloseBracketToken,\n ts.SyntaxKind.CloseParenToken,\n ts.SyntaxKind.PlusPlusToken,\n ts.SyntaxKind.MinusMinusToken,\n]);\n\nexport function scanPlaceholderStructure(\n value: string | undefined,\n): PlaceholderScanResult {\n const input = value ?? '';\n const spans: PlaceholderSpan[] = [];\n let cursor = 0;\n while (cursor < input.length) {\n const start = input.indexOf('${', cursor);\n if (start < 0) break;\n const match = scanPlaceholderAt(input, start);\n if (!match.span) {\n return {\n status: 'malformed', spans: [], reason: match.reason,\n failureOffset: match.failureOffset,\n };\n }\n spans.push(match.span);\n cursor = match.span.end;\n }\n return { status: 'balanced', spans };\n}\n\nexport function scanPlaceholders(\n value: string | undefined,\n): readonly PlaceholderSpan[] {\n const result = scanPlaceholderStructure(value);\n return result.status === 'balanced' ? result.spans : [];\n}\n\nexport function extractPlaceholderKeys(value: string | undefined): string[] {\n return scanPlaceholders(value)\n .map((span) => span.key.trim())\n .filter(Boolean);\n}\n\nfunction scanPlaceholderAt(input: string, start: number): PlaceholderMatch {\n const bodyOffset = start + 2;\n if (input.indexOf('}', bodyOffset) < 0)\n return { reason: 'placeholder_unterminated', failureOffset: start };\n const scanner = ts.createScanner(\n ts.ScriptTarget.Latest,\n false,\n ts.LanguageVariant.Standard,\n input.slice(bodyOffset),\n );\n const delimiters: Delimiter[] = [];\n let previousEndsExpression = false;\n while (true) {\n const scanned = scanToken(scanner, previousEndsExpression);\n if (scanner.isUnterminated())\n return failedMatch('placeholder_token_unterminated', bodyOffset, scanner);\n if (scanned === ts.SyntaxKind.EndOfFileToken)\n return failedMatch('placeholder_unterminated', bodyOffset, scanner);\n if (isTrivia(scanned)) continue;\n const result = consumeDelimiter(scanner, scanned, delimiters);\n if (result.reason)\n return failedMatch(result.reason, bodyOffset, scanner);\n if (result.closed) {\n const end = bodyOffset + scanner.getTextPos();\n const key = input.slice(bodyOffset, end - 1);\n return key.trim()\n ? { span: { start, end, key } }\n : { reason: 'placeholder_expression_empty', failureOffset: start };\n }\n previousEndsExpression = tokenEndsExpression(\n result.token, previousEndsExpression,\n );\n }\n}\n\nfunction scanToken(\n scanner: ts.Scanner,\n previousEndsExpression: boolean,\n): ts.SyntaxKind {\n const token = scanner.scan();\n if ((token === ts.SyntaxKind.SlashToken\n || token === ts.SyntaxKind.SlashEqualsToken)\n && !previousEndsExpression)\n return scanner.reScanSlashToken();\n return token;\n}\n\nfunction consumeDelimiter(\n scanner: ts.Scanner,\n token: ts.SyntaxKind,\n stack: Delimiter[],\n): { token: ts.SyntaxKind; closed?: boolean; reason?: PlaceholderScanReason } {\n if (token === ts.SyntaxKind.TemplateHead) stack.push('template');\n else if (token === ts.SyntaxKind.OpenBraceToken) stack.push('brace');\n else if (token === ts.SyntaxKind.OpenBracketToken) stack.push('bracket');\n else if (token === ts.SyntaxKind.OpenParenToken) stack.push('paren');\n else if (token === ts.SyntaxKind.CloseBracketToken)\n return closeDelimiter(token, stack, 'bracket');\n else if (token === ts.SyntaxKind.CloseParenToken)\n return closeDelimiter(token, stack, 'paren');\n else if (token === ts.SyntaxKind.CloseBraceToken)\n return closeBrace(scanner, stack);\n return { token };\n}\n\nfunction closeDelimiter(\n token: ts.SyntaxKind,\n stack: Delimiter[],\n expected: Delimiter,\n): { token: ts.SyntaxKind; reason?: PlaceholderScanReason } {\n if (stack.at(-1) !== expected)\n return { token, reason: 'placeholder_delimiter_mismatch' };\n stack.pop();\n return { token };\n}\n\nfunction closeBrace(\n scanner: ts.Scanner,\n stack: Delimiter[],\n): { token: ts.SyntaxKind; closed?: boolean; reason?: PlaceholderScanReason } {\n const current = stack.at(-1);\n if (!current) return { token: ts.SyntaxKind.CloseBraceToken, closed: true };\n if (current === 'brace') {\n stack.pop();\n return { token: ts.SyntaxKind.CloseBraceToken };\n }\n if (current !== 'template')\n return {\n token: ts.SyntaxKind.CloseBraceToken,\n reason: 'placeholder_delimiter_mismatch',\n };\n const token = scanner.reScanTemplateToken(false);\n if (token === ts.SyntaxKind.TemplateTail) stack.pop();\n if (token !== ts.SyntaxKind.TemplateTail\n && token !== ts.SyntaxKind.TemplateMiddle)\n return { token, reason: 'placeholder_token_unterminated' };\n return { token };\n}\n\nfunction failedMatch(\n reason: PlaceholderScanReason,\n bodyOffset: number,\n scanner: ts.Scanner,\n): PlaceholderMatch {\n return {\n reason,\n failureOffset: bodyOffset + scanner.getTokenPos(),\n };\n}\n\nfunction tokenEndsExpression(\n token: ts.SyntaxKind,\n previousEndsExpression: boolean,\n): boolean {\n if (token === ts.SyntaxKind.ExclamationToken)\n return previousEndsExpression;\n return expressionEndTokens.has(token);\n}\n\nfunction isTrivia(token: ts.SyntaxKind): boolean {\n return token >= ts.SyntaxKind.FirstTriviaToken\n && token <= ts.SyntaxKind.LastTriviaToken;\n}\n","import ts from 'typescript';\nimport {\n connectFactFromCall,\n transactionReceiverName,\n unwrapCall,\n unwrapIdentityExpression,\n type HelperBinding,\n} from './service-binding-parser-helpers.js';\nimport {\n createBindingLexicalIndex,\n type BindingLexicalIndex,\n type BindingSiteCandidate,\n type VisibleBinding,\n} from './011-binding-lexical-scope.js';\nimport { selectVisibleBinding } from './021-binding-visibility.js';\n\nexport type LocalBindingFact = Omit<\n HelperBinding,\n 'exportedName' | 'sourceFile' | 'sourceLine'\n>;\n\nexport function directConnectFact(\n expression: ts.Expression,\n): LocalBindingFact | undefined {\n const call = unwrapCall(expression);\n return call ? connectFactFromCall(call) : undefined;\n}\n\nexport function bindingValueAtSite<T>(\n variableName: string,\n node: ts.Node,\n source: ts.SourceFile,\n value: T,\n): BindingSiteCandidate<T> {\n return {\n variableName,\n bindingSiteStartOffset: node.getStart(source),\n bindingSiteEndOffset: node.getEnd(),\n value,\n };\n}\n\nexport function arrayBindingName(\n element: ts.ArrayBindingElement | undefined,\n): string | undefined {\n return element && ts.isBindingElement(element)\n && !element.dotDotDotToken && ts.isIdentifier(element.name)\n ? element.name.text\n : undefined;\n}\n\nexport function arrayAssignmentName(\n element: ts.Expression | undefined,\n): string | undefined {\n return element && !ts.isOmittedExpression(element)\n && !ts.isSpreadElement(element) && ts.isIdentifier(element)\n ? element.text\n : undefined;\n}\n\nfunction deterministicLocalSource(\n selected: VisibleBinding<LocalBindingFact>,\n): LocalBindingFact | undefined {\n if (selected.status !== 'resolved') return undefined;\n if (!selected.site?.deterministic) return undefined;\n if (selected.declarationSite?.declarationKind === 'var') return undefined;\n return selected.candidate?.value;\n}\n\nfunction aliasLocalFact(\n sourceName: string,\n targetName: string,\n node: ts.Node,\n index: BindingLexicalIndex,\n bindings: readonly BindingSiteCandidate<LocalBindingFact>[],\n transaction: boolean,\n): BindingSiteCandidate<LocalBindingFact> | undefined {\n const source = deterministicLocalSource(\n selectVisibleBinding(index, bindings, sourceName, node),\n );\n if (!source) return undefined;\n const helperChain = [...(source.helperChain ?? []), {\n aliasOf: sourceName,\n callerVariable: targetName,\n aliasKind: transaction ? 'transaction' : 'identity',\n scopeRule: 'exact_lexical_scope',\n ...(transaction ? { transactionAliasSource: sourceName } : {}),\n }];\n return bindingValueAtSite(\n targetName, node, index.source, { ...source, helperChain },\n );\n}\n\nfunction localAliasSource(initializer: ts.Expression): {\n sourceName?: string;\n transaction: boolean;\n} {\n const transaction = transactionReceiverName(initializer);\n if (transaction) return { sourceName: transaction, transaction: true };\n const unwrapped = unwrapIdentityExpression(initializer);\n return {\n sourceName: ts.isIdentifier(unwrapped) ? unwrapped.text : undefined,\n transaction: false,\n };\n}\n\nfunction localFactCandidate(\n node: ts.Node,\n source: ts.SourceFile,\n index: BindingLexicalIndex,\n bindings: readonly BindingSiteCandidate<LocalBindingFact>[],\n): BindingSiteCandidate<LocalBindingFact> | undefined {\n if (!ts.isVariableDeclaration(node)\n || !ts.isIdentifier(node.name) || !node.initializer) return undefined;\n const fact = directConnectFact(node.initializer);\n if (fact) return bindingValueAtSite(node.name.text, node, source, fact);\n const alias = localAliasSource(node.initializer);\n return alias.sourceName\n ? aliasLocalFact(\n alias.sourceName, node.name.text, node, index,\n bindings, alias.transaction,\n )\n : undefined;\n}\n\nfunction collectLocalBindingFacts(\n fn: ts.FunctionLikeDeclaration,\n): BindingSiteCandidate<LocalBindingFact>[] {\n const source = fn.getSourceFile();\n const index = createBindingLexicalIndex(source);\n const bindings: BindingSiteCandidate<LocalBindingFact>[] = [];\n function visit(node: ts.Node): void {\n if (node !== fn && (ts.isFunctionDeclaration(node)\n || ts.isArrowFunction(node) || ts.isFunctionExpression(node))) return;\n const row = localFactCandidate(node, source, index, bindings);\n if (row) bindings.push(row);\n ts.forEachChild(node, visit);\n }\n visit(fn);\n return bindings;\n}\n\nfunction returnedProperty(\n property: ts.ObjectLiteralElementLike,\n): { propertyName?: string; variableName?: string } {\n if (ts.isShorthandPropertyAssignment(property))\n return {\n propertyName: property.name.text,\n variableName: property.name.text,\n };\n if (!ts.isPropertyAssignment(property)\n || !ts.isIdentifier(property.initializer)) return {};\n const propertyName = ts.isIdentifier(property.name)\n || ts.isStringLiteralLike(property.name)\n ? property.name.text\n : undefined;\n return { propertyName, variableName: property.initializer.text };\n}\n\nfunction branchDependent(node: ts.Node, fn: ts.FunctionLikeDeclaration): boolean {\n let current: ts.Node | undefined = node.parent;\n while (current && current !== fn) {\n if (ts.isIfStatement(current) || ts.isConditionalExpression(current)\n || ts.isSwitchStatement(current) || ts.isIterationStatement(current, false)\n || ts.isTryStatement(current)) return true;\n current = current.parent;\n }\n return false;\n}\n\nfunction singleReturn(\n fn: ts.FunctionLikeDeclaration,\n): ts.ReturnStatement | undefined {\n const returns: ts.ReturnStatement[] = [];\n function visit(node: ts.Node): void {\n if (node !== fn && (ts.isFunctionDeclaration(node)\n || ts.isArrowFunction(node) || ts.isFunctionExpression(node))) return;\n if (ts.isReturnStatement(node)) returns.push(node);\n else ts.forEachChild(node, visit);\n }\n visit(fn);\n const returned = returns.length === 1 ? returns[0] : undefined;\n return returned && !branchDependent(returned, fn) ? returned : undefined;\n}\n\nexport function collectReturnedObjectBindings(\n fn: ts.FunctionLikeDeclaration,\n): Map<string, LocalBindingFact> {\n const index = createBindingLexicalIndex(fn.getSourceFile());\n const bindings = collectLocalBindingFacts(fn);\n const out = new Map<string, LocalBindingFact>();\n const returned = singleReturn(fn)?.expression;\n if (!returned || !ts.isObjectLiteralExpression(returned)) return out;\n for (const property of returned.properties) {\n const names = returnedProperty(property);\n if (!names.propertyName || !names.variableName) continue;\n const selected = selectVisibleBinding(\n index, bindings, names.variableName, property,\n );\n const fact = deterministicLocalSource(selected);\n if (fact) out.set(names.propertyName, fact);\n }\n return out;\n}\n\nexport function functionLikeInitializer(\n expression: ts.Expression | undefined,\n): ts.FunctionLikeDeclaration | undefined {\n return expression && (ts.isArrowFunction(expression)\n || ts.isFunctionExpression(expression))\n ? expression\n : undefined;\n}\n\nfunction directReturnConnectFact(\n fn: ts.FunctionLikeDeclaration,\n): LocalBindingFact | undefined {\n const index = createBindingLexicalIndex(fn.getSourceFile());\n const bindings = collectLocalBindingFacts(fn);\n const returned = singleReturn(fn)?.expression;\n if (!returned) return undefined;\n if (ts.isIdentifier(returned)) {\n const selected = selectVisibleBinding(\n index, bindings, returned.text, returned,\n );\n return selected.site?.deterministic\n && selected.declarationSite?.declarationKind !== 'var'\n ? selected.candidate?.value\n : undefined;\n }\n return directConnectFact(returned);\n}\n\nexport function directConnectFactFromFunctionLike(\n fn: ts.FunctionLikeDeclaration,\n): LocalBindingFact | undefined {\n if (ts.isArrowFunction(fn) && fn.body && !ts.isBlock(fn.body))\n return directConnectFact(fn.body);\n return directReturnConnectFact(fn);\n}\n","import ts from 'typescript';\nimport type { LexicalScopeFact } from '../types.js';\nimport {\n bindingAssignmentEntries,\n type BindingAssignmentEntry,\n} from './019-binding-assignment-targets.js';\n\nexport type BindingDeclarationKind =\n | 'const'\n | 'let'\n | 'var'\n | 'parameter'\n | 'catch'\n | 'value_shadow';\n\nexport interface BindingLexicalSite {\n variableName: string;\n node: ts.Node;\n startOffset: number;\n endOffset: number;\n flow: 'declaration' | 'assignment' | 'shadow';\n declarationKind?: BindingDeclarationKind;\n aliasSource?: string;\n aliasKind?: 'identity'\n | 'identity-assignment'\n | 'transaction'\n | 'array-destructuring';\n aliasArrayIndex?: number;\n aliasPromiseAll?: boolean;\n deterministic: boolean;\n scopeChain: LexicalScopeFact[];\n executionScope: LexicalScopeFact;\n caseClauseStartOffset?: number;\n caseClauseEndOffset?: number;\n declarationKey?: string;\n}\n\nexport interface BindingSiteCandidate<T> {\n variableName: string;\n bindingSiteStartOffset?: number;\n bindingSiteEndOffset?: number;\n value: T;\n}\n\nexport interface BindingLexicalIndex {\n source: ts.SourceFile;\n sites: BindingLexicalSite[];\n}\n\nexport interface VisibleBinding<T> {\n status: 'resolved' | 'ambiguous' | 'unresolved';\n reason?: 'binding_not_found'\n | 'binding_declared_after_call'\n | 'unsupported_reaching_assignment'\n | 'unsupported_var_binding'\n | 'binding_flow_unsupported';\n candidate?: BindingSiteCandidate<T>;\n site?: BindingLexicalSite;\n declarationSite?: BindingLexicalSite;\n scopeIndex?: number;\n}\n\nfunction unwrapIdentity(expression: ts.Expression): ts.Expression {\n if (ts.isParenthesizedExpression(expression)\n || ts.isAwaitExpression(expression)\n || ts.isAsExpression(expression)\n || ts.isSatisfiesExpression(expression)\n || ts.isTypeAssertionExpression(expression))\n return unwrapIdentity(expression.expression);\n return expression;\n}\n\nfunction transactionSource(expression: ts.Expression | undefined): string | undefined {\n if (!expression) return undefined;\n const unwrapped = unwrapIdentity(expression);\n if (ts.isConditionalExpression(unwrapped)) {\n const left = transactionSource(unwrapped.whenTrue);\n const right = transactionSource(unwrapped.whenFalse);\n return left && left === right ? left : undefined;\n }\n if (!ts.isCallExpression(unwrapped)\n || !ts.isPropertyAccessExpression(unwrapped.expression)) return undefined;\n const receiver = unwrapped.expression;\n return ['tx', 'transaction'].includes(receiver.name.text)\n && ts.isIdentifier(receiver.expression)\n ? receiver.expression.text\n : undefined;\n}\n\nfunction directAlias(expression: ts.Expression | undefined): string | undefined {\n if (!expression) return undefined;\n const unwrapped = unwrapIdentity(expression);\n return ts.isIdentifier(unwrapped)\n ? unwrapped.text\n : transactionSource(unwrapped);\n}\n\nfunction scopeKind(node: ts.Node): LexicalScopeFact['kind'] | undefined {\n if (ts.isSourceFile(node)) return 'source_file';\n if (ts.isModuleBlock(node)) return 'module_block';\n if (ts.isFunctionLike(node)) return 'function';\n if (ts.isClassLike(node)) return 'class';\n if (ts.isIterationStatement(node, false)) return 'loop';\n if (ts.isCaseBlock(node)) return 'case_block';\n if (ts.isBlock(node)) return 'block';\n return ts.isCatchClause(node) ? 'catch' : undefined;\n}\n\nfunction lexicalScope(node: ts.Node, source: ts.SourceFile): LexicalScopeFact | undefined {\n const kind = scopeKind(node);\n if (!kind) return undefined;\n return {\n kind,\n startOffset: ts.isSourceFile(node) ? 0 : node.getStart(source),\n endOffset: node.getEnd(),\n };\n}\n\nexport function lexicalScopeChain(\n node: ts.Node,\n source: ts.SourceFile,\n): LexicalScopeFact[] {\n const scopes: LexicalScopeFact[] = [];\n let current: ts.Node | undefined = node;\n while (current) {\n const scope = lexicalScope(current, source);\n if (scope) scopes.push(scope);\n current = current.parent;\n }\n return scopes.reverse();\n}\n\nexport function sameScope(\n left: LexicalScopeFact,\n right: LexicalScopeFact,\n): boolean {\n return left.kind === right.kind\n && left.startOffset === right.startOffset\n && left.endOffset === right.endOffset;\n}\n\nexport function executionScope(\n chain: readonly LexicalScopeFact[],\n): LexicalScopeFact {\n return [...chain].reverse().find((scope) =>\n scope.kind === 'function' || scope.kind === 'source_file')\n ?? { kind: 'source_file', startOffset: 0, endOffset: 0 };\n}\n\nfunction declarationKind(node: ts.VariableDeclaration): BindingDeclarationKind {\n const flags = node.parent.flags;\n if ((flags & ts.NodeFlags.Const) !== 0) return 'const';\n return (flags & ts.NodeFlags.Let) !== 0 ? 'let' : 'var';\n}\n\nconst shortCircuitOperators = new Set<ts.SyntaxKind>([\n ts.SyntaxKind.AmpersandAmpersandToken,\n ts.SyntaxKind.BarBarToken,\n ts.SyntaxKind.QuestionQuestionToken,\n ts.SyntaxKind.AmpersandAmpersandEqualsToken,\n ts.SyntaxKind.BarBarEqualsToken,\n ts.SyntaxKind.QuestionQuestionEqualsToken,\n]);\n\nfunction shortCircuitRightBranch(\n descendant: ts.Node,\n node: ts.Node,\n): boolean {\n return ts.isBinaryExpression(node)\n && shortCircuitOperators.has(node.operatorToken.kind)\n && descendant.pos >= node.right.pos\n && descendant.end <= node.right.end;\n}\n\nfunction optionalChainAncestor(node: ts.Node): boolean {\n return (ts.isCallExpression(node)\n || ts.isPropertyAccessExpression(node)\n || ts.isElementAccessExpression(node))\n && Boolean(node.questionDotToken);\n}\n\nfunction deferredClassInitializer(node: ts.Node): boolean {\n return ts.isPropertyDeclaration(node)\n && (ts.getCombinedModifierFlags(node)\n & ts.ModifierFlags.Static) === 0;\n}\n\nfunction controlFlowAncestor(node: ts.Node): boolean {\n return ts.isIfStatement(node)\n || ts.isConditionalExpression(node)\n || ts.isSwitchStatement(node)\n || ts.isIterationStatement(node, false)\n || ts.isTryStatement(node)\n || deferredClassInitializer(node);\n}\n\nfunction branchDependent(node: ts.Node): boolean {\n let descendant = node;\n let current: ts.Node | undefined = node.parent;\n while (current && !ts.isSourceFile(current) && !ts.isFunctionLike(current)) {\n if (controlFlowAncestor(current)\n || shortCircuitRightBranch(descendant, current)\n || optionalChainAncestor(current)) return true;\n descendant = current;\n current = current.parent;\n }\n return false;\n}\n\nfunction bindingEntries(name: ts.BindingName): Array<{\n variableName: string;\n element?: ts.BindingElement;\n arrayIndex?: number;\n}> {\n if (ts.isIdentifier(name)) return [{ variableName: name.text }];\n return name.elements.flatMap((element, arrayIndex) =>\n ts.isBindingElement(element)\n ? bindingEntries(element.name).map((entry) => ({\n ...entry,\n element,\n ...(ts.isArrayBindingPattern(name) ? { arrayIndex } : {}),\n }))\n : []);\n}\n\nfunction arrayContainer(\n expression: ts.Expression | undefined,\n): { array: ts.ArrayLiteralExpression; promiseAll: boolean } | undefined {\n if (!expression) return undefined;\n const unwrapped = unwrapIdentity(expression);\n if (ts.isArrayLiteralExpression(unwrapped))\n return { array: unwrapped, promiseAll: false };\n if (!ts.isCallExpression(unwrapped)\n || !ts.isPropertyAccessExpression(unwrapped.expression)\n || unwrapped.expression.name.text !== 'all'\n || unwrapped.expression.expression.getText() !== 'Promise') return undefined;\n const first = unwrapped.arguments[0];\n if (!first) return undefined;\n const container = unwrapIdentity(first);\n return ts.isArrayLiteralExpression(container)\n ? { array: container, promiseAll: true }\n : undefined;\n}\n\nfunction entryAlias(\n node: ts.VariableDeclaration,\n entry: {\n variableName: string;\n element?: ts.BindingElement;\n arrayIndex?: number;\n },\n): string | undefined {\n if (!entry.element) return directAlias(node.initializer);\n if (!ts.isArrayBindingPattern(node.name)) return undefined;\n const expression = entry.arrayIndex === undefined\n ? undefined\n : arrayContainer(node.initializer)?.array.elements[entry.arrayIndex];\n return expression && !ts.isOmittedExpression(expression)\n ? directAlias(expression)\n : undefined;\n}\n\nfunction siteBase(\n source: ts.SourceFile,\n node: ts.Node,\n): Pick<BindingLexicalSite, 'node' | 'startOffset' | 'endOffset'\n | 'scopeChain' | 'executionScope'\n | 'caseClauseStartOffset' | 'caseClauseEndOffset'> {\n const scopeChain = lexicalScopeChain(node, source);\n const clause = enclosingCaseClause(node);\n return {\n node,\n startOffset: node.getStart(source),\n endOffset: node.getEnd(),\n scopeChain,\n executionScope: executionScope(scopeChain),\n caseClauseStartOffset: clause?.getStart(source),\n caseClauseEndOffset: clause?.getEnd(),\n };\n}\n\nexport function enclosingCaseClause(\n node: ts.Node,\n): ts.CaseClause | ts.DefaultClause | undefined {\n let current: ts.Node | undefined = node.parent;\n while (current && !ts.isSourceFile(current)\n && !ts.isFunctionLike(current)) {\n if (ts.isCaseClause(current) || ts.isDefaultClause(current))\n return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction hoistedVarSiteBase(\n source: ts.SourceFile,\n node: ts.Node,\n): ReturnType<typeof siteBase> {\n const full = lexicalScopeChain(node, source);\n const scope = executionScope(full);\n const scopeIndex = full.findIndex((item) => sameScope(item, scope));\n return {\n node,\n startOffset: node.getStart(source),\n endOffset: node.getEnd(),\n scopeChain: full.slice(0, scopeIndex + 1),\n executionScope: scope,\n caseClauseStartOffset: undefined,\n caseClauseEndOffset: undefined,\n };\n}\n\nfunction declarationSites(\n source: ts.SourceFile,\n node: ts.VariableDeclaration,\n): BindingLexicalSite[] {\n const kind = declarationKind(node);\n const base = kind === 'var'\n ? hoistedVarSiteBase(source, node)\n : siteBase(source, node);\n return bindingEntries(node.name).map((entry) => {\n const aliasSource = entryAlias(node, entry);\n const transaction = !entry.element\n && transactionSource(node.initializer) === aliasSource;\n return {\n ...base,\n variableName: entry.variableName,\n flow: 'declaration',\n declarationKind: kind,\n aliasSource,\n aliasKind: aliasSource\n ? entry.arrayIndex === undefined\n ? transaction ? 'transaction' : 'identity'\n : 'array-destructuring'\n : undefined,\n aliasArrayIndex: entry.arrayIndex,\n aliasPromiseAll: entry.arrayIndex === undefined\n ? undefined\n : arrayContainer(node.initializer)?.promiseAll,\n deterministic: declarationKind(node) !== 'var',\n };\n });\n}\n\nfunction assignmentAlias(\n node: ts.BinaryExpression,\n entry: BindingAssignmentEntry,\n): string | undefined {\n if (entry.unsupported) return undefined;\n if (entry.arrayIndex === undefined) return directAlias(node.right);\n const expression = arrayContainer(node.right)?.array.elements[entry.arrayIndex];\n return expression && !ts.isOmittedExpression(expression)\n ? directAlias(expression)\n : undefined;\n}\n\nfunction assignmentSites(\n source: ts.SourceFile,\n node: ts.BinaryExpression,\n): BindingLexicalSite[] {\n const base = siteBase(source, node);\n return bindingAssignmentEntries(node.left).map((entry) => {\n const aliasSource = assignmentAlias(node, entry);\n const transaction = entry.arrayIndex === undefined\n && transactionSource(node.right) === aliasSource;\n return {\n ...base,\n variableName: entry.variableName,\n flow: 'assignment',\n aliasSource,\n aliasKind: aliasSource\n ? entry.arrayIndex === undefined\n ? transaction ? 'transaction' : 'identity-assignment'\n : 'array-destructuring'\n : undefined,\n aliasArrayIndex: entry.arrayIndex,\n aliasPromiseAll: entry.arrayIndex === undefined\n ? undefined\n : arrayContainer(node.right)?.promiseAll,\n deterministic: !entry.unsupported\n && !shortCircuitOperators.has(node.operatorToken.kind)\n && !branchDependent(node),\n };\n });\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment\n && kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction isMutationUnary(\n node: ts.PrefixUnaryExpression | ts.PostfixUnaryExpression,\n): boolean {\n return node.operator === ts.SyntaxKind.PlusPlusToken\n || node.operator === ts.SyntaxKind.MinusMinusToken;\n}\n\nfunction parameterSites(\n source: ts.SourceFile,\n node: ts.ParameterDeclaration,\n): BindingLexicalSite[] {\n const base = siteBase(source, node.parent);\n return bindingEntries(node.name).map(({ variableName }) => ({\n ...base,\n node,\n startOffset: node.getStart(source),\n endOffset: node.getEnd(),\n variableName,\n flow: 'declaration',\n declarationKind: 'parameter',\n deterministic: true,\n }));\n}\n\nfunction shadowSite(\n source: ts.SourceFile,\n name: ts.Identifier,\n scopeNode: ts.Node,\n): BindingLexicalSite {\n const base = siteBase(source, scopeNode);\n return {\n ...base,\n node: name,\n startOffset: name.getStart(source),\n endOffset: name.getEnd(),\n variableName: name.text,\n flow: 'shadow',\n declarationKind: 'value_shadow',\n deterministic: false,\n };\n}\n\nfunction declarationShadowName(node: ts.Node): ts.Identifier | undefined {\n if (ts.isFunctionDeclaration(node)) return node.name;\n if (ts.isClassDeclaration(node)) return node.name;\n return ts.isEnumDeclaration(node) ? node.name : undefined;\n}\n\nfunction expressionShadowName(node: ts.Node): ts.Identifier | undefined {\n if (ts.isFunctionExpression(node)) return node.name;\n return ts.isClassExpression(node) ? node.name : undefined;\n}\n\nfunction valueShadowSites(\n source: ts.SourceFile,\n node: ts.Node,\n): BindingLexicalSite[] {\n const declaration = declarationShadowName(node);\n if (declaration)\n return [shadowSite(source, declaration, node.parent)];\n if (ts.isModuleDeclaration(node) && ts.isIdentifier(node.name))\n return [shadowSite(source, node.name, node.parent)];\n if (ts.isImportEqualsDeclaration(node))\n return [shadowSite(source, node.name, node.parent)];\n const expression = expressionShadowName(node);\n if (expression) return [shadowSite(source, expression, node)];\n return [];\n}\n\nfunction mutationSite(\n source: ts.SourceFile,\n expression: ts.Expression,\n): BindingLexicalSite[] {\n if (!ts.isIdentifier(expression)) return [];\n return [{\n ...siteBase(source, expression),\n variableName: expression.text,\n flow: 'assignment',\n deterministic: false,\n }];\n}\n\nfunction loopWriteSites(\n source: ts.SourceFile,\n node: ts.ForInOrOfStatement,\n): BindingLexicalSite[] {\n return ts.isVariableDeclarationList(node.initializer)\n ? []\n : bindingAssignmentEntries(node.initializer).map((entry) => ({\n ...siteBase(source, node.initializer),\n variableName: entry.variableName,\n flow: 'assignment',\n deterministic: false,\n }));\n}\n\nfunction collectSites(source: ts.SourceFile): BindingLexicalSite[] {\n const sites: BindingLexicalSite[] = [];\n const visit = (node: ts.Node): void => {\n sites.push(...valueShadowSites(source, node));\n if (ts.isVariableDeclaration(node))\n sites.push(...declarationSites(source, node));\n if (ts.isParameter(node))\n sites.push(...parameterSites(source, node));\n if (ts.isBinaryExpression(node)\n && isAssignmentOperator(node.operatorToken.kind))\n sites.push(...assignmentSites(source, node));\n if (ts.isForInStatement(node) || ts.isForOfStatement(node))\n sites.push(...loopWriteSites(source, node));\n if ((ts.isPrefixUnaryExpression(node)\n || ts.isPostfixUnaryExpression(node)) && isMutationUnary(node))\n sites.push(...mutationSite(source, node.operand));\n ts.forEachChild(node, visit);\n };\n visit(source);\n return sites.sort((left, right) =>\n left.startOffset - right.startOffset || left.endOffset - right.endOffset);\n}\n\nfunction declarationKey(site: BindingLexicalSite): string {\n return [\n site.variableName,\n site.startOffset,\n site.endOffset,\n site.declarationKind,\n ].join('\\u0000');\n}\n\nexport function declarationAt(\n sites: readonly BindingLexicalSite[],\n variableName: string,\n useStart: number,\n useChain: readonly LexicalScopeFact[],\n): { site?: BindingLexicalSite; scopeIndex?: number; after: boolean; ambiguous: boolean } {\n const declarations = sites.flatMap((site) => {\n if (!['declaration', 'shadow'].includes(site.flow)\n || site.variableName !== variableName) return [];\n const scope = site.scopeChain.at(-1);\n const scopeIndex = scope\n ? useChain.findIndex((candidate) => sameScope(candidate, scope))\n : -1;\n return scopeIndex >= 0 ? [{ site, scopeIndex }] : [];\n });\n const deepest = Math.max(-1, ...declarations.map((item) => item.scopeIndex));\n const nearest = declarations.filter((item) => item.scopeIndex === deepest);\n if (nearest.length === 0) return { after: false, ambiguous: false };\n if (nearest.length > 1)\n return { after: false, ambiguous: true, scopeIndex: deepest };\n const site = nearest[0]?.site;\n return {\n site,\n scopeIndex: deepest,\n after: Boolean(site && site.declarationKind !== 'var'\n && site.startOffset >= useStart),\n ambiguous: false,\n };\n}\n\nfunction attachDeclarationKeys(sites: BindingLexicalSite[]): void {\n for (const site of sites) {\n if (site.flow === 'declaration' || site.flow === 'shadow') {\n site.declarationKey = declarationKey(site);\n continue;\n }\n const selected = declarationAt(\n sites, site.variableName, site.startOffset, site.scopeChain,\n );\n if (selected.site && !selected.after && !selected.ambiguous)\n site.declarationKey = declarationKey(selected.site);\n }\n}\n\nexport function createBindingLexicalIndex(\n source: ts.SourceFile,\n): BindingLexicalIndex {\n const sites = collectSites(source);\n attachDeclarationKeys(sites);\n return { source, sites };\n}\n\nexport function bindingSite(\n index: BindingLexicalIndex,\n variableName: string,\n startOffset: number,\n endOffset: number,\n): BindingLexicalSite | undefined {\n const matches = index.sites.filter((site) =>\n site.variableName === variableName\n && site.startOffset === startOffset\n && site.endOffset === endOffset);\n return matches.length === 1 ? matches[0] : undefined;\n}\n","import ts from 'typescript';\n\nexport interface BindingAssignmentEntry {\n variableName: string;\n arrayIndex?: number;\n unsupported?: boolean;\n}\n\nfunction unsupported(\n entries: readonly BindingAssignmentEntry[],\n): BindingAssignmentEntry[] {\n return entries.map((entry) => ({\n ...entry,\n arrayIndex: undefined,\n unsupported: true,\n }));\n}\n\nfunction objectEntries(\n property: ts.ObjectLiteralElementLike,\n): BindingAssignmentEntry[] {\n if (ts.isShorthandPropertyAssignment(property))\n return [{ variableName: property.name.text }];\n if (ts.isSpreadAssignment(property))\n return unsupported(bindingAssignmentEntries(property.expression));\n if (!ts.isPropertyAssignment(property)) return [];\n if (ts.isIdentifier(property.initializer))\n return [{ variableName: property.initializer.text }];\n return unsupported(bindingAssignmentEntries(property.initializer));\n}\n\nfunction arrayEntries(\n element: ts.Expression | ts.OmittedExpression,\n arrayIndex: number,\n): BindingAssignmentEntry[] {\n if (ts.isOmittedExpression(element)) return [];\n if (ts.isIdentifier(element))\n return [{ variableName: element.text, arrayIndex }];\n return unsupported(bindingAssignmentEntries(element));\n}\n\nfunction assignmentTarget(\n expression: ts.Expression,\n): { expression: ts.Expression; unsupported: boolean } {\n if (ts.isParenthesizedExpression(expression))\n return assignmentTarget(expression.expression);\n if (ts.isAsExpression(expression)\n || ts.isSatisfiesExpression(expression)\n || ts.isTypeAssertionExpression(expression)\n || ts.isNonNullExpression(expression)) {\n const target = assignmentTarget(expression.expression);\n return { expression: target.expression, unsupported: true };\n }\n if (ts.isBinaryExpression(expression)\n && expression.operatorToken.kind === ts.SyntaxKind.EqualsToken) {\n const target = assignmentTarget(expression.left);\n return { expression: target.expression, unsupported: true };\n }\n return { expression, unsupported: false };\n}\n\nexport function bindingAssignmentEntries(\n expression: ts.Expression,\n): BindingAssignmentEntry[] {\n const target = assignmentTarget(expression);\n let entries: BindingAssignmentEntry[] = [];\n if (ts.isIdentifier(target.expression))\n entries = [{ variableName: target.expression.text }];\n if (ts.isObjectLiteralExpression(target.expression))\n entries = target.expression.properties.flatMap(objectEntries);\n if (ts.isArrayLiteralExpression(target.expression))\n entries = target.expression.elements.flatMap(arrayEntries);\n if (ts.isSpreadElement(target.expression))\n entries = unsupported(bindingAssignmentEntries(target.expression.expression));\n return target.unsupported ? unsupported(entries) : entries;\n}\n","import ts from 'typescript';\nimport type { LexicalScopeFact } from '../types.js';\nimport {\n declarationAt,\n enclosingCaseClause,\n executionScope,\n lexicalScopeChain,\n sameScope,\n type BindingLexicalIndex,\n type BindingLexicalSite,\n type BindingSiteCandidate,\n type VisibleBinding,\n} from './011-binding-lexical-scope.js';\n\nfunction reachingSites(\n index: BindingLexicalIndex,\n variableName: string,\n useStart: number,\n useChain: readonly LexicalScopeFact[],\n declaration: BindingLexicalSite,\n): BindingLexicalSite[] {\n const useExecution = executionScope(useChain);\n return index.sites.filter((site) =>\n site.variableName === variableName\n && site.declarationKey === declaration.declarationKey\n && site.startOffset < useStart\n && (site.flow === 'declaration'\n || sameScope(site.executionScope, useExecution)))\n .sort((left, right) =>\n right.startOffset - left.startOffset\n || right.endOffset - left.endOffset);\n}\n\nfunction enclosingLoops(node: ts.Node): ts.IterationStatement[] {\n const loops: ts.IterationStatement[] = [];\n let current: ts.Node | undefined = node.parent;\n while (current && !ts.isSourceFile(current)\n && !ts.isFunctionLike(current)) {\n if (ts.isIterationStatement(current, false)) loops.push(current);\n current = current.parent;\n }\n return loops;\n}\n\nfunction unsupportedAssignmentFlow(\n index: BindingLexicalIndex,\n variableName: string,\n useNode: ts.Node,\n useStart: number,\n useChain: readonly LexicalScopeFact[],\n declaration: BindingLexicalSite,\n): boolean {\n const useExecution = executionScope(useChain);\n const loops = enclosingLoops(useNode);\n return index.sites.some((site) => {\n if (site.flow !== 'assignment'\n || site.variableName !== variableName\n || site.declarationKey !== declaration.declarationKey) return false;\n if (!sameScope(site.executionScope, useExecution)) return true;\n return site.startOffset > useStart && loops.some((loop) =>\n site.node.pos >= loop.pos && site.node.end <= loop.end);\n });\n}\n\nfunction candidatesAtSite<T>(\n candidates: readonly BindingSiteCandidate<T>[],\n site: BindingLexicalSite,\n): BindingSiteCandidate<T>[] {\n return candidates.filter((candidate) =>\n candidate.variableName === site.variableName\n && candidate.bindingSiteStartOffset === site.startOffset\n && candidate.bindingSiteEndOffset === site.endOffset);\n}\n\nfunction compatibleCaseClause(\n site: BindingLexicalSite,\n useNode: ts.Node,\n source: ts.SourceFile,\n): boolean {\n if (site.caseClauseStartOffset === undefined\n || site.caseClauseEndOffset === undefined) return true;\n const clause = enclosingCaseClause(useNode);\n return clause?.getStart(source) === site.caseClauseStartOffset\n && clause.getEnd() === site.caseClauseEndOffset;\n}\n\ntype VisibleBindingReason = NonNullable<VisibleBinding<unknown>['reason']>;\n\nfunction declarationFailure(\n declaration: BindingLexicalSite,\n after: boolean,\n useNode: ts.Node,\n source: ts.SourceFile,\n): VisibleBindingReason | undefined {\n if (declaration.flow === 'shadow') return 'binding_flow_unsupported';\n if (declaration.declarationKind === 'var') return 'unsupported_var_binding';\n if (!compatibleCaseClause(declaration, useNode, source))\n return 'binding_flow_unsupported';\n return after ? 'binding_declared_after_call' : undefined;\n}\n\nfunction matchedBinding<T>(\n candidates: readonly BindingSiteCandidate<T>[],\n site: BindingLexicalSite,\n): VisibleBinding<T> | undefined {\n const matches = candidatesAtSite(candidates, site);\n if (matches.length === 0) return {\n status: 'unresolved',\n reason: site.flow === 'assignment'\n ? 'unsupported_reaching_assignment'\n : 'binding_not_found',\n };\n if (matches.length > 1) return { status: 'ambiguous' };\n return matches[0] ? { status: 'resolved', candidate: matches[0] } : undefined;\n}\n\nexport function selectVisibleBinding<T>(\n index: BindingLexicalIndex,\n candidates: readonly BindingSiteCandidate<T>[],\n variableName: string,\n useNode: ts.Node,\n): VisibleBinding<T> {\n const useStart = useNode.getStart(index.source);\n const useChain = lexicalScopeChain(useNode, index.source);\n const declaration = declarationAt(index.sites, variableName, useStart, useChain);\n if (declaration.ambiguous) return { status: 'ambiguous' };\n if (!declaration.site) return { status: 'unresolved', reason: 'binding_not_found' };\n const failure = declarationFailure(\n declaration.site, declaration.after, useNode, index.source,\n );\n if (failure) return { status: 'unresolved', reason: failure };\n if (unsupportedAssignmentFlow(\n index, variableName, useNode, useStart, useChain, declaration.site,\n )) return {\n status: 'unresolved',\n reason: 'unsupported_reaching_assignment',\n };\n const site = reachingSites(\n index, variableName, useStart, useChain, declaration.site,\n )[0];\n if (!site) return { status: 'unresolved', reason: 'binding_not_found' };\n const matched = matchedBinding(candidates, site);\n if (!matched || matched.status !== 'resolved') return matched ?? {\n status: 'unresolved', reason: 'binding_not_found',\n };\n return {\n ...matched,\n site,\n declarationSite: declaration.site,\n scopeIndex: declaration.scopeIndex,\n };\n}\n","import ts from 'typescript';\nimport type { ServiceBindingFact } from '../types.js';\nimport { normalizePath } from '../utils/path-utils.js';\nimport {\n connectFactFromCall,\n lineOf,\n transactionReceiverName,\n unwrapCall,\n unwrapIdentityExpression,\n type ClassHelperReturn,\n type HelperBinding,\n type ImportBinding,\n} from './service-binding-parser-helpers.js';\nimport {\n createBindingLexicalIndex,\n type BindingLexicalIndex,\n type BindingSiteCandidate,\n} from './011-binding-lexical-scope.js';\nimport { selectVisibleBinding } from './021-binding-visibility.js';\nimport {\n arrayAssignmentName,\n arrayBindingName,\n bindingValueAtSite,\n collectReturnedObjectBindings,\n directConnectFactFromFunctionLike,\n functionLikeInitializer,\n} from './014-service-binding-helper-flow.js';\n\ntype ResolvedHelper = { helper: HelperBinding; imp?: ImportBinding };\ntype BindingEvent = {\n pos: number;\n node: ts.VariableDeclaration | ts.BinaryExpression;\n};\n\nexport interface ServiceBindingCollectorInput {\n source: ts.SourceFile;\n filePath: string;\n imports: ImportBinding[];\n classHelpers: ClassHelperReturn[];\n loadHelperBindings: (filePath: string) => Promise<HelperBinding[]>;\n}\n\nfunction bindingAtSite(\n fact: ServiceBindingFact,\n node: ts.Node,\n source: ts.SourceFile,\n): ServiceBindingFact {\n return {\n ...fact,\n bindingSiteStartOffset: node.getStart(source),\n bindingSiteEndOffset: node.getEnd(),\n };\n}\n\nfunction bindingEvents(source: ts.SourceFile): BindingEvent[] {\n const events: BindingEvent[] = [];\n function visit(node: ts.Node): void {\n if (ts.isVariableDeclaration(node))\n events.push({ pos: node.getStart(source), node });\n if (ts.isBinaryExpression(node)\n && node.operatorToken.kind === ts.SyntaxKind.EqualsToken)\n events.push({ pos: node.getStart(source), node });\n ts.forEachChild(node, visit);\n }\n visit(source);\n return events.sort((left, right) => left.pos - right.pos);\n}\n\nfunction destructuredTarget(\n property: ts.ObjectLiteralElementLike,\n): { propertyName?: string; targetName?: string } {\n if (ts.isShorthandPropertyAssignment(property))\n return {\n propertyName: property.name.text,\n targetName: property.name.text,\n };\n if (!ts.isPropertyAssignment(property)) return {};\n const propertyName = ts.isIdentifier(property.name)\n || ts.isStringLiteralLike(property.name)\n ? property.name.text\n : undefined;\n return {\n propertyName,\n targetName: ts.isIdentifier(property.initializer)\n ? property.initializer.text\n : undefined,\n };\n}\n\nclass ServiceBindingCollector {\n private readonly sourceFile: string;\n private readonly lexicalIndex: BindingLexicalIndex;\n private readonly out: ServiceBindingFact[] = [];\n private readonly helperCache = new Map<string, HelperBinding[]>();\n private readonly localObjectHelpers = new Map<string, HelperBinding[]>();\n private readonly localDirectHelpers = new Map<string, HelperBinding>();\n private readonly objectHelperVariables: Array<BindingSiteCandidate<\n ResolvedHelper[]\n >> = [];\n\n constructor(private readonly input: ServiceBindingCollectorInput) {\n this.sourceFile = normalizePath(input.filePath);\n this.lexicalIndex = createBindingLexicalIndex(input.source);\n }\n\n async collect(): Promise<ServiceBindingFact[]> {\n this.collectLocalHelpers();\n for (const event of bindingEvents(this.input.source))\n if (ts.isVariableDeclaration(event.node))\n await this.recordDeclaration(event.node);\n else\n await this.recordAssignment(event.node);\n return this.out;\n }\n\n private helperFact(\n name: string,\n node: ts.Node,\n helper: ts.FunctionLikeDeclaration,\n ): void {\n const direct = directConnectFactFromFunctionLike(helper);\n if (direct)\n this.localDirectHelpers.set(name, {\n ...direct,\n exportedName: name,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n });\n const rows = [...collectReturnedObjectBindings(helper)]\n .map(([returnedProperty, fact]): HelperBinding => ({\n ...fact,\n exportedName: name,\n returnedProperty,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n }));\n if (rows.length > 0) this.localObjectHelpers.set(name, rows);\n }\n\n private collectLocalHelpers(): void {\n for (const statement of this.input.source.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name)\n this.helperFact(statement.name.text, statement, statement);\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue;\n const helper = functionLikeInitializer(declaration.initializer);\n if (helper) this.helperFact(\n declaration.name.text, declaration, helper,\n );\n }\n }\n }\n\n private async importedHelpers(localName: string): Promise<ResolvedHelper[]> {\n const imported = this.input.imports.find((item) =>\n item.localName === localName && item.sourceFile);\n if (!imported?.sourceFile) return [];\n if (!this.helperCache.has(imported.sourceFile))\n this.helperCache.set(\n imported.sourceFile,\n await this.input.loadHelperBindings(imported.sourceFile),\n );\n return (this.helperCache.get(imported.sourceFile) ?? [])\n .filter((helper) => helper.exportedName === imported.exportedName)\n .map((helper) => ({ imp: imported, helper }));\n }\n\n private async importedHelper(localName: string): Promise<ResolvedHelper | undefined> {\n return (await this.importedHelpers(localName))\n .find((row) => !row.helper.returnedProperty);\n }\n\n private bindingCandidates(): Array<BindingSiteCandidate<ServiceBindingFact>> {\n return this.out.map((fact) => ({\n variableName: fact.variableName,\n bindingSiteStartOffset: fact.bindingSiteStartOffset,\n bindingSiteEndOffset: fact.bindingSiteEndOffset,\n value: fact,\n }));\n }\n\n private bindingForVariable(\n variableName: string,\n node: ts.Node,\n ): ServiceBindingFact | undefined {\n const selected = selectVisibleBinding(\n this.lexicalIndex, this.bindingCandidates(), variableName, node,\n );\n if (!selected.site?.deterministic\n || selected.declarationSite?.declarationKind === 'var') return undefined;\n return selected.candidate?.value;\n }\n\n private cloneAlias(\n targetName: string,\n sourceName: string,\n aliasKind: 'identity' | 'identity-assignment' | 'transaction',\n node: ts.Node,\n ): void {\n const existing = this.bindingForVariable(sourceName, node);\n if (!existing) return;\n const helperChain = [...(existing.helperChain ?? []), {\n callerVariable: targetName,\n aliasOf: sourceName,\n aliasKind,\n scopeRule: 'exact_lexical_scope',\n ...(aliasKind === 'transaction'\n ? { transactionAliasSource: sourceName }\n : {}),\n }];\n this.out.push(bindingAtSite({\n ...existing,\n variableName: targetName,\n sourceLine: lineOf(this.input.source, node),\n helperChain,\n }, node, this.input.source));\n }\n\n private recordIdentityAlias(declaration: ts.VariableDeclaration): void {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) return;\n const source = unwrapIdentityExpression(declaration.initializer);\n if (ts.isIdentifier(source))\n this.cloneAlias(\n declaration.name.text, source.text, 'identity', declaration,\n );\n }\n\n private directBinding(\n targetName: string,\n call: ts.CallExpression,\n node: ts.Node,\n flow: 'declaration' | 'assignment',\n ): boolean {\n const direct = connectFactFromCall(call);\n if (!direct) return false;\n const helperChain = flow === 'assignment'\n ? [{\n callerVariable: targetName,\n assignedFrom: call.expression.getText(this.input.source),\n aliasKind: flow,\n scopeRule: 'exact_lexical_scope',\n }]\n : undefined;\n this.out.push(bindingAtSite({\n variableName: targetName,\n ...direct,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n helperChain,\n }, node, this.input.source));\n return true;\n }\n\n private helperBindingFact(\n targetName: string,\n resolved: ResolvedHelper,\n call: ts.CallExpression,\n node: ts.Node,\n flow: 'declaration' | 'assignment',\n ): ServiceBindingFact {\n const assignment = flow === 'assignment'\n ? {\n assignedFrom: call.expression.getText(this.input.source),\n aliasKind: flow,\n scopeRule: 'exact_lexical_scope',\n }\n : {};\n return {\n variableName: targetName,\n alias: resolved.helper.alias,\n aliasExpr: resolved.helper.aliasExpr,\n destinationExpr: resolved.helper.destinationExpr,\n servicePathExpr: resolved.helper.servicePathExpr,\n isDynamic: resolved.helper.isDynamic,\n placeholders: resolved.helper.placeholders,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n helperChain: [...(resolved.helper.helperChain ?? []), {\n callerVariable: targetName,\n ...assignment,\n importedHelper: call.expression.getText(this.input.source),\n importSource: resolved.imp?.sourceFile,\n exportedSymbol: resolved.imp?.exportedName\n ?? resolved.helper.exportedName,\n helperSourceFile: resolved.helper.sourceFile,\n helperSourceLine: resolved.helper.sourceLine,\n }],\n };\n }\n\n private async recordExpression(\n targetName: string,\n expression: ts.Expression,\n node: ts.Node,\n flow: 'declaration' | 'assignment',\n ): Promise<void> {\n const call = unwrapCall(expression);\n if (!call || this.directBinding(targetName, call, node, flow)) return;\n if (!ts.isIdentifier(call.expression)) return;\n const local = this.localDirectHelpers.get(call.expression.text);\n const resolved = local\n ? { helper: local }\n : await this.importedHelper(call.expression.text);\n if (resolved)\n this.out.push(bindingAtSite(\n this.helperBindingFact(targetName, resolved, call, node, flow),\n node,\n this.input.source,\n ));\n }\n\n private async helpersForCall(call: ts.CallExpression): Promise<ResolvedHelper[]> {\n if (!ts.isIdentifier(call.expression)) return [];\n const local = this.localObjectHelpers.get(call.expression.text) ?? [];\n const imported = await this.importedHelpers(call.expression.text);\n return [...local.map((helper) => ({ helper })), ...imported];\n }\n\n private async rememberObjectHelper(declaration: ts.VariableDeclaration): Promise<void> {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) return;\n const call = unwrapCall(declaration.initializer);\n if (!call) return;\n const helpers = (await this.helpersForCall(call))\n .filter((row) => row.helper.returnedProperty);\n if (helpers.length > 0)\n this.objectHelperVariables.push(bindingValueAtSite(\n declaration.name.text, declaration, this.input.source, helpers,\n ));\n }\n\n private visibleObjectHelpers(variableName: string, node: ts.Node): ResolvedHelper[] {\n const selected = selectVisibleBinding(\n this.lexicalIndex, this.objectHelperVariables, variableName, node,\n );\n if (!selected.site?.deterministic\n || selected.declarationSite?.declarationKind === 'var') return [];\n return selected.candidate?.value ?? [];\n }\n\n private objectPropertyFact(\n targetName: string,\n expression: ts.PropertyAccessExpression,\n resolved: ResolvedHelper,\n node: ts.Node,\n ): ServiceBindingFact {\n return {\n variableName: targetName,\n alias: resolved.helper.alias,\n aliasExpr: resolved.helper.aliasExpr,\n destinationExpr: resolved.helper.destinationExpr,\n servicePathExpr: resolved.helper.servicePathExpr,\n isDynamic: resolved.helper.isDynamic,\n placeholders: resolved.helper.placeholders,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n helperChain: [...(resolved.helper.helperChain ?? []), {\n callerVariable: targetName,\n sourceVariable: expression.expression.getText(this.input.source),\n returnedProperty: expression.name.text,\n assignedFromProperty: expression.getText(this.input.source),\n importSource: resolved.imp?.sourceFile,\n exportedSymbol: resolved.imp?.exportedName,\n helperSourceFile: resolved.helper.sourceFile,\n helperSourceLine: resolved.helper.sourceLine,\n }],\n };\n }\n\n private recordObjectProperty(\n targetName: string,\n expression: ts.Expression,\n node: ts.Node,\n ): boolean {\n const unwrapped = unwrapIdentityExpression(expression);\n if (!ts.isPropertyAccessExpression(unwrapped)\n || !ts.isIdentifier(unwrapped.expression)) return false;\n const matches = this.visibleObjectHelpers(\n unwrapped.expression.text, node,\n ).filter((row) => row.helper.returnedProperty === unwrapped.name.text);\n const resolved = matches.length === 1 ? matches[0] : undefined;\n if (!resolved) return false;\n this.out.push(bindingAtSite(\n this.objectPropertyFact(targetName, unwrapped, resolved, node),\n node,\n this.input.source,\n ));\n return true;\n }\n\n private returnedHelperFact(\n targetName: string,\n propertyName: string,\n resolved: ResolvedHelper,\n call: ts.CallExpression,\n node: ts.Node,\n assignment: boolean,\n ): ServiceBindingFact {\n return {\n variableName: targetName,\n alias: resolved.helper.alias,\n aliasExpr: resolved.helper.aliasExpr,\n destinationExpr: resolved.helper.destinationExpr,\n servicePathExpr: resolved.helper.servicePathExpr,\n isDynamic: resolved.helper.isDynamic,\n placeholders: resolved.helper.placeholders,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, node),\n helperChain: [...(resolved.helper.helperChain ?? []), {\n callerVariable: targetName,\n ...(assignment ? {\n assignedFrom: call.expression.getText(this.input.source),\n aliasKind: 'assignment',\n scopeRule: 'exact_lexical_scope',\n } : { helperFunction: call.expression.getText(this.input.source) }),\n returnedProperty: propertyName,\n importSource: resolved.imp?.sourceFile,\n exportedSymbol: resolved.imp?.exportedName,\n helperSourceFile: resolved.helper.sourceFile,\n helperSourceLine: resolved.helper.sourceLine,\n }],\n };\n }\n\n private async recordDestructuredHelper(\n declaration: ts.VariableDeclaration,\n ): Promise<void> {\n if (!ts.isObjectBindingPattern(declaration.name)\n || !declaration.initializer) return;\n const call = unwrapCall(declaration.initializer);\n if (!call) return;\n const helpers = await this.helpersForCall(call);\n for (const element of declaration.name.elements) {\n if (!ts.isIdentifier(element.name)) continue;\n const propertyName = element.propertyName\n && ts.isIdentifier(element.propertyName)\n ? element.propertyName.text\n : element.name.text;\n const matches = helpers.filter((row) =>\n row.helper.returnedProperty === propertyName);\n const resolved = matches.length === 1 ? matches[0] : undefined;\n if (resolved)\n this.out.push(bindingAtSite(\n this.returnedHelperFact(\n element.name.text, propertyName, resolved,\n call, declaration, false,\n ),\n declaration,\n this.input.source,\n ));\n }\n }\n\n private async recordDestructuredAssignment(\n pattern: ts.ObjectLiteralExpression,\n expression: ts.Expression,\n node: ts.Node,\n ): Promise<void> {\n const call = unwrapCall(expression);\n if (!call) return;\n const helpers = await this.helpersForCall(call);\n for (const property of pattern.properties) {\n const target = destructuredTarget(property);\n if (!target.propertyName || !target.targetName) continue;\n const matches = helpers.filter((row) =>\n row.helper.returnedProperty === target.propertyName);\n const resolved = matches.length === 1 ? matches[0] : undefined;\n if (resolved)\n this.out.push(bindingAtSite(\n this.returnedHelperFact(\n target.targetName, target.propertyName, resolved,\n call, node, true,\n ),\n node,\n this.input.source,\n ));\n }\n }\n\n private recordClassHelper(declaration: ts.VariableDeclaration): void {\n if (!ts.isObjectBindingPattern(declaration.name)\n || !declaration.initializer) return;\n const call = unwrapCall(declaration.initializer);\n if (!call || !ts.isPropertyAccessExpression(call.expression)\n || call.expression.expression.kind !== ts.SyntaxKind.ThisKeyword) return;\n for (const element of declaration.name.elements)\n this.recordClassHelperElement(\n declaration, element, call.expression.name.text,\n );\n }\n\n private recordClassHelperElement(\n declaration: ts.VariableDeclaration,\n element: ts.BindingElement,\n helperName: string,\n ): void {\n if (!ts.isIdentifier(element.name)) return;\n const propertyName = element.propertyName\n && ts.isIdentifier(element.propertyName)\n ? element.propertyName.text\n : element.name.text;\n const helper = this.input.classHelpers.find((row) =>\n row.helperName === helperName && row.propertyName === propertyName);\n if (!helper) return;\n this.out.push(bindingAtSite({\n variableName: element.name.text,\n ...helper.fact,\n sourceFile: this.sourceFile,\n sourceLine: lineOf(this.input.source, declaration),\n helperChain: [{\n callerVariable: element.name.text,\n className: helper.className,\n classHelper: helper.helperName,\n returnedProperty: helper.propertyName,\n helperVariable: helper.variableName,\n helperSourceFile: this.sourceFile,\n helperSourceLine: helper.sourceLine,\n }],\n }, declaration, this.input.source));\n }\n\n private arrayElements(expression: ts.Expression): {\n elements: ts.NodeArray<ts.Expression>;\n promiseAll: boolean;\n } | undefined {\n const unwrapped = unwrapIdentityExpression(expression);\n if (ts.isArrayLiteralExpression(unwrapped))\n return { elements: unwrapped.elements, promiseAll: false };\n const call = unwrapCall(expression);\n if (!call || !ts.isPropertyAccessExpression(call.expression)\n || call.expression.name.text !== 'all'\n || call.expression.expression.getText(this.input.source) !== 'Promise')\n return undefined;\n const first = call.arguments[0];\n const container = first ? unwrapIdentityExpression(first) : undefined;\n return container && ts.isArrayLiteralExpression(container)\n ? { elements: container.elements, promiseAll: true }\n : undefined;\n }\n\n private appendArrayStep(\n fact: ServiceBindingFact,\n targetName: string,\n arrayIndex: number,\n promiseAll: boolean,\n sourceVariable?: string,\n ): void {\n fact.helperChain = [...(fact.helperChain ?? []), {\n callerVariable: targetName,\n targetVariable: targetName,\n ...(sourceVariable ? {\n sourceVariable,\n aliasKind: 'array-destructuring',\n } : {}),\n arrayIndex,\n promiseAll,\n arrayContainer: promiseAll ? 'Promise.all' : 'array_literal',\n }];\n }\n\n private async recordArrayElement(\n targetName: string,\n expression: ts.Expression,\n node: ts.Node,\n arrayIndex: number,\n promiseAll: boolean,\n ): Promise<void> {\n const before = this.out.length;\n await this.recordExpression(targetName, expression, node, 'declaration');\n const direct = this.out.length > before ? this.out.at(-1) : undefined;\n if (direct) {\n this.appendArrayStep(direct, targetName, arrayIndex, promiseAll);\n return;\n }\n const unwrapped = unwrapIdentityExpression(expression);\n if (!ts.isIdentifier(unwrapped)) return;\n const existing = this.bindingForVariable(unwrapped.text, node);\n if (!existing) return;\n const fact = bindingAtSite({\n ...existing,\n variableName: targetName,\n sourceLine: lineOf(this.input.source, node),\n }, node, this.input.source);\n this.appendArrayStep(\n fact, targetName, arrayIndex, promiseAll, unwrapped.text,\n );\n this.out.push(fact);\n }\n\n private async recordArrayDeclaration(\n declaration: ts.VariableDeclaration,\n ): Promise<void> {\n if (!ts.isArrayBindingPattern(declaration.name)\n || !declaration.initializer) return;\n const container = this.arrayElements(declaration.initializer);\n if (!container) return;\n for (let index = 0; index < declaration.name.elements.length; index += 1) {\n const targetName = arrayBindingName(\n declaration.name.elements[index],\n );\n const expression = container.elements[index];\n if (targetName && expression && !ts.isOmittedExpression(expression))\n await this.recordArrayElement(\n targetName, expression, declaration,\n index, container.promiseAll,\n );\n }\n }\n\n private async recordArrayAssignment(\n pattern: ts.ArrayLiteralExpression,\n expression: ts.Expression,\n node: ts.Node,\n ): Promise<void> {\n const container = this.arrayElements(expression);\n if (!container) return;\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const targetName = arrayAssignmentName(pattern.elements[index]);\n const source = container.elements[index];\n if (!targetName || !source || ts.isOmittedExpression(source)) continue;\n await this.recordArrayElement(\n targetName, source, node, index, container.promiseAll,\n );\n }\n }\n\n private async recordDeclaration(\n declaration: ts.VariableDeclaration,\n ): Promise<void> {\n await this.recordDestructuredHelper(declaration);\n await this.recordArrayDeclaration(declaration);\n this.recordClassHelper(declaration);\n await this.rememberObjectHelper(declaration);\n if (ts.isIdentifier(declaration.name) && declaration.initializer)\n this.recordObjectProperty(\n declaration.name.text, declaration.initializer, declaration,\n );\n if (ts.isIdentifier(declaration.name) && declaration.initializer)\n await this.recordExpression(\n declaration.name.text, declaration.initializer,\n declaration, 'declaration',\n );\n this.recordIdentityAlias(declaration);\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) return;\n const source = transactionReceiverName(declaration.initializer);\n if (source)\n this.cloneAlias(\n declaration.name.text, source, 'transaction', declaration,\n );\n }\n\n private async recordIdentifierAssignment(\n assignment: ts.BinaryExpression,\n ): Promise<void> {\n if (!ts.isIdentifier(assignment.left)) return;\n const right = unwrapIdentityExpression(assignment.right);\n if (ts.isIdentifier(right)) {\n this.cloneAlias(\n assignment.left.text, right.text,\n 'identity-assignment', assignment,\n );\n return;\n }\n if (this.recordObjectProperty(\n assignment.left.text, assignment.right, assignment,\n )) return;\n await this.recordExpression(\n assignment.left.text, assignment.right, assignment, 'assignment',\n );\n }\n\n private async recordAssignment(assignment: ts.BinaryExpression): Promise<void> {\n if (ts.isIdentifier(assignment.left)) {\n await this.recordIdentifierAssignment(assignment);\n return;\n }\n const left = ts.isParenthesizedExpression(assignment.left)\n ? assignment.left.expression\n : assignment.left;\n if (ts.isObjectLiteralExpression(left))\n await this.recordDestructuredAssignment(\n left, assignment.right, assignment,\n );\n if (ts.isArrayLiteralExpression(left))\n await this.recordArrayAssignment(left, assignment.right, assignment);\n }\n}\n\nexport async function collectServiceBindings(\n input: ServiceBindingCollectorInput,\n): Promise<ServiceBindingFact[]> {\n return new ServiceBindingCollector(input).collect();\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport { externalHttpTarget } from '../linker/external-http-target.js';\nimport type { OutboundCallFact, ServiceBindingFact } from '../types.js';\nimport { normalizePath, stripQuotes } from '../utils/path-utils.js';\nimport { summarizeExpression } from '../utils/redaction.js';\nimport { classifyODataPathIntent } from '../linker/odata-path-normalizer.js';\nimport { parseServiceBindings } from './service-binding-parser.js';\nimport { parseImportedWrapperCalls } from './imported-wrapper-parser.js';\nimport {\n directQueryBuilderStatement,\n queryBuilderRoot,\n type DirectQueryBuilderStatement,\n} from './000-direct-query-execution.js';\nimport {\n expressionName,\n maxAliasDepth,\n queryEntityFromAst,\n resolveBinding,\n variableInitializers,\n} from './001-query-entity-resolution.js';\nimport type { RepositorySourceContext } from './ts-project.js';\nimport {\n analyzeOperationPath,\n operationPathExpression,\n pathUnresolvedReason,\n type OperationPathAnalysis,\n} from './operation-path-analysis.js';\nfunction lineOf(text: string, idx: number): number {\n return text.slice(0, idx).split('\\n').length;\n}\nfunction queryBuilderEvidence(source: ts.SourceFile, statement: DirectQueryBuilderStatement): Record<string, unknown> {\n return {\n classifier: 'cap_query_builder_direct',\n queryDispatch: 'direct_query_builder',\n queryRoot: expressionName(statement.root.expression),\n queryRootStartOffset: statement.root.getStart(source),\n queryRootEndOffset: statement.root.getEnd(),\n queryStatementStartOffset: statement.statement.getStart(source),\n queryStatementEndOffset: statement.statement.getEnd(),\n queryExecutionContext: statement.executionContext,\n };\n}\nfunction queryRunEvidence(\n source: ts.SourceFile,\n argument: ts.Expression | undefined,\n): Record<string, unknown> {\n const root = argument ? queryBuilderRoot(argument) : undefined;\n return {\n classifier: 'cap_query_run_wrapper',\n queryDispatch: 'cds_run_wrapper',\n ...(root ? {\n queryRoot: expressionName(root.expression),\n queryRootStartOffset: root.getStart(source),\n queryRootEndOffset: root.getEnd(),\n } : {}),\n };\n}\nfunction queryWarning(expr: string): string {\n if (/^\\s*[`'\"]/.test(expr)) return 'raw_sql_or_cql_expression';\n if (/^\\s*\\w+\\s*$/.test(expr)) return 'query_variable_without_static_initializer';\n return 'dynamic_entity_expression';\n}\nexport interface ClassifiedOutboundCall {\n fact: OutboundCallFact;\n node: ts.CallExpression;\n}\nfunction parserEvidence(source: ts.SourceFile, node: ts.CallExpression, extra?: Record<string, unknown>): Record<string, unknown> {\n return { parser: 'typescript_ast', startOffset: node.getStart(source), endOffset: node.getEnd(), ...extra };\n}\nfunction isStringLike(expr: ts.Expression | undefined): expr is ts.StringLiteral | ts.NoSubstitutionTemplateLiteral {\n return Boolean(expr && (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr)));\n}\nfunction literalText(expr: ts.Expression | undefined): string | undefined {\n if (isStringLike(expr)) return expr.text;\n return undefined;\n}\nconst CDS_LIFECYCLE_EVENTS = new Set([\n 'bootstrap', 'loaded', 'connect', 'serving', 'served', 'listening', 'shutdown',\n]);\nfunction objectPropertyIsShorthand(object: ts.ObjectLiteralExpression, key: string): boolean {\n return object.properties.some((property) => ts.isShorthandPropertyAssignment(property) && property.name.text === key);\n}\nfunction nameOfProperty(name: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) return name.text;\n return undefined;\n}\ntype ExpressionStatus = 'static' | 'dynamic' | 'ambiguous' | 'unknown';\ntype ExpressionSourceKind = 'string_literal' | 'no_substitution_template' | 'template_with_substitutions' | 'const_alias' | 'conditional_candidates' | 'dynamic_expression';\ninterface ExpressionResolution { status: ExpressionStatus; sourceKind: ExpressionSourceKind; value?: string; rawExpression?: string; placeholderKeys: string[]; evidence: string[]; constName?: string }\nfunction safeRaw(expr: ts.Expression): string | undefined {\n if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr) || ts.isIdentifier(expr) || ts.isTemplateExpression(expr)) return expr.getText(expr.getSourceFile());\n return undefined;\n}\nfunction placeholders(expr: ts.TemplateExpression): string[] {\n return expr.templateSpans.map((span) => span.expression.getText(expr.getSourceFile()));\n}\nfunction resolveExpression(expr: ts.Expression | undefined, use: ts.Node, policy: 'operation_path' | 'external' | 'literal', depth = 0, seen = new Set<ts.Node>()): ExpressionResolution {\n if (!expr) return { status: 'unknown', sourceKind: 'dynamic_expression', placeholderKeys: [], evidence: ['expression_missing'] };\n if (ts.isStringLiteral(expr)) return { status: 'static', sourceKind: 'string_literal', value: expr.text, rawExpression: safeRaw(expr), placeholderKeys: [], evidence: ['string_literal'] };\n if (ts.isNoSubstitutionTemplateLiteral(expr)) return { status: 'static', sourceKind: 'no_substitution_template', value: expr.text, rawExpression: safeRaw(expr), placeholderKeys: [], evidence: ['no_substitution_template'] };\n if (ts.isTemplateExpression(expr)) {\n const keys = placeholders(expr);\n if (policy === 'operation_path') return { status: 'dynamic', sourceKind: 'template_with_substitutions', value: stripQuotes(expr.getText(expr.getSourceFile())), rawExpression: safeRaw(expr), placeholderKeys: keys, evidence: ['operation_path_template_placeholders_retained'] };\n return { status: 'dynamic', sourceKind: 'template_with_substitutions', placeholderKeys: keys, evidence: ['template_substitutions_not_static_external_target'] };\n }\n if (ts.isIdentifier(expr)) {\n if (depth >= maxAliasDepth) return { status: 'unknown', sourceKind: 'const_alias', rawExpression: safeRaw(expr), placeholderKeys: [], evidence: ['alias_depth_exceeded'], constName: expr.text };\n const binding = resolveBinding(expr, use);\n if (!binding.declaration || !binding.initializer || !binding.immutable) return { status: 'dynamic', sourceKind: 'dynamic_expression', rawExpression: safeRaw(expr), placeholderKeys: [], evidence: binding.evidence, constName: expr.text };\n if (seen.has(binding.declaration)) return { status: 'unknown', sourceKind: 'const_alias', rawExpression: safeRaw(expr), placeholderKeys: [], evidence: ['alias_cycle_detected'], constName: expr.text };\n seen.add(binding.declaration);\n const resolved = resolveExpression(binding.initializer, binding.declaration, policy, depth + 1, seen);\n return { ...resolved, sourceKind: 'const_alias', rawExpression: safeRaw(expr), constName: expr.text, evidence: [...binding.evidence, ...resolved.evidence] };\n }\n return { status: 'dynamic', sourceKind: 'dynamic_expression', rawExpression: safeRaw(expr), placeholderKeys: [], evidence: [`unsupported_${ts.SyntaxKind[expr.kind] ?? 'expression'}`] };\n}\nfunction staticExpressionText(expr: ts.Expression | undefined, initializers: Map<string, ts.Expression>): string | undefined {\n if (!expr) return undefined;\n if (isStringLike(expr)) return expr.text;\n if (ts.isIdentifier(expr) && initializers.has(expr.text)) return staticExpressionText(initializers.get(expr.text), initializers);\n return undefined;\n}\nfunction operationPathFromStatic(text: string | undefined): string | undefined {\n return text ? `/${stripQuotes(text).replace(/^\\//, '')}` : undefined;\n}\nfunction destinationExpressionShape(expr: ts.Expression | undefined): string | undefined {\n if (!expr) return undefined;\n if (ts.isIdentifier(expr)) return 'identifier';\n if (ts.isPropertyAccessExpression(expr) || ts.isElementAccessExpression(expr)) return 'property_read';\n if (ts.isCallExpression(expr)) return 'function_call';\n if (ts.isConditionalExpression(expr)) return 'conditional';\n if (ts.isBinaryExpression(expr)) return 'binary_expression';\n if (ts.isTemplateExpression(expr)) return 'template_expression';\n return ts.SyntaxKind[expr.kind] ?? 'expression';\n}\nfunction staticConditionalCandidates(expr: ts.Expression | undefined, initializers: Map<string, ts.Expression>): string[] | undefined {\n const resolved = expr && ts.isIdentifier(expr) && initializers.has(expr.text) ? initializers.get(expr.text) : expr;\n if (!resolved || !ts.isConditionalExpression(resolved)) return undefined;\n const left = staticExpressionText(resolved.whenTrue, initializers);\n const right = staticExpressionText(resolved.whenFalse, initializers);\n if (!left || !right) return undefined;\n return [...new Set([left, right])];\n}\nfunction propertyInitializer(object: ts.ObjectLiteralExpression, key: string): ts.Expression | undefined {\n for (const property of object.properties) {\n if (ts.isPropertyAssignment(property) && nameOfProperty(property.name) === key) return property.initializer;\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === key) return property.name;\n }\n return undefined;\n}\nfunction httpMethodFromObject(object: ts.ObjectLiteralExpression, use: ts.Node): string | undefined {\n const text = resolveExpression(propertyInitializer(object, 'method'), use, 'literal').value;\n return text ? stripQuotes(text).toUpperCase() : undefined;\n}\nconst supportedHttpMethods = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD']);\nfunction safeOperationName(value: string | undefined): string | undefined {\n if (!value || !/^[A-Za-z_$][\\w$]*(?:[./][A-Za-z_$][\\w$]*)*$/.test(value)) return undefined;\n return operationPathFromStatic(value);\n}\nfunction wrapperSourceKind(sourceKind: string): string {\n if (sourceKind.includes('const_alias')) return 'const';\n if (sourceKind.includes('template')) return 'template';\n if (sourceKind.includes('string_literal')) return 'literal';\n return sourceKind.includes('conditional') ? 'ambiguous' : 'dynamic';\n}\nfunction literalPathSource(analysis: OperationPathAnalysis): string | undefined {\n if (analysis.status !== 'static') return undefined;\n if (analysis.sourceKind.includes('const_alias')) return 'same_scope_const_initializer';\n if (analysis.sourceKind.includes('no_substitution_template')) return 'template';\n return analysis.sourceKind.includes('string_literal') ? 'literal' : analysis.sourceKind;\n}\nfunction legacyPathCandidates(analysis: OperationPathAnalysis): Record<string, unknown> | undefined {\n if (analysis.candidateRawPaths.length < 2 && analysis.dynamicReassignments.length === 0)\n return undefined;\n return {\n candidatePaths: analysis.candidateRawPaths,\n normalizedCandidateOperations: analysis.candidateNormalizedOperationPaths\n .map((value) => value.replace(/^\\//, '')),\n candidateSourceKind: analysis.sourceKind,\n candidateIdentifier: analysis.candidateIdentifier,\n hasDynamicAssignments: analysis.dynamicReassignments.length > 0,\n conservativeReason: analysis.dynamicReassignments.length > 0\n ? 'dynamic_assignment_observed'\n : 'candidate_tie',\n };\n}\nfunction hasTemplatePlaceholder(value: string): boolean { return /\\$\\{|%7B|%7D/i.test(value); }\nfunction urlTargetFromExpression(expr: ts.Expression | undefined, use: ts.Node): Record<string, unknown> {\n const resolved = resolveExpression(expr, use, 'external');\n if (resolved.status === 'static' && resolved.value && !hasTemplatePlaceholder(resolved.value)) return { kind: 'static_url', expression: resolved.value, dynamic: false, sourceKind: resolved.sourceKind };\n if (expr) return { kind: 'url_expression', dynamic: true, expression: `${resolved.sourceKind}:${resolved.placeholderKeys.join('|')}`, expressionShape: resolved.sourceKind, placeholderKeys: resolved.placeholderKeys };\n return { kind: 'unknown', dynamic: false };\n}\nfunction destinationTargetFromExpression(expr: ts.Expression | undefined, use: ts.Node): Record<string, unknown> | undefined {\n const resolved = resolveExpression(expr, use, 'external');\n const text = resolved.value;\n if (resolved.status === 'static' && text && !hasTemplatePlaceholder(text)) return { kind: 'destination', expression: text, dynamic: false, sourceKind: resolved.sourceKind };\n const candidates = staticConditionalCandidates(expr, new Map<string, ts.Expression>());\n if (candidates) return { kind: 'destination', dynamic: true, expressionShape: 'conditional', candidateLiterals: candidates };\n const shape = destinationExpressionShape(expr);\n if (shape) return { kind: 'destination', dynamic: true, expressionShape: shape };\n return undefined;\n}\nfunction externalHttpEvidence(node: ts.CallExpression, source: ts.SourceFile): { method?: string; externalTarget: Record<string, unknown>; classifier: string; sourceCallShape: string } | undefined {\n const expr = node.expression;\n const exprText = expr.getText(source);\n if (exprText === 'useOrFetchDestination') {\n const objectArg = node.arguments[0];\n if (objectArg && ts.isObjectLiteralExpression(objectArg)) {\n const destination = destinationTargetFromExpression(propertyInitializer(objectArg, 'destinationName'), node);\n return { externalTarget: destination ?? { kind: 'unknown', dynamic: false }, classifier: 'sap_destination_lookup', sourceCallShape: 'useOrFetchDestination' };\n }\n }\n if (exprText === 'executeHttpRequest') {\n const destination = destinationTargetFromExpression(node.arguments[0], node);\n const config = node.arguments[1];\n const method = config && ts.isObjectLiteralExpression(config) ? httpMethodFromObject(config, node) : undefined;\n const url = config && ts.isObjectLiteralExpression(config) ? urlTargetFromExpression(propertyInitializer(config, 'url'), node) : { kind: 'unknown', dynamic: false };\n return { method, externalTarget: destination ? { ...url, destination } : url, classifier: 'sap_execute_http_request', sourceCallShape: 'executeHttpRequest' };\n }\n if (exprText === 'axios') {\n const config = node.arguments[0];\n if (config && ts.isObjectLiteralExpression(config)) {\n const method = httpMethodFromObject(config, node);\n return { method, externalTarget: urlTargetFromExpression(propertyInitializer(config, 'url'), node), classifier: 'axios_config_call', sourceCallShape: 'axios(config)' };\n }\n return { externalTarget: { kind: 'unknown', dynamic: false }, classifier: 'axios_unknown_call', sourceCallShape: 'axios(...)' };\n }\n if (exprText === 'fetch') {\n const init = node.arguments[1];\n const method = init && ts.isObjectLiteralExpression(init) ? httpMethodFromObject(init, node) : undefined;\n return { method, externalTarget: urlTargetFromExpression(node.arguments[0], node), classifier: 'fetch_call', sourceCallShape: 'fetch' };\n }\n if (ts.isPropertyAccessExpression(expr) && ['get','post','put','patch','delete','head'].includes(expr.name.text) && expr.expression.getText(source) === 'axios') {\n return { method: expr.name.text.toUpperCase(), externalTarget: urlTargetFromExpression(node.arguments[0], node), classifier: 'axios_member_call', sourceCallShape: `axios.${expr.name.text}` };\n }\n return undefined;\n}\nfunction collectServiceVariables(source: ts.SourceFile): Set<string> {\n const vars = new Set<string>(['cds', 'messaging', 'messageClient', 'eventClient']);\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n const text = node.initializer.getText(source);\n if (/cds\\.connect\\.(to|messaging)\\s*\\(/.test(text)) vars.add(node.name.text);\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return vars;\n}\nfunction receiverName(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr)) return expr.text;\n if (ts.isPropertyAccessExpression(expr)) return expr.getText(sourceOf(expr));\n return undefined;\n}\nfunction sourceOf(node: ts.Node): ts.SourceFile {\n return node.getSourceFile();\n}\nfunction rootReceiverName(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr)) return expr.text;\n if (ts.isPropertyAccessExpression(expr)) return rootReceiverName(expr.expression);\n if (ts.isCallExpression(expr)) return rootReceiverName(expr.expression);\n return undefined;\n}\nfunction isSupportedEventReceiver(receiver: string | undefined, rootReceiver: string | undefined, serviceVariables: Set<string>): boolean {\n const candidate = rootReceiver ?? receiver;\n if (!candidate) return false;\n if (candidate === 'cds') return true;\n if (serviceVariables.has(candidate)) return true;\n if (receiver && serviceVariables.has(receiver)) return true;\n if (/^(srv|service|serviceClient|messaging|messageClient|eventClient)$/.test(candidate)) return true;\n return false;\n}\ninterface WrapperSpec { clientIndex?: number; clientName?: string; pathIndex: number; methodIndex?: number; methodName?: string; methodLiteral?: string; nestedWrapperFunction?: string; definitionLine: number; internalStart: number; internalEnd: number }\nfunction collectWrapperSpecs(source: ts.SourceFile): Map<string, WrapperSpec> {\n const specs = new Map<string, WrapperSpec>();\n const serviceVariables = collectServiceVariables(source);\n const calledNames = new Set<string>();\n const collectCalls = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression))\n calledNames.add(node.expression.text);\n if (ts.isCallExpression(node) && ts.isCallExpression(node.expression)\n && ts.isIdentifier(node.expression.expression))\n calledNames.add(node.expression.expression.text);\n ts.forEachChild(node, collectCalls);\n };\n collectCalls(source);\n const scanFunction = (name: string, fn: ts.FunctionLikeDeclaration): void => {\n if (!calledNames.has(name) && !isExportedWrapper(fn)) return;\n const params = fn.parameters.map((param) => ts.isIdentifier(param.name) ? param.name.text : undefined);\n const sends: Array<{ client: string; path: string; method?: string; methodLiteral?: string; nestedWrapperFunction?: string; start: number; end: number }> = [];\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === 'send' && ts.isIdentifier(node.expression.expression)) {\n const objectArg = node.arguments[0];\n if (objectArg && ts.isObjectLiteralExpression(objectArg)) {\n const pathProp = propertyInitializer(objectArg, 'path');\n const methodProp = propertyInitializer(objectArg, 'method');\n const pathName = pathProp && ts.isIdentifier(pathProp) ? pathProp.text : undefined;\n const methodName = methodProp && ts.isIdentifier(methodProp) ? methodProp.text : undefined;\n const methodLiteral = resolveExpression(methodProp, node, 'literal').value;\n if (pathName) sends.push({ client: node.expression.expression.text, path: pathName, method: methodName, methodLiteral, start: node.getStart(source), end: node.getEnd() });\n }\n }\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && specs.has(node.expression.text)) {\n const nested = specs.get(node.expression.text);\n const pathArg = nested ? node.arguments[nested.pathIndex] : undefined;\n const clientArg = nested?.clientIndex === undefined ? undefined : node.arguments[nested.clientIndex];\n const pathName = pathArg && ts.isIdentifier(pathArg) ? pathArg.text : undefined;\n const clientName = clientArg && ts.isIdentifier(clientArg) ? clientArg.text : nested?.clientName;\n if (nested && pathName && clientName) sends.push({ client: clientName, path: pathName, method: nested.methodName, methodLiteral: nested.methodLiteral, nestedWrapperFunction: node.expression.text, start: node.getStart(source), end: node.getEnd() });\n }\n ts.forEachChild(node, visit);\n };\n visit(fn);\n if (sends.length !== 1) return;\n const found = sends[0];\n const clientIndex = params.indexOf(found.client);\n const pathIndex = params.indexOf(found.path);\n const methodIndex = found.method ? params.indexOf(found.method) : -1;\n const capturesKnownClient = serviceVariables.has(found.client) || /^(srv|service|serviceClient|client|.*Client)$/.test(found.client);\n if (pathIndex >= 0 && (clientIndex >= 0 || capturesKnownClient)) specs.set(name, { clientIndex: clientIndex >= 0 ? clientIndex : undefined, clientName: clientIndex >= 0 ? undefined : found.client, pathIndex, methodIndex: methodIndex >= 0 ? methodIndex : undefined, methodName: found.method, methodLiteral: found.methodLiteral, nestedWrapperFunction: found.nestedWrapperFunction, definitionLine: lineOf(source.text, fn.getStart(source)), internalStart: found.start, internalEnd: found.end });\n };\n const visitTop = (node: ts.Node): void => {\n if (ts.isFunctionDeclaration(node) && node.name) scanFunction(node.name.text, node);\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))) scanFunction(node.name.text, node.initializer);\n ts.forEachChild(node, visitTop);\n };\n visitTop(source);\n return specs;\n}\nfunction isExportedWrapper(fn: ts.FunctionLikeDeclaration): boolean {\n const declaration = ts.isFunctionDeclaration(fn)\n ? fn\n : ts.isVariableDeclaration(fn.parent)\n ? fn.parent.parent.parent\n : undefined;\n if (!declaration || !ts.canHaveModifiers(declaration)) return false;\n return ts.getModifiers(declaration)?.some((modifier) =>\n modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false;\n}\nexport function classifyOutboundCallsInSource(source: ts.SourceFile, filePath: string): ClassifiedOutboundCall[] {\n const calls: ClassifiedOutboundCall[] = [];\n const sourceFile = normalizePath(filePath);\n const initializers = variableInitializers(source);\n const serviceVariables = collectServiceVariables(source);\n const wrapperSpecs = collectWrapperSpecs(source);\n const wrapperInternalRanges = [...wrapperSpecs.values()].map((spec) => ({ start: spec.internalStart, end: spec.internalEnd }));\n const add = (node: ts.CallExpression, fact: Omit<OutboundCallFact, 'sourceFile' | 'sourceLine' | 'confidence'> & { confidence?: number }, extra?: Record<string, unknown>): void => {\n calls.push({ node, fact: {\n ...fact,\n sourceFile,\n sourceLine: lineOf(source.text, node.getStart(source)),\n callSiteStartOffset: node.getStart(source),\n callSiteEndOffset: node.getEnd(),\n confidence: fact.confidence ?? 0.8,\n evidence: parserEvidence(source, node, extra),\n } });\n };\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n if (wrapperInternalRanges.some((range) => node.getStart(source) >= range.start && node.getEnd() <= range.end)) {\n return;\n }\n const expr = node.expression;\n const exprText = expr.getText(source);\n const directQuery = directQueryBuilderStatement(node);\n if (exprText === 'cds.run') {\n const arg = node.arguments[0];\n const entity = arg ? queryEntityFromAst(arg, initializers) : undefined;\n const payload = arg?.getText(source) ?? '';\n add(node, { callType: 'local_db_query', queryEntity: entity, payloadSummary: summarizeExpression(payload), confidence: entity ? 0.9 : 0.55, unresolvedReason: entity ? undefined : queryWarning(payload) }, queryRunEvidence(source, arg));\n } else if (directQuery) {\n const entity = queryEntityFromAst(directQuery.logicalCall, initializers);\n const payload = directQuery.logicalCall.getText(source);\n add(directQuery.logicalCall, { callType: 'local_db_query', queryEntity: entity, payloadSummary: summarizeExpression(payload), confidence: entity ? 0.9 : 0.55, unresolvedReason: entity ? undefined : queryWarning(payload) }, queryBuilderEvidence(source, directQuery));\n } else if (ts.isPropertyAccessExpression(expr) && expr.name.text === 'send' && (ts.isIdentifier(expr.expression) || ts.isPropertyAccessExpression(expr.expression))) {\n const objectArg = node.arguments[0];\n if (objectArg && ts.isObjectLiteralExpression(objectArg)) {\n const receiver = receiverName(expr.expression);\n const queryExpression = propertyInitializer(objectArg, 'query');\n const methodExpression = propertyInitializer(objectArg, 'method');\n const methodResolution = resolveExpression(methodExpression, node, 'literal');\n const method = stripQuotes(methodResolution.value ?? 'POST');\n const dynamicMethodDefaulted = Boolean(methodExpression && methodResolution.value === undefined);\n const pathExpr = propertyInitializer(objectArg, 'path') ?? propertyInitializer(objectArg, 'event');\n const pathAnalysis = analyzeOperationPath(pathExpr, node, method);\n const op = pathExpr ? operationPathExpression(pathAnalysis) ?? pathExpr.getText(source) : undefined;\n const shorthandPath = objectPropertyIsShorthand(objectArg, 'path');\n const operationPathExpr = operationPathExpression(pathAnalysis);\n const intent = classifyODataPathIntent(operationPathExpr, method);\n const entityCallTypes: Record<string, OutboundCallFact['callType']> = { entity_mutation: 'remote_entity_mutation', entity_delete: 'remote_entity_delete', entity_media: 'remote_entity_media', entity_candidate: 'remote_entity_candidate' };\n const entityCallType = entityCallTypes[intent.kind];\n const isODataQueryRead = method.toUpperCase() === 'GET' && ['entity_query', 'entity_key_read', 'entity_navigation_query'].includes(intent.kind);\n const queryEntity = queryExpression\n ? queryEntityFromAst(queryExpression, initializers)\n : isODataQueryRead ? intent.entitySegment : undefined;\n const unresolvedReason = queryExpression\n ? queryEntity ? undefined : queryWarning(queryExpression.getText(source))\n : pathExpr ? pathUnresolvedReason(pathAnalysis) : undefined;\n add(node, { callType: queryExpression ? 'remote_query' : entityCallType ?? (isODataQueryRead ? 'remote_query' : 'remote_action'), serviceVariableName: receiver, method, operationPathExpr, queryEntity, payloadSummary: summarizeExpression(objectArg.getText(source)), confidence: op || queryExpression ? 0.8 : 0.4, unresolvedReason }, { receiver, classifier: 'service_client_send_object', operationPathExpression: shorthandPath ? op : undefined, rawPathExpression: pathAnalysis.rawExpression, literalPathSource: literalPathSource(pathAnalysis), odataPathIntent: operationPathExpr ? intent : undefined, pathAnalysis, staticPathCandidates: legacyPathCandidates(pathAnalysis), parserWarning: unresolvedReason, ...(dynamicMethodDefaulted ? { dynamicMethodDefaulted: true } : {}) });\n } else {\n const receiver = receiverName(expr.expression);\n const rootReceiver = rootReceiverName(expr.expression);\n const firstArg = resolveExpression(node.arguments[0], node, 'literal');\n const method = firstArg.value?.toUpperCase();\n const pathArg = node.arguments[1];\n const supported = method && supportedHttpMethods.has(method);\n if (receiver && supported && serviceVariables.has(rootReceiver ?? receiver)) {\n const pathAnalysis = analyzeOperationPath(pathArg, node, method);\n const operationPathExpr = operationPathExpression(pathAnalysis);\n const intent = classifyODataPathIntent(operationPathExpr, method);\n const unresolvedReason = pathUnresolvedReason(pathAnalysis);\n add(node, { callType: 'remote_action', serviceVariableName: rootReceiver ?? receiver, method, operationPathExpr, payloadSummary: summarizeExpression(node.getText(source)), confidence: operationPathExpr ? 0.8 : 0.45, unresolvedReason }, { receiver, rootReceiver, classifier: 'service_client_send_method_path', rawPathExpression: pathAnalysis.rawExpression, literalPathSource: literalPathSource(pathAnalysis), odataPathIntent: operationPathExpr ? intent : undefined, pathAnalysis, staticPathCandidates: legacyPathCandidates(pathAnalysis), parserWarning: unresolvedReason });\n } else if (receiver && serviceVariables.has(rootReceiver ?? receiver)) {\n const operationPathExpr = safeOperationName(firstArg.value);\n add(node, { callType: 'remote_action', serviceVariableName: rootReceiver ?? receiver, operationPathExpr, payloadSummary: summarizeExpression(node.getText(source)), confidence: operationPathExpr ? 0.75 : 0.35, unresolvedReason: operationPathExpr ? undefined : 'unsupported_cap_send_signature' }, { receiver, rootReceiver, classifier: operationPathExpr ? 'service_client_send_operation_event' : 'service_client_send_unsupported_signature', rawOperationExpression: firstArg.rawExpression, literalOperationSource: firstArg.value ? firstArg.sourceKind : undefined, parserWarning: operationPathExpr ? undefined : 'unsupported_cap_send_signature' });\n }\n }\n } else if (((ts.isCallExpression(expr) && ts.isIdentifier(expr.expression) && wrapperSpecs.has(expr.expression.text)) || (ts.isIdentifier(expr) && wrapperSpecs.has(expr.text)))) {\n const wrapperName = ts.isIdentifier(expr) ? expr.text : ts.isCallExpression(expr) && ts.isIdentifier(expr.expression) ? expr.expression.text : '';\n const wrapperArgs = ts.isIdentifier(expr) ? node.arguments : ts.isCallExpression(expr) ? expr.arguments : node.arguments;\n const spec = wrapperSpecs.get(wrapperName);\n const clientArg = spec?.clientIndex === undefined ? undefined : wrapperArgs[spec.clientIndex];\n const pathArg = spec ? wrapperArgs[spec.pathIndex] : undefined;\n const methodArg = spec?.methodIndex === undefined ? undefined : wrapperArgs[spec.methodIndex];\n const receiver = clientArg && ts.isIdentifier(clientArg) ? clientArg.text : spec?.clientName;\n const method = stripQuotes(resolveExpression(methodArg, node, 'literal').value ?? spec?.methodLiteral ?? 'POST');\n const pathAnalysis = analyzeOperationPath(pathArg, node, method);\n const operationPathExpr = operationPathExpression(pathAnalysis);\n const normalizedOperationPath = operationPathExpr ? classifyODataPathIntent(operationPathExpr, method).topLevelOperationName : undefined;\n const unresolvedReason = pathUnresolvedReason(pathAnalysis);\n if (spec && receiver && operationPathExpr) {\n add(node, { callType: 'remote_action', serviceVariableName: receiver, method, operationPathExpr, payloadSummary: summarizeExpression(node.getText(source)), confidence: 0.75, unresolvedReason }, { receiver, classifier: pathAnalysis.sourceKind.includes('string_literal') ? 'higher_order_wrapper_literal_path' : 'higher_order_wrapper_static_path', wrapperFunction: wrapperName, nestedWrapperFunction: spec.nestedWrapperFunction, wrapperDefinitionLine: spec.definitionLine, callerLine: lineOf(source.text, node.getStart(source)), wrapperPathSourceKind: wrapperSourceKind(pathAnalysis.sourceKind), rawPathExpression: pathAnalysis.rawExpression, normalizedOperationPath, literalPathSource: pathAnalysis.sourceKind.includes('const_alias') ? 'same_scope_const_initializer' : `wrapper_call_${wrapperSourceKind(pathAnalysis.sourceKind)}`, literalCallerArgumentDetected: true, pathAnalysis });\n } else if (spec && receiver) {\n add(node, { callType: 'remote_action', serviceVariableName: receiver, method, payloadSummary: summarizeExpression(node.getText(source)), confidence: 0.45, unresolvedReason }, { receiver, classifier: pathAnalysis.status === 'ambiguous' ? 'higher_order_wrapper_ambiguous_path' : 'higher_order_wrapper_dynamic_path', wrapperFunction: wrapperName, wrapperDefinitionLine: spec.definitionLine, callerLine: lineOf(source.text, node.getStart(source)), wrapperPathSourceKind: wrapperSourceKind(pathAnalysis.sourceKind), rawPathExpression: pathAnalysis.rawExpression, pathAnalysis, parserWarning: unresolvedReason });\n }\n } else if (ts.isPropertyAccessExpression(expr) && ['emit', 'publish', 'on'].includes(expr.name.text)) {\n const receiver = receiverName(expr.expression);\n const rootReceiver = rootReceiverName(expr.expression);\n if (isSupportedEventReceiver(receiver, rootReceiver, serviceVariables)) {\n const eventName = literalText(node.arguments[0]);\n const effectiveReceiver = rootReceiver ?? receiver;\n const lifecycleHook = effectiveReceiver === 'cds'\n && CDS_LIFECYCLE_EVENTS.has(eventName ?? '');\n const errorHook = expr.name.text === 'on' && eventName === 'error';\n if (eventName && !lifecycleHook && !errorHook) add(node, { callType: expr.name.text === 'on' ? 'async_subscribe' : 'async_emit', serviceVariableName: effectiveReceiver, eventNameExpr: eventName }, { receiver, rootReceiver, classifier: expr.name.text === 'on' ? 'cap_service_event_subscription' : 'cap_service_event_emit', receiverClassification: 'cap_evidence' });\n }\n } else {\n const external = externalHttpEvidence(node, source);\n if (external) {\n const evidenceTarget = { ...external.externalTarget, method: external.method, parserClassifier: external.classifier, sourceCallShape: external.sourceCallShape };\n const safeTarget = externalHttpTarget({ method: external.method, evidence_json: JSON.stringify({ externalTarget: evidenceTarget }) });\n add(node, { callType: 'external_http', method: external.method, payloadSummary: undefined, confidence: 0.7, unresolvedReason: 'External HTTP destination is outside indexed CAP services', externalTarget: { kind: safeTarget.kind, stableId: safeTarget.toId, label: safeTarget.label, dynamic: safeTarget.dynamic } }, { classifier: external.classifier, externalTarget: safeTarget, sourceCallShape: external.sourceCallShape });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return calls;\n}\nexport function containsSupportedOutboundCall(\n node: ts.Node,\n classified?: readonly ClassifiedOutboundCall[],\n): boolean {\n const source = node.getSourceFile();\n const start = node.getFullStart();\n const end = node.getEnd();\n const calls = classified ?? classifyOutboundCallsInSource(source, source.fileName);\n return calls.some((call) =>\n call.node.getStart(source) >= start && call.node.getEnd() <= end);\n}\nexport async function parseOutboundCalls(\n repoPath: string,\n filePath: string,\n context?: RepositorySourceContext,\n classified?: readonly ClassifiedOutboundCall[],\n preparedBindings?: readonly ServiceBindingFact[],\n): Promise<OutboundCallFact[]> {\n const snapshot = context?.get(filePath);\n const text = snapshot?.text\n ?? await fs.readFile(path.join(repoPath, filePath), 'utf8');\n const source = snapshot?.sourceFile() ?? ts.createSourceFile(\n filePath, text, ts.ScriptTarget.Latest, true,\n filePath.endsWith('.ts') ? ts.ScriptKind.TS : ts.ScriptKind.JS,\n );\n const bindings = preparedBindings ?? await parseServiceBindings(\n repoPath, filePath, context,\n );\n const bindingNames = new Set(bindings.map((binding) => binding.variableName));\n const importedWrappers = await parseImportedWrapperCalls(\n repoPath, filePath, source, bindingNames, context,\n );\n const nativeCalls = classified ?? classifyOutboundCallsInSource(source, filePath);\n return [\n ...nativeCalls.map((call) => call.fact),\n ...importedWrappers,\n ...parseLocalServiceCalls(text, filePath, source),\n ];\n}\nfunction parseLocalServiceCalls(\n text: string,\n filePath: string,\n source = ts.createSourceFile(\n filePath, text, ts.ScriptTarget.Latest, true,\n filePath.endsWith('.ts') ? ts.ScriptKind.TS : ts.ScriptKind.JS,\n ),\n): OutboundCallFact[] {\n const aliases = new Map<string, { service: string; lookup: string; chain: string[] }>();\n const calls: OutboundCallFact[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n const origin = serviceLookup(node.initializer, aliases);\n if (origin) aliases.set(node.name.text, { ...origin, chain: [...origin.chain, node.name.text] });\n }\n if (ts.isCallExpression(node)) {\n const parsed = serviceOperationCall(node, aliases);\n if (parsed && parsed.operation !== 'entities') calls.push({\n callType: 'local_service_call',\n operationPathExpr: `/${parsed.operation}`,\n payloadSummary: parsed.service,\n localServiceName: parsed.service,\n localServiceLookup: parsed.lookup,\n aliasChain: parsed.chain,\n sourceFile: normalizePath(filePath),\n sourceLine: lineOf(text, node.getStart(source)),\n callSiteStartOffset: node.getStart(source),\n callSiteEndOffset: node.getEnd(),\n confidence: 0.9,\n unresolvedReason: ['send', 'emit', 'publish', 'on'].includes(parsed.operation) ? 'transport_client_method' : undefined,\n evidence: parserEvidence(source, node, {\n classifier: parsed.classifier,\n parserCallType: parsed.operation === 'send' ? 'transport_client_method' : parsed.classifier,\n localServiceLookup: parsed.lookup,\n localServiceName: parsed.service,\n operation: parsed.operation,\n aliasChain: parsed.chain,\n }),\n });\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return calls;\n}\nfunction serviceLookup(expr: ts.Expression, aliases: Map<string, { service: string; lookup: string; chain: string[] }>): { service: string; lookup: string; chain: string[] } | undefined {\n if (ts.isIdentifier(expr)) return aliases.get(expr.text);\n if (ts.isPropertyAccessExpression(expr) && expr.expression.getText() === 'cds.services') return { service: expr.name.text, lookup: expr.getText(), chain: [expr.getText()] };\n if (ts.isElementAccessExpression(expr) && expr.expression.getText() === 'cds.services' && ts.isStringLiteral(expr.argumentExpression)) return { service: expr.argumentExpression.text, lookup: expr.getText(), chain: [expr.getText()] };\n return undefined;\n}\nfunction serviceOperationCall(node: ts.CallExpression, aliases: Map<string, { service: string; lookup: string; chain: string[] }>): { service: string; lookup: string; chain: string[]; operation: string; classifier: string } | undefined {\n const expr = node.expression;\n if (!ts.isPropertyAccessExpression(expr)) return undefined;\n const origin = serviceLookup(expr.expression, aliases);\n if (!origin) return undefined;\n if (expr.name.text === 'send') {\n const first = literalText(node.arguments[0]);\n const second = literalText(node.arguments[1]);\n const method = first?.toUpperCase();\n if (method && ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'].includes(method) && second) return { ...origin, operation: second.replace(/^\\//, ''), classifier: 'cap_service_send_method_path' };\n if (first) return { ...origin, operation: first.replace(/^\\//, ''), classifier: 'cap_service_send_local_dispatch' };\n }\n return { ...origin, operation: expr.name.text, classifier: 'local_cap_service_call' };\n}\n","import { createHash } from 'node:crypto';\nimport { projectBounded } from '../utils/000-bounded-projection.js';\n\nexport type ExternalTargetKind = 'destination' | 'static_url' | 'url_expression' | 'unknown';\nexport interface ExternalHttpTarget { kind: ExternalTargetKind; toKind: 'external_destination' | 'external_endpoint'; toId: string; label: string; method?: string; dynamic: boolean; expression?: string; candidateLiteralCount?: number; shownCandidateLiteralCount?: number; omittedCandidateLiteralCount?: number; }\nconst sensitiveKeys = new Set(['token','access_token','id_token','api_key','apikey','key','password','passwd','pwd','secret','client_secret','authorization','cookie','signature']);\nfunction hash(value: string): string { return createHash('sha256').update(value).digest('hex').slice(0, 12); }\nfunction methodPrefix(method: unknown): string { return typeof method === 'string' && method.length > 0 ? `${method.toUpperCase()} ` : ''; }\nexport function redactUrl(value: string): string {\n try {\n const url = new URL(value, value.startsWith('/') ? 'https://relative.invalid' : undefined);\n url.username = ''; url.password = '';\n for (const key of [...url.searchParams.keys()]) url.searchParams.set(key, sensitiveKeys.has(key.toLowerCase()) ? '<redacted>' : '<redacted>');\n const path = `${url.pathname}${url.search ? url.search : ''}`;\n return value.startsWith('/') ? path : `${url.origin}${path}`;\n } catch {\n return value.replace(/([?&][^=;&]*(?:token|key|password|secret|cookie|authorization)[^=;&]*=)[^&]*/gi, '$1<redacted>');\n }\n}\nexport function externalHttpTarget(call: Record<string, unknown>): ExternalHttpTarget {\n const evidence = typeof call.evidence_json === 'string' ? safeParse(call.evidence_json) : {};\n const target = evidence.externalTarget && typeof evidence.externalTarget === 'object' && !Array.isArray(evidence.externalTarget) ? evidence.externalTarget as Record<string, unknown> : {};\n const method = typeof call.method === 'string' ? call.method : typeof target.method === 'string' ? target.method : undefined;\n const kind = typeof target.kind === 'string' ? target.kind : 'unknown';\n const expression = typeof target.expression === 'string' ? target.expression : undefined;\n if (kind === 'destination' && target.dynamic === true) {\n const shape = typeof target.expressionShape === 'string' ? target.expressionShape : 'expression';\n const candidates = staticDestinationCandidates(target.candidateLiterals);\n const projection = projectBounded(candidates, (left, right) => left.localeCompare(right));\n return {\n kind,\n toKind: 'external_destination',\n toId: `destination:dynamic:${hash(`${shape}:${candidates.join('|')}`)}`,\n label: 'External destination: dynamic destination',\n method,\n dynamic: true,\n expression: projection.items.length\n ? `candidates:${projection.items.join('|')}`\n : `shape:${shape}`,\n candidateLiteralCount: projection.totalCount,\n shownCandidateLiteralCount: projection.shownCount,\n omittedCandidateLiteralCount: projection.omittedCount,\n };\n }\n if (kind === 'destination' && expression) return { kind, toKind: 'external_destination', toId: `destination:${expression}`, label: `External destination: ${expression}`, method, dynamic: false, expression };\n if (kind === 'static_url' && expression) {\n const redacted = redactUrl(expression);\n return { kind, toKind: 'external_endpoint', toId: `endpoint:${hash(`${method ?? ''}:${redacted}`)}`, label: `External endpoint: ${methodPrefix(method)}${redacted}`, method, dynamic: false, expression: redacted };\n }\n if (kind === 'url_expression' && expression) return { kind, toKind: 'external_endpoint', toId: `dynamic:${hash(expression)}`, label: `External endpoint: ${methodPrefix(method)}dynamic URL`, method, dynamic: true, expression: `expr:${hash(expression)}` };\n return { kind: 'unknown', toKind: 'external_endpoint', toId: 'unknown', label: 'External endpoint: unknown', method, dynamic: false };\n}\nfunction staticDestinationCandidates(value: unknown): string[] {\n const candidates = Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n return [...new Set(candidates)].sort();\n}\nfunction safeParse(value: string): Record<string, unknown> { try { const parsed = JSON.parse(value) as unknown; return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed as Record<string, unknown> : {}; } catch { return {}; } }\n","export const DEFAULT_EVIDENCE_CANDIDATE_LIMIT = 5;\n\nexport interface BoundedProjection<T> {\n totalCount: number;\n shownCount: number;\n omittedCount: number;\n items: T[];\n}\n\nexport function projectBounded<T>(\n values: readonly T[],\n compare: (left: T, right: T) => number,\n limit = DEFAULT_EVIDENCE_CANDIDATE_LIMIT,\n): BoundedProjection<T> {\n const normalizedLimit = positiveLimit(limit);\n const sorted = [...values].sort(compare);\n const items = sorted.slice(0, normalizedLimit);\n return {\n totalCount: sorted.length,\n shownCount: items.length,\n omittedCount: Math.max(0, sorted.length - items.length),\n items,\n };\n}\n\n/**\n * Evidence producers establish semantic order before calling the generic\n * recursive bounder. Re-sorting here would make a selected decision appear\n * to be explained by a different candidate.\n */\nexport function projectBoundedInOrder<T>(\n values: readonly T[],\n limit = DEFAULT_EVIDENCE_CANDIDATE_LIMIT,\n): BoundedProjection<T> {\n const normalizedLimit = positiveLimit(limit);\n const items = values.slice(0, normalizedLimit);\n return {\n totalCount: values.length,\n shownCount: items.length,\n omittedCount: Math.max(0, values.length - items.length),\n items,\n };\n}\n\nexport function positiveLimit(value: number | undefined): number {\n return Number.isFinite(value) && Number(value) > 0\n ? Math.floor(Number(value))\n : DEFAULT_EVIDENCE_CANDIDATE_LIMIT;\n}\n\nconst candidateLikeCollections = new Set([\n 'candidates',\n 'candidateScores',\n 'candidateFamilies',\n 'candidateEvidence',\n 'candidatePaths',\n 'candidateRawPaths',\n 'candidateNormalizedOperationPaths',\n 'normalizedCandidateOperations',\n 'candidateLiterals',\n 'bindingCandidates',\n 'bindingAlternatives',\n 'implementationHintSuggestions',\n 'selectableImplementationRepositories',\n 'matchedHints',\n 'candidateSuggestions',\n 'dynamicTargetCandidates',\n 'dynamicTargetCandidateSuggestions',\n 'rejectedCandidates',\n 'suggestedVarSets',\n 'copyableExamples',\n 'selectorSuggestions',\n 'serviceSuggestions',\n 'repositories',\n 'examples',\n 'expandedExamples',\n 'registrations',\n]);\n\n/**\n * Parser facts are retained in their tables; graph evidence only carries a\n * deterministic explanation. This prevents nested parser alternatives from\n * bypassing the graph evidence cap while leaving canonical facts queryable.\n */\nexport function boundCandidateLikeEvidence(\n evidence: Record<string, unknown>,\n limit = DEFAULT_EVIDENCE_CANDIDATE_LIMIT,\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(evidence)) {\n if (!Array.isArray(value) || !candidateLikeCollections.has(key)) {\n output[key] = boundNestedEvidence(value, limit);\n continue;\n }\n const projection = projectBoundedInOrder(value, limit);\n output[key] = projection.items.map((item) => boundNestedEvidence(item, limit));\n addCollectionCounts(output, evidence, key, projection);\n }\n return output;\n}\n\nfunction boundNestedEvidence(value: unknown, limit: number): unknown {\n if (Array.isArray(value)) return value.map((item) => boundNestedEvidence(item, limit));\n if (!isEvidenceRecord(value)) return value;\n return boundCandidateLikeEvidence(value, limit);\n}\n\nfunction isEvidenceRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction addCollectionCounts(\n output: Record<string, unknown>,\n input: Record<string, unknown>,\n key: string,\n projection: BoundedProjection<unknown>,\n): void {\n const stem = collectionStem(key);\n const countName = `${stem}Count`;\n const shownName = `shown${upperFirst(stem)}Count`;\n const omittedName = `omitted${upperFirst(stem)}Count`;\n const total = Math.max(numericValue(input[countName]), projection.totalCount);\n output[countName] = total;\n output[shownName] = projection.shownCount;\n output[omittedName] = Math.max(0, total - projection.shownCount);\n}\n\nfunction collectionStem(key: string): string {\n const stems: Record<string, string> = {\n candidates: 'candidate',\n candidateScores: 'candidateScore',\n candidateFamilies: 'candidateFamily',\n candidateEvidence: 'candidateEvidence',\n candidatePaths: 'candidatePath',\n candidateRawPaths: 'candidateRawPath',\n candidateNormalizedOperationPaths: 'candidateNormalizedOperationPath',\n normalizedCandidateOperations: 'normalizedCandidateOperation',\n candidateLiterals: 'candidateLiteral',\n bindingCandidates: 'bindingCandidate',\n bindingAlternatives: 'bindingAlternative',\n implementationHintSuggestions: 'implementationHintSuggestion',\n selectableImplementationRepositories: 'selectableImplementationRepository',\n matchedHints: 'matchedHint',\n candidateSuggestions: 'candidateSuggestion',\n dynamicTargetCandidates: 'dynamicTargetCandidate',\n dynamicTargetCandidateSuggestions: 'dynamicTargetCandidateSuggestion',\n rejectedCandidates: 'rejectedCandidate',\n suggestedVarSets: 'suggestedVarSet',\n copyableExamples: 'copyableExample',\n selectorSuggestions: 'selectorSuggestion',\n serviceSuggestions: 'serviceSuggestion',\n repositories: 'repository',\n examples: 'example',\n expandedExamples: 'expandedExample',\n registrations: 'registration',\n };\n return stems[key] ?? 'candidate';\n}\n\nfunction numericValue(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction upperFirst(value: string): string {\n return value ? `${value[0]?.toUpperCase() ?? ''}${value.slice(1)}` : value;\n}\n","import {\n scanPlaceholderStructure,\n type PlaceholderSpan,\n} from '../utils/001-placeholders.js';\n\nexport type ODataPathStructureReason =\n | 'path_parenthesis_is_unbalanced'\n | 'path_parenthesis_suffix_is_invalid'\n | 'path_placeholder_is_malformed'\n | 'path_quote_is_unbalanced';\n\nexport interface ODataPathSegment {\n readonly text: string;\n readonly start: number;\n readonly end: number;\n}\n\nexport interface ODataPathStructure {\n readonly status: 'valid' | 'malformed';\n readonly reason?: ODataPathStructureReason;\n readonly rawPath: string;\n readonly pathWithoutQuery: string;\n readonly queryString?: string;\n readonly queryIndex?: number;\n readonly placeholderSpans: readonly PlaceholderSpan[];\n readonly placeholderKeys: string[];\n readonly segments: readonly ODataPathSegment[];\n readonly firstSegment?: ODataPathSegment;\n readonly firstSegmentHead?: string;\n readonly firstSegmentHeadRuntimeDependent: boolean;\n readonly firstParenthesisOpen?: number;\n readonly firstParenthesisClose?: number;\n readonly firstParenthesisArguments?: string;\n readonly firstParenthesisPlaceholderKeys: string[];\n}\n\ninterface SyntaxScan {\n readonly queryIndex?: number;\n readonly separators: number[];\n readonly firstOpen?: number;\n readonly firstClose?: number;\n readonly reason?: ODataPathStructureReason;\n}\n\ninterface ParenthesisState {\n readonly stack: number[];\n firstOpen?: number;\n firstClose?: number;\n segmentIndex: number;\n}\n\ninterface SyntaxCursor {\n index: number;\n spanIndex: number;\n}\n\ninterface HeadEvidence {\n readonly firstSegment?: ODataPathSegment;\n readonly firstSegmentHead?: string;\n readonly firstSegmentHeadRuntimeDependent: boolean;\n}\n\ninterface ArgumentEvidence {\n readonly firstParenthesisArguments?: string;\n readonly firstParenthesisPlaceholderKeys: string[];\n}\n\nexport function analyzeODataPathStructure(\n path: string | undefined,\n): ODataPathStructure {\n const rawPath = (path ?? '').trim();\n const placeholders = scanPlaceholderStructure(rawPath);\n if (placeholders.status === 'malformed')\n return malformedStructure(rawPath, 'path_placeholder_is_malformed');\n const syntax = scanSyntax(rawPath, placeholders.spans);\n if (syntax.reason)\n return malformedStructure(rawPath, syntax.reason, placeholders.spans);\n return validStructure(rawPath, placeholders.spans, syntax);\n}\n\nfunction scanSyntax(\n raw: string,\n placeholders: readonly PlaceholderSpan[],\n): SyntaxScan {\n const state: ParenthesisState = { stack: [], segmentIndex: 0 };\n const cursor: SyntaxCursor = { index: 0, spanIndex: 0 };\n const separators: number[] = [];\n while (cursor.index < raw.length) {\n const step = scanSyntaxStep(raw, placeholders, cursor, state, separators);\n if (step.reason) return { separators, reason: step.reason };\n if (step.query) {\n const queryReason = validateQuerySyntax(\n raw, cursor.index + 1, placeholders, cursor.spanIndex,\n );\n if (queryReason) return { separators, reason: queryReason };\n return finalizedSyntax(raw, separators, state, cursor.index);\n }\n }\n if (state.stack.length > 0)\n return { separators, reason: 'path_parenthesis_is_unbalanced' };\n return finalizedSyntax(raw, separators, state);\n}\n\nfunction validateQuerySyntax(\n raw: string,\n start: number,\n placeholders: readonly PlaceholderSpan[],\n initialSpanIndex: number,\n): ODataPathStructureReason | undefined {\n const cursor: SyntaxCursor = { index: start, spanIndex: initialSpanIndex };\n let parenthesisDepth = 0;\n while (cursor.index < raw.length) {\n if (skipPlaceholder(placeholders, cursor)) continue;\n const char = raw[cursor.index];\n if ([\"'\", '\"'].includes(char)) {\n const end = quotedEnd(\n raw, cursor.index, char, placeholders, cursor.spanIndex,\n );\n if (end === undefined) return 'path_quote_is_unbalanced';\n cursor.index = end;\n continue;\n }\n if (char === '(') parenthesisDepth += 1;\n if (char === ')' && parenthesisDepth === 0)\n return 'path_parenthesis_is_unbalanced';\n if (char === ')') parenthesisDepth -= 1;\n cursor.index += 1;\n }\n return parenthesisDepth === 0\n ? undefined : 'path_parenthesis_is_unbalanced';\n}\n\nfunction scanSyntaxStep(\n raw: string,\n placeholders: readonly PlaceholderSpan[],\n cursor: SyntaxCursor,\n state: ParenthesisState,\n separators: number[],\n): { query?: boolean; reason?: ODataPathStructureReason } {\n if (skipPlaceholder(placeholders, cursor)) return {};\n const char = raw[cursor.index];\n if (char === \"'\" || char === '\"') {\n const end = quotedEnd(raw, cursor.index, char, placeholders, cursor.spanIndex);\n if (end === undefined) return { reason: 'path_quote_is_unbalanced' };\n cursor.index = end;\n return {};\n }\n const result = consumePathDelimiter(raw, cursor.index, state, separators);\n if (!result.query && !result.reason) cursor.index += 1;\n return result;\n}\n\nfunction skipPlaceholder(\n placeholders: readonly PlaceholderSpan[],\n cursor: SyntaxCursor,\n): boolean {\n while (placeholders[cursor.spanIndex]?.end\n && (placeholders[cursor.spanIndex]?.end ?? 0) <= cursor.index)\n cursor.spanIndex += 1;\n const span = placeholders[cursor.spanIndex];\n if (span?.start !== cursor.index) return false;\n cursor.index = span.end;\n cursor.spanIndex += 1;\n return true;\n}\n\nfunction consumePathDelimiter(\n raw: string,\n index: number,\n state: ParenthesisState,\n separators: number[],\n): { query?: boolean; reason?: ODataPathStructureReason } {\n const char = raw[index];\n if (char === '(') return openParenthesis(state, index);\n if (char === ')') return closeParenthesis(state, index);\n if (char === '?') return state.stack.length === 0 ? { query: true } : {};\n if (char === '/') addSeparator(state, separators, index);\n return {};\n}\n\nfunction openParenthesis(\n state: ParenthesisState,\n index: number,\n): { reason?: ODataPathStructureReason } {\n if (state.stack.length === 0 && state.segmentIndex === 0) {\n if (state.firstOpen !== undefined)\n return { reason: 'path_parenthesis_suffix_is_invalid' };\n state.firstOpen = index;\n }\n state.stack.push(index);\n return {};\n}\n\nfunction closeParenthesis(\n state: ParenthesisState,\n index: number,\n): { reason?: ODataPathStructureReason } {\n if (state.stack.length === 0)\n return { reason: 'path_parenthesis_is_unbalanced' };\n state.stack.pop();\n if (state.stack.length === 0 && state.segmentIndex === 0)\n state.firstClose = index;\n return {};\n}\n\nfunction addSeparator(\n state: ParenthesisState,\n separators: number[],\n index: number,\n): void {\n if (index === 0 || state.stack.length > 0) return;\n separators.push(index);\n state.segmentIndex += 1;\n}\n\nfunction finalizedSyntax(\n raw: string,\n separators: number[],\n state: ParenthesisState,\n queryIndex?: number,\n): SyntaxScan {\n if (state.stack.length > 0)\n return { separators, reason: 'path_parenthesis_is_unbalanced' };\n const firstEnd = separators[0] ?? queryIndex ?? raw.length;\n if (state.firstClose !== undefined\n && raw.slice(state.firstClose + 1, firstEnd).trim())\n return { separators, reason: 'path_parenthesis_suffix_is_invalid' };\n return {\n queryIndex, separators,\n firstOpen: state.firstOpen, firstClose: state.firstClose,\n };\n}\n\nfunction quotedEnd(\n raw: string,\n start: number,\n quote: string,\n placeholders: readonly PlaceholderSpan[],\n initialSpanIndex: number,\n): number | undefined {\n let spanIndex = initialSpanIndex;\n let index = start + 1;\n while (index < raw.length) {\n const span = placeholders[spanIndex];\n if (span?.start === index) {\n index = span.end;\n spanIndex += 1;\n continue;\n }\n if (raw[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (raw[index] !== quote) {\n index += 1;\n continue;\n }\n if (raw[index + 1] === quote) {\n index += 2;\n continue;\n }\n return index + 1;\n }\n return undefined;\n}\n\nfunction validStructure(\n rawPath: string,\n spans: readonly PlaceholderSpan[],\n syntax: SyntaxScan,\n): ODataPathStructure {\n const pathEnd = syntax.queryIndex ?? rawPath.length;\n const pathWithoutQuery = rawPath.slice(0, pathEnd);\n const segments = pathSegments(rawPath, pathEnd, syntax.separators);\n const head = headEvidence(rawPath, segments, spans, syntax.firstOpen);\n const argumentsResult = argumentEvidence(rawPath, spans, syntax);\n return {\n status: 'valid', rawPath, pathWithoutQuery,\n queryString: queryString(rawPath, syntax.queryIndex),\n queryIndex: syntax.queryIndex,\n placeholderSpans: spans,\n placeholderKeys: uniqueKeys(spans),\n segments,\n ...head,\n firstParenthesisOpen: syntax.firstOpen,\n firstParenthesisClose: syntax.firstClose,\n ...argumentsResult,\n };\n}\n\nfunction headEvidence(\n raw: string,\n segments: readonly ODataPathSegment[],\n spans: readonly PlaceholderSpan[],\n firstOpen: number | undefined,\n): HeadEvidence {\n const firstSegment = segments[0];\n if (!firstSegment)\n return { firstSegmentHeadRuntimeDependent: false };\n const end = firstOpen ?? firstSegment.end;\n const value = raw.slice(firstSegment.start, end).trim();\n return {\n firstSegment,\n firstSegmentHead: value || undefined,\n firstSegmentHeadRuntimeDependent: spans.some((span) =>\n overlaps(span, firstSegment.start, end)),\n };\n}\n\nfunction argumentEvidence(\n raw: string,\n spans: readonly PlaceholderSpan[],\n syntax: SyntaxScan,\n): ArgumentEvidence {\n if (syntax.firstOpen === undefined || syntax.firstClose === undefined)\n return { firstParenthesisPlaceholderKeys: [] };\n const start = syntax.firstOpen + 1;\n const end = syntax.firstClose;\n return {\n firstParenthesisArguments: raw.slice(start, end),\n firstParenthesisPlaceholderKeys: uniqueKeys(spans.filter((span) =>\n span.start >= start && span.end <= end)),\n };\n}\n\nfunction queryString(raw: string, queryIndex: number | undefined): string | undefined {\n return queryIndex === undefined ? undefined : raw.slice(queryIndex + 1);\n}\n\nfunction pathSegments(\n raw: string,\n pathEnd: number,\n separators: number[],\n): ODataPathSegment[] {\n const start = raw.startsWith('/') ? 1 : 0;\n const boundaries = separators.filter((value) => value >= start && value < pathEnd);\n const ends = [...boundaries, pathEnd];\n let current = start;\n const segments: ODataPathSegment[] = [];\n for (const end of ends) {\n const text = raw.slice(current, end);\n if (text) segments.push({ text, start: current, end });\n current = end + 1;\n }\n return segments;\n}\n\nfunction malformedStructure(\n rawPath: string,\n reason: ODataPathStructureReason,\n spans: readonly PlaceholderSpan[] = [],\n): ODataPathStructure {\n return {\n status: 'malformed', reason, rawPath, pathWithoutQuery: rawPath,\n placeholderSpans: spans, placeholderKeys: [],\n segments: [], firstSegmentHeadRuntimeDependent: false,\n firstParenthesisPlaceholderKeys: [],\n };\n}\n\nfunction overlaps(\n span: PlaceholderSpan,\n start: number,\n end: number,\n): boolean {\n return span.start < end && span.end > start;\n}\n\nfunction uniqueKeys(spans: readonly PlaceholderSpan[]): string[] {\n return [...new Set(spans.map((span) => span.key.trim()).filter(Boolean))];\n}\n","import {\n analyzeODataPathStructure,\n type ODataPathStructure,\n} from './005-odata-path-structure.js';\n\nexport interface NormalizedODataOperationPath {\n rawOperationPath: string;\n normalizedOperationPath: string;\n wasInvocation: boolean;\n invocationArguments?: string;\n invocationArgumentPlaceholderKeys: string[];\n normalizationReason?: string;\n normalizationRejectedReason?: string;\n}\n\nexport type ODataPathIntentKind = 'operation_invocation' | 'entity_query' | 'entity_key_read' | 'entity_navigation_query' | 'entity_mutation' | 'entity_delete' | 'entity_media' | 'entity_candidate' | 'unknown';\n\nexport interface ODataPathIntent {\n kind: ODataPathIntentKind;\n rawPath: string;\n method: string;\n pathWithoutQuery: string;\n queryString?: string;\n hasQueryString: boolean;\n entitySegment?: string;\n placeholderKeys: string[];\n keyPredicatePlaceholderKeys: string[];\n invocationArgumentPlaceholderKeys: string[];\n invocationArguments?: string;\n navigationSuffix?: string;\n mediaOrPropertySuffix?: string;\n hasEntityKeyPredicate: boolean;\n hasNavigationSuffix: boolean;\n hasMediaOrPropertySuffix: boolean;\n topLevelOperationName?: string;\n topLevelOperationNameCandidate: boolean;\n topLevelOperationInvocation: boolean;\n reason: string;\n}\n\ninterface NavigationEvidence {\n readonly navigation: boolean;\n readonly suffix?: string;\n readonly navigationSuffix?: string;\n}\n\ninterface OperationEvidence {\n readonly invocation: boolean;\n readonly name?: string;\n}\n\nexport function normalizeODataOperationInvocationPath(\n path: string | undefined,\n): NormalizedODataOperationPath | undefined {\n if (path === undefined) return undefined;\n const raw = path.trim();\n if (!raw) return undefined;\n const structure = analyzeODataPathStructure(raw);\n const rejection = normalizationRejection(raw, structure);\n if (rejection) return rejectedNormalization(raw, rejection);\n const operationSegment = raw.slice(\n 0, structure.firstParenthesisOpen ?? 0,\n ).trim();\n if (operationSegment.length <= 1)\n return rejectedNormalization(raw, 'operation_segment_is_empty');\n return {\n rawOperationPath: raw,\n normalizedOperationPath: operationSegment,\n wasInvocation: true,\n invocationArguments: structure.firstParenthesisArguments,\n invocationArgumentPlaceholderKeys:\n structure.firstParenthesisPlaceholderKeys,\n normalizationReason: 'balanced_top_level_operation_invocation',\n };\n}\n\nfunction normalizationRejection(\n raw: string,\n structure: ODataPathStructure,\n): string | undefined {\n if (structure.status === 'malformed')\n return structure.reason ?? 'path_structure_is_malformed';\n if (structure.firstParenthesisOpen === undefined)\n return 'no_top_level_parenthesis';\n if (structure.queryIndex !== undefined)\n return 'query_string_paths_are_not_operation_invocations';\n if (!raw.startsWith('/')) return 'path_is_not_absolute';\n if (structure.segments.length !== 1)\n return 'operation_segment_contains_navigation_separator';\n if (structure.firstSegmentHeadRuntimeDependent)\n return 'operation_segment_is_runtime_dependent';\n if (structure.firstParenthesisClose === undefined)\n return 'top_level_invocation_parenthesis_is_unbalanced';\n return undefined;\n}\n\nfunction rejectedNormalization(\n raw: string,\n reason: string,\n): NormalizedODataOperationPath {\n return {\n rawOperationPath: raw, normalizedOperationPath: raw,\n wasInvocation: false, invocationArgumentPlaceholderKeys: [],\n normalizationRejectedReason: reason,\n };\n}\n\nexport function classifyODataPathIntent(\n path: string | undefined,\n method: string | undefined,\n): ODataPathIntent {\n const rawPath = (path ?? '').trim();\n const normalizedMethod = (method ?? 'GET').trim().toUpperCase() || 'GET';\n const structure = analyzeODataPathStructure(rawPath);\n const invocation = normalizeODataOperationInvocationPath(\n structure.pathWithoutQuery,\n );\n const base = intentBase(structure, normalizedMethod, invocation);\n if (!rawPath || !rawPath.startsWith('/'))\n return { ...base, kind: 'unknown', reason: 'path_missing_or_not_absolute' };\n if (structure.status === 'malformed')\n return {\n ...base, kind: 'unknown',\n reason: structure.reason ?? 'path_structure_is_malformed',\n };\n if (structure.firstSegmentHeadRuntimeDependent)\n return {\n ...base, kind: 'unknown',\n reason: 'path_classification_head_is_runtime_dependent',\n };\n return normalizedMethod === 'GET'\n ? classifyGet(structure, base, invocation)\n : classifyMutation(structure, base, invocation, normalizedMethod);\n}\n\nfunction intentBase(\n structure: ODataPathStructure,\n method: string,\n invocation: NormalizedODataOperationPath | undefined,\n): Omit<ODataPathIntent, 'kind' | 'reason'> {\n const segments = structure.segments;\n const navigation = navigationEvidence(segments);\n const operation = operationEvidence(structure, invocation, navigation.navigation);\n return {\n rawPath: structure.rawPath, method,\n pathWithoutQuery: structure.pathWithoutQuery,\n queryString: structure.queryString,\n hasQueryString: structure.queryIndex !== undefined,\n entitySegment: structure.firstSegmentHead,\n placeholderKeys: structure.placeholderKeys,\n keyPredicatePlaceholderKeys: operation.invocation\n ? [] : structure.firstParenthesisPlaceholderKeys,\n invocationArgumentPlaceholderKeys:\n invocation?.invocationArgumentPlaceholderKeys ?? [],\n invocationArguments: invocation?.invocationArguments,\n navigationSuffix: navigation.navigationSuffix,\n mediaOrPropertySuffix: navigation.suffix,\n hasEntityKeyPredicate: structure.firstParenthesisOpen !== undefined,\n hasNavigationSuffix: navigation.navigation,\n hasMediaOrPropertySuffix: Boolean(\n navigation.suffix && isMediaOrPropertySuffix(navigation.suffix),\n ),\n topLevelOperationName: operation.name,\n topLevelOperationNameCandidate:\n operationNameIsCandidate(operation, structure, navigation.navigation),\n topLevelOperationInvocation: operation.invocation,\n };\n}\n\nfunction navigationEvidence(\n segments: readonly { text: string }[],\n): NavigationEvidence {\n if (segments.length <= 1) return { navigation: false };\n return {\n navigation: true,\n suffix: segments.at(-1)?.text,\n navigationSuffix: segments.slice(1).map((item) => item.text).join('/'),\n };\n}\n\nfunction operationEvidence(\n structure: ODataPathStructure,\n normalized: NormalizedODataOperationPath | undefined,\n navigation: boolean,\n): OperationEvidence {\n if (normalized?.wasInvocation)\n return {\n invocation: looksLikeLowerCamelHead(structure.firstSegmentHead),\n name: simpleName(normalized.normalizedOperationPath),\n };\n if (!navigation && structure.firstParenthesisOpen === undefined)\n return { invocation: false, name: structure.firstSegmentHead };\n return { invocation: false };\n}\n\nfunction operationNameIsCandidate(\n operation: OperationEvidence,\n structure: ODataPathStructure,\n navigation: boolean,\n): boolean {\n return Boolean(\n operation.name && !navigation\n && structure.firstParenthesisOpen === undefined,\n );\n}\n\nfunction classifyGet(\n structure: ODataPathStructure,\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n invocation: NormalizedODataOperationPath | undefined,\n): ODataPathIntent {\n if (structure.queryIndex !== undefined) return classifyGetQuery(base);\n if (base.hasNavigationSuffix)\n return classifyGetNavigation(base);\n if (structure.firstParenthesisOpen !== undefined)\n return classifyGetParenthesis(base, invocation);\n if (isUpperEntity(base.entitySegment))\n return {\n ...base, kind: 'entity_candidate',\n reason: 'uppercase_collection_segment_without_indexed_entity_evidence',\n };\n return {\n ...base, kind: 'unknown',\n reason: 'get_path_has_no_query_key_or_navigation_signal',\n };\n}\n\nfunction classifyGetQuery(\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n): ODataPathIntent {\n if (base.hasNavigationSuffix)\n return {\n ...base, kind: 'entity_navigation_query',\n reason: 'get_path_has_navigation_and_query_string',\n };\n if (base.topLevelOperationInvocation)\n return {\n ...base, kind: 'unknown',\n reason: 'get_invocation_with_query_string_requires_indexed_operation_evidence',\n };\n return {\n ...base, kind: 'entity_query',\n reason: 'get_collection_path_has_query_string',\n };\n}\n\nfunction classifyGetNavigation(\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n): ODataPathIntent {\n return base.hasMediaOrPropertySuffix\n ? { ...base, kind: 'entity_media', reason: 'get_entity_media_stream_path' }\n : {\n ...base, kind: 'entity_navigation_query',\n reason: 'get_path_has_navigation_segments',\n };\n}\n\nfunction classifyGetParenthesis(\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n invocation: NormalizedODataOperationPath | undefined,\n): ODataPathIntent {\n if (invocation?.wasInvocation && base.topLevelOperationInvocation)\n return {\n ...base, kind: 'operation_invocation',\n reason: 'get_balanced_top_level_operation_invocation',\n };\n return {\n ...base, kind: 'entity_key_read',\n reason: 'get_entity_segment_has_key_predicate',\n };\n}\n\nfunction classifyMutation(\n structure: ODataPathStructure,\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n invocation: NormalizedODataOperationPath | undefined,\n method: string,\n): ODataPathIntent {\n if (invocation?.wasInvocation && base.topLevelOperationInvocation)\n return {\n ...base, kind: 'operation_invocation',\n reason: 'non_get_balanced_top_level_operation_invocation',\n };\n if (base.hasMediaOrPropertySuffix)\n return {\n ...base, kind: 'entity_media',\n reason: 'non_get_entity_media_stream_path',\n };\n if (base.hasNavigationSuffix || structure.firstParenthesisOpen !== undefined)\n return mutationEntityIntent(base, method,\n structure.firstParenthesisOpen !== undefined\n ? 'non_get_entity_key_or_navigation_path_shape'\n : 'non_get_entity_navigation_path_shape');\n if (isUpperEntity(base.entitySegment))\n return mutationEntityIntent(base, method, 'non_get_entity_path_shape');\n return {\n ...base, kind: 'operation_invocation',\n reason: 'non_get_lowercase_path_may_be_operation',\n };\n}\n\nfunction mutationEntityIntent(\n base: Omit<ODataPathIntent, 'kind' | 'reason'>,\n method: string,\n reason: string,\n): ODataPathIntent {\n return {\n ...base,\n kind: method === 'DELETE' ? 'entity_delete' : 'entity_mutation',\n reason,\n };\n}\n\nfunction simpleName(path: string): string {\n const value = path.replace(/^\\//, '');\n return value.split('.').at(-1) ?? value;\n}\n\nfunction isUpperEntity(value: string | undefined): boolean {\n return Boolean(value && /^[A-Z][A-Za-z0-9_]*$/.test(value));\n}\n\nfunction looksLikeLowerCamelHead(value: string | undefined): boolean {\n if (!value) return false;\n const name = value.split('.').at(-1) ?? value;\n return /^[a-z][A-Za-z0-9_]*$/.test(name);\n}\n\nfunction isMediaOrPropertySuffix(segment: string): boolean {\n return ['file', 'content', '$value', 'metadata', 'items']\n .includes(segment.toLowerCase());\n}\n","import path from 'node:path';\nimport ts from 'typescript';\nimport { classifyODataPathIntent } from '../linker/odata-path-normalizer.js';\nimport type { OutboundCallFact } from '../types.js';\nimport { normalizePath } from '../utils/path-utils.js';\nimport { importsFor, lineOf, readSource, type ImportBinding } from './service-binding-parser-helpers.js';\nimport type { RepositorySourceContext } from './ts-project.js';\nimport {\n analyzeOperationPath,\n operationPathExpression,\n pathUnresolvedReason,\n} from './operation-path-analysis.js';\n\ninterface WrapperSpec {\n clientIndex: number;\n pathIndex: number;\n methodIndex?: number;\n methodLiteral?: string;\n sourceFile: string;\n sourceLine: number;\n chain: string[];\n}\n\nexport async function parseImportedWrapperCalls(\n repoPath: string,\n filePath: string,\n source: ts.SourceFile,\n serviceBindings: Set<string>,\n context?: RepositorySourceContext,\n): Promise<OutboundCallFact[]> {\n const imports = await importsFor(repoPath, filePath, source);\n const importedByLocal = new Map(imports.filter((item) => item.sourceFile).map((item) => [item.localName, item]));\n const calls = collectImportedCalls(source, importedByLocal);\n const out: OutboundCallFact[] = [];\n const cache = new Map<string, Promise<WrapperSpec | undefined>>();\n for (const call of calls) {\n if (!ts.isIdentifier(call.expression)) continue;\n const imported = importedByLocal.get(call.expression.text);\n if (!imported?.sourceFile) continue;\n const spec = await loadWrapperSpec(repoPath, imported, cache, 0, context);\n const fact = spec ? wrapperCallFact(source, filePath, call, spec, serviceBindings) : undefined;\n if (fact) out.push(fact);\n }\n return out;\n}\n\nfunction collectImportedCalls(source: ts.SourceFile, imports: Map<string, ImportBinding>): ts.CallExpression[] {\n const calls: ts.CallExpression[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && imports.has(node.expression.text)) calls.push(node);\n ts.forEachChild(node, visit);\n };\n visit(source);\n return calls;\n}\n\nasync function loadWrapperSpec(\n repoPath: string,\n imported: ImportBinding,\n cache: Map<string, Promise<WrapperSpec | undefined>>,\n depth: number,\n context?: RepositorySourceContext,\n): Promise<WrapperSpec | undefined> {\n if (!imported.sourceFile || depth > 5) return undefined;\n const key = `${imported.sourceFile}#${imported.exportedName}`;\n const existing = cache.get(key);\n if (existing) return existing;\n const pending = inspectWrapper(\n repoPath, imported.sourceFile, imported.exportedName, cache, depth, context,\n );\n cache.set(key, pending);\n return pending;\n}\n\nasync function inspectWrapper(\n repoPath: string,\n sourceFile: string,\n exportedName: string,\n cache: Map<string, Promise<WrapperSpec | undefined>>,\n depth: number,\n context?: RepositorySourceContext,\n): Promise<WrapperSpec | undefined> {\n const source = await readSource(\n path.join(repoPath, sourceFile), context, sourceFile,\n );\n if (!source) return undefined;\n const named = findFunction(source, exportedName);\n if (!named) return undefined;\n const direct = directSendSpec(source, sourceFile, named.name, named.fn);\n if (direct) return direct;\n return nestedSendSpec(\n repoPath, sourceFile, source, named.name, named.fn, cache, depth, context,\n );\n}\n\nfunction directSendSpec(source: ts.SourceFile, sourceFile: string, name: string, fn: ts.FunctionLikeDeclaration): WrapperSpec | undefined {\n const params = parameterNames(fn);\n const sends: ts.CallExpression[] = [];\n visitFunctionBody(fn, (node) => {\n if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === 'send') sends.push(node);\n });\n if (sends.length !== 1) return undefined;\n const send = sends[0];\n const receiver = send && ts.isPropertyAccessExpression(send.expression) && ts.isIdentifier(send.expression.expression) ? send.expression.expression.text : undefined;\n const object = send?.arguments[0];\n if (!receiver || !object || !ts.isObjectLiteralExpression(object)) return undefined;\n const pathExpr = propertyExpression(object, 'path');\n const methodExpr = propertyExpression(object, 'method');\n const pathName = pathExpr && ts.isIdentifier(pathExpr) ? pathExpr.text : undefined;\n const clientIndex = params.indexOf(receiver);\n const pathIndex = pathName ? params.indexOf(pathName) : -1;\n if (clientIndex < 0 || pathIndex < 0) return undefined;\n const methodName = methodExpr && ts.isIdentifier(methodExpr) ? methodExpr.text : undefined;\n const methodIndex = methodName ? params.indexOf(methodName) : -1;\n return { clientIndex, pathIndex, methodIndex: methodIndex >= 0 ? methodIndex : undefined, methodLiteral: literal(methodExpr), sourceFile, sourceLine: lineOf(source, fn), chain: [name] };\n}\n\nasync function nestedSendSpec(\n repoPath: string,\n sourceFile: string,\n source: ts.SourceFile,\n name: string,\n fn: ts.FunctionLikeDeclaration,\n cache: Map<string, Promise<WrapperSpec | undefined>>,\n depth: number,\n context?: RepositorySourceContext,\n): Promise<WrapperSpec | undefined> {\n const imports = await importsFor(repoPath, sourceFile, source);\n const byLocal = new Map(imports.filter((item) => item.sourceFile).map((item) => [item.localName, item]));\n const calls: ts.CallExpression[] = [];\n visitFunctionBody(fn, (node) => {\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && byLocal.has(node.expression.text)) calls.push(node);\n });\n if (calls.length !== 1) return undefined;\n const call = calls[0];\n const imported = call && ts.isIdentifier(call.expression) ? byLocal.get(call.expression.text) : undefined;\n const nested = imported\n ? await loadWrapperSpec(repoPath, imported, cache, depth + 1, context)\n : undefined;\n if (!call || !nested) return undefined;\n const params = parameterNames(fn);\n const clientIndex = mappedParameterIndex(call.arguments[nested.clientIndex], params);\n const pathIndex = mappedParameterIndex(call.arguments[nested.pathIndex], params);\n if (clientIndex < 0 || pathIndex < 0) return undefined;\n const methodIndex = nested.methodIndex === undefined ? undefined : mappedParameterIndex(call.arguments[nested.methodIndex], params);\n return { clientIndex, pathIndex, methodIndex: methodIndex !== undefined && methodIndex >= 0 ? methodIndex : undefined, methodLiteral: nested.methodLiteral, sourceFile, sourceLine: lineOf(source, fn), chain: [name, ...nested.chain] };\n}\n\nfunction wrapperCallFact(\n source: ts.SourceFile,\n filePath: string,\n call: ts.CallExpression,\n spec: WrapperSpec,\n serviceBindings: Set<string>,\n): OutboundCallFact | undefined {\n const client = call.arguments[spec.clientIndex];\n if (!client || !ts.isIdentifier(client) || !serviceBindings.has(client.text)) return undefined;\n const methodValue = spec.methodIndex === undefined ? spec.methodLiteral : literal(call.arguments[spec.methodIndex]);\n const method = (methodValue ?? 'POST').toUpperCase();\n const pathAnalysis = analyzeOperationPath(call.arguments[spec.pathIndex], call, method);\n const operationPathExpr = operationPathExpression(pathAnalysis);\n const unresolvedReason = pathUnresolvedReason(pathAnalysis);\n return {\n callType: 'remote_action',\n serviceVariableName: client.text,\n method,\n operationPathExpr,\n payloadSummary: call.getText(source),\n sourceFile: normalizePath(filePath),\n sourceLine: lineOf(source, call),\n callSiteStartOffset: call.getStart(source),\n callSiteEndOffset: call.getEnd(),\n confidence: operationPathExpr ? 0.85 : 0.5,\n unresolvedReason,\n evidence: {\n parser: 'typescript_ast',\n startOffset: call.getStart(source),\n endOffset: call.getEnd(),\n classifier: importedWrapperClassifier(pathAnalysis.status),\n receiver: client.text,\n wrapperFunction: spec.chain[0],\n wrapperChain: spec.chain,\n callerSite: { sourceFile: normalizePath(filePath), sourceLine: lineOf(source, call) },\n calleeSite: { sourceFile: spec.sourceFile, sourceLine: spec.sourceLine },\n rawPathExpression: pathAnalysis.rawExpression,\n missingPathIdentifier: pathAnalysis.runtimeIdentifier,\n pathAnalysis,\n odataPathIntent: operationPathExpr\n ? classifyODataPathIntent(operationPathExpr, method)\n : undefined,\n },\n };\n}\n\nfunction importedWrapperClassifier(status: string): string {\n if (status === 'static') return 'imported_wrapper_literal_path';\n if (status === 'ambiguous') return 'imported_wrapper_ambiguous_path';\n return 'imported_wrapper_dynamic_path';\n}\n\nfunction findFunction(source: ts.SourceFile, exportedName: string): { name: string; fn: ts.FunctionLikeDeclaration } | undefined {\n const localName = exportedLocalName(source, exportedName);\n for (const statement of source.statements) {\n if (ts.isFunctionDeclaration(statement) && statement.name?.text === localName) return { name: exportedName, fn: statement };\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.name.text === localName && declaration.initializer && (ts.isArrowFunction(declaration.initializer) || ts.isFunctionExpression(declaration.initializer))) return { name: exportedName, fn: declaration.initializer };\n }\n }\n return undefined;\n}\n\nfunction exportedLocalName(source: ts.SourceFile, exportedName: string): string {\n for (const statement of source.statements) {\n if (!ts.isExportDeclaration(statement) || !statement.exportClause || !ts.isNamedExports(statement.exportClause)) continue;\n const match = statement.exportClause.elements.find((item) => item.name.text === exportedName);\n if (match) return match.propertyName?.text ?? match.name.text;\n }\n return exportedName;\n}\n\nfunction visitFunctionBody(fn: ts.FunctionLikeDeclaration, visitor: (node: ts.Node) => void): void {\n const visit = (node: ts.Node): void => {\n if (node !== fn && ts.isFunctionLike(node)) return;\n visitor(node);\n ts.forEachChild(node, visit);\n };\n if (fn.body) visit(fn.body);\n}\n\nfunction parameterNames(fn: ts.FunctionLikeDeclaration): string[] {\n return fn.parameters.map((parameter) => ts.isIdentifier(parameter.name) ? parameter.name.text : '');\n}\n\nfunction mappedParameterIndex(expr: ts.Expression | undefined, parameters: string[]): number {\n return expr && ts.isIdentifier(expr) ? parameters.indexOf(expr.text) : -1;\n}\n\nfunction propertyExpression(object: ts.ObjectLiteralExpression, key: string): ts.Expression | undefined {\n for (const property of object.properties) {\n if (ts.isPropertyAssignment(property) && propertyName(property.name) === key) return property.initializer;\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === key) return property.name;\n }\n return undefined;\n}\n\nfunction propertyName(name: ts.PropertyName): string | undefined {\n return ts.isIdentifier(name) || ts.isStringLiteralLike(name) ? name.text : undefined;\n}\n\nfunction literal(expr: ts.Expression | undefined): string | undefined {\n return expr && (ts.isStringLiteralLike(expr) || ts.isNoSubstitutionTemplateLiteral(expr)) ? expr.text : undefined;\n}\n","import ts from 'typescript';\nimport {\n classifyODataPathIntent,\n normalizeODataOperationInvocationPath,\n} from '../linker/odata-path-normalizer.js';\nimport { analyzeODataPathStructure } from '../linker/005-odata-path-structure.js';\n\nexport type OperationPathStatus = 'static' | 'ambiguous' | 'dynamic' | 'unknown';\n\nexport interface OperationPathAnalysis {\n status: OperationPathStatus;\n rawExpression?: string;\n normalizedOperationPath?: string;\n candidateRawPaths: string[];\n candidateNormalizedOperationPaths: string[];\n placeholderKeys: string[];\n sourceKind: string;\n candidateIdentifier?: string;\n runtimeIdentifier?: string;\n dynamicReassignments: Array<{ expression: string; sourceLine: number }>;\n lexicalScope: {\n declarationLine?: number;\n assignmentLines: number[];\n sourceOrderSafe: boolean;\n };\n}\n\ninterface CandidateState {\n paths: string[];\n placeholders: string[];\n dynamic: Array<{ expression: string; sourceLine: number }>;\n sourceKinds: string[];\n}\n\ninterface Binding {\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration;\n immutable: boolean;\n}\n\nconst maxAliasDepth = 6;\n\nexport function analyzeOperationPath(\n expression: ts.Expression | undefined,\n use: ts.Node,\n method = 'POST',\n): OperationPathAnalysis {\n if (!expression) return emptyAnalysis();\n const state = collectExpressionState(expression, use, 0, new Set());\n const paths = unique(state.paths.map(normalizeRawPath));\n const normalized = unique(paths.flatMap((value) => normalizedCandidate(value, method)));\n const status = pathStatus(paths, state.placeholders, state.dynamic);\n const runtimeIdentifier = state.dynamic.at(-1)?.expression;\n return {\n status,\n rawExpression: expression.getText(expression.getSourceFile()),\n normalizedOperationPath: status === 'static' && normalized.length === 1 ? normalized[0] : undefined,\n candidateRawPaths: paths,\n candidateNormalizedOperationPaths: normalized,\n placeholderKeys: unique([...state.placeholders, ...(runtimeIdentifier ? [runtimeIdentifier] : [])]),\n sourceKind: unique(state.sourceKinds).join('+') || 'unknown',\n candidateIdentifier: ts.isIdentifier(expression) ? expression.text : undefined,\n runtimeIdentifier,\n dynamicReassignments: state.dynamic,\n lexicalScope: lexicalEvidence(expression, use),\n };\n}\n\nexport function operationPathExpression(analysis: OperationPathAnalysis): string | undefined {\n if (analysis.status === 'ambiguous' || analysis.status === 'unknown') return undefined;\n if (analysis.sourceKind.includes('parameter_binding')) return undefined;\n if (analysis.candidateRawPaths.length === 1 && analysis.dynamicReassignments.length === 0)\n return analysis.candidateRawPaths[0];\n if (!analysis.runtimeIdentifier || analysis.sourceKind.includes('binding_not_found'))\n return undefined;\n return isRuntimeIdentifier(analysis.runtimeIdentifier)\n ? `\\${${analysis.runtimeIdentifier}}`\n : undefined;\n}\n\nexport function pathUnresolvedReason(analysis: OperationPathAnalysis): string | undefined {\n if (analysis.status === 'ambiguous') return 'ambiguous_operation_path_candidates';\n if (analysis.status === 'dynamic' && !operationPathExpression(analysis))\n return 'dynamic_operation_path_identifier';\n if (analysis.dynamicReassignments.length > 0) return 'dynamic_operation_path_identifier';\n return undefined;\n}\n\nfunction collectExpressionState(\n expression: ts.Expression,\n use: ts.Node,\n depth: number,\n seen: Set<ts.Node>,\n): CandidateState {\n const unwrapped = unwrap(expression);\n if (ts.isStringLiteral(unwrapped)) return staticState(unwrapped.text, 'string_literal');\n if (ts.isNoSubstitutionTemplateLiteral(unwrapped))\n return staticState(unwrapped.text, 'no_substitution_template');\n if (ts.isTemplateExpression(unwrapped)) return templateState(unwrapped);\n if (ts.isConditionalExpression(unwrapped))\n return mergeStates([\n collectExpressionState(unwrapped.whenTrue, use, depth + 1, seen),\n collectExpressionState(unwrapped.whenFalse, use, depth + 1, seen),\n ], 'conditional_candidates');\n if (ts.isIdentifier(unwrapped))\n return collectIdentifierState(unwrapped, use, depth, seen);\n return dynamicState(unwrapped);\n}\n\nfunction collectIdentifierState(\n identifier: ts.Identifier,\n use: ts.Node,\n depth: number,\n seen: Set<ts.Node>,\n): CandidateState {\n if (depth >= maxAliasDepth)\n return dynamicState(identifier, 'alias_depth_exceeded');\n const binding = resolveBinding(identifier, use);\n if (!binding || seen.has(binding.declaration))\n return dynamicState(identifier, binding ? 'alias_cycle' : 'binding_not_found');\n seen.add(binding.declaration);\n if (ts.isParameter(binding.declaration))\n return dynamicState(identifier, 'parameter_binding');\n const expressions = reachingExpressions(binding.declaration, use);\n if (expressions.length === 0) return dynamicState(identifier, 'initializer_missing');\n const states = expressions.map((item) =>\n collectExpressionState(item.expression, item.node, depth + 1, seen));\n const merged = mergeStates(states, binding.immutable ? 'const_alias' : 'mutable_alias');\n if (merged.dynamic.length === 0) return merged;\n return {\n ...merged,\n dynamic: merged.dynamic.map((item) =>\n item.expression === identifier.text ? item : item),\n };\n}\n\nfunction reachingExpressions(\n declaration: ts.VariableDeclaration,\n use: ts.Node,\n): Array<{ expression: ts.Expression; node: ts.Node }> {\n const rows: Array<{ expression: ts.Expression; node: ts.Node }> = [];\n if (declaration.initializer) rows.push({ expression: declaration.initializer, node: declaration });\n if ((declaration.parent.flags & ts.NodeFlags.Const) !== 0) return rows;\n const source = use.getSourceFile();\n const visit = (node: ts.Node): void => {\n if (node.getStart(source) >= use.getStart(source)) return;\n if (node !== source && ts.isFunctionLike(node) && !contains(node, use)) return;\n if (isAssignmentTo(node, declaration, use))\n rows.push({ expression: node.right, node });\n ts.forEachChild(node, visit);\n };\n visit(source);\n return rows.sort((left, right) =>\n left.node.getStart(source) - right.node.getStart(source));\n}\n\nfunction isAssignmentTo(\n node: ts.Node,\n declaration: ts.VariableDeclaration,\n use: ts.Node,\n): node is ts.BinaryExpression {\n if (!ts.isBinaryExpression(node) || node.operatorToken.kind !== ts.SyntaxKind.EqualsToken)\n return false;\n if (!ts.isIdentifier(node.left) || !ts.isIdentifier(declaration.name)) return false;\n return resolveBinding(node.left, node)?.declaration === declaration && contains(declarationScope(declaration), use);\n}\n\nfunction resolveBinding(identifier: ts.Identifier, use: ts.Node): Binding | undefined {\n const source = use.getSourceFile();\n const matches: Array<ts.VariableDeclaration | ts.ParameterDeclaration> = [];\n const visit = (node: ts.Node): void => {\n if (isNamedDeclaration(node, identifier.text) && isAccessible(node, use))\n matches.push(node);\n ts.forEachChild(node, visit);\n };\n visit(source);\n const declaration = matches.sort((left, right) =>\n right.getStart(source) - left.getStart(source))[0];\n if (!declaration) return undefined;\n const immutable = ts.isVariableDeclaration(declaration)\n && (declaration.parent.flags & ts.NodeFlags.Const) !== 0;\n return { declaration, immutable };\n}\n\nfunction isNamedDeclaration(\n node: ts.Node,\n name: string,\n): node is ts.VariableDeclaration | ts.ParameterDeclaration {\n return (ts.isVariableDeclaration(node) || ts.isParameter(node))\n && ts.isIdentifier(node.name)\n && node.name.text === name;\n}\n\nfunction isAccessible(\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n use: ts.Node,\n): boolean {\n const source = use.getSourceFile();\n if (declaration.name.getStart(source) >= use.getStart(source)) return false;\n const scope = declarationScope(declaration);\n return ts.isSourceFile(scope) || contains(scope, use);\n}\n\nfunction declarationScope(\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n): ts.Node {\n if (ts.isParameter(declaration)) return declaration.parent;\n if (ts.isCatchClause(declaration.parent)) return declaration.parent.block;\n const list = declaration.parent;\n if (isLoopInitializer(list.parent)) return list.parent.statement;\n const blockScoped = (list.flags & (ts.NodeFlags.Const | ts.NodeFlags.Let)) !== 0;\n let current: ts.Node = list.parent;\n if (!blockScoped) {\n while (current.parent && !ts.isFunctionLike(current) && !ts.isSourceFile(current))\n current = current.parent;\n return current;\n }\n while (current.parent && !isLexicalScope(current)) current = current.parent;\n return current;\n}\n\nfunction isLoopInitializer(\n node: ts.Node,\n): node is ts.ForStatement | ts.ForInStatement | ts.ForOfStatement {\n return ts.isForStatement(node) || ts.isForInStatement(node) || ts.isForOfStatement(node);\n}\n\nfunction isLexicalScope(node: ts.Node): boolean {\n return ts.isBlock(node)\n || ts.isSourceFile(node)\n || ts.isModuleBlock(node)\n || ts.isCaseBlock(node)\n || ts.isFunctionLike(node);\n}\n\nfunction templateState(expression: ts.TemplateExpression): CandidateState {\n const value = expression.getText(expression.getSourceFile()).slice(1, -1);\n return {\n paths: [value],\n placeholders: expression.templateSpans.map((span) =>\n span.expression.getText(expression.getSourceFile())),\n dynamic: [],\n sourceKinds: ['template_with_placeholders'],\n };\n}\n\nfunction staticState(path: string, sourceKind: string): CandidateState {\n return { paths: [path], placeholders: [], dynamic: [], sourceKinds: [sourceKind] };\n}\n\nfunction dynamicState(expression: ts.Expression, sourceKind = 'dynamic_expression'): CandidateState {\n return {\n paths: [],\n placeholders: [],\n dynamic: [{\n expression: expression.getText(expression.getSourceFile()),\n sourceLine: sourceLine(expression),\n }],\n sourceKinds: [sourceKind],\n };\n}\n\nfunction mergeStates(states: CandidateState[], sourceKind: string): CandidateState {\n return {\n paths: states.flatMap((state) => state.paths),\n placeholders: states.flatMap((state) => state.placeholders),\n dynamic: states.flatMap((state) => state.dynamic),\n sourceKinds: [sourceKind, ...states.flatMap((state) => state.sourceKinds)],\n };\n}\n\nfunction pathStatus(\n paths: string[],\n placeholders: string[],\n dynamic: CandidateState['dynamic'],\n): OperationPathStatus {\n if (dynamic.length > 0) return 'dynamic';\n if (paths.length > 1) return 'ambiguous';\n if (placeholders.length > 0) return 'dynamic';\n if (paths.length === 1) return 'static';\n return 'unknown';\n}\n\nfunction normalizedCandidate(value: string, method: string): string[] {\n const invocation = normalizeODataOperationInvocationPath(value);\n if (invocation?.wasInvocation) return [invocation.normalizedOperationPath];\n const intent = classifyODataPathIntent(value, method);\n if (intent.kind.startsWith('entity_')) return [];\n const structure = analyzeODataPathStructure(value);\n if (structure.status !== 'valid' || !value.startsWith('/')\n || structure.segments.length !== 1\n || structure.queryIndex !== undefined)\n return [];\n return [value];\n}\n\nfunction lexicalEvidence(expression: ts.Expression, use: ts.Node): OperationPathAnalysis['lexicalScope'] {\n if (!ts.isIdentifier(expression))\n return { assignmentLines: [], sourceOrderSafe: expression.getStart() < use.getStart() };\n const binding = resolveBinding(expression, use);\n if (!binding) return { assignmentLines: [], sourceOrderSafe: false };\n const assignmentLines = ts.isVariableDeclaration(binding.declaration)\n ? reachingExpressions(binding.declaration, use)\n .slice(binding.declaration.initializer ? 1 : 0)\n .map((item) => sourceLine(item.node))\n : [];\n return {\n declarationLine: sourceLine(binding.declaration),\n assignmentLines,\n sourceOrderSafe: true,\n };\n}\n\nfunction unwrap(expression: ts.Expression): ts.Expression {\n if (ts.isAwaitExpression(expression) || ts.isParenthesizedExpression(expression))\n return unwrap(expression.expression);\n if (ts.isAsExpression(expression) || ts.isSatisfiesExpression(expression)\n || ts.isTypeAssertionExpression(expression))\n return unwrap(expression.expression);\n return expression;\n}\n\nfunction normalizeRawPath(value: string): string {\n return value.startsWith('/') ? value : `/${value}`;\n}\n\nfunction isRuntimeIdentifier(value: string): boolean {\n return /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)*$/.test(value);\n}\n\nfunction contains(parent: ts.Node, child: ts.Node): boolean {\n const source = child.getSourceFile();\n return child.getStart(source) >= parent.getStart(source)\n && child.getEnd() <= parent.getEnd();\n}\n\nfunction sourceLine(node: ts.Node): number {\n const source = node.getSourceFile();\n return source.getLineAndCharacterOfPosition(node.getStart(source)).line + 1;\n}\n\nfunction unique(values: string[]): string[] {\n return [...new Set(values)].sort();\n}\n\nfunction emptyAnalysis(): OperationPathAnalysis {\n return {\n status: 'unknown',\n candidateRawPaths: [],\n candidateNormalizedOperationPaths: [],\n placeholderKeys: [],\n sourceKind: 'missing',\n dynamicReassignments: [],\n lexicalScope: { assignmentLines: [], sourceOrderSafe: false },\n };\n}\n","import ts from 'typescript';\n\nconst capQueryBuilderRoots = new Set([\n 'SELECT.from',\n 'SELECT.one.from',\n 'SELECT.one',\n 'SELECT.distinct.from',\n 'SELECT.distinct.one.from',\n 'INSERT.into',\n 'UPSERT.into',\n 'UPDATE.entity',\n 'UPDATE',\n 'DELETE.from',\n]);\nconst promiseValueShadowCache = new WeakMap<ts.SourceFile, boolean>();\n\nexport type DirectQueryExecutionContext =\n | 'await'\n | 'async_return'\n | 'promise_return'\n | 'promise_aggregate';\n\nexport interface DirectQueryBuilderStatement {\n root: ts.CallExpression;\n logicalCall: ts.CallExpression;\n statement: ts.Expression;\n executionContext: DirectQueryExecutionContext;\n}\n\nexport function isCapQueryBuilderRootName(name: string): boolean {\n return capQueryBuilderRoots.has(name);\n}\n\nexport function queryBuilderRoot(\n expression: ts.Expression,\n): ts.CallExpression | undefined {\n const unwrapped = unwrapQueryExpression(expression);\n if (!ts.isCallExpression(unwrapped)) return undefined;\n if (isCapQueryBuilderRootName(expressionName(unwrapped.expression)))\n return unwrapped;\n return ts.isPropertyAccessExpression(unwrapped.expression)\n ? queryBuilderRoot(unwrapped.expression.expression)\n : undefined;\n}\n\nexport function directQueryBuilderStatement(\n node: ts.CallExpression,\n): DirectQueryBuilderStatement | undefined {\n const root = queryBuilderRoot(node);\n if (!root) return undefined;\n const logicalCall = outerFluentQueryCall(root);\n if (logicalCall !== node) return undefined;\n const expression = outerTransparentExpression(logicalCall);\n const awaitExpression = directAwaitExpression(expression);\n if (awaitExpression)\n return { root, logicalCall, statement: awaitExpression, executionContext: 'await' };\n const returnContext = returnExecutionContext(expression);\n if (returnContext)\n return { root, logicalCall, statement: expression, executionContext: returnContext };\n if (isAwaitedPromiseAllElement(expression))\n return { root, logicalCall, statement: expression, executionContext: 'promise_aggregate' };\n return undefined;\n}\n\nfunction expressionName(expression: ts.Expression): string {\n if (ts.isIdentifier(expression)) return expression.text;\n if (ts.isPropertyAccessExpression(expression))\n return `${expressionName(expression.expression)}.${expression.name.text}`;\n return expression.getText();\n}\n\nfunction unwrapQueryExpression(expression: ts.Expression): ts.Expression {\n if (ts.isParenthesizedExpression(expression) || ts.isAwaitExpression(expression)\n || ts.isAsExpression(expression) || ts.isTypeAssertionExpression(expression)\n || ts.isNonNullExpression(expression) || ts.isSatisfiesExpression(expression))\n return unwrapQueryExpression(expression.expression);\n return expression;\n}\n\nfunction wrapperParent(node: ts.Expression): ts.Expression | undefined {\n const parent = node.parent;\n if ((ts.isParenthesizedExpression(parent) || ts.isAsExpression(parent)\n || ts.isTypeAssertionExpression(parent) || ts.isNonNullExpression(parent)\n || ts.isSatisfiesExpression(parent)) && parent.expression === node)\n return parent;\n return undefined;\n}\n\nfunction fluentCallParent(node: ts.Expression): ts.CallExpression | undefined {\n const property = node.parent;\n if (!ts.isPropertyAccessExpression(property) || property.expression !== node)\n return undefined;\n const call = property.parent;\n return ts.isCallExpression(call) && call.expression === property ? call : undefined;\n}\n\nfunction outerFluentQueryCall(root: ts.CallExpression): ts.CallExpression {\n let current: ts.Expression = root;\n let outer = root;\n while (true) {\n const wrapper = wrapperParent(current);\n if (wrapper) {\n current = wrapper;\n continue;\n }\n const next = fluentCallParent(current);\n if (!next) return outer;\n outer = next;\n current = next;\n }\n}\n\nfunction outerTransparentExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (true) {\n const wrapper = wrapperParent(current);\n if (!wrapper) return current;\n current = wrapper;\n }\n}\n\nfunction directAwaitExpression(\n expression: ts.Expression,\n): ts.AwaitExpression | undefined {\n const parent = expression.parent;\n return ts.isAwaitExpression(parent) && parent.expression === expression\n ? parent\n : undefined;\n}\n\nfunction returnExecutionContext(\n expression: ts.Expression,\n): DirectQueryExecutionContext | undefined {\n const callable = returnedExpressionCallable(expression);\n if (!callable) return undefined;\n if (hasAsyncModifier(callable)) return 'async_return';\n return hasGuaranteedPromiseReturn(callable) ? 'promise_return' : undefined;\n}\n\nfunction returnedExpressionCallable(\n expression: ts.Expression,\n): ts.FunctionLikeDeclaration | undefined {\n const parent = expression.parent;\n if (ts.isArrowFunction(parent) && parent.body === expression) return parent;\n if (!ts.isReturnStatement(parent) || parent.expression !== expression)\n return undefined;\n return nearestCallable(parent);\n}\n\nfunction nearestCallable(node: ts.Node): ts.FunctionLikeDeclaration | undefined {\n let current = node.parent;\n while (current) {\n if (isRuntimeCallable(current)) return current;\n current = current.parent;\n }\n return undefined;\n}\n\nfunction isRuntimeCallable(node: ts.Node): node is ts.FunctionLikeDeclaration {\n return ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node)\n || ts.isArrowFunction(node) || ts.isMethodDeclaration(node)\n || ts.isConstructorDeclaration(node) || ts.isGetAccessorDeclaration(node)\n || ts.isSetAccessorDeclaration(node);\n}\n\nfunction hasAsyncModifier(node: ts.Node): boolean {\n return !isGeneratorCallable(node) && ts.canHaveModifiers(node) && (ts.getModifiers(node)?.some(\n (modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword,\n ) ?? false);\n}\n\nfunction isGeneratorCallable(node: ts.Node): boolean {\n return (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node)\n || ts.isMethodDeclaration(node)) && Boolean(node.asteriskToken);\n}\n\nfunction hasGuaranteedPromiseReturn(\n callable: ts.FunctionLikeDeclaration,\n): boolean {\n const returnType = declaredReturnType(callable);\n return Boolean(returnType && isGuaranteedPromiseType(returnType));\n}\n\nfunction declaredReturnType(\n callable: ts.FunctionLikeDeclaration,\n): ts.TypeNode | undefined {\n if (ts.isFunctionDeclaration(callable) || ts.isFunctionExpression(callable)\n || ts.isArrowFunction(callable) || ts.isMethodDeclaration(callable))\n return callable.type;\n return undefined;\n}\n\nfunction isGuaranteedPromiseType(type: ts.TypeNode): boolean {\n if (ts.isParenthesizedTypeNode(type))\n return isGuaranteedPromiseType(type.type);\n if (ts.isTypeReferenceNode(type))\n return isStandardPromiseTypeName(type.typeName);\n if (ts.isUnionTypeNode(type))\n return type.types.length > 0 && type.types.every(isGuaranteedPromiseType);\n if (ts.isIntersectionTypeNode(type))\n return type.types.some(isGuaranteedPromiseType);\n return false;\n}\n\nfunction isStandardPromiseTypeName(name: ts.EntityName): boolean {\n if (ts.isIdentifier(name))\n return name.text === 'Promise' || name.text === 'PromiseLike';\n return ts.isIdentifier(name.left)\n && (name.left.text === 'globalThis' || name.left.text === 'global')\n && (name.right.text === 'Promise' || name.right.text === 'PromiseLike');\n}\n\nfunction isAwaitedPromiseAllElement(expression: ts.Expression): boolean {\n const array = directArrayParent(expression);\n if (!array) return false;\n const aggregate = aggregateCallForArray(array);\n return Boolean(aggregate && isBuiltInPromiseAll(aggregate)\n && directAwaitExpression(outerTransparentExpression(aggregate)));\n}\n\nfunction directArrayParent(\n expression: ts.Expression,\n): ts.ArrayLiteralExpression | undefined {\n const parent = expression.parent;\n return ts.isArrayLiteralExpression(parent) && parent.elements.some(\n (element) => element === expression,\n ) ? parent : undefined;\n}\n\nfunction aggregateCallForArray(\n array: ts.ArrayLiteralExpression,\n): ts.CallExpression | undefined {\n const argument = outerTransparentExpression(array);\n const parent = argument.parent;\n return ts.isCallExpression(parent) && parent.arguments.length === 1\n && parent.arguments[0] === argument ? parent : undefined;\n}\n\nfunction isBuiltInPromiseAll(call: ts.CallExpression): boolean {\n return ts.isPropertyAccessExpression(call.expression)\n && ts.isIdentifier(call.expression.expression)\n && call.expression.expression.text === 'Promise'\n && call.expression.name.text === 'all'\n && !hasPromiseValueShadow(call.getSourceFile());\n}\n\nfunction hasPromiseValueShadow(source: ts.SourceFile): boolean {\n const cached = promiseValueShadowCache.get(source);\n if (cached !== undefined) return cached;\n let shadowed = false;\n const visit = (node: ts.Node): void => {\n if (shadowed) return;\n if (declaresPromiseValue(node)) {\n shadowed = true;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n promiseValueShadowCache.set(source, shadowed);\n return shadowed;\n}\n\nfunction declaresPromiseValue(node: ts.Node): boolean {\n if (ts.isVariableDeclaration(node) || ts.isParameter(node))\n return bindingNameIsPromise(node.name);\n if (ts.isImportClause(node))\n return !node.isTypeOnly && nodeIsPromise(node.name);\n if (ts.isImportSpecifier(node))\n return !node.isTypeOnly && nodeIsPromise(node.name);\n if (ts.isNamespaceImport(node) || ts.isImportEqualsDeclaration(node))\n return nodeIsPromise(node.name);\n if (ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)\n || ts.isEnumDeclaration(node) || ts.isModuleDeclaration(node))\n return nodeIsPromise(node.name);\n return false;\n}\n\nfunction bindingNameIsPromise(name: ts.BindingName): boolean {\n if (ts.isIdentifier(name)) return name.text === 'Promise';\n if (ts.isObjectBindingPattern(name))\n return name.elements.some((element) => bindingNameIsPromise(element.name));\n return name.elements.some((element) => ts.isBindingElement(element)\n && bindingNameIsPromise(element.name));\n}\n\nfunction nodeIsPromise(name: ts.Node | undefined): boolean {\n return Boolean(name && ts.isIdentifier(name) && name.text === 'Promise');\n}\n","import ts from 'typescript';\nimport { isCapQueryBuilderRootName } from './000-direct-query-execution.js';\n\nexport interface BindingResolution {\n declaration?: ts.VariableDeclaration | ts.ParameterDeclaration;\n initializer?: ts.Expression;\n immutable: boolean;\n evidence: string[];\n}\n\ninterface DestructuredBinding {\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration;\n initializer?: ts.Expression;\n entityName: string;\n}\n\nexport const maxAliasDepth = 5;\nconst cdsModelSpecifier = /^#cds-models(?:\\/|$)/;\nconst modelNamespaceCache = new WeakMap<ts.SourceFile, Set<string>>();\n\nexport function expressionName(expr: ts.Expression): string {\n if (ts.isIdentifier(expr)) return expr.text;\n if (ts.isPropertyAccessExpression(expr))\n return `${expressionName(expr.expression)}.${expr.name.text}`;\n return expr.getText();\n}\n\nexport function variableInitializers(\n source: ts.SourceFile,\n): Map<string, ts.Expression> {\n const initializers = new Map<string, ts.Expression>();\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement)\n || (statement.declarationList.flags & ts.NodeFlags.Const) === 0) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer)\n initializers.set(declaration.name.text, declaration.initializer);\n }\n }\n return initializers;\n}\n\nfunction unwrapQueryExpression(expr: ts.Expression): ts.Expression {\n if (ts.isParenthesizedExpression(expr) || ts.isAwaitExpression(expr)\n || ts.isAsExpression(expr) || ts.isTypeAssertionExpression(expr)\n || ts.isNonNullExpression(expr) || ts.isSatisfiesExpression(expr))\n return unwrapQueryExpression(expr.expression);\n return expr;\n}\n\nfunction isFunctionLikeScope(node: ts.Node): boolean {\n return ts.isFunctionLike(node) || ts.isSourceFile(node);\n}\n\nfunction nodeContains(parent: ts.Node, child: ts.Node): boolean {\n const source = child.getSourceFile();\n return child.getStart(source) >= parent.getStart(source)\n && child.getEnd() <= parent.getEnd();\n}\n\nfunction isLoopInitializerScope(\n declaration: ts.VariableDeclaration,\n scope: ts.Node,\n): boolean {\n const list = declaration.parent;\n return (ts.isForStatement(scope) && scope.initializer === list)\n || ((ts.isForInStatement(scope) || ts.isForOfStatement(scope))\n && scope.initializer === list);\n}\n\nfunction isLexicalScopeBoundary(\n node: ts.Node,\n declaration: ts.VariableDeclaration,\n): boolean {\n return ts.isBlock(node) || ts.isSourceFile(node) || ts.isModuleBlock(node)\n || ts.isCaseBlock(node) || isLoopInitializerScope(declaration, node)\n || isFunctionLikeScope(node);\n}\n\nfunction declarationScope(\n node: ts.VariableDeclaration | ts.ParameterDeclaration,\n): ts.Node {\n if (ts.isParameter(node)) return node.parent;\n if (ts.isCatchClause(node.parent) && node.parent.variableDeclaration === node)\n return node.parent;\n const list = node.parent;\n const blockScoped = (list.flags & (ts.NodeFlags.Const | ts.NodeFlags.Let)) !== 0;\n let current: ts.Node = list.parent;\n if (!blockScoped) {\n while (current.parent && !isFunctionLikeScope(current)) current = current.parent;\n return current;\n }\n while (current.parent && !isLexicalScopeBoundary(current, node))\n current = current.parent;\n return current;\n}\n\nfunction catchBindingScope(\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n): ts.CatchClause | undefined {\n if (ts.isParameter(declaration)) return undefined;\n return ts.isCatchClause(declaration.parent)\n && declaration.parent.variableDeclaration === declaration\n ? declaration.parent\n : undefined;\n}\n\nfunction declarationIsInScope(\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n use: ts.Node,\n): boolean {\n const catchScope = catchBindingScope(declaration);\n if (catchScope) return nodeContains(catchScope.block, use);\n const scope = declarationScope(declaration);\n if (ts.isForStatement(scope) || ts.isForInStatement(scope)\n || ts.isForOfStatement(scope)) return nodeContains(scope.statement, use);\n return ts.isSourceFile(scope) || nodeContains(scope, use);\n}\n\nfunction isAccessibleDeclaration(\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n use: ts.Node,\n): boolean {\n return declaration.name.getStart(use.getSourceFile()) < use.getStart()\n && declarationIsInScope(declaration, use);\n}\n\nexport function resolveBinding(\n identifier: ts.Identifier,\n use: ts.Node,\n): BindingResolution {\n const source = use.getSourceFile();\n let best: ts.VariableDeclaration | ts.ParameterDeclaration | undefined;\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)\n && node.name.text === identifier.text && isAccessibleDeclaration(node, use))\n best = node;\n if (ts.isParameter(node) && ts.isIdentifier(node.name)\n && node.name.text === identifier.text && isAccessibleDeclaration(node, use))\n best = node;\n ts.forEachChild(node, visit);\n };\n visit(source);\n if (!best) return { immutable: false, evidence: ['binding_not_found'] };\n const immutable = ts.isVariableDeclaration(best)\n && (best.parent.flags & ts.NodeFlags.Const) !== 0;\n return {\n declaration: best,\n initializer: ts.isVariableDeclaration(best) ? best.initializer : undefined,\n immutable,\n evidence: [immutable\n ? 'lexical_const_binding_before_use'\n : 'lexical_mutable_or_parameter_binding'],\n };\n}\n\nfunction directBindingElement(\n name: ts.BindingName,\n identifier: ts.Identifier,\n): ts.BindingElement | undefined {\n if (ts.isIdentifier(name)) return undefined;\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element) || element.dotDotDotToken\n || element.initializer\n || !ts.isIdentifier(element.name)) continue;\n if (element.name.text === identifier.text) return element;\n }\n return undefined;\n}\n\nfunction bindingNameContains(name: ts.BindingName, target: string): boolean {\n if (ts.isIdentifier(name)) return name.text === target;\n return name.elements.some((element) => ts.isBindingElement(element)\n && bindingNameContains(element.name, target));\n}\n\nfunction bindingScope(node: ts.Node): ts.Node {\n if (ts.isVariableDeclaration(node) || ts.isParameter(node))\n return declarationScope(node);\n if (ts.isFunctionExpression(node) || ts.isClassExpression(node)) return node;\n return node.parent;\n}\n\nfunction bindingIsCloser(candidate: ts.Node, current: ts.Node, use: ts.Node): boolean {\n const source = use.getSourceFile();\n const candidateScope = bindingScope(candidate);\n const currentScope = bindingScope(current);\n const candidateSpan = candidateScope.getEnd() - candidateScope.getStart(source);\n const currentSpan = currentScope.getEnd() - currentScope.getStart(source);\n return candidateSpan < currentSpan\n || (candidateSpan === currentSpan\n && candidate.getStart(source) > current.getStart(source));\n}\n\nfunction nearestScopedVariableDeclaration(\n identifier: ts.Identifier,\n): ts.VariableDeclaration | ts.ParameterDeclaration | undefined {\n let best: ts.VariableDeclaration | ts.ParameterDeclaration | undefined;\n const visit = (node: ts.Node): void => {\n if ((ts.isVariableDeclaration(node) || ts.isParameter(node))\n && bindingNameContains(node.name, identifier.text)\n && declarationIsInScope(node, identifier)\n && (!best || bindingIsCloser(node, best, identifier))) best = node;\n ts.forEachChild(node, visit);\n };\n visit(identifier.getSourceFile());\n return best;\n}\n\nfunction hasScopedVariableDeclaration(identifier: ts.Identifier): boolean {\n return Boolean(nearestScopedVariableDeclaration(identifier));\n}\n\nfunction namedValueDeclarationMatches(\n node: ts.Node,\n name: string,\n): boolean {\n if (ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)\n || ts.isEnumDeclaration(node)) return node.name?.text === name;\n return ts.isModuleDeclaration(node) && ts.isIdentifier(node.name)\n && node.name.text === name;\n}\n\nfunction declarationContainerContains(node: ts.Node, use: ts.Node): boolean {\n const container = node.parent;\n return ts.isSourceFile(container)\n || ((ts.isBlock(container) || ts.isModuleBlock(container))\n && nodeContains(container, use));\n}\n\nfunction selfNamedValueDeclarationMatches(\n node: ts.Node,\n identifier: ts.Identifier,\n): boolean {\n return (ts.isFunctionExpression(node) || ts.isClassExpression(node))\n && node.name?.text === identifier.text\n && nodeContains(node, identifier);\n}\n\nfunction scopedNonVariableDeclarationMatches(\n node: ts.Node,\n identifier: ts.Identifier,\n): boolean {\n return (namedValueDeclarationMatches(node, identifier.text)\n && declarationContainerContains(node, identifier))\n || selfNamedValueDeclarationMatches(node, identifier);\n}\n\nfunction nearestScopedNonVariableDeclaration(\n identifier: ts.Identifier,\n): ts.Node | undefined {\n let best: ts.Node | undefined;\n const visit = (node: ts.Node): void => {\n if (scopedNonVariableDeclarationMatches(node, identifier)\n && (!best || bindingIsCloser(node, best, identifier))) best = node;\n ts.forEachChild(node, visit);\n };\n visit(identifier.getSourceFile());\n return best;\n}\n\nfunction hasScopedNonVariableDeclaration(identifier: ts.Identifier): boolean {\n return Boolean(nearestScopedNonVariableDeclaration(identifier));\n}\n\nfunction nonVariableBindingWins(\n identifier: ts.Identifier,\n selected: ts.Node | undefined,\n): boolean {\n const declaration = nearestScopedNonVariableDeclaration(identifier);\n return Boolean(declaration\n && (!selected || bindingIsCloser(declaration, selected, identifier)));\n}\n\nfunction importClauseBinds(\n clause: ts.ImportClause | undefined,\n name: string,\n): boolean {\n if (!clause || clause.isTypeOnly) return false;\n if (clause.name?.text === name) return true;\n const bindings = clause.namedBindings;\n if (!bindings) return false;\n if (ts.isNamespaceImport(bindings)) return bindings.name.text === name;\n return bindings.elements.some((element) => !element.isTypeOnly\n && element.name.text === name);\n}\n\nfunction hasValueImportBinding(identifier: ts.Identifier): boolean {\n return identifier.getSourceFile().statements.some((statement) => {\n if (ts.isImportDeclaration(statement))\n return importClauseBinds(statement.importClause, identifier.text);\n return ts.isImportEqualsDeclaration(statement) && !statement.isTypeOnly\n && statement.name.text === identifier.text;\n });\n}\n\nfunction sourcePropertyName(\n element: ts.BindingElement,\n localName: string,\n): string | undefined {\n const property = element.propertyName;\n if (!property) return localName;\n if (ts.isIdentifier(property) || ts.isStringLiteral(property)\n || ts.isNumericLiteral(property)) return property.text;\n return undefined;\n}\n\nfunction resolveDestructuredBinding(\n identifier: ts.Identifier,\n use: ts.Node,\n): DestructuredBinding | undefined {\n const source = use.getSourceFile();\n let best: DestructuredBinding | undefined;\n const visit = (node: ts.Node): void => {\n if ((ts.isVariableDeclaration(node) || ts.isParameter(node))\n && isAccessibleDeclaration(node, use)) {\n const element = directBindingElement(node.name, identifier);\n const entityName = element\n ? sourcePropertyName(element, identifier.text)\n : undefined;\n if (entityName && (!best || node.name.getStart(source)\n > best.declaration.name.getStart(source))) {\n best = {\n declaration: node,\n initializer: node.initializer,\n entityName,\n };\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return best;\n}\n\nfunction isEntitiesBase(expr: ts.Expression): boolean {\n const value = unwrapQueryExpression(expr);\n if (ts.isPropertyAccessExpression(value)) return value.name.text === 'entities';\n return ts.isCallExpression(value)\n && ts.isPropertyAccessExpression(value.expression)\n && value.expression.name.text === 'entities';\n}\n\nfunction hasLexicalValueShadow(\n identifier: ts.Identifier,\n includeImports: boolean,\n): boolean {\n return hasScopedVariableDeclaration(identifier)\n || hasScopedNonVariableDeclaration(identifier)\n || (includeImports && hasValueImportBinding(identifier));\n}\n\nfunction modelRequire(expr: ts.Expression): boolean {\n const value = unwrapQueryExpression(expr);\n if (!ts.isCallExpression(value) || !ts.isIdentifier(value.expression)\n || value.expression.text !== 'require' || value.arguments.length !== 1)\n return false;\n if (hasLexicalValueShadow(value.expression, true)) return false;\n const specifier = value.arguments[0];\n return Boolean(specifier && ts.isStringLiteralLike(specifier)\n && cdsModelSpecifier.test(specifier.text));\n}\n\nfunction modelNamespaceImportName(\n statement: ts.Statement,\n): string | undefined {\n if (!ts.isImportDeclaration(statement)\n || !ts.isStringLiteralLike(statement.moduleSpecifier)\n || !cdsModelSpecifier.test(statement.moduleSpecifier.text)\n || statement.importClause?.isTypeOnly) return undefined;\n const bindings = statement.importClause?.namedBindings;\n return bindings && ts.isNamespaceImport(bindings)\n ? bindings.name.text\n : undefined;\n}\n\nfunction modelImportEqualsName(\n statement: ts.Statement,\n): string | undefined {\n if (!ts.isImportEqualsDeclaration(statement) || statement.isTypeOnly\n || !ts.isExternalModuleReference(statement.moduleReference)) return undefined;\n const specifier = statement.moduleReference.expression;\n return specifier && ts.isStringLiteralLike(specifier)\n && cdsModelSpecifier.test(specifier.text)\n ? statement.name.text\n : undefined;\n}\n\nfunction modelNamespaceNames(source: ts.SourceFile): Set<string> {\n const cached = modelNamespaceCache.get(source);\n if (cached) return cached;\n const names = new Set<string>();\n for (const statement of source.statements) {\n const name = modelNamespaceImportName(statement)\n ?? modelImportEqualsName(statement);\n if (name) names.add(name);\n }\n modelNamespaceCache.set(source, names);\n return names;\n}\n\nfunction destructuredEntitySource(\n initializer: ts.Expression | undefined,\n): boolean {\n if (!initializer) return false;\n if (isEntitiesBase(initializer) || modelRequire(initializer)) return true;\n const value = unwrapQueryExpression(initializer);\n return ts.isIdentifier(value)\n && !hasLexicalValueShadow(value, false)\n && modelNamespaceNames(value.getSourceFile()).has(value.text);\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment\n && kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction identifierIsReadWithinTarget(\n identifier: ts.Identifier,\n parent: ts.Node,\n): boolean {\n if (ts.isPropertyAccessExpression(parent) && parent.name === identifier) return true;\n if (ts.isElementAccessExpression(parent) && parent.argumentExpression\n && nodeContains(parent.argumentExpression, identifier)) return true;\n if (ts.isPropertyAssignment(parent) && nodeContains(parent.name, identifier)) return true;\n return ts.isComputedPropertyName(parent) && nodeContains(parent.expression, identifier);\n}\n\nfunction identifierIsUnaryWrite(identifier: ts.Identifier): boolean {\n const direct = identifier.parent;\n if (!((ts.isPrefixUnaryExpression(direct) || ts.isPostfixUnaryExpression(direct))\n && direct.operand === identifier)) return false;\n return direct.operator === ts.SyntaxKind.PlusPlusToken\n || direct.operator === ts.SyntaxKind.MinusMinusToken;\n}\n\nfunction identifierIsNestedWrite(identifier: ts.Identifier): boolean {\n let current: ts.Node = identifier;\n while (current.parent) {\n const parent = current.parent;\n if (identifierIsReadWithinTarget(identifier, parent)) return false;\n if (ts.isBinaryExpression(parent))\n return isAssignmentOperator(parent.operatorToken.kind)\n && nodeContains(parent.left, identifier);\n if (ts.isForInStatement(parent) || ts.isForOfStatement(parent))\n return nodeContains(parent.initializer, identifier);\n current = parent;\n }\n return false;\n}\n\nfunction identifierIsWrite(identifier: ts.Identifier): boolean {\n return identifierIsUnaryWrite(identifier) || identifierIsNestedWrite(identifier);\n}\n\nfunction destructuredBindingWasWritten(\n binding: DestructuredBinding,\n localName: string,\n use: ts.Node,\n): boolean {\n if (ts.isParameter(binding.declaration)) return true;\n if ((binding.declaration.parent.flags & ts.NodeFlags.Const) !== 0) return false;\n let written = false;\n const declarationEnd = binding.declaration.name.getEnd();\n const useStart = use.getStart();\n const visit = (node: ts.Node): void => {\n if (written) return;\n if (ts.isIdentifier(node) && node.text === localName\n && node.getStart() > declarationEnd && node.getStart() < useStart\n && identifierIsWrite(node)\n && resolveDestructuredBinding(node, node)?.declaration === binding.declaration)\n written = true;\n ts.forEachChild(node, visit);\n };\n visit(use.getSourceFile());\n return written;\n}\n\nfunction destructuredBindingWins(\n destructured: DestructuredBinding,\n simple: BindingResolution,\n use: ts.Node,\n): boolean {\n return !simple.declaration\n || bindingIsCloser(destructured.declaration, simple.declaration, use);\n}\n\nfunction entityFromDestructuredBinding(\n binding: DestructuredBinding,\n identifier: ts.Identifier,\n): string | undefined {\n if (destructuredBindingWasWritten(binding, identifier.text, identifier))\n return undefined;\n return destructuredEntitySource(binding.initializer)\n ? binding.entityName\n : undefined;\n}\n\nfunction entityFromSimpleBinding(\n binding: BindingResolution,\n depth: number,\n seen: Set<ts.Node>,\n): string | undefined {\n if (!binding.declaration || !binding.immutable || !binding.initializer\n || seen.has(binding.declaration)) return undefined;\n seen.add(binding.declaration);\n return entityFromExpression(binding.initializer, depth + 1, seen);\n}\n\nfunction scopedBindingIsCurrent(\n identifier: ts.Identifier,\n declaration: ts.VariableDeclaration | ts.ParameterDeclaration,\n): boolean {\n return nearestScopedVariableDeclaration(identifier) === declaration\n && !nonVariableBindingWins(identifier, declaration);\n}\n\nfunction unboundEntityName(identifier: ts.Identifier): string | undefined {\n return hasScopedVariableDeclaration(identifier)\n || hasScopedNonVariableDeclaration(identifier)\n ? undefined\n : identifier.text;\n}\n\nfunction entityFromIdentifier(\n expr: ts.Identifier,\n depth: number,\n seen: Set<ts.Node>,\n): string | undefined {\n const binding = resolveBinding(expr, expr);\n const destructured = resolveDestructuredBinding(expr, expr);\n if (destructured && destructuredBindingWins(destructured, binding, expr)) {\n return scopedBindingIsCurrent(expr, destructured.declaration)\n ? entityFromDestructuredBinding(destructured, expr)\n : undefined;\n }\n if (!binding.declaration) return unboundEntityName(expr);\n if (!scopedBindingIsCurrent(expr, binding.declaration)) return undefined;\n return entityFromSimpleBinding(binding, depth, seen);\n}\n\nfunction literalEntity(expr: ts.Expression): string | undefined {\n if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr))\n return expr.text;\n if (!ts.isElementAccessExpression(expr) || !expr.argumentExpression)\n return undefined;\n return ts.isStringLiteral(expr.argumentExpression)\n || ts.isNoSubstitutionTemplateLiteral(expr.argumentExpression)\n ? expr.argumentExpression.text\n : undefined;\n}\n\nfunction propertyEntity(expr: ts.Expression): string | undefined {\n if (!ts.isPropertyAccessExpression(expr)) return undefined;\n if (expr.expression.kind === ts.SyntaxKind.ThisKeyword) return undefined;\n return isEntitiesBase(expr.expression) ? expr.name.text : undefined;\n}\n\nfunction entityFromExpression(\n expr: ts.Expression | undefined,\n depth = 0,\n seen = new Set<ts.Node>(),\n): string | undefined {\n if (!expr || depth >= maxAliasDepth) return undefined;\n const value = unwrapQueryExpression(expr);\n const literal = literalEntity(value);\n if (literal !== undefined) return literal;\n if (ts.isIdentifier(value)) return entityFromIdentifier(value, depth, seen);\n return propertyEntity(value);\n}\n\nfunction queryAliasInitializer(\n identifier: ts.Identifier,\n initializers: Map<string, ts.Expression>,\n seen: Set<string>,\n): ts.Expression | undefined {\n const initializer = initializers.get(identifier.text);\n if (!initializer || seen.has(identifier.text)) return undefined;\n const binding = resolveBinding(identifier, identifier);\n if (!binding.declaration || !binding.immutable || binding.initializer !== initializer\n || nearestScopedVariableDeclaration(identifier) !== binding.declaration\n || nonVariableBindingWins(identifier, binding.declaration)) return undefined;\n seen.add(identifier.text);\n return initializer;\n}\n\nfunction queryEntityFromCall(\n call: ts.CallExpression,\n initializers: Map<string, ts.Expression>,\n seenInitializers: Set<string>,\n): string | undefined {\n const name = expressionName(call.expression);\n if (name === 'cds.run')\n return queryEntityFromAst(call.arguments[0], initializers, seenInitializers);\n if (isCapQueryBuilderRootName(name))\n return entityFromExpression(call.arguments[0]);\n const receiver = ts.isPropertyAccessExpression(call.expression)\n ? call.expression.expression\n : undefined;\n return receiver\n ? queryEntityFromAst(receiver, initializers, seenInitializers)\n : undefined;\n}\n\nexport function queryEntityFromAst(\n expr: ts.Expression,\n initializers = new Map<string, ts.Expression>(),\n seenInitializers = new Set<string>(),\n): string | undefined {\n const unwrapped = unwrapQueryExpression(expr);\n if (ts.isIdentifier(unwrapped)) {\n const initializer = queryAliasInitializer(\n unwrapped, initializers, seenInitializers,\n );\n return initializer\n ? queryEntityFromAst(initializer, initializers, seenInitializers)\n : undefined;\n }\n return ts.isCallExpression(unwrapped)\n ? queryEntityFromCall(unwrapped, initializers, seenInitializers)\n : undefined;\n}\n","import { extractPlaceholderKeys, scanPlaceholders } from '../utils/001-placeholders.js';\n\nexport interface RuntimeSubstitution {\n original?: string;\n effective?: string;\n placeholders: string[];\n missing: string[];\n supplied: string[];\n changed: boolean;\n}\n\nexport function applyVariables(\n template: string | undefined,\n vars: Record<string, string>,\n): string | undefined {\n return substituteVariables(template, vars).effective;\n}\n\nexport function extractPlaceholders(template: string | undefined): string[] {\n return extractPlaceholderKeys(template);\n}\n\nexport function matchRuntimeTemplate(\n template: string | undefined,\n concrete: string | undefined,\n): Record<string, string> | undefined {\n if (!template || !concrete) return undefined;\n const keys = extractPlaceholders(template);\n if (keys.length === 0) return template === concrete ? {} : undefined;\n const match = new RegExp(`^${runtimeTemplatePattern(template)}$`).exec(concrete);\n if (!match) return undefined;\n const values: Record<string, string> = {};\n for (let index = 0; index < keys.length; index += 1) {\n const key = keys[index];\n const value = match[index + 1];\n if (!key || value === undefined) return undefined;\n if (values[key] !== undefined && values[key] !== value) return undefined;\n values[key] = value;\n }\n return values;\n}\n\nexport function substituteVariables(\n template: string | undefined,\n vars: Record<string, string>,\n): RuntimeSubstitution {\n if (!template) return { placeholders: [], missing: [], supplied: [], changed: false };\n const placeholders = [...new Set(extractPlaceholders(template))];\n const supplied = placeholders.filter((key) => Object.hasOwn(vars, key));\n const missing = placeholders.filter((key) => !Object.hasOwn(vars, key));\n let lastIndex = 0;\n let effective = '';\n for (const span of scanPlaceholders(template)) {\n const trimmed = span.key.trim();\n const replacement = Object.hasOwn(vars, trimmed) ? vars[trimmed] ?? '' : `\\${${trimmed}}`;\n effective += template.slice(lastIndex, span.start) + replacement;\n lastIndex = span.end;\n }\n effective += template.slice(lastIndex);\n return {\n original: template,\n effective,\n placeholders,\n missing,\n supplied,\n changed: effective !== template,\n };\n}\n\nfunction runtimeTemplatePattern(template: string): string {\n let pattern = '';\n let lastIndex = 0;\n for (const span of scanPlaceholders(template)) {\n pattern += escapeRegex(template.slice(lastIndex, span.start));\n pattern += '([^/]+?)';\n lastIndex = span.end;\n }\n return `${pattern}${escapeRegex(template.slice(lastIndex))}`;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { ImplementationHint } from '../types.js';\nimport { projectBounded } from '../utils/000-bounded-projection.js';\n\ninterface Candidate {\n accepted?: boolean;\n methodId?: number;\n sourceFile?: string;\n handlerPackage?: { name?: string; packageName?: string };\n modelPackage?: { name?: string; packageName?: string };\n servicePath?: string;\n operationPath?: string;\n}\n\ninterface EdgeEvidence {\n servicePath?: string;\n operationPath?: string;\n ambiguityReasons?: string[];\n candidateFamilies?: Array<{ packageName?: string }>;\n candidates?: Candidate[];\n modelPackage?: { name?: string; packageName?: string };\n}\n\nexport interface ImplementationSelection {\n methodId?: string;\n blocksAutomatic: boolean;\n evidence: Record<string, unknown>;\n}\n\nexport interface ImplementationHintSuggestionProjection {\n suggestions: Array<Record<string, unknown>>;\n suggestionCount: number;\n shownSuggestionCount: number;\n omittedSuggestionCount: number;\n}\n\nexport function parseImplementationHint(value: string): ImplementationHint {\n const hint: Partial<ImplementationHint> = {};\n for (const part of value.split(',')) {\n const separator = part.indexOf('=');\n if (separator <= 0 || separator === part.length - 1) throw new Error(`Invalid implementation hint field: ${part}`);\n assignHintField(hint, part.slice(0, separator).trim(), part.slice(separator + 1).trim());\n }\n if (!hint.implementationRepo) throw new Error('Scoped implementation hint requires an implementation repo selection');\n return { ...hint, implementationRepo: hint.implementationRepo };\n}\n\nexport function selectImplementation(\n rawEvidence: Record<string, unknown>,\n hints: ImplementationHint[] | undefined,\n legacyRepo: string | undefined,\n canonicalEvidence?: Record<string, unknown>,\n): ImplementationSelection {\n const evidence = asEvidence(canonicalEvidence ?? rawEvidence);\n const scoped = hints ?? [];\n const matchingHints = scoped.filter((hint) => hintMatchesEdge(hint, evidence));\n if (matchingHints.length === 0) {\n if (legacyRepo) return selectCandidate(evidence, legacyHint(legacyRepo), 'implementation_repo_hint');\n const reason = scoped.length > 0 ? 'no_scoped_hint_matched_edge' : 'no_implementation_hint_supplied';\n return { blocksAutomatic: false, evidence: { status: 'not_matched', reason, strategy: 'scoped_implementation_hint' } };\n }\n if (matchingHints.length > 1) {\n const projection = projectBounded(matchingHints, compareHints);\n return {\n blocksAutomatic: true,\n evidence: {\n status: 'tied',\n reason: 'multiple_scoped_hints_matched_edge',\n strategy: 'scoped_implementation_hint',\n matchedHints: projection.items,\n candidateCount: matchingHints.length,\n matchedHintCount: projection.totalCount,\n shownMatchedHintCount: projection.shownCount,\n omittedMatchedHintCount: projection.omittedCount,\n },\n };\n }\n const hint = matchingHints[0];\n return hint ? selectCandidate(evidence, hint, 'scoped_implementation_hint') : { blocksAutomatic: false, evidence: { status: 'not_matched' } };\n}\n\nexport function implementationHintDiagnostic(\n selection: ImplementationSelection,\n suggestionEvidence?: unknown,\n): Record<string, unknown> | undefined {\n if (!selection.blocksAutomatic || selection.methodId) return undefined;\n const suggestions = projectedSuggestions(suggestionEvidence);\n return {\n severity: 'warning',\n code: 'implementation_hint_mismatch',\n message: 'Implementation hint did not select exactly one viable candidate',\n hintStatus: selection.evidence.status,\n candidateCount: selection.evidence.candidateCount,\n implementationHintSuggestions: suggestions.suggestions.length > 0\n ? suggestions.suggestions\n : undefined,\n implementationHintSuggestionCount: suggestions.suggestionCount,\n shownImplementationHintSuggestionCount: suggestions.shownSuggestionCount,\n omittedImplementationHintSuggestionCount: suggestions.omittedSuggestionCount,\n implementationSelection: selection.evidence,\n };\n}\n\nexport function implementationHintSuggestions(rawEvidence: Record<string, unknown>): Array<Record<string, unknown>> {\n return implementationHintSuggestionProjection(rawEvidence).suggestions;\n}\n\nexport function implementationHintSuggestionProjection(\n rawEvidence: Record<string, unknown>,\n): ImplementationHintSuggestionProjection {\n const evidence = asEvidence(rawEvidence);\n const accepted = (evidence.candidates ?? []).filter((candidate) => candidate.accepted);\n if (accepted.length < 2) {\n return {\n suggestions: [],\n suggestionCount: 0,\n shownSuggestionCount: 0,\n omittedSuggestionCount: 0,\n };\n }\n const repos = selectableRepositories(accepted);\n const repositoryProjection = projectBounded(\n repos, (left, right) => left.localeCompare(right),\n );\n const suggestions = accepted\n .flatMap((candidate) => {\n const repo = candidate.handlerPackage?.name;\n if (!repo || !repos.includes(repo)) return [];\n const hint = suggestionHint(evidence, candidate, repo);\n return [{\n servicePath: hint.servicePath,\n operationPath: hint.operationPath,\n ambiguityReason: evidence.ambiguityReasons?.[0],\n candidateFamily: hint.candidateFamily,\n selectableImplementationRepositories: repositoryProjection.items,\n selectableImplementationRepositoryCount: repositoryProjection.totalCount,\n shownSelectableImplementationRepositoryCount:\n repositoryProjection.shownCount,\n omittedSelectableImplementationRepositoryCount:\n repositoryProjection.omittedCount,\n implementationRepo: repo,\n hint,\n cli: `--implementation-hint ${hintString(hint)}`,\n }];\n });\n const projection = projectBounded(suggestions, compareSuggestion);\n return {\n suggestions: projection.items,\n suggestionCount: projection.totalCount,\n shownSuggestionCount: projection.shownCount,\n omittedSuggestionCount: projection.omittedCount,\n };\n}\n\nfunction projectedSuggestions(value: unknown): ImplementationHintSuggestionProjection {\n const evidence = objectRecord(value);\n const values = Array.isArray(value)\n ? recordSuggestions(value)\n : recordSuggestions(evidence.implementationHintSuggestions);\n const projection = projectBounded(values, compareSuggestion);\n const total = Math.max(\n numericValue(evidence.implementationHintSuggestionCount),\n projection.totalCount,\n );\n return {\n suggestions: projection.items,\n suggestionCount: total,\n shownSuggestionCount: projection.shownCount,\n omittedSuggestionCount: Math.max(0, total - projection.shownCount),\n };\n}\n\nfunction compareHints(left: ImplementationHint, right: ImplementationHint): number {\n return hintString(left).localeCompare(hintString(right));\n}\n\nfunction compareSuggestion(\n left: Record<string, unknown>,\n right: Record<string, unknown>,\n): number {\n return String(left.cli ?? '').localeCompare(String(right.cli ?? ''))\n || String(left.implementationRepo ?? '').localeCompare(\n String(right.implementationRepo ?? ''),\n );\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction recordSuggestions(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction numericValue(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction selectableRepositories(candidates: Candidate[]): string[] {\n const repos = new Set(candidates.flatMap((candidate) => candidate.handlerPackage?.name ? [candidate.handlerPackage.name] : []));\n return [...repos]\n .filter((repo) => candidates.filter((candidate) => candidateMatchesRepo(candidate, repo)).length === 1)\n .sort();\n}\n\nfunction assignHintField(hint: Partial<ImplementationHint>, key: string, value: string): void {\n if (key === 'service' || key === 'servicePath') hint.servicePath = value;\n else if (key === 'operation' || key === 'operationPath') hint.operationPath = value;\n else if (key === 'package' || key === 'packageName') hint.packageName = value;\n else if (key === 'repository' || key === 'repositoryName') hint.repositoryName = value;\n else if (key === 'family' || key === 'candidateFamily') hint.candidateFamily = value;\n else if (key === 'repo' || key === 'implementationRepo' || key === 'select') hint.implementationRepo = value;\n else throw new Error(`Unknown implementation hint field: ${key}`);\n}\n\nfunction selectCandidate(evidence: EdgeEvidence, hint: ImplementationHint, strategy: string): ImplementationSelection {\n const matches = (evidence.candidates ?? []).filter((candidate) =>\n candidate.accepted && candidateMatchesRepo(candidate, hint.implementationRepo));\n const selected = matches.length === 1 ? matches[0] : undefined;\n if (!selected || selected.methodId === undefined) {\n return {\n blocksAutomatic: true,\n evidence: {\n status: matches.length > 1 ? 'tied' : 'not_matched',\n reason: matches.length > 1 ? 'hint_matched_multiple_candidates' : 'hint_matched_zero_candidates',\n strategy,\n matchedHint: hint,\n selectedRepo: hint.implementationRepo,\n candidateCount: matches.length,\n },\n };\n }\n return {\n methodId: String(selected.methodId),\n blocksAutomatic: false,\n evidence: {\n status: 'selected',\n guided: true,\n strategy,\n matchedHint: hint,\n selectedRepo: hint.implementationRepo,\n selectedMethodId: selected.methodId,\n ambiguityReason: evidence.ambiguityReasons?.[0],\n },\n };\n}\n\nfunction suggestionHint(evidence: EdgeEvidence, candidate: Candidate, repo: string): ImplementationHint {\n const servicePath = evidence.servicePath ?? candidate.servicePath;\n const operationPath = evidence.operationPath ?? candidate.operationPath;\n const family = usefulCandidateFamily(evidence, candidate);\n return {\n ...(servicePath ? { servicePath } : {}),\n ...(operationPath ? { operationPath } : {}),\n ...(evidence.modelPackage?.packageName ? { packageName: evidence.modelPackage.packageName } : {}),\n ...(evidence.modelPackage?.name ? { repositoryName: evidence.modelPackage.name } : {}),\n ...(family ? { candidateFamily: family } : {}),\n implementationRepo: repo,\n };\n}\n\nfunction usefulCandidateFamily(evidence: EdgeEvidence, candidate: Candidate): string | undefined {\n const family = candidate.handlerPackage?.packageName;\n if (!family) return undefined;\n if ((evidence.candidateFamilies ?? []).some((item) => item.packageName === family)) return family;\n const acceptedFamilies = new Set(\n (evidence.candidates ?? [])\n .filter((item) => item.accepted)\n .flatMap((item) => item.handlerPackage?.packageName ? [item.handlerPackage.packageName] : []),\n );\n return acceptedFamilies.size > 1 ? family : undefined;\n}\n\nfunction hintString(hint: ImplementationHint): string {\n const fields = [\n ['service', hint.servicePath],\n ['operation', hint.operationPath],\n ['package', hint.packageName],\n ['repository', hint.repositoryName],\n ['family', hint.candidateFamily],\n ['repo', hint.implementationRepo],\n ];\n return fields.flatMap(([key, value]) => value ? [`${key}=${value}`] : []).join(',');\n}\n\nfunction hintMatchesEdge(hint: ImplementationHint, evidence: EdgeEvidence): boolean {\n const model = evidence.modelPackage ?? evidence.candidates?.[0]?.modelPackage;\n const familyNames = new Set([\n ...(evidence.candidateFamilies ?? []).flatMap((family) => family.packageName ? [family.packageName] : []),\n ...(evidence.candidates ?? []).flatMap((candidate) => candidate.handlerPackage?.packageName ? [candidate.handlerPackage.packageName] : []),\n ]);\n return matches(hint.servicePath, evidence.servicePath ?? evidence.candidates?.[0]?.servicePath)\n && matches(hint.operationPath, evidence.operationPath ?? evidence.candidates?.[0]?.operationPath)\n && matches(hint.packageName, model?.packageName)\n && matches(hint.repositoryName, model?.name)\n && (!hint.candidateFamily || familyNames.has(hint.candidateFamily));\n}\n\nfunction candidateMatchesRepo(candidate: Candidate, value: string): boolean {\n return candidate.handlerPackage?.name === value\n || candidate.handlerPackage?.packageName === value\n || candidate.sourceFile?.startsWith(value) === true;\n}\n\nfunction matches(expected: string | undefined, actual: string | undefined): boolean {\n return expected === undefined || expected === actual;\n}\n\nfunction legacyHint(implementationRepo: string): ImplementationHint {\n return { implementationRepo };\n}\n\nfunction asEvidence(value: Record<string, unknown>): EdgeEvidence {\n return {\n servicePath: stringValue(value.servicePath),\n operationPath: stringValue(value.operationPath),\n ambiguityReasons: stringArray(value.ambiguityReasons),\n candidateFamilies: candidateFamilies(value.candidateFamilies),\n candidates: candidates(value.candidates),\n modelPackage: packageValue(value.modelPackage),\n };\n}\n\nfunction candidates(value: unknown): Candidate[] {\n return recordSuggestions(value).map((candidate) => ({\n accepted: candidate.accepted === true,\n methodId: numericValue(candidate.methodId) || undefined,\n sourceFile: stringValue(candidate.sourceFile),\n handlerPackage: packageValue(candidate.handlerPackage),\n modelPackage: packageValue(candidate.modelPackage),\n servicePath: stringValue(candidate.servicePath),\n operationPath: stringValue(candidate.operationPath),\n }));\n}\n\nfunction candidateFamilies(value: unknown): Array<{ packageName?: string }> {\n return recordSuggestions(value).map((family) => ({\n packageName: stringValue(family.packageName),\n }));\n}\n\nfunction packageValue(value: unknown): { name?: string; packageName?: string } | undefined {\n const candidate = objectRecord(value);\n const name = stringValue(candidate.name);\n const packageName = stringValue(candidate.packageName);\n return name || packageName ? { name, packageName } : undefined;\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","export interface RemoteQueryTargetInput {\n queryEntity?: unknown;\n servicePath?: string;\n serviceAlias?: unknown;\n serviceAliasExpr?: unknown;\n destination?: string;\n isDynamic?: boolean;\n parserWarning?: unknown;\n}\n\nexport interface RemoteQueryTarget {\n toKind: 'remote_entity' | 'remote_query';\n toId: string;\n label: string;\n evidence: Record<string, unknown>;\n}\n\nexport function buildRemoteQueryTarget(input: RemoteQueryTargetInput): RemoteQueryTarget {\n const entity = typeof input.queryEntity === 'string' && input.queryEntity.trim() ? input.queryEntity.trim() : undefined;\n const servicePath = input.servicePath?.trim();\n const prefix = servicePath ? `${servicePath}:` : '';\n const label = entity ? `Remote entity: ${prefix}${entity}` : 'Remote query: unknown';\n return {\n toKind: entity ? 'remote_entity' : 'remote_query',\n toId: entity ? `${prefix}${entity}` : 'unknown',\n label,\n evidence: {\n remoteQueryTarget: label,\n queryEntity: entity,\n queryTargetKind: entity ? 'remote_entity' : 'remote_query_unknown',\n queryEntityDynamic: entity ? undefined : Boolean(input.isDynamic) || undefined,\n serviceAlias: input.serviceAlias,\n serviceAliasExpr: input.serviceAliasExpr,\n destination: input.destination,\n servicePath,\n parserWarning: entity ? input.parserWarning : input.parserWarning ?? { code: 'query_entity_unknown', message: 'Remote query entity is dynamic or unavailable' },\n },\n };\n}\n","import {\n projectBounded,\n projectBoundedInOrder,\n type BoundedProjection,\n} from '../utils/000-bounded-projection.js';\n\nexport interface SelectedHandlerSource {\n methodId: number;\n className?: string;\n methodName?: string;\n repositoryId?: number;\n repositoryName?: string;\n repositoryPackageName?: string;\n sourceFile?: string;\n sourceLine?: number;\n}\n\nexport interface SelectedHandlerProvenance {\n status: 'selected';\n accepted: true;\n graphTargetId: string;\n methodId: number;\n className?: string;\n methodName?: string;\n repository?: {\n id?: number;\n name?: string;\n packageName?: string;\n };\n sourceFile?: string;\n sourceLine?: number;\n}\n\nexport function selectedHandlerProvenance(\n source: SelectedHandlerSource,\n): SelectedHandlerProvenance {\n return {\n status: 'selected',\n accepted: true,\n graphTargetId: String(source.methodId),\n methodId: source.methodId,\n className: source.className,\n methodName: source.methodName,\n repository: {\n id: source.repositoryId,\n name: source.repositoryName,\n packageName: source.repositoryPackageName,\n },\n sourceFile: source.sourceFile,\n sourceLine: source.sourceLine,\n };\n}\n\nexport function displayImplementationCandidates(\n candidates: Array<Record<string, unknown>>,\n selectedMethodId: number | undefined,\n): Array<Record<string, unknown>> {\n return [...candidates]\n .sort((left, right) => compareDisplayCandidate(\n left, right, selectedMethodId,\n ))\n .map((candidate, index) => ({\n ...candidate,\n discoveryRank: candidate.rank,\n displayRank: index + 1,\n selected: selectedMethodId !== undefined\n && Number(candidate.methodId) === selectedMethodId,\n }));\n}\n\nfunction compareDisplayCandidate(\n left: Record<string, unknown>,\n right: Record<string, unknown>,\n selectedMethodId: number | undefined,\n): number {\n return Number(Number(right.methodId) === selectedMethodId)\n - Number(Number(left.methodId) === selectedMethodId)\n || Number(right.accepted === true) - Number(left.accepted === true)\n || numberValue(left.rank) - numberValue(right.rank)\n || compareTargetCandidates(left, right);\n}\n\nexport function boundedImplementationEvidence(\n evidence: Record<string, unknown>,\n targetCandidateCount: number,\n): Record<string, unknown> {\n const candidates = recordArray(evidence.candidates);\n const candidateProjection = projectBoundedInOrder(candidates);\n const families = recordArray(evidence.candidateFamilies);\n const familyProjection = projectBounded(families, compareFamilies);\n const hints = recordArray(evidence.implementationHintSuggestions);\n const hintProjection = projectBounded(hints, compareHints);\n const hintCount = Math.max(\n numberValue(evidence.implementationHintSuggestionCount),\n hintProjection.totalCount,\n );\n const targets = Math.max(0, targetCandidateCount);\n return {\n ...evidence,\n candidates: candidateProjection.items.map(boundedCandidateEvidence),\n candidateCount: candidateProjection.totalCount,\n shownCandidateCount: candidateProjection.shownCount,\n omittedCandidateCount: candidateProjection.omittedCount,\n candidateFamilies: familyProjection.items.map(boundedFamilyEvidence),\n candidateFamilyCount: familyProjection.totalCount,\n shownCandidateFamilyCount: familyProjection.shownCount,\n omittedCandidateFamilyCount: familyProjection.omittedCount,\n implementationHintSuggestions: hintProjection.items,\n implementationHintSuggestionCount: hintCount,\n shownImplementationHintSuggestionCount: hintProjection.shownCount,\n omittedImplementationHintSuggestionCount: Math.max(0, hintCount - hintProjection.shownCount),\n candidateTargetCount: targets,\n shownCandidateTargetCount: Math.min(targets, candidateProjection.shownCount),\n omittedCandidateTargetCount: Math.max(0, targets - candidateProjection.shownCount),\n };\n}\n\nexport function boundedImplementationTargetIds(\n candidates: Array<Record<string, unknown>>,\n): BoundedProjection<string> {\n const projection = projectBounded(candidates, compareTargetCandidates);\n return {\n totalCount: projection.totalCount,\n shownCount: projection.shownCount,\n omittedCount: projection.omittedCount,\n items: projection.items.map((candidate) => String(candidate.methodId ?? '')),\n };\n}\n\nfunction boundedCandidateEvidence(candidate: Record<string, unknown>): Record<string, unknown> {\n const registrations = recordArray(candidate.registrations);\n const projection = projectBounded(registrations, compareRegistrations);\n return {\n ...candidate,\n registrations: projection.items,\n registrationCount: projection.totalCount,\n shownRegistrationCount: projection.shownCount,\n omittedRegistrationCount: projection.omittedCount,\n };\n}\n\nfunction boundedFamilyEvidence(family: Record<string, unknown>): Record<string, unknown> {\n const repositories = stringArray(family.repositories);\n const projection = projectBounded(repositories, (left, right) => left.localeCompare(right));\n return {\n ...family,\n repositories: projection.items,\n repositoryCount: projection.totalCount,\n shownRepositoryCount: projection.shownCount,\n omittedRepositoryCount: projection.omittedCount,\n };\n}\n\nfunction compareTargetCandidates(left: Record<string, unknown>, right: Record<string, unknown>): number {\n return Number(right.score ?? 0) - Number(left.score ?? 0)\n || String(left.className ?? '').localeCompare(String(right.className ?? ''))\n || Number(left.methodId ?? 0) - Number(right.methodId ?? 0);\n}\n\nfunction compareFamilies(left: Record<string, unknown>, right: Record<string, unknown>): number {\n return String(left.packageName ?? '').localeCompare(String(right.packageName ?? ''))\n || String(left.reason ?? '').localeCompare(String(right.reason ?? ''));\n}\n\nfunction compareHints(left: Record<string, unknown>, right: Record<string, unknown>): number {\n return String(left.cli ?? '').localeCompare(String(right.cli ?? ''))\n || String(left.implementationRepo ?? '').localeCompare(String(right.implementationRepo ?? ''));\n}\n\nfunction compareRegistrations(left: Record<string, unknown>, right: Record<string, unknown>): number {\n return String(left.file ?? '').localeCompare(String(right.file ?? ''))\n || Number(left.line ?? 0) - Number(right.line ?? 0)\n || Number(left.id ?? 0) - Number(right.id ?? 0);\n}\n\nfunction recordArray(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n\nfunction numberValue(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n","import type { Db } from '../db/connection.js';\nimport { implementationHintSuggestionProjection } from '../trace/implementation-hints.js';\nimport { normalizeDecoratorOperationSignal, normalizedOperationName } from './operation-decorator-normalizer.js';\nimport {\n boundedImplementationEvidence,\n boundedImplementationTargetIds,\n displayImplementationCandidates,\n selectedHandlerProvenance,\n} from './001-implementation-evidence-projection.js';\n\ninterface ImplementationCandidate extends Record<string, unknown> {\n methodId: number;\n registrations?: Array<Record<string, unknown>>;\n score: number;\n accepted: boolean;\n acceptedReasons: string[];\n rejectedReasons: string[];\n}\n\ninterface ImplementationDecision {\n candidates: ImplementationCandidate[];\n accepted: ImplementationCandidate[];\n selected: ImplementationCandidate[];\n unique?: ImplementationCandidate;\n evidence: Record<string, unknown>;\n evidenceWithHints: Record<string, unknown>;\n}\n\nexport function linkImplementations(\n db: Db,\n workspaceId: number,\n generation: number,\n): { edgeCount: number; resolvedCount: number; ambiguousCount: number; unresolvedCount: number } {\n const operations = workspaceOperations(db, workspaceId);\n let edgeCount = 0;\n let resolvedCount = 0;\n let ambiguousCount = 0;\n let unresolvedCount = 0;\n for (const operation of operations) {\n const decision = implementationDecision(db, workspaceId, operation, true);\n if (decision.candidates.length === 0) continue;\n const status = decision.unique ? 'resolved' : decision.accepted.length > 0\n ? 'ambiguous'\n : 'unresolved';\n insertImplementationEdge(db, workspaceId, generation, operation, decision, status);\n edgeCount += 1;\n if (status === 'resolved') resolvedCount += 1;\n else if (status === 'ambiguous') ambiguousCount += 1;\n else unresolvedCount += 1;\n }\n return { edgeCount, resolvedCount, ambiguousCount, unresolvedCount };\n}\n\nexport function canonicalImplementationEvidence(\n db: Db,\n operationId: string | number,\n): Record<string, unknown> | undefined {\n const operation = operationById(db, operationId);\n const workspaceId = numberValue(operation?.workspaceId);\n if (!operation || workspaceId === undefined) return undefined;\n return implementationDecision(db, workspaceId, operation, false).evidenceWithHints;\n}\n\nfunction workspaceOperations(db: Db, workspaceId: number): Array<Record<string, unknown>> {\n const rows = db.prepare(`SELECT o.id operationId,o.operation_path operationPath,\n o.operation_name operationName,o.provenance provenance,o.base_operation_id baseOperationId,\n s.service_path servicePath,s.repo_id modelRepoId,r.name modelRepo,\n r.package_name modelPackage,r.kind modelKind\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id WHERE r.workspace_id=?`).all(workspaceId);\n return rows;\n}\n\nfunction operationById(\n db: Db,\n operationId: string | number,\n): Record<string, unknown> | undefined {\n const row = db.prepare(`SELECT o.id operationId,o.operation_path operationPath,\n o.operation_name operationName,o.provenance provenance,o.base_operation_id baseOperationId,\n s.service_path servicePath,s.repo_id modelRepoId,r.name modelRepo,\n r.package_name modelPackage,r.kind modelKind,r.workspace_id workspaceId\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id WHERE o.id=?`).get(operationId);\n return row;\n}\n\nfunction implementationDecision(\n db: Db,\n workspaceId: number,\n operation: Record<string, unknown>,\n recordDiagnostics: boolean,\n): ImplementationDecision {\n const implementationContext = implementationContextForOperation(db, operation);\n const candidates = rankedImplementationCandidates(\n db, workspaceId, implementationContext, recordDiagnostics,\n );\n const accepted = candidates.filter((candidate) => candidate.accepted);\n const topScore = accepted[0]?.score ?? 0;\n const winners = accepted.filter((candidate) => candidate.score === topScore);\n const duplicateFamilies = duplicatePackageFamilies(accepted);\n const duplicatePackageAmbiguous = duplicateFamilies.length > 0\n && !accepted.some(hasDirectOwnershipEvidence);\n const selected = duplicatePackageAmbiguous ? accepted : winners;\n const unique = !duplicatePackageAmbiguous && winners.length === 1\n ? winners[0]\n : undefined;\n const ambiguityReasons = duplicatePackageAmbiguous\n ? ['duplicate_package_name_candidates']\n : winners.length > 1 ? ['multiple_equal_score_implementation_candidates'] : [];\n const evidence = implementationEvidence(\n operation, implementationContext, candidates, duplicateFamilies, ambiguityReasons,\n unique,\n );\n const hintProjection = implementationHintSuggestionProjection(evidence);\n return {\n candidates,\n accepted,\n selected,\n unique,\n evidence,\n evidenceWithHints: unique\n ? evidence\n : {\n ...evidence,\n implementationHintSuggestions: hintProjection.suggestions,\n implementationHintSuggestionCount: hintProjection.suggestionCount,\n shownImplementationHintSuggestionCount: hintProjection.shownSuggestionCount,\n omittedImplementationHintSuggestionCount: hintProjection.omittedSuggestionCount,\n },\n };\n}\n\nfunction insertImplementationEdge(\n db: Db,\n workspaceId: number,\n generation: number,\n operation: Record<string, unknown>,\n decision: ImplementationDecision,\n status: 'resolved' | 'ambiguous' | 'unresolved',\n): void {\n const targetCandidates = status === 'unresolved'\n ? decision.candidates\n : decision.selected;\n const targetProjection = boundedImplementationTargetIds(targetCandidates);\n const targetIds = targetProjection.items;\n const toId = status === 'resolved'\n ? graphId(decision.unique?.methodId)\n : targetIds.join(',');\n const reason = status === 'unresolved'\n ? 'No implementation candidate passed policy'\n : status === 'ambiguous'\n ? 'Ambiguous registered handler implementation candidates'\n : null;\n db.prepare(`INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,\n to_kind,to_id,confidence,evidence_json,is_dynamic,unresolved_reason,generation)\n VALUES(?,?,?,?,?,?,?,?,?,?,?,?)`).run(\n workspaceId,\n 'OPERATION_IMPLEMENTED_BY_HANDLER',\n status,\n 'operation',\n graphId(operation.operationId),\n status === 'resolved' ? 'handler_method' : 'handler_method_candidates',\n toId,\n status === 'resolved' ? 0.95 : status === 'ambiguous' ? 0.5 : 0,\n JSON.stringify(boundedImplementationEvidence(\n decision.evidenceWithHints, targetProjection.totalCount,\n )),\n 0,\n reason,\n generation,\n );\n}\n\nfunction implementationEvidence(\n operation: Record<string, unknown>,\n context: Record<string, unknown>,\n candidates: ImplementationCandidate[],\n duplicateFamilies: Array<Record<string, unknown>>,\n ambiguityReasons: string[],\n selected: ImplementationCandidate | undefined,\n): Record<string, unknown> {\n return {\n servicePath: operation.servicePath,\n operationPath: operation.operationPath,\n operationName: operation.operationName,\n modelPackage: {\n id: operation.modelRepoId,\n name: operation.modelRepo,\n packageName: operation.modelPackage,\n },\n implementationSource: context.operationId === operation.operationId\n ? 'direct_or_concrete_override'\n : 'inherited_from_base_operation',\n baseOperationId: operation.baseOperationId,\n implementationOperationId: context.operationId,\n ambiguityReasons,\n candidateFamilies: duplicateFamilies,\n selectedHandler: selected\n ? selectedHandlerProvenance(selectedHandlerSource(selected))\n : undefined,\n candidates: displayImplementationCandidates(\n candidates.map((candidate, index) => candidateEvidence(candidate, index + 1)),\n selected?.methodId,\n ),\n };\n}\n\n\nfunction implementationContextForOperation(\n db: Db,\n operation: Record<string, unknown>,\n): Record<string, unknown> {\n if (operation.provenance !== 'inherited' || !operation.baseOperationId) return operation;\n const base = db.prepare(`SELECT o.id operationId,o.operation_path operationPath,\n o.operation_name operationName,o.provenance provenance,o.base_operation_id baseOperationId,\n s.service_path servicePath,s.repo_id modelRepoId,r.name modelRepo,\n r.package_name modelPackage,r.kind modelKind\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id WHERE o.id=?`).get(operation.baseOperationId);\n return base ? {\n ...base,\n effectiveOperationId: operation.operationId,\n effectiveServicePath: operation.servicePath,\n effectiveOperationPath: operation.operationPath,\n } : operation;\n}\n\nfunction rankedImplementationCandidates(\n db: Db,\n workspaceId: number,\n operation: Record<string, unknown>,\n recordDiagnostics: boolean,\n): ImplementationCandidate[] {\n const rows = implementationCandidates(db, workspaceId, operation);\n if (recordDiagnostics) recordRegistrationInvariantDiagnostics(\n db, rows.filter((row) => !validRegistrationPair(row)),\n );\n return deduplicateCandidates(rows.filter(validRegistrationPair)\n .map((row) => scoreImplementationCandidate(row, operation)))\n .sort((left, right) => right.score - left.score\n || String(left.className).localeCompare(String(right.className))\n || left.methodId - right.methodId);\n}\n\nfunction validRegistrationPair(row: Record<string, unknown>): boolean {\n if (row.registrationHandlerClassId === null || row.registrationHandlerClassId === undefined)\n return registrationPairingStrategy(row) !== 'unproven';\n return Number(row.registrationHandlerClassId) === Number(row.classId);\n}\n\nfunction registrationPairingStrategy(row: Record<string, unknown>): string {\n if (row.registrationHandlerClassId !== null && row.registrationHandlerClassId !== undefined)\n return 'exact_handler_class_id';\n if (Number(row.applicationRepoId) === Number(row.handlerRepoId))\n return 'same_repository_class_name_fallback';\n const source = stringValue(row.importSource);\n const separator = source?.lastIndexOf('#') ?? -1;\n if (!source || separator <= 0) return 'unproven';\n const moduleName = source.slice(0, separator);\n const importedName = source.slice(separator + 1);\n const matchesClass = importedName === row.className\n || (importedName === 'default' && row.registrationClassName === row.className);\n return moduleName === row.handlerPackage && matchesClass\n ? 'explicit_package_import'\n : 'unproven';\n}\n\nfunction recordRegistrationInvariantDiagnostics(\n db: Db,\n rows: Array<Record<string, unknown>>,\n): void {\n const insert = db.prepare(`INSERT INTO diagnostics(repo_id,severity,code,message,\n source_file,source_line)\n SELECT ?,'error','handler_registration_class_mismatch',\n 'Implementation candidate registration did not match its persisted handler class id',?,?\n WHERE NOT EXISTS (SELECT 1 FROM diagnostics WHERE repo_id=?\n AND code='handler_registration_class_mismatch' AND source_file=? AND source_line=?)`);\n for (const row of rows) insert.run(\n row.applicationRepoId, row.registrationFile, row.registrationLine,\n row.applicationRepoId, row.registrationFile, row.registrationLine,\n );\n}\n\nfunction deduplicateCandidates(rows: ImplementationCandidate[]): ImplementationCandidate[] {\n const merged = new Map<string, ImplementationCandidate>();\n for (const row of rows) {\n const key = [row.methodId, row.classId, row.handlerRepoId].join(':');\n const registration = registrationEvidence(row);\n const existing = merged.get(key);\n if (!existing) {\n merged.set(key, { ...row, registrations: [registration] });\n continue;\n }\n existing.registrations = uniqueRegistrations([\n ...(existing.registrations ?? []), registration,\n ]);\n existing.score = Math.max(existing.score, row.score);\n existing.accepted = existing.accepted || row.accepted;\n existing.acceptedReasons = [...new Set([...existing.acceptedReasons, ...row.acceptedReasons])];\n existing.rejectedReasons = [...new Set([...existing.rejectedReasons, ...row.rejectedReasons])];\n }\n return [...merged.values()];\n}\n\nfunction registrationEvidence(row: Record<string, unknown>): Record<string, unknown> {\n return {\n id: row.registrationId,\n handlerClassId: row.registrationHandlerClassId,\n file: row.registrationFile,\n line: row.registrationLine,\n kind: row.registrationKind,\n importSource: row.importSource,\n pairingStrategy: registrationPairingStrategy(row),\n };\n}\n\nfunction uniqueRegistrations(rows: Array<Record<string, unknown>>): Array<Record<string, unknown>> {\n const seen = new Set<string>();\n return rows.filter((row) => {\n const key = JSON.stringify(row);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction duplicatePackageFamilies(candidates: ImplementationCandidate[]): Array<Record<string, unknown>> {\n const byPackage = new Map<string, ImplementationCandidate[]>();\n for (const candidate of candidates) {\n const packageName = stringValue(candidate.handlerPackage);\n if (packageName) byPackage.set(packageName, [\n ...(byPackage.get(packageName) ?? []), candidate,\n ]);\n }\n return [...byPackage.entries()].filter(([, rows]) =>\n new Set(rows.map((row) => Number(row.handlerRepoId))).size > 1)\n .map(([packageName, rows]) => ({\n reason: 'duplicate_package_name_candidates',\n packageName,\n count: rows.length,\n repositories: rows.map((row) => row.handlerRepo).sort(),\n }));\n}\n\nfunction hasDirectOwnershipEvidence(candidate: ImplementationCandidate): boolean {\n return candidate.acceptedReasons.some((reason) => [\n 'model package equals registration package',\n 'model package equals handler package',\n 'registration package contains exact local service path',\n ].includes(reason));\n}\n\nfunction implementationCandidates(\n db: Db,\n workspaceId: number,\n operation: Record<string, unknown>,\n): Array<Record<string, unknown>> {\n const modelRepoGraphId = graphId(operation.modelRepoId);\n return db.prepare(`SELECT DISTINCT\n hm.id methodId,hm.method_name methodName,hm.decorator_value decoratorValue,\n hm.decorator_raw_expression decoratorRawExpression,\n hm.decorator_resolution_json decoratorResolutionJson,hc.id classId,\n hc.class_name className,hc.source_file sourceFile,hm.source_line sourceLine,\n hr.id registrationId,hr.handler_class_id registrationHandlerClassId,\n hr.class_name registrationClassName,hr.repo_id applicationRepoId,\n hr.registration_file registrationFile,hr.registration_line registrationLine,\n hr.registration_kind registrationKind,hr.import_source importSource,\n handlerRepo.id handlerRepoId,handlerRepo.name handlerRepo,\n handlerRepo.package_name handlerPackage,appRepo.name applicationRepo,\n appRepo.package_name applicationPackage,? modelRepoId,? modelRepo,? modelPackage,\n ? modelKind,? servicePath,? operationPath,? operationName,\n CASE WHEN appRepo.id=? THEN 1 ELSE 0 END modelIsApplicationRepo,\n CASE WHEN handlerRepo.id=? THEN 1 ELSE 0 END modelIsHandlerRepo,\n CASE WHEN appRepo.id=handlerRepo.id THEN 1 ELSE 0 END sameRepoRegistration,\n CASE WHEN EXISTS (SELECT 1 FROM cds_services localService\n WHERE localService.repo_id=appRepo.id AND localService.service_path=?)\n THEN 1 ELSE 0 END localServicePathMatch,\n CASE WHEN EXISTS (SELECT 1 FROM cds_services localService\n WHERE localService.repo_id=appRepo.id) THEN 1 ELSE 0 END applicationHasLocalServices,\n CASE WHEN EXISTS (SELECT 1 FROM handler_registrations localReg\n JOIN handler_classes localClass ON ((localReg.handler_class_id IS NOT NULL\n AND localClass.id=localReg.handler_class_id) OR (localReg.handler_class_id IS NULL\n AND localClass.class_name=localReg.class_name AND localClass.repo_id=localReg.repo_id))\n JOIN handler_methods localMethod ON localMethod.handler_class_id=localClass.id\n WHERE localReg.repo_id=appRepo.id\n AND COALESCE(json_extract(localMethod.decorator_resolution_json,'$.handlerKind'),\n CASE WHEN localMethod.decorator_kind='Event' THEN 'event'\n WHEN localMethod.decorator_kind IN ('Action','Func','On') THEN 'operation'\n ELSE 'unsupported' END)='operation'\n AND COALESCE(json_extract(localMethod.decorator_resolution_json,'$.executable'),\n CASE WHEN localMethod.decorator_kind IN ('Action','Func','On') THEN 1 ELSE 0 END)=1\n AND (localMethod.decorator_value=? OR localMethod.decorator_value=?\n OR localMethod.method_name=? OR localMethod.decorator_raw_expression LIKE ?))\n THEN 1 ELSE 0 END applicationHasLocalRegistrationForOperation,\n CASE WHEN EXISTS (SELECT 1 FROM graph_edges dep\n WHERE dep.edge_type='REPO_IMPORTS_HELPER_PACKAGE' AND dep.status='resolved'\n AND dep.from_kind='repo' AND dep.from_id=CAST(appRepo.id AS TEXT)\n AND dep.to_id=?) THEN 1 ELSE 0 END appDependsOnModel,\n CASE WHEN EXISTS (SELECT 1 FROM graph_edges dep\n WHERE dep.edge_type='REPO_IMPORTS_HELPER_PACKAGE' AND dep.status='resolved'\n AND dep.from_kind='repo' AND dep.from_id=CAST(appRepo.id AS TEXT)\n AND dep.to_id=CAST(handlerRepo.id AS TEXT)) THEN 1 ELSE 0 END appDependsOnHandler,\n CASE WHEN EXISTS (SELECT 1 FROM graph_edges dep\n WHERE dep.edge_type='REPO_IMPORTS_HELPER_PACKAGE' AND dep.status='resolved'\n AND dep.from_kind='repo' AND dep.from_id=CAST(handlerRepo.id AS TEXT)\n AND dep.to_id=?) THEN 1 ELSE 0 END handlerDependsOnModel\n FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories handlerRepo ON handlerRepo.id=hc.repo_id\n JOIN handler_registrations hr ON ((hr.handler_class_id IS NOT NULL\n AND hr.handler_class_id=hc.id) OR (hr.handler_class_id IS NULL AND\n ((hr.class_name=hc.class_name AND hr.repo_id=hc.repo_id) OR\n (instr(hr.import_source,'#')>1 AND substr(hr.import_source,1,\n instr(hr.import_source,'#')-1)=handlerRepo.package_name AND\n (substr(hr.import_source,instr(hr.import_source,'#')+1)=hc.class_name OR\n (substr(hr.import_source,instr(hr.import_source,'#')+1)='default'\n AND hr.class_name=hc.class_name))))))\n JOIN repositories appRepo ON appRepo.id=hr.repo_id\n WHERE appRepo.workspace_id=?\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.handlerKind'),\n CASE WHEN hm.decorator_kind='Event' THEN 'event'\n WHEN hm.decorator_kind IN ('Action','Func','On') THEN 'operation'\n ELSE 'unsupported' END)='operation'\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On') THEN 1 ELSE 0 END)=1\n AND (hm.decorator_value=? OR hm.decorator_value=? OR hm.method_name=?\n OR hm.decorator_raw_expression LIKE ?)`).all(\n operation.modelRepoId, operation.modelRepo, operation.modelPackage, operation.modelKind,\n operation.servicePath, operation.operationPath, operation.operationName,\n operation.modelRepoId, operation.modelRepoId, operation.servicePath,\n normalizedOperation(String(operation.operationPath ?? '')),\n operation.operationName, operation.operationName,\n `%${upperFirst(normalizedOperation(String(operation.operationPath\n ?? operation.operationName ?? '')))}%`,\n modelRepoGraphId, modelRepoGraphId, workspaceId,\n normalizedOperation(String(operation.operationPath ?? '')),\n operation.operationName, operation.operationName,\n `%${upperFirst(normalizedOperation(String(operation.operationPath\n ?? operation.operationName ?? '')))}%`,\n );\n}\n\nfunction scoreImplementationCandidate(\n row: Record<string, unknown>,\n operation: Record<string, unknown>,\n): ImplementationCandidate {\n const acceptedReasons: string[] = [];\n const rejectedReasons: string[] = [];\n const methodSignal = implementationMethodSignal(row, operation);\n acceptedReasons.push(...methodSignal.acceptedReasons);\n rejectedReasons.push(...methodSignal.rejectedReasons);\n const signals = implementationOwnershipSignals(row, methodSignal.matches);\n acceptedReasons.push(...signals.acceptedReasons);\n rejectedReasons.push(...signals.rejectedReasons);\n const accepted = methodSignal.matches && !methodSignal.contradicted\n && !signals.contradicted && signals.hasOwnership;\n if (!accepted && rejectedReasons.length === 0)\n rejectedReasons.push('candidate did not meet implementation ownership policy');\n return {\n ...row,\n methodId: Number(row.methodId),\n score: signals.score,\n accepted,\n acceptedReasons,\n rejectedReasons,\n };\n}\n\nfunction implementationOwnershipSignals(\n row: Record<string, unknown>,\n methodMatches: boolean,\n): { score: number; hasOwnership: boolean; contradicted: boolean; acceptedReasons: string[]; rejectedReasons: string[] } {\n const acceptedReasons: string[] = [];\n const rejectedReasons: string[] = [];\n const modelIsApplicationRepo = flag(row.modelIsApplicationRepo);\n const modelIsHandlerRepo = flag(row.modelIsHandlerRepo);\n const localServicePathMatch = flag(row.localServicePathMatch);\n const applicationHasLocalServices = flag(row.applicationHasLocalServices);\n const appDependsOnModel = flag(row.appDependsOnModel);\n const appDependsOnHandler = flag(row.appDependsOnHandler);\n const handlerDependsOnModel = flag(row.handlerDependsOnModel);\n const importSource = Boolean(stringValue(row.importSource));\n const sameRepoRegistration = flag(row.sameRepoRegistration);\n const modelOriented = row.modelKind === 'cap-db-model'\n || !flag(row.applicationHasLocalRegistrationForOperation);\n const helperOwned = modelOriented && methodMatches && sameRepoRegistration && importSource\n && !applicationHasLocalServices && !modelIsApplicationRepo && !modelIsHandlerRepo\n && !localServicePathMatch && !appDependsOnModel && !appDependsOnHandler && !handlerDependsOnModel;\n const score = ownershipScore({\n modelIsApplicationRepo, modelIsHandlerRepo, localServicePathMatch,\n appDependsOnModel, appDependsOnHandler, handlerDependsOnModel, helperOwned,\n importSource,\n }, acceptedReasons);\n const hasOwnership = modelIsApplicationRepo || modelIsHandlerRepo;\n const hasCrossPackage = appDependsOnModel\n && (modelIsHandlerRepo || appDependsOnHandler || !importSource);\n const contradicted = applicationHasLocalServices && !localServicePathMatch\n && !appDependsOnModel && !hasOwnership;\n if (applicationHasLocalServices && !localServicePathMatch && !appDependsOnModel\n && !modelIsApplicationRepo)\n rejectedReasons.push(`registration package has local services but none match ${String(row.servicePath ?? '')}`);\n if (!hasOwnership && !localServicePathMatch && !hasCrossPackage && !helperOwned)\n rejectedReasons.push('missing direct ownership, exact local service path, or validated cross-package dependency evidence');\n return {\n score,\n hasOwnership: hasOwnership || localServicePathMatch || hasCrossPackage\n || handlerDependsOnModel || helperOwned,\n contradicted,\n acceptedReasons,\n rejectedReasons,\n };\n}\n\nfunction ownershipScore(\n signals: Record<string, boolean>,\n acceptedReasons: string[],\n): number {\n let score = 0;\n const values: Array<[keyof typeof signals, number, string]> = [\n ['modelIsApplicationRepo', 100, 'model package equals registration package'],\n ['modelIsHandlerRepo', 100, 'model package equals handler package'],\n ['localServicePathMatch', 80, 'registration package contains exact local service path'],\n ['appDependsOnModel', 70, 'registration package depends on model package'],\n ['appDependsOnHandler', 30, 'registration package depends on handler package'],\n ['handlerDependsOnModel', 20, 'handler package depends on model package'],\n ['helperOwned', 60, 'unique registered helper implementation for model-only operation'],\n ['importSource', 10, 'registration imports handler class'],\n ];\n for (const [key, amount, reason] of values) {\n if (!signals[key]) continue;\n score += amount;\n acceptedReasons.push(reason);\n }\n return score;\n}\n\nfunction candidateEvidence(candidate: ImplementationCandidate, rank: number): Record<string, unknown> {\n return {\n rank,\n rankKind: 'discovery_score',\n score: candidate.score,\n accepted: candidate.accepted,\n acceptedReasons: candidate.acceptedReasons,\n rejectedReasons: candidate.rejectedReasons,\n methodId: candidate.methodId,\n classId: candidate.classId,\n className: candidate.className,\n sourceFile: candidate.sourceFile,\n sourceLine: candidate.sourceLine,\n decoratorResolution: objectJson(candidate.decoratorResolutionJson),\n registration: registrationEvidence(candidate),\n registrations: candidate.registrations ?? [],\n registrationPairing: {\n strategy: registrationPairingStrategy(candidate),\n registrationId: candidate.registrationId,\n registrationHandlerClassId: candidate.registrationHandlerClassId,\n candidateHandlerClassId: candidate.classId,\n invariantStatus: validRegistrationPair(candidate) ? 'valid' : 'invalid',\n },\n applicationPackage: {\n id: candidate.applicationRepoId,\n name: candidate.applicationRepo,\n packageName: candidate.applicationPackage,\n },\n handlerPackage: {\n id: candidate.handlerRepoId,\n name: candidate.handlerRepo,\n packageName: candidate.handlerPackage,\n },\n modelPackage: {\n id: candidate.modelRepoId,\n name: candidate.modelRepo,\n packageName: candidate.modelPackage,\n },\n servicePath: candidate.servicePath,\n operationPath: candidate.operationPath,\n operationName: candidate.operationName,\n signals: {\n directOwnership: {\n modelIsApplicationRepo: flag(candidate.modelIsApplicationRepo),\n modelIsHandlerRepo: flag(candidate.modelIsHandlerRepo),\n },\n localServicePathMatch: flag(candidate.localServicePathMatch),\n applicationHasLocalServices: flag(candidate.applicationHasLocalServices),\n applicationHasLocalRegistrationForOperation:\n flag(candidate.applicationHasLocalRegistrationForOperation),\n appDependsOnModel: flag(candidate.appDependsOnModel),\n appDependsOnHandler: flag(candidate.appDependsOnHandler),\n handlerDependsOnModel: flag(candidate.handlerDependsOnModel),\n sameRepoRegistration: flag(candidate.sameRepoRegistration),\n },\n };\n}\n\nfunction selectedHandlerSource(candidate: ImplementationCandidate): {\n methodId: number;\n className?: string;\n methodName?: string;\n repositoryId?: number;\n repositoryName?: string;\n repositoryPackageName?: string;\n sourceFile?: string;\n sourceLine?: number;\n} {\n return {\n methodId: candidate.methodId,\n className: stringValue(candidate.className),\n methodName: stringValue(candidate.methodName),\n repositoryId: numberValue(candidate.handlerRepoId),\n repositoryName: stringValue(candidate.handlerRepo),\n repositoryPackageName: stringValue(candidate.handlerPackage),\n sourceFile: stringValue(candidate.sourceFile),\n sourceLine: numberValue(candidate.sourceLine),\n };\n}\n\nfunction implementationMethodSignal(\n row: Record<string, unknown>,\n operation: Record<string, unknown>,\n): { matches: boolean; contradicted: boolean; acceptedReasons: string[]; rejectedReasons: string[] } {\n const resolution = objectJson(row.decoratorResolutionJson) ?? {};\n if (resolution.handlerKind && resolution.handlerKind !== 'operation')\n return { matches: false, contradicted: true, acceptedReasons: [], rejectedReasons: ['non_operation_handler_kind'] };\n if (resolution.executable === false)\n return { matches: false, contradicted: true, acceptedReasons: [], rejectedReasons: ['handler_method_not_executable'] };\n const operationName = normalizedOperationName(String(\n operation.operationPath ?? operation.operationName ?? '',\n ));\n const decorator = normalizeDecoratorOperationSignal(\n stringValue(row.decoratorValue), stringValue(row.decoratorRawExpression), operationName,\n );\n if (decorator.status === 'resolved' && decorator.operationName === operationName)\n return { matches: true, contradicted: false, acceptedReasons: ['decorator targets operation'], rejectedReasons: [] };\n if (decorator.status === 'resolved')\n return { matches: false, contradicted: true, acceptedReasons: [], rejectedReasons: ['method_name_matches_but_decorator_targets_different_operation'] };\n return String(row.methodName ?? '') === operationName\n ? { matches: true, contradicted: false, acceptedReasons: ['method name fallback matched operation'], rejectedReasons: [] }\n : { matches: false, contradicted: false, acceptedReasons: [], rejectedReasons: ['method name does not match operation'] };\n}\n\nfunction objectJson(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string' || value.length === 0) return undefined;\n try {\n const parsed = JSON.parse(value) as unknown;\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction upperFirst(value: string): string {\n return value ? `${value[0]?.toUpperCase() ?? ''}${value.slice(1)}` : value;\n}\n\nfunction flag(value: unknown): boolean {\n return Boolean(Number(value ?? 0));\n}\n\nfunction graphId(value: unknown): string {\n return String(value ?? '');\n}\n\nfunction normalizedOperation(value: string): string {\n return value.startsWith('/') ? value.slice(1) : value;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport { extractPlaceholderKeys } from '../utils/001-placeholders.js';\nimport { canonicalImplementationEvidence } from './000-implementation-candidates.js';\nexport interface OperationTarget {\n operationId: number;\n repoName: string;\n serviceName: string;\n qualifiedName: string;\n servicePath: string;\n operationPath: string;\n operationName: string;\n sourceFile: string;\n sourceLine: number;\n repoId?: number;\n packageName?: string | null;\n score: number;\n reasons: string[];\n}\nexport interface OperationResolution {\n status: 'resolved' | 'ambiguous' | 'unresolved' | 'dynamic';\n target?: OperationTarget;\n candidates: OperationTarget[];\n reasons: string[];\n}\ninterface OperationSignals {\n servicePath?: string;\n alias?: string;\n destination?: string;\n operationPath?: string;\n serviceName?: string;\n repoId?: number;\n hasExplicitOverride?: boolean;\n isDynamic?: boolean;\n localServiceLookup?: string;\n}\nfunction rows(\n db: Db,\n operationPath: string,\n workspaceId?: number,\n): OperationTarget[] {\n const names = operationLookupNames(operationPath);\n const result = db\n .prepare(\n `SELECT o.id operationId,r.id repoId,r.name repoName,r.package_name packageName,s.service_name serviceName,s.qualified_name qualifiedName,s.service_path servicePath,o.operation_path operationPath,o.operation_name operationName,o.source_file sourceFile,o.source_line sourceLine,0 score\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id JOIN repositories r ON r.id=s.repo_id\n WHERE (? IS NULL OR r.workspace_id=?) AND (o.operation_path IN (?,?) OR o.operation_name IN (?,?)) ORDER BY r.name,s.service_path,o.operation_name`,\n )\n .all(\n workspaceId,\n workspaceId,\n names.path,\n names.simplePath,\n names.name,\n names.simpleName,\n ) as Array<Omit<OperationTarget, 'reasons'>>;\n return result.map((row) => ({\n ...row,\n score: Number(row.score ?? 0),\n reasons: [],\n }));\n}\nfunction operationLookupNames(operationPath: string): { path: string; simplePath: string; name: string; simpleName: string } {\n const name = operationPath.replace(/^\\//, '');\n const simpleName = name.split('.').at(-1) ?? name;\n return { path: operationPath, simplePath: `/${simpleName}`, name, simpleName };\n}\nfunction operationMatches(candidate: OperationTarget, operationPath: string | undefined): boolean {\n if (!operationPath) return false;\n const names = operationLookupNames(operationPath);\n return candidate.operationPath === names.path || candidate.operationPath === names.simplePath || candidate.operationName === names.name || candidate.operationName === names.simpleName;\n}\nexport function resolveOperation(\n db: Db,\n signals: OperationSignals,\n workspaceId?: number,\n): OperationResolution {\n const early = earlyOperationResolution(db, signals, workspaceId);\n if (early) return early;\n const selected = selectOperationCandidates(db, signals, workspaceId);\n if (!Array.isArray(selected)) return selected;\n const candidates = scoreOperationCandidates(selected, signals);\n return finalOperationResolution(candidates, signals);\n}\n\nfunction earlyOperationResolution(\n db: Db,\n signals: OperationSignals,\n workspaceId: number | undefined,\n): OperationResolution | undefined {\n const missing = [signals.servicePath, signals.alias, signals.destination, signals.operationPath]\n .flatMap(extractPlaceholderKeys);\n if (missing.length > 0)\n return {\n status: 'dynamic',\n candidates: dynamicOperationCandidates(\n db, signals.operationPath, workspaceId,\n ),\n reasons: [...new Set(missing)].map((name) => `missing_variable:${name}`),\n };\n if (!signals.operationPath)\n return {\n status: 'unresolved',\n candidates: [],\n reasons: ['missing_operation_path'],\n };\n return undefined;\n}\n\nfunction dynamicOperationCandidates(\n db: Db,\n operationPath: string | undefined,\n workspaceId: number | undefined,\n): OperationTarget[] {\n if (!operationPath || extractPlaceholderKeys(operationPath).length > 0)\n return [];\n return rows(db, operationPath, workspaceId).map((candidate) => ({\n ...candidate,\n score: 0.2,\n reasons: ['operation_path_match'],\n }));\n}\n\nfunction selectOperationCandidates(\n db: Db,\n signals: OperationSignals,\n workspaceId?: number,\n): OperationTarget[] | OperationResolution {\n const operationPath = signals.operationPath ?? '';\n const allCandidates = rows(db, operationPath, workspaceId).map((c) => ({\n ...c,\n score: 0.2,\n reasons: ['operation_path_match'],\n }));\n let candidates = allCandidates.filter((c) => matchesLocalRepo(db, c.operationId, signals.repoId));\n if (candidates.length === 0 && signals.repoId !== undefined\n && signals.serviceName)\n candidates = implementationContextCandidates(\n db, allCandidates, signals.repoId, signals.serviceName,\n );\n if (candidates.length === 0 && signals.repoId !== undefined\n && signals.serviceName)\n return missingOwnedCandidate(allCandidates, signals.serviceName);\n if (candidates.length === 0)\n return {\n status: 'unresolved',\n candidates: [],\n reasons: ['no_operation_candidates'],\n };\n return candidates;\n}\n\nfunction missingOwnedCandidate(\n candidates: OperationTarget[],\n serviceName: string,\n): OperationResolution {\n const matching = candidates.filter((candidate) =>\n serviceMatches(candidate, serviceName));\n return {\n status: 'unresolved',\n candidates: matching,\n reasons: matching.length > 0\n ? ['local_service_candidate_without_caller_ownership']\n : ['no_operation_candidates'],\n };\n}\n\nfunction scoreOperationCandidates(\n candidates: OperationTarget[],\n signals: OperationSignals,\n): OperationTarget[] {\n for (const c of candidates) {\n applyServicePathScore(c, signals.servicePath);\n applyServiceNameScore(c, signals.serviceName, candidates);\n applyOverrideScore(c, signals);\n applyUniquePathRecovery(c, candidates, signals);\n c.score = Math.max(0, Math.min(1, c.score));\n }\n candidates.sort(\n (a, b) => b.score - a.score || compareBinary(a.repoName, b.repoName),\n );\n return candidates;\n}\n\nfunction applyServicePathScore(\n candidate: OperationTarget,\n servicePath: string | undefined,\n): void {\n if (!servicePath) return;\n const exact = candidate.servicePath === servicePath;\n candidate.score += exact ? 0.75 : -0.1;\n candidate.reasons.push(exact ? 'exact_service_path' : 'service_path_mismatch');\n}\n\nfunction serviceNameScore(\n candidate: OperationTarget,\n serviceName: string,\n candidates: readonly OperationTarget[],\n): { score: number; reason: string } {\n const simple = serviceName.split('.').at(-1) ?? serviceName;\n if (candidate.qualifiedName === serviceName)\n return { score: 0.8, reason: 'exact_local_qualified_service_name' };\n if (candidate.serviceName === serviceName || candidate.serviceName === simple)\n return { score: 0.75, reason: 'exact_local_simple_service_name' };\n if ([serviceName, `/${serviceName}`, `/${simple}`]\n .includes(candidate.servicePath))\n return { score: 0.7, reason: 'exact_local_service_path' };\n if (candidate.servicePath.endsWith(`/${simple}`)) return {\n score: candidates.filter((item) =>\n item.servicePath.endsWith(`/${simple}`)).length === 1 ? 0.65 : 0.2,\n reason: 'suffix_local_service_path',\n };\n return { score: 0, reason: 'local_service_name_mismatch' };\n}\n\nfunction applyServiceNameScore(\n candidate: OperationTarget,\n serviceName: string | undefined,\n candidates: readonly OperationTarget[],\n): void {\n if (!serviceName) return;\n const signal = serviceNameScore(candidate, serviceName, candidates);\n candidate.score += signal.score;\n candidate.reasons.push(signal.reason);\n}\n\nfunction applyOverrideScore(\n candidate: OperationTarget,\n signals: OperationSignals,\n): void {\n if (!signals.hasExplicitOverride) return;\n candidate.score += 0.2;\n candidate.reasons.push(signals.repoId !== undefined\n ? 'explicit_local_service_call' : 'explicit_dynamic_override');\n}\n\nfunction applyUniquePathRecovery(\n candidate: OperationTarget,\n candidates: readonly OperationTarget[],\n signals: OperationSignals,\n): void {\n if (signals.repoId === undefined || candidates.length !== 1\n || !signals.serviceName\n || !candidate.reasons.includes('local_service_name_mismatch')\n || !operationMatches(candidate, signals.operationPath)) return;\n candidate.score = Math.max(candidate.score, 0.9);\n candidate.reasons.push(\n 'same_repo_unique_operation_path_with_lookup_mismatch',\n );\n}\n\nfunction strongSignal(signals: OperationSignals): boolean {\n return Boolean(signals.servicePath || signals.serviceName || signals.alias\n || signals.destination || signals.hasExplicitOverride);\n}\n\nfunction targetSignalMatches(\n candidate: OperationTarget,\n signals: OperationSignals,\n): boolean {\n if (candidate.servicePath === signals.servicePath) return true;\n if (!signals.serviceName) return false;\n return !candidate.reasons.includes('local_service_name_mismatch')\n || candidate.reasons.includes(\n 'same_repo_unique_operation_path_with_lookup_mismatch',\n );\n}\n\nfunction bestCandidateResolves(\n best: OperationTarget | undefined,\n second: OperationTarget | undefined,\n signals: OperationSignals,\n): best is OperationTarget {\n if (!best) return false;\n return best.score >= 0.9\n && targetSignalMatches(best, signals)\n && operationMatches(best, signals.operationPath)\n && (!second || best.score - second.score >= 0.25);\n}\n\nfunction finalOperationResolution(\n candidates: OperationTarget[],\n signals: OperationSignals,\n): OperationResolution {\n const best = candidates[0];\n const second = candidates[1];\n if (signals.isDynamic && !signals.hasExplicitOverride && !signals.servicePath)\n return {\n status: 'dynamic',\n candidates,\n reasons: ['dynamic_target_without_override'],\n };\n if (!strongSignal(signals))\n return {\n status: candidates.length > 1 ? 'ambiguous' : 'unresolved',\n candidates,\n reasons: ['operation_path_only_has_no_strong_target_signal'],\n };\n if (bestCandidateResolves(best, second, signals))\n return {\n status: 'resolved',\n target: best,\n candidates,\n reasons: best.reasons,\n };\n return {\n status: candidates.length > 1 ? 'ambiguous' : 'unresolved',\n candidates,\n reasons: ['candidate_score_below_resolution_threshold'],\n };\n}\n\nfunction compareBinary(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction serviceMatches(candidate: OperationTarget, serviceName: string | undefined): boolean {\n if (!serviceName) return false;\n const simple = serviceName.split('.').at(-1) ?? serviceName;\n return candidate.qualifiedName === serviceName || candidate.serviceName === serviceName || candidate.serviceName === simple || candidate.servicePath === serviceName || candidate.servicePath === `/${serviceName}` || candidate.servicePath === `/${simple}` || candidate.servicePath.endsWith(`/${simple}`);\n}\nfunction implementationContextCandidates(db: Db, candidates: OperationTarget[], callerRepoId: number, serviceName: string): OperationTarget[] {\n const matching = candidates.filter((candidate) => serviceMatches(candidate, serviceName));\n const owned = matching.map((candidate) => ownershipReason(db, candidate, callerRepoId)).filter((item): item is { candidate: OperationTarget; reason: string } => Boolean(item));\n if (owned.length === 0) return [];\n const direct = owned.filter((item) => item.reason !== 'caller_depends_on_model_package');\n const chosen = direct.length > 0 ? direct : owned.length === 1 ? owned : [];\n return chosen.map((item) => ({ ...item.candidate, score: 0.95, reasons: [...item.candidate.reasons, 'implementation_context_caller_ownership', item.reason] }));\n}\nfunction ownershipReason(db: Db, candidate: OperationTarget, callerRepoId: number): { candidate: OperationTarget; reason: string } | undefined {\n const edge = db.prepare(\"SELECT status,evidence_json,to_id FROM graph_edges WHERE edge_type='OPERATION_IMPLEMENTED_BY_HANDLER' AND from_kind='operation' AND from_id=? ORDER BY CASE status WHEN 'resolved' THEN 0 WHEN 'ambiguous' THEN 1 ELSE 2 END LIMIT 1\").get(String(candidate.operationId)) as { status?: string; evidence_json?: string; to_id?: string } | undefined;\n if (edge?.status === 'resolved') {\n const row = db.prepare('SELECT hc.repo_id repoId FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id WHERE hm.id=?').get(edge.to_id) as { repoId?: number } | undefined;\n if (row?.repoId === callerRepoId) return { candidate, reason: 'resolved_implementation_handler_repo_matches_caller' };\n }\n if (edge?.evidence_json) {\n const stored = parsedRecord(edge.evidence_json);\n const evidence = canonicalImplementationEvidence(db, candidate.operationId) ?? stored;\n const hit = implementationEvidenceCandidates(evidence).find((item) =>\n item.accepted && (item.handlerRepoId === callerRepoId\n || item.applicationRepoId === callerRepoId));\n if (hit) return { candidate, reason: edge.status === 'ambiguous' ? 'ambiguous_implementation_candidate_repo_matches_caller' : 'registration_package_matches_caller' };\n }\n const dep = db.prepare(\"SELECT 1 FROM graph_edges WHERE edge_type='REPO_IMPORTS_HELPER_PACKAGE' AND status='resolved' AND from_kind='repo' AND from_id=? AND to_id=?\").get(String(callerRepoId), String(candidate.repoId));\n if (dep) return { candidate, reason: 'caller_depends_on_model_package' };\n return undefined;\n}\n\nfunction implementationEvidenceCandidates(\n evidence: Record<string, unknown>,\n): Array<{ accepted: boolean; handlerRepoId?: number; applicationRepoId?: number }> {\n const candidates = evidence.candidates;\n if (!Array.isArray(candidates)) return [];\n return candidates.flatMap((candidate) => {\n if (!isRecord(candidate)) return [];\n const row = candidate;\n const handler = recordValue(row.handlerPackage);\n const application = recordValue(row.applicationPackage);\n return [{\n accepted: row.accepted === true,\n handlerRepoId: numberValue(handler.id),\n applicationRepoId: numberValue(application.id),\n }];\n });\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction parsedRecord(value: string): Record<string, unknown> {\n try {\n const parsed: unknown = JSON.parse(value);\n return recordValue(parsed);\n } catch {\n return {};\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction matchesLocalRepo(db: Db, operationId: number, repoId: number | undefined): boolean {\n if (repoId === undefined) return true;\n const row = db.prepare('SELECT s.repo_id repoId FROM cds_operations o JOIN cds_services s ON s.id=o.service_id WHERE o.id=?').get(operationId) as { repoId?: number } | undefined;\n return row?.repoId === repoId;\n}\nexport function findOperation(\n db: Db,\n servicePath: string | undefined,\n operationPath: string | undefined,\n workspaceId?: number,\n): OperationTarget | undefined {\n return resolveOperation(db, { servicePath, operationPath }, workspaceId)\n .target;\n}\n","import type { Db } from '../db/connection.js';\nimport { projectBounded } from '../utils/000-bounded-projection.js';\n\ninterface RepoDependencyRow {\n id: number;\n name: string;\n package_name: string | null;\n dependencies_json: string;\n}\nexport interface DependencyLinkSummary {\n edgeCount: number;\n resolvedCount: number;\n ambiguousCount: number;\n}\ninterface CandidateResult {\n candidates: RepoDependencyRow[];\n strategy: 'exact_package_name' | 'normalized_directory';\n}\nfunction normalizeName(value: string): string {\n return value.toLowerCase().replace(/^@[^/]+\\//, '').replace(/[^a-z0-9]+/g, '');\n}\nfunction candidatesForDependency(repos: RepoDependencyRow[], dep: string, sourceId: number): CandidateResult {\n const exact = repos.filter((repo) => repo.id !== sourceId && repo.package_name === dep);\n if (exact.length > 0) return { candidates: exact, strategy: 'exact_package_name' };\n const normalized = normalizeName(dep);\n return { candidates: repos.filter((repo) => repo.id !== sourceId && normalizeName(repo.name) === normalized), strategy: 'normalized_directory' };\n}\nexport function linkHelperPackages(db: Db, workspaceId: number, generation: number): DependencyLinkSummary {\n const repos = db.prepare('SELECT id,name,package_name,dependencies_json FROM repositories WHERE workspace_id=?').all(workspaceId) as unknown as RepoDependencyRow[];\n const summary: DependencyLinkSummary = { edgeCount: 0, resolvedCount: 0, ambiguousCount: 0 };\n for (const repo of repos) {\n const deps = JSON.parse(repo.dependencies_json) as Record<string, string>;\n for (const dep of Object.keys(deps)) {\n const result = candidatesForDependency(repos, dep, repo.id);\n if (result.candidates.length === 0) continue;\n const status = result.candidates.length === 1 ? 'resolved' : 'ambiguous';\n const helper = status === 'resolved' ? result.candidates[0] : undefined;\n const projection = projectBounded(result.candidates, (left, right) =>\n left.name.localeCompare(right.name)\n || String(left.package_name ?? '').localeCompare(String(right.package_name ?? ''))\n || left.id - right.id);\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,unresolved_reason,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)').run(\n workspaceId,\n 'REPO_IMPORTS_HELPER_PACKAGE',\n status,\n 'repo',\n String(repo.id),\n helper ? 'repo' : 'repo_candidates',\n helper ? String(helper.id) : projection.items.map((candidate) => candidate.id).join(','),\n helper ? 1 : 0.5,\n JSON.stringify({\n dependency: dep,\n candidates: projection.items.map((candidate) => ({\n id: candidate.id,\n name: candidate.name,\n packageName: candidate.package_name,\n })),\n candidateCount: projection.totalCount,\n shownCandidateCount: projection.shownCount,\n omittedCandidateCount: projection.omittedCount,\n match: result.strategy,\n }),\n 0,\n helper ? null : 'Ambiguous dependency package candidates',\n generation,\n );\n summary.edgeCount += 1;\n if (helper) summary.resolvedCount += 1;\n else summary.ambiguousCount += 1;\n }\n }\n return summary;\n}\n","import type {\n NormalizedODataOperationPath,\n ODataPathIntent,\n} from './odata-path-normalizer.js';\nimport {\n boundCandidateLikeEvidence,\n projectBounded,\n type BoundedProjection,\n} from '../utils/000-bounded-projection.js';\nimport { extractPlaceholderKeys } from '../utils/001-placeholders.js';\n\nexport interface LinkedOperationResolution {\n target?: {\n repoName?: string;\n servicePath?: string;\n operationPath?: string;\n operationName?: string;\n };\n candidates: unknown[];\n status: string;\n reasons: string[];\n}\n\nexport function linkedCallEvidence(\n call: Record<string, unknown>,\n resolution: LinkedOperationResolution,\n servicePath: string | undefined,\n operationPath: string | undefined,\n destination: string | undefined,\n normalized: NormalizedODataOperationPath | undefined,\n intent: ODataPathIntent | undefined,\n): Record<string, unknown> {\n const candidates = boundedCallCandidates(resolution.candidates);\n return {\n ...callLocationEvidence(call),\n ...selectedBindingEvidence(call),\n ...routingEvidence(call, servicePath, operationPath, destination, normalized, intent),\n ...candidateEvidence(candidates, resolution),\n outboundEvidence: boundCandidateLikeEvidence(objectJson(call.evidence_json) ?? {}),\n analysisCompleteness: call.unresolved_reason ? 'partial' : 'complete',\n parserWarning: call.unresolved_reason\n ? { code: 'parser_warning', message: call.unresolved_reason }\n : undefined,\n };\n}\n\nexport function ambiguousPathCandidates(\n pathAnalysis: Record<string, unknown>,\n): BoundedProjection<string> {\n const values = Array.isArray(pathAnalysis.candidateRawPaths)\n ? pathAnalysis.candidateRawPaths.filter((value): value is string =>\n typeof value === 'string')\n : [];\n return projectBounded(values, (left, right) => left.localeCompare(right));\n}\n\nexport function objectJson(value: unknown): Record<string, unknown> | undefined {\n const parsed = parseJson(value);\n return isRecord(parsed) ? parsed : undefined;\n}\n\nexport function objectValue(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction callLocationEvidence(call: Record<string, unknown>): Record<string, unknown> {\n return {\n sourceFile: call.source_file,\n sourceLine: call.source_line,\n file: call.source_file,\n line: call.source_line,\n callId: call.id,\n repo: call.repoName,\n };\n}\n\nfunction selectedBindingEvidence(call: Record<string, unknown>): Record<string, unknown> {\n if (!call.selectedBindingId) return {};\n return {\n selectedBindingId: call.selectedBindingId,\n selectedBinding: {\n bindingId: call.selectedBindingId,\n alias: call.alias,\n aliasExpr: call.aliasExpr,\n destinationExpr: call.destinationExpr,\n servicePathExpr: call.servicePathExpr,\n sourceFile: call.bindingSourceFile,\n sourceLine: call.bindingSourceLine,\n helperChain: parseJson(call.helperChainJson),\n },\n };\n}\n\nfunction routingEvidence(\n call: Record<string, unknown>,\n servicePath: string | undefined,\n operationPath: string | undefined,\n destination: string | undefined,\n normalized: NormalizedODataOperationPath | undefined,\n intent: ODataPathIntent | undefined,\n): Record<string, unknown> {\n const routingPlaceholderKeys = placeholderKeys([\n servicePath,\n destination,\n stringValue(call.aliasExpr),\n stringValue(call.alias),\n ]);\n return {\n serviceAlias: call.alias,\n serviceAliasExpr: call.aliasExpr,\n destination,\n servicePath,\n operationPath,\n rawOperationPath: normalized?.wasInvocation\n ? normalized.rawOperationPath\n : intent?.rawPath,\n normalizedOperationPath: normalized?.wasInvocation\n ? normalized.normalizedOperationPath\n : undefined,\n invocationArguments: normalized?.wasInvocation\n ? normalized.invocationArguments\n : undefined,\n invocationArgumentPlaceholderKeys: normalized?.invocationArgumentPlaceholderKeys.length\n ? normalized.invocationArgumentPlaceholderKeys\n : undefined,\n routingPlaceholderKeys: routingPlaceholderKeys.length\n ? routingPlaceholderKeys\n : undefined,\n odataOperationNormalizationReason: normalized?.normalizationReason,\n odataOperationNormalizationRejectedReason: normalized?.normalizationRejectedReason,\n localServiceName: call.local_service_name,\n localServiceLookup: call.local_service_lookup,\n aliasChain: parseJson(call.alias_chain_json),\n transport: call.call_type === 'local_service_call' ? 'local' : undefined,\n helperChain: parseJson(call.helperChainJson),\n odataPathIntent: intent,\n queryStringPresent: intent?.hasQueryString || undefined,\n queryPlaceholderKeys: intent?.placeholderKeys.length\n ? intent.placeholderKeys\n : undefined,\n bindingHasDynamicExpression: Boolean(Number(call.isDynamic ?? 0)) || undefined,\n };\n}\n\nfunction candidateEvidence(\n candidates: ReturnType<typeof boundedCallCandidates>,\n resolution: LinkedOperationResolution,\n): Record<string, unknown> {\n return {\n targetRepo: resolution.target?.repoName,\n targetServicePath: resolution.target?.servicePath,\n targetOperationPath: resolution.target?.operationPath,\n targetOperation: resolution.target?.operationName,\n candidates: candidates.items,\n candidateScores: compactCandidateScores(candidates.items),\n candidateCount: candidates.totalCount,\n shownCandidateCount: candidates.shownCount,\n omittedCandidateCount: candidates.omittedCount,\n candidateScoreCount: candidates.totalCount,\n shownCandidateScoreCount: candidates.shownCount,\n omittedCandidateScoreCount: candidates.omittedCount,\n resolutionStatus: resolution.status,\n resolutionReasons: resolution.reasons,\n };\n}\n\nfunction boundedCallCandidates(\n candidates: unknown[],\n): BoundedProjection<Record<string, unknown>> {\n const rows = candidates.flatMap((candidate): Array<Record<string, unknown>> => {\n const row = objectValue(candidate);\n return row ? [row] : [];\n });\n return projectBounded(rows, compareCallCandidate);\n}\n\nfunction compareCallCandidate(\n left: Record<string, unknown>,\n right: Record<string, unknown>,\n): number {\n return Number(right.score ?? 0) - Number(left.score ?? 0)\n || String(left.repoName ?? '').localeCompare(String(right.repoName ?? ''))\n || String(left.servicePath ?? '').localeCompare(String(right.servicePath ?? ''))\n || String(left.operationPath ?? '').localeCompare(String(right.operationPath ?? ''))\n || Number(left.operationId ?? 0) - Number(right.operationId ?? 0);\n}\n\nfunction compactCandidateScores(\n candidates: Array<Record<string, unknown>>,\n): Array<Record<string, unknown>> {\n return candidates.map((candidate) => ({\n repo: candidate.repoName,\n servicePath: candidate.servicePath,\n operationPath: candidate.operationPath,\n score: candidate.score,\n reasons: Array.isArray(candidate.reasons)\n ? candidate.reasons.filter((reason): reason is string =>\n typeof reason === 'string')\n : ['operation_path_match'],\n }));\n}\n\nfunction placeholderKeys(values: Array<string | undefined>): string[] {\n const keys = values.flatMap(extractPlaceholderKeys);\n return [...new Set(keys)].sort();\n}\n\nfunction parseJson(value: unknown): unknown {\n if (!value) return undefined;\n try {\n const parsed: unknown = JSON.parse(String(value));\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import { posix } from 'node:path';\nimport ts from 'typescript';\nimport {\n hasNestedCommonJsMutation,\n isUnshadowedCommonJsExportExpression,\n unsupportedCommonJsMutation,\n} from './018-package-commonjs-syntax.js';\nimport { stableLocalValueReference } from './020-stable-local-value.js';\n\nexport const PACKAGE_PUBLIC_SURFACE_SCHEMA =\n 'service-flow/package-public-surface@1';\nexport const PACKAGE_PUBLIC_SURFACE_RECORD_CAP = 256;\nexport const PACKAGE_PUBLIC_SURFACE_EXPORT_DEPTH = 16;\n\nexport type PackagePublicSurfaceStatus =\n | 'complete'\n | 'incomplete'\n | 'unsupported'\n | 'not_applicable';\nexport type ExecutableBodyReason =\n | 'body_present'\n | 'declaration_only'\n | 'ambient_declaration'\n | 'abstract_bodyless'\n | 'overload_signature';\n\nexport interface PackageSourceModule {\n sourceFile: string;\n source: ts.SourceFile;\n}\nexport interface ExecutableBodyEligibility {\n eligible: boolean;\n reason: ExecutableBodyReason;\n}\nexport interface PublicSurfaceTarget {\n sourceFile: string;\n kind: 'function' | 'method' | 'object_method';\n localName: string;\n qualifiedName: string;\n startOffset: number;\n endOffset: number;\n bodyEligibility: ExecutableBodyEligibility;\n}\nexport interface PackagePublicEntry {\n entry: string;\n modulePath: string;\n}\nexport interface PackagePublicScope {\n entry: string;\n modulePath: string;\n publicName: string;\n candidateCount: number;\n eligibleCandidateCount: number;\n selectedCandidateCount: 0 | 1;\n candidateSetComplete: true;\n targets: PublicSurfaceTarget[];\n}\nexport interface PackagePublicSurfaceFact {\n schema: typeof PACKAGE_PUBLIC_SURFACE_SCHEMA;\n status: PackagePublicSurfaceStatus;\n reason: string | null;\n recordCap: typeof PACKAGE_PUBLIC_SURFACE_RECORD_CAP;\n total: number;\n shown: number;\n omitted: number;\n packageName: string | null;\n exportsPresent: boolean;\n exportsAuthoritative: boolean;\n main: string | null;\n module: string | null;\n entries: PackagePublicEntry[];\n scopes: PackagePublicScope[];\n}\nexport interface SymbolPublicExposure {\n entry: string;\n modulePath: string;\n publicName: string;\n}\nexport interface SymbolPublicSurfaceEvidence {\n target: PublicSurfaceTarget;\n exposures: SymbolPublicExposure[];\n exposureTotal: number;\n shownExposureCount: number;\n omittedExposureCount: number;\n}\nexport interface PackagePublicSurfaceAnalysis {\n surface: PackagePublicSurfaceFact;\n symbols: SymbolPublicSurfaceEvidence[];\n}\n\ninterface LocalValue {\n callable: PublicSurfaceTarget[];\n members: Map<string, PublicSurfaceTarget[]>;\n declarationOnlyCount: number;\n}\ninterface LocalExport {\n publicName: string;\n localName: string;\n typeOnly: boolean;\n}\ninterface ReExport extends LocalExport {\n importedName: string;\n specifier: string;\n}\nexport interface ModuleInfo {\n modulePath: string;\n sourceFile: string;\n values: Map<string, LocalValue>;\n localExports: LocalExport[];\n reExports: ReExport[];\n starExports: string[];\n unstableValues: Set<string>;\n unsupportedReason?: string;\n}\nexport interface ResolvedExport {\n targets: PublicSurfaceTarget[];\n declarationOnlyCount: number;\n}\nexport interface ModuleResolution {\n exports: Map<string, ResolvedExport>;\n complete: boolean;\n reason?: string;\n}\nconst extensionPattern = /\\.(?:d\\.)?(?:ts|js)$/;\n\nfunction compareBinary(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean {\n return ts.canHaveModifiers(node)\n && Boolean(ts.getModifiers(node)?.some((item) => item.kind === kind));\n}\n\nfunction canonicalModulePath(sourceFile: string): string {\n return sourceFile.replace(/\\\\/g, '/').replace(extensionPattern, '');\n}\n\nfunction targetKey(target: PublicSurfaceTarget): string {\n return [\n target.sourceFile, target.startOffset, target.endOffset,\n target.kind, target.qualifiedName,\n ].join('\\0');\n}\n\nfunction bodyEligibility(\n node: ts.FunctionLikeDeclaration,\n source: ts.SourceFile,\n): ExecutableBodyEligibility {\n if (node.body) return { eligible: true, reason: 'body_present' };\n if (hasModifier(node, ts.SyntaxKind.AbstractKeyword))\n return { eligible: false, reason: 'abstract_bodyless' };\n if (hasModifier(node, ts.SyntaxKind.DeclareKeyword))\n return { eligible: false, reason: 'ambient_declaration' };\n return {\n eligible: false,\n reason: source.isDeclarationFile\n ? 'declaration_only'\n : 'overload_signature',\n };\n}\n\nfunction functionTarget(\n info: ModuleInfo,\n source: ts.SourceFile,\n node: ts.FunctionLikeDeclaration,\n localName: string,\n kind: PublicSurfaceTarget['kind'] = 'function',\n qualifiedName = localName,\n): PublicSurfaceTarget {\n return {\n sourceFile: info.sourceFile, kind, localName, qualifiedName,\n startOffset: node.getStart(source), endOffset: node.getEnd(),\n bodyEligibility: bodyEligibility(node, source),\n };\n}\n\nfunction emptyLocalValue(declarationOnlyCount = 0): LocalValue {\n return { callable: [], members: new Map(), declarationOnlyCount };\n}\n\nfunction localValue(values: Map<string, LocalValue>, name: string): LocalValue {\n const value = values.get(name) ?? emptyLocalValue();\n values.set(name, value);\n return value;\n}\n\nfunction addMember(\n value: LocalValue,\n name: string,\n target: PublicSurfaceTarget,\n): void {\n const targets = value.members.get(name) ?? [];\n targets.push(target);\n value.members.set(name, targets);\n}\n\nfunction propertyName(node: ts.PropertyName | undefined): string | undefined {\n if (!node) return undefined;\n if (ts.isIdentifier(node) || ts.isStringLiteralLike(node)\n || ts.isNumericLiteral(node)) return node.text;\n return undefined;\n}\n\nfunction isPublicStaticMember(member: ts.ClassElement): boolean {\n if (!hasModifier(member, ts.SyntaxKind.StaticKeyword)) return false;\n if (hasModifier(member, ts.SyntaxKind.PrivateKeyword)\n || hasModifier(member, ts.SyntaxKind.ProtectedKeyword)) return false;\n return !member.name || !ts.isPrivateIdentifier(member.name);\n}\n\nfunction collectFunction(\n info: ModuleInfo,\n source: ts.SourceFile,\n node: ts.FunctionDeclaration,\n): void {\n if (!node.name) {\n if (hasModifier(node, ts.SyntaxKind.ExportKeyword))\n info.unsupportedReason = 'anonymous_default_export_without_symbol_identity';\n return;\n }\n localValue(info.values, node.name.text).callable.push(\n functionTarget(info, source, node, node.name.text),\n );\n}\n\nfunction collectClassMember(\n info: ModuleInfo,\n source: ts.SourceFile,\n className: string,\n value: LocalValue,\n member: ts.ClassElement,\n): void {\n if (!isPublicStaticMember(member)) return;\n const name = propertyName(member.name);\n if (!name) return;\n if (ts.isMethodDeclaration(member)) {\n addMember(value, name, functionTarget(\n info, source, member, name, 'method', `${className}.${name}`,\n ));\n return;\n }\n if (!ts.isPropertyDeclaration(member) || !member.initializer\n || (!ts.isArrowFunction(member.initializer)\n && !ts.isFunctionExpression(member.initializer))) return;\n addMember(value, name, functionTarget(\n info, source, member.initializer, name, 'method', `${className}.${name}`,\n ));\n}\n\nfunction collectClassMembers(\n info: ModuleInfo,\n source: ts.SourceFile,\n node: ts.ClassDeclaration,\n): void {\n if (!node.name) return;\n if (!stableLocalValueReference(source, node.name)) {\n info.unstableValues.add(node.name.text);\n return;\n }\n const value = localValue(info.values, node.name.text);\n for (const member of node.members)\n collectClassMember(info, source, node.name.text, value, member);\n}\n\nfunction collectObjectMembers(\n info: ModuleInfo,\n source: ts.SourceFile,\n objectName: string,\n object: ts.ObjectLiteralExpression,\n): void {\n const value = localValue(info.values, objectName);\n for (const member of object.properties) {\n const name = propertyName(member.name);\n if (!name) continue;\n const callable = ts.isMethodDeclaration(member)\n ? member\n : ts.isPropertyAssignment(member)\n && (ts.isArrowFunction(member.initializer)\n || ts.isFunctionExpression(member.initializer))\n ? member.initializer\n : undefined;\n if (callable) addMember(value, name, functionTarget(\n info, source, callable, `${objectName}.${name}`,\n 'object_method', `${objectName}.${name}`,\n ));\n }\n}\n\nfunction collectVariables(\n info: ModuleInfo,\n source: ts.SourceFile,\n statement: ts.VariableStatement,\n): void {\n const immutable = (statement.declarationList.flags & ts.NodeFlags.Const) !== 0;\n for (const item of statement.declarationList.declarations) {\n if (!ts.isIdentifier(item.name)) continue;\n const name = item.name.text;\n if (!immutable || !stableLocalValueReference(source, item.name)) {\n info.unstableValues.add(name);\n continue;\n }\n if (!item.initializer) continue;\n if (ts.isArrowFunction(item.initializer)\n || ts.isFunctionExpression(item.initializer))\n localValue(info.values, name).callable.push(\n functionTarget(info, source, item.initializer, name),\n );\n if (ts.isObjectLiteralExpression(item.initializer))\n collectObjectMembers(info, source, name, item.initializer);\n }\n}\n\nfunction pushLocalExport(\n info: ModuleInfo,\n publicName: string,\n localName: string,\n typeOnly = false,\n): void {\n const rootName = localName.split('.')[0] ?? localName;\n if (info.unstableValues.has(rootName))\n info.unsupportedReason = 'unsupported_mutable_export_binding';\n info.localExports.push({ publicName, localName, typeOnly });\n}\n\nfunction addDirectExports(info: ModuleInfo, statement: ts.Statement): void {\n if (!hasModifier(statement, ts.SyntaxKind.ExportKeyword)) return;\n const exportedName = (name: string): string =>\n hasModifier(statement, ts.SyntaxKind.DefaultKeyword) ? 'default' : name;\n if (ts.isFunctionDeclaration(statement) && statement.name)\n pushLocalExport(info, exportedName(statement.name.text), statement.name.text);\n if (ts.isClassDeclaration(statement) && statement.name)\n pushLocalExport(info, exportedName(statement.name.text), statement.name.text);\n if (ts.isVariableStatement(statement))\n for (const item of statement.declarationList.declarations)\n if (ts.isIdentifier(item.name))\n pushLocalExport(info, item.name.text, item.name.text);\n}\n\nfunction addNamedExports(\n info: ModuleInfo,\n statement: ts.ExportDeclaration,\n): void {\n const clause = statement.exportClause;\n if (!clause || !ts.isNamedExports(clause)) return;\n const module = statement.moduleSpecifier;\n const specifier = module && ts.isStringLiteralLike(module)\n ? module.text\n : undefined;\n for (const item of clause.elements) {\n const importedName = item.propertyName?.text ?? item.name.text;\n const typeOnly = statement.isTypeOnly || item.isTypeOnly;\n if (specifier) info.reExports.push({\n publicName: item.name.text, localName: importedName,\n importedName, specifier, typeOnly,\n });\n else pushLocalExport(info, item.name.text, importedName, typeOnly);\n }\n}\n\nfunction addExportDeclaration(\n info: ModuleInfo,\n statement: ts.ExportDeclaration,\n): void {\n if (statement.exportClause) {\n if (ts.isNamedExports(statement.exportClause))\n addNamedExports(info, statement);\n else info.unsupportedReason = 'unsupported_namespace_reexport';\n return;\n }\n const module = statement.moduleSpecifier;\n if (!module || !ts.isStringLiteralLike(module)) {\n info.unsupportedReason = 'unsupported_export_declaration';\n return;\n }\n info.starExports.push(module.text);\n}\n\nfunction addExportAssignment(\n info: ModuleInfo,\n statement: ts.ExportAssignment,\n): void {\n if (!statement.isExportEquals && ts.isIdentifier(statement.expression))\n pushLocalExport(info, 'default', statement.expression.text);\n else info.unsupportedReason = 'unsupported_export_assignment';\n}\n\nfunction addCjsObjectExports(\n info: ModuleInfo,\n object: ts.ObjectLiteralExpression,\n): void {\n for (const item of object.properties) {\n if (ts.isShorthandPropertyAssignment(item))\n pushLocalExport(info, item.name.text, item.name.text);\n else if (ts.isPropertyAssignment(item)\n && ts.isIdentifier(item.initializer)) {\n const name = propertyName(item.name);\n if (name) pushLocalExport(info, name, item.initializer.text);\n } else info.unsupportedReason = 'unsupported_commonjs_export_shape';\n }\n}\n\nfunction addCjsNamespaceExport(info: ModuleInfo, localName: string): void {\n const value = info.values.get(localName);\n if (!value) {\n info.unsupportedReason = 'unsupported_commonjs_export_shape';\n return;\n }\n if (value.callable.length > 0) pushLocalExport(info, 'default', localName);\n for (const member of value.members.keys()) {\n pushLocalExport(info, member, `${localName}.${member}`);\n pushLocalExport(info, `default.${member}`, `${localName}.${member}`);\n }\n}\n\nfunction cjsBinaryAssignment(\n statement: ts.ExpressionStatement,\n): ts.BinaryExpression | undefined {\n const value = statement.expression;\n if (!ts.isBinaryExpression(value)) return undefined;\n return value.operatorToken.kind === ts.SyntaxKind.EqualsToken\n ? value\n : undefined;\n}\n\nfunction cjsAssignment(\n info: ModuleInfo,\n statement: ts.ExpressionStatement,\n): void {\n const value = cjsBinaryAssignment(statement);\n if (!value) return;\n const left = value.left.getText();\n if (!isUnshadowedCommonJsExportExpression(value.left)) return;\n if (left === 'module.exports' && ts.isObjectLiteralExpression(value.right))\n return addCjsObjectExports(info, value.right);\n if (left === 'module.exports' && ts.isIdentifier(value.right))\n return addCjsNamespaceExport(info, value.right.text);\n const match = /^(?:exports|module\\.exports)\\.([A-Za-z_$][\\w$]*)$/.exec(left);\n if (match?.[1] && ts.isIdentifier(value.right))\n return pushLocalExport(info, match[1], value.right.text);\n info.unsupportedReason = 'unsupported_commonjs_export_shape';\n}\n\nfunction collectTypeDeclaration(\n info: ModuleInfo,\n statement: ts.Statement,\n): void {\n if (!(ts.isInterfaceDeclaration(statement)\n || ts.isTypeAliasDeclaration(statement))\n || !hasModifier(statement, ts.SyntaxKind.ExportKeyword)) return;\n localValue(info.values, statement.name.text).declarationOnlyCount += 1;\n pushLocalExport(info, statement.name.text, statement.name.text, true);\n}\n\nfunction moduleInfo(module: PackageSourceModule): ModuleInfo {\n const info: ModuleInfo = {\n modulePath: canonicalModulePath(module.sourceFile),\n sourceFile: module.sourceFile.replace(/\\\\/g, '/'),\n values: new Map(), localExports: [], reExports: [], starExports: [],\n unstableValues: new Set(),\n };\n for (const statement of module.source.statements) {\n if (ts.isFunctionDeclaration(statement))\n collectFunction(info, module.source, statement);\n if (ts.isClassDeclaration(statement))\n collectClassMembers(info, module.source, statement);\n if (ts.isVariableStatement(statement))\n collectVariables(info, module.source, statement);\n addDirectExports(info, statement);\n if (ts.isExportDeclaration(statement))\n addExportDeclaration(info, statement);\n if (ts.isExportAssignment(statement))\n addExportAssignment(info, statement);\n if (ts.isExpressionStatement(statement)) {\n cjsAssignment(info, statement);\n if (unsupportedCommonJsMutation(statement))\n info.unsupportedReason = 'unsupported_commonjs_export_shape';\n }\n collectTypeDeclaration(info, statement);\n }\n if (hasNestedCommonJsMutation(module.source))\n info.unsupportedReason = 'unsupported_commonjs_export_shape';\n return info;\n}\n\nfunction mergeTargets(\n current: readonly PublicSurfaceTarget[],\n incoming: readonly PublicSurfaceTarget[],\n): PublicSurfaceTarget[] {\n const byKey = new Map(current.map((item) => [targetKey(item), item]));\n for (const item of incoming) byKey.set(targetKey(item), item);\n return [...byKey.values()].sort((left, right) =>\n compareBinary(targetKey(left), targetKey(right)));\n}\n\nfunction mergeExport(\n exports: Map<string, ResolvedExport>,\n publicName: string,\n incoming: ResolvedExport,\n): void {\n const current = exports.get(publicName)\n ?? { targets: [], declarationOnlyCount: 0 };\n exports.set(publicName, {\n targets: mergeTargets(current.targets, incoming.targets),\n declarationOnlyCount:\n current.declarationOnlyCount + incoming.declarationOnlyCount,\n });\n}\n\nfunction localExportValue(\n info: ModuleInfo,\n localName: string,\n): LocalValue | undefined {\n const direct = info.values.get(localName);\n if (direct) return direct;\n const separator = localName.lastIndexOf('.');\n if (separator < 1) return undefined;\n const owner = info.values.get(localName.slice(0, separator));\n const targets = owner?.members.get(localName.slice(separator + 1));\n return targets\n ? { callable: targets, members: new Map(), declarationOnlyCount: 0 }\n : undefined;\n}\n\nfunction applyLocalExport(\n exports: Map<string, ResolvedExport>,\n info: ModuleInfo,\n item: LocalExport,\n): void {\n const value = localExportValue(info, item.localName);\n if (!value || item.typeOnly) {\n mergeExport(exports, item.publicName, {\n targets: [], declarationOnlyCount: value?.declarationOnlyCount ?? 1,\n });\n return;\n }\n if (value.callable.length > 0 || value.declarationOnlyCount > 0)\n mergeExport(exports, item.publicName, {\n targets: value.callable,\n declarationOnlyCount: value.declarationOnlyCount,\n });\n for (const [member, targets] of value.members)\n mergeExport(exports, `${item.publicName}.${member}`, {\n targets, declarationOnlyCount: 0,\n });\n}\n\nfunction requestedModuleCandidates(\n fromModule: string,\n specifier: string,\n infos: Map<string, ModuleInfo[]>,\n): string[] {\n if (!specifier.startsWith('.')) return [];\n const joined = posix.normalize(posix.join(posix.dirname(fromModule), specifier));\n if (joined === '..' || joined.startsWith('../')) return [];\n const base = canonicalModulePath(joined.replace(/^\\.\\//, ''));\n return [base, `${base}/index`].filter((item, index, values) =>\n values.indexOf(item) === index && infos.get(item)?.length === 1);\n}\n\nfunction renameExport(\n exports: Map<string, ResolvedExport>,\n source: Map<string, ResolvedExport>,\n item: ReExport,\n): void {\n const exact = source.get(item.importedName);\n const typeOnly = (value: ResolvedExport): ResolvedExport => item.typeOnly\n ? { targets: [], declarationOnlyCount: Math.max(\n 1, value.declarationOnlyCount,\n ) }\n : value;\n if (exact) mergeExport(exports, item.publicName, typeOnly(exact));\n for (const [name, value] of source) {\n if (!name.startsWith(`${item.importedName}.`)) continue;\n mergeExport(exports, `${item.publicName}${name.slice(\n item.importedName.length,\n )}`, typeOnly(value));\n }\n}\n\nfunction moduleFailure(reason: string): ModuleResolution {\n return { exports: new Map(), complete: false, reason };\n}\n\nfunction nestedResolution(\n info: ModuleInfo,\n specifier: string,\n infos: Map<string, ModuleInfo[]>,\n memo: Map<string, ModuleResolution>,\n stack: readonly string[],\n): ModuleResolution {\n if (!specifier.startsWith('.'))\n return moduleFailure('unsupported_external_reexport');\n const candidates = requestedModuleCandidates(info.modulePath, specifier, infos);\n if (candidates.length !== 1 || !candidates[0])\n return moduleFailure(candidates.length > 1\n ? 'public_surface_module_resolution_ambiguous'\n : 'public_surface_module_not_indexed');\n return resolveModule(candidates[0], infos, memo, stack);\n}\n\nfunction resolveModuleInfo(\n info: ModuleInfo,\n infos: Map<string, ModuleInfo[]>,\n memo: Map<string, ModuleResolution>,\n stack: readonly string[],\n): ModuleResolution {\n const exports = new Map<string, ResolvedExport>();\n for (const item of info.localExports) applyLocalExport(exports, info, item);\n if (info.unsupportedReason)\n return { exports, complete: false, reason: info.unsupportedReason };\n for (const item of info.reExports) {\n const nested = nestedResolution(info, item.specifier, infos, memo, stack);\n if (!nested.complete) return nested;\n renameExport(exports, nested.exports, item);\n }\n for (const specifier of info.starExports) {\n const nested = nestedResolution(info, specifier, infos, memo, stack);\n if (!nested.complete) return nested;\n for (const [name, value] of nested.exports)\n if (name !== 'default' && !name.startsWith('default.'))\n mergeExport(exports, name, value);\n }\n return { exports, complete: true };\n}\n\nexport function resolveModule(\n modulePath: string,\n infos: Map<string, ModuleInfo[]>,\n memo: Map<string, ModuleResolution>,\n stack: readonly string[] = [],\n): ModuleResolution {\n const cached = memo.get(modulePath);\n if (cached) return cached;\n if (stack.includes(modulePath))\n return moduleFailure('public_surface_reexport_cycle');\n if (stack.length >= PACKAGE_PUBLIC_SURFACE_EXPORT_DEPTH)\n return moduleFailure('public_surface_reexport_depth_exceeded');\n const rows = infos.get(modulePath) ?? [];\n if (rows.length !== 1 || !rows[0])\n return moduleFailure(rows.length > 1\n ? 'public_surface_module_resolution_ambiguous'\n : 'public_surface_module_not_indexed');\n const result = resolveModuleInfo(rows[0], infos, memo, [...stack, modulePath]);\n if (result.complete) memo.set(modulePath, result);\n return result;\n}\n\nexport function moduleInfoMap(\n modules: readonly PackageSourceModule[],\n): Map<string, ModuleInfo[]> {\n const result = new Map<string, ModuleInfo[]>();\n for (const module of modules) {\n const info = moduleInfo(module);\n result.set(info.modulePath, [...(result.get(info.modulePath) ?? []), info]);\n }\n return result;\n}\n\nexport { analyzePackagePublicSurface } from\n './010-package-public-surface-analysis.js';\n","import ts from 'typescript';\nimport {\n lexicalIdentifierDeclarations,\n} from './002-symbol-import-bindings.js';\n\ninterface AccessPath {\n root: ts.Identifier;\n members: Array<string | null>;\n}\n\nfunction unwrap(expression: ts.Expression): ts.Expression {\n if (ts.isParenthesizedExpression(expression)\n || ts.isAsExpression(expression)\n || ts.isSatisfiesExpression(expression)\n || ts.isTypeAssertionExpression(expression)\n || ts.isNonNullExpression(expression))\n return unwrap(expression.expression);\n return expression;\n}\n\nfunction accessPath(expression: ts.Expression): AccessPath | undefined {\n const value = unwrap(expression);\n if (ts.isIdentifier(value)) return { root: value, members: [] };\n if (ts.isPropertyAccessExpression(value)) {\n const parent = accessPath(value.expression);\n return parent\n ? { root: parent.root, members: [...parent.members, value.name.text] }\n : undefined;\n }\n if (!ts.isElementAccessExpression(value)) return undefined;\n const parent = accessPath(value.expression);\n if (!parent) return undefined;\n const argument = value.argumentExpression;\n const member = argument && (ts.isStringLiteralLike(argument)\n || ts.isNumericLiteral(argument)) ? argument.text : null;\n return { root: parent.root, members: [...parent.members, member] };\n}\n\nexport function isUnshadowedCommonJsExportExpression(\n expression: ts.Expression,\n): boolean {\n const path = accessPath(expression);\n if (!path || lexicalIdentifierDeclarations(path.root).length > 0)\n return false;\n if (path.root.text === 'exports') return true;\n return path.root.text === 'module'\n && path.members.length > 0\n && (path.members[0] === 'exports' || path.members[0] === null);\n}\n\nfunction writeTargetContainsExport(expression: ts.Expression): boolean {\n const target = unwrap(expression);\n if (isUnshadowedCommonJsExportExpression(target)) return true;\n if (ts.isSpreadElement(target))\n return writeTargetContainsExport(target.expression);\n if (ts.isBinaryExpression(target)\n && target.operatorToken.kind === ts.SyntaxKind.EqualsToken)\n return writeTargetContainsExport(target.left);\n if (ts.isArrayLiteralExpression(target))\n return target.elements.some((item) =>\n !ts.isOmittedExpression(item) && writeTargetContainsExport(item));\n if (!ts.isObjectLiteralExpression(target)) return false;\n return target.properties.some((property) => {\n if (ts.isShorthandPropertyAssignment(property))\n return isUnshadowedCommonJsExportExpression(property.name);\n if (ts.isSpreadAssignment(property))\n return writeTargetContainsExport(property.expression);\n return ts.isPropertyAssignment(property)\n && writeTargetContainsExport(property.initializer);\n });\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment\n && kind <= ts.SyntaxKind.LastAssignment;\n}\n\nexport function unsupportedCommonJsMutation(\n statement: ts.ExpressionStatement,\n): boolean {\n const expression = statement.expression;\n if (ts.isBinaryExpression(expression)\n && isAssignmentOperator(expression.operatorToken.kind))\n return expression.operatorToken.kind !== ts.SyntaxKind.EqualsToken\n ? writeTargetContainsExport(expression.left)\n : !isUnshadowedCommonJsExportExpression(expression.left)\n && writeTargetContainsExport(expression.left);\n if (ts.isDeleteExpression(expression))\n return writeTargetContainsExport(expression.expression);\n if (ts.isPrefixUnaryExpression(expression)\n || ts.isPostfixUnaryExpression(expression))\n return writeTargetContainsExport(expression.operand);\n return ts.isCallExpression(expression)\n && expression.arguments.some(writeTargetContainsExport);\n}\n\nfunction topLevelDirectAssignment(node: ts.BinaryExpression): boolean {\n return node.operatorToken.kind === ts.SyntaxKind.EqualsToken\n && isUnshadowedCommonJsExportExpression(node.left)\n && ts.isExpressionStatement(node.parent)\n && ts.isSourceFile(node.parent.parent);\n}\n\nfunction unsupportedBinaryNode(node: ts.Node): boolean {\n return ts.isBinaryExpression(node)\n && isAssignmentOperator(node.operatorToken.kind)\n && writeTargetContainsExport(node.left)\n && !topLevelDirectAssignment(node);\n}\n\nfunction unsupportedMutationNode(node: ts.Node): boolean {\n if (ts.isDeleteExpression(node))\n return writeTargetContainsExport(node.expression);\n if (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node))\n return writeTargetContainsExport(node.operand);\n return ts.isCallExpression(node)\n && node.arguments.some(writeTargetContainsExport);\n}\n\nfunction unsupportedLoopNode(node: ts.Node): boolean {\n if (!ts.isForInStatement(node) && !ts.isForOfStatement(node))\n return false;\n return !ts.isVariableDeclarationList(node.initializer)\n && writeTargetContainsExport(node.initializer);\n}\n\nfunction unsupportedCommonJsNode(node: ts.Node): boolean {\n return unsupportedBinaryNode(node)\n || unsupportedMutationNode(node)\n || unsupportedLoopNode(node);\n}\n\nexport function hasNestedCommonJsMutation(source: ts.SourceFile): boolean {\n let unsupported = false;\n const visit = (node: ts.Node): void => {\n if (unsupported) return;\n unsupported = unsupportedCommonJsNode(node);\n if (!unsupported) ts.forEachChild(node, visit);\n };\n visit(source);\n return unsupported;\n}\n","import ts from 'typescript';\n\nexport type SymbolImportModuleKind = 'relative' | 'package';\nexport type SymbolImportBindingKind =\n | 'esm_named'\n | 'esm_default'\n | 'esm_namespace'\n | 'cjs_destructured'\n | 'cjs_namespace';\nexport type SymbolImportReferenceShape =\n | 'identifier'\n | 'namespace_member'\n | 'static_member'\n | 'default_member';\n\nexport interface PackageModuleRequest {\n packageName: string;\n moduleSubpath: string;\n}\n\nexport interface SymbolImportBinding {\n version: 1;\n moduleKind: SymbolImportModuleKind;\n bindingKind: SymbolImportBindingKind;\n localName: string;\n importedName: string | null;\n requestedPackageName: string | null;\n requestedModuleSubpath: string | null;\n rawModuleSpecifier: string;\n typeOnly: boolean;\n bindingSiteStartOffset: number;\n bindingSiteEndOffset: number;\n}\n\nexport interface SymbolImportReference extends SymbolImportBinding {\n referenceShape: SymbolImportReferenceShape;\n referencedMemberName: string | null;\n requestedPublicName: string;\n}\n\nconst packagePart = /^[A-Za-z0-9][A-Za-z0-9._~-]*$/;\nconst invalidPackageSpecifierCharacter = /[\\\\:?#]/;\n\nfunction hasInvalidSubpath(parts: string[]): boolean {\n return parts.some((part) =>\n !part || part === '.' || part === '..' || !packagePart.test(part));\n}\n\nfunction invalidPackageSpecifier(specifier: string): boolean {\n return !specifier || specifier.startsWith('.')\n || invalidPackageSpecifierCharacter.test(specifier);\n}\n\nfunction validPackageParts(parts: string[], scoped: boolean): boolean {\n if (parts.some((part) => !part)) return false;\n if (scoped && (parts.length !== 2 || !parts[0]?.startsWith('@')))\n return false;\n return !hasInvalidSubpath(parts.map((part) => part.replace(/^@/, '')));\n}\n\nexport function packageModuleRequest(\n specifier: string,\n): PackageModuleRequest | undefined {\n if (invalidPackageSpecifier(specifier)) return undefined;\n const parts = specifier.split('/');\n const scoped = specifier.startsWith('@');\n const packageParts = scoped ? parts.slice(0, 2) : parts.slice(0, 1);\n const subpathParts = scoped ? parts.slice(2) : parts.slice(1);\n if (!validPackageParts(packageParts, scoped)\n || hasInvalidSubpath(subpathParts)) return undefined;\n return {\n packageName: packageParts.join('/'),\n moduleSubpath: subpathParts.length > 0\n ? `./${subpathParts.join('/')}`\n : '.',\n };\n}\n\nfunction moduleFields(specifier: string): Pick<\n SymbolImportBinding,\n 'moduleKind' | 'requestedPackageName' | 'requestedModuleSubpath'\n> | undefined {\n if (specifier.startsWith('.')) return {\n moduleKind: 'relative',\n requestedPackageName: null,\n requestedModuleSubpath: null,\n };\n const request = packageModuleRequest(specifier);\n return request ? {\n moduleKind: 'package',\n requestedPackageName: request.packageName,\n requestedModuleSubpath: request.moduleSubpath,\n } : undefined;\n}\n\nfunction binding(\n specifier: string,\n bindingKind: SymbolImportBindingKind,\n localName: string,\n importedName: string | null,\n typeOnly: boolean,\n site: ts.Identifier,\n): SymbolImportBinding | undefined {\n const module = moduleFields(specifier);\n return module ? {\n version: 1,\n ...module,\n bindingKind,\n localName,\n importedName,\n rawModuleSpecifier: specifier,\n typeOnly,\n bindingSiteStartOffset: site.getStart(site.getSourceFile()),\n bindingSiteEndOffset: site.getEnd(),\n } : undefined;\n}\n\nfunction esmBindings(node: ts.ImportDeclaration): SymbolImportBinding[] {\n if (!ts.isStringLiteralLike(node.moduleSpecifier)) return [];\n const specifier = node.moduleSpecifier.text;\n const clause = node.importClause;\n if (!clause) return [];\n const bindings: SymbolImportBinding[] = [];\n if (clause.name) {\n const value = binding(\n specifier, 'esm_default', clause.name.text, 'default', clause.isTypeOnly,\n clause.name,\n );\n if (value) bindings.push(value);\n }\n const named = clause.namedBindings;\n if (named && ts.isNamespaceImport(named)) {\n const value = binding(\n specifier, 'esm_namespace', named.name.text, null, clause.isTypeOnly,\n named.name,\n );\n if (value) bindings.push(value);\n }\n if (named && ts.isNamedImports(named))\n bindings.push(...esmNamedBindings(specifier, clause.isTypeOnly, named));\n return bindings;\n}\n\nfunction esmNamedBindings(\n specifier: string,\n clauseTypeOnly: boolean,\n named: ts.NamedImports,\n): SymbolImportBinding[] {\n return named.elements.flatMap((element) => {\n const value = binding(\n specifier,\n 'esm_named',\n element.name.text,\n element.propertyName?.text ?? element.name.text,\n clauseTypeOnly || element.isTypeOnly,\n element.name,\n );\n return value ? [value] : [];\n });\n}\n\nfunction requireSpecifier(\n expression: ts.Expression | undefined,\n): string | undefined {\n if (!expression || !ts.isCallExpression(expression)\n || !ts.isIdentifier(expression.expression)\n || expression.expression.text !== 'require'\n || lexicalIdentifierDeclaration(expression.expression)\n || expression.arguments.length !== 1) return undefined;\n const [argument] = expression.arguments;\n return argument && ts.isStringLiteralLike(argument)\n ? argument.text\n : undefined;\n}\n\nfunction cjsBindingElement(\n specifier: string,\n element: ts.BindingElement,\n): SymbolImportBinding[] {\n if (element.dotDotDotToken || !ts.isIdentifier(element.name)\n || (element.propertyName\n && !ts.isIdentifier(element.propertyName)\n && !ts.isStringLiteralLike(element.propertyName))) return [];\n const importedName = element.propertyName\n ? element.propertyName.text\n : element.name.text;\n const value = binding(\n specifier, 'cjs_destructured', element.name.text, importedName, false,\n element.name,\n );\n return value ? [value] : [];\n}\n\nfunction cjsBindings(\n declaration: ts.VariableDeclaration,\n): SymbolImportBinding[] {\n const specifier = requireSpecifier(declaration.initializer);\n if (!specifier) return [];\n if (ts.isIdentifier(declaration.name)) {\n const value = binding(\n specifier, 'cjs_namespace', declaration.name.text, null, false,\n declaration.name,\n );\n return value ? [value] : [];\n }\n if (!ts.isObjectBindingPattern(declaration.name)) return [];\n return declaration.name.elements.flatMap((element) =>\n cjsBindingElement(specifier, element));\n}\n\nfunction importEqualsBinding(\n statement: ts.ImportEqualsDeclaration,\n): SymbolImportBinding[] {\n const reference = statement.moduleReference;\n if (!ts.isExternalModuleReference(reference)\n || !reference.expression\n || !ts.isStringLiteralLike(reference.expression)) return [];\n const value = binding(\n reference.expression.text,\n 'cjs_namespace',\n statement.name.text,\n null,\n statement.isTypeOnly,\n statement.name,\n );\n return value ? [value] : [];\n}\n\nfunction compareBinary(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction bindingKey(value: SymbolImportBinding): string {\n return [\n value.localName,\n value.rawModuleSpecifier,\n value.bindingKind,\n value.importedName ?? '',\n String(value.bindingSiteStartOffset).padStart(12, '0'),\n String(value.bindingSiteEndOffset).padStart(12, '0'),\n ].join('\\0');\n}\n\nfunction collectNestedCjsBindings(\n source: ts.SourceFile,\n): SymbolImportBinding[] {\n const bindings: SymbolImportBinding[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isVariableStatement(node)\n && (node.declarationList.flags & ts.NodeFlags.Const) !== 0)\n for (const declaration of node.declarationList.declarations)\n bindings.push(...cjsBindings(declaration));\n ts.forEachChild(node, visit);\n };\n visit(source);\n return bindings;\n}\n\nexport function collectSymbolImportBindings(\n source: ts.SourceFile,\n): SymbolImportBinding[] {\n const bindings = collectNestedCjsBindings(source);\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement))\n bindings.push(...esmBindings(statement));\n if (ts.isImportEqualsDeclaration(statement))\n bindings.push(...importEqualsBinding(statement));\n }\n return bindings.sort((left, right) =>\n compareBinary(bindingKey(left), bindingKey(right)));\n}\n\nfunction matchingBinding(\n bindings: readonly SymbolImportBinding[],\n identifier: ts.Identifier,\n): SymbolImportBinding | undefined {\n const matches = bindings.filter((value) =>\n value.localName === identifier.text\n && identifierMatchesBinding(identifier, value));\n return matches.length === 1 ? matches[0] : undefined;\n}\n\nconst scopeDeclarationCache = new WeakMap<ts.Node, ts.Identifier[]>();\n\nfunction bindingIdentifiers(name: ts.BindingName): ts.Identifier[] {\n if (ts.isIdentifier(name)) return [name];\n return name.elements.flatMap((element) =>\n ts.isBindingElement(element) ? bindingIdentifiers(element.name) : []);\n}\n\nfunction importIdentifiers(statement: ts.Statement): ts.Identifier[] {\n if (ts.isImportEqualsDeclaration(statement)) return [statement.name];\n if (!ts.isImportDeclaration(statement)) return [];\n const clause = statement.importClause;\n const values = clause?.name ? [clause.name] : [];\n const named = clause?.namedBindings;\n if (named && ts.isNamespaceImport(named)) values.push(named.name);\n if (named && ts.isNamedImports(named))\n values.push(...named.elements.map((element) => element.name));\n return values;\n}\n\nfunction statementIdentifiers(\n statement: ts.Statement,\n includeVar: boolean,\n): ts.Identifier[] {\n if (ts.isVariableStatement(statement)) {\n const blockScoped = (statement.declarationList.flags\n & ts.NodeFlags.BlockScoped) !== 0;\n return includeVar || blockScoped\n ? statement.declarationList.declarations.flatMap((declaration) =>\n bindingIdentifiers(declaration.name))\n : [];\n }\n if ((ts.isFunctionDeclaration(statement)\n || ts.isClassDeclaration(statement)\n || ts.isEnumDeclaration(statement)) && statement.name)\n return [statement.name];\n return includeVar ? importIdentifiers(statement) : [];\n}\n\nfunction varIdentifiers(scope: ts.FunctionLikeDeclaration): ts.Identifier[] {\n const values: ts.Identifier[] = [];\n const visit = (node: ts.Node): void => {\n if (node !== scope.body && ts.isFunctionLike(node)) return;\n if (ts.isVariableDeclaration(node)\n && ts.isVariableDeclarationList(node.parent)\n && (node.parent.flags & ts.NodeFlags.BlockScoped) === 0)\n values.push(...bindingIdentifiers(node.name));\n ts.forEachChild(node, visit);\n };\n if (scope.body) visit(scope.body);\n return values;\n}\n\nfunction functionIdentifiers(scope: ts.FunctionLikeDeclaration): ts.Identifier[] {\n const values = scope.parameters.flatMap((parameter) =>\n bindingIdentifiers(parameter.name));\n if ((ts.isFunctionDeclaration(scope)\n || ts.isFunctionExpression(scope)) && scope.name)\n values.push(scope.name);\n return [...values, ...varIdentifiers(scope)];\n}\n\nfunction loopIdentifiers(node: ts.Node): ts.Identifier[] {\n const initializer = ts.isForStatement(node)\n ? node.initializer\n : ts.isForInStatement(node) || ts.isForOfStatement(node)\n ? node.initializer\n : undefined;\n return initializer && ts.isVariableDeclarationList(initializer)\n && (initializer.flags & ts.NodeFlags.BlockScoped) !== 0\n ? initializer.declarations.flatMap((declaration) =>\n bindingIdentifiers(declaration.name))\n : [];\n}\n\nfunction lexicalFunctionScope(\n node: ts.Node,\n): node is ts.FunctionLikeDeclaration {\n return ts.isFunctionDeclaration(node)\n || ts.isFunctionExpression(node)\n || ts.isArrowFunction(node)\n || ts.isMethodDeclaration(node)\n || ts.isGetAccessorDeclaration(node)\n || ts.isSetAccessorDeclaration(node)\n || ts.isConstructorDeclaration(node);\n}\n\nfunction uncachedScopeIdentifiers(node: ts.Node): ts.Identifier[] {\n if (ts.isSourceFile(node))\n return node.statements.flatMap((statement) =>\n statementIdentifiers(statement, true));\n if (ts.isClassExpression(node) && node.name) return [node.name];\n if (ts.isBlock(node) || ts.isModuleBlock(node))\n return node.statements.flatMap((statement) =>\n statementIdentifiers(statement, false));\n if (ts.isCaseBlock(node))\n return node.clauses.flatMap((clause) =>\n clause.statements.flatMap((statement) =>\n statementIdentifiers(statement, false)));\n if (lexicalFunctionScope(node)) return functionIdentifiers(node);\n if (ts.isCatchClause(node) && node.variableDeclaration)\n return bindingIdentifiers(node.variableDeclaration.name);\n return loopIdentifiers(node);\n}\n\nfunction scopeIdentifiers(node: ts.Node): ts.Identifier[] {\n const cached = scopeDeclarationCache.get(node);\n if (cached) return cached;\n const values = uncachedScopeIdentifiers(node);\n scopeDeclarationCache.set(node, values);\n return values;\n}\n\nexport function lexicalIdentifierDeclarations(\n identifier: ts.Identifier,\n): ts.Identifier[] {\n let current: ts.Node | undefined = identifier.parent;\n while (current) {\n const matches = scopeIdentifiers(current).filter((candidate) =>\n candidate.text === identifier.text);\n if (matches.length > 0) return matches;\n current = current.parent;\n }\n return [];\n}\n\nexport function lexicalIdentifierDeclaration(\n identifier: ts.Identifier,\n): ts.Identifier | undefined {\n const matches = lexicalIdentifierDeclarations(identifier);\n return matches.length === 1 ? matches[0] : undefined;\n}\n\nexport function identifierMatchesDeclaration(\n identifier: ts.Identifier,\n startOffset: number,\n endOffset: number,\n): boolean {\n const declaration = lexicalIdentifierDeclaration(identifier);\n return declaration?.getStart(identifier.getSourceFile()) === startOffset\n && declaration.getEnd() === endOffset;\n}\n\nfunction identifierMatchesBinding(\n identifier: ts.Identifier,\n value: SymbolImportBinding,\n): boolean {\n return identifierMatchesDeclaration(\n identifier,\n value.bindingSiteStartOffset,\n value.bindingSiteEndOffset,\n );\n}\n\nexport function derivedMemberImportReference(\n value: SymbolImportBinding,\n member: string,\n): SymbolImportReference | undefined {\n const namespace = value.bindingKind === 'esm_namespace'\n || value.bindingKind === 'cjs_namespace';\n if (!member || (!namespace && value.importedName === null)) return undefined;\n const defaultBinding = value.bindingKind === 'esm_default';\n return {\n ...value,\n referenceShape: namespace\n ? 'namespace_member'\n : defaultBinding ? 'default_member' : 'static_member',\n referencedMemberName: member,\n requestedPublicName: namespace\n ? member\n : `${value.importedName}.${member}`,\n };\n}\n\nfunction identifierReference(\n expression: ts.Identifier,\n bindings: readonly SymbolImportBinding[],\n): SymbolImportReference | undefined {\n const value = matchingBinding(bindings, expression);\n if (!value || value.importedName === null) return undefined;\n return {\n ...value,\n referenceShape: 'identifier',\n referencedMemberName: null,\n requestedPublicName: value.importedName,\n };\n}\n\nfunction memberReference(\n expression: ts.PropertyAccessExpression,\n bindings: readonly SymbolImportBinding[],\n): SymbolImportReference | undefined {\n if (expression.questionDotToken || !ts.isIdentifier(expression.expression)\n || !ts.isIdentifier(expression.name)) return undefined;\n const value = matchingBinding(bindings, expression.expression);\n if (!value) return undefined;\n const member = expression.name.text;\n return derivedMemberImportReference(value, member);\n}\n\nfunction accessorMemberReference(\n expression: ts.PropertyAccessExpression,\n bindings: readonly SymbolImportBinding[],\n): SymbolImportReference | undefined {\n const receiver = expression.expression;\n if (!ts.isCallExpression(receiver)\n || receiver.arguments.length !== 0\n || !ts.isPropertyAccessExpression(receiver.expression)\n || !ts.isIdentifier(receiver.expression.expression)\n || receiver.expression.questionDotToken\n || expression.questionDotToken) return undefined;\n const value = matchingBinding(\n bindings, receiver.expression.expression,\n );\n if (!value || value.importedName === null)\n return undefined;\n return {\n ...value,\n referenceShape: 'static_member',\n referencedMemberName: expression.name.text,\n requestedPublicName: `${value.importedName}.${expression.name.text}`,\n };\n}\n\nexport function symbolImportReference(\n expression: ts.Expression,\n bindings: readonly SymbolImportBinding[],\n): SymbolImportReference | undefined {\n if (ts.isIdentifier(expression))\n return identifierReference(expression, bindings);\n if (!ts.isPropertyAccessExpression(expression)) return undefined;\n return memberReference(expression, bindings)\n ?? accessorMemberReference(expression, bindings);\n}\n","import ts from 'typescript';\nimport {\n identifierMatchesDeclaration,\n} from './002-symbol-import-bindings.js';\nimport {\n isUnshadowedCommonJsExportExpression,\n} from './018-package-commonjs-syntax.js';\n\nfunction transparentUse(node: ts.Node): ts.Node {\n const parent = node.parent;\n if (parent && (ts.isParenthesizedExpression(parent)\n || ts.isAsExpression(parent)\n || ts.isSatisfiesExpression(parent)\n || ts.isTypeAssertionExpression(parent)\n || ts.isNonNullExpression(parent)))\n return transparentUse(parent);\n return node;\n}\n\nfunction assignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment\n && kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction directWriteTarget(node: ts.Node): boolean {\n const use = transparentUse(node);\n const parent = use.parent;\n if (!parent) return false;\n if (ts.isBinaryExpression(parent))\n return parent.left === use && assignmentOperator(parent.operatorToken.kind);\n if (ts.isDeleteExpression(parent))\n return parent.expression === use;\n if (ts.isPrefixUnaryExpression(parent)\n || ts.isPostfixUnaryExpression(parent))\n return parent.operand === use;\n return (ts.isForInStatement(parent) || ts.isForOfStatement(parent))\n && parent.initializer === use;\n}\n\ntype MemberContainer = ts.ObjectLiteralExpression | ts.ClassLikeDeclaration;\ntype StableMember = ts.ObjectLiteralElementLike | ts.ClassElement;\n\nfunction memberContainer(\n declaration: ts.Identifier,\n): MemberContainer | undefined {\n const parent = declaration.parent;\n if (ts.isClassDeclaration(parent)) return parent;\n if (!ts.isVariableDeclaration(parent) || parent.name !== declaration\n || !parent.initializer) return undefined;\n return ts.isObjectLiteralExpression(parent.initializer)\n || ts.isClassExpression(parent.initializer)\n ? parent.initializer\n : undefined;\n}\n\nfunction declaredMemberName(node: ts.Node): string | undefined {\n if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node))\n return node.text;\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)\n || ts.isNumericLiteral(node)) return node.text;\n return undefined;\n}\n\nfunction accessedMemberName(node: ts.Node): string | undefined {\n if (ts.isPropertyAccessExpression(node)) return node.name.text;\n if (!ts.isElementAccessExpression(node)) return undefined;\n const argument = node.argumentExpression;\n return argument && (ts.isStringLiteral(argument)\n || ts.isNoSubstitutionTemplateLiteral(argument))\n ? argument.text\n : undefined;\n}\n\nfunction memberName(node: ts.Node): string | undefined {\n return declaredMemberName(node) ?? accessedMemberName(node);\n}\n\nfunction matchingMember(\n value: MemberContainer,\n name: string,\n): StableMember | undefined {\n const members = ts.isObjectLiteralExpression(value)\n ? value.properties\n : value.members.filter((member) =>\n ts.canHaveModifiers(member)\n && ts.getModifiers(member)?.some((modifier) =>\n modifier.kind === ts.SyntaxKind.StaticKeyword));\n const matches = members.filter((member) =>\n 'name' in member && member.name && memberName(member.name) === name);\n if (matches.length === 1) return matches[0];\n const implemented = matches.filter((member) => callableMember(member)?.body);\n return implemented.length === 1 ? implemented[0] : undefined;\n}\n\nfunction callableMember(\n member: StableMember,\n): ts.FunctionLikeDeclaration | undefined {\n if (ts.isMethodDeclaration(member)) return member;\n if (ts.isPropertyAssignment(member)\n && (ts.isArrowFunction(member.initializer)\n || ts.isFunctionExpression(member.initializer)))\n return member.initializer;\n if (ts.isPropertyDeclaration(member) && member.initializer\n && (ts.isArrowFunction(member.initializer)\n || ts.isFunctionExpression(member.initializer)))\n return member.initializer;\n return undefined;\n}\n\nfunction containsThis(node: ts.Node): boolean {\n let found = false;\n const visit = (child: ts.Node): void => {\n if (found) return;\n if (child.kind === ts.SyntaxKind.ThisKeyword) {\n found = true;\n return;\n }\n ts.forEachChild(child, visit);\n };\n visit(node);\n return found;\n}\n\nfunction invokedMember(node: ts.Node): boolean {\n const use = transparentUse(node);\n const parent = use.parent;\n return Boolean(parent && ts.isCallExpression(parent)\n && parent.expression === use);\n}\n\ntype MemberAccess = ts.PropertyAccessExpression | ts.ElementAccessExpression;\n\nfunction receiverAccess(\n node: ts.Node,\n): MemberAccess | undefined {\n const parent = node.parent;\n if (!parent || (!ts.isPropertyAccessExpression(parent)\n && !ts.isElementAccessExpression(parent))\n || parent.expression !== node || directWriteTarget(parent)) return undefined;\n return parent;\n}\n\nfunction stableMemberUse(\n access: MemberAccess,\n member: StableMember,\n): boolean {\n if (!invokedMember(access)) return !ts.isGetAccessor(member)\n && !ts.isSetAccessor(member);\n const callable = callableMember(member);\n return Boolean(callable && !containsThis(callable));\n}\n\nfunction memberReceiverUse(\n node: ts.Node,\n declaration: ts.Identifier,\n): boolean {\n const access = receiverAccess(node);\n if (!access) return false;\n const name = memberName(access);\n const value = memberContainer(declaration);\n const member = name && value ? matchingMember(value, name) : undefined;\n return member ? stableMemberUse(access, member) : false;\n}\n\nfunction commonJsExportUse(node: ts.Node): boolean {\n const parent = node.parent;\n return Boolean(parent && ts.isBinaryExpression(parent)\n && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken\n && parent.right === node\n && isUnshadowedCommonJsExportExpression(parent.left)\n && ts.isExpressionStatement(parent.parent)\n && ts.isSourceFile(parent.parent.parent));\n}\n\nfunction esmExportUse(node: ts.Node): boolean {\n const parent = node.parent;\n return Boolean(parent && (ts.isExportSpecifier(parent)\n || (ts.isExportAssignment(parent) && parent.expression === node)));\n}\n\nfunction inertUnaryUse(node: ts.Node): boolean {\n const parent = node.parent;\n return Boolean(parent && ((ts.isVoidExpression(parent)\n || ts.isTypeOfExpression(parent)) && parent.expression === node));\n}\n\nfunction safeReferenceUse(\n node: ts.Identifier,\n declaration: ts.Identifier,\n): boolean {\n const use = transparentUse(node);\n return memberReceiverUse(use, declaration)\n || commonJsExportUse(use)\n || esmExportUse(use)\n || inertUnaryUse(use);\n}\n\nexport function stableLocalValueReference(\n source: ts.SourceFile,\n declaration: ts.Identifier,\n): boolean {\n const start = declaration.getStart(source);\n const end = declaration.getEnd();\n let stable = true;\n const visit = (node: ts.Node): void => {\n if (!stable) return;\n if (ts.isIdentifier(node) && node !== declaration\n && identifierMatchesDeclaration(node, start, end)\n && !safeReferenceUse(node, declaration)) {\n stable = false;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return stable;\n}\n","import { posix } from 'node:path';\nimport {\n moduleInfoMap,\n PACKAGE_PUBLIC_SURFACE_RECORD_CAP,\n PACKAGE_PUBLIC_SURFACE_SCHEMA,\n resolveModule,\n} from './003-package-public-surface.js';\nimport type {\n ModuleInfo,\n ModuleResolution,\n PackagePublicEntry,\n PackagePublicScope,\n PackagePublicSurfaceAnalysis,\n PackagePublicSurfaceFact,\n PackagePublicSurfaceStatus,\n PackageSourceModule,\n ResolvedExport,\n SymbolPublicSurfaceEvidence,\n} from './003-package-public-surface.js';\nimport type { PackageEntrypointManifest } from './package-json-parser.js';\n\ninterface EntryResolution {\n entries: PackagePublicEntry[];\n status: 'complete' | 'incomplete' | 'unsupported';\n reason?: string;\n}\n\ninterface RetainedSurface {\n entries: PackagePublicEntry[];\n scopes: PackagePublicScope[];\n total: number;\n shown: number;\n}\n\nfunction compareBinary(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction targetKey(target: SymbolPublicSurfaceEvidence['target']): string {\n return [\n target.sourceFile, target.startOffset, target.endOffset,\n target.kind, target.qualifiedName,\n ].join('\\0');\n}\n\nfunction canonicalModulePath(sourceFile: string): string {\n return sourceFile.replace(/\\\\/g, '/').replace(/\\.(?:d\\.)?(?:ts|js)$/, '');\n}\n\nfunction validEntry(entry: string): boolean {\n return entry === '.' || (\n entry.startsWith('./') && !entry.includes('*')\n && !entry.split('/').some((part) => part === '..')\n );\n}\n\nfunction entryModuleCandidates(\n specifier: string,\n infos: Map<string, ModuleInfo[]>,\n): string[] {\n if (!specifier.startsWith('./') || specifier.includes('*')) return [];\n const normalized = posix.normalize(specifier.slice(2));\n if (!normalized || normalized === '..' || normalized.startsWith('../'))\n return [];\n const base = canonicalModulePath(normalized);\n const hasExtension = /\\.(?:d\\.)?(?:ts|js)$/.test(normalized);\n const candidates = hasExtension ? [base] : [base, `${base}/index`];\n return candidates.filter((item, index, values) => {\n const rows = infos.get(item) ?? [];\n return values.indexOf(item) === index && rows.length === 1\n && (!hasExtension || rows[0]?.sourceFile === normalized);\n });\n}\n\nfunction resolveEntry(\n entry: string,\n target: string,\n infos: Map<string, ModuleInfo[]>,\n): PackagePublicEntry | undefined {\n const candidates = entryModuleCandidates(target, infos);\n return candidates.length === 1 && candidates[0]\n ? { entry, modulePath: candidates[0] }\n : undefined;\n}\n\nfunction resolvedEntryPairs(\n pairs: Array<[string, string]>,\n infos: Map<string, ModuleInfo[]>,\n): EntryResolution {\n const entries: PackagePublicEntry[] = [];\n pairs.sort((left, right) => compareBinary(left[0], right[0]));\n for (const [entry, target] of pairs) {\n const resolved = resolveEntry(entry, target, infos);\n if (!resolved) return {\n entries: [], status: 'incomplete',\n reason: 'public_surface_entry_target_not_indexed',\n };\n entries.push(resolved);\n }\n return { entries, status: 'complete' };\n}\n\nfunction explicitExportEntries(\n manifest: PackageEntrypointManifest,\n infos: Map<string, ModuleInfo[]>,\n): EntryResolution {\n const value = manifest.exportsValue;\n const pairs: Array<[string, string]> = [];\n if (typeof value === 'string') pairs.push(['.', value]);\n else if (value && typeof value === 'object' && !Array.isArray(value)) {\n for (const [entry, target] of Object.entries(value)) {\n if (!validEntry(entry) || typeof target !== 'string'\n || target.includes('*')) return {\n entries: [], status: 'unsupported',\n reason: 'unsupported_exports_map_shape',\n };\n pairs.push([entry, target]);\n }\n } else return {\n entries: [], status: 'unsupported',\n reason: 'unsupported_exports_map_shape',\n };\n return resolvedEntryPairs(pairs, infos);\n}\n\nfunction hasUnsupportedLegacyEntrypoint(\n manifest: PackageEntrypointManifest,\n): boolean {\n return (manifest.mainPresent && !manifest.main)\n || (manifest.modulePresent && !manifest.module);\n}\n\nfunction legacyRootEntry(\n manifest: PackageEntrypointManifest,\n infos: Map<string, ModuleInfo[]>,\n): EntryResolution {\n if (hasUnsupportedLegacyEntrypoint(manifest)) return {\n entries: [], status: 'unsupported',\n reason: 'unsupported_package_entrypoint_shape',\n };\n const targets = [manifest.module, manifest.main]\n .filter((value): value is string => typeof value === 'string');\n if (targets.length === 0) return (infos.get('index') ?? []).length === 1\n ? { entries: [{ entry: '.', modulePath: 'index' }], status: 'complete' }\n : { entries: [], status: 'complete' };\n const resolved = targets.map((target) => resolveEntry('.', target, infos));\n const paths = new Set(resolved.flatMap((item) =>\n item ? [item.modulePath] : []));\n if (resolved.some((item) => !item) || paths.size !== 1) return {\n entries: [], status: 'incomplete',\n reason: paths.size > 1\n ? 'public_surface_main_module_conflict'\n : 'public_surface_entry_target_not_indexed',\n };\n const [modulePath] = paths;\n return modulePath\n ? { entries: [{ entry: '.', modulePath }], status: 'complete' }\n : { entries: [], status: 'complete' };\n}\n\nfunction legacyPhysicalEntries(\n infos: Map<string, ModuleInfo[]>,\n): PackagePublicEntry[] {\n const byEntry = new Map<string, Set<string>>();\n for (const [modulePath, rows] of infos) {\n if (rows.length !== 1) continue;\n const entries = [`./${modulePath}`];\n if (modulePath.endsWith('/index'))\n entries.push(`./${modulePath.slice(0, -'/index'.length)}`);\n for (const entry of entries) {\n const paths = byEntry.get(entry) ?? new Set<string>();\n paths.add(modulePath);\n byEntry.set(entry, paths);\n }\n }\n return [...byEntry.entries()].flatMap(([entry, paths]) =>\n paths.size === 1 ? [{ entry, modulePath: [...paths][0] ?? '' }] : [])\n .filter((item) => item.modulePath)\n .sort((left, right) => compareBinary(left.entry, right.entry));\n}\n\nfunction entryResolution(\n manifest: PackageEntrypointManifest,\n infos: Map<string, ModuleInfo[]>,\n): EntryResolution {\n if (manifest.exportsPresent) return explicitExportEntries(manifest, infos);\n const root = legacyRootEntry(manifest, infos);\n if (root.status !== 'complete') return root;\n const byEntry = new Map(\n [...root.entries, ...legacyPhysicalEntries(infos)]\n .map((item) => [item.entry, item]),\n );\n return {\n entries: [...byEntry.values()].sort((left, right) =>\n compareBinary(left.entry, right.entry)),\n status: 'complete',\n };\n}\n\nfunction scopeFromExport(\n entry: PackagePublicEntry,\n publicName: string,\n value: ResolvedExport,\n): PackagePublicScope {\n const eligible = value.targets.filter((item) =>\n item.bodyEligibility.eligible);\n const candidateCount = value.targets.length + value.declarationOnlyCount;\n return {\n ...entry, publicName, candidateCount,\n eligibleCandidateCount: eligible.length,\n selectedCandidateCount: eligible.length === 1 ? 1 : 0,\n candidateSetComplete: true, targets: value.targets,\n };\n}\n\nfunction allScopes(\n entries: readonly PackagePublicEntry[],\n infos: Map<string, ModuleInfo[]>,\n): { scopes: PackagePublicScope[]; reason?: string } {\n const memo = new Map<string, ModuleResolution>();\n const scopes: PackagePublicScope[] = [];\n for (const entry of entries) {\n const resolved = resolveModule(entry.modulePath, infos, memo);\n if (!resolved.complete) return { scopes: [], reason: resolved.reason };\n for (const [publicName, value] of resolved.exports)\n scopes.push(scopeFromExport(entry, publicName, value));\n }\n scopes.sort((left, right) => compareBinary(\n `${left.entry}\\0${left.publicName}`,\n `${right.entry}\\0${right.publicName}`,\n ));\n return { scopes };\n}\n\nfunction retainSurface(\n entries: readonly PackagePublicEntry[],\n scopes: readonly PackagePublicScope[],\n): RetainedSurface {\n let remaining = PACKAGE_PUBLIC_SURFACE_RECORD_CAP;\n const retainedEntries = entries.slice(0, remaining);\n remaining -= retainedEntries.length;\n const entryNames = new Set(retainedEntries.map((item) => item.entry));\n const retainedScopes: PackagePublicScope[] = [];\n for (const scope of scopes) {\n const cost = 1 + scope.targets.length;\n if (!entryNames.has(scope.entry) || cost > remaining) continue;\n retainedScopes.push(scope);\n remaining -= cost;\n }\n const total = entries.length + scopes.reduce(\n (sum, scope) => sum + 1 + scope.targets.length, 0,\n );\n return {\n entries: retainedEntries, scopes: retainedScopes, total,\n shown: PACKAGE_PUBLIC_SURFACE_RECORD_CAP - remaining,\n };\n}\n\nfunction symbolEvidence(\n scopes: readonly PackagePublicScope[],\n): SymbolPublicSurfaceEvidence[] {\n const result = new Map<string, SymbolPublicSurfaceEvidence>();\n for (const scope of scopes) for (const target of scope.targets) {\n const key = targetKey(target);\n const current = result.get(key) ?? {\n target,\n exposures: [],\n exposureTotal: 0,\n shownExposureCount: 0,\n omittedExposureCount: 0,\n };\n current.exposures.push({\n entry: scope.entry, modulePath: scope.modulePath,\n publicName: scope.publicName,\n });\n result.set(key, current);\n }\n return [...result.values()].map((item) => {\n const exposures = item.exposures.sort((left, right) => compareBinary(\n `${left.entry}\\0${left.publicName}`,\n `${right.entry}\\0${right.publicName}`,\n ));\n return {\n ...item,\n exposures,\n exposureTotal: exposures.length,\n shownExposureCount: exposures.length,\n omittedExposureCount: 0,\n };\n }).sort((left, right) =>\n compareBinary(targetKey(left.target), targetKey(right.target)));\n}\n\nfunction baseSurface(\n packageName: string | undefined,\n manifest: PackageEntrypointManifest,\n status: PackagePublicSurfaceStatus,\n reason: string | null,\n): PackagePublicSurfaceFact {\n return {\n schema: PACKAGE_PUBLIC_SURFACE_SCHEMA, status, reason,\n recordCap: PACKAGE_PUBLIC_SURFACE_RECORD_CAP,\n total: 0, shown: 0, omitted: 0, packageName: packageName ?? null,\n exportsPresent: manifest.exportsPresent,\n exportsAuthoritative: manifest.exportsPresent,\n main: manifest.main, module: manifest.module, entries: [], scopes: [],\n };\n}\n\nfunction moduleFailureStatus(\n reason: string,\n): Extract<PackagePublicSurfaceStatus, 'incomplete' | 'unsupported'> {\n return reason.startsWith('unsupported_')\n || reason === 'anonymous_default_export_without_symbol_identity'\n ? 'unsupported'\n : 'incomplete';\n}\n\nexport function analyzePackagePublicSurface(\n packageName: string | undefined,\n manifest: PackageEntrypointManifest,\n modules: readonly PackageSourceModule[],\n): PackagePublicSurfaceAnalysis {\n if (!packageName) return {\n surface: baseSurface(packageName, manifest, 'not_applicable', null),\n symbols: [],\n };\n const infos = moduleInfoMap(modules);\n const entries = entryResolution(manifest, infos);\n if (entries.status !== 'complete') return {\n surface: baseSurface(\n packageName, manifest, entries.status, entries.reason ?? null,\n ),\n symbols: [],\n };\n const resolved = allScopes(entries.entries, infos);\n if (resolved.reason) return {\n surface: baseSurface(\n packageName, manifest,\n moduleFailureStatus(resolved.reason), resolved.reason,\n ),\n symbols: [],\n };\n const retained = retainSurface(entries.entries, resolved.scopes);\n const surface = baseSurface(packageName, manifest, 'complete', null);\n Object.assign(surface, {\n entries: retained.entries, scopes: retained.scopes,\n total: retained.total, shown: retained.shown,\n omitted: Math.max(0, retained.total - retained.shown),\n });\n return { surface, symbols: symbolEvidence(retained.scopes) };\n}\n","import {\n PACKAGE_PUBLIC_SURFACE_RECORD_CAP,\n PACKAGE_PUBLIC_SURFACE_SCHEMA,\n} from './003-package-public-surface.js';\nimport type {\n ExecutableBodyEligibility,\n PackagePublicEntry,\n PackagePublicScope,\n PackagePublicSurfaceFact,\n PublicSurfaceTarget,\n} from './003-package-public-surface.js';\nimport {\n packageModuleRequest,\n type SymbolImportBindingKind,\n type SymbolImportReference,\n type SymbolImportReferenceShape,\n} from './002-symbol-import-bindings.js';\n\nconst bindingKinds = new Set<SymbolImportBindingKind>([\n 'esm_named', 'esm_default', 'esm_namespace',\n 'cjs_destructured', 'cjs_namespace',\n]);\nconst referenceShapes = new Set<SymbolImportReferenceShape>([\n 'identifier', 'namespace_member', 'static_member', 'default_member',\n]);\nconst bodyReasons = new Set([\n 'body_present', 'declaration_only', 'ambient_declaration',\n 'abstract_bodyless', 'overload_signature',\n]);\nconst surfaceReasons = new Set([\n 'anonymous_default_export_without_symbol_identity',\n 'unsupported_namespace_reexport',\n 'unsupported_export_declaration',\n 'unsupported_export_assignment',\n 'unsupported_commonjs_export_shape',\n 'unsupported_mutable_export_binding',\n 'unsupported_external_reexport',\n 'unsupported_exports_map_shape',\n 'unsupported_package_entrypoint_shape',\n 'public_surface_entry_target_not_indexed',\n 'public_surface_main_module_conflict',\n 'public_surface_module_resolution_ambiguous',\n 'public_surface_module_not_indexed',\n 'public_surface_reexport_cycle',\n 'public_surface_reexport_depth_exceeded',\n]);\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction nonEmpty(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction nullableString(value: unknown): value is string | null {\n return value === null || typeof value === 'string';\n}\n\nfunction nonNegativeInteger(value: unknown): value is number {\n return Number.isInteger(value) && Number(value) >= 0;\n}\n\nfunction all(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nfunction bindingShapeValid(value: Record<string, unknown>): boolean {\n const kind = value.bindingKind as SymbolImportBindingKind;\n const imported = value.importedName;\n if (!all([\n bindingKinds.has(kind),\n nonEmpty(value.localName),\n typeof value.typeOnly === 'boolean',\n ])) return false;\n if (kind === 'esm_namespace' || kind === 'cjs_namespace')\n return imported === null;\n if (!nonEmpty(imported)) return false;\n return kind !== 'esm_default' || imported === 'default';\n}\n\nfunction memberReferenceValid(\n value: Record<string, unknown>,\n shape: SymbolImportReferenceShape,\n): boolean {\n const kind = value.bindingKind as SymbolImportBindingKind;\n const member = value.referencedMemberName;\n if (!nonEmpty(member)) return false;\n if (shape === 'namespace_member') return all([\n kind === 'esm_namespace' || kind === 'cjs_namespace',\n value.requestedPublicName === member,\n ]);\n if (!nonEmpty(value.importedName)) return false;\n return all([\n value.requestedPublicName === `${value.importedName}.${member}`,\n shape !== 'default_member' || kind === 'esm_default',\n ]);\n}\n\nfunction referenceShapeValid(value: Record<string, unknown>): boolean {\n const shape = value.referenceShape as SymbolImportReferenceShape;\n if (!referenceShapes.has(shape)\n || !nonEmpty(value.requestedPublicName)) return false;\n return shape === 'identifier'\n ? all([\n value.referencedMemberName === null,\n nonEmpty(value.importedName),\n value.requestedPublicName === value.importedName,\n ])\n : memberReferenceValid(value, shape);\n}\n\nfunction importReferenceBaseValid(\n item: Record<string, unknown>,\n): boolean {\n return all([\n item.version === 1,\n bindingShapeValid(item),\n referenceShapeValid(item),\n nonEmpty(item.rawModuleSpecifier),\n nonNegativeInteger(item.bindingSiteStartOffset),\n nonNegativeInteger(item.bindingSiteEndOffset),\n Number(item.bindingSiteEndOffset)\n > Number(item.bindingSiteStartOffset),\n ]);\n}\n\nexport function parsePackageImportReference(\n value: unknown,\n): SymbolImportReference | undefined {\n const item = record(value);\n if (!item || !importReferenceBaseValid(item)\n || item.moduleKind !== 'package'\n || !nonEmpty(item.requestedPackageName)\n || !nonEmpty(item.requestedModuleSubpath)) return undefined;\n const specifier = item.rawModuleSpecifier;\n if (!nonEmpty(specifier)) return undefined;\n const request = packageModuleRequest(specifier);\n if (!request || request.packageName !== item.requestedPackageName\n || request.moduleSubpath !== item.requestedModuleSubpath) return undefined;\n return item as unknown as SymbolImportReference;\n}\n\nexport function parseRelativeImportReference(\n value: unknown,\n): SymbolImportReference | undefined {\n const item = record(value);\n if (!item || !importReferenceBaseValid(item)) return undefined;\n if (!all([\n item.moduleKind === 'relative',\n item.requestedPackageName === null,\n item.requestedModuleSubpath === null,\n String(item.rawModuleSpecifier).startsWith('.'),\n ])) return undefined;\n return item as unknown as SymbolImportReference;\n}\n\nfunction validBody(value: unknown): value is ExecutableBodyEligibility {\n const item = record(value);\n if (!item || typeof item.eligible !== 'boolean'\n || typeof item.reason !== 'string' || !bodyReasons.has(item.reason))\n return false;\n return item.eligible === (item.reason === 'body_present');\n}\n\nfunction validTarget(value: unknown): value is PublicSurfaceTarget {\n const item = record(value);\n return Boolean(item && nonEmpty(item.sourceFile)\n && ['function', 'method', 'object_method'].includes(String(item.kind))\n && nonEmpty(item.localName) && nonEmpty(item.qualifiedName)\n && nonNegativeInteger(item.startOffset)\n && nonNegativeInteger(item.endOffset)\n && Number(item.endOffset) > Number(item.startOffset)\n && validBody(item.bodyEligibility));\n}\n\nfunction targetIdentity(value: PublicSurfaceTarget): string {\n return [\n value.sourceFile, value.kind, value.qualifiedName,\n value.startOffset, value.endOffset,\n ].join('\\0');\n}\n\nfunction validEntry(value: unknown): value is PackagePublicEntry {\n const item = record(value);\n return Boolean(item && nonEmpty(item.entry) && nonEmpty(item.modulePath)\n && (item.entry === '.' || String(item.entry).startsWith('./')));\n}\n\nfunction validScope(value: unknown): value is PackagePublicScope {\n const item = record(value);\n if (!item || !all([\n validEntry(item),\n nonEmpty(item.publicName),\n nonNegativeInteger(item.candidateCount),\n nonNegativeInteger(item.eligibleCandidateCount),\n [0, 1].includes(Number(item.selectedCandidateCount)),\n item.candidateSetComplete === true,\n Array.isArray(item.targets),\n ])) return false;\n if (!Array.isArray(item.targets) || !item.targets.every(validTarget))\n return false;\n const targetKeys = new Set(item.targets.map(targetIdentity));\n if (targetKeys.size !== item.targets.length) return false;\n const eligible = item.targets.filter((target) =>\n target.bodyEligibility.eligible).length;\n return all([\n Number(item.candidateCount) >= item.targets.length,\n item.eligibleCandidateCount === eligible,\n item.selectedCandidateCount === (eligible === 1 ? 1 : 0),\n ]);\n}\n\nfunction statusMatrixValid(\n value: Record<string, unknown>,\n expectedPackageName: string | null,\n): boolean {\n const status = value.status;\n const reason = value.reason;\n if (!['complete', 'incomplete', 'unsupported', 'not_applicable']\n .includes(String(status))) return false;\n if (status === 'complete')\n return expectedPackageName !== null && reason === null;\n if (status === 'not_applicable') return all([\n expectedPackageName === null,\n reason === null,\n value.total === 0,\n value.shown === 0,\n value.omitted === 0,\n ]);\n return expectedPackageName !== null\n && typeof reason === 'string' && surfaceReasons.has(reason);\n}\n\nfunction surfaceCountsValid(value: Record<string, unknown>): boolean {\n if (!nonNegativeInteger(value.total) || !nonNegativeInteger(value.shown)\n || !nonNegativeInteger(value.omitted)\n || Number(value.shown) + Number(value.omitted) !== Number(value.total))\n return false;\n if (!Array.isArray(value.entries) || !Array.isArray(value.scopes)\n || !value.scopes.every((scope) => {\n const item = record(scope);\n return item && Array.isArray(item.targets);\n })) return false;\n const entries = value.entries;\n const scopes = value.scopes as Array<Record<string, unknown>>;\n const represented = entries.length + scopes.reduce(\n (sum, scope) => sum + 1 + (scope.targets as unknown[]).length, 0,\n );\n return represented === value.shown\n && Number(value.total) >= represented\n && Number(value.shown) <= PACKAGE_PUBLIC_SURFACE_RECORD_CAP;\n}\n\nfunction entriesAndScopesValid(value: Record<string, unknown>): boolean {\n if (!Array.isArray(value.entries) || !Array.isArray(value.scopes))\n return false;\n if (!value.entries.every(validEntry) || !value.scopes.every(validScope))\n return false;\n const entries = new Map((value.entries as PackagePublicEntry[])\n .map((entry) => [entry.entry, entry.modulePath]));\n const entryKeys = new Set((value.entries as PackagePublicEntry[])\n .map((entry) => `${entry.entry}\\0${entry.modulePath}`));\n if (entryKeys.size !== value.entries.length) return false;\n const scopeKeys = new Set<string>();\n for (const scope of value.scopes as PackagePublicScope[]) {\n if (entries.get(scope.entry) !== scope.modulePath) return false;\n scopeKeys.add(`${scope.entry}\\0${scope.publicName}`);\n }\n return scopeKeys.size === value.scopes.length;\n}\n\nfunction surfaceBaseValid(\n item: Record<string, unknown>,\n expectedPackageName: string | null,\n): boolean {\n return all([\n item.schema === PACKAGE_PUBLIC_SURFACE_SCHEMA,\n item.recordCap === PACKAGE_PUBLIC_SURFACE_RECORD_CAP,\n item.packageName === expectedPackageName,\n typeof item.exportsPresent === 'boolean',\n item.exportsAuthoritative === item.exportsPresent,\n nullableString(item.main),\n nullableString(item.module),\n entriesAndScopesValid(item),\n surfaceCountsValid(item),\n statusMatrixValid(item, expectedPackageName),\n ]);\n}\n\nfunction nonCompleteSurfaceEmpty(item: Record<string, unknown>): boolean {\n if (item.status === 'complete') return true;\n return Array.isArray(item.entries) && item.entries.length === 0\n && Array.isArray(item.scopes) && item.scopes.length === 0;\n}\n\nexport function parsePackagePublicSurfaceFact(\n value: unknown,\n expectedPackageName: string | null,\n): PackagePublicSurfaceFact | undefined {\n const item = record(value);\n if (!item || !surfaceBaseValid(item, expectedPackageName)\n || !nonCompleteSurfaceEmpty(item)) return undefined;\n return item as unknown as PackagePublicSurfaceFact;\n}\n","import type { Db } from '../db/connection.js';\nimport type {\n PackagePublicScope,\n PackagePublicSurfaceFact,\n PublicSurfaceTarget,\n} from '../parsers/003-package-public-surface.js';\nimport type {\n SymbolImportReference,\n} from '../parsers/002-symbol-import-bindings.js';\nimport {\n parsePackageImportReference,\n parsePackagePublicSurfaceFact,\n} from '../parsers/012-package-fact-contract.js';\n\nexport interface PackageSymbolLinkSummary {\n resolved: number;\n ambiguous: number;\n unresolved: number;\n}\n\ninterface PackageCallRow {\n id: number;\n callerRepoId: number;\n binding: SymbolImportReference;\n evidence: Record<string, unknown>;\n}\n\ninterface PackageRepository {\n id: number;\n surface: PackagePublicSurfaceFact;\n}\n\nexport interface PackageCallResolution {\n id: number | null;\n status: 'resolved' | 'ambiguous' | 'unresolved';\n reason: string | null;\n strategy: string;\n candidateCount: number;\n eligibleCandidateCount: number;\n selectedCandidateCount: 0 | 1;\n candidateSetComplete: boolean;\n resolvedModulePath?: string;\n targetRepoId?: number;\n repositoryCandidateIds: number[];\n publicSurface?: {\n total: number;\n shown: number;\n omitted: number;\n };\n}\n\nexport interface PackageResolutionInput {\n callId: number;\n binding: SymbolImportReference;\n}\n\nexport interface PackageResolutionResult extends PackageCallResolution {\n callId: number;\n}\n\nconst REPOSITORY_REFERENCE_CAP = 5;\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction importBinding(\n evidence: Record<string, unknown>,\n): SymbolImportReference | undefined {\n return parsePackageImportReference(evidence.importBinding);\n}\n\nfunction packageCallRows(db: Db, workspaceId: number): PackageCallRow[] {\n const rows = db.prepare(`SELECT sc.id,sc.repo_id callerRepoId,\n sc.evidence_json evidenceJson FROM symbol_calls sc\n JOIN repositories r ON r.id=sc.repo_id\n WHERE r.workspace_id=?\n AND json_extract(sc.evidence_json,'$.importBinding.moduleKind')='package'\n ORDER BY sc.id`).all(workspaceId);\n return rows.flatMap((row) => {\n const evidence = parseRecord(row.evidenceJson);\n const binding = evidence ? importBinding(evidence) : undefined;\n return typeof row.id === 'number' && typeof row.callerRepoId === 'number'\n && evidence && binding\n ? [{ id: row.id, callerRepoId: row.callerRepoId, evidence, binding }]\n : [];\n });\n}\n\nfunction parseSurface(\n value: unknown,\n packageName: string,\n): PackagePublicSurfaceFact | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return parsePackagePublicSurfaceFact(\n JSON.parse(value) as unknown,\n packageName,\n );\n } catch {\n return undefined;\n }\n}\n\nfunction repositoriesByPackage(\n db: Db,\n workspaceId: number,\n): Map<string, PackageRepository[]> {\n const rows = db.prepare(`SELECT id,package_name packageName,\n package_public_surface_json surfaceJson FROM repositories\n WHERE workspace_id=? AND package_name IS NOT NULL\n ORDER BY package_name COLLATE BINARY,id`).all(workspaceId);\n const result = new Map<string, PackageRepository[]>();\n for (const row of rows) {\n if (typeof row.id !== 'number' || typeof row.packageName !== 'string')\n continue;\n const surface = parseSurface(row.surfaceJson, row.packageName);\n if (!surface) continue;\n const repositories = result.get(row.packageName) ?? [];\n repositories.push({ id: row.id, surface });\n result.set(row.packageName, repositories);\n }\n return result;\n}\n\nfunction unresolved(\n reason: string,\n options: Partial<PackageCallResolution> = {},\n): PackageCallResolution {\n return {\n id: null,\n status: 'unresolved',\n reason,\n strategy: 'package_public_surface_unresolved',\n candidateCount: 0,\n eligibleCandidateCount: 0,\n selectedCandidateCount: 0,\n candidateSetComplete: true,\n repositoryCandidateIds: [],\n ...options,\n };\n}\n\nfunction repositoryScopeResolution(\n call: PackageCallRow,\n repositories: Map<string, PackageRepository[]>,\n): PackageRepository | PackageCallResolution {\n const matches = repositories.get(call.binding.requestedPackageName ?? '')\n ?? [];\n if (matches.length === 1 && matches[0]) return matches[0];\n const ids = matches.map((item) => item.id);\n if (matches.length > 1) return unresolved(\n 'package_repository_scope_ambiguous',\n {\n candidateSetComplete: false,\n candidateCount: matches.length,\n repositoryCandidateIds: ids,\n },\n );\n return unresolved('package_repository_not_indexed');\n}\n\nfunction publicScope(\n surface: PackagePublicSurfaceFact,\n binding: SymbolImportReference,\n): PackagePublicScope | PackageCallResolution {\n const surfaceCounts = {\n total: surface.total,\n shown: surface.shown,\n omitted: surface.omitted,\n };\n if (surface.status !== 'complete') return unresolved(\n surface.status === 'unsupported'\n ? 'package_public_surface_unsupported'\n : 'public_surface_evidence_incomplete',\n { candidateSetComplete: false, publicSurface: surfaceCounts },\n );\n if (binding.typeOnly) return unresolved(\n 'package_binding_type_only',\n { publicSurface: surfaceCounts },\n );\n const matches = surface.scopes.filter((scope) =>\n scope.entry === binding.requestedModuleSubpath\n && scope.publicName === binding.requestedPublicName);\n if (matches.length === 1 && matches[0]) return matches[0];\n if (matches.length > 1) return unresolved(\n 'package_public_scope_duplicate',\n {\n candidateSetComplete: false,\n candidateCount: matches.reduce(\n (sum, scope) => sum + scope.candidateCount, 0,\n ),\n publicSurface: surfaceCounts,\n },\n );\n return unresolved(\n surface.omitted > 0\n ? 'public_surface_evidence_incomplete'\n : 'package_public_name_not_exposed',\n {\n candidateSetComplete: surface.omitted === 0,\n publicSurface: surfaceCounts,\n },\n );\n}\n\nfunction symbolEvidenceMatches(\n evidenceJson: unknown,\n target: PublicSurfaceTarget,\n scope: PackagePublicScope,\n): boolean {\n const evidence = parseRecord(evidenceJson);\n if (!evidence) return false;\n const surface = record(evidence.packagePublicSurface);\n if (!surface) return false;\n const body = record(surface.bodyEligibility);\n const exposures = surface.exposures;\n if (!body || !Array.isArray(exposures)) return false;\n const exactProof = [\n body.eligible === true,\n body.reason === target.bodyEligibility.reason,\n surface.recordCap === 256,\n surface.exposureTotal === exposures.length,\n surface.shownExposureCount === exposures.length,\n surface.omittedExposureCount === 0,\n ];\n if (exactProof.includes(false)) return false;\n return exposures.some((item) => {\n const exposure = record(item);\n return exposure?.entry === scope.entry\n && exposure.modulePath === scope.modulePath\n && exposure.publicName === scope.publicName;\n });\n}\n\nfunction targetSymbolIds(\n db: Db,\n repositoryId: number,\n scope: PackagePublicScope,\n): number[] {\n return scope.targets.flatMap((target) => {\n if (!target.bodyEligibility.eligible) return [];\n const rows = db.prepare(`SELECT id,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file=? AND kind=? AND qualified_name=?\n AND start_offset=? AND end_offset=?\n ORDER BY id`).all(\n repositoryId,\n target.sourceFile,\n target.kind,\n target.qualifiedName,\n target.startOffset,\n target.endOffset,\n );\n return rows.flatMap((row) =>\n typeof row.id === 'number'\n && symbolEvidenceMatches(row.evidenceJson, target, scope)\n ? [row.id] : []);\n });\n}\n\nfunction scopeResolution(\n db: Db,\n repository: PackageRepository,\n scope: PackagePublicScope,\n): PackageCallResolution {\n const ids = [...new Set(targetSymbolIds(db, repository.id, scope))];\n if (ids.length !== scope.eligibleCandidateCount) return unresolved(\n 'public_surface_evidence_incomplete',\n {\n candidateCount: scope.candidateCount,\n eligibleCandidateCount: ids.length,\n candidateSetComplete: false,\n resolvedModulePath: scope.modulePath,\n targetRepoId: repository.id,\n repositoryCandidateIds: [repository.id],\n },\n );\n const base = {\n candidateCount: scope.candidateCount,\n eligibleCandidateCount: scope.eligibleCandidateCount,\n selectedCandidateCount: 0 as const,\n candidateSetComplete: scope.candidateSetComplete,\n resolvedModulePath: scope.modulePath,\n targetRepoId: repository.id,\n repositoryCandidateIds: [repository.id],\n };\n if (ids.length === 1 && ids[0] !== undefined) return {\n ...base,\n id: ids[0],\n status: 'resolved',\n reason: null,\n strategy: 'package_public_surface_exact',\n selectedCandidateCount: 1,\n };\n if (ids.length > 1) return {\n ...base,\n id: null,\n status: 'ambiguous',\n reason: 'package_public_target_ambiguous',\n strategy: 'package_public_surface_ambiguous',\n };\n return unresolved(\n scope.candidateCount > 0 && scope.eligibleCandidateCount === 0\n ? 'public_symbol_has_no_executable_body'\n : 'package_public_name_not_exposed',\n base,\n );\n}\n\nfunction resolvePackageCall(\n db: Db,\n call: PackageCallRow,\n repositories: Map<string, PackageRepository[]>,\n): PackageCallResolution {\n const repository = repositoryScopeResolution(call, repositories);\n if ('status' in repository) return repository;\n const scope = publicScope(repository.surface, call.binding);\n if ('status' in scope) return {\n ...scope,\n targetRepoId: repository.id,\n repositoryCandidateIds: [repository.id],\n };\n return scopeResolution(db, repository, scope);\n}\n\nexport function expectedPackageImportResolutions(\n db: Db,\n workspaceId: number,\n inputs: readonly PackageResolutionInput[],\n): PackageResolutionResult[] {\n const repositories = repositoriesByPackage(db, workspaceId);\n return inputs.map((input) => ({\n callId: input.callId,\n ...resolvePackageCall(\n db,\n {\n id: input.callId,\n callerRepoId: 0,\n binding: input.binding,\n evidence: {},\n },\n repositories,\n ),\n }));\n}\n\nconst resolverEvidenceKeys = new Set([\n 'candidateStrategy', 'candidateCount', 'eligibleCandidateCount',\n 'selectedCandidateCount', 'candidateSetComplete', 'resolvedModulePath',\n 'resolvedTargetRepositoryId', 'unresolvedReason',\n 'targetRepositoryCandidateCount', 'targetRepositoryCandidates',\n 'shownTargetRepositoryCandidateCount',\n 'omittedTargetRepositoryCandidateCount', 'publicSurface',\n]);\n\nfunction parserEvidence(\n evidence: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(Object.entries(evidence).filter(\n ([key]) => !resolverEvidenceKeys.has(key),\n ));\n}\n\nfunction resolutionEvidence(\n call: PackageCallRow,\n resolution: PackageCallResolution,\n): string {\n const ids = resolution.repositoryCandidateIds\n .slice(0, REPOSITORY_REFERENCE_CAP);\n return JSON.stringify({\n ...parserEvidence(call.evidence),\n candidateStrategy: resolution.strategy,\n candidateCount: resolution.candidateCount,\n eligibleCandidateCount: resolution.eligibleCandidateCount,\n selectedCandidateCount: resolution.selectedCandidateCount,\n candidateSetComplete: resolution.candidateSetComplete,\n unresolvedReason: resolution.reason,\n ...(resolution.resolvedModulePath\n ? { resolvedModulePath: resolution.resolvedModulePath } : {}),\n ...(resolution.targetRepoId\n ? { resolvedTargetRepositoryId: resolution.targetRepoId } : {}),\n targetRepositoryCandidateCount:\n resolution.repositoryCandidateIds.length,\n targetRepositoryCandidates: ids,\n shownTargetRepositoryCandidateCount: ids.length,\n omittedTargetRepositoryCandidateCount:\n resolution.repositoryCandidateIds.length - ids.length,\n ...(resolution.publicSurface\n ? { publicSurface: resolution.publicSurface } : {}),\n });\n}\n\nexport function linkPackageImportSymbolCalls(\n db: Db,\n workspaceId: number,\n): PackageSymbolLinkSummary {\n const repositories = repositoriesByPackage(db, workspaceId);\n const update = db.prepare(`UPDATE symbol_calls SET callee_symbol_id=?,\n status=?,unresolved_reason=?,evidence_json=? WHERE id=?`);\n const summary: PackageSymbolLinkSummary = {\n resolved: 0,\n ambiguous: 0,\n unresolved: 0,\n };\n for (const call of packageCallRows(db, workspaceId)) {\n const resolution = resolvePackageCall(db, call, repositories);\n update.run(\n resolution.id,\n resolution.status,\n resolution.reason,\n resolutionEvidence(call, resolution),\n call.id,\n );\n summary[resolution.status] += 1;\n }\n return summary;\n}\n","import type { Db } from '../db/connection.js';\n\nexport interface SubscriptionHandlerLinkSummary {\n edgeCount: number;\n resolvedCount: number;\n ambiguousCount: number;\n unresolvedCount: number;\n missingAssociationCount: number;\n}\n\ninterface SubscriptionRow {\n id: number;\n workspaceId: number;\n repoId: number;\n repoName: string;\n sourceSymbolId?: number | null;\n eventName: string;\n sourceFile: string;\n sourceLine: number;\n startOffset?: number | null;\n endOffset?: number | null;\n confidence: number;\n}\n\ninterface HandlerCallRow {\n id: number;\n callerSymbolId: number;\n calleeSymbolId?: number | null;\n status: string;\n unresolvedReason?: string | null;\n confidence: number;\n sourceLine: number;\n factOrigin?: string | null;\n wrapperFunction?: string | null;\n strategy?: string | null;\n candidateCount?: number | null;\n targetSourceFile?: string | null;\n targetSourceLine?: number | null;\n targetWorkspaceId?: number | null;\n}\n\ninterface HandlerAssociation {\n status: 'resolved' | 'ambiguous' | 'unresolved';\n toKind: 'symbol' | 'symbol_reference' | 'subscription_handler';\n toId: string;\n reasonCode?: string;\n call?: HandlerCallRow;\n matchCount: number;\n missing: boolean;\n factOrigin?: string;\n symbolCallResolutionStatus?: string;\n}\n\nconst symbolCallReasonLimit = 512;\n\nfunction subscriptionRows(db: Db, workspaceId: number): SubscriptionRow[] {\n return db.prepare(`SELECT c.id,r.workspace_id workspaceId,c.repo_id repoId,r.name repoName,\n c.source_symbol_id sourceSymbolId,c.event_name_expr eventName,\n c.source_file sourceFile,c.source_line sourceLine,\n c.call_site_start_offset startOffset,c.call_site_end_offset endOffset,\n c.confidence\n FROM outbound_calls c JOIN repositories r ON r.id=c.repo_id\n WHERE r.workspace_id=? AND c.call_type='async_subscribe'\n AND json_extract(c.evidence_json,'$.handlerReferenceStatus')\n ='role_required'\n ORDER BY r.name COLLATE BINARY,r.id,c.source_file COLLATE BINARY,\n c.call_site_start_offset,c.call_site_end_offset,c.id`).all(\n workspaceId,\n ) as unknown as SubscriptionRow[];\n}\n\nfunction roleSiteRows(db: Db, subscription: SubscriptionRow): HandlerCallRow[] {\n if (typeof subscription.startOffset !== 'number'\n || typeof subscription.endOffset !== 'number') return [];\n return db.prepare(`SELECT sc.id,sc.caller_symbol_id callerSymbolId,\n sc.callee_symbol_id calleeSymbolId,sc.status,\n sc.unresolved_reason unresolvedReason,sc.confidence,sc.source_line sourceLine,\n json_extract(sc.evidence_json,'$.factOrigin') factOrigin,\n json_extract(sc.evidence_json,'$.wrapperFunction') wrapperFunction,\n json_extract(sc.evidence_json,'$.candidateStrategy') strategy,\n json_extract(sc.evidence_json,'$.candidateCount') candidateCount,\n target.source_file targetSourceFile,target.start_line targetSourceLine,\n target_repo.workspace_id targetWorkspaceId\n FROM symbol_calls sc LEFT JOIN symbols target ON target.id=sc.callee_symbol_id\n LEFT JOIN repositories target_repo ON target_repo.id=target.repo_id\n WHERE sc.repo_id=? AND sc.source_file=?\n AND sc.call_site_start_offset=? AND sc.call_site_end_offset=?\n AND sc.call_role='event_subscribe_handler'\n ORDER BY sc.id`).all(\n subscription.repoId,\n subscription.sourceFile,\n subscription.startOffset,\n subscription.endOffset,\n ) as unknown as HandlerCallRow[];\n}\n\nfunction invalidSpan(subscription: SubscriptionRow): boolean {\n return typeof subscription.startOffset !== 'number'\n || typeof subscription.endOffset !== 'number'\n || subscription.startOffset < 0\n || subscription.endOffset <= subscription.startOffset;\n}\n\nfunction associationFor(\n subscription: SubscriptionRow,\n matches: HandlerCallRow[],\n): HandlerAssociation {\n if (invalidSpan(subscription)) return missingAssociation(\n subscription.id, matches.length, 'subscription_call_span_missing',\n );\n if (matches.length === 0) return missingAssociation(\n subscription.id, 0, 'subscription_handler_role_site_missing',\n );\n if (matches.length > 1) return ambiguousRoleSiteAssociation(\n subscription.id, matches,\n );\n const call = matches[0];\n return call\n ? singleCallAssociation(subscription, call)\n : missingAssociation(\n subscription.id, 0, 'subscription_handler_role_site_missing',\n );\n}\n\nfunction ambiguousRoleSiteAssociation(\n subscriptionId: number,\n matches: HandlerCallRow[],\n): HandlerAssociation {\n return {\n status: 'ambiguous', toKind: 'subscription_handler',\n toId: String(subscriptionId), reasonCode: 'multiple_handler_role_site_matches',\n matchCount: matches.length, missing: false,\n factOrigin: agreedOrMixed(matches.map((match) => match.factOrigin)),\n symbolCallResolutionStatus: agreedOrMixed(\n matches.map((match) => match.status),\n ),\n };\n}\n\nfunction singleCallAssociation(\n subscription: SubscriptionRow,\n call: HandlerCallRow,\n): HandlerAssociation {\n const mismatch = associationMismatch(subscription, call);\n if (mismatch) return missingAssociation(subscription.id, 1, mismatch, call);\n return handlerReferenceAssociation(call);\n}\n\nfunction associationMismatch(\n subscription: SubscriptionRow,\n call: HandlerCallRow,\n): string | undefined {\n if (subscription.sourceSymbolId != null\n && call.callerSymbolId !== subscription.sourceSymbolId)\n return 'subscription_handler_caller_mismatch';\n if (call.sourceLine !== subscription.sourceLine)\n return 'subscription_handler_source_line_mismatch';\n if (call.targetWorkspaceId != null\n && call.targetWorkspaceId !== subscription.workspaceId)\n return 'subscription_handler_target_workspace_mismatch';\n return undefined;\n}\n\nfunction handlerReferenceAssociation(call: HandlerCallRow): HandlerAssociation {\n if (call.status === 'resolved' && typeof call.calleeSymbolId === 'number')\n return { status: 'resolved', toKind: 'symbol', toId: String(call.calleeSymbolId), call, matchCount: 1, missing: false };\n if (call.status === 'ambiguous') return {\n status: 'ambiguous', toKind: 'symbol_reference', toId: String(call.id),\n reasonCode: 'subscription_handler_reference_ambiguous', call,\n matchCount: 1, missing: false,\n };\n return {\n status: 'unresolved', toKind: 'symbol_reference', toId: String(call.id),\n reasonCode: call.status === 'resolved'\n ? 'resolved_handler_symbol_missing'\n : 'subscription_handler_reference_unresolved',\n call, matchCount: 1, missing: false,\n };\n}\n\nfunction agreedOrMixed(\n values: Array<string | null | undefined>,\n): string | undefined {\n const distinct = new Set(values.map((value) => value ?? 'missing'));\n if (distinct.size > 1) return 'mixed';\n const value = distinct.values().next().value;\n return value === 'missing' ? undefined : value;\n}\n\nfunction missingAssociation(\n subscriptionId: number,\n matchCount: number,\n reasonCode: string,\n call?: HandlerCallRow,\n): HandlerAssociation {\n return {\n status: 'unresolved', toKind: 'subscription_handler',\n toId: String(subscriptionId), reasonCode, call, matchCount, missing: true,\n };\n}\n\nfunction evidenceFor(\n subscription: SubscriptionRow,\n association: HandlerAssociation,\n): Record<string, unknown> {\n const call: Partial<HandlerCallRow> = association.call ?? {};\n const symbolCallReason = boundedSymbolCallReason(call.unresolvedReason);\n return {\n eventName: subscription.eventName,\n associationBasis: 'exact_subscription_call_span',\n dispatchScope: 'workspace_event_name_only',\n subscribeCallId: subscription.id,\n symbolCallId: call.id,\n roleSiteMatchCount: association.matchCount,\n callRole: association.matchCount > 0 ? 'event_subscribe_handler' : undefined,\n factOrigin: association.factOrigin ?? call.factOrigin,\n repositoryId: subscription.repoId,\n repositoryName: subscription.repoName,\n sourceFile: subscription.sourceFile,\n sourceLine: subscription.sourceLine,\n callSiteStartOffset: subscription.startOffset,\n callSiteEndOffset: subscription.endOffset,\n handlerSymbolId: call.calleeSymbolId,\n handlerSourceFile: call.targetSourceFile,\n handlerSourceLine: call.targetSourceLine,\n wrapperFunction: call.wrapperFunction,\n associationStatus: association.status,\n symbolCallResolutionStatus:\n association.symbolCallResolutionStatus ?? call.status,\n resolutionStatus: association.status,\n resolutionStrategy: call.strategy,\n candidateCount: call.candidateCount,\n reasonCode: association.reasonCode,\n ...symbolCallReason,\n };\n}\n\nfunction boundedSymbolCallReason(\n reason: string | null | undefined,\n): Record<string, unknown> {\n if (!reason) return {};\n const value = reason.slice(0, symbolCallReasonLimit);\n return {\n symbolCallUnresolvedReason: value,\n omittedSymbolCallUnresolvedReasonCharacterCount:\n Math.max(0, reason.length - value.length),\n };\n}\n\nfunction insertAssociationEdge(\n db: Db,\n workspaceId: number,\n generation: number,\n subscription: SubscriptionRow,\n association: HandlerAssociation,\n): void {\n db.prepare(`INSERT INTO graph_edges(\n workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,\n confidence,evidence_json,is_dynamic,unresolved_reason,generation\n ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)`).run(\n workspaceId,\n 'EVENT_SUBSCRIPTION_HANDLED_BY',\n association.status,\n 'event',\n subscription.eventName,\n association.toKind,\n association.toId,\n association.call?.confidence ?? subscription.confidence,\n JSON.stringify(evidenceFor(subscription, association)),\n 0,\n association.reasonCode ?? association.call?.unresolvedReason ?? null,\n generation,\n );\n}\n\nexport function linkEventSubscriptionHandlers(\n db: Db,\n workspaceId: number,\n generation: number,\n): SubscriptionHandlerLinkSummary {\n const summary: SubscriptionHandlerLinkSummary = {\n edgeCount: 0,\n resolvedCount: 0,\n ambiguousCount: 0,\n unresolvedCount: 0,\n missingAssociationCount: 0,\n };\n for (const subscription of subscriptionRows(db, workspaceId)) {\n const association = associationFor(\n subscription, roleSiteRows(db, subscription),\n );\n insertAssociationEdge(\n db, workspaceId, generation, subscription, association,\n );\n summary.edgeCount += 1;\n summary.resolvedCount += association.status === 'resolved' ? 1 : 0;\n summary.ambiguousCount += association.status === 'ambiguous' ? 1 : 0;\n summary.unresolvedCount += association.status === 'unresolved' ? 1 : 0;\n summary.missingAssociationCount += association.missing ? 1 : 0;\n }\n return summary;\n}\n","export const schemaTablesSql = `\nCREATE TABLE IF NOT EXISTS workspaces (id INTEGER PRIMARY KEY, root_path TEXT UNIQUE NOT NULL, db_path TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL);\nCREATE TABLE IF NOT EXISTS repositories (id INTEGER PRIMARY KEY, workspace_id INTEGER NOT NULL, name TEXT NOT NULL, absolute_path TEXT NOT NULL, relative_path TEXT NOT NULL, package_name TEXT, package_version TEXT, dependencies_json TEXT DEFAULT '{}', package_public_surface_json TEXT, kind TEXT NOT NULL, is_git_repo INTEGER NOT NULL, last_indexed_at TEXT, index_status TEXT DEFAULT 'pending', error_count INTEGER DEFAULT 0, fingerprint TEXT, fact_generation INTEGER NOT NULL DEFAULT 0, graph_generation INTEGER NOT NULL DEFAULT 0, graph_stale_reason TEXT, graph_stale_at TEXT, fact_analyzer_version TEXT, UNIQUE(workspace_id, absolute_path), FOREIGN KEY(workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, relative_path TEXT NOT NULL, extension TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL, last_indexed_at TEXT NOT NULL, UNIQUE(repo_id, relative_path), FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS cds_requires (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, alias TEXT NOT NULL, kind TEXT, model TEXT, destination TEXT, service_path TEXT, request_timeout INTEGER, raw_json TEXT NOT NULL, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS cds_services (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, namespace TEXT, service_name TEXT NOT NULL, qualified_name TEXT NOT NULL, service_path TEXT NOT NULL, is_extend INTEGER NOT NULL, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, extension_local_ref TEXT, extension_imported_symbol TEXT, extension_local_alias TEXT, extension_module_specifier TEXT, extension_import_kind TEXT, extension_base_service_id INTEGER, extension_base_status TEXT, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(extension_base_service_id) REFERENCES cds_services(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS cds_operations (id INTEGER PRIMARY KEY, service_id INTEGER NOT NULL, operation_type TEXT NOT NULL, operation_name TEXT NOT NULL, operation_path TEXT NOT NULL, params_json TEXT NOT NULL, return_type TEXT, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, provenance TEXT NOT NULL DEFAULT 'direct', base_operation_id INTEGER, FOREIGN KEY(service_id) REFERENCES cds_services(id) ON DELETE CASCADE, FOREIGN KEY(base_operation_id) REFERENCES cds_operations(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS symbols (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, file_id INTEGER, kind TEXT NOT NULL, name TEXT NOT NULL, qualified_name TEXT NOT NULL, exported INTEGER NOT NULL, start_line INTEGER NOT NULL, end_line INTEGER NOT NULL, start_offset INTEGER, end_offset INTEGER, source_file TEXT, exported_name TEXT, evidence_json TEXT, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(file_id) REFERENCES files(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS handler_classes (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, symbol_id INTEGER, class_name TEXT NOT NULL, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(symbol_id) REFERENCES symbols(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS handler_methods (id INTEGER PRIMARY KEY, handler_class_id INTEGER NOT NULL, method_name TEXT NOT NULL, decorator_kind TEXT NOT NULL, decorator_value TEXT, decorator_raw_expression TEXT NOT NULL, decorator_resolution_json TEXT NOT NULL DEFAULT '{}', source_file TEXT NOT NULL, source_line INTEGER NOT NULL, FOREIGN KEY(handler_class_id) REFERENCES handler_classes(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS handler_registrations (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, handler_class_id INTEGER, class_name TEXT, import_source TEXT, registration_file TEXT NOT NULL, registration_line INTEGER NOT NULL, registration_kind TEXT NOT NULL, confidence REAL NOT NULL, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(handler_class_id) REFERENCES handler_classes(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS service_bindings (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, symbol_id INTEGER, variable_name TEXT NOT NULL, alias TEXT, alias_expr TEXT, destination_expr TEXT, service_path_expr TEXT, is_dynamic INTEGER NOT NULL, placeholders_json TEXT NOT NULL, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, binding_site_start_offset INTEGER, binding_site_end_offset INTEGER, owner_resolution TEXT NOT NULL DEFAULT 'legacy_unknown' CHECK(owner_resolution IN ('owned_exact','ownerless_file_scope','legacy_unknown')), helper_chain_json TEXT, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(symbol_id) REFERENCES symbols(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS outbound_calls (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, source_symbol_id INTEGER, call_type TEXT NOT NULL, service_binding_id INTEGER, method TEXT, operation_path_expr TEXT, query_entity TEXT, event_name_expr TEXT, payload_summary TEXT, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, call_site_start_offset INTEGER, call_site_end_offset INTEGER, confidence REAL NOT NULL, unresolved_reason TEXT, local_service_name TEXT, local_service_lookup TEXT, alias_chain_json TEXT, evidence_json TEXT, external_target_kind TEXT, external_target_id TEXT, external_target_label TEXT, external_target_dynamic INTEGER NOT NULL DEFAULT 0, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(source_symbol_id) REFERENCES symbols(id) ON DELETE SET NULL, FOREIGN KEY(service_binding_id) REFERENCES service_bindings(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS symbol_calls (id INTEGER PRIMARY KEY, repo_id INTEGER NOT NULL, caller_symbol_id INTEGER NOT NULL, callee_symbol_id INTEGER, callee_expression TEXT NOT NULL, import_source TEXT, source_file TEXT NOT NULL, source_line INTEGER NOT NULL, call_site_start_offset INTEGER, call_site_end_offset INTEGER, call_role TEXT NOT NULL DEFAULT 'legacy_unknown', status TEXT NOT NULL, confidence REAL NOT NULL, evidence_json TEXT NOT NULL, unresolved_reason TEXT, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(caller_symbol_id) REFERENCES symbols(id) ON DELETE CASCADE, FOREIGN KEY(callee_symbol_id) REFERENCES symbols(id) ON DELETE SET NULL);\nCREATE TABLE IF NOT EXISTS graph_edges (id INTEGER PRIMARY KEY, workspace_id INTEGER NOT NULL, edge_type TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'unresolved', from_kind TEXT NOT NULL, from_id TEXT NOT NULL, to_kind TEXT NOT NULL, to_id TEXT NOT NULL, confidence REAL NOT NULL, evidence_json TEXT NOT NULL, is_dynamic INTEGER NOT NULL, unresolved_reason TEXT, generation INTEGER NOT NULL DEFAULT 0, FOREIGN KEY(workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS index_runs (id INTEGER PRIMARY KEY, workspace_id INTEGER NOT NULL, started_at TEXT NOT NULL, finished_at TEXT, status TEXT NOT NULL, repo_count INTEGER NOT NULL, file_count INTEGER NOT NULL, diagnostic_count INTEGER NOT NULL, error_message TEXT, owner_pid INTEGER, FOREIGN KEY(workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE);\nCREATE TABLE IF NOT EXISTS diagnostics (id INTEGER PRIMARY KEY, repo_id INTEGER, file_id INTEGER, severity TEXT NOT NULL, code TEXT NOT NULL, message TEXT NOT NULL, source_file TEXT, source_line INTEGER, FOREIGN KEY(repo_id) REFERENCES repositories(id) ON DELETE CASCADE, FOREIGN KEY(file_id) REFERENCES files(id) ON DELETE SET NULL);\n`;\n\nexport const schemaIndexesSql = `\nCREATE INDEX IF NOT EXISTS idx_repo_name ON repositories(name);\nCREATE INDEX IF NOT EXISTS idx_service_path ON cds_services(service_path);\nCREATE INDEX IF NOT EXISTS idx_extension_import ON cds_services(extension_module_specifier, extension_imported_symbol, is_extend);\nCREATE INDEX IF NOT EXISTS idx_operation_name ON cds_operations(operation_name, operation_path);\nCREATE INDEX IF NOT EXISTS idx_operation_base ON cds_operations(base_operation_id);\nCREATE INDEX IF NOT EXISTS idx_calls_repo ON outbound_calls(repo_id, call_type);\nCREATE INDEX IF NOT EXISTS idx_symbol_calls_caller ON symbol_calls(repo_id, caller_symbol_id);\nCREATE INDEX IF NOT EXISTS idx_outbound_call_site ON outbound_calls(repo_id, source_file, call_site_start_offset, call_site_end_offset, call_type);\nCREATE INDEX IF NOT EXISTS idx_symbol_call_site_role ON symbol_calls(repo_id, source_file, call_site_start_offset, call_site_end_offset, call_role);\nCREATE INDEX IF NOT EXISTS idx_service_binding_site ON service_bindings(repo_id,source_file,variable_name,binding_site_start_offset,binding_site_end_offset);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_service_binding_exact_site ON service_bindings(repo_id,source_file,variable_name,binding_site_start_offset,binding_site_end_offset) WHERE binding_site_start_offset IS NOT NULL AND binding_site_end_offset IS NOT NULL;\nCREATE VIRTUAL TABLE IF NOT EXISTS search_index USING fts5(kind, name, path, repo);\n`;\n\nexport const schemaSql = `${schemaTablesSql}\\n${schemaIndexesSql}`;\n","import type { Db } from './connection.js';\nimport { schemaIndexesSql, schemaTablesSql } from './schema.js';\nexport const CURRENT_SCHEMA_VERSION = 13;\nconst columns: Record<string, Array<{ name: string; ddl: string }>> = {\n handler_methods: [\n { name: 'decorator_resolution_json', ddl: \"ALTER TABLE handler_methods ADD COLUMN decorator_resolution_json TEXT NOT NULL DEFAULT '{}'\" },\n ],\n service_bindings: [\n { name: 'helper_chain_json', ddl: 'ALTER TABLE service_bindings ADD COLUMN helper_chain_json TEXT' },\n { name: 'alias_expr', ddl: 'ALTER TABLE service_bindings ADD COLUMN alias_expr TEXT' },\n { name: 'binding_site_start_offset', ddl: 'ALTER TABLE service_bindings ADD COLUMN binding_site_start_offset INTEGER' },\n { name: 'binding_site_end_offset', ddl: 'ALTER TABLE service_bindings ADD COLUMN binding_site_end_offset INTEGER' },\n { name: 'owner_resolution', ddl: \"ALTER TABLE service_bindings ADD COLUMN owner_resolution TEXT NOT NULL DEFAULT 'legacy_unknown' CHECK(owner_resolution IN ('owned_exact','ownerless_file_scope','legacy_unknown'))\" },\n ],\n repositories: [\n { name: 'fingerprint', ddl: 'ALTER TABLE repositories ADD COLUMN fingerprint TEXT' },\n { name: 'fact_generation', ddl: 'ALTER TABLE repositories ADD COLUMN fact_generation INTEGER NOT NULL DEFAULT 0' },\n { name: 'graph_generation', ddl: 'ALTER TABLE repositories ADD COLUMN graph_generation INTEGER NOT NULL DEFAULT 0' },\n { name: 'graph_stale_reason', ddl: 'ALTER TABLE repositories ADD COLUMN graph_stale_reason TEXT' },\n { name: 'graph_stale_at', ddl: 'ALTER TABLE repositories ADD COLUMN graph_stale_at TEXT' },\n { name: 'fact_analyzer_version', ddl: \"ALTER TABLE repositories ADD COLUMN fact_analyzer_version TEXT DEFAULT 'legacy'\" },\n { name: 'package_public_surface_json', ddl: 'ALTER TABLE repositories ADD COLUMN package_public_surface_json TEXT' },\n ],\n graph_edges: [\n { name: 'status', ddl: \"ALTER TABLE graph_edges ADD COLUMN status TEXT NOT NULL DEFAULT 'unresolved'\" },\n { name: 'generation', ddl: 'ALTER TABLE graph_edges ADD COLUMN generation INTEGER NOT NULL DEFAULT 0' },\n ],\n handler_registrations: [\n { name: 'class_name', ddl: 'ALTER TABLE handler_registrations ADD COLUMN class_name TEXT' },\n { name: 'import_source', ddl: 'ALTER TABLE handler_registrations ADD COLUMN import_source TEXT' },\n ],\n symbols: [\n { name: 'start_offset', ddl: 'ALTER TABLE symbols ADD COLUMN start_offset INTEGER' },\n { name: 'end_offset', ddl: 'ALTER TABLE symbols ADD COLUMN end_offset INTEGER' },\n { name: 'source_file', ddl: 'ALTER TABLE symbols ADD COLUMN source_file TEXT' },\n { name: 'exported_name', ddl: 'ALTER TABLE symbols ADD COLUMN exported_name TEXT' },\n { name: 'evidence_json', ddl: 'ALTER TABLE symbols ADD COLUMN evidence_json TEXT' },\n ],\n cds_services: [\n { name: 'extension_local_ref', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_local_ref TEXT' },\n { name: 'extension_imported_symbol', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_imported_symbol TEXT' },\n { name: 'extension_local_alias', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_local_alias TEXT' },\n { name: 'extension_module_specifier', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_module_specifier TEXT' },\n { name: 'extension_import_kind', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_import_kind TEXT' },\n { name: 'extension_base_service_id', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_base_service_id INTEGER' },\n { name: 'extension_base_status', ddl: 'ALTER TABLE cds_services ADD COLUMN extension_base_status TEXT' },\n ],\n cds_operations: [\n { name: 'provenance', ddl: \"ALTER TABLE cds_operations ADD COLUMN provenance TEXT NOT NULL DEFAULT 'direct'\" },\n { name: 'base_operation_id', ddl: 'ALTER TABLE cds_operations ADD COLUMN base_operation_id INTEGER' },\n ],\n outbound_calls: [\n { name: 'local_service_name', ddl: 'ALTER TABLE outbound_calls ADD COLUMN local_service_name TEXT' },\n { name: 'local_service_lookup', ddl: 'ALTER TABLE outbound_calls ADD COLUMN local_service_lookup TEXT' },\n { name: 'alias_chain_json', ddl: 'ALTER TABLE outbound_calls ADD COLUMN alias_chain_json TEXT' },\n { name: 'evidence_json', ddl: 'ALTER TABLE outbound_calls ADD COLUMN evidence_json TEXT' },\n { name: 'external_target_kind', ddl: 'ALTER TABLE outbound_calls ADD COLUMN external_target_kind TEXT' },\n { name: 'external_target_id', ddl: 'ALTER TABLE outbound_calls ADD COLUMN external_target_id TEXT' },\n { name: 'external_target_label', ddl: 'ALTER TABLE outbound_calls ADD COLUMN external_target_label TEXT' },\n { name: 'external_target_dynamic', ddl: 'ALTER TABLE outbound_calls ADD COLUMN external_target_dynamic INTEGER NOT NULL DEFAULT 0' },\n { name: 'call_site_start_offset', ddl: 'ALTER TABLE outbound_calls ADD COLUMN call_site_start_offset INTEGER' },\n { name: 'call_site_end_offset', ddl: 'ALTER TABLE outbound_calls ADD COLUMN call_site_end_offset INTEGER' },\n ],\n symbol_calls: [\n { name: 'call_site_start_offset', ddl: 'ALTER TABLE symbol_calls ADD COLUMN call_site_start_offset INTEGER' },\n { name: 'call_site_end_offset', ddl: 'ALTER TABLE symbol_calls ADD COLUMN call_site_end_offset INTEGER' },\n { name: 'call_role', ddl: \"ALTER TABLE symbol_calls ADD COLUMN call_role TEXT NOT NULL DEFAULT 'legacy_unknown'\" },\n ],\n index_runs: [\n { name: 'error_message', ddl: 'ALTER TABLE index_runs ADD COLUMN error_message TEXT' },\n { name: 'owner_pid', ddl: 'ALTER TABLE index_runs ADD COLUMN owner_pid INTEGER' },\n ],\n};\nfunction hasColumn(db: Db, table: string, column: string): boolean {\n return (db.prepare(`PRAGMA table_info(${table})`).all() as Array<{ name?: string }>).some((row) => row.name === column);\n}\nfunction userVersion(db: Db): number {\n const row = db.pragma('user_version')[0] as { user_version?: number } | undefined;\n return Number(row?.user_version ?? 0);\n}\nfunction addMissingColumns(db: Db): void {\n for (const [table, tableColumns] of Object.entries(columns)) {\n for (const column of tableColumns) {\n if (!hasColumn(db, table, column.name)) db.prepare(column.ddl).run();\n }\n }\n}\nfunction normalizeLegacyStatus(db: Db, priorVersion: number): void {\n if (priorVersion >= 12) return;\n db.prepare(\"UPDATE graph_edges SET status=CASE WHEN edge_type='REMOTE_CALL_RESOLVES_TO_OPERATION' THEN 'resolved' WHEN edge_type IN ('HANDLER_RUNS_DB_QUERY','HANDLER_CALLS_EXTERNAL_HTTP','HANDLER_EMITS_EVENT','EVENT_CONSUMED_BY_HANDLER') THEN 'terminal' WHEN edge_type='DYNAMIC_EDGE_CANDIDATE' THEN 'dynamic' WHEN status='ambiguous' THEN 'ambiguous' ELSE status END\").run();\n db.prepare(\"UPDATE repositories SET graph_stale_reason='schema_migration_requires_relink', graph_stale_at=COALESCE(graph_stale_at, datetime('now')) WHERE EXISTS (SELECT 1 FROM graph_edges WHERE graph_edges.workspace_id=repositories.workspace_id) AND graph_generation=0\").run();\n}\nfunction markCallSiteMigrationStale(db: Db, priorVersion: number): void {\n if (priorVersion >= 12) return;\n db.prepare(`UPDATE repositories\n SET graph_stale_reason='schema_v12_call_sites_require_reindex',\n graph_stale_at=COALESCE(graph_stale_at,datetime('now'))\n WHERE index_status='indexed' OR last_indexed_at IS NOT NULL`).run();\n}\nfunction markFactProvenanceMigrationStale(db: Db, priorVersion: number): void {\n if (priorVersion >= 13) return;\n db.prepare(`UPDATE repositories\n SET graph_stale_reason='schema_v13_fact_provenance_requires_reindex',\n graph_stale_at=COALESCE(graph_stale_at,datetime('now'))\n WHERE index_status='indexed' OR last_indexed_at IS NOT NULL`).run();\n}\nexport function migrate(db: Db): void {\n db.transaction(() => {\n const version = userVersion(db);\n if (version > CURRENT_SCHEMA_VERSION) throw new Error(`Unsupported future service-flow schema version ${version}`);\n db.exec(schemaTablesSql);\n addMissingColumns(db);\n db.exec(schemaIndexesSql);\n normalizeLegacyStatus(db, version);\n markCallSiteMigrationStale(db, version);\n markFactProvenanceMigrationStale(db, version);\n const violations = db.pragma('foreign_key_check');\n if (violations.length > 0) throw new Error('SQLite foreign_key_check failed during migration');\n db.pragma(`user_version = ${CURRENT_SCHEMA_VERSION}`);\n });\n}\nexport function schemaVersion(db: Db): number {\n return userVersion(db);\n}\nexport function foreignKeyViolations(db: Db): Array<Record<string, unknown>> {\n return db.pragma('foreign_key_check');\n}\n","import type { Db } from './connection.js';\nimport { ANALYZER_VERSION } from '../version.js';\n\nexport type FactJsonShape = 'object' | 'array';\n\nexport interface FactJsonInventoryItem {\n table: string;\n column: string;\n nullable: boolean;\n shape: FactJsonShape;\n consumers: readonly string[];\n repositoryJoin: string;\n}\n\nexport interface FactJsonCategoryCount {\n category: string;\n count: number;\n}\n\nconst directRepositoryJoin = 'JOIN repositories lifecycle_repo ON lifecycle_repo.id=fact.repo_id';\n\nexport const LINK_FACT_JSON_INVENTORY: readonly FactJsonInventoryItem[] = [\n {\n table: 'repositories',\n column: 'dependencies_json',\n nullable: false,\n shape: 'object',\n consumers: ['helper-package-linker'],\n repositoryJoin: '',\n },\n {\n table: 'repositories',\n column: 'package_public_surface_json',\n nullable: false,\n shape: 'object',\n consumers: ['package-import-symbol-resolver'],\n repositoryJoin: '',\n },\n {\n table: 'handler_methods',\n column: 'decorator_resolution_json',\n nullable: false,\n shape: 'object',\n consumers: ['implementation-linker', 'trace-selector'],\n repositoryJoin:\n 'JOIN handler_classes owner ON owner.id=fact.handler_class_id JOIN repositories lifecycle_repo ON lifecycle_repo.id=owner.repo_id',\n },\n {\n table: 'symbols',\n column: 'evidence_json',\n nullable: true,\n shape: 'object',\n consumers: ['symbol-call-resolver', 'implementation-linker'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'symbol_calls',\n column: 'evidence_json',\n nullable: false,\n shape: 'object',\n consumers: ['package-import-symbol-resolver', 'event-subscription-linker'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'outbound_calls',\n column: 'evidence_json',\n nullable: false,\n shape: 'object',\n consumers: ['cross-repository-linker', 'trace-engine'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'outbound_calls',\n column: 'alias_chain_json',\n nullable: true,\n shape: 'array',\n consumers: ['cross-repository-linker', 'trace-engine'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'service_bindings',\n column: 'placeholders_json',\n nullable: false,\n shape: 'array',\n consumers: ['cross-repository-linker', 'trace-engine'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'service_bindings',\n column: 'helper_chain_json',\n nullable: true,\n shape: 'array',\n consumers: ['cross-repository-linker', 'trace-engine'],\n repositoryJoin: directRepositoryJoin,\n },\n {\n table: 'cds_requires',\n column: 'raw_json',\n nullable: false,\n shape: 'object',\n consumers: ['service-resolution'],\n repositoryJoin: directRepositoryJoin,\n },\n] as const;\n\nfunction repositoryPredicate(item: FactJsonInventoryItem): string {\n if (item.table === 'repositories') {\n return `fact.fact_analyzer_version=?\n AND (? IS NULL OR fact.workspace_id=?)`;\n }\n return `lifecycle_repo.fact_analyzer_version=?\n AND (? IS NULL OR lifecycle_repo.workspace_id=?)`;\n}\n\nfunction invalidJsonCount(\n db: Db,\n item: FactJsonInventoryItem,\n workspaceId: number | undefined,\n): number {\n const nullClause = item.nullable\n ? `fact.${item.column} IS NOT NULL AND`\n : `fact.${item.column} IS NULL OR`;\n const row = db.prepare(`SELECT COUNT(*) count FROM ${item.table} fact\n ${item.repositoryJoin}\n WHERE ${repositoryPredicate(item)}\n AND (${nullClause} json_valid(fact.${item.column})=0)`).get(\n ANALYZER_VERSION, workspaceId, workspaceId,\n );\n return Number(row?.count ?? 0);\n}\n\nfunction wrongShapeCount(\n db: Db,\n item: FactJsonInventoryItem,\n workspaceId: number | undefined,\n): number {\n const row = db.prepare(`SELECT COUNT(*) count FROM ${item.table} fact\n ${item.repositoryJoin}\n WHERE ${repositoryPredicate(item)}\n AND fact.${item.column} IS NOT NULL\n AND json_type(fact.${item.column})<>?`).get(\n ANALYZER_VERSION, workspaceId, workspaceId, item.shape,\n );\n return Number(row?.count ?? 0);\n}\n\nfunction category(\n item: FactJsonInventoryItem,\n suffix: string,\n count: number,\n): FactJsonCategoryCount {\n return {\n category: `json_${item.table}_${item.column}_${suffix}`,\n count,\n };\n}\n\nexport function invalidFactJsonCategories(\n db: Db,\n workspaceId?: number,\n): FactJsonCategoryCount[] {\n const invalid = LINK_FACT_JSON_INVENTORY.map((item) =>\n category(item, 'invalid', invalidJsonCount(db, item, workspaceId)))\n .filter((item) => item.count > 0);\n if (invalid.length > 0) return invalid;\n return LINK_FACT_JSON_INVENTORY.map((item) =>\n category(item, 'wrong_shape', wrongShapeCount(db, item, workspaceId)))\n .filter((item) => item.count > 0);\n}\n","import { ANALYZER_VERSION } from '../version.js';\nimport {\n PACKAGE_PUBLIC_SURFACE_RECORD_CAP,\n PACKAGE_PUBLIC_SURFACE_SCHEMA,\n type ExecutableBodyEligibility,\n type PackagePublicScope,\n type PackagePublicSurfaceFact,\n type PublicSurfaceTarget,\n} from '../parsers/003-package-public-surface.js';\nimport {\n parsePackagePublicSurfaceFact,\n} from '../parsers/012-package-fact-contract.js';\nimport type { Db } from './connection.js';\n\ninterface Exposure {\n entry: string;\n modulePath: string;\n publicName: string;\n}\n\ninterface SymbolSidecar {\n body: ExecutableBodyEligibility;\n exposures: Exposure[];\n}\n\ninterface SurfaceSymbol {\n id: number;\n repoId: number;\n carrierValid: boolean;\n sourceFile: string;\n kind: string;\n qualifiedName: string;\n startOffset: number;\n endOffset: number;\n evidence?: Record<string, unknown>;\n}\n\ninterface SurfaceRepository {\n id: number;\n surface?: PackagePublicSurfaceFact;\n symbols: SurfaceSymbol[];\n}\n\nconst bodyReasons = new Set([\n 'body_present', 'declaration_only', 'ambient_declaration',\n 'abstract_bodyless', 'overload_signature',\n]);\nconst sidecarKeys = [\n 'schema', 'recordCap', 'bodyEligibility', 'exposures',\n 'exposureTotal', 'shownExposureCount', 'omittedExposureCount',\n];\nconst bodyKeys = ['eligible', 'reason'];\nconst exposureKeys = ['entry', 'modulePath', 'publicName'];\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n): boolean {\n const keys = Object.keys(value);\n return keys.length === expected.length\n && expected.every((key) => Object.hasOwn(value, key));\n}\n\nfunction nonEmpty(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction bodyEligibility(\n value: unknown,\n): ExecutableBodyEligibility | undefined {\n const body = record(value);\n if (!body || !exactKeys(body, bodyKeys)\n || typeof body.eligible !== 'boolean'\n || typeof body.reason !== 'string'\n || !bodyReasons.has(body.reason)\n || body.eligible !== (body.reason === 'body_present')) return undefined;\n return body as unknown as ExecutableBodyEligibility;\n}\n\nfunction exposure(value: unknown): Exposure | undefined {\n const item = record(value);\n if (!item || !exactKeys(item, exposureKeys)\n || !nonEmpty(item.entry) || !nonEmpty(item.modulePath)\n || !nonEmpty(item.publicName)\n || (item.entry !== '.' && !item.entry.startsWith('./'))) return undefined;\n return item as unknown as Exposure;\n}\n\nfunction exposureKey(value: Exposure): string {\n return `${value.entry}\\0${value.modulePath}\\0${value.publicName}`;\n}\n\nfunction parsedExposures(value: unknown): Exposure[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const values = value.flatMap((item) => {\n const parsed = exposure(item);\n return parsed ? [parsed] : [];\n });\n const keys = new Set(values.map(exposureKey));\n return values.length === value.length && keys.size === values.length\n ? values : undefined;\n}\n\nfunction sidecar(value: unknown): SymbolSidecar | undefined {\n const item = record(value);\n if (!item || !exactKeys(item, sidecarKeys)\n || item.schema !== PACKAGE_PUBLIC_SURFACE_SCHEMA\n || item.recordCap !== PACKAGE_PUBLIC_SURFACE_RECORD_CAP) return undefined;\n const body = bodyEligibility(item.bodyEligibility);\n const exposures = parsedExposures(item.exposures);\n if (!body || !exposures || exposures.length === 0\n || !sidecarCountsValid(item, exposures.length))\n return undefined;\n return { body, exposures };\n}\n\nfunction sidecarCountsValid(\n item: Record<string, unknown>,\n exposureCount: number,\n): boolean {\n return exposureCount <= PACKAGE_PUBLIC_SURFACE_RECORD_CAP\n && item.exposureTotal === exposureCount\n && item.shownExposureCount === exposureCount\n && item.omittedExposureCount === 0;\n}\n\nfunction currentRepositories(\n db: Db,\n workspaceId?: number,\n): SurfaceRepository[] {\n const rows = db.prepare(`SELECT id,package_name packageName,\n package_public_surface_json surfaceJson FROM repositories\n WHERE fact_analyzer_version=?\n AND (? IS NULL OR workspace_id=?)\n ORDER BY id`).all(ANALYZER_VERSION, workspaceId, workspaceId);\n return rows.flatMap((row) => {\n if (typeof row.id !== 'number') return [];\n const packageName = typeof row.packageName === 'string'\n ? row.packageName : null;\n const value = parseRecord(row.surfaceJson);\n return [{\n id: row.id,\n surface: value\n ? parsePackagePublicSurfaceFact(value, packageName)\n : undefined,\n symbols: [],\n }];\n });\n}\n\nfunction currentSymbols(\n db: Db,\n workspaceId?: number,\n): SurfaceSymbol[] {\n const rows = db.prepare(`SELECT s.id,s.repo_id repoId,\n s.source_file sourceFile,s.kind,s.qualified_name qualifiedName,\n s.start_offset startOffset,s.end_offset endOffset,\n s.evidence_json evidenceJson\n FROM symbols s JOIN repositories r ON r.id=s.repo_id\n WHERE r.fact_analyzer_version=?\n AND (? IS NULL OR r.workspace_id=?)\n ORDER BY s.id`).all(ANALYZER_VERSION, workspaceId, workspaceId);\n return rows.flatMap(surfaceSymbol);\n}\n\nfunction surfaceSymbol(row: Record<string, unknown>): SurfaceSymbol[] {\n if (typeof row.id !== 'number' || typeof row.repoId !== 'number') return [];\n const carrierValid = validSymbolCarrier(row);\n return [{\n id: row.id,\n repoId: row.repoId,\n carrierValid,\n sourceFile: stringField(row.sourceFile),\n kind: stringField(row.kind),\n qualifiedName: stringField(row.qualifiedName),\n startOffset: numberField(row.startOffset),\n endOffset: numberField(row.endOffset),\n evidence: parseRecord(row.evidenceJson),\n }];\n}\n\nfunction validSymbolCarrier(row: Record<string, unknown>): boolean {\n return typeof row.sourceFile === 'string' && typeof row.kind === 'string'\n && typeof row.qualifiedName === 'string'\n && typeof row.startOffset === 'number'\n && typeof row.endOffset === 'number' && row.startOffset >= 0\n && row.endOffset > row.startOffset;\n}\n\nfunction stringField(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction numberField(value: unknown): number {\n return typeof value === 'number' ? value : -1;\n}\n\nfunction repositoryAudits(\n db: Db,\n workspaceId?: number,\n): SurfaceRepository[] {\n const repositories = currentRepositories(db, workspaceId);\n const byId = new Map(repositories.map((item) => [item.id, item]));\n for (const symbol of currentSymbols(db, workspaceId))\n byId.get(symbol.repoId)?.symbols.push(symbol);\n return repositories;\n}\n\nfunction targetMatches(\n target: PublicSurfaceTarget,\n symbol: SurfaceSymbol,\n): boolean {\n return target.sourceFile === symbol.sourceFile\n && target.kind === symbol.kind\n && target.qualifiedName === symbol.qualifiedName\n && target.startOffset === symbol.startOffset\n && target.endOffset === symbol.endOffset;\n}\n\nfunction bodyMatches(\n left: ExecutableBodyEligibility,\n right: ExecutableBodyEligibility,\n): boolean {\n return left.eligible === right.eligible && left.reason === right.reason;\n}\n\nfunction scopeExposure(scope: PackagePublicScope): Exposure {\n return {\n entry: scope.entry,\n modulePath: scope.modulePath,\n publicName: scope.publicName,\n };\n}\n\nfunction exposureProofValid(\n repository: SurfaceRepository,\n symbol: SurfaceSymbol,\n proof: SymbolSidecar,\n value: Exposure,\n): boolean {\n if (!repository.surface) return false;\n const scopes = repository.surface.scopes.filter((scope) =>\n exposureKey(scopeExposure(scope)) === exposureKey(value));\n if (scopes.length !== 1 || !scopes[0]) return false;\n const targets = scopes[0].targets.filter((target) =>\n targetMatches(target, symbol)\n && bodyMatches(target.bodyEligibility, proof.body));\n return targets.length === 1;\n}\n\nfunction symbolProof(\n repository: SurfaceRepository,\n symbol: SurfaceSymbol,\n): SymbolSidecar | undefined {\n if (!symbol.carrierValid) return undefined;\n const value = symbol.evidence?.packagePublicSurface;\n if (value === undefined) return undefined;\n const proof = sidecar(value);\n if (!proof || !proof.exposures.every((item) =>\n exposureProofValid(repository, symbol, proof, item))) return undefined;\n return proof;\n}\n\nfunction invalidPresentSidecarCount(\n repository: SurfaceRepository,\n): number {\n return repository.symbols.filter((symbol) =>\n symbol.evidence\n && Object.hasOwn(symbol.evidence, 'packagePublicSurface')\n && !symbolProof(repository, symbol)).length;\n}\n\nfunction targetProofCount(\n repository: SurfaceRepository,\n scope: PackagePublicScope,\n target: PublicSurfaceTarget,\n): number {\n const expected = exposureKey(scopeExposure(scope));\n return repository.symbols.filter((symbol) => {\n if (!targetMatches(target, symbol)) return false;\n const proof = symbolProof(repository, symbol);\n return Boolean(proof && bodyMatches(proof.body, target.bodyEligibility)\n && proof.exposures.some((item) => exposureKey(item) === expected));\n }).length;\n}\n\nfunction missingTargetProofCount(\n repository: SurfaceRepository,\n): number {\n if (!repository.surface) return 0;\n return repository.surface.scopes.reduce((scopeTotal, scope) =>\n scopeTotal + scope.targets.filter((target) =>\n targetProofCount(repository, scope, target) !== 1).length, 0);\n}\n\nexport function invalidPackageSymbolSurfaceCount(\n db: Db,\n workspaceId?: number,\n): number {\n return repositoryAudits(db, workspaceId).reduce(\n (total, repository) => total\n + invalidPresentSidecarCount(repository)\n + missingTargetProofCount(repository),\n 0,\n );\n}\n","import type { Db } from './connection.js';\nimport { ANALYZER_VERSION } from '../version.js';\nimport type {\n PackagePublicScope,\n PackagePublicSurfaceFact,\n PublicSurfaceTarget,\n} from '../parsers/003-package-public-surface.js';\nimport {\n parsePackageImportReference,\n parsePackagePublicSurfaceFact,\n} from '../parsers/012-package-fact-contract.js';\nimport type { SymbolImportReference } from\n '../parsers/002-symbol-import-bindings.js';\nimport type { PackageFactPhase } from './003-current-fact-semantics.js';\nimport {\n expectedPackageImportResolutions,\n type PackageCallResolution,\n} from '../linker/003-package-import-symbol-resolver.js';\nimport {\n invalidPackageSymbolSurfaceCount,\n} from './010-package-symbol-surface-semantics.js';\n\nexport interface PackageFactCategoryCount {\n category: string;\n count: number;\n}\n\ninterface PackageCallRow {\n id: number;\n workspaceId: number;\n importSource: string | null;\n status: string;\n unresolvedReason: string | null;\n calleeSymbolId: number | null;\n evidence: Record<string, unknown>;\n}\n\nconst unresolvedReasons = new Set([\n 'package_repository_scope_ambiguous',\n 'package_repository_not_indexed',\n 'package_public_surface_unsupported',\n 'public_surface_evidence_incomplete',\n 'package_binding_type_only',\n 'package_public_scope_duplicate',\n 'package_public_name_not_exposed',\n 'public_symbol_has_no_executable_body',\n]);\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction currentPredicate(alias: string): string {\n return `${alias}.fact_analyzer_version=?\n AND (? IS NULL OR ${alias}.workspace_id=?)`;\n}\n\nfunction category(\n name: string,\n count: number,\n): PackageFactCategoryCount[] {\n return count > 0 ? [{ category: name, count }] : [];\n}\n\nfunction repositorySurfaceInvalidCount(\n db: Db,\n workspaceId?: number,\n): number {\n const rows = db.prepare(`SELECT package_name packageName,\n package_public_surface_json surfaceJson FROM repositories r\n WHERE ${currentPredicate('r')}`).all(\n ANALYZER_VERSION, workspaceId, workspaceId,\n );\n return rows.filter((row) => {\n const packageName = typeof row.packageName === 'string'\n ? row.packageName : null;\n const parsed = parseRecord(row.surfaceJson);\n return !parsed\n || !parsePackagePublicSurfaceFact(parsed, packageName);\n }).length;\n}\n\nfunction packageCallRows(\n db: Db,\n workspaceId?: number,\n): PackageCallRow[] {\n const rows = db.prepare(`SELECT sc.id,r.workspace_id workspaceId,\n sc.import_source importSource,sc.status,sc.unresolved_reason unresolvedReason,\n sc.callee_symbol_id calleeSymbolId,sc.evidence_json evidenceJson\n FROM symbol_calls sc JOIN repositories r ON r.id=sc.repo_id\n WHERE ${currentPredicate('r')}\n AND (json_extract(sc.evidence_json,'$.relation')='package_import'\n OR json_extract(sc.evidence_json,\n '$.importBinding.moduleKind')='package')\n ORDER BY sc.id`).all(ANALYZER_VERSION, workspaceId, workspaceId);\n return rows.flatMap((row) => {\n const evidence = parseRecord(row.evidenceJson);\n return typeof row.id === 'number' && typeof row.workspaceId === 'number'\n && typeof row.status === 'string' && evidence\n ? [{\n id: row.id,\n workspaceId: row.workspaceId,\n importSource: typeof row.importSource === 'string'\n ? row.importSource : null,\n status: row.status,\n unresolvedReason: typeof row.unresolvedReason === 'string'\n ? row.unresolvedReason : null,\n calleeSymbolId: typeof row.calleeSymbolId === 'number'\n ? row.calleeSymbolId : null,\n evidence,\n }]\n : [];\n });\n}\n\nfunction nonRelativeImportInvalidCount(\n db: Db,\n workspaceId?: number,\n): number {\n const rows = db.prepare(`SELECT sc.status,\n sc.unresolved_reason unresolvedReason,\n sc.callee_symbol_id calleeSymbolId,sc.import_source importSource,\n sc.evidence_json evidenceJson\n FROM symbol_calls sc JOIN repositories r ON r.id=sc.repo_id\n WHERE ${currentPredicate('r')}\n AND sc.import_source IS NOT NULL\n AND sc.import_source NOT LIKE '.%'`).all(\n ANALYZER_VERSION, workspaceId, workspaceId,\n );\n return rows.filter((row) => !nonRelativeImportValid(row)).length;\n}\n\nfunction nonRelativeImportValid(\n row: Record<string, unknown>,\n): boolean {\n const evidence = parseRecord(row.evidenceJson);\n if (!evidence) return false;\n const direct = parsePackageImportReference(evidence.importBinding);\n if (direct) return all([\n evidence.relation === 'package_import',\n evidence.derivedImportBinding === undefined,\n row.importSource === direct.rawModuleSpecifier,\n evidence.targetName === direct.requestedPublicName,\n ]);\n return !derivedPackageRowInvalid(row);\n}\n\nfunction integerField(\n value: Record<string, unknown>,\n key: string,\n): number | undefined {\n const item = value[key];\n return Number.isInteger(item) && Number(item) >= 0\n ? Number(item) : undefined;\n}\n\nfunction all(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nfunction pendingValid(row: PackageCallRow): boolean {\n const evidence = row.evidence;\n return all([\n row.status === 'unresolved',\n row.calleeSymbolId === null,\n row.unresolvedReason === 'package_resolution_pending',\n evidence.candidateStrategy === 'package_import_pending',\n integerField(evidence, 'candidateCount') === 0,\n integerField(evidence, 'eligibleCandidateCount') === 0,\n integerField(evidence, 'selectedCandidateCount') === 0,\n evidence.candidateSetComplete === false,\n evidence.unresolvedReason === row.unresolvedReason,\n ...pendingDetailsAbsent(evidence),\n ]);\n}\n\nfunction pendingDetailsAbsent(\n evidence: Record<string, unknown>,\n): boolean[] {\n return [\n evidence.resolvedModulePath === undefined,\n evidence.resolvedTargetRepositoryId === undefined,\n evidence.targetRepositoryCandidateCount === undefined,\n evidence.targetRepositoryCandidates === undefined,\n evidence.shownTargetRepositoryCandidateCount === undefined,\n evidence.omittedTargetRepositoryCandidateCount === undefined,\n evidence.publicSurface === undefined,\n ];\n}\n\nfunction repositoryReferencesValid(\n evidence: Record<string, unknown>,\n): boolean {\n const total = integerField(evidence, 'targetRepositoryCandidateCount');\n const shown = integerField(\n evidence, 'shownTargetRepositoryCandidateCount',\n );\n const omitted = integerField(\n evidence, 'omittedTargetRepositoryCandidateCount',\n );\n const ids = evidence.targetRepositoryCandidates;\n return total !== undefined && shown !== undefined && omitted !== undefined\n && Array.isArray(ids) && ids.every((id) =>\n Number.isInteger(id) && Number(id) > 0)\n && new Set(ids).size === ids.length && ids.length === shown\n && shown <= 5 && shown + omitted === total;\n}\n\nfunction terminalMatrixValid(row: PackageCallRow): boolean {\n const strategy = row.evidence.candidateStrategy;\n const evidenceReason = row.evidence.unresolvedReason;\n if (!repositoryReferencesValid(row.evidence)\n || evidenceReason !== row.unresolvedReason) return false;\n if (row.status === 'resolved') return all([\n strategy === 'package_public_surface_exact',\n row.unresolvedReason === null,\n row.calleeSymbolId !== null,\n ]);\n if (row.status === 'ambiguous') return all([\n strategy === 'package_public_surface_ambiguous',\n row.unresolvedReason === 'package_public_target_ambiguous',\n row.calleeSymbolId === null,\n ]);\n return unresolvedMatrixValid(row, strategy);\n}\n\nfunction unresolvedMatrixValid(\n row: PackageCallRow,\n strategy: unknown,\n): boolean {\n return all([\n row.status === 'unresolved',\n strategy === 'package_public_surface_unresolved',\n typeof row.unresolvedReason === 'string',\n unresolvedReasons.has(String(row.unresolvedReason)),\n row.calleeSymbolId === null,\n ]);\n}\n\nfunction targetRepositories(\n db: Db,\n workspaceId: number,\n binding: SymbolImportReference,\n): Array<{ id: number; surface: PackagePublicSurfaceFact }> {\n const rows = db.prepare(`SELECT id,package_public_surface_json surfaceJson\n FROM repositories WHERE workspace_id=? AND package_name=?\n ORDER BY id`).all(workspaceId, binding.requestedPackageName);\n return rows.flatMap((row) => {\n const value = parseRecord(row.surfaceJson);\n const surface = value\n ? parsePackagePublicSurfaceFact(value, binding.requestedPackageName)\n : undefined;\n return typeof row.id === 'number' && surface\n ? [{ id: row.id, surface }] : [];\n });\n}\n\nfunction exactPublicScope(\n surface: PackagePublicSurfaceFact,\n binding: SymbolImportReference,\n): PackagePublicScope | undefined {\n if (surface.status !== 'complete') return undefined;\n const scopes = surface.scopes.filter((scope) =>\n scope.entry === binding.requestedModuleSubpath\n && scope.publicName === binding.requestedPublicName);\n return scopes.length === 1 ? scopes[0] : undefined;\n}\n\nfunction selectedTarget(\n db: Db,\n symbolId: number,\n repositoryId: number,\n scope: PackagePublicScope,\n): PublicSurfaceTarget | undefined {\n const row = db.prepare(`SELECT source_file sourceFile,kind,\n qualified_name qualifiedName,start_offset startOffset,\n end_offset endOffset,evidence_json evidenceJson FROM symbols\n WHERE id=? AND repo_id=?`).get(symbolId, repositoryId);\n if (!row) return undefined;\n return scope.targets.find((target) =>\n target.bodyEligibility.eligible\n && target.sourceFile === row.sourceFile && target.kind === row.kind\n && target.qualifiedName === row.qualifiedName\n && target.startOffset === row.startOffset && target.endOffset === row.endOffset\n && symbolExposureValid(row.evidenceJson, target, scope));\n}\n\nfunction symbolExposureValid(\n evidenceJson: unknown,\n target: PublicSurfaceTarget,\n scope: PackagePublicScope,\n): boolean {\n const evidence = parseRecord(evidenceJson);\n if (!evidence) return false;\n const surface = record(evidence.packagePublicSurface);\n if (!surface) return false;\n const body = record(surface.bodyEligibility);\n if (!body) return false;\n const exposures = surface.exposures;\n if (!Array.isArray(exposures)) return false;\n if (!symbolExposureMetadataValid(\n surface, body, target, exposures.length,\n )) return false;\n return exposures.some((value) => exposureMatches(value, scope));\n}\n\nfunction symbolExposureMetadataValid(\n surface: Record<string, unknown>,\n body: Record<string, unknown>,\n target: PublicSurfaceTarget,\n exposureCount: number,\n): boolean {\n return all([\n surface.schema === 'service-flow/package-public-surface@1',\n body.eligible === true,\n body.reason === target.bodyEligibility.reason,\n surface.recordCap === 256,\n surface.exposureTotal === exposureCount,\n surface.shownExposureCount === exposureCount,\n surface.omittedExposureCount === 0,\n ]);\n}\n\nfunction exposureMatches(\n value: unknown,\n scope: PackagePublicScope,\n): boolean {\n const exposure = record(value);\n return all([\n exposure?.entry === scope.entry,\n exposure?.modulePath === scope.modulePath,\n exposure?.publicName === scope.publicName,\n ]);\n}\n\nfunction resolvedCountsValid(\n evidence: Record<string, unknown>,\n scope: PackagePublicScope,\n repositoryId: number,\n): boolean {\n return evidence.resolvedModulePath === scope.modulePath\n && evidence.resolvedTargetRepositoryId === repositoryId\n && integerField(evidence, 'candidateCount') === scope.candidateCount\n && integerField(evidence, 'eligibleCandidateCount')\n === scope.eligibleCandidateCount\n && integerField(evidence, 'selectedCandidateCount') === 1\n && evidence.candidateSetComplete === true\n && integerField(evidence, 'targetRepositoryCandidateCount') === 1;\n}\n\nfunction resolvedProofValid(\n db: Db,\n row: PackageCallRow,\n binding: SymbolImportReference,\n): boolean {\n if (row.calleeSymbolId === null) return false;\n const repositories = targetRepositories(db, row.workspaceId, binding);\n if (repositories.length !== 1 || !repositories[0]) return false;\n const repository = repositories[0];\n const scope = exactPublicScope(repository.surface, binding);\n if (!scope || scope.eligibleCandidateCount !== 1) return false;\n return Boolean(selectedTarget(\n db, row.calleeSymbolId, repository.id, scope,\n )) && resolvedCountsValid(row.evidence, scope, repository.id);\n}\n\nfunction publicSurfaceMatches(\n evidence: Record<string, unknown>,\n expected: PackageCallResolution,\n): boolean {\n const actual = record(evidence.publicSurface);\n if (!expected.publicSurface) return actual === undefined;\n return actual?.total === expected.publicSurface.total\n && actual.shown === expected.publicSurface.shown\n && actual.omitted === expected.publicSurface.omitted;\n}\n\nfunction repositoryCandidatesMatch(\n evidence: Record<string, unknown>,\n expected: PackageCallResolution,\n): boolean {\n const shown = expected.repositoryCandidateIds.slice(0, 5);\n const actual = evidence.targetRepositoryCandidates;\n return evidence.targetRepositoryCandidateCount\n === expected.repositoryCandidateIds.length\n && evidence.shownTargetRepositoryCandidateCount === shown.length\n && evidence.omittedTargetRepositoryCandidateCount\n === expected.repositoryCandidateIds.length - shown.length\n && Array.isArray(actual)\n && actual.length === shown.length\n && shown.every((id, index) =>\n actual[index] === id);\n}\n\nfunction expectedResolutionMatches(\n row: PackageCallRow,\n expected: PackageCallResolution,\n): boolean {\n const evidence = row.evidence;\n return all([\n row.status === expected.status,\n row.calleeSymbolId === expected.id,\n row.unresolvedReason === expected.reason,\n evidence.candidateStrategy === expected.strategy,\n integerField(evidence, 'candidateCount') === expected.candidateCount,\n integerField(evidence, 'eligibleCandidateCount')\n === expected.eligibleCandidateCount,\n integerField(evidence, 'selectedCandidateCount')\n === expected.selectedCandidateCount,\n evidence.candidateSetComplete === expected.candidateSetComplete,\n evidence.unresolvedReason === expected.reason,\n evidence.resolvedModulePath === expected.resolvedModulePath,\n evidence.resolvedTargetRepositoryId === expected.targetRepoId,\n repositoryCandidatesMatch(evidence, expected),\n publicSurfaceMatches(evidence, expected),\n ]);\n}\n\nfunction expectedByCall(\n db: Db,\n rows: readonly PackageCallRow[],\n bindings: ReadonlyMap<number, SymbolImportReference>,\n): Map<number, PackageCallResolution> {\n const result = new Map<number, PackageCallResolution>();\n const workspaces = new Set(rows.map((row) => row.workspaceId));\n for (const workspaceId of workspaces) {\n const inputs = rows.filter((row) => row.workspaceId === workspaceId)\n .flatMap((row) => {\n const binding = bindings.get(row.id);\n return binding ? [{ callId: row.id, binding }] : [];\n });\n for (const expected of expectedPackageImportResolutions(\n db, workspaceId, inputs,\n )) result.set(expected.callId, expected);\n }\n return result;\n}\n\nfunction invalidPackageCallCount(\n db: Db,\n workspaceId: number | undefined,\n phase: PackageFactPhase,\n): number {\n const rows = packageCallRows(db, workspaceId);\n const bindings = new Map(rows.flatMap((row) => {\n const binding = parsePackageImportReference(row.evidence.importBinding);\n return binding ? [[row.id, binding] as const] : [];\n }));\n const expected = expectedByCall(db, rows, bindings);\n return rows.filter((row) => packageCallInvalid(\n db, row, bindings.get(row.id), expected.get(row.id), phase,\n )).length;\n}\n\nfunction packageCallInvalid(\n db: Db,\n row: PackageCallRow,\n binding: SymbolImportReference | undefined,\n expected: PackageCallResolution | undefined,\n phase: PackageFactPhase,\n): boolean {\n if (!binding || !packageProvenanceValid(row, binding)) return true;\n if (row.evidence.candidateStrategy === 'package_import_pending')\n return phase === 'terminal' || !pendingValid(row);\n if (!terminalMatrixValid(row) || !expected) return true;\n if (!expectedResolutionMatches(row, expected)) return true;\n return row.status === 'resolved' && !resolvedProofValid(db, row, binding);\n}\n\nfunction packageProvenanceValid(\n row: PackageCallRow,\n binding: SymbolImportReference,\n): boolean {\n return all([\n row.evidence.relation === 'package_import',\n row.evidence.derivedImportBinding === undefined,\n row.importSource === binding.rawModuleSpecifier,\n row.evidence.targetName === binding.requestedPublicName,\n ]);\n}\n\nfunction derivedPackageInvalidCount(\n db: Db,\n workspaceId?: number,\n): number {\n const rows = db.prepare(`SELECT sc.status,\n sc.unresolved_reason unresolvedReason,\n sc.callee_symbol_id calleeSymbolId,sc.import_source importSource,\n sc.evidence_json evidenceJson\n FROM symbol_calls sc JOIN repositories r ON r.id=sc.repo_id\n WHERE ${currentPredicate('r')}\n AND (json_extract(sc.evidence_json,'$.relation')\n ='package_import_derived_member'\n OR json_extract(sc.evidence_json,\n '$.derivedImportBinding.moduleKind')='package')`).all(\n ANALYZER_VERSION, workspaceId, workspaceId,\n );\n return rows.filter(derivedPackageRowInvalid).length;\n}\n\nfunction derivedPackageRowInvalid(row: Record<string, unknown>): boolean {\n const evidence = parseRecord(row.evidenceJson);\n const binding = evidence\n ? parsePackageImportReference(evidence.derivedImportBinding)\n : undefined;\n if (!evidence || !binding) return true;\n return !all([\n row.importSource === binding.rawModuleSpecifier,\n evidence.relation === 'package_import_derived_member',\n row.status === 'unresolved',\n row.calleeSymbolId === null,\n row.unresolvedReason === 'package_derived_member_provenance_insufficient',\n evidence.candidateStrategy\n === 'package_import_derived_member_unsupported',\n integerField(evidence, 'candidateCount') === 0,\n integerField(evidence, 'eligibleCandidateCount') === 0,\n integerField(evidence, 'selectedCandidateCount') === 0,\n evidence.candidateSetComplete === true,\n evidence.unresolvedReason === row.unresolvedReason,\n evidence.importBinding === undefined,\n derivedPackageTargetValid(evidence, binding),\n ]);\n}\n\nfunction derivedPackageTargetValid(\n evidence: Record<string, unknown>,\n binding: SymbolImportReference,\n): boolean {\n if (typeof binding.referencedMemberName !== 'string') return false;\n const proxy = typeof evidence.proxyVariableName === 'string';\n return evidence.targetName === (proxy\n ? binding.referencedMemberName\n : binding.requestedPublicName);\n}\n\nexport function invalidPackageFactCategories(\n db: Db,\n workspaceId?: number,\n phase: PackageFactPhase = 'pre_package',\n): PackageFactCategoryCount[] {\n return [\n ...category(\n 'repository_package_public_surface_invalid',\n repositorySurfaceInvalidCount(db, workspaceId),\n ),\n ...category(\n 'symbol_package_public_surface_invalid',\n invalidPackageSymbolSurfaceCount(db, workspaceId),\n ),\n ...category(\n 'package_import_fact_or_target_invalid',\n invalidPackageCallCount(db, workspaceId, phase),\n ),\n ...category(\n 'package_derived_member_fact_invalid',\n derivedPackageInvalidCount(db, workspaceId),\n ),\n ...category(\n 'package_import_provenance_marker_invalid',\n nonRelativeImportInvalidCount(db, workspaceId),\n ),\n ];\n}\n","import { posix } from 'node:path';\nimport type { SymbolCallFact } from '../types.js';\nimport type { Db } from './connection.js';\n\nexport interface RelativeSymbolCallResolution {\n id: number | null;\n status: 'resolved' | 'ambiguous' | 'unresolved';\n reason: string | null;\n strategy: string;\n candidateCount: number;\n eligibleCandidateCount: number;\n candidateSetComplete: boolean;\n resolvedModulePath?: string;\n}\n\ninterface TargetRow {\n id: number;\n kind: string;\n sourceFile: string;\n exported: boolean;\n evidenceJson: string | null;\n}\n\ninterface RelativeModuleScope {\n paths: Set<string>;\n ambiguous: boolean;\n}\n\ninterface MappingTarget {\n specifier?: string;\n}\n\ninterface MappedExecutableRows {\n rows: TargetRow[];\n ambiguous: boolean;\n}\n\nconst stripExtension = (value: string): string =>\n value.replace(/\\.(?:ts|tsx|js|jsx|cds)$/, '');\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction parsedRecord(value: string | null): Record<string, unknown> | undefined {\n if (value === null) return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction targetRows(rows: Array<Record<string, unknown>>): TargetRow[] {\n return rows.flatMap((row) =>\n typeof row.id === 'number' && typeof row.kind === 'string'\n && typeof row.sourceFile === 'string'\n && typeof row.exported === 'number'\n ? [{\n id: row.id,\n kind: row.kind,\n sourceFile: row.sourceFile,\n exported: row.exported === 1,\n evidenceJson: typeof row.evidenceJson === 'string'\n ? row.evidenceJson\n : null,\n }]\n : []);\n}\n\nfunction relativeTargets(sourceFile: string, specifier: string): Set<string> {\n const joined = stripExtension(posix.normalize(\n posix.join(posix.dirname(sourceFile), specifier),\n ));\n return new Set([joined, `${joined}/index`]);\n}\n\nfunction relativeModuleScope(\n db: Db,\n repoId: number,\n sourceFile: string,\n specifier: string,\n): RelativeModuleScope {\n const requested = relativeTargets(sourceFile, specifier);\n const rows = db.prepare(`SELECT relative_path relativePath FROM files\n WHERE repo_id=? ORDER BY relative_path COLLATE BINARY`).all(repoId);\n const matched = rows.flatMap((row) =>\n typeof row.relativePath === 'string'\n && requested.has(stripExtension(row.relativePath))\n ? [stripExtension(row.relativePath)] : []);\n return {\n paths: new Set(matched),\n ambiguous: matched.length > 1,\n };\n}\n\nfunction scopedRows(\n rows: readonly TargetRow[],\n paths: ReadonlySet<string>,\n): TargetRow[] {\n return rows.filter((row) => paths.has(stripExtension(row.sourceFile)));\n}\n\nfunction bodyEligible(row: TargetRow): boolean {\n const evidence = parsedRecord(row.evidenceJson);\n const direct = record(evidence?.executableBodyEligibility);\n const surface = record(evidence?.packagePublicSurface);\n const packageBody = record(surface?.bodyEligibility);\n const body = direct ?? packageBody;\n return body?.eligible === true && body.reason === 'body_present';\n}\n\nfunction relativeBinding(\n call: SymbolCallFact,\n): Record<string, unknown> | undefined {\n const binding = record(call.evidence.importBinding);\n return binding?.moduleKind === 'relative'\n && binding.rawModuleSpecifier === call.importSource\n ? binding\n : undefined;\n}\n\nfunction importedHandlerMember(\n call: SymbolCallFact,\n binding = relativeBinding(call),\n): boolean {\n return call.callRole === 'event_subscribe_handler'\n && binding?.referenceShape === 'static_member'\n && typeof binding.importedName === 'string'\n && binding.requestedPublicName === call.calleeLocalName;\n}\n\nfunction handlerMemberPubliclyCarried(\n row: TargetRow,\n binding: Record<string, unknown>,\n): boolean {\n if (row.exported) return true;\n const evidence = parsedRecord(row.evidenceJson);\n return evidence?.source === 'exported_class_instance_member'\n && evidence.exportedClass === binding.importedName;\n}\n\nfunction requiresPublicClassMember(\n relation: unknown,\n call: SymbolCallFact,\n binding: Record<string, unknown>,\n): boolean {\n return relation === 'class_instance_method'\n || importedHandlerMember(call, binding);\n}\n\nfunction resolved(\n row: TargetRow,\n strategy: string,\n candidateCount: number,\n resolvedModulePath: string,\n): RelativeSymbolCallResolution {\n return {\n id: row.id,\n status: 'resolved',\n reason: null,\n strategy,\n candidateCount,\n eligibleCandidateCount: 1,\n candidateSetComplete: true,\n resolvedModulePath,\n };\n}\n\nfunction unresolved(\n strategy: string,\n reason: string,\n candidateCount: number,\n eligibleCandidateCount = 0,\n candidateSetComplete = true,\n): RelativeSymbolCallResolution {\n return {\n id: null,\n status: 'unresolved',\n reason,\n strategy,\n candidateCount,\n eligibleCandidateCount,\n candidateSetComplete,\n };\n}\n\nfunction ambiguous(\n strategy: string,\n reason: string,\n candidateCount: number,\n eligibleCandidateCount: number,\n): RelativeSymbolCallResolution {\n return {\n id: null,\n status: 'ambiguous',\n reason,\n strategy,\n candidateCount,\n eligibleCandidateCount,\n candidateSetComplete: true,\n };\n}\n\nfunction uniqueRows(rows: readonly TargetRow[]): TargetRow[] {\n return [...new Map(rows.map((row) => [row.id, row])).values()]\n .sort((left, right) => left.id - right.id);\n}\n\nfunction executableResolution(\n rows: readonly TargetRow[],\n scoped: readonly TargetRow[],\n modulePath: string | undefined,\n strategy: string,\n ambiguousReason: string,\n): RelativeSymbolCallResolution {\n const eligible = uniqueRows(scoped.filter(bodyEligible));\n if (eligible.length === 1 && eligible[0] && modulePath)\n return resolved(eligible[0], strategy, rows.length, modulePath);\n if (eligible.length > 1) return ambiguous(\n strategy, ambiguousReason, rows.length, eligible.length,\n );\n return unresolved(\n strategy,\n scoped.length > 0\n ? 'relative_import_requested_module_has_no_executable_body'\n : 'relative_import_requested_module_has_no_target',\n rows.length,\n );\n}\n\nfunction qualifiedRows(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n): TargetRow[] {\n return targetRows(db.prepare(`SELECT id,kind,source_file sourceFile,\n exported,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file<>? AND qualified_name=?\n ORDER BY id`).all(repoId, call.sourceFile, call.calleeLocalName));\n}\n\nfunction exportedRows(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n): TargetRow[] {\n return targetRows(db.prepare(`SELECT id,kind,source_file sourceFile,\n exported,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file<>? AND exported=1\n AND (exported_name=? OR name=? OR qualified_name=?)\n ORDER BY id`).all(\n repoId, call.sourceFile,\n call.calleeLocalName, call.calleeLocalName, call.calleeLocalName,\n ));\n}\n\nfunction proxyRows(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n): TargetRow[] {\n return targetRows(db.prepare(`SELECT id,kind,source_file sourceFile,\n exported,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file<>?\n AND (exported_name=? OR name=? OR qualified_name=?)\n ORDER BY id`).all(\n repoId, call.sourceFile,\n call.calleeLocalName, call.calleeLocalName, call.calleeLocalName,\n ));\n}\n\nfunction mappingTarget(row: TargetRow): MappingTarget | undefined {\n const evidence = parsedRecord(row.evidenceJson);\n if (row.kind !== 'object_alias'\n || evidence?.source !== 'exported_object_shorthand') return undefined;\n const specifier = evidence.targetImportSource;\n return typeof specifier === 'string' ? { specifier } : {};\n}\n\nfunction mappingTargetScope(\n db: Db,\n repoId: number,\n row: TargetRow,\n): RelativeModuleScope | undefined {\n const target = mappingTarget(row);\n if (!target) return undefined;\n return target.specifier\n ? relativeModuleScope(db, repoId, row.sourceFile, target.specifier)\n : { paths: new Set([stripExtension(row.sourceFile)]), ambiguous: false };\n}\n\nfunction mappedExecutableRows(\n db: Db,\n repoId: number,\n rows: readonly TargetRow[],\n aliases: readonly TargetRow[],\n): MappedExecutableRows {\n const scopes = aliases.flatMap((alias) => {\n const scope = mappingTargetScope(db, repoId, alias);\n return scope ? [scope] : [];\n });\n if (scopes.some((scope) => scope.ambiguous))\n return { rows: [], ambiguous: true };\n const mapped = scopes.flatMap((scope) => {\n return rows.filter((row) =>\n row.kind !== 'object_alias' && bodyEligible(row)\n && scope.paths.has(stripExtension(row.sourceFile)));\n });\n return { rows: uniqueRows(mapped), ambiguous: false };\n}\n\nfunction proxyResolution(\n db: Db,\n repoId: number,\n rows: readonly TargetRow[],\n scope: RelativeModuleScope,\n): RelativeSymbolCallResolution {\n const scoped = scopedRows(rows, scope.paths);\n const aliases = scoped.filter((row) => mappingTarget(row));\n const mapped = mappedExecutableRows(db, repoId, rows, aliases);\n if (mapped.ambiguous) return unresolved(\n 'proxy_member_exported_object_map',\n 'relative_import_module_resolution_ambiguous',\n rows.length, 0, false,\n );\n const direct = scoped.filter((row) =>\n row.kind !== 'object_alias' && row.exported && bodyEligible(row));\n const eligible = uniqueRows([\n ...direct,\n ...mapped.rows,\n ]);\n const modulePath = [...scope.paths][0];\n const strategy = aliases.length > 0\n ? 'proxy_member_exported_object_map'\n : 'relative_import_path_disambiguated';\n if (eligible.length === 1 && eligible[0] && modulePath)\n return resolved(eligible[0], strategy, rows.length, modulePath);\n if (eligible.length > 1) return ambiguous(\n 'proxy_member_no_global_name_fallback',\n 'multiple_proxy_targets_in_requested_module',\n rows.length,\n eligible.length,\n );\n return unresolved(\n 'proxy_member_no_global_name_fallback',\n scoped.length > 0\n ? 'relative_import_requested_module_has_no_executable_body'\n : 'relative_import_requested_module_has_no_target',\n rows.length,\n );\n}\n\nfunction resolutionRows(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n relation: unknown,\n): TargetRow[] {\n if (relation === 'class_instance_method' || isAccessorCall(relation, call)\n || importedHandlerMember(call))\n return qualifiedRows(\n db, repoId, call,\n );\n if (relation === 'relative_import_proxy_member') return proxyRows(\n db, repoId, call,\n );\n return exportedRows(db, repoId, call);\n}\n\nfunction isAccessorCall(relation: unknown, call: SymbolCallFact): boolean {\n return relation === 'relative_import'\n && call.calleeExpression.includes('().')\n && String(call.calleeLocalName).includes('.');\n}\n\nfunction strategyFor(\n relation: unknown,\n call: SymbolCallFact,\n candidateCount: number,\n): string {\n if (relation === 'class_instance_method')\n return 'relative_import_class_instance_method';\n if (relation === 'relative_import_namespace_member')\n return 'relative_import_namespace_member';\n if (isAccessorCall(relation, call))\n return 'relative_import_static_accessor_instance_method';\n return candidateCount > 1\n ? 'relative_import_path_disambiguated'\n : 'relative_import_exported_exact';\n}\n\nfunction ambiguousReasonFor(\n relation: unknown,\n call: SymbolCallFact,\n): string {\n if (relation === 'class_instance_method')\n return 'multiple_relative_class_targets_in_requested_module';\n if (relation === 'relative_import_namespace_member')\n return 'multiple_namespace_targets_in_requested_module';\n return isAccessorCall(relation, call)\n ? 'multiple_accessor_targets_in_requested_module'\n : 'multiple_exported_targets_in_requested_module';\n}\n\nexport function resolveRelativeSymbolCall(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n relation: unknown,\n): RelativeSymbolCallResolution | undefined {\n if (!call.importSource?.startsWith('.')) return undefined;\n const rows = resolutionRows(db, repoId, call, relation);\n const binding = relativeBinding(call);\n const strategy = strategyFor(relation, call, rows.length);\n if (!binding) return unresolved(\n strategy, 'relative_import_provenance_missing', rows.length,\n );\n if (binding.typeOnly === true) return unresolved(\n strategy, 'relative_import_type_only', rows.length,\n );\n const moduleScope = relativeModuleScope(\n db, repoId, call.sourceFile, call.importSource,\n );\n if (moduleScope.ambiguous) return unresolved(\n strategy, 'relative_import_module_resolution_ambiguous',\n rows.length, 0, false,\n );\n if (relation === 'relative_import_proxy_member')\n return proxyResolution(db, repoId, rows, moduleScope);\n const moduleRows = scopedRows(rows, moduleScope.paths);\n const scoped = binding && requiresPublicClassMember(\n relation, call, binding,\n )\n ? moduleRows.filter((row) => handlerMemberPubliclyCarried(row, binding))\n : moduleRows;\n return executableResolution(\n rows, scoped, [...moduleScope.paths][0],\n strategy, ambiguousReasonFor(relation, call),\n );\n}\n","import type { Db } from './connection.js';\nimport { ANALYZER_VERSION } from '../version.js';\nimport {\n resolveRelativeSymbolCall,\n} from './006-relative-symbol-resolution.js';\nimport type { SymbolCallFact } from '../types.js';\nimport { parseRelativeImportReference } from\n '../parsers/012-package-fact-contract.js';\nimport type { SymbolImportReference } from\n '../parsers/002-symbol-import-bindings.js';\n\nexport interface RelativeFactCategoryCount {\n category: string;\n count: number;\n}\n\ninterface PersistedRelativeCall {\n repoId: number;\n calleeId: number | null;\n status: string;\n reason: string | null;\n fact: SymbolCallFact;\n}\n\ninterface PersistedRelativeRows {\n calls: PersistedRelativeCall[];\n malformedCount: number;\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction nullableNumber(value: unknown): number | null {\n return typeof value === 'number' ? value : null;\n}\n\nfunction all(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nfunction memberReference(binding: SymbolImportReference): boolean {\n return binding.referenceShape !== 'identifier'\n && typeof binding.referencedMemberName === 'string'\n && binding.referencedMemberName.length > 0;\n}\n\nfunction directRelativeProvenance(\n evidence: Record<string, unknown>,\n binding: SymbolImportReference,\n targetName: string,\n): boolean {\n if (evidence.relation !== 'relative_import') return false;\n return binding.referenceShape !== 'namespace_member'\n && targetName === binding.requestedPublicName;\n}\n\nfunction namespaceRelativeProvenance(\n evidence: Record<string, unknown>,\n binding: SymbolImportReference,\n targetName: string,\n): boolean {\n if (evidence.relation !== 'relative_import_namespace_member') return false;\n return binding.referenceShape === 'namespace_member'\n && targetName === binding.requestedPublicName;\n}\n\nfunction derivedRelativeProvenance(\n evidence: Record<string, unknown>,\n binding: SymbolImportReference,\n targetName: string,\n): boolean {\n if (!memberReference(binding)) return false;\n if (evidence.relation === 'class_instance_method')\n return targetName === binding.requestedPublicName\n && evidence.methodName === binding.referencedMemberName;\n if (evidence.relation !== 'relative_import_proxy_member') return false;\n return targetName === binding.referencedMemberName\n && typeof evidence.proxyVariableName === 'string';\n}\n\nfunction relativeProvenanceValid(\n evidence: Record<string, unknown>,\n binding: SymbolImportReference,\n targetName: string,\n): boolean {\n return directRelativeProvenance(evidence, binding, targetName)\n || namespaceRelativeProvenance(evidence, binding, targetName)\n || derivedRelativeProvenance(evidence, binding, targetName);\n}\n\nfunction relativeRows(\n db: Db,\n workspaceId?: number,\n): PersistedRelativeRows {\n const rows = db.prepare(`SELECT sc.*,r.workspace_id workspaceId\n FROM symbol_calls sc JOIN repositories r ON r.id=sc.repo_id\n WHERE r.fact_analyzer_version=?\n AND (? IS NULL OR r.workspace_id=?)\n AND (sc.import_source LIKE '.%'\n OR json_extract(sc.evidence_json,\n '$.importBinding.moduleKind')='relative')\n ORDER BY sc.id`).all(ANALYZER_VERSION, workspaceId, workspaceId);\n const parsed = rows.map(persistedRelativeCall);\n return {\n calls: parsed.flatMap((call) => call ? [call] : []),\n malformedCount: parsed.filter((call) => !call).length,\n };\n}\n\nfunction persistedRelativeCall(\n row: Record<string, unknown>,\n): PersistedRelativeCall | undefined {\n const evidence = parseRecord(row.evidence_json);\n const targetName = evidence?.targetName;\n const binding = evidence\n ? parseRelativeImportReference(evidence.importBinding)\n : undefined;\n if (!evidence || !binding || typeof targetName !== 'string') return undefined;\n if (!all([\n typeof row.repo_id === 'number',\n typeof row.source_file === 'string',\n typeof row.source_line === 'number',\n typeof row.callee_expression === 'string',\n typeof row.call_role === 'string',\n typeof row.status === 'string',\n typeof evidence.caller === 'string',\n row.import_source === binding.rawModuleSpecifier,\n relativeProvenanceValid(evidence, binding, targetName),\n ])) return undefined;\n return persistedCallValue(row, evidence, targetName);\n}\n\nfunction persistedCallValue(\n row: Record<string, unknown>,\n evidence: Record<string, unknown>,\n targetName: string,\n): PersistedRelativeCall {\n return {\n repoId: Number(row.repo_id),\n calleeId: nullableNumber(row.callee_symbol_id),\n status: String(row.status),\n reason: typeof row.unresolved_reason === 'string'\n ? row.unresolved_reason : null,\n fact: {\n callerQualifiedName: String(evidence.caller ?? ''),\n calleeExpression: String(row.callee_expression),\n calleeLocalName: targetName,\n importSource: String(row.import_source),\n sourceFile: String(row.source_file),\n sourceLine: Number(row.source_line),\n callSiteStartOffset: nullableNumber(row.call_site_start_offset)\n ?? undefined,\n callSiteEndOffset: nullableNumber(row.call_site_end_offset)\n ?? undefined,\n callRole: row.call_role === 'event_subscribe_handler'\n ? 'event_subscribe_handler' : 'ordinary_call',\n evidence,\n },\n };\n}\n\nfunction resolutionMatches(db: Db, row: PersistedRelativeCall): boolean {\n const relation = row.fact.evidence.relation;\n const expected = resolveRelativeSymbolCall(\n db, row.repoId, row.fact, relation,\n );\n if (!expected) return false;\n return all([\n row.status === expected.status,\n row.calleeId === expected.id,\n row.reason === expected.reason,\n row.fact.evidence.candidateStrategy === expected.strategy,\n row.fact.evidence.candidateCount === expected.candidateCount,\n row.fact.evidence.eligibleCandidateCount\n === expected.eligibleCandidateCount,\n row.fact.evidence.selectedCandidateCount\n === (expected.status === 'resolved' ? 1 : 0),\n row.fact.evidence.candidateSetComplete\n === expected.candidateSetComplete,\n row.fact.evidence.resolvedModulePath\n === expected.resolvedModulePath,\n row.fact.evidence.unresolvedReason === expected.reason,\n ]);\n}\n\nexport function invalidRelativeFactCategories(\n db: Db,\n workspaceId?: number,\n): RelativeFactCategoryCount[] {\n const rows = relativeRows(db, workspaceId);\n const invalid = rows.malformedCount + rows.calls\n .filter((row) => !resolutionMatches(db, row)).length;\n return invalid > 0\n ? [{ category: 'relative_import_resolution_proof_invalid', count: invalid }]\n : [];\n}\n","import type {\n LexicalScopeFact,\n ServiceBindingReference,\n} from '../types.js';\n\nexport interface BindingProofCall {\n repoId: number;\n bindingId: number | null;\n variableName?: string;\n sourceFile: string;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface BindingProofTarget {\n id: number;\n repoId: number;\n symbolId: number | null;\n variableName: string;\n sourceFile: string;\n startOffset: number;\n endOffset: number;\n ownerResolution: string;\n ownerStartOffset: number | null;\n ownerEndOffset: number | null;\n}\n\ninterface ResolvedBindingProof {\n variableName: string;\n bindingSourceFile: string;\n bindingSiteStartOffset: number;\n bindingSiteEndOffset: number;\n resolutionStrategy: NonNullable<\n ServiceBindingReference['resolutionStrategy']\n >;\n lexicalScopeChain: LexicalScopeFact[];\n bindingScopeIndex: number;\n}\n\nconst scopeKinds = new Set([\n 'source_file', 'module_block', 'function', 'class', 'loop',\n 'case_block', 'block', 'catch',\n]);\nconst strategies = new Set([\n 'lexical_declaration',\n 'lexical_alias_declaration',\n 'deterministic_reaching_assignment',\n]);\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction integer(value: unknown): value is number {\n return Number.isInteger(value);\n}\n\nfunction nonEmpty(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction all(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nexport function validBindingLexicalScope(\n value: unknown,\n): value is LexicalScopeFact {\n const scope = record(value);\n return Boolean(scope && scopeKinds.has(String(scope.kind))\n && integer(scope.startOffset) && integer(scope.endOffset)\n && Number(scope.startOffset) >= 0\n && Number(scope.endOffset) > Number(scope.startOffset));\n}\n\nexport function bindingReferenceCountsValid(\n reference: Record<string, unknown>,\n): boolean {\n const total = reference.scopeChainTotal;\n const shown = reference.scopeChainShown;\n const omitted = reference.scopeChainOmitted;\n return integer(total) && integer(shown) && integer(omitted)\n && total >= 0 && shown >= 0 && omitted >= 0 && shown <= 16\n && shown + omitted === total;\n}\n\nfunction scopeArray(value: unknown): LexicalScopeFact[] | undefined {\n if (!Array.isArray(value) || !value.every(validBindingLexicalScope))\n return undefined;\n return value;\n}\n\nfunction resolvedProofFields(\n call: BindingProofCall,\n reference: Record<string, unknown>,\n): boolean {\n return all([\n reference.status === 'resolved_exact',\n nonEmpty(reference.variableName),\n call.variableName === undefined\n || reference.variableName === call.variableName,\n reference.bindingSourceFile === call.sourceFile,\n integer(reference.bindingSiteStartOffset),\n integer(reference.bindingSiteEndOffset),\n strategies.has(String(reference.resolutionStrategy)),\n reference.reason === undefined,\n ]);\n}\n\nfunction resolvedProof(\n call: BindingProofCall,\n value: unknown,\n): ResolvedBindingProof | undefined {\n const reference = record(value);\n if (!reference || !resolvedProofFields(call, reference)) return undefined;\n const chain = scopeArray(reference.lexicalScopeChain);\n const index = reference.bindingScopeIndex;\n if (!chain || !integer(index) || !resolvedChainValid(\n reference, chain, index,\n )) return undefined;\n if (!resolvedProofValuesValid(reference)) return undefined;\n return {\n variableName: reference.variableName,\n bindingSourceFile: reference.bindingSourceFile,\n bindingSiteStartOffset: reference.bindingSiteStartOffset,\n bindingSiteEndOffset: reference.bindingSiteEndOffset,\n resolutionStrategy: reference.resolutionStrategy,\n lexicalScopeChain: chain,\n bindingScopeIndex: index,\n };\n}\n\nfunction resolvedProofValuesValid(\n value: Record<string, unknown>,\n): value is Record<string, unknown> & {\n variableName: string;\n bindingSourceFile: string;\n bindingSiteStartOffset: number;\n bindingSiteEndOffset: number;\n resolutionStrategy: ResolvedBindingProof['resolutionStrategy'];\n} {\n return all([\n nonEmpty(value.variableName),\n nonEmpty(value.bindingSourceFile),\n integer(value.bindingSiteStartOffset),\n integer(value.bindingSiteEndOffset),\n strategies.has(String(value.resolutionStrategy)),\n ]);\n}\n\nfunction resolvedChainValid(\n reference: Record<string, unknown>,\n chain: readonly LexicalScopeFact[],\n index: number,\n): boolean {\n return all([\n index >= 0,\n index < chain.length,\n chain[0]?.kind === 'source_file',\n bindingReferenceCountsValid(reference),\n reference.scopeChainShown === chain.length,\n reference.scopeChainOmitted === 0,\n ]);\n}\n\nfunction contains(\n scope: LexicalScopeFact,\n startOffset: number,\n endOffset: number,\n): boolean {\n return scope.startOffset <= startOffset && scope.endOffset >= endOffset;\n}\n\nfunction strictlyNested(scopes: readonly LexicalScopeFact[]): boolean {\n return scopes.every((scope, index) => {\n const child = scopes[index + 1];\n return !child || contains(scope, child.startOffset, child.endOffset)\n && (scope.startOffset < child.startOffset\n || scope.endOffset > child.endOffset);\n });\n}\n\nfunction deepestContainingScopeIndex(\n chain: readonly LexicalScopeFact[],\n startOffset: number,\n endOffset: number,\n): number {\n let result = -1;\n chain.forEach((scope, index) => {\n if (contains(scope, startOffset, endOffset)) result = index;\n });\n return result;\n}\n\nfunction scopeProofValid(\n call: BindingProofCall,\n reference: ResolvedBindingProof,\n): boolean {\n const chain = reference.lexicalScopeChain;\n const siteStart = reference.bindingSiteStartOffset;\n const siteEnd = reference.bindingSiteEndOffset;\n const scopeIndex = reference.bindingScopeIndex;\n const deepest = deepestContainingScopeIndex(chain, siteStart, siteEnd);\n const siteScopeValid = reference.resolutionStrategy\n === 'deterministic_reaching_assignment'\n ? deepest >= scopeIndex\n : deepest === scopeIndex;\n return all([\n siteStart >= 0, siteEnd > siteStart, siteEnd <= call.startOffset,\n strictlyNested(chain),\n chain.every((scope) => contains(scope, call.startOffset, call.endOffset)),\n chain.slice(0, scopeIndex + 1).every((scope) =>\n contains(scope, siteStart, siteEnd)),\n siteScopeValid,\n ]);\n}\n\nfunction ownerCompatible(\n call: BindingProofCall,\n target: BindingProofTarget,\n): boolean {\n if (target.ownerResolution === 'ownerless_file_scope')\n return target.symbolId === null\n && target.ownerStartOffset === null && target.ownerEndOffset === null;\n return all([\n target.ownerResolution === 'owned_exact',\n target.symbolId !== null,\n integer(target.ownerStartOffset),\n integer(target.ownerEndOffset),\n Number(target.ownerStartOffset) <= target.startOffset,\n Number(target.ownerEndOffset) >= target.endOffset,\n Number(target.ownerStartOffset) <= call.startOffset,\n Number(target.ownerEndOffset) >= call.endOffset,\n ]);\n}\n\nfunction targetMatches(\n call: BindingProofCall,\n reference: ResolvedBindingProof,\n target: BindingProofTarget | undefined,\n): boolean {\n if (!target || call.bindingId !== target.id) return false;\n return all([\n target.repoId === call.repoId,\n target.sourceFile === call.sourceFile,\n target.sourceFile === reference.bindingSourceFile,\n target.variableName === reference.variableName,\n target.startOffset === reference.bindingSiteStartOffset,\n target.endOffset === reference.bindingSiteEndOffset,\n ownerCompatible(call, target),\n ]);\n}\n\nexport function resolvedBindingReferenceProofValid(\n call: BindingProofCall,\n referenceValue: unknown,\n target: BindingProofTarget | undefined,\n): boolean {\n const reference = resolvedProof(call, referenceValue);\n return Boolean(reference && scopeProofValid(call, reference)\n && targetMatches(call, reference, target));\n}\n","import type {\n ServiceBindingReferenceReason,\n} from '../types.js';\nimport { ANALYZER_VERSION } from '../version.js';\nimport type { Db } from './connection.js';\nimport {\n bindingReferenceCountsValid,\n resolvedBindingReferenceProofValid,\n validBindingLexicalScope,\n type BindingProofTarget,\n} from './012-binding-reference-proof.js';\n\nexport interface BindingFactCategoryCount {\n category: string;\n count: number;\n}\n\ninterface BindingCall {\n repoId: number;\n sourceSymbolId: number | null;\n bindingId: number | null;\n sourceFile: string;\n startOffset: number;\n endOffset: number;\n evidence: Record<string, unknown>;\n}\n\nconst unresolvedReasons = new Set<ServiceBindingReferenceReason>([\n 'binding_not_found',\n 'binding_declared_after_call',\n 'scope_chain_limit_exceeded',\n 'unsupported_reaching_assignment',\n 'unsupported_var_binding',\n 'binding_flow_unsupported',\n]);\nconst ownerKinds =\n \"'event_registration','callback','method','object_method','function'\";\nconst bindingOwnerSql = `WITH eligible AS (\n SELECT binding.id binding_id,s.id symbol_id,\n DENSE_RANK() OVER (PARTITION BY binding.id ORDER BY\n s.end_offset-s.start_offset,\n CASE s.kind WHEN 'event_registration' THEN 0 WHEN 'callback' THEN 1\n WHEN 'method' THEN 2 WHEN 'object_method' THEN 3 ELSE 4 END,\n s.start_offset,s.end_offset,s.qualified_name COLLATE BINARY) owner_rank\n FROM service_bindings binding\n JOIN repositories repo ON repo.id=binding.repo_id\n JOIN symbols s ON s.repo_id=binding.repo_id\n AND s.source_file=binding.source_file\n AND s.kind IN (${ownerKinds})\n AND s.start_offset<=binding.binding_site_start_offset\n AND s.end_offset>=binding.binding_site_end_offset\n WHERE repo.fact_analyzer_version=?\n AND (? IS NULL OR repo.workspace_id=?)\n), best AS (\n SELECT binding_id,COUNT(*) best_count,MAX(symbol_id) symbol_id\n FROM eligible WHERE owner_rank=1 GROUP BY binding_id\n)\nSELECT COUNT(*) count FROM service_bindings binding\nJOIN repositories repo ON repo.id=binding.repo_id\nLEFT JOIN best ON best.binding_id=binding.id\nWHERE repo.fact_analyzer_version=?\n AND (? IS NULL OR repo.workspace_id=?)\n AND ((best.binding_id IS NULL AND (\n binding.symbol_id IS NOT NULL\n OR binding.owner_resolution<>'ownerless_file_scope'))\n OR (best.binding_id IS NOT NULL AND (\n best.best_count<>1 OR binding.symbol_id IS NOT best.symbol_id\n OR binding.owner_resolution<>'owned_exact')))`;\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction integer(value: unknown): value is number {\n return Number.isInteger(value);\n}\n\nfunction nonEmpty(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction all(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nfunction currentParameters(workspaceId?: number): unknown[] {\n return [ANALYZER_VERSION, workspaceId, workspaceId];\n}\n\nfunction category(\n name: string,\n count: number,\n): BindingFactCategoryCount[] {\n return count > 0 ? [{ category: name, count }] : [];\n}\n\nfunction bindingTargets(\n db: Db,\n workspaceId?: number,\n): Map<number, BindingProofTarget> {\n const rows = db.prepare(`SELECT binding.id,binding.repo_id repoId,\n binding.symbol_id symbolId,binding.variable_name variableName,\n binding.source_file sourceFile,\n binding.binding_site_start_offset startOffset,\n binding.binding_site_end_offset endOffset,\n binding.owner_resolution ownerResolution,\n owner.start_offset ownerStartOffset,owner.end_offset ownerEndOffset\n FROM service_bindings binding\n JOIN repositories repo ON repo.id=binding.repo_id\n LEFT JOIN symbols owner ON owner.id=binding.symbol_id\n WHERE repo.fact_analyzer_version=?\n AND (? IS NULL OR repo.workspace_id=?)`).all(\n ...currentParameters(workspaceId),\n );\n return new Map(rows.flatMap(bindingTarget).map((item) => [item.id, item]));\n}\n\nfunction bindingTarget(\n row: Record<string, unknown>,\n): BindingProofTarget[] {\n if (!bindingTargetShapeValid(row)) return [];\n return [{\n id: row.id,\n repoId: row.repoId,\n symbolId: row.symbolId,\n variableName: row.variableName,\n sourceFile: row.sourceFile,\n startOffset: row.startOffset,\n endOffset: row.endOffset,\n ownerResolution: row.ownerResolution,\n ownerStartOffset: row.ownerStartOffset,\n ownerEndOffset: row.ownerEndOffset,\n }];\n}\n\nfunction nullableInteger(value: unknown): boolean {\n return value === null || integer(value);\n}\n\nfunction bindingTargetShapeValid(\n row: Record<string, unknown>,\n): row is Record<string, unknown> & {\n id: number;\n repoId: number;\n symbolId: number | null;\n variableName: string;\n sourceFile: string;\n startOffset: number;\n endOffset: number;\n ownerResolution: string;\n ownerStartOffset: number | null;\n ownerEndOffset: number | null;\n} {\n return all([\n integer(row.id), integer(row.repoId),\n nonEmpty(row.variableName), nonEmpty(row.sourceFile),\n integer(row.startOffset), integer(row.endOffset),\n typeof row.ownerResolution === 'string',\n nullableInteger(row.symbolId),\n nullableInteger(row.ownerStartOffset),\n nullableInteger(row.ownerEndOffset),\n ]);\n}\n\nfunction bindingCalls(db: Db, workspaceId?: number): BindingCall[] {\n const rows = db.prepare(`SELECT call.repo_id repoId,\n call.source_symbol_id sourceSymbolId,\n call.service_binding_id bindingId,call.source_file sourceFile,\n call.call_site_start_offset startOffset,\n call.call_site_end_offset endOffset,call.evidence_json evidenceJson\n FROM outbound_calls call JOIN repositories repo ON repo.id=call.repo_id\n WHERE repo.fact_analyzer_version=?\n AND (? IS NULL OR repo.workspace_id=?)`).all(\n ...currentParameters(workspaceId),\n );\n return rows.flatMap(bindingCall);\n}\n\nfunction currentFactCount(\n db: Db,\n table: 'service_bindings' | 'outbound_calls',\n workspaceId?: number,\n): number {\n const row = db.prepare(`SELECT COUNT(*) count FROM ${table} fact\n JOIN repositories repo ON repo.id=fact.repo_id\n WHERE repo.fact_analyzer_version=?\n AND (? IS NULL OR repo.workspace_id=?)`).get(\n ...currentParameters(workspaceId),\n );\n return Number(row?.count ?? 0);\n}\n\nfunction bindingCall(row: Record<string, unknown>): BindingCall[] {\n const evidence = parseRecord(row.evidenceJson);\n if (!integer(row.repoId) || !nonEmpty(row.sourceFile)\n || !integer(row.startOffset) || !integer(row.endOffset) || !evidence\n || !(row.sourceSymbolId === null || integer(row.sourceSymbolId))\n || !(row.bindingId === null || integer(row.bindingId))) return [];\n return [{\n repoId: row.repoId,\n sourceSymbolId: row.sourceSymbolId,\n bindingId: row.bindingId,\n sourceFile: row.sourceFile,\n startOffset: row.startOffset,\n endOffset: row.endOffset,\n evidence,\n }];\n}\n\nfunction rejectedFieldsAbsent(\n reference: Record<string, unknown>,\n): boolean {\n return all([\n reference.bindingSourceFile === undefined,\n reference.bindingSiteStartOffset === undefined,\n reference.bindingSiteEndOffset === undefined,\n reference.resolutionStrategy === undefined,\n reference.bindingScopeIndex === undefined,\n ]);\n}\n\nfunction rejectedChainValid(\n reference: Record<string, unknown>,\n): boolean {\n const chain = reference.lexicalScopeChain;\n if (!bindingReferenceCountsValid(reference)) return false;\n if (Array.isArray(chain) && !chain.every(validBindingLexicalScope))\n return false;\n return !Array.isArray(chain)\n || reference.scopeChainShown === chain.length;\n}\n\nfunction rejectedReasonValid(\n reference: Record<string, unknown>,\n): boolean {\n const reason = reference.reason as ServiceBindingReferenceReason;\n const limitExceeded = reason === 'scope_chain_limit_exceeded';\n if (limitExceeded\n ? reference.scopeChainShown !== 16\n || Number(reference.scopeChainOmitted) <= 0\n : reference.scopeChainOmitted !== 0) return false;\n if (reference.status === 'ambiguous')\n return reason === 'binding_scope_ambiguous';\n return reference.status === 'unresolved' && unresolvedReasons.has(reason);\n}\n\nfunction rejectedShape(\n call: BindingCall,\n reference: Record<string, unknown>,\n): boolean {\n return all([\n nonEmpty(reference.variableName),\n call.bindingId === null,\n rejectedFieldsAbsent(reference),\n rejectedChainValid(reference),\n rejectedReasonValid(reference),\n ]);\n}\n\nfunction notApplicableShape(\n call: BindingCall,\n reference: Record<string, unknown>,\n): boolean {\n return all([\n call.bindingId === null,\n reference.variableName === undefined,\n reference.reason === undefined,\n rejectedFieldsAbsent(reference),\n reference.lexicalScopeChain === undefined,\n bindingReferenceCountsValid(reference),\n reference.scopeChainTotal === 0,\n reference.scopeChainShown === 0,\n reference.scopeChainOmitted === 0,\n ]);\n}\n\nfunction resolutionEvidenceValid(\n call: BindingCall,\n reference: Record<string, unknown>,\n): boolean {\n const resolution = record(call.evidence.serviceBindingResolution);\n if (!resolution) return false;\n if (reference.status === 'resolved_exact')\n return resolution.status === 'selected_exact'\n && resolution.selectedBindingId === call.bindingId\n && resolution.candidateCount === 1;\n return resolution.status === reference.status\n && resolution.candidateCount === 0\n && resolution.selectedBindingId === undefined;\n}\n\nfunction referenceValid(\n call: BindingCall,\n targets: ReadonlyMap<number, BindingProofTarget>,\n): boolean {\n const reference = record(call.evidence.serviceBindingReference);\n if (!reference || !resolutionEvidenceValid(call, reference)) return false;\n if (reference.status === 'not_applicable')\n return notApplicableShape(call, reference);\n if (reference.status === 'ambiguous' || reference.status === 'unresolved')\n return rejectedShape(call, reference);\n if (reference.status !== 'resolved_exact') return false;\n return resolvedBindingReferenceProofValid(\n call,\n reference,\n call.bindingId === null ? undefined : targets.get(call.bindingId),\n );\n}\n\nfunction invalidOwnerCount(db: Db, workspaceId?: number): number {\n const params = currentParameters(workspaceId);\n const row = db.prepare(bindingOwnerSql).get(...params, ...params);\n return Number(row?.count ?? 0);\n}\n\nexport function invalidBindingFactCategories(\n db: Db,\n workspaceId?: number,\n): BindingFactCategoryCount[] {\n const targets = bindingTargets(db, workspaceId);\n const calls = bindingCalls(db, workspaceId);\n const invalidReferences = calls.filter((call) =>\n !referenceValid(call, targets)).length;\n const malformedTargets = currentFactCount(\n db, 'service_bindings', workspaceId,\n ) - targets.size;\n const malformedCalls = currentFactCount(\n db, 'outbound_calls', workspaceId,\n ) - calls.length;\n return [\n ...category('service_binding_row_shape_invalid', malformedTargets),\n ...category('outbound_binding_row_shape_invalid', malformedCalls),\n ...category('service_binding_unique_owner_invalid',\n invalidOwnerCount(db, workspaceId)),\n ...category('outbound_binding_lexical_proof_invalid', invalidReferences),\n ];\n}\n","import type { ExecutableSymbolFact } from '../types.js';\n\nexport const executableOwnerKinds = [\n 'event_registration',\n 'callback',\n 'method',\n 'object_method',\n 'function',\n] as const;\n\ntype ExecutableOwnerKind = typeof executableOwnerKinds[number];\n\nexport interface OwnerCandidate {\n kind: string;\n qualifiedName: string;\n startOffset: number;\n endOffset: number;\n}\n\nexport interface OwnerSelection<T extends OwnerCandidate> {\n status: 'resolved' | 'none' | 'ambiguous';\n owner?: T;\n eligibleCount: number;\n}\n\nconst kindRank = new Map<ExecutableOwnerKind, number>(\n executableOwnerKinds.map((kind, index) => [kind, index]),\n);\n\nexport function binaryCompare(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nexport function containsHalfOpen(\n containerStart: number,\n containerEnd: number,\n childStart: number,\n childEnd: number,\n): boolean {\n return containerStart <= childStart && containerEnd >= childEnd;\n}\n\nexport function isExecutableOwnerKind(kind: string): kind is ExecutableOwnerKind {\n return kindRank.has(kind as ExecutableOwnerKind);\n}\n\nfunction ownerIdentity(candidate: OwnerCandidate): string {\n return [\n candidate.kind,\n candidate.startOffset,\n candidate.endOffset,\n candidate.qualifiedName,\n ].join('\\u0000');\n}\n\nfunction compareOwners(left: OwnerCandidate, right: OwnerCandidate): number {\n return (left.endOffset - left.startOffset) - (right.endOffset - right.startOffset)\n || (kindRank.get(left.kind as ExecutableOwnerKind) ?? 99)\n - (kindRank.get(right.kind as ExecutableOwnerKind) ?? 99)\n || left.startOffset - right.startOffset\n || left.endOffset - right.endOffset\n || binaryCompare(left.qualifiedName, right.qualifiedName);\n}\n\nfunction exactRegistration<T extends OwnerCandidate>(\n candidates: T[],\n callStart: number,\n callEnd: number,\n): T[] {\n return candidates.filter((candidate) =>\n candidate.kind === 'event_registration'\n && candidate.startOffset === callStart\n && candidate.endOffset === callEnd);\n}\n\nexport function selectCallOwner<T extends OwnerCandidate>(\n candidates: readonly T[],\n callStart: number,\n callEnd: number,\n preferExactRegistration = false,\n): OwnerSelection<T> {\n const contained = candidates.filter((candidate) =>\n isExecutableOwnerKind(candidate.kind)\n && containsHalfOpen(\n candidate.startOffset, candidate.endOffset, callStart, callEnd,\n ));\n const eligible = preferExactRegistration\n ? exactRegistration(contained, callStart, callEnd)\n : contained;\n const pool = eligible;\n if (pool.length === 0) return { status: 'none', eligibleCount: 0 };\n const ordered = [...pool].sort(compareOwners);\n const first = ordered[0];\n if (!first) return { status: 'none', eligibleCount: 0 };\n const duplicates = ordered.filter((candidate) =>\n ownerIdentity(candidate) === ownerIdentity(first));\n if (duplicates.length > 1)\n return { status: 'ambiguous', eligibleCount: pool.length };\n return { status: 'resolved', owner: first, eligibleCount: pool.length };\n}\n\nexport function executableSymbolCandidates(\n symbols: readonly ExecutableSymbolFact[],\n sourceFile: string,\n): ExecutableSymbolFact[] {\n return symbols.filter((symbol) =>\n symbol.sourceFile === sourceFile && isExecutableOwnerKind(symbol.kind));\n}\n","import type { OutboundCallFact, SymbolCallFact } from '../types.js';\nimport {\n selectCallOwner,\n type OwnerCandidate,\n type OwnerSelection,\n} from '../parsers/004-fact-identity.js';\nimport type { Db, Statement } from './connection.js';\nimport {\n resolveRelativeSymbolCall,\n} from './006-relative-symbol-resolution.js';\nimport {\n parsePackageImportReference,\n} from '../parsers/012-package-fact-contract.js';\nimport {\n resolvedBindingReferenceProofValid,\n type BindingProofCall,\n type BindingProofTarget,\n} from './012-binding-reference-proof.js';\n\nexport function insertSymbolCalls(db: Db, repoId: number, rows: SymbolCallFact[]): void {\n const insertStmt = db.prepare('INSERT INTO symbol_calls(repo_id,caller_symbol_id,callee_symbol_id,callee_expression,import_source,source_file,source_line,call_site_start_offset,call_site_end_offset,call_role,status,confidence,evidence_json,unresolved_reason) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)');\n for (const r of rows) {\n assertImportProvenance(r);\n const callerId = requiredSymbolCallOwnerId(db, repoId, r);\n const target = resolveSymbolCallTarget(db, repoId, r);\n const cardinality = resolutionCardinality(target);\n insertStmt.run(\n repoId,\n callerId,\n target.id,\n r.calleeExpression,\n r.importSource,\n r.sourceFile,\n r.sourceLine,\n r.callSiteStartOffset,\n r.callSiteEndOffset,\n r.callRole,\n target.status,\n 0.8,\n JSON.stringify({\n ...r.evidence,\n candidateStrategy: target.strategy,\n candidateCount: target.candidateCount,\n eligibleCandidateCount: cardinality.eligibleCandidateCount,\n selectedCandidateCount: cardinality.selectedCandidateCount,\n candidateSetComplete: cardinality.candidateSetComplete,\n unresolvedReason: target.reason,\n resolvedModulePath: target.resolvedModulePath,\n }),\n target.reason,\n );\n }\n}\n\nfunction assertImportProvenance(call: SymbolCallFact): void {\n if (call.importSource === undefined || call.importSource.startsWith('.'))\n return;\n const direct = directPackageProvenanceValid(call);\n const derived = derivedPackageProvenanceValid(call);\n if (!direct && !derived)\n throw new Error(\n 'invalid_prepared_repository_snapshot:package_import_provenance_missing',\n );\n}\n\nfunction directPackageProvenanceValid(call: SymbolCallFact): boolean {\n const binding = parsePackageImportReference(call.evidence.importBinding);\n return Boolean(binding\n && call.evidence.relation === 'package_import'\n && call.evidence.derivedImportBinding === undefined\n && call.importSource === binding.rawModuleSpecifier\n && call.evidence.targetName === binding.requestedPublicName);\n}\n\nfunction derivedPackageProvenanceValid(call: SymbolCallFact): boolean {\n const binding = parsePackageImportReference(\n call.evidence.derivedImportBinding,\n );\n if (!binding || typeof binding.referencedMemberName !== 'string')\n return false;\n const expected = typeof call.evidence.proxyVariableName === 'string'\n ? binding.referencedMemberName : binding.requestedPublicName;\n return call.evidence.relation === 'package_import_derived_member'\n && call.evidence.importBinding === undefined\n && call.importSource === binding.rawModuleSpecifier\n && call.evidence.targetName === expected;\n}\n\ninterface SymbolTargetRow {\n id: number;\n kind?: string;\n sourceFile?: string | null;\n evidenceJson?: string | null;\n}\n\ninterface SymbolCallResolution {\n id: number | null;\n status: 'resolved' | 'ambiguous' | 'unresolved';\n reason: string | null;\n strategy: string;\n candidateCount: number;\n eligibleCandidateCount: number;\n candidateSetComplete: boolean;\n resolvedModulePath?: string;\n}\n\ninterface PersistedOwnerCandidate extends OwnerCandidate {\n id: number;\n}\n\nfunction persistedCallOwners(\n db: Db,\n repoId: number,\n sourceFile: string,\n start: number | undefined,\n end: number | undefined,\n): PersistedOwnerCandidate[] {\n if (start === undefined || end === undefined) return [];\n const rows = db.prepare(`SELECT id,kind,qualified_name qualifiedName,\n start_offset startOffset,end_offset endOffset FROM symbols\n WHERE repo_id=? AND source_file=? AND start_offset<=? AND end_offset>=?`)\n .all(repoId, sourceFile, start, end);\n return rows.flatMap(persistedOwnerCandidate);\n}\n\nfunction persistedOwnerCandidate(\n row: Record<string, unknown>,\n): PersistedOwnerCandidate[] {\n if (typeof row.id !== 'number' || typeof row.kind !== 'string'\n || typeof row.qualifiedName !== 'string'\n || typeof row.startOffset !== 'number'\n || typeof row.endOffset !== 'number') return [];\n return [{\n id: row.id,\n kind: row.kind,\n qualifiedName: row.qualifiedName,\n startOffset: row.startOffset,\n endOffset: row.endOffset,\n }];\n}\n\nfunction requiredSymbolCallOwnerId(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n): number {\n const candidates = persistedCallOwners(\n db, repoId, call.sourceFile,\n call.callSiteStartOffset, call.callSiteEndOffset,\n );\n const selected = selectCallOwner(\n candidates,\n call.callSiteStartOffset ?? -1,\n call.callSiteEndOffset ?? -1,\n call.callRole === 'event_subscribe_handler',\n );\n if (selected.status !== 'resolved'\n || selected.owner?.qualifiedName !== call.callerQualifiedName)\n throw new Error('invalid_prepared_repository_snapshot:symbol_call_owner_mismatch');\n return selected.owner.id;\n}\n\nfunction resolutionCardinality(\n target: SymbolCallResolution,\n): {\n eligibleCandidateCount: number;\n selectedCandidateCount: 0 | 1;\n candidateSetComplete: boolean;\n} {\n return {\n eligibleCandidateCount: target.eligibleCandidateCount,\n selectedCandidateCount: target.status === 'resolved' ? 1 : 0,\n candidateSetComplete: target.candidateSetComplete,\n };\n}\n\nfunction symbolTargetRows(rows: Array<Record<string, unknown>>): SymbolTargetRow[] {\n return rows.flatMap((row) => typeof row.id === 'number' ? [{\n id: row.id,\n kind: typeof row.kind === 'string' ? row.kind : undefined,\n sourceFile: typeof row.sourceFile === 'string' ? row.sourceFile : null,\n evidenceJson: typeof row.evidenceJson === 'string'\n ? row.evidenceJson : null,\n }] : []);\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction executableTarget(row: SymbolTargetRow): boolean {\n if (!row.evidenceJson || !row.kind\n || !['function', 'method', 'object_method', 'callback'].includes(row.kind))\n return false;\n try {\n const evidence = record(JSON.parse(row.evidenceJson) as unknown);\n const body = record(evidence?.executableBodyEligibility);\n return body?.eligible === true && body.reason === 'body_present';\n } catch {\n return false;\n }\n}\n\nfunction resolvedSymbol(\n row: SymbolTargetRow,\n strategy: string,\n candidateCount: number,\n eligibleCandidateCount = 1,\n): SymbolCallResolution {\n return {\n id: row.id,\n status: 'resolved',\n reason: null,\n strategy,\n candidateCount,\n eligibleCandidateCount,\n candidateSetComplete: true,\n };\n}\n\nfunction unresolvedSymbol(\n strategy: string,\n reason: string,\n candidateCount: number,\n eligibleCandidateCount = 0,\n candidateSetComplete = true,\n): SymbolCallResolution {\n return {\n id: null,\n status: 'unresolved',\n reason,\n strategy,\n candidateCount,\n eligibleCandidateCount,\n candidateSetComplete,\n };\n}\n\nfunction ambiguousSymbol(\n strategy: string,\n reason: string,\n candidateCount: number,\n eligibleCandidateCount: number,\n): SymbolCallResolution {\n return {\n id: null,\n status: 'ambiguous',\n reason,\n strategy,\n candidateCount,\n eligibleCandidateCount,\n candidateSetComplete: true,\n };\n}\n\nfunction exportedSymbolRows(db: Db, repoId: number, r: SymbolCallFact): SymbolTargetRow[] {\n return symbolTargetRows(db.prepare(`SELECT id,kind,\n source_file sourceFile,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file<>? AND exported=1\n AND (exported_name=? OR name=? OR qualified_name=?)\n ORDER BY id`).all(\n repoId, r.sourceFile,\n r.calleeLocalName, r.calleeLocalName, r.calleeLocalName,\n ));\n}\n\nfunction isRelativeImportedSymbolCall(r: SymbolCallFact): boolean {\n return Boolean(r.importSource?.startsWith('.'));\n}\n\nfunction eligibleSymbolResolution(\n rows: SymbolTargetRow[],\n strategy: string,\n ambiguousReason: string,\n): SymbolCallResolution | undefined {\n if (rows.length === 0) return undefined;\n const eligible = rows.filter(executableTarget);\n if (eligible.length === 1 && eligible[0])\n return resolvedSymbol(eligible[0], strategy, rows.length, 1);\n if (eligible.length > 1) return ambiguousSymbol(\n strategy, ambiguousReason, rows.length, eligible.length,\n );\n return unresolvedSymbol(\n strategy, 'symbol_target_has_no_executable_body', rows.length,\n );\n}\n\nfunction sameFileResolution(\n db: Db,\n repoId: number,\n r: SymbolCallFact,\n relation: unknown,\n): SymbolCallResolution | undefined {\n if (isRelativeImportedSymbolCall(r) || relation === 'package_import')\n return undefined;\n if (relation === 'indexed_local_symbol_unproven')\n return unresolvedSymbol(\n 'exact_symbol_match', 'no_local_symbol_target', 0,\n );\n if (relation === 'indexed_local_symbol'\n && r.evidence.localTargetIdentity !== undefined)\n return exactLocalSymbolResolution(db, repoId, r);\n const rows = symbolTargetRows(db.prepare(`SELECT id,kind,\n source_file sourceFile,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file=?\n AND (name=? OR qualified_name=?) ORDER BY id`).all(\n repoId, r.sourceFile, r.calleeLocalName, r.calleeLocalName,\n ));\n return eligibleSymbolResolution(\n rows, 'same_file_exact', 'multiple_same_file_symbol_targets',\n );\n}\n\nfunction exactLocalSymbolResolution(\n db: Db,\n repoId: number,\n call: SymbolCallFact,\n): SymbolCallResolution {\n const target = record(call.evidence.localTargetIdentity);\n if (!target\n || typeof target.sourceFile !== 'string'\n || typeof target.qualifiedName !== 'string'\n || typeof target.startOffset !== 'number'\n || typeof target.endOffset !== 'number')\n return unresolvedSymbol(\n 'exact_symbol_match', 'no_local_symbol_target', 0,\n );\n const rows = symbolTargetRows(db.prepare(`SELECT id,kind,\n source_file sourceFile,evidence_json evidenceJson FROM symbols\n WHERE repo_id=? AND source_file=? AND qualified_name=?\n AND start_offset=? AND end_offset=? ORDER BY id`).all(\n repoId, target.sourceFile, target.qualifiedName,\n target.startOffset, target.endOffset,\n ));\n return eligibleSymbolResolution(\n rows, 'same_file_exact', 'multiple_same_file_symbol_targets',\n ) ?? unresolvedSymbol(\n 'exact_symbol_match', 'no_local_symbol_target', 0,\n );\n}\n\nfunction exportedResolution(\n rows: SymbolTargetRow[],\n): SymbolCallResolution | undefined {\n return eligibleSymbolResolution(\n rows, 'exported_exact', 'multiple_exported_symbol_targets',\n );\n}\n\nexport function resolveSymbolCallTarget(\n db: Db,\n repoId: number,\n r: SymbolCallFact,\n): SymbolCallResolution {\n const relation = r.evidence.relation;\n const relative = resolveRelativeSymbolCall(db, repoId, r, relation);\n if (relative) return relative;\n const early = sameFileResolution(db, repoId, r, relation);\n if (early) return early;\n if (relation === 'package_import_derived_member') return unresolvedSymbol(\n 'package_import_derived_member_unsupported',\n 'package_derived_member_provenance_insufficient',\n 0,\n );\n if (relation === 'package_import') return unresolvedSymbol(\n 'package_import_pending',\n 'package_resolution_pending',\n 0,\n 0,\n false,\n );\n const matched = exportedResolution(exportedSymbolRows(db, repoId, r));\n if (matched) return matched;\n return unresolvedSymbol(\n 'exact_symbol_match',\n 'no_local_symbol_target',\n 0,\n );\n}\n\nexport function insertCalls(\n db: Db,\n repoId: number,\n rows: OutboundCallFact[],\n): void {\n const stmt = outboundCallInsertStatement(db);\n for (const row of rows) insertOutboundCall(db, stmt, repoId, row);\n}\n\nfunction outboundCallInsertStatement(db: Db): Statement {\n return db.prepare(`INSERT INTO outbound_calls(\n repo_id,source_symbol_id,call_type,method,operation_path_expr,query_entity,\n event_name_expr,payload_summary,source_file,source_line,call_site_start_offset,\n call_site_end_offset,confidence,unresolved_reason,local_service_name,\n local_service_lookup,alias_chain_json,evidence_json,external_target_kind,\n external_target_id,external_target_label,external_target_dynamic,service_binding_id\n ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`);\n}\n\nfunction insertOutboundCall(\n db: Db,\n stmt: Statement,\n repoId: number,\n call: OutboundCallFact,\n): void {\n const sourceSymbolId = outboundOwnerId(db, repoId, call);\n const binding = resolvePersistedBinding(db, repoId, call);\n const external = externalTargetValues(call.externalTarget);\n const evidence = {\n ...(call.evidence ?? {}),\n serviceBindingReference: binding.reference,\n serviceBindingResolution: binding.resolution,\n };\n stmt.run(\n repoId, sourceSymbolId,\n call.callType, call.method, call.operationPathExpr, call.queryEntity,\n call.eventNameExpr, call.payloadSummary, call.sourceFile, call.sourceLine,\n call.callSiteStartOffset, call.callSiteEndOffset, call.confidence,\n call.unresolvedReason,\n call.localServiceName, call.localServiceLookup,\n serializedAliasChain(call.aliasChain),\n JSON.stringify(evidence), external.kind, external.stableId, external.label,\n external.dynamic, binding.bindingId,\n );\n}\n\nfunction serializedAliasChain(\n aliasChain: OutboundCallFact['aliasChain'],\n): string | null {\n return aliasChain ? JSON.stringify(aliasChain) : null;\n}\n\nfunction externalTargetValues(\n target: OutboundCallFact['externalTarget'],\n): { kind: string | null; stableId: string | null; label: string | null;\n dynamic: number } {\n if (!target) return { kind: null, stableId: null, label: null, dynamic: 0 };\n return {\n kind: target.kind, stableId: target.stableId, label: target.label,\n dynamic: target.dynamic ? 1 : 0,\n };\n}\n\ninterface PersistedBinding {\n id: number;\n symbolId?: number | null;\n variableName: string;\n sourceFile: string;\n siteStart: number;\n siteEnd: number;\n ownerResolution: string;\n ownerStartOffset: number | null;\n ownerEndOffset: number | null;\n}\n\nfunction outboundOwnerId(\n db: Db,\n repoId: number,\n call: OutboundCallFact,\n): number | null {\n const candidates = persistedCallOwners(\n db, repoId, call.sourceFile,\n call.callSiteStartOffset, call.callSiteEndOffset,\n );\n const selected = selectCallOwner(\n candidates,\n call.callSiteStartOffset ?? -1,\n call.callSiteEndOffset ?? -1,\n call.callType === 'async_subscribe',\n );\n const resolution = call.evidence?.sourceOwnerResolution;\n if (resolution === 'ownerless_file_scope')\n return ownerlessOutboundOwner(selected.status);\n return ownedOutboundOwner(call, resolution, selected);\n}\n\nfunction ownerlessOutboundOwner(status: string): null {\n if (status !== 'none')\n throw new Error('invalid_prepared_repository_snapshot:outbound_owner_mismatch');\n return null;\n}\n\nfunction ownedOutboundOwner(\n call: OutboundCallFact,\n resolution: unknown,\n selected: OwnerSelection<PersistedOwnerCandidate>,\n): number {\n if (resolution !== 'owned_exact' || selected.status !== 'resolved'\n || selected.owner?.qualifiedName !== call.sourceSymbolQualifiedName)\n throw new Error('invalid_prepared_repository_snapshot:outbound_owner_mismatch');\n const owner = selected.owner;\n if (!owner)\n throw new Error('invalid_prepared_repository_snapshot:outbound_owner_mismatch');\n return owner.id;\n}\n\nfunction resolvePersistedBinding(\n db: Db,\n repoId: number,\n call: OutboundCallFact,\n): {\n bindingId: number | null;\n reference: NonNullable<OutboundCallFact['serviceBindingReference']>;\n resolution: Record<string, unknown>;\n} {\n const reference = call.serviceBindingReference;\n if (!reference)\n throw new Error('invalid_prepared_repository_snapshot:binding_reference_missing');\n if (reference.status !== 'resolved_exact')\n return unresolvedBinding(reference);\n const candidates = exactBindingRows(db, repoId, reference);\n const selected = candidates[0];\n if (candidates.length !== 1 || !selected\n || selected.variableName !== call.serviceVariableName)\n throw new Error('invalid_prepared_repository_snapshot:binding_reference_mismatch');\n assertResolvedBindingProof(repoId, call, selected, reference);\n return {\n bindingId: selected.id,\n reference,\n resolution: {\n status: 'selected_exact',\n selectedBindingId: selected.id,\n candidateCount: 1,\n },\n };\n}\n\nfunction bindingProofCall(\n repoId: number,\n call: OutboundCallFact,\n bindingId: number,\n): BindingProofCall {\n if (call.callSiteStartOffset === undefined\n || call.callSiteEndOffset === undefined)\n throw new Error(\n 'invalid_prepared_repository_snapshot:binding_lexical_proof_invalid',\n );\n return {\n repoId,\n bindingId,\n variableName: call.serviceVariableName,\n sourceFile: call.sourceFile,\n startOffset: call.callSiteStartOffset,\n endOffset: call.callSiteEndOffset,\n };\n}\n\nfunction bindingProofTarget(\n repoId: number,\n binding: PersistedBinding,\n): BindingProofTarget {\n return {\n id: binding.id,\n repoId,\n symbolId: binding.symbolId ?? null,\n variableName: binding.variableName,\n sourceFile: binding.sourceFile,\n startOffset: binding.siteStart,\n endOffset: binding.siteEnd,\n ownerResolution: binding.ownerResolution,\n ownerStartOffset: binding.ownerStartOffset,\n ownerEndOffset: binding.ownerEndOffset,\n };\n}\n\nfunction assertResolvedBindingProof(\n repoId: number,\n call: OutboundCallFact,\n binding: PersistedBinding,\n reference: NonNullable<OutboundCallFact['serviceBindingReference']>,\n): void {\n const valid = resolvedBindingReferenceProofValid(\n bindingProofCall(repoId, call, binding.id),\n reference,\n bindingProofTarget(repoId, binding),\n );\n if (!valid)\n throw new Error(\n 'invalid_prepared_repository_snapshot:binding_lexical_proof_invalid',\n );\n}\n\nfunction unresolvedBinding(\n reference: NonNullable<OutboundCallFact['serviceBindingReference']>,\n): {\n bindingId: null;\n reference: NonNullable<OutboundCallFact['serviceBindingReference']>;\n resolution: Record<string, unknown>;\n} {\n return {\n bindingId: null,\n reference,\n resolution: {\n status: reference.status,\n candidateCount: 0,\n },\n };\n}\n\nfunction exactBindingRows(\n db: Db,\n repoId: number,\n reference: NonNullable<OutboundCallFact['serviceBindingReference']>,\n): PersistedBinding[] {\n const rows = db.prepare(`SELECT binding.id,binding.symbol_id symbolId,\n binding.variable_name variableName,binding.source_file sourceFile,\n binding.binding_site_start_offset siteStart,\n binding.binding_site_end_offset siteEnd,\n binding.owner_resolution ownerResolution,\n owner.start_offset ownerStartOffset,owner.end_offset ownerEndOffset\n FROM service_bindings binding\n LEFT JOIN symbols owner ON owner.id=binding.symbol_id\n WHERE binding.repo_id=? AND binding.source_file=?\n AND binding.variable_name=?\n AND binding.binding_site_start_offset=?\n AND binding.binding_site_end_offset=?`).all(\n repoId,\n reference.bindingSourceFile,\n reference.variableName,\n reference.bindingSiteStartOffset,\n reference.bindingSiteEndOffset,\n );\n return rows.flatMap(persistedBindingRow);\n}\n\nfunction persistedBindingRow(\n row: Record<string, unknown>,\n): PersistedBinding[] {\n const ownerStartOffset = nullableOffset(row.ownerStartOffset);\n const ownerEndOffset = nullableOffset(row.ownerEndOffset);\n if (!persistedBindingRequiredValid(row)\n || ownerStartOffset === undefined || ownerEndOffset === undefined) return [];\n return [{\n id: row.id,\n symbolId: row.symbolId === null || typeof row.symbolId === 'number'\n ? row.symbolId : undefined,\n variableName: row.variableName,\n sourceFile: row.sourceFile,\n siteStart: row.siteStart,\n siteEnd: row.siteEnd,\n ownerResolution: row.ownerResolution,\n ownerStartOffset,\n ownerEndOffset,\n }];\n}\n\nfunction nullableOffset(value: unknown): number | null | undefined {\n return value === null || typeof value === 'number' ? value : undefined;\n}\n\nfunction persistedBindingRequiredValid(\n row: Record<string, unknown>,\n): row is Record<string, unknown> & {\n id: number;\n variableName: string;\n sourceFile: string;\n siteStart: number;\n siteEnd: number;\n ownerResolution: string;\n} {\n return [\n typeof row.id === 'number',\n typeof row.variableName === 'string',\n typeof row.sourceFile === 'string',\n typeof row.siteStart === 'number',\n typeof row.siteEnd === 'number',\n typeof row.ownerResolution === 'string',\n ].every(Boolean);\n}\n","import type { SymbolCallFact } from '../types.js';\nimport { ANALYZER_VERSION } from '../version.js';\nimport { resolveSymbolCallTarget } from './000-call-fact-repository.js';\nimport type { Db } from './connection.js';\n\nexport interface SymbolFactCategoryCount {\n category: string;\n count: number;\n}\n\ninterface PersistedSymbolCall {\n repoId: number;\n calleeId: number | null;\n status: string;\n reason: string | null;\n fact: SymbolCallFact;\n}\n\ninterface PersistedSymbolRows {\n calls: PersistedSymbolCall[];\n malformedCount: number;\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : undefined;\n}\n\nfunction parseRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n return record(JSON.parse(value) as unknown);\n } catch {\n return undefined;\n }\n}\n\nfunction nullableNumber(value: unknown): number | null {\n return typeof value === 'number' ? value : null;\n}\n\nfunction allValid(values: readonly boolean[]): boolean {\n return values.every(Boolean);\n}\n\nfunction genericRows(db: Db, workspaceId?: number): PersistedSymbolRows {\n const rows = db.prepare(`SELECT sc.* FROM symbol_calls sc\n JOIN repositories r ON r.id=sc.repo_id\n WHERE r.fact_analyzer_version=?\n AND (? IS NULL OR r.workspace_id=?)\n AND sc.import_source IS NULL\n AND COALESCE(json_extract(sc.evidence_json,'$.relation'),'')\n NOT IN ('package_import','package_import_derived_member')\n AND COALESCE(json_extract(sc.evidence_json,\n '$.importBinding.moduleKind'),'') NOT IN ('relative','package')\n ORDER BY sc.id`).all(ANALYZER_VERSION, workspaceId, workspaceId);\n const parsed = rows.map(persistedSymbolCall);\n return {\n calls: parsed.flatMap((call) => call),\n malformedCount: parsed.filter((call) => call.length === 0).length,\n };\n}\n\nfunction callFieldsValid(\n row: Record<string, unknown>,\n evidence: Record<string, unknown>,\n): boolean {\n return allValid([\n typeof row.repo_id === 'number',\n typeof row.source_file === 'string',\n typeof row.source_line === 'number',\n typeof row.callee_expression === 'string',\n typeof row.call_role === 'string',\n typeof row.status === 'string',\n typeof evidence.caller === 'string',\n typeof evidence.targetName === 'string',\n ]);\n}\n\nfunction persistedSymbolCall(\n row: Record<string, unknown>,\n): PersistedSymbolCall[] {\n const evidence = parseRecord(row.evidence_json);\n if (!evidence || !callFieldsValid(row, evidence)) return [];\n return [{\n repoId: Number(row.repo_id),\n calleeId: nullableNumber(row.callee_symbol_id),\n status: String(row.status),\n reason: typeof row.unresolved_reason === 'string'\n ? row.unresolved_reason : null,\n fact: symbolCallFact(row, evidence),\n }];\n}\n\nfunction symbolCallFact(\n row: Record<string, unknown>,\n evidence: Record<string, unknown>,\n): SymbolCallFact {\n return {\n callerQualifiedName: String(evidence.caller),\n calleeExpression: String(row.callee_expression),\n calleeLocalName: String(evidence.targetName),\n importSource: typeof row.import_source === 'string'\n ? row.import_source : undefined,\n sourceFile: String(row.source_file),\n sourceLine: Number(row.source_line),\n callSiteStartOffset: nullableNumber(row.call_site_start_offset)\n ?? undefined,\n callSiteEndOffset: nullableNumber(row.call_site_end_offset) ?? undefined,\n callRole: row.call_role === 'event_subscribe_handler'\n ? 'event_subscribe_handler' : 'ordinary_call',\n evidence,\n };\n}\n\nfunction resolutionMatches(db: Db, row: PersistedSymbolCall): boolean {\n const expected = resolveSymbolCallTarget(db, row.repoId, row.fact);\n const evidence = row.fact.evidence;\n return allValid([\n row.status === expected.status,\n row.calleeId === expected.id,\n row.reason === expected.reason,\n evidence.candidateStrategy === expected.strategy,\n evidence.candidateCount === expected.candidateCount,\n evidence.eligibleCandidateCount === expected.eligibleCandidateCount,\n evidence.selectedCandidateCount\n === (expected.status === 'resolved' ? 1 : 0),\n evidence.candidateSetComplete === expected.candidateSetComplete,\n evidence.resolvedModulePath === expected.resolvedModulePath,\n evidence.unresolvedReason === expected.reason,\n ]);\n}\n\nexport function invalidSymbolFactCategories(\n db: Db,\n workspaceId?: number,\n): SymbolFactCategoryCount[] {\n const rows = genericRows(db, workspaceId);\n const invalid = rows.malformedCount + rows.calls\n .filter((row) => !resolutionMatches(db, row)).length;\n return invalid > 0\n ? [{ category: 'symbol_call_resolution_proof_invalid', count: invalid }]\n : [];\n}\n","import type { Db } from './connection.js';\nimport type { CallType, RepoKind } from '../types.js';\nimport { ANALYZER_VERSION } from '../version.js';\nimport {\n invalidPackageFactCategories,\n} from './007-package-fact-semantics.js';\nimport {\n invalidRelativeFactCategories,\n} from './008-relative-fact-semantics.js';\nimport {\n invalidBindingFactCategories,\n} from './009-binding-fact-semantics.js';\nimport {\n invalidSymbolFactCategories,\n} from './011-symbol-call-semantics.js';\n\nexport type PackageFactPhase = 'pre_package' | 'terminal';\n\nexport interface FactSemanticCategoryCount {\n category: string;\n count: number;\n}\n\nconst executableKindSql =\n \"'event_registration','callback','method','object_method','function'\";\nconst callTypeAllowlist: Record<CallType, true> = {\n remote_action: true,\n remote_query: true,\n remote_entity_read: true,\n remote_entity_mutation: true,\n remote_entity_delete: true,\n remote_entity_media: true,\n remote_entity_candidate: true,\n local_db_query: true,\n external_http: true,\n async_emit: true,\n async_subscribe: true,\n local_service_call: true,\n unknown: true,\n};\nconst repositoryKindAllowlist: Record<RepoKind, true> = {\n 'cap-service': true,\n 'cap-db-model': true,\n 'helper-package': true,\n mixed: true,\n unknown: true,\n};\nconst symbolStrategies = [\n 'same_file_exact',\n 'exported_exact',\n 'exact_symbol_match',\n 'relative_import_class_instance_method',\n 'relative_import_namespace_member',\n 'relative_import_static_accessor_instance_method',\n 'relative_import_path_disambiguated',\n 'relative_import_exported_exact',\n 'proxy_member_exported_object_map',\n 'proxy_member_no_global_name_fallback',\n 'package_import_pending',\n 'package_import_derived_member_unsupported',\n 'package_public_surface_exact',\n 'package_public_surface_ambiguous',\n 'package_public_surface_unresolved',\n] as const;\nconst symbolReasons = [\n 'multiple_same_file_symbol_targets',\n 'multiple_exported_symbol_targets',\n 'no_local_symbol_target',\n 'symbol_target_has_no_executable_body',\n 'relative_import_provenance_missing',\n 'relative_import_type_only',\n 'relative_import_module_resolution_ambiguous',\n 'relative_import_requested_module_has_no_executable_body',\n 'relative_import_requested_module_has_no_target',\n 'multiple_relative_class_targets_in_requested_module',\n 'multiple_namespace_targets_in_requested_module',\n 'multiple_accessor_targets_in_requested_module',\n 'multiple_exported_targets_in_requested_module',\n 'multiple_proxy_targets_in_requested_module',\n 'package_resolution_pending',\n 'package_derived_member_provenance_insufficient',\n 'package_repository_scope_ambiguous',\n 'package_repository_not_indexed',\n 'package_public_surface_unsupported',\n 'public_surface_evidence_incomplete',\n 'package_binding_type_only',\n 'package_public_scope_duplicate',\n 'package_public_name_not_exposed',\n 'package_public_target_ambiguous',\n 'public_symbol_has_no_executable_body',\n] as const;\nconst incompleteReasons = [\n 'relative_import_provenance_missing',\n 'relative_import_module_resolution_ambiguous',\n 'package_resolution_pending',\n 'package_repository_scope_ambiguous',\n 'package_public_surface_unsupported',\n 'public_surface_evidence_incomplete',\n] as const;\nconst packageStrategies = [\n 'package_import_pending',\n 'package_public_surface_exact',\n 'package_public_surface_ambiguous',\n 'package_public_surface_unresolved',\n] as const;\nconst relativeStrategies = [\n 'relative_import_class_instance_method',\n 'relative_import_namespace_member',\n 'relative_import_static_accessor_instance_method',\n 'relative_import_path_disambiguated',\n 'relative_import_exported_exact',\n 'proxy_member_exported_object_map',\n 'proxy_member_no_global_name_fallback',\n] as const;\nconst simpleStrategies = [\n 'same_file_exact',\n 'exported_exact',\n 'exact_symbol_match',\n] as const;\n\nfunction sqlTextList(values: readonly string[]): string {\n return values.map((value) => `'${value}'`).join(',');\n}\n\nfunction count(\n db: Db,\n sql: string,\n workspaceId?: number,\n predicateCount = 1,\n): number {\n const params = Array.from({ length: predicateCount }, () =>\n [ANALYZER_VERSION, workspaceId, workspaceId]).flat();\n const row = db.prepare(sql).get(...params);\n return Number(row?.count ?? 0);\n}\n\nfunction category(\n categoryName: string,\n categoryCount: number,\n): FactSemanticCategoryCount[] {\n return categoryCount > 0\n ? [{ category: categoryName, count: categoryCount }]\n : [];\n}\n\nfunction currentRepositoryPredicate(alias = 'r'): string {\n return `${alias}.fact_analyzer_version=?\n AND (? IS NULL OR ${alias}.workspace_id=?)`;\n}\n\nfunction repositoryCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n const invalid = count(db, `SELECT COUNT(*) count FROM repositories r\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(r.kind)<>'text' OR r.kind NOT IN (\n ${sqlTextList(Object.keys(repositoryKindAllowlist))}\n ))`, workspaceId);\n return category('repository_kind_invalid', invalid);\n}\n\nfunction operationCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n const invalid = count(db, `SELECT COUNT(*) count\n FROM cds_operations fact\n JOIN cds_services service ON service.id=fact.service_id\n JOIN repositories r ON r.id=service.repo_id\n LEFT JOIN cds_operations base ON base.id=fact.base_operation_id\n LEFT JOIN cds_services base_service ON base_service.id=base.service_id\n LEFT JOIN repositories base_repo ON base_repo.id=base_service.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(fact.operation_type)<>'text'\n OR fact.operation_type NOT IN ('action','function','event')\n OR typeof(fact.operation_name)<>'text'\n OR length(fact.operation_name)=0\n OR typeof(fact.operation_path)<>'text'\n OR length(fact.operation_path)=0\n OR typeof(fact.source_file)<>'text'\n OR length(fact.source_file)=0\n OR typeof(fact.source_line)<>'integer' OR fact.source_line<1\n OR fact.provenance NOT IN ('direct','inherited')\n OR (fact.provenance='direct' AND fact.base_operation_id IS NOT NULL)\n OR (fact.provenance='inherited' AND (\n base.id IS NULL OR COALESCE(service.is_extend,0)<>1\n OR COALESCE(service.extension_base_status,'')<>'resolved'\n OR service.extension_base_service_id IS NULL\n OR service.extension_base_service_id<>base.service_id\n OR COALESCE(base.provenance,'')<>'direct'\n OR base.base_operation_id IS NOT NULL\n OR base_repo.workspace_id IS NULL\n OR base_repo.workspace_id<>r.workspace_id\n OR fact.operation_type<>base.operation_type\n OR fact.operation_name<>base.operation_name\n OR fact.operation_path<>base.operation_path\n OR fact.params_json<>base.params_json\n OR fact.return_type IS NOT base.return_type\n OR fact.source_file<>base.source_file\n OR fact.source_line<>base.source_line)))`, workspaceId);\n return category('cds_operation_semantics_invalid', invalid);\n}\n\nfunction callSpanCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n const outbound = count(db, `SELECT COUNT(*) count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(fact.source_file)<>'text'\n OR length(fact.source_file)=0\n OR typeof(fact.call_site_start_offset)<>'integer'\n OR typeof(fact.call_site_end_offset)<>'integer'\n OR fact.call_site_start_offset<0\n OR fact.call_site_end_offset<=fact.call_site_start_offset)`, workspaceId);\n const callType = count(db, `SELECT COUNT(*) count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(fact.call_type)<>'text'\n OR fact.call_type NOT IN (\n ${sqlTextList(Object.keys(callTypeAllowlist))}\n ))`, workspaceId);\n const symbol = count(db, `SELECT COUNT(*) count\n FROM symbol_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(fact.source_file)<>'text'\n OR length(fact.source_file)=0\n OR typeof(fact.callee_expression)<>'text'\n OR length(fact.callee_expression)=0\n OR typeof(fact.call_site_start_offset)<>'integer'\n OR typeof(fact.call_site_end_offset)<>'integer'\n OR fact.call_site_start_offset<0\n OR fact.call_site_end_offset<=fact.call_site_start_offset\n OR fact.call_role NOT IN ('ordinary_call','event_subscribe_handler'))`, workspaceId);\n return [\n ...category('outbound_call_span_invalid', outbound),\n ...category('outbound_call_type_invalid', callType),\n ...category('symbol_call_span_or_role_invalid', symbol),\n ];\n}\n\nfunction duplicateSymbolCallCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n const duplicate = count(db, `SELECT COUNT(*) count FROM (\n SELECT fact.repo_id,fact.source_file,fact.call_site_start_offset,\n fact.call_site_end_offset,fact.call_role,COUNT(*) duplicate_count\n FROM symbol_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n GROUP BY fact.repo_id,fact.source_file,fact.call_site_start_offset,\n fact.call_site_end_offset,fact.call_role\n HAVING COUNT(*)<>1\n )`, workspaceId);\n return category('symbol_call_site_duplicate', duplicate);\n}\n\nfunction eventNameCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n const invalid = count(db, `SELECT COUNT(*) count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND fact.call_type IN ('async_emit','async_subscribe')\n AND (typeof(fact.event_name_expr)<>'text'\n OR length(fact.event_name_expr)=0)`, workspaceId);\n const duplicate = count(db, `SELECT COUNT(*) count FROM (\n SELECT fact.repo_id,fact.source_file,fact.call_site_start_offset,\n fact.call_site_end_offset,COUNT(*) duplicate_count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND fact.call_type='async_subscribe'\n GROUP BY fact.repo_id,fact.source_file,fact.call_site_start_offset,\n fact.call_site_end_offset HAVING COUNT(*)<>1\n )`, workspaceId);\n return [\n ...category('event_name_invalid', invalid),\n ...category('async_subscription_site_duplicate', duplicate),\n ];\n}\n\nfunction outboundOwnerCount(db: Db, workspaceId?: number): number {\n return count(db, `WITH eligible AS (\n SELECT fact.id fact_id,s.id symbol_id,\n DENSE_RANK() OVER (PARTITION BY fact.id ORDER BY\n CASE WHEN fact.call_type='async_subscribe'\n AND s.kind='event_registration'\n AND s.start_offset=fact.call_site_start_offset\n AND s.end_offset=fact.call_site_end_offset THEN 0 ELSE 1 END,\n s.end_offset-s.start_offset,\n CASE s.kind WHEN 'event_registration' THEN 0 WHEN 'callback' THEN 1\n WHEN 'method' THEN 2 WHEN 'object_method' THEN 3 ELSE 4 END,\n s.start_offset,s.end_offset,s.qualified_name COLLATE BINARY) owner_rank\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n JOIN symbols s ON s.repo_id=fact.repo_id\n AND s.source_file=fact.source_file\n AND s.kind IN (${executableKindSql})\n AND s.start_offset<=fact.call_site_start_offset\n AND s.end_offset>=fact.call_site_end_offset\n AND (fact.call_type<>'async_subscribe'\n OR (s.kind='event_registration'\n AND s.start_offset=fact.call_site_start_offset\n AND s.end_offset=fact.call_site_end_offset))\n WHERE ${currentRepositoryPredicate()}\n ), best AS (\n SELECT fact_id,COUNT(*) best_count,MAX(symbol_id) symbol_id\n FROM eligible WHERE owner_rank=1 GROUP BY fact_id\n )\n SELECT COUNT(*) count FROM outbound_calls fact\n JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN best ON best.fact_id=fact.id\n WHERE ${currentRepositoryPredicate()}\n AND ((best.fact_id IS NULL AND (\n fact.source_symbol_id IS NOT NULL\n OR COALESCE(json_extract(fact.evidence_json,\n '$.sourceOwnerResolution'),'')\n <>'ownerless_file_scope'))\n OR (best.fact_id IS NOT NULL AND (\n best.best_count<>1 OR fact.source_symbol_id IS NOT best.symbol_id\n OR COALESCE(json_extract(fact.evidence_json,\n '$.sourceOwnerResolution'),'')<>'owned_exact')))`, workspaceId, 2);\n}\n\nfunction symbolOwnerCount(db: Db, workspaceId?: number): number {\n return count(db, `WITH eligible AS (\n SELECT fact.id fact_id,s.id symbol_id,\n DENSE_RANK() OVER (PARTITION BY fact.id ORDER BY\n CASE WHEN fact.call_role='event_subscribe_handler'\n AND s.kind='event_registration'\n AND s.start_offset=fact.call_site_start_offset\n AND s.end_offset=fact.call_site_end_offset THEN 0 ELSE 1 END,\n s.end_offset-s.start_offset,\n CASE s.kind WHEN 'event_registration' THEN 0 WHEN 'callback' THEN 1\n WHEN 'method' THEN 2 WHEN 'object_method' THEN 3 ELSE 4 END,\n s.start_offset,s.end_offset,s.qualified_name COLLATE BINARY) owner_rank\n FROM symbol_calls fact JOIN repositories r ON r.id=fact.repo_id\n JOIN symbols s ON s.repo_id=fact.repo_id\n AND s.source_file=fact.source_file\n AND s.kind IN (${executableKindSql})\n AND s.start_offset<=fact.call_site_start_offset\n AND s.end_offset>=fact.call_site_end_offset\n AND (fact.call_role<>'event_subscribe_handler'\n OR (s.kind='event_registration'\n AND s.start_offset=fact.call_site_start_offset\n AND s.end_offset=fact.call_site_end_offset))\n WHERE ${currentRepositoryPredicate()}\n ), best AS (\n SELECT fact_id,COUNT(*) best_count,MAX(symbol_id) symbol_id\n FROM eligible WHERE owner_rank=1 GROUP BY fact_id\n )\n SELECT COUNT(*) count FROM symbol_calls fact\n JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN best ON best.fact_id=fact.id\n LEFT JOIN symbols selected ON selected.id=best.symbol_id\n WHERE ${currentRepositoryPredicate()}\n AND (best.fact_id IS NULL OR best.best_count<>1\n OR fact.caller_symbol_id IS NOT best.symbol_id\n OR typeof(json_extract(fact.evidence_json,'$.caller'))<>'text'\n OR json_extract(fact.evidence_json,'$.caller') COLLATE BINARY\n <>selected.qualified_name COLLATE BINARY)`, workspaceId, 2);\n}\n\nfunction ownerCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n return [\n ...category('outbound_call_owner_invalid',\n outboundOwnerCount(db, workspaceId)),\n ...category('symbol_call_owner_invalid',\n symbolOwnerCount(db, workspaceId)),\n ];\n}\n\nfunction bindingSiteCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count\n FROM service_bindings fact JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN symbols owner ON owner.id=fact.symbol_id\n WHERE ${currentRepositoryPredicate()}\n AND (typeof(fact.binding_site_start_offset)<>'integer'\n OR typeof(fact.binding_site_end_offset)<>'integer'\n OR typeof(fact.source_file)<>'text'\n OR length(fact.source_file)=0\n OR typeof(fact.variable_name)<>'text'\n OR length(fact.variable_name)=0\n OR fact.binding_site_start_offset<0\n OR fact.binding_site_end_offset<=fact.binding_site_start_offset\n OR fact.owner_resolution NOT IN\n ('owned_exact','ownerless_file_scope')\n OR (fact.owner_resolution='owned_exact' AND (\n owner.id IS NULL OR owner.repo_id<>fact.repo_id\n OR owner.source_file<>fact.source_file\n OR owner.kind NOT IN (${executableKindSql})\n OR owner.start_offset>fact.binding_site_start_offset\n OR owner.end_offset<fact.binding_site_end_offset))\n OR (fact.owner_resolution='ownerless_file_scope'\n AND fact.symbol_id IS NOT NULL))`, workspaceId);\n}\n\nfunction duplicateBindingSiteCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count FROM (\n SELECT fact.repo_id,fact.source_file,fact.variable_name,\n fact.binding_site_start_offset,fact.binding_site_end_offset,COUNT(*) total\n FROM service_bindings fact JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n GROUP BY fact.repo_id,fact.source_file,fact.variable_name,\n fact.binding_site_start_offset,fact.binding_site_end_offset\n HAVING COUNT(*)<>1\n )`, workspaceId);\n}\n\nfunction bindingCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n return [\n ...category('service_binding_site_or_owner_invalid',\n bindingSiteCount(db, workspaceId)),\n ...category('service_binding_exact_site_duplicate',\n duplicateBindingSiteCount(db, workspaceId)),\n ...category('outbound_binding_reference_invalid',\n bindingReferenceCount(db, workspaceId)),\n ];\n}\n\nfunction bindingReferenceCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN service_bindings binding ON binding.id=fact.service_binding_id\n WHERE ${currentRepositoryPredicate()}\n AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.serviceBindingReference.status'),'')\n NOT IN ('resolved_exact','ambiguous','unresolved','not_applicable')\n OR (json_extract(fact.evidence_json,\n '$.serviceBindingReference.status')='resolved_exact' AND (\n binding.id IS NULL OR binding.repo_id<>fact.repo_id\n OR binding.source_file IS NOT json_extract(fact.evidence_json,\n '$.serviceBindingReference.bindingSourceFile')\n OR binding.variable_name IS NOT json_extract(fact.evidence_json,\n '$.serviceBindingReference.variableName')\n OR binding.binding_site_start_offset IS NOT json_extract(\n fact.evidence_json,\n '$.serviceBindingReference.bindingSiteStartOffset')\n OR binding.binding_site_end_offset IS NOT json_extract(\n fact.evidence_json,\n '$.serviceBindingReference.bindingSiteEndOffset')))\n OR (json_extract(fact.evidence_json,\n '$.serviceBindingReference.status') IN ('ambiguous','unresolved')\n AND (fact.service_binding_id IS NOT NULL\n OR typeof(json_extract(fact.evidence_json,\n '$.serviceBindingReference.reason'))<>'text'))\n OR (json_extract(fact.evidence_json,\n '$.serviceBindingReference.status')='not_applicable'\n AND (fact.service_binding_id IS NOT NULL\n OR json_extract(fact.evidence_json,\n '$.serviceBindingReference.variableName') IS NOT NULL))\n )`, workspaceId);\n}\n\nfunction handlerStatusCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count FROM outbound_calls fact\n JOIN repositories r ON r.id=fact.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND fact.call_type='async_subscribe'\n AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceStatus'),'')\n NOT IN ('role_required','unsupported_inline','unsupported_wrapper',\n 'unsupported_reference_shape','missing_argument')\n OR (json_extract(fact.evidence_json,\n '$.handlerReferenceStatus')='role_required' AND (\n json_extract(fact.evidence_json,\n '$.handlerReferenceReason') IS NOT NULL\n OR COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceShape'),'') NOT IN (\n 'identifier','namespace_member','static_member','default_member',\n 'wrapped_identifier','wrapped_namespace_member',\n 'wrapped_static_member','wrapped_default_member')))\n OR (json_extract(fact.evidence_json,\n '$.handlerReferenceStatus')='unsupported_inline' AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceReason'),'')<>'inline_handler_body_not_indexed'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceShape'),'')<>'inline_callback'))\n OR (json_extract(fact.evidence_json,\n '$.handlerReferenceStatus')='unsupported_wrapper' AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceReason'),'') NOT IN (\n 'wrapper_requires_one_reference',\n 'wrapper_reference_shape_unsupported')\n OR COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceShape'),'')<>'wrapper_call'))\n OR (json_extract(fact.evidence_json,\n '$.handlerReferenceStatus')='unsupported_reference_shape' AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceReason'),'')\n <>'handler_reference_shape_unsupported'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceShape'),'')<>'unsupported_expression'))\n OR (json_extract(fact.evidence_json,\n '$.handlerReferenceStatus')='missing_argument' AND (\n COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceReason'),'')<>'handler_argument_missing'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.handlerReferenceShape'),'')<>'missing'))\n )`, workspaceId);\n}\n\nfunction handlerAssociationCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count FROM (\n SELECT fact.id,\n json_extract(fact.evidence_json,\n '$.handlerReferenceStatus') handler_status,\n COUNT(role.id) role_count\n FROM outbound_calls fact JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN symbol_calls role ON role.repo_id=fact.repo_id\n AND role.source_file=fact.source_file\n AND role.call_site_start_offset=fact.call_site_start_offset\n AND role.call_site_end_offset=fact.call_site_end_offset\n AND role.call_role='event_subscribe_handler'\n WHERE ${currentRepositoryPredicate()}\n AND fact.call_type='async_subscribe'\n GROUP BY fact.id HAVING\n (handler_status='role_required' AND role_count<>1)\n OR (handler_status<>'role_required' AND role_count<>0)\n )`, workspaceId);\n}\n\nfunction handlerRoleCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count FROM symbol_calls fact\n JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN outbound_calls subscription\n ON subscription.repo_id=fact.repo_id\n AND subscription.source_file=fact.source_file\n AND subscription.call_site_start_offset=fact.call_site_start_offset\n AND subscription.call_site_end_offset=fact.call_site_end_offset\n AND subscription.call_type='async_subscribe'\n WHERE ${currentRepositoryPredicate()}\n AND fact.call_role='event_subscribe_handler'\n AND (subscription.id IS NULL\n OR subscription.source_line<>fact.source_line\n OR subscription.source_symbol_id IS NOT fact.caller_symbol_id\n OR COALESCE(json_extract(fact.evidence_json,'$.factOrigin'),'')\n <>'event_subscribe_handler_reference'\n OR typeof(json_extract(fact.evidence_json,'$.candidateStrategy'))\n <>'text'\n OR length(json_extract(fact.evidence_json,'$.candidateStrategy'))=0)`,\n workspaceId);\n}\n\nfunction eventAssociationCategories(\n db: Db,\n workspaceId?: number,\n): FactSemanticCategoryCount[] {\n return [\n ...category('subscription_handler_status_invalid',\n handlerStatusCount(db, workspaceId)),\n ...category('subscription_handler_cardinality_invalid',\n handlerAssociationCount(db, workspaceId)),\n ...category('event_handler_role_provenance_invalid',\n handlerRoleCount(db, workspaceId)),\n ];\n}\n\nconst symbolResolutionSql = `SELECT COUNT(*) count FROM symbol_calls fact\n JOIN repositories r ON r.id=fact.repo_id\n LEFT JOIN symbols target ON target.id=fact.callee_symbol_id\n LEFT JOIN repositories target_repo ON target_repo.id=target.repo_id\n WHERE ${currentRepositoryPredicate()}\n AND (fact.status NOT IN ('resolved','ambiguous','unresolved')\n OR typeof(json_extract(fact.evidence_json,'$.candidateStrategy'))\n <>'text'\n OR length(json_extract(fact.evidence_json,'$.candidateStrategy'))=0\n OR json_extract(fact.evidence_json,'$.candidateStrategy')\n NOT IN (${sqlTextList(symbolStrategies)})\n OR typeof(json_extract(fact.evidence_json,'$.candidateCount'))\n <>'integer'\n OR typeof(json_extract(fact.evidence_json,'$.eligibleCandidateCount'))\n <>'integer'\n OR typeof(json_extract(fact.evidence_json,'$.selectedCandidateCount'))\n <>'integer'\n OR COALESCE(json_type(\n fact.evidence_json,'$.candidateSetComplete'),'missing')\n NOT IN ('true','false')\n OR json_extract(fact.evidence_json,'$.candidateCount')<0\n OR json_extract(fact.evidence_json,'$.eligibleCandidateCount')<0\n OR json_extract(fact.evidence_json,'$.selectedCandidateCount')\n NOT IN (0,1)\n OR json_extract(fact.evidence_json,'$.selectedCandidateCount')\n >json_extract(fact.evidence_json,'$.eligibleCandidateCount')\n OR json_extract(fact.evidence_json,'$.eligibleCandidateCount')\n >json_extract(fact.evidence_json,'$.candidateCount')\n OR fact.unresolved_reason IS NOT json_extract(\n fact.evidence_json,'$.unresolvedReason')\n OR (fact.status='resolved' AND (\n fact.callee_symbol_id IS NULL OR target.id IS NULL\n OR target_repo.workspace_id IS NOT r.workspace_id\n OR json_extract(fact.evidence_json,'$.candidateSetComplete')<>1\n OR json_extract(fact.evidence_json,'$.eligibleCandidateCount')<>1\n OR json_extract(fact.evidence_json,'$.selectedCandidateCount')<>1\n OR fact.unresolved_reason IS NOT NULL\n OR COALESCE(json_type(\n fact.evidence_json,'$.unresolvedReason'),'missing')<>'null'))\n OR (fact.status='ambiguous' AND (\n fact.callee_symbol_id IS NOT NULL\n OR json_extract(fact.evidence_json,'$.candidateSetComplete')<>1\n OR json_extract(fact.evidence_json,'$.eligibleCandidateCount')<2\n OR json_extract(fact.evidence_json,'$.selectedCandidateCount')<>0\n OR typeof(fact.unresolved_reason)<>'text'\n OR length(fact.unresolved_reason)=0\n OR COALESCE(json_type(\n fact.evidence_json,'$.unresolvedReason'),'missing')<>'text'\n OR fact.unresolved_reason NOT IN (${sqlTextList(symbolReasons)})))\n OR (fact.status='unresolved' AND (\n fact.callee_symbol_id IS NOT NULL\n OR json_extract(fact.evidence_json,'$.selectedCandidateCount')<>0\n OR typeof(fact.unresolved_reason)<>'text'\n OR length(fact.unresolved_reason)=0\n OR COALESCE(json_type(\n fact.evidence_json,'$.unresolvedReason'),'missing')<>'text'\n OR fact.unresolved_reason NOT IN (${sqlTextList(symbolReasons)})\n OR (json_extract(fact.evidence_json,'$.candidateSetComplete')=1\n AND json_extract(fact.evidence_json,\n '$.eligibleCandidateCount')<>0)\n OR (json_extract(fact.evidence_json,'$.candidateSetComplete')=0\n AND fact.unresolved_reason NOT IN (\n ${sqlTextList(incompleteReasons)}))))\n OR (json_extract(fact.evidence_json,'$.candidateStrategy')\n ='package_import_pending'\n AND (COALESCE(json_extract(fact.evidence_json,'$.relation'),'')\n <>'package_import'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.importBinding.moduleKind'),'')<>'package'))\n OR (json_extract(fact.evidence_json,'$.candidateStrategy')\n IN (${sqlTextList(packageStrategies)})\n AND (COALESCE(json_extract(\n fact.evidence_json,'$.relation'),'')<>'package_import'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.importBinding.moduleKind'),'')<>'package'))\n OR (json_extract(fact.evidence_json,'$.candidateStrategy')\n ='package_import_derived_member_unsupported'\n AND (COALESCE(json_extract(fact.evidence_json,'$.relation'),'')\n <>'package_import_derived_member'\n OR COALESCE(json_extract(fact.evidence_json,\n '$.derivedImportBinding.moduleKind'),'')<>'package'))\n OR (json_extract(fact.evidence_json,'$.candidateStrategy')\n IN (${sqlTextList(relativeStrategies)})\n AND (COALESCE(json_extract(fact.evidence_json,\n '$.importBinding.moduleKind'),'')<>'relative'\n OR COALESCE(fact.import_source,'') NOT LIKE '.%'))\n OR (json_extract(fact.evidence_json,'$.candidateStrategy')\n IN (${sqlTextList(simpleStrategies)})\n AND (fact.import_source IS NOT NULL\n OR COALESCE(json_extract(fact.evidence_json,\n '$.importBinding.moduleKind'),'') IN ('relative','package')\n OR COALESCE(json_extract(fact.evidence_json,'$.relation'),'')\n IN ('package_import','package_import_derived_member')))\n __PACKAGE_PENDING_TERMINAL_CHECK__)`;\n\nfunction symbolResolutionCount(\n db: Db,\n workspaceId: number | undefined,\n phase: PackageFactPhase,\n): number {\n const pendingInvalid = phase === 'terminal'\n ? \"OR json_extract(fact.evidence_json,'$.candidateStrategy')='package_import_pending'\"\n : '';\n return count(db, symbolResolutionSql.replace(\n '__PACKAGE_PENDING_TERMINAL_CHECK__', pendingInvalid,\n ), workspaceId);\n}\n\nexport function invalidFactSemanticCategories(\n db: Db,\n workspaceId?: number,\n phase: PackageFactPhase = 'pre_package',\n): FactSemanticCategoryCount[] {\n return [\n ...repositoryCategories(db, workspaceId),\n ...operationCategories(db, workspaceId),\n ...callSpanCategories(db, workspaceId),\n ...duplicateSymbolCallCategories(db, workspaceId),\n ...eventNameCategories(db, workspaceId),\n ...ownerCategories(db, workspaceId),\n ...bindingCategories(db, workspaceId),\n ...invalidBindingFactCategories(db, workspaceId),\n ...eventAssociationCategories(db, workspaceId),\n ...invalidPackageFactCategories(db, workspaceId, phase),\n ...invalidRelativeFactCategories(db, workspaceId),\n ...invalidSymbolFactCategories(db, workspaceId),\n ...category('symbol_call_resolution_matrix_invalid',\n symbolResolutionCount(db, workspaceId, phase)),\n ];\n}\n","import type { Db } from './connection.js';\n\nexport interface SchemaStructureCategoryCount {\n category: string;\n count: number;\n}\n\nconst requiredColumns = {\n workspaces: [\n 'id', 'root_path', 'db_path', 'created_at', 'updated_at',\n ],\n repositories: [\n 'id', 'workspace_id', 'name', 'absolute_path', 'relative_path',\n 'package_name', 'package_version', 'dependencies_json',\n 'package_public_surface_json', 'kind', 'is_git_repo', 'last_indexed_at',\n 'index_status', 'error_count', 'fingerprint', 'fact_generation',\n 'graph_generation', 'graph_stale_reason', 'graph_stale_at',\n 'fact_analyzer_version',\n ],\n files: [\n 'id', 'repo_id', 'relative_path', 'extension', 'sha256', 'size_bytes',\n 'last_indexed_at',\n ],\n cds_requires: [\n 'id', 'repo_id', 'alias', 'kind', 'model', 'destination',\n 'service_path', 'request_timeout', 'raw_json',\n ],\n cds_services: [\n 'id', 'repo_id', 'namespace', 'service_name', 'qualified_name',\n 'service_path', 'is_extend', 'source_file', 'source_line',\n 'extension_local_ref', 'extension_imported_symbol',\n 'extension_local_alias', 'extension_module_specifier',\n 'extension_import_kind', 'extension_base_service_id',\n 'extension_base_status',\n ],\n cds_operations: [\n 'id', 'service_id', 'operation_type', 'operation_name', 'operation_path',\n 'params_json', 'return_type', 'source_file', 'source_line', 'provenance',\n 'base_operation_id',\n ],\n symbols: [\n 'id', 'repo_id', 'file_id', 'kind', 'name', 'qualified_name',\n 'exported', 'start_line', 'end_line', 'start_offset', 'end_offset',\n 'source_file', 'exported_name', 'evidence_json',\n ],\n handler_classes: [\n 'id', 'repo_id', 'symbol_id', 'class_name', 'source_file', 'source_line',\n ],\n handler_methods: [\n 'id', 'handler_class_id', 'method_name', 'decorator_kind',\n 'decorator_value', 'decorator_raw_expression',\n 'decorator_resolution_json', 'source_file', 'source_line',\n ],\n handler_registrations: [\n 'id', 'repo_id', 'handler_class_id', 'class_name', 'import_source',\n 'registration_file', 'registration_line', 'registration_kind',\n 'confidence',\n ],\n service_bindings: [\n 'id', 'repo_id', 'symbol_id', 'variable_name', 'alias', 'alias_expr',\n 'destination_expr', 'service_path_expr', 'is_dynamic',\n 'placeholders_json', 'source_file', 'source_line',\n 'binding_site_start_offset', 'binding_site_end_offset',\n 'owner_resolution', 'helper_chain_json',\n ],\n outbound_calls: [\n 'id', 'repo_id', 'source_symbol_id', 'service_binding_id', 'call_type',\n 'method', 'operation_path_expr', 'query_entity', 'event_name_expr',\n 'payload_summary', 'source_file', 'source_line',\n 'call_site_start_offset', 'call_site_end_offset', 'evidence_json',\n 'confidence', 'unresolved_reason', 'local_service_name',\n 'local_service_lookup', 'alias_chain_json', 'external_target_kind',\n 'external_target_id', 'external_target_label', 'external_target_dynamic',\n ],\n symbol_calls: [\n 'id', 'repo_id', 'caller_symbol_id', 'callee_symbol_id',\n 'callee_expression', 'import_source', 'source_file', 'source_line',\n 'call_site_start_offset',\n 'call_site_end_offset', 'call_role', 'status', 'evidence_json',\n 'confidence', 'unresolved_reason',\n ],\n graph_edges: [\n 'id', 'workspace_id', 'edge_type', 'status', 'from_kind', 'from_id',\n 'to_kind', 'to_id', 'confidence', 'evidence_json', 'is_dynamic',\n 'unresolved_reason', 'generation',\n ],\n index_runs: [\n 'id', 'workspace_id', 'started_at', 'finished_at', 'status',\n 'repo_count', 'file_count', 'diagnostic_count', 'error_message',\n 'owner_pid',\n ],\n diagnostics: [\n 'id', 'repo_id', 'file_id', 'severity', 'code', 'message',\n 'source_file', 'source_line',\n ],\n search_index: ['kind', 'name', 'path', 'repo'],\n} as const;\n\ntype RequiredTable = keyof typeof requiredColumns;\n\nfunction tableNames(db: Db): Set<string> {\n const rows = db.prepare(\n \"SELECT name FROM sqlite_master WHERE type='table'\",\n ).all();\n return new Set(rows.flatMap((row) =>\n typeof row.name === 'string' ? [row.name] : []));\n}\n\nfunction columnNames(db: Db, table: RequiredTable): Set<string> {\n const rows = db.prepare(`PRAGMA table_info(${table})`).all();\n return new Set(rows.flatMap((row) =>\n typeof row.name === 'string' ? [row.name] : []));\n}\n\nfunction missingTableCount(db: Db): number {\n const actual = tableNames(db);\n return Object.keys(requiredColumns).filter((table) =>\n !actual.has(table)).length;\n}\n\nfunction missingColumnCount(db: Db): number {\n const actualTables = tableNames(db);\n return Object.entries(requiredColumns).reduce(\n (total, [table, columns]) => {\n if (!actualTables.has(table)) return total;\n const actual = columnNames(db, table as RequiredTable);\n return total + columns.filter((column) => !actual.has(column)).length;\n },\n 0,\n );\n}\n\nconst bindingSiteColumns = [\n 'repo_id', 'source_file', 'variable_name',\n 'binding_site_start_offset', 'binding_site_end_offset',\n];\nconst exactSitePredicate =\n 'where binding_site_start_offset is not null and '\n + 'binding_site_end_offset is not null';\n\nfunction indexColumns(db: Db, name: string): string[] {\n return db.prepare(`PRAGMA index_info(${name})`).all().flatMap((item) =>\n typeof item.name === 'string' ? [item.name] : []);\n}\n\nfunction indexMetadata(\n db: Db,\n name: string,\n): Record<string, unknown> | undefined {\n return db.prepare(\"PRAGMA index_list('service_bindings')\")\n .all().find((item) => item.name === name);\n}\n\nfunction normalizedSql(value: string): string {\n return value.toLowerCase().replace(/\\s+/g, ' ').trim();\n}\n\nfunction bindingIndexInvalid(\n db: Db,\n name: string,\n unique: number,\n partial: number,\n): number {\n const metadata = indexMetadata(db, name);\n const columns = indexColumns(db, name);\n return columns.join('\\0') === bindingSiteColumns.join('\\0')\n && metadata?.unique === unique && metadata.partial === partial ? 0 : 1;\n}\n\nfunction exactBindingIndexInvalid(db: Db): number {\n const row = db.prepare(`SELECT sql FROM sqlite_master\n WHERE type='index' AND name='uq_service_binding_exact_site'`).get();\n if (typeof row?.sql !== 'string'\n || !normalizedSql(row.sql).endsWith(exactSitePredicate)) return 1;\n return bindingIndexInvalid(\n db, 'uq_service_binding_exact_site', 1, 1,\n );\n}\n\nfunction category(\n name: string,\n count: number,\n): SchemaStructureCategoryCount[] {\n return count > 0 ? [{ category: name, count }] : [];\n}\n\nexport function invalidSchemaStructureCategories(\n db: Db,\n): SchemaStructureCategoryCount[] {\n const missingTables = missingTableCount(db);\n if (missingTables > 0)\n return category('schema_required_table_missing', missingTables);\n return [\n ...category('schema_required_column_missing', missingColumnCount(db)),\n ...category(\n 'schema_binding_exact_site_index_invalid',\n exactBindingIndexInvalid(db)\n + bindingIndexInvalid(db, 'idx_service_binding_site', 0, 0),\n ),\n ];\n}\n","import type { Db } from './connection.js';\nimport { CURRENT_SCHEMA_VERSION, schemaVersion } from './migrations.js';\nimport {\n invalidFactJsonCategories,\n type FactJsonCategoryCount,\n} from './002-fact-json-inventory.js';\nimport {\n invalidFactSemanticCategories,\n type FactSemanticCategoryCount,\n type PackageFactPhase,\n} from './003-current-fact-semantics.js';\nimport {\n invalidSchemaStructureCategories,\n type SchemaStructureCategoryCount,\n} from './005-schema-structure.js';\nimport { ANALYZER_VERSION } from '../version.js';\n\nexport type FactLifecycleCode =\n | 'schema_upgrade_required'\n | 'unsupported_future_schema'\n | 'reindex_required';\n\nexport interface FactLifecycleDiagnostic extends Record<string, unknown> {\n severity: 'error';\n code: FactLifecycleCode;\n message: string;\n remediation: string;\n}\n\nconst remediation = [\n 'service-flow index --workspace /workspace --force',\n 'service-flow link --workspace /workspace --force',\n].join('\\n');\nconst CATEGORY_LIMIT = 24;\n\nfunction count(db: Db, sql: string, ...params: unknown[]): number {\n const row = db.prepare(sql).get(...params);\n return Number(row?.count ?? 0);\n}\n\nfunction oldAnalyzerCount(db: Db, workspaceId?: number): number {\n return count(db, `SELECT COUNT(*) count FROM repositories\n WHERE (? IS NULL OR workspace_id=?)\n AND (COALESCE(index_status,'pending')<>'indexed'\n OR COALESCE(fact_analyzer_version,'legacy')<>?)`,\n workspaceId, workspaceId, ANALYZER_VERSION);\n}\n\nexport function factLifecycleDiagnostic(\n db: Db,\n workspaceId?: number,\n phase: PackageFactPhase = 'pre_package',\n): FactLifecycleDiagnostic | undefined {\n return schemaLifecycleDiagnostic(db)\n ?? currentFactLifecycleDiagnostic(db, workspaceId, phase);\n}\n\nexport function schemaLifecycleDiagnostic(\n db: Db,\n): FactLifecycleDiagnostic | undefined {\n const currentSchema = schemaVersion(db);\n if (currentSchema > CURRENT_SCHEMA_VERSION) return {\n severity: 'error',\n code: 'unsupported_future_schema',\n message: `Database schema ${currentSchema} is newer than the supported schema ${CURRENT_SCHEMA_VERSION}; upgrade service-flow before reading this database.`,\n remediation: 'Install a service-flow version that supports this database schema.',\n currentSchemaVersion: currentSchema,\n supportedSchemaVersion: CURRENT_SCHEMA_VERSION,\n };\n if (currentSchema < CURRENT_SCHEMA_VERSION) return {\n severity: 'error',\n code: 'schema_upgrade_required',\n message: `Database schema ${currentSchema} must be upgraded to ${CURRENT_SCHEMA_VERSION} before this command can read current call-site facts.`,\n remediation,\n currentSchemaVersion: currentSchema,\n requiredSchemaVersion: CURRENT_SCHEMA_VERSION,\n };\n const structureCategories = invalidSchemaStructureCategories(db);\n if (structureCategories.length > 0)\n return reindexDiagnostic(0, structureCategories);\n return undefined;\n}\n\nexport function currentFactLifecycleDiagnostic(\n db: Db,\n workspaceId?: number,\n phase: PackageFactPhase = 'pre_package',\n): FactLifecycleDiagnostic | undefined {\n const staleRepositories = oldAnalyzerCount(db, workspaceId);\n if (staleRepositories > 0)\n return reindexDiagnostic(staleRepositories, []);\n const jsonCategories = invalidFactJsonCategories(db, workspaceId);\n if (jsonCategories.length > 0)\n return reindexDiagnostic(0, jsonCategories);\n const semanticCategories = invalidFactSemanticCategories(\n db, workspaceId, phase,\n );\n if (semanticCategories.length === 0) return undefined;\n return reindexDiagnostic(0, semanticCategories);\n}\n\ntype InvalidFactCategory =\n | FactJsonCategoryCount\n | FactSemanticCategoryCount\n | SchemaStructureCategoryCount;\n\nfunction reindexDiagnostic(\n staleRepositories: number,\n categories: InvalidFactCategory[],\n): FactLifecycleDiagnostic {\n const invalidFacts = categories.reduce((sum, item) => sum + item.count, 0);\n const shown = categories.slice(0, CATEGORY_LIMIT);\n return {\n severity: 'error',\n code: 'reindex_required',\n message: 'Current facts are stale or fail bounded semantic integrity checks; force index and link before tracing or rebuilding graph edges.',\n remediation,\n staleRepositoryCount: staleRepositories,\n invalidCallFactCount: invalidFacts,\n invalidFactCategories: shown,\n invalidFactCategoryCount: categories.length,\n shownInvalidFactCategoryCount: shown.length,\n omittedInvalidFactCategoryCount: categories.length - shown.length,\n requiredAnalyzerVersion: ANALYZER_VERSION,\n };\n}\n\nexport function assertWorkspaceLinkable(\n db: Db,\n workspaceId: number,\n phase: PackageFactPhase = 'pre_package',\n): void {\n const diagnostic = factLifecycleDiagnostic(db, workspaceId, phase);\n if (!diagnostic) return;\n const categories = Array.isArray(diagnostic.invalidFactCategories)\n ? ` categories=${JSON.stringify(diagnostic.invalidFactCategories)}`\n : '';\n throw new Error(\n `${diagnostic.code}: ${diagnostic.message}${categories}\\n${diagnostic.remediation}`,\n );\n}\n","import type { Db } from '../db/connection.js';\nimport { applyVariables } from './dynamic-edge-resolver.js';\nimport { classifyODataPathIntent, normalizeODataOperationInvocationPath } from './odata-path-normalizer.js';\nimport { buildRemoteQueryTarget } from './remote-query-target.js';\nimport { resolveOperation } from './service-resolver.js';\nimport { linkHelperPackages } from './helper-package-linker.js';\nimport { externalHttpTarget } from './external-http-target.js';\nimport { linkImplementations as linkCanonicalImplementations } from './000-implementation-candidates.js';\nimport {\n ambiguousPathCandidates,\n linkedCallEvidence,\n objectJson,\n objectValue,\n} from './002-call-evidence.js';\nimport { linkPackageImportSymbolCalls } from './003-package-import-symbol-resolver.js';\nimport { linkEventSubscriptionHandlers } from './004-event-subscription-handler-linker.js';\nimport { assertWorkspaceLinkable } from '../db/001-fact-lifecycle.js';\nexport interface LinkWorkspaceResult {\n edgeCount: number;\n unresolvedCount: number;\n resolvedCount: number;\n remoteResolvedCount: number;\n localResolvedCount: number;\n ambiguousCount: number;\n dynamicCount: number;\n terminalCount: number;\n dependencyResolvedCount: number;\n dependencyAmbiguousCount: number;\n implementationResolvedCount: number;\n implementationAmbiguousCount: number;\n implementationUnresolvedCount: number;\n subscriptionHandlerResolvedCount: number;\n subscriptionHandlerAmbiguousCount: number;\n subscriptionHandlerUnresolvedCount: number;\n subscriptionHandlerMissingAssociationCount: number;\n}\nexport function linkWorkspace(db: Db, workspaceId: number, vars: Record<string, string> = {}): LinkWorkspaceResult {\n return db.transaction(() => {\n assertWorkspaceLinkable(db, workspaceId);\n linkPackageImportSymbolCalls(db, workspaceId);\n assertWorkspaceLinkable(db, workspaceId, 'terminal');\n const generation = nextGraphGeneration(db, workspaceId);\n db.prepare('DELETE FROM graph_edges WHERE workspace_id=?').run(workspaceId);\n const deps = linkHelperPackages(db, workspaceId, generation);\n const subscriptions = linkEventSubscriptionHandlers(\n db, workspaceId, generation,\n );\n const impl = linkCanonicalImplementations(db, workspaceId, generation);\n const callSummary = linkCalls(db, workspaceId, vars, generation);\n db.prepare(\"UPDATE repositories SET graph_generation=?, graph_stale_reason=NULL, graph_stale_at=NULL WHERE workspace_id=?\").run(generation, workspaceId);\n return { ...callSummary, edgeCount: deps.edgeCount + callSummary.edgeCount + impl.edgeCount + subscriptions.edgeCount, dependencyResolvedCount: deps.resolvedCount, dependencyAmbiguousCount: deps.ambiguousCount, implementationResolvedCount: impl.resolvedCount, implementationAmbiguousCount: impl.ambiguousCount, implementationUnresolvedCount: impl.unresolvedCount, subscriptionHandlerResolvedCount: subscriptions.resolvedCount, subscriptionHandlerAmbiguousCount: subscriptions.ambiguousCount, subscriptionHandlerUnresolvedCount: subscriptions.unresolvedCount, subscriptionHandlerMissingAssociationCount: subscriptions.missingAssociationCount };\n });\n}\nfunction nextGraphGeneration(db: Db, workspaceId: number): number {\n const row = db.prepare('SELECT COALESCE(MAX(graph_generation),0) generation FROM repositories WHERE workspace_id=?').get(workspaceId) as { generation?: number } | undefined;\n return Number(row?.generation ?? 0) + 1;\n}\ntype CallLinkSummary = Omit<LinkWorkspaceResult,\n | 'dependencyResolvedCount'\n | 'dependencyAmbiguousCount'\n | 'implementationResolvedCount'\n | 'implementationAmbiguousCount'\n | 'implementationUnresolvedCount'\n | 'subscriptionHandlerResolvedCount'\n | 'subscriptionHandlerAmbiguousCount'\n | 'subscriptionHandlerUnresolvedCount'\n | 'subscriptionHandlerMissingAssociationCount'>;\n\nfunction linkCalls(db: Db, workspaceId: number, vars: Record<string, string>, generation: number): CallLinkSummary {\n let edgeCount = 0;\n let unresolvedCount = 0;\n let resolvedCount = 0;\n let remoteResolvedCount = 0;\n let localResolvedCount = 0;\n let ambiguousCount = 0;\n let dynamicCount = 0;\n let terminalCount = 0;\n const calls = db.prepare(`SELECT c.*,r.name repoName,b.id selectedBindingId,b.alias,b.alias_expr aliasExpr,b.destination_expr destinationExpr,b.service_path_expr servicePathExpr,b.is_dynamic isDynamic,b.placeholders_json placeholdersJson,b.source_file bindingSourceFile,b.source_line bindingSourceLine,b.helper_chain_json helperChainJson,req.service_path requireServicePath,req.destination requireDestination FROM outbound_calls c JOIN repositories r ON r.id=c.repo_id LEFT JOIN service_bindings b ON b.id=c.service_binding_id LEFT JOIN cds_requires req ON req.repo_id=c.repo_id AND req.alias=b.alias WHERE r.workspace_id=?`).all(workspaceId) as Array<Record<string, unknown>>;\n for (const call of calls) {\n const result = insertCallEdge(db, workspaceId, call, vars, generation);\n edgeCount += 1;\n resolvedCount += result.status === 'resolved' ? 1 : 0;\n remoteResolvedCount += result.status === 'resolved' && result.callType !== 'local_service_call' ? 1 : 0;\n localResolvedCount += result.status === 'resolved' && result.callType === 'local_service_call' ? 1 : 0;\n unresolvedCount += result.status === 'unresolved' ? 1 : 0;\n ambiguousCount += result.status === 'ambiguous' ? 1 : 0;\n dynamicCount += result.status === 'dynamic' ? 1 : 0;\n terminalCount += result.status === 'terminal' ? 1 : 0;\n }\n return { edgeCount, unresolvedCount, resolvedCount, remoteResolvedCount, localResolvedCount, ambiguousCount, dynamicCount, terminalCount };\n}\nfunction insertCallEdge(db: Db, workspaceId: number, call: Record<string, unknown>, vars: Record<string, string>, generation: number): { status: string; callType: string } {\n const callType = String(call.call_type);\n const rawOp = applyVariables(String(call.operation_path_expr ?? ''), vars);\n const intent = classifyODataPathIntent(rawOp, call.method as string | undefined);\n const isEntityQueryIntent = ['entity_query', 'entity_key_read', 'entity_navigation_query'].includes(intent.kind);\n const resolutionRawOp = callType === 'remote_query' && isEntityQueryIntent ? intent.pathWithoutQuery : rawOp;\n const normalized = normalizeODataOperationInvocationPath(resolutionRawOp);\n const op = normalized?.normalizedOperationPath ?? resolutionRawOp;\n const servicePath = applyVariables((call.servicePathExpr as string | undefined) ?? (call.requireServicePath as string | undefined), vars);\n const destination = (call.destinationExpr as string | undefined) ?? (call.requireDestination as string | undefined);\n const isDynamic = Boolean(Number(call.isDynamic ?? 0));\n const isRemoteEntityCall = callType.startsWith('remote_entity_');\n const indexedOperationCandidateCount = operationCandidateCount(db, workspaceId, op, intent.topLevelOperationName);\n const credibleOperationSignal = Boolean(normalized?.wasInvocation) || (Boolean(intent.topLevelOperationNameCandidate) && indexedOperationCandidateCount > 0);\n const strongEntitySignal = ['entity_media', 'entity_delete', 'entity_key_read', 'entity_navigation_query'].includes(intent.kind) || (intent.kind === 'entity_mutation' && (intent.hasEntityKeyPredicate || intent.hasNavigationSuffix));\n const operationLikeRemoteEntity = isRemoteEntityCall && Boolean(op) && credibleOperationSignal && (!strongEntitySignal || indexedOperationCandidateCount > 0);\n const isOperationCall = operationLikeRemoteEntity || ((callType === 'remote_action' || callType === 'local_service_call') || (callType === 'remote_query' && Boolean(op)));\n const resolution = isOperationCall ? resolveOperation(db, { servicePath, operationPath: op, serviceName: call.local_service_name as string | undefined, repoId: callType === 'local_service_call' ? Number(call.repo_id) : undefined, alias: applyVariables((call.aliasExpr as string | undefined) ?? (call.alias as string | undefined), vars), destination: destination ? applyVariables(destination, vars) : undefined, isDynamic, hasExplicitOverride: Object.keys(vars).length > 0 || callType === 'local_service_call' }, workspaceId) : { status: 'unresolved' as const, candidates: [], reasons: [] };\n const evidence: Record<string, unknown> = {\n ...linkedCallEvidence(\n call,\n resolution,\n servicePath,\n op,\n destination ? applyVariables(destination, vars) : undefined,\n normalized,\n intent,\n ),\n indexedOperationCandidateCount,\n parserCallType: callType,\n entityOperationPrecedence: operationPrecedence(\n callType,\n intent,\n indexedOperationCandidateCount,\n Boolean(resolution.target),\n ),\n };\n const pathAnalysis = objectValue(objectJson(call.evidence_json)?.pathAnalysis);\n if (callType === 'remote_action' && pathAnalysis?.status === 'ambiguous') {\n const candidatePaths = ambiguousPathCandidates(pathAnalysis);\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,unresolved_reason,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)').run(\n workspaceId,\n 'UNRESOLVED_EDGE',\n 'ambiguous',\n 'call',\n String(call.id),\n 'operation_candidates',\n candidatePaths.items.join(','),\n Number(call.confidence ?? 0.5),\n JSON.stringify({\n ...evidence,\n ambiguousOperationPathCandidateCount: candidatePaths.totalCount,\n shownAmbiguousOperationPathCandidateCount: candidatePaths.shownCount,\n omittedAmbiguousOperationPathCandidateCount: candidatePaths.omittedCount,\n }),\n 0,\n 'Ambiguous operation path candidates require explicit disambiguation',\n generation,\n );\n return { status: 'ambiguous', callType };\n }\n if (isRemoteEntityCall && (resolution.target || resolution.candidates.length > 0 || resolution.status === 'dynamic')) {\n if (resolution.target) {\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, 'REMOTE_CALL_RESOLVES_TO_OPERATION', 'resolved', 'call', String(call.id), 'operation', String(resolution.target.operationId), resolution.target.score, JSON.stringify({ ...evidence, operationEntityPrecedence: 'indexed_operation_over_parser_entity' }), 0, generation);\n return { status: 'resolved', callType };\n }\n const status = resolution.status === 'dynamic' ? 'dynamic' : resolution.status === 'ambiguous' ? 'ambiguous' : 'unresolved';\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,unresolved_reason,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, status === 'dynamic' ? 'DYNAMIC_EDGE_CANDIDATE' : 'UNRESOLVED_EDGE', status, 'call', String(call.id), 'operation_candidate', op ? `Remote action: ${op}` : 'Remote action: unknown path', Number(call.confidence ?? 0.2), JSON.stringify({ ...evidence, operationEntityPrecedence: resolution.candidates.length > 0 ? 'parser_entity_with_indexed_operation_candidates' : 'parser_entity_operation_candidate_without_indexed_match' }), status === 'dynamic' ? 1 : 0, unresolvedOperationReason(resolution), generation);\n return { status, callType };\n }\n if (isRemoteEntityCall) {\n const target = buildRemoteQueryTarget({ queryEntity: intent.entitySegment ?? call.query_entity, servicePath, serviceAlias: call.alias, serviceAliasExpr: call.aliasExpr, destination: destination ? applyVariables(destination, vars) : undefined, isDynamic, parserWarning: evidence.parserWarning });\n const entityKind = callType;\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, 'HANDLER_ACCESSES_REMOTE_ENTITY', 'terminal', 'call', String(call.id), target.toKind, target.toId, Number(call.confidence ?? 0.5), JSON.stringify({ ...evidence, ...target.evidence, remoteEntityAccess: entityKind }), 0, generation);\n return { status: 'terminal', callType };\n }\n if (callType === 'remote_query' && (isEntityQueryIntent || !op) && !resolution.target) {\n const target = buildRemoteQueryTarget({ queryEntity: call.query_entity, servicePath, serviceAlias: call.alias, serviceAliasExpr: call.aliasExpr, destination: destination ? applyVariables(destination, vars) : undefined, isDynamic, parserWarning: evidence.parserWarning });\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, 'HANDLER_RUNS_REMOTE_QUERY', 'terminal', 'call', String(call.id), target.toKind, target.toId, Number(call.confidence ?? 0.5), JSON.stringify({ ...evidence, ...target.evidence }), 0, generation);\n return { status: 'terminal', callType };\n }\n if (callType === 'local_service_call' && call.unresolved_reason === 'transport_client_method' && !resolution.target && resolution.candidates.length === 0) {\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, 'HANDLER_CALLS_TRANSPORT_METHOD', 'terminal', 'call', String(call.id), 'transport_method', String(op || 'transport_client_method'), Number(call.confidence ?? 0.5), JSON.stringify({ ...evidence, classification: 'transport_client_method' }), 0, generation);\n return { status: 'terminal', callType };\n }\n if (resolution.target) {\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, callType === 'local_service_call' ? 'LOCAL_CALL_RESOLVES_TO_OPERATION' : 'REMOTE_CALL_RESOLVES_TO_OPERATION', 'resolved', 'call', String(call.id), 'operation', String(resolution.target.operationId), resolution.target.score, JSON.stringify(evidence), 0, generation);\n return { status: 'resolved', callType };\n }\n const edgeType = callType === 'local_db_query' ? 'HANDLER_RUNS_DB_QUERY' : callType === 'external_http' ? 'HANDLER_CALLS_EXTERNAL_HTTP' : callType === 'async_emit' ? 'HANDLER_EMITS_EVENT' : callType === 'async_subscribe' ? 'EVENT_CONSUMED_BY_HANDLER' : resolution.status === 'dynamic' ? 'DYNAMIC_EDGE_CANDIDATE' : 'UNRESOLVED_EDGE';\n const status = edgeType === 'DYNAMIC_EDGE_CANDIDATE' ? 'dynamic' : resolution.status === 'ambiguous' ? 'ambiguous' : edgeType === 'UNRESOLVED_EDGE' ? 'unresolved' : 'terminal';\n const unresolvedReason = status === 'terminal' ? null : String(call.unresolved_reason ?? unresolvedOperationReason(resolution));\n const externalTarget = callType === 'external_http' ? externalHttpTarget(call) : undefined;\n const targetKind = callType === 'local_db_query' ? 'db_entity' : callType.startsWith('async_') ? 'event' : callType === 'external_http' ? (externalTarget?.toKind ?? 'external_endpoint') : 'operation_candidate';\n const targetId = callType === 'local_db_query' ? String(call.query_entity ?? 'unknown') : callType === 'remote_action' ? (op ? `Remote action: ${op}` : (call.unresolved_reason === 'dynamic_operation_path_identifier' ? 'Remote action: dynamic path' : 'Remote action: unknown path')) : callType === 'external_http' ? String(externalTarget?.toId ?? 'unknown') : String(call.event_name_expr ?? op ?? 'unknown');\n const graphLevelDynamic = edgeType === 'DYNAMIC_EDGE_CANDIDATE' && resolution.status === 'dynamic';\n const finalEvidence = externalTarget ? { ...evidence, externalTarget } : evidence;\n db.prepare('INSERT INTO graph_edges(workspace_id,edge_type,status,from_kind,from_id,to_kind,to_id,confidence,evidence_json,is_dynamic,unresolved_reason,generation) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)').run(workspaceId, edgeType, status, 'call', String(call.id), targetKind, targetId, Number(call.confidence ?? 0.2), JSON.stringify(finalEvidence), graphLevelDynamic ? 1 : 0, unresolvedReason, generation);\n return { status, callType };\n}\nfunction operationCandidateCount(db: Db, workspaceId: number, operationPath: string | undefined, operationName: string | undefined): number {\n if (!operationPath && !operationName) return 0;\n const normalizedName = operationName ?? operationPath?.replace(/^\\//, '').split('.').at(-1);\n const row = db.prepare(`SELECT COUNT(*) count FROM cds_operations o JOIN cds_services s ON s.id=o.service_id JOIN repositories r ON r.id=s.repo_id WHERE r.workspace_id=? AND (o.operation_path=? OR o.operation_path=? OR o.operation_name=?)`).get(workspaceId, operationPath, normalizedName ? `/${normalizedName}` : operationPath, normalizedName) as { count?: number } | undefined;\n return Number(row?.count ?? 0);\n}\n\nfunction operationPrecedence(\n callType: string,\n intent: ReturnType<typeof classifyODataPathIntent>,\n indexedOperationCandidateCount: number,\n resolvedOperation: boolean,\n): Record<string, unknown> {\n if (resolvedOperation) {\n return {\n decision: 'operation',\n reason: 'indexed_operation_with_strong_service_context',\n indexedOperationCandidateCount,\n };\n }\n if (callType === 'remote_action' && intent.kind === 'operation_invocation') {\n return {\n decision: 'operation_candidate',\n rejectionReason: indexedOperationCandidateCount > 0\n ? 'indexed_candidates_lack_unique_strong_service_context'\n : 'no_indexed_operation_candidate',\n indexedOperationCandidateCount,\n };\n }\n if (intent.kind.startsWith('entity_')) {\n return {\n decision: 'entity',\n rejectionReason: indexedOperationCandidateCount > 0\n ? 'entity_shape_has_precedence_without_resolved_operation_context'\n : 'entity_shape_has_no_indexed_operation_evidence',\n indexedOperationCandidateCount,\n };\n }\n return {\n decision: 'unresolved',\n rejectionReason: 'path_has_no_safe_entity_or_operation_precedence',\n indexedOperationCandidateCount,\n };\n}\n\nfunction unresolvedOperationReason(resolution: { candidates: unknown[]; status: string; reasons: string[] }): string {\n if (resolution.status === 'dynamic') return `Dynamic target requires runtime variable overrides: ${(resolution.reasons.length ? resolution.reasons : ['missing runtime variables']).join(', ')}`;\n if (resolution.candidates.length === 0) return 'No indexed target operation matched';\n if (resolution.reasons.includes('operation_path_only_has_no_strong_target_signal')) return 'Operation candidates found but no strong service signal is available';\n if (resolution.reasons.includes('candidate_score_below_resolution_threshold')) return 'Operation candidates found but resolution score is below threshold';\n if (resolution.status === 'ambiguous') return 'Ambiguous operation candidates require a strong service signal';\n return 'Operation candidates found but resolution could not select a target';\n}\n","import type { Db } from '../db/connection.js';\nimport type { TraceStart } from '../types.js';\nimport {\n projectBounded,\n type BoundedProjection,\n} from '../utils/000-bounded-projection.js';\n\nexport interface SelectorSourceScope {\n files?: Set<string>;\n symbols?: Set<number>;\n repoId?: number;\n diagnostics?: Array<Record<string, unknown>>;\n}\n\ninterface HandlerSelectorRow {\n handlerClassId?: number | null;\n repoId?: number | null;\n repoName?: string | null;\n className?: string | null;\n sourceFile?: string | null;\n sourceLine?: number | null;\n methodId?: number | null;\n symbolId?: number | null;\n classEvidence?: string | null;\n}\nexport function parseVars(\n values: string[] | undefined\n): Record<string, string> {\n const out: Record<string, string> = {};\n for (const value of values ?? []) {\n const [key, ...rest] = value.split('=');\n if (key && rest.length > 0) out[key] = rest.join('=');\n }\n return out;\n}\nexport function startLabel(start: TraceStart): string {\n return [\n start.repo,\n start.servicePath,\n start.operation ?? start.operationPath ?? start.handler\n ]\n .filter(Boolean)\n .join(' ');\n}\n\nexport function selectorRepoNotFoundDiagnostic(\n requested: string,\n): Record<string, unknown> {\n return {\n severity: 'warning',\n code: 'selector_repo_not_found',\n message: `No indexed repository matched selector: ${requested}`,\n selectorKind: 'repo',\n requestedRepository: requested,\n };\n}\n\nexport function selectorRepoAmbiguousDiagnostic(\n requested: string,\n candidates: Array<{ id: number; name: string; packageName?: string }>,\n): Record<string, unknown> {\n const uniqueName = (value: string): boolean => candidates\n .filter((candidate) => candidate.name === value).length === 1;\n const uniquePackage = (value: string): boolean => candidates\n .filter((candidate) => candidate.packageName === value).length === 1;\n const suggestions = candidates.flatMap((candidate) => {\n if (uniqueName(candidate.name)) return [`--repo ${candidate.name}`];\n if (candidate.packageName && uniquePackage(candidate.packageName))\n return [`--repo ${candidate.packageName}`];\n return [];\n });\n const candidateProjection = projectBounded(candidates, (left, right) =>\n left.name.localeCompare(right.name)\n || String(left.packageName ?? '').localeCompare(String(right.packageName ?? ''))\n || left.id - right.id);\n const suggestionProjection = projectBounded(\n [...new Set(suggestions)], (left, right) => left.localeCompare(right),\n );\n return {\n severity: 'warning',\n code: 'selector_repo_ambiguous',\n message: `Repository selector matched multiple indexed repositories: ${requested}`,\n selectorKind: 'repo',\n requestedRepository: requested,\n candidates: candidateProjection.items,\n candidateCount: candidateProjection.totalCount,\n shownCandidateCount: candidateProjection.shownCount,\n omittedCandidateCount: candidateProjection.omittedCount,\n selectorSuggestions: suggestionProjection.items,\n selectorSuggestionCount: suggestionProjection.totalCount,\n shownSelectorSuggestionCount: suggestionProjection.shownCount,\n omittedSelectorSuggestionCount: suggestionProjection.omittedCount,\n remediation: suggestions.length > 0\n ? 'Use one of the unique --repo selectors shown.'\n : 'Repository names and package names must be unique before this selector can be traced safely.',\n };\n}\n\nexport function selectorNotFoundDiagnostic(\n start: TraceStart,\n): Record<string, unknown> {\n const serviceOnly = start.servicePath && !start.operation\n && !start.operationPath && !start.handler;\n return {\n severity: 'warning',\n code: 'trace_start_not_found',\n message: serviceOnly\n ? 'Service-only trace requires --operation or --path and will not broaden to the whole workspace'\n : 'No handler source matched the requested trace start selector',\n selectorKind: start.handler ? 'handler' : start.operation || start.operationPath\n ? 'operation' : start.servicePath ? 'service' : undefined,\n };\n}\n\nexport function sourceScopeForSelector(\n db: Db,\n repoId: number | undefined,\n start: TraceStart,\n workspaceId?: number,\n): SelectorSourceScope | undefined {\n if (start.handler) {\n const classRows = handlerClassRows(db, repoId, start.handler, workspaceId);\n if (classRows.length > 0) return handlerClassScope(classRows, start.handler);\n const methodRows = handlerMethodRows(db, repoId, start.handler, workspaceId);\n if (methodRows.length > 0)\n return handlerMethodScope(methodRows, repoId, start.handler);\n }\n const operation = normalizeOperation(start.operation ?? start.operationPath);\n if (!operation) return undefined;\n const operationRows = operationHandlerRows(\n db, repoId, operation, start.servicePath, workspaceId,\n );\n if (operationRows.length > 0)\n return operationHandlerScope(operationRows, repoId, operation);\n if (!start.servicePath) return undefined;\n const implementationRows = implementationHandlerRows(\n db, repoId, start.servicePath, operation, workspaceId,\n );\n return implementationRows.length > 0\n ? executableScope(implementationRows, repoId)\n : undefined;\n}\n\nfunction handlerClassRows(\n db: Db,\n repoId: number | undefined,\n handler: string,\n workspaceId: number | undefined,\n): HandlerSelectorRow[] {\n return db.prepare(`SELECT hc.id handlerClassId,hc.repo_id repoId,\n r.name repoName,hc.class_name className,\n hc.source_file sourceFile,hc.source_line sourceLine,hm.id methodId,\n sym.id symbolId,COALESCE(classSym.evidence_json,\n (SELECT fallback.evidence_json FROM symbols fallback\n WHERE fallback.repo_id=hc.repo_id AND fallback.kind='class'\n AND fallback.name=hc.class_name AND fallback.source_file=hc.source_file\n ORDER BY fallback.id LIMIT 1)) classEvidence\n FROM handler_classes hc\n JOIN repositories r ON r.id=hc.repo_id\n LEFT JOIN symbols sym ON sym.repo_id=hc.repo_id\n AND sym.source_file=hc.source_file\n AND sym.kind='method'\n AND substr(sym.qualified_name,1,length(hc.class_name)+1)=hc.class_name || '.'\n AND (NOT EXISTS (SELECT 1 FROM handler_methods declared\n WHERE declared.handler_class_id=hc.id\n AND declared.method_name=sym.name)\n OR EXISTS (SELECT 1 FROM handler_methods executable\n WHERE executable.handler_class_id=hc.id\n AND executable.method_name=sym.name\n AND COALESCE(json_extract(executable.decorator_resolution_json,\n '$.executable'),CASE WHEN executable.decorator_kind IN\n ('Action','Func','On','Event') THEN 1 ELSE 0 END)=1))\n LEFT JOIN handler_methods hm ON hm.handler_class_id=hc.id\n AND hm.method_name=sym.name\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On','Event')\n THEN 1 ELSE 0 END)=1\n LEFT JOIN symbols classSym ON classSym.id=hc.symbol_id\n WHERE (? IS NULL OR r.workspace_id=?)\n AND (? IS NULL OR hc.repo_id=?) AND hc.class_name=?\n ORDER BY hc.repo_id,hc.id,hm.id`).all(\n workspaceId, workspaceId, repoId, repoId, handler,\n ) as HandlerSelectorRow[];\n}\n\nfunction handlerMethodRows(\n db: Db,\n repoId: number | undefined,\n handler: string,\n workspaceId: number | undefined,\n): HandlerSelectorRow[] {\n return db.prepare(`SELECT hc.id handlerClassId,hc.repo_id repoId,\n r.name repoName,hc.class_name className,hc.source_file sourceFile,\n hm.source_line sourceLine,hm.id methodId,sym.id symbolId\n FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id\n LEFT JOIN symbols sym ON sym.repo_id=hc.repo_id\n AND sym.source_file=hc.source_file\n AND sym.qualified_name=hc.class_name || '.' || hm.method_name\n AND sym.start_line=hm.source_line\n WHERE (? IS NULL OR r.workspace_id=?)\n AND (? IS NULL OR hc.repo_id=?) AND hm.method_name=?\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On','Event')\n THEN 1 ELSE 0 END)=1\n ORDER BY hc.repo_id,hc.id,hm.id`).all(\n workspaceId, workspaceId, repoId, repoId, handler,\n ) as HandlerSelectorRow[];\n}\n\nfunction operationHandlerRows(\n db: Db,\n repoId: number | undefined,\n operation: string,\n servicePath: string | undefined,\n workspaceId: number | undefined,\n): HandlerSelectorRow[] {\n return db.prepare(`SELECT DISTINCT hc.id handlerClassId,hc.repo_id repoId,\n r.name repoName,hc.class_name className,hc.source_file sourceFile,\n hm.source_line sourceLine,hm.id methodId,sym.id symbolId\n FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id\n LEFT JOIN symbols sym ON sym.repo_id=hc.repo_id\n AND sym.source_file=hc.source_file\n AND sym.qualified_name=hc.class_name || '.' || hm.method_name\n AND sym.start_line=hm.source_line\n WHERE (? IS NULL OR r.workspace_id=?) AND (? IS NULL OR hc.repo_id=?)\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.handlerKind'),\n CASE WHEN hm.decorator_kind='Event' THEN 'event'\n WHEN hm.decorator_kind IN ('Action','Func','On') THEN 'operation'\n ELSE 'unsupported' END)='operation'\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On')\n THEN 1 ELSE 0 END)=1\n AND (hm.decorator_value=? OR hm.method_name=?)\n AND (? IS NULL OR EXISTS (\n SELECT 1 FROM cds_services svc JOIN cds_operations op ON op.service_id=svc.id\n WHERE svc.repo_id=hc.repo_id AND svc.service_path=?\n AND (op.operation_path=? OR op.operation_name=?)))\n ORDER BY hc.repo_id,hc.id,hm.id`).all(\n workspaceId, workspaceId, repoId, repoId,\n operation, operation, servicePath, servicePath,\n operation, operation,\n ) as HandlerSelectorRow[];\n}\n\nfunction operationHandlerScope(\n rows: HandlerSelectorRow[],\n fallbackRepoId: number | undefined,\n requested: string,\n): SelectorSourceScope {\n const candidates = handlerSelectorCandidates(rows, 'method');\n if (candidates.length < 2) return executableScope(rows, fallbackRepoId);\n const classes = new Map<string, Set<string>>();\n for (const candidate of candidates) {\n const key = `${String(candidate.repoName)}:${String(candidate.className)}`;\n classes.set(key, new Set([\n ...(classes.get(key) ?? []),\n String(candidate.handlerClassId),\n ]));\n }\n const suggestions = candidates.flatMap((candidate) => {\n if (typeof candidate.repoName !== 'string'\n || typeof candidate.className !== 'string') return [];\n const key = `${candidate.repoName}:${candidate.className}`;\n return classes.get(key)?.size === 1\n ? [`--repo ${candidate.repoName} --handler ${candidate.className}`]\n : [];\n });\n const projection = boundedSelectorCandidates(candidates);\n const suggestionProjection = boundedSelectorSuggestions(suggestions);\n return { diagnostics: [{\n severity: 'warning',\n code: 'trace_start_ambiguous',\n message: 'Operation selector matched multiple handler-only executable scopes',\n selectorKind: 'operation',\n normalizedSelectorValue: requested,\n resolutionStage: 'handler',\n resolutionStatus: 'ambiguous_handler_operation',\n candidates: projection.items,\n candidateCount: projection.totalCount,\n shownCandidateCount: projection.shownCount,\n omittedCandidateCount: projection.omittedCount,\n selectorSuggestions: suggestionProjection.items,\n selectorSuggestionCount: suggestionProjection.totalCount,\n shownSelectorSuggestionCount: suggestionProjection.shownCount,\n omittedSelectorSuggestionCount: suggestionProjection.omittedCount,\n remediation: 'Select one handler class explicitly; no operation was chosen automatically.',\n }] };\n}\n\nfunction implementationHandlerRows(\n db: Db,\n repoId: number | undefined,\n servicePath: string,\n operation: string,\n workspaceId: number | undefined,\n): HandlerSelectorRow[] {\n return db.prepare(`SELECT DISTINCT hc.repo_id repoId,\n hc.source_file sourceFile,hm.id methodId,sym.id symbolId\n FROM cds_services svc JOIN cds_operations op ON op.service_id=svc.id\n JOIN repositories r ON r.id=svc.repo_id\n JOIN graph_edges edge ON edge.edge_type='OPERATION_IMPLEMENTED_BY_HANDLER'\n AND edge.status='resolved' AND edge.from_kind='operation'\n AND edge.from_id=CAST(op.id AS TEXT)\n JOIN handler_methods hm ON hm.id=CAST(edge.to_id AS INTEGER)\n JOIN handler_classes hc ON hc.id=hm.handler_class_id\n LEFT JOIN symbols sym ON sym.repo_id=hc.repo_id\n AND sym.source_file=hc.source_file\n AND sym.qualified_name=hc.class_name || '.' || hm.method_name\n AND sym.start_line=hm.source_line\n WHERE (? IS NULL OR r.workspace_id=?)\n AND (? IS NULL OR svc.repo_id=?) AND svc.service_path=?\n AND (op.operation_path=? OR op.operation_name=?)\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.handlerKind'),\n CASE WHEN hm.decorator_kind='Event' THEN 'event'\n WHEN hm.decorator_kind IN ('Action','Func','On') THEN 'operation'\n ELSE 'unsupported' END)='operation'\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On')\n THEN 1 ELSE 0 END)=1\n ORDER BY hc.repo_id,hc.id,hm.id`).all(\n workspaceId, workspaceId, repoId, repoId,\n servicePath, operation, operation,\n ) as HandlerSelectorRow[];\n}\n\nfunction handlerClassScope(\n rows: HandlerSelectorRow[],\n requested: string,\n): SelectorSourceScope {\n const ambiguity = handlerSelectorAmbiguity(rows, requested, 'class');\n if (ambiguity) return { diagnostics: [ambiguity] };\n const executable = rows.filter((row) => typeof row.symbolId === 'number');\n const repoId = numericValue(rows[0]?.repoId);\n if (executable.length > 0) {\n const scope = executableScope(executable, repoId);\n const warning = executable.some((row) => typeof row.methodId === 'number')\n ? handlerDecoratorsNotIndexedDiagnostic(rows[0])\n : handlerMethodsNotIndexedDiagnostic(rows[0]);\n return warning ? { ...scope, diagnostics: [warning] } : scope;\n }\n const first = rows[0];\n return {\n repoId,\n diagnostics: [handlerMethodsNotIndexedDiagnostic(first)],\n };\n}\n\nfunction handlerMethodScope(\n rows: HandlerSelectorRow[],\n fallbackRepoId: number | undefined,\n requested: string,\n): SelectorSourceScope {\n const ambiguity = handlerSelectorAmbiguity(rows, requested, 'method');\n return ambiguity\n ? { diagnostics: [ambiguity] }\n : executableScope(rows, fallbackRepoId);\n}\n\nfunction handlerSelectorAmbiguity(\n rows: HandlerSelectorRow[],\n requested: string,\n matchKind: 'class' | 'method',\n): Record<string, unknown> | undefined {\n const candidates = handlerSelectorCandidates(rows, matchKind);\n if (candidates.length < 2) return undefined;\n const repoCounts = new Map<string, number>();\n for (const candidate of candidates) {\n if (typeof candidate.repoName !== 'string') continue;\n repoCounts.set(\n candidate.repoName,\n (repoCounts.get(candidate.repoName) ?? 0) + 1,\n );\n }\n const suggestions = candidates.flatMap((candidate) => {\n const repoName = typeof candidate.repoName === 'string'\n ? candidate.repoName\n : undefined;\n if (repoName && repoCounts.get(repoName) === 1)\n return [`--repo ${repoName} --handler ${requested}`];\n if (matchKind === 'method' && typeof candidate.className === 'string')\n return [`${repoName ? `--repo ${repoName} ` : ''}--handler ${candidate.className}`];\n return [];\n });\n const projection = boundedSelectorCandidates(candidates);\n const suggestionProjection = boundedSelectorSuggestions(suggestions);\n return {\n severity: 'warning',\n code: 'trace_start_ambiguous',\n message: 'Handler selector matched multiple executable scopes and was not selected automatically',\n selectorKind: 'handler',\n requestedHandler: requested,\n resolutionStage: 'handler',\n resolutionStatus: 'ambiguous_handler',\n candidates: projection.items,\n candidateCount: projection.totalCount,\n shownCandidateCount: projection.shownCount,\n omittedCandidateCount: projection.omittedCount,\n selectorSuggestions: suggestionProjection.items,\n selectorSuggestionCount: suggestionProjection.totalCount,\n shownSelectorSuggestionCount: suggestionProjection.shownCount,\n omittedSelectorSuggestionCount: suggestionProjection.omittedCount,\n remediation: suggestions.length > 0\n ? 'Use one of the scoped handler selectors shown.'\n : 'No current CLI selector uniquely identifies these duplicate handler classes.',\n };\n}\n\nfunction handlerSelectorCandidates(\n rows: HandlerSelectorRow[],\n matchKind: 'class' | 'method',\n): Array<Record<string, unknown>> {\n const candidates = new Map<string, Record<string, unknown>>();\n for (const row of rows) {\n const identity = matchKind === 'class'\n ? `class:${String(row.handlerClassId)}`\n : `method:${String(row.repoId)}:${String(row.symbolId ?? row.methodId)}`;\n candidates.set(identity, {\n handlerClassId: row.handlerClassId,\n repoId: row.repoId,\n repoName: row.repoName,\n className: row.className,\n sourceFile: row.sourceFile,\n sourceLine: row.sourceLine,\n matchKind,\n });\n }\n return [...candidates.values()].sort((left, right) =>\n String(left.repoName ?? '').localeCompare(String(right.repoName ?? ''))\n || String(left.className ?? '').localeCompare(String(right.className ?? ''))\n || String(left.sourceFile ?? '').localeCompare(String(right.sourceFile ?? '')));\n}\n\nfunction executableScope(\n rows: HandlerSelectorRow[],\n fallbackRepoId: number | undefined,\n): SelectorSourceScope {\n const files = rows.flatMap((row) => row.sourceFile ? [row.sourceFile] : []);\n const symbols = rows.flatMap((row) => typeof row.symbolId === 'number'\n ? [row.symbolId] : []);\n if (files.length === 0 || symbols.length === 0) return { repoId: fallbackRepoId };\n return {\n files: new Set(files),\n symbols: new Set(symbols),\n repoId: numericValue(rows[0]?.repoId) ?? fallbackRepoId,\n };\n}\n\nfunction handlerMethodsNotIndexedDiagnostic(\n row: HandlerSelectorRow | undefined,\n): Record<string, unknown> {\n return {\n severity: 'warning',\n code: 'handler_methods_not_indexed',\n message: `Handler class ${row?.className ?? 'unknown'} has no indexed executable methods`,\n selectorKind: 'handler',\n className: row?.className,\n sourceFile: row?.sourceFile,\n sourceLine: row?.sourceLine,\n observedDecoratorNames: stringEvidenceArray(\n row?.classEvidence, 'observedDecoratorNames',\n ),\n unsupportedDecoratorNames: stringEvidenceArray(\n row?.classEvidence, 'unsupportedDecoratorNames',\n ),\n remediation: 'Use a supported CAP handler decorator on at least one class method and re-index the workspace.',\n };\n}\n\nfunction handlerDecoratorsNotIndexedDiagnostic(\n row: HandlerSelectorRow | undefined,\n): Record<string, unknown> | undefined {\n const names = stringEvidenceArray(\n row?.classEvidence, 'unsupportedDecoratorNames',\n );\n const methods = arrayEvidence(row?.classEvidence, 'unsupportedMethods');\n if (names.length === 0 && methods.length === 0) return undefined;\n return {\n severity: 'warning',\n code: 'handler_decorators_not_indexed',\n message: `Handler class ${row?.className ?? 'unknown'} contains methods that were not indexed`,\n selectorKind: 'handler',\n className: row?.className,\n sourceFile: row?.sourceFile,\n sourceLine: row?.sourceLine,\n unsupportedDecoratorNames: names,\n unsupportedMethods: methods,\n remediation: 'Use a supported CAP handler decorator shape and re-index the workspace.',\n };\n}\n\nfunction evidenceRecord(\n evidenceJson: string | null | undefined,\n): Record<string, unknown> {\n if (!evidenceJson) return {};\n try {\n const parsed = JSON.parse(evidenceJson) as unknown;\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {};\n } catch {\n return {};\n }\n}\n\nfunction stringEvidenceArray(\n evidenceJson: string | null | undefined,\n key: string,\n): string[] {\n const value = evidenceRecord(evidenceJson)[key];\n return Array.isArray(value)\n ? [...new Set(value.filter((item): item is string =>\n typeof item === 'string'))].sort()\n : [];\n}\n\nfunction arrayEvidence(\n evidenceJson: string | null | undefined,\n key: string,\n): Array<Record<string, unknown>> {\n const value = evidenceRecord(evidenceJson)[key];\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction numericValue(value: number | null | undefined): number | undefined {\n return typeof value === 'number' ? value : undefined;\n}\n\nfunction normalizeOperation(value: string | undefined): string | undefined {\n if (!value) return undefined;\n return value.startsWith('/') ? value.slice(1) : value;\n}\nexport function ambiguousStartDiagnostic(\n requested: string,\n candidates: Array<Record<string, unknown>>,\n message: string,\n): Record<string, unknown> {\n const serviceSuggestions = [...new Set(candidates\n .flatMap((row) => typeof row.servicePath === 'string'\n ? [`--service ${row.servicePath}`]\n : []))].sort();\n const projection = boundedSelectorCandidates(candidates);\n const serviceProjection = boundedSelectorSuggestions(serviceSuggestions);\n const selectorProjection = boundedSelectorSuggestions(fullSelectorSuggestions(candidates));\n return {\n severity: 'warning',\n code: 'trace_start_ambiguous',\n message,\n normalizedSelectorValue: requested,\n resolutionStage: 'operation',\n resolutionStatus: 'ambiguous_operation',\n candidates: projection.items,\n candidateCount: projection.totalCount,\n shownCandidateCount: projection.shownCount,\n omittedCandidateCount: projection.omittedCount,\n serviceSuggestions: serviceProjection.items,\n serviceSuggestionCount: serviceProjection.totalCount,\n shownServiceSuggestionCount: serviceProjection.shownCount,\n omittedServiceSuggestionCount: serviceProjection.omittedCount,\n selectorSuggestions: selectorProjection.items,\n selectorSuggestionCount: selectorProjection.totalCount,\n shownSelectorSuggestionCount: selectorProjection.shownCount,\n omittedSelectorSuggestionCount: selectorProjection.omittedCount,\n };\n}\n\nfunction boundedSelectorCandidates(\n candidates: Array<Record<string, unknown>>,\n): BoundedProjection<Record<string, unknown>> {\n return projectBounded(candidates, (left, right) =>\n String(left.repoName ?? '').localeCompare(String(right.repoName ?? ''))\n || String(left.servicePath ?? '').localeCompare(String(right.servicePath ?? ''))\n || String(left.className ?? '').localeCompare(String(right.className ?? ''))\n || String(left.sourceFile ?? '').localeCompare(String(right.sourceFile ?? ''))\n || Number(left.sourceLine ?? 0) - Number(right.sourceLine ?? 0)\n || Number(left.handlerClassId ?? left.operationId ?? 0)\n - Number(right.handlerClassId ?? right.operationId ?? 0));\n}\n\nfunction boundedSelectorSuggestions(\n suggestions: string[],\n): BoundedProjection<string> {\n return projectBounded([...new Set(suggestions)], (left, right) =>\n left.localeCompare(right));\n}\nfunction fullSelectorSuggestions(\n candidates: Array<Record<string, unknown>>,\n): string[] {\n const includeRepo = new Set(candidates.map((row) => row.repoName)).size > 1;\n return [...new Set(candidates.flatMap((row) => {\n if (typeof row.servicePath !== 'string'\n || typeof row.operationPath !== 'string') return [];\n const repoSelector = includeRepo && typeof row.repoName === 'string'\n ? `--repo ${row.repoName} `\n : '';\n return [\n `${repoSelector}--service ${row.servicePath} --path ${row.operationPath}`,\n ];\n }))].sort();\n}\n","import type { Db } from '../db/connection.js';\nimport {\n extractPlaceholders,\n matchRuntimeTemplate,\n} from '../linker/dynamic-edge-resolver.js';\nimport type { OperationTarget } from '../linker/service-resolver.js';\n\nexport function dynamicCandidateTargets(\n db: Db,\n effectiveOperationPath: string | undefined,\n originalOperationPath: string | undefined,\n embedded: unknown,\n workspaceId: number | undefined,\n requireCanonical: boolean,\n): OperationTarget[] {\n const canonical = queryOperationTargets(\n db, effectiveOperationPath, originalOperationPath, workspaceId,\n );\n if (canonical.length > 0 || requireCanonical) return canonical;\n return targetsFromEvidence(embedded);\n}\n\nfunction targetsFromEvidence(value: unknown): OperationTarget[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((item): OperationTarget[] => {\n const row = record(item);\n const operationId = numberValue(row.operationId);\n const repoName = stringValue(row.repoName);\n const servicePath = stringValue(row.servicePath);\n const operationPath = stringValue(row.operationPath);\n const operationName = stringValue(row.operationName) ?? operationPath?.replace(/^\\//, '');\n if (operationId === undefined || !repoName || !servicePath || !operationPath || !operationName)\n return [];\n return [{\n operationId,\n repoId: numberValue(row.repoId),\n repoName,\n packageName: stringValue(row.packageName),\n serviceName: stringValue(row.serviceName) ?? '',\n qualifiedName: stringValue(row.qualifiedName) ?? '',\n servicePath,\n operationPath,\n operationName,\n sourceFile: stringValue(row.sourceFile) ?? '',\n sourceLine: numberValue(row.sourceLine) ?? 0,\n score: numberValue(row.score) ?? 0,\n reasons: stringArray(row.reasons),\n }];\n });\n}\n\nfunction queryOperationTargets(\n db: Db,\n effectiveOperationPath: string | undefined,\n originalOperationPath: string | undefined,\n workspaceId: number | undefined,\n): OperationTarget[] {\n const operationPath = effectiveOperationPath ?? originalOperationPath;\n if (!operationPath) return [];\n if (extractPlaceholders(operationPath).length > 0)\n return templateOperationTargets(db, operationPath, workspaceId);\n return exactOperationTargets(db, operationPath, workspaceId);\n}\n\nfunction exactOperationTargets(\n db: Db,\n operationPath: string,\n workspaceId: number | undefined,\n): OperationTarget[] {\n const simple = operationPath.replace(/^\\//, '').split('.').at(-1) ?? operationPath;\n const rows = recordRows(db.prepare(\n `SELECT o.id operationId,r.id repoId,r.name repoName,r.package_name packageName,\n s.service_name serviceName,s.qualified_name qualifiedName,s.service_path servicePath,\n o.operation_path operationPath,o.operation_name operationName,o.source_file sourceFile,\n o.source_line sourceLine FROM cds_operations o\n JOIN cds_services s ON s.id=o.service_id JOIN repositories r ON r.id=s.repo_id\n WHERE (? IS NULL OR r.workspace_id=?)\n AND (o.operation_path IN (?,?) OR o.operation_name=?)\n ORDER BY r.name,s.service_path,o.operation_name,o.id`,\n ).all(workspaceId, workspaceId, operationPath, `/${simple}`, simple));\n return rows.flatMap(targetFromRow);\n}\n\nfunction templateOperationTargets(\n db: Db,\n operationTemplate: string,\n workspaceId: number | undefined,\n): OperationTarget[] {\n const rows = recordRows(db.prepare(\n `SELECT o.id operationId,r.id repoId,r.name repoName,r.package_name packageName,\n s.service_name serviceName,s.qualified_name qualifiedName,s.service_path servicePath,\n o.operation_path operationPath,o.operation_name operationName,o.source_file sourceFile,\n o.source_line sourceLine FROM cds_operations o\n JOIN cds_services s ON s.id=o.service_id JOIN repositories r ON r.id=s.repo_id\n WHERE (? IS NULL OR r.workspace_id=?)\n ORDER BY r.name,s.service_path,o.operation_name,o.id`,\n ).all(workspaceId, workspaceId));\n return rows.flatMap((row) => {\n const operationPath = stringValue(row.operationPath);\n return matchRuntimeTemplate(operationTemplate, operationPath)\n ? targetFromRow(row)\n : [];\n });\n}\n\nfunction targetFromRow(row: Record<string, unknown>): OperationTarget[] {\n const operationId = numberValue(row.operationId);\n const repoName = stringValue(row.repoName);\n const servicePath = stringValue(row.servicePath);\n const operationPath = stringValue(row.operationPath);\n const operationName = stringValue(row.operationName);\n if (operationId === undefined || !repoName || !servicePath || !operationPath || !operationName)\n return [];\n return [{\n operationId,\n repoId: numberValue(row.repoId),\n repoName,\n packageName: stringValue(row.packageName),\n serviceName: stringValue(row.serviceName) ?? '',\n qualifiedName: stringValue(row.qualifiedName) ?? '',\n servicePath,\n operationPath,\n operationName,\n sourceFile: stringValue(row.sourceFile) ?? '',\n sourceLine: numberValue(row.sourceLine) ?? 0,\n score: 0.2,\n reasons: ['operation_path_match'],\n }];\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction recordRows(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n","import type { Db } from '../db/connection.js';\nimport { scanPlaceholders } from '../utils/001-placeholders.js';\nimport type {\n DynamicTargetCandidate,\n DynamicTemplates,\n DynamicVariableProvenance,\n} from './000-dynamic-target-types.js';\n\ninterface RouteImplementationEvidence {\n routeRepoId?: number;\n handlerRepo?: string;\n operationProvenance?: string;\n baseOperationId?: number;\n edgeStatus?: string;\n}\n\ninterface IdentityProposal {\n operationId: number;\n key: string;\n value: string;\n normalizedIdentity: string;\n provenance: DynamicVariableProvenance;\n}\n\ninterface RepositoryIdentity {\n repoId: number;\n repoName: string;\n packageName?: string;\n}\n\ninterface WorkspaceIdentityMatch {\n ownerKey: string;\n key: string;\n value: string;\n normalizedIdentity: string;\n}\n\nexport interface IdentityDerivation {\n operationId: number;\n key: string;\n value: string;\n provenance: DynamicVariableProvenance;\n}\n\nexport function uniqueIdentityDerivations(\n db: Db,\n candidates: DynamicTargetCandidate[],\n templates: DynamicTemplates,\n): IdentityDerivation[] {\n const identities = workspaceIdentities(db, candidates);\n const proposals = candidates.flatMap((candidate) => {\n const implementation = routeImplementationEvidence(\n db, candidate.candidateOperationId,\n );\n const identity = identities.find((item) => item.repoId === candidate.repoId);\n if (!identity || !implementation || !routeOwnerAgrees(candidate, implementation))\n return [];\n return identityProposals(candidate, identity, templates, implementation);\n });\n const matches = workspaceIdentityMatches(identities, templates);\n const competing = competingIdentityKeys(matches);\n const duplicates = duplicateNormalizedIdentities(identities);\n return proposals\n .filter((proposal) => !competing.has(`${proposal.key}:${proposal.value}`))\n .filter((proposal) => !duplicates.has(proposal.normalizedIdentity))\n .map((proposal) => ({\n operationId: proposal.operationId,\n key: proposal.key,\n value: proposal.value,\n provenance: proposal.provenance,\n }));\n}\n\nfunction identityProposals(\n candidate: DynamicTargetCandidate,\n identity: RepositoryIdentity,\n templates: DynamicTemplates,\n implementation: RouteImplementationEvidence,\n): IdentityProposal[] {\n const routeTemplates = [templates.alias, templates.destination]\n .filter((value): value is string => Boolean(value));\n const identities = [\n { name: identity.packageName, sourceKind: 'package_identity', npmPackage: true },\n { name: identity.repoName, sourceKind: 'repository_identity', npmPackage: false },\n ].filter((item): item is {\n name: string; sourceKind: string; npmPackage: boolean;\n } => Boolean(item.name));\n const proposals = routeTemplates.flatMap((template) =>\n identities.flatMap((identity) =>\n proposalForIdentity(\n candidate, template, identity.name, identity.sourceKind,\n identity.npmPackage, implementation,\n )));\n return deduplicateProposals(proposals);\n}\n\nfunction proposalForIdentity(\n candidate: DynamicTargetCandidate,\n template: string,\n identity: string,\n sourceKind: string,\n npmPackage: boolean,\n implementation: RouteImplementationEvidence,\n): IdentityProposal[] {\n const match = matchIdentityTemplate(template, identity, npmPackage);\n if (!match) return [];\n return [{\n operationId: candidate.candidateOperationId,\n key: match.key,\n value: match.value,\n normalizedIdentity: match.normalizedIdentity,\n provenance: {\n sourceKind,\n value: match.value,\n rule: 'exact_normalized_identity_template_match',\n template,\n matchedName: identity,\n normalizedForm: match.normalizedIdentity,\n sourceRepo: candidate.repoName,\n routeOwner: candidate.repoName,\n candidateOperationId: candidate.candidateOperationId,\n effectiveBaseOperationId: implementation.baseOperationId,\n candidateOperationProvenance: implementation.operationProvenance,\n implementationEdgeStatus: implementation.edgeStatus,\n implementationHandlerRepo: implementation.handlerRepo,\n },\n }];\n}\n\nfunction matchIdentityTemplate(\n template: string,\n identity: string,\n npmPackage: boolean,\n): { key: string; value: string; normalizedIdentity: string } | undefined {\n const matches = scanPlaceholders(template);\n const matchSpan = matches[0];\n if (matches.length !== 1 || !matchSpan?.key) return undefined;\n const placeholder = template.slice(matchSpan.start, matchSpan.end);\n const sentinel = 'dynamic_placeholder_token';\n const normalizedTemplate = normalizeIdentity(template.replace(placeholder, sentinel));\n const [prefix, suffix, extra] = normalizedTemplate.split(sentinel);\n if (!prefix || !suffix || extra !== undefined) return undefined;\n const normalizedIdentity = normalizeIdentity(identity, npmPackage);\n const match = new RegExp(`^${escapeRegex(prefix)}([a-z0-9]+)${escapeRegex(suffix)}$`)\n .exec(normalizedIdentity);\n if (!match?.[1]) return undefined;\n return { key: matchSpan.key.trim(), value: match[1], normalizedIdentity };\n}\n\nfunction competingIdentityKeys(\n proposals: Array<{ key: string; value: string; ownerKey: string }>,\n): Set<string> {\n const owners = new Map<string, Set<string>>();\n for (const proposal of proposals) {\n const key = `${proposal.key}:${proposal.value}`;\n owners.set(key, new Set([...(owners.get(key) ?? []), proposal.ownerKey]));\n }\n return new Set([...owners.entries()]\n .filter(([, repos]) => repos.size > 1)\n .map(([key]) => key));\n}\n\nfunction duplicateNormalizedIdentities(\n identities: RepositoryIdentity[],\n): Set<string> {\n const owners = new Map<string, Set<string>>();\n for (const identity of identities) {\n for (const [name, npmPackage] of [\n [identity.packageName, true],\n [identity.repoName, false],\n ] as const) {\n if (!name) continue;\n const normalized = normalizeIdentity(name, npmPackage);\n owners.set(normalized, new Set([\n ...(owners.get(normalized) ?? []),\n `repository:${identity.repoId}`,\n ]));\n }\n }\n return new Set([...owners.entries()]\n .filter(([, repos]) => repos.size > 1)\n .map(([identity]) => identity));\n}\n\nfunction workspaceIdentityMatches(\n identities: RepositoryIdentity[],\n templates: DynamicTemplates,\n): WorkspaceIdentityMatch[] {\n const routeTemplates = [templates.alias, templates.destination]\n .filter((value): value is string => Boolean(value));\n return identities.flatMap((identity) => {\n const names: Array<{ name?: string; npmPackage: boolean }> = [\n { name: identity.packageName, npmPackage: true },\n { name: identity.repoName, npmPackage: false },\n ];\n return routeTemplates.flatMap((template) =>\n names.flatMap(({ name, npmPackage }) => {\n if (!name) return [];\n const match = matchIdentityTemplate(template, name, npmPackage);\n return match ? [{\n ownerKey: `repository:${identity.repoId}`,\n key: match.key,\n value: match.value,\n normalizedIdentity: match.normalizedIdentity,\n }] : [];\n }));\n });\n}\n\nfunction workspaceIdentities(\n db: Db,\n candidates: DynamicTargetCandidate[],\n): RepositoryIdentity[] {\n const repoIds = [...new Set(candidates.flatMap((candidate) =>\n candidate.repoId === undefined ? [] : [candidate.repoId]))].sort((a, b) => a - b);\n if (repoIds.length === 0) return [];\n const placeholders = repoIds.map(() => '?').join(',');\n const rows = db.prepare(`SELECT id repoId,name repoName,package_name packageName\n FROM repositories WHERE workspace_id IN (\n SELECT DISTINCT workspace_id FROM repositories WHERE id IN (${placeholders})\n ) ORDER BY workspace_id,name,absolute_path,id`).all(...repoIds);\n return rows.flatMap((row): RepositoryIdentity[] => {\n const repoId = numberValue(row.repoId);\n const repoName = stringValue(row.repoName);\n return repoId === undefined || !repoName ? [] : [{\n repoId,\n repoName,\n packageName: stringValue(row.packageName),\n }];\n });\n}\n\nfunction deduplicateProposals(rows: IdentityProposal[]): IdentityProposal[] {\n const sorted = [...rows].sort((left, right) =>\n left.operationId - right.operationId\n || left.key.localeCompare(right.key)\n || left.value.localeCompare(right.value)\n || left.provenance.sourceKind.localeCompare(right.provenance.sourceKind));\n const seen = new Set<string>();\n return sorted.filter((row) => {\n const key = [row.operationId, row.key, row.value, row.normalizedIdentity].join(':');\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction routeOwnerAgrees(\n candidate: DynamicTargetCandidate,\n implementation: RouteImplementationEvidence | undefined,\n): boolean {\n return candidate.repoId !== undefined\n && implementation?.routeRepoId === candidate.repoId\n && implementation.edgeStatus === 'resolved'\n && candidate.viable\n && candidate.reasons.includes('service_path_template_match');\n}\n\nfunction routeImplementationEvidence(\n db: Db,\n operationId: number,\n): RouteImplementationEvidence | undefined {\n const rows = db.prepare(\n `SELECT s.repo_id routeRepoId,o.provenance operationProvenance,\n o.base_operation_id baseOperationId,e.status edgeStatus,\n r.name handlerRepo\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN graph_edges e ON e.edge_type='OPERATION_IMPLEMENTED_BY_HANDLER'\n AND e.from_kind='operation' AND e.from_id=CAST(o.id AS TEXT)\n JOIN handler_methods hm ON hm.id=CAST(e.to_id AS INTEGER)\n JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id\n WHERE e.edge_type='OPERATION_IMPLEMENTED_BY_HANDLER' AND e.status='resolved'\n AND o.id=?\n ORDER BY e.id,hm.id`,\n ).all(String(operationId));\n if (rows.length !== 1) return undefined;\n const row = rows[0];\n if (!row) return undefined;\n return {\n routeRepoId: numberValue(row.routeRepoId),\n handlerRepo: stringValue(row.handlerRepo),\n operationProvenance: stringValue(row.operationProvenance),\n baseOperationId: numberValue(row.baseOperationId),\n edgeStatus: stringValue(row.edgeStatus),\n };\n}\n\nfunction normalizeIdentity(value: string, npmPackage = false): string {\n const unscoped = npmPackage && /^@[^/]+\\/[^/]+$/.test(value)\n ? value.slice(value.indexOf('/') + 1)\n : value;\n return unscoped\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|(?<!_)_+$/g, '');\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { Db } from '../db/connection.js';\nimport {\n projectBounded,\n type BoundedProjection,\n} from '../utils/000-bounded-projection.js';\nimport type { DynamicVariableProvenance } from './000-dynamic-target-types.js';\n\nexport interface DynamicReferenceRow {\n bindingId?: number;\n alias?: string;\n aliasExpr?: string;\n destination?: string;\n servicePath?: string;\n sourceKind: 'service_binding' | 'cds_require';\n selection: 'selected_binding' | 'selected_binding_require' | 'fallback';\n repoName: string;\n sourceFile?: string;\n sourceLine?: number;\n helperChain?: unknown;\n}\n\nexport interface DynamicRoutingContext {\n outboundCallId?: number;\n callerRepoId?: number;\n callerRepo?: string;\n selectedBindingId?: number;\n bindingResolutionStatus: string;\n selectedBinding?: DynamicReferenceRow;\n bindingAlternatives: Array<Record<string, unknown>>;\n bindingAlternativeCount: number;\n shownBindingAlternativeCount: number;\n omittedBindingAlternativeCount: number;\n references: DynamicReferenceRow[];\n fallbackUsed: boolean;\n}\n\ninterface SelectedDynamicReference extends DynamicReferenceRow {\n outboundCallId: number;\n callerRepoId: number;\n}\n\nexport function dynamicRoutingContext(\n db: Db,\n workspaceId: number | undefined,\n evidence: Record<string, unknown>,\n): DynamicRoutingContext {\n const selected = selectedBinding(db, workspaceId, evidence);\n const persisted = persistedBindingResolution(evidence);\n const alternatives = boundedAlternatives(\n persisted.candidates,\n persisted.candidateCount,\n );\n if (selected) {\n const requires = exactRequireReferences(db, workspaceId, selected);\n return {\n ...contextBase(selected, persisted.status, alternatives),\n selectedBinding: selected,\n references: [selected, ...requires],\n fallbackUsed: false,\n };\n }\n const callerRepoId = numberValue(evidence.repoId);\n const callerRepo = stringValue(evidence.repo);\n return {\n outboundCallId: numberValue(evidence.outboundCallId ?? evidence.callId),\n callerRepoId,\n callerRepo,\n bindingResolutionStatus: persisted.status,\n bindingAlternatives: alternatives.items,\n bindingAlternativeCount: alternatives.totalCount,\n shownBindingAlternativeCount: alternatives.shownCount,\n omittedBindingAlternativeCount: alternatives.omittedCount,\n references: fallbackReferences(db, workspaceId, callerRepoId, callerRepo),\n fallbackUsed: true,\n };\n}\n\nexport function dynamicReferenceProvenance(\n reference: DynamicReferenceRow,\n kind: 'alias' | 'destination',\n template: string,\n value: string,\n): DynamicVariableProvenance {\n const sourceKind = reference.selection === 'selected_binding'\n ? `selected_binding.${kind}`\n : reference.selection === 'selected_binding_require'\n ? `selected_binding_require.${kind}`\n : `${reference.sourceKind}.${kind}`;\n return {\n sourceKind,\n value,\n rule: 'exact_indexed_reference_template_match',\n template,\n sourceRepo: reference.repoName,\n sourceFile: reference.sourceFile,\n sourceLine: reference.sourceLine,\n selection: reference.selection,\n bindingId: reference.bindingId,\n };\n}\n\nfunction contextBase(\n selected: SelectedDynamicReference,\n status: string,\n alternatives: ReturnType<typeof boundedAlternatives>,\n): Omit<DynamicRoutingContext, 'selectedBinding' | 'references' | 'fallbackUsed'> {\n return {\n outboundCallId: selected.outboundCallId,\n callerRepoId: selected.callerRepoId,\n callerRepo: selected.repoName,\n selectedBindingId: selected.bindingId,\n bindingResolutionStatus: status,\n bindingAlternatives: alternatives.items,\n bindingAlternativeCount: alternatives.totalCount,\n shownBindingAlternativeCount: alternatives.shownCount,\n omittedBindingAlternativeCount: alternatives.omittedCount,\n };\n}\n\nfunction selectedBinding(\n db: Db,\n workspaceId: number | undefined,\n evidence: Record<string, unknown>,\n): SelectedDynamicReference | undefined {\n const callId = numberValue(evidence.outboundCallId ?? evidence.callId);\n if (callId === undefined) return undefined;\n const row = db.prepare(`SELECT c.id outboundCallId,c.repo_id callerRepoId,r.name repoName,\n b.id bindingId,b.alias,b.alias_expr aliasExpr,b.destination_expr destination,\n b.service_path_expr servicePath,b.source_file sourceFile,b.source_line sourceLine,\n b.helper_chain_json helperChainJson\n FROM outbound_calls c JOIN repositories r ON r.id=c.repo_id\n JOIN service_bindings b ON b.id=c.service_binding_id AND b.repo_id=c.repo_id\n WHERE c.id=? AND (? IS NULL OR r.workspace_id=?)`).get(\n callId, workspaceId, workspaceId,\n );\n return selectedReferenceFromRow(row);\n}\n\nfunction selectedReferenceFromRow(\n row: Record<string, unknown> | undefined,\n): SelectedDynamicReference | undefined {\n const outboundCallId = numberValue(row?.outboundCallId);\n const callerRepoId = numberValue(row?.callerRepoId);\n const reference = referenceFromRow(\n row, 'service_binding', 'selected_binding',\n )[0];\n return reference && outboundCallId !== undefined && callerRepoId !== undefined\n ? { ...reference, outboundCallId, callerRepoId }\n : undefined;\n}\n\nfunction exactRequireReferences(\n db: Db,\n workspaceId: number | undefined,\n selected: SelectedDynamicReference,\n): DynamicReferenceRow[] {\n if (!(selected.aliasExpr ?? selected.alias)) return [];\n const rows = db.prepare(`SELECT req.alias,req.destination,req.service_path servicePath,\n r.name repoName,'package.json' sourceFile,1 sourceLine\n FROM cds_requires req JOIN repositories r ON r.id=req.repo_id\n WHERE req.repo_id=? AND (? IS NULL OR r.workspace_id=?)\n ORDER BY req.alias,req.id`).all(\n selected.callerRepoId, workspaceId, workspaceId,\n );\n return rows.flatMap((row) => referenceFromRow(\n row, 'cds_require', 'selected_binding_require', selected.bindingId,\n ));\n}\n\nfunction fallbackReferences(\n db: Db,\n workspaceId: number | undefined,\n callerRepoId: number | undefined,\n callerRepo: string | undefined,\n): DynamicReferenceRow[] {\n if (callerRepoId === undefined && callerRepo === undefined) return [];\n const rows = db.prepare(`SELECT b.id bindingId,COALESCE(b.alias,b.alias_expr) alias,\n b.alias_expr aliasExpr,b.destination_expr destination,b.service_path_expr servicePath,\n 'service_binding' sourceKind,r.name repoName,b.source_file sourceFile,\n b.source_line sourceLine,b.helper_chain_json helperChainJson,0 sourcePriority\n FROM service_bindings b JOIN repositories r ON r.id=b.repo_id\n WHERE (? IS NULL OR r.workspace_id=?)\n AND ((? IS NOT NULL AND r.id=?) OR (? IS NULL AND r.name=?))\n UNION ALL\n SELECT NULL,req.alias,req.alias,req.destination,req.service_path,\n 'cds_require',r.name,'package.json',1,NULL,1\n FROM cds_requires req JOIN repositories r ON r.id=req.repo_id\n WHERE (? IS NULL OR r.workspace_id=?)\n AND ((? IS NOT NULL AND r.id=?) OR (? IS NULL AND r.name=?))\n ORDER BY sourcePriority,repoName,sourceFile,sourceLine`).all(\n workspaceId, workspaceId, callerRepoId, callerRepoId, callerRepoId, callerRepo,\n workspaceId, workspaceId, callerRepoId, callerRepoId, callerRepoId, callerRepo,\n );\n return rows.flatMap((row) => {\n const sourceKind = row.sourceKind;\n return sourceKind === 'service_binding' || sourceKind === 'cds_require'\n ? referenceFromRow(row, sourceKind, 'fallback')\n : [];\n });\n}\n\nfunction referenceFromRow(\n row: Record<string, unknown> | undefined,\n sourceKind: DynamicReferenceRow['sourceKind'],\n selection: DynamicReferenceRow['selection'],\n bindingId = numberValue(row?.bindingId),\n): DynamicReferenceRow[] {\n const repoName = stringValue(row?.repoName);\n if (!repoName) return [];\n return [{\n bindingId,\n alias: stringValue(row?.alias),\n aliasExpr: stringValue(row?.aliasExpr),\n destination: stringValue(row?.destination),\n servicePath: stringValue(row?.servicePath),\n sourceKind,\n selection,\n repoName,\n sourceFile: stringValue(row?.sourceFile),\n sourceLine: numberValue(row?.sourceLine),\n helperChain: parsedJson(row?.helperChainJson),\n }];\n}\n\nfunction persistedBindingResolution(evidence: Record<string, unknown>): {\n status: string;\n candidates: Array<Record<string, unknown>>;\n candidateCount: number;\n} {\n const outbound = record(evidence.outboundEvidence);\n const resolution = record(outbound.serviceBindingResolution);\n return {\n status: stringValue(resolution.status) ?? 'unknown',\n candidates: recordArray(resolution.candidates),\n candidateCount: numberValue(resolution.candidateCount) ?? 0,\n };\n}\n\nfunction boundedAlternatives(\n rows: Array<Record<string, unknown>>,\n reportedCount: number,\n): BoundedProjection<Record<string, unknown>> {\n const projection = projectBounded(rows, (left, right) =>\n Number(left.bindingId ?? 0) - Number(right.bindingId ?? 0)\n || String(left.sourceFile ?? '').localeCompare(String(right.sourceFile ?? ''))\n || Number(left.sourceLine ?? 0) - Number(right.sourceLine ?? 0));\n const totalCount = Math.max(reportedCount, projection.totalCount);\n return {\n ...projection,\n totalCount,\n omittedCount: Math.max(0, totalCount - projection.shownCount),\n };\n}\n\nfunction parsedJson(value: unknown): unknown {\n if (typeof value !== 'string' || value.length === 0) return undefined;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return undefined;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction recordArray(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport {\n applyVariables,\n extractPlaceholders,\n matchRuntimeTemplate,\n} from '../linker/dynamic-edge-resolver.js';\nimport { normalizeODataOperationInvocationPath } from '../linker/odata-path-normalizer.js';\nimport type { OperationTarget } from '../linker/service-resolver.js';\nimport type { DynamicMode } from '../types.js';\nimport { dynamicCandidateTargets } from './004-dynamic-candidate-sources.js';\nimport { projectBounded } from '../utils/000-bounded-projection.js';\nimport { uniqueIdentityDerivations } from './001-dynamic-identity.js';\nimport {\n dynamicReferenceProvenance,\n dynamicRoutingContext,\n type DynamicReferenceRow,\n type DynamicRoutingContext,\n} from './003-dynamic-references.js';\nimport type {\n DynamicTargetAnalysis,\n DynamicTargetCandidate,\n DynamicTemplates,\n DynamicVariableProvenance,\n} from './000-dynamic-target-types.js';\nexport type {\n DynamicTargetAnalysis,\n DynamicTargetCandidate,\n} from './000-dynamic-target-types.js';\ntype Templates = DynamicTemplates;\ntype VariableProvenance = DynamicVariableProvenance;\ninterface AnalysisInputs {\n original: Templates;\n effective: Templates;\n required: string[];\n requiredSources: Record<string, string[]>;\n supplied: Record<string, string>;\n order: string[];\n callerRepo?: string;\n callerRepoId?: number;\n routing: DynamicRoutingContext;\n}\n\nexport function analyzeDynamicTargetCandidates(\n db: Db,\n evidence: Record<string, unknown>,\n workspaceId: number | undefined,\n mode: DynamicMode,\n maxCandidates: number,\n): DynamicTargetAnalysis | undefined {\n const inputs = analysisInputs(db, evidence, workspaceId);\n if (inputs.required.length === 0) return undefined;\n const targets = dynamicCandidateTargets(\n db,\n inputs.effective.operationPath,\n inputs.original.operationPath,\n evidence.candidates,\n workspaceId,\n inputs.routing.outboundCallId !== undefined,\n );\n const candidates = buildCandidates(db, targets, inputs.routing.references, inputs);\n applyUniqueIdentityEvidence(db, candidates, inputs);\n finalizeCandidates(candidates, inputs.order);\n const ranked = stableRank(candidates);\n const inference = inferenceDecision(ranked);\n applyModeState(ranked, mode, inference);\n const viable = ranked.filter((candidate) => candidate.viable);\n const rejected = ranked.filter((candidate) => candidate.rejected);\n const shown = viable.slice(0, maxCandidates)\n .map((candidate) => boundedCandidate(candidate, maxCandidates));\n const shownRejected = rejected.slice(0, maxCandidates)\n .map((candidate) => boundedCandidate(candidate, maxCandidates));\n const suggestionProjection = suggestedVarSets(viable, inputs.order, maxCandidates);\n return {\n mode,\n maxCandidates,\n candidateCount: ranked.length,\n viableCandidateCount: viable.length,\n rejectedCandidateCount: rejected.length,\n shownCandidateCount: shown.length,\n omittedCandidateCount: Math.max(0, viable.length - shown.length),\n shownRejectedCandidateCount: shownRejected.length,\n omittedRejectedCandidateCount: Math.max(0, rejected.length - shownRejected.length),\n missingVariables: inputs.required.filter((key) => inputs.supplied[key] === undefined),\n requiredVariables: inputs.required,\n suppliedVariables: inputs.supplied,\n appliedSuppliedVariables: requiredSuppliedVariables(inputs),\n substitutedSignals: inputs.effective,\n candidates: shown,\n shownCandidates: shown,\n rejectedCandidates: shownRejected,\n suggestedVarSets: suggestionProjection.items,\n suggestedVarSetCount: suggestionProjection.totalCount,\n shownSuggestedVarSetCount: suggestionProjection.shownCount,\n omittedSuggestedVarSetCount: suggestionProjection.omittedCount,\n inference,\n routingContext: routingEvidence(inputs.routing),\n };\n}\n\nfunction analysisInputs(\n db: Db,\n evidence: Record<string, unknown>,\n workspaceId: number | undefined,\n): AnalysisInputs {\n const routing = dynamicRoutingContext(db, workspaceId, evidence);\n const supplied = stringRecord(evidence.suppliedRuntimeVariables);\n const original = templatesFromEvidence(evidence, routing);\n const effective = effectiveTemplates(original, supplied);\n const requiredSources = placeholderSources(original);\n const required = Object.keys(requiredSources);\n return {\n original,\n effective,\n required,\n requiredSources,\n supplied,\n order: variableOrder(original, required),\n callerRepo: routing.callerRepo ?? stringValue(evidence.repo),\n callerRepoId: routing.callerRepoId ?? numberValue(evidence.repoId),\n routing,\n };\n}\n\nfunction buildCandidates(\n db: Db,\n targets: OperationTarget[],\n references: DynamicReferenceRow[],\n inputs: AnalysisInputs,\n): DynamicTargetCandidate[] {\n return targets.map((target) => {\n const state = emptyCandidate(target, inputs);\n applyDirectSignal(state, inputs, 'operationPath', target.operationPath, 0.25);\n applyDirectSignal(state, inputs, 'servicePath', target.servicePath, 0.35);\n const matchingReferences = references.filter((reference) =>\n referenceMatchesCandidate(reference, target.servicePath)\n && referenceMatchesSelectedAlias(reference, inputs.routing.selectedBinding));\n const referencesForSignals = fallbackReferencesForCandidate(\n state, matchingReferences, inputs.routing.fallbackUsed,\n );\n applyReferenceSignal(state, inputs, referencesForSignals, 'alias');\n applyReferenceSignal(state, inputs, referencesForSignals, 'destination');\n if (hasResolvedImplementation(db, target.operationId))\n addScore(state, 0.1, 'implementation_edge_resolved');\n return state;\n });\n}\n\nfunction fallbackReferencesForCandidate(\n state: DynamicTargetCandidate,\n references: DynamicReferenceRow[],\n fallbackUsed: boolean,\n): DynamicReferenceRow[] {\n if (!fallbackUsed) return references;\n const unique = uniqueFallbackReferences(references);\n if (unique.length <= 1) return unique;\n addReason(state, 'fallback_reference_ambiguous');\n addInferenceBlock(state, 'fallback_reference_ambiguous');\n return [];\n}\n\nfunction uniqueFallbackReferences(\n references: DynamicReferenceRow[],\n): DynamicReferenceRow[] {\n const seen = new Set<string>();\n return references.filter((reference) => {\n const signature = [\n reference.sourceKind,\n reference.alias,\n reference.destination,\n reference.servicePath,\n ].join('\\0');\n if (seen.has(signature)) return false;\n seen.add(signature);\n return true;\n });\n}\n\nfunction emptyCandidate(\n target: OperationTarget,\n inputs: AnalysisInputs,\n): DynamicTargetCandidate {\n return {\n candidateOperationId: target.operationId,\n repoId: target.repoId,\n repoName: target.repoName,\n packageName: target.packageName ?? undefined,\n serviceName: target.serviceName,\n qualifiedName: target.qualifiedName,\n servicePath: target.servicePath,\n operationPath: target.operationPath,\n operationName: target.operationName,\n sourceFile: target.sourceFile,\n sourceLine: target.sourceLine,\n originalTemplates: inputs.original,\n effectiveValues: inputs.effective,\n requiredVariables: inputs.required,\n requiredVariableSources: inputs.requiredSources,\n suppliedVariables: inputs.supplied,\n completeVariables: { ...inputs.supplied },\n derivedVariables: {},\n derivedVariableSources: {},\n derivationProvenance: {},\n missingVariables: [],\n conflicts: [],\n score: Math.max(0.2, Number(target.score ?? 0)),\n explicitSignalStrength: 0,\n reasons: nonEmptyStrings(target.reasons, ['operation_path_match']),\n rejectedReasons: [],\n inferenceBlockReasons: [],\n viable: true,\n rejected: false,\n selected: false,\n exploratory: false,\n };\n}\n\nfunction applyDirectSignal(\n state: DynamicTargetCandidate,\n inputs: AnalysisInputs,\n kind: 'servicePath' | 'operationPath',\n concrete: string,\n score: number,\n): void {\n const effective = inputs.effective[kind];\n const original = inputs.original[kind];\n if (effective && !matchRuntimeTemplate(effective, concrete)) {\n reject(state, `${signalCode(kind)}_contradicts_runtime_substitution`);\n return;\n }\n if (!effective) return;\n const suppliedKeys = extractPlaceholders(original)\n .filter((key) => inputs.supplied[key] !== undefined);\n state.explicitSignalStrength += suppliedKeys.length;\n const matched = matchRuntimeTemplate(original, concrete) ?? {};\n const fromSelectedBinding = kind === 'servicePath'\n && inputs.routing.selectedBinding !== undefined;\n for (const [key, value] of Object.entries(matched)) {\n addDerivation(state, key, value, {\n sourceKind: fromSelectedBinding\n ? `selected_binding.${signalCode(kind)}_template`\n : `${signalCode(kind)}_template`,\n value,\n rule: fromSelectedBinding\n ? 'exact_selected_binding_template_match'\n : 'exact_template_match',\n template: original,\n sourceRepo: fromSelectedBinding ? inputs.routing.selectedBinding?.repoName : undefined,\n sourceFile: fromSelectedBinding ? inputs.routing.selectedBinding?.sourceFile : undefined,\n sourceLine: fromSelectedBinding ? inputs.routing.selectedBinding?.sourceLine : undefined,\n selection: fromSelectedBinding ? 'selected_binding' : 'call_evidence',\n });\n }\n addScore(state, score, `${signalCode(kind)}_template_match`);\n}\n\nfunction applyReferenceSignal(\n state: DynamicTargetCandidate,\n inputs: AnalysisInputs,\n references: DynamicReferenceRow[],\n kind: 'alias' | 'destination',\n): void {\n const original = inputs.original[kind];\n const effective = inputs.effective[kind];\n if (!original || extractPlaceholders(original).length === 0) return;\n const values = references.flatMap((reference) => {\n const concrete = kind === 'alias' ? reference.alias : reference.destination;\n return isConcrete(concrete) ? [{ reference, concrete }] : [];\n });\n if (effective && extractPlaceholders(effective).length === 0\n && values.length > 0 && !values.some(({ concrete }) => concrete === effective)) {\n reject(state, `${kind}_contradicts_runtime_substitution`);\n }\n let matchedSignal = false;\n for (const { reference, concrete } of values) {\n const matched = matchRuntimeTemplate(original, concrete);\n if (!matched) continue;\n matchedSignal = true;\n for (const [key, value] of Object.entries(matched)) {\n addDerivation(\n state, key, value,\n dynamicReferenceProvenance(reference, kind, original, value),\n );\n }\n }\n if (matchedSignal) {\n state.explicitSignalStrength += extractPlaceholders(original)\n .filter((key) => inputs.supplied[key] !== undefined).length;\n addScore(state, 0.2, `${kind}_template_match`);\n }\n}\n\nfunction applyUniqueIdentityEvidence(\n db: Db,\n candidates: DynamicTargetCandidate[],\n inputs: AnalysisInputs,\n): void {\n for (const derivation of uniqueIdentityDerivations(db, candidates, inputs.original)) {\n const candidate = candidates.find((item) =>\n item.candidateOperationId === derivation.operationId);\n if (!candidate) continue;\n addDerivation(candidate, derivation.key, derivation.value, derivation.provenance);\n addScore(candidate, 0.2, 'exact_identity_template_match');\n }\n}\n\nfunction addDerivation(\n state: DynamicTargetCandidate,\n key: string,\n value: string,\n provenance: VariableProvenance,\n): void {\n const priorProvenance = state.derivationProvenance[key] ?? [];\n state.derivationProvenance[key] = uniqueProvenance([...priorProvenance, provenance]);\n const supplied = state.suppliedVariables[key];\n if (supplied !== undefined && supplied !== value) {\n addConflict(state, key, [supplied, value], 'explicit_value_conflicts_with_derived_value');\n return;\n }\n const prior = state.derivedVariables[key];\n if (prior !== undefined && prior !== value) {\n addConflict(state, key, [prior, value], 'conflicting_strong_derivations');\n return;\n }\n if (supplied === undefined) state.derivedVariables[key] = value;\n state.completeVariables[key] = supplied ?? value;\n state.derivedVariableSources[key] ??= provenance;\n}\n\nfunction addConflict(\n state: DynamicTargetCandidate,\n key: string,\n values: string[],\n reason: string,\n): void {\n const sources = (state.derivationProvenance[key] ?? [])\n .map((item) => item.sourceKind).sort();\n state.conflicts.push({ key, values: [...new Set(values)].sort(), reason, sources });\n reject(state, reason);\n}\n\nfunction uniqueProvenance(rows: VariableProvenance[]): VariableProvenance[] {\n const sorted = [...rows].sort((left, right) =>\n left.sourceKind.localeCompare(right.sourceKind)\n || String(left.matchedName ?? '').localeCompare(String(right.matchedName ?? ''))\n || left.value.localeCompare(right.value));\n const seen = new Set<string>();\n return sorted.filter((row) => {\n const key = JSON.stringify(row);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction finalizeCandidates(candidates: DynamicTargetCandidate[], order: string[]): void {\n for (const candidate of candidates) {\n candidate.missingVariables = order.filter((key) =>\n candidate.completeVariables[key] === undefined);\n candidate.viable = candidate.rejectedReasons.length === 0;\n candidate.rejected = !candidate.viable;\n if (candidate.missingVariables.length === 0 && candidate.viable)\n addScore(candidate, 0.15, 'all_runtime_variables_derived');\n else if (candidate.missingVariables.length > 0)\n addReason(candidate, 'missing_required_runtime_variable');\n candidate.score = Math.max(0, Math.min(1, candidate.score));\n candidate.cli = candidate.missingVariables.length === 0 && candidate.viable\n ? cliFor(candidate.completeVariables, order)\n : undefined;\n }\n}\n\nfunction stableRank(candidates: DynamicTargetCandidate[]): DynamicTargetCandidate[] {\n return [...candidates].sort((left, right) =>\n Number(right.viable) - Number(left.viable)\n || right.score - left.score\n || right.explicitSignalStrength - left.explicitSignalStrength\n || left.repoName.localeCompare(right.repoName)\n || String(left.packageName ?? '').localeCompare(String(right.packageName ?? ''))\n || left.servicePath.localeCompare(right.servicePath)\n || left.operationPath.localeCompare(right.operationPath)\n || left.operationName.localeCompare(right.operationName)\n || left.candidateOperationId - right.candidateOperationId);\n}\n\nfunction inferenceDecision(candidates: DynamicTargetCandidate[]): Record<string, unknown> {\n const viable = candidates.filter((candidate) => candidate.viable);\n const first = viable[0];\n const second = viable[1];\n if (!first || first.missingVariables.length > 0)\n return { status: 'unresolved', reason: 'missing_required_runtime_variable' };\n if (first.inferenceBlockReasons.length > 0)\n return { status: 'unresolved', reason: first.inferenceBlockReasons[0] };\n if (first.score < 0.85)\n return { status: 'unresolved', reason: 'candidate_score_below_inference_threshold' };\n const scoreGap = second\n ? Number((first.score - second.score).toFixed(12))\n : undefined;\n if (second && scoreGap !== undefined && scoreGap <= 0.05) {\n const reason = scoreGap === 0\n ? 'candidate_tied_with_equal_score'\n : 'candidate_within_inference_margin';\n for (const candidate of viable.filter((item) => first.score - item.score <= 0.05))\n addInferenceBlock(candidate, reason);\n return { status: 'ambiguous', reason, scoreGap, requiredMargin: 0.05 };\n }\n return {\n status: 'resolved',\n candidateOperationId: first.candidateOperationId,\n inferredVariables: first.completeVariables,\n score: first.score,\n reasons: first.reasons,\n };\n}\n\nfunction boundedCandidate(\n candidate: DynamicTargetCandidate,\n limit: number,\n): DynamicTargetCandidate {\n const provenanceProjections = Object.fromEntries(\n Object.entries(candidate.derivationProvenance)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, rows]) => [key, projectBounded(rows, compareProvenance, limit)]),\n );\n const derivationProvenance = Object.fromEntries(Object.entries(provenanceProjections)\n .map(([key, projection]) => [key, projection.items]));\n const derivationProvenanceCounts = Object.fromEntries(Object.entries(provenanceProjections)\n .map(([key, projection]) => [key, {\n provenanceCount: projection.totalCount,\n shownProvenanceCount: projection.shownCount,\n omittedProvenanceCount: projection.omittedCount,\n }]));\n const conflicts = projectBounded(candidate.conflicts, compareConflict, limit);\n return {\n ...candidate,\n derivationProvenance,\n derivationProvenanceCounts,\n conflicts: conflicts.items.map(boundedConflict),\n conflictCount: conflicts.totalCount,\n shownConflictCount: conflicts.shownCount,\n omittedConflictCount: conflicts.omittedCount,\n };\n}\n\nfunction compareProvenance(\n left: DynamicVariableProvenance,\n right: DynamicVariableProvenance,\n): number {\n return left.sourceKind.localeCompare(right.sourceKind)\n || String(left.matchedName ?? '').localeCompare(String(right.matchedName ?? ''))\n || left.value.localeCompare(right.value);\n}\n\nfunction compareConflict(\n left: DynamicTargetCandidate['conflicts'][number],\n right: DynamicTargetCandidate['conflicts'][number],\n): number {\n return left.key.localeCompare(right.key)\n || left.reason.localeCompare(right.reason)\n || left.values.join('\\0').localeCompare(right.values.join('\\0'));\n}\n\nfunction boundedConflict(\n conflict: DynamicTargetCandidate['conflicts'][number],\n): DynamicTargetCandidate['conflicts'][number] & Record<string, unknown> {\n const sources = projectBounded(conflict.sources, (left, right) =>\n left.localeCompare(right));\n return {\n ...conflict,\n sources: sources.items,\n sourceCount: sources.totalCount,\n shownSourceCount: sources.shownCount,\n omittedSourceCount: sources.omittedCount,\n };\n}\n\nfunction applyModeState(\n candidates: DynamicTargetCandidate[],\n mode: DynamicMode,\n inference: Record<string, unknown>,\n): void {\n const selectedId = mode === 'infer' && inference.status === 'resolved'\n ? numberValue(inference.candidateOperationId)\n : undefined;\n for (const candidate of candidates) {\n candidate.selected = selectedId === candidate.candidateOperationId;\n candidate.exploratory = mode === 'candidates' && candidate.viable;\n }\n}\n\nfunction suggestedVarSets(\n candidates: DynamicTargetCandidate[],\n order: string[],\n limit: number,\n): ReturnType<typeof projectBounded<{ variables: Record<string, string>; cli: string }>> {\n const seen = new Set<string>();\n const rows: Array<{ variables: Record<string, string>; cli: string }> = [];\n for (const candidate of candidates) {\n if (!candidate.cli || candidate.missingVariables.length > 0) continue;\n if (seen.has(candidate.cli)) continue;\n seen.add(candidate.cli);\n rows.push({ variables: orderedVariables(candidate.completeVariables, order), cli: candidate.cli });\n }\n return projectBounded(rows, (left, right) => left.cli.localeCompare(right.cli), limit);\n}\n\nfunction hasResolvedImplementation(db: Db, operationId: number): boolean {\n return Boolean(db.prepare(\n \"SELECT 1 FROM graph_edges WHERE edge_type='OPERATION_IMPLEMENTED_BY_HANDLER' AND status='resolved' AND from_kind='operation' AND from_id=? LIMIT 1\",\n ).get(String(operationId)));\n}\nfunction templatesFromEvidence(\n evidence: Record<string, unknown>,\n routing: DynamicRoutingContext,\n): Templates {\n const selected = routing.selectedBinding;\n return {\n servicePath: selected?.servicePath ?? substitutionSignal(evidence, 'servicePath', 'original'),\n operationPath: substitutionSignal(evidence, 'operationPath', 'original'),\n alias: selected?.aliasExpr ?? selected?.alias ?? substitutionSignal(evidence,\n evidence.serviceAliasExpr !== undefined ? 'serviceAliasExpr' : 'serviceAlias', 'original'),\n destination: selected?.destination ?? substitutionSignal(evidence, 'destination', 'original'),\n };\n}\nfunction effectiveTemplates(\n templates: Templates,\n supplied: Record<string, string>,\n): Templates {\n const operationPath = applyVariables(templates.operationPath, supplied);\n return {\n servicePath: applyVariables(templates.servicePath, supplied),\n operationPath: normalizeODataOperationInvocationPath(operationPath)?.normalizedOperationPath\n ?? operationPath,\n alias: applyVariables(templates.alias, supplied),\n destination: applyVariables(templates.destination, supplied),\n };\n}\n\nfunction substitutionSignal(\n evidence: Record<string, unknown>,\n key: string,\n phase: 'original' | 'effective',\n): string | undefined {\n const substitution = record(record(evidence.runtimeSubstitutions)[key]);\n return stringValue(substitution[phase]) ?? stringValue(evidence[key]);\n}\n\nfunction placeholderSources(templates: Templates): Record<string, string[]> {\n const sources: Record<string, string[]> = {};\n for (const [kind, template] of Object.entries(templates)) {\n if (typeof template !== 'string') continue;\n for (const key of extractPlaceholders(template))\n sources[key] = [...new Set([...(sources[key] ?? []), `${kind}:${template}`])].sort();\n }\n return Object.fromEntries(Object.entries(sources).sort(([left], [right]) =>\n left.localeCompare(right)));\n}\n\nfunction variableOrder(templates: Templates, required: string[]): string[] {\n const ordered = [\n templates.servicePath,\n templates.operationPath,\n templates.alias,\n templates.destination,\n ].flatMap((value) => extractPlaceholders(value));\n return [...new Set([...ordered, ...required])];\n}\n\nfunction referenceMatchesCandidate(\n reference: DynamicReferenceRow,\n servicePath: string,\n): boolean {\n return matchRuntimeTemplate(reference.servicePath, servicePath) !== undefined;\n}\n\nfunction referenceMatchesSelectedAlias(\n reference: DynamicReferenceRow,\n selected: DynamicRoutingContext['selectedBinding'],\n): boolean {\n if (reference.selection !== 'selected_binding_require') return true;\n const template = selected?.aliasExpr ?? selected?.alias;\n return matchRuntimeTemplate(template, reference.alias) !== undefined;\n}\n\nfunction cliFor(variables: Record<string, string>, order: string[]): string {\n return order.filter((key) => variables[key] !== undefined)\n .map((key) => `--var ${shellArgument(`${key}=${variables[key]}`)}`).join(' ');\n}\n\nfunction shellArgument(value: string): string {\n return /^[A-Za-z0-9_./:=+-]+$/.test(value)\n ? value\n : `'${value.replaceAll(\"'\", `'\"'\"'`)}'`;\n}\n\nfunction orderedVariables(\n variables: Record<string, string>,\n order: string[],\n): Record<string, string> {\n return Object.fromEntries(order.flatMap((key) =>\n variables[key] === undefined ? [] : [[key, variables[key]]]));\n}\n\nfunction addScore(state: DynamicTargetCandidate, amount: number, reason: string): void {\n state.score += amount;\n addReason(state, reason);\n}\n\nfunction addReason(state: DynamicTargetCandidate, reason: string): void {\n if (!state.reasons.includes(reason)) state.reasons.push(reason);\n}\n\nfunction reject(state: DynamicTargetCandidate, reason: string): void {\n rejectReasonOnly(state, reason);\n state.viable = false;\n state.rejected = true;\n}\n\nfunction rejectReasonOnly(state: DynamicTargetCandidate, reason: string): void {\n if (!state.rejectedReasons.includes(reason)) state.rejectedReasons.push(reason);\n}\n\nfunction addInferenceBlock(state: DynamicTargetCandidate, reason: string): void {\n addReason(state, reason);\n if (!state.inferenceBlockReasons.includes(reason))\n state.inferenceBlockReasons.push(reason);\n}\n\nfunction requiredSuppliedVariables(inputs: AnalysisInputs): Record<string, string> {\n return Object.fromEntries(inputs.required.flatMap((key) =>\n inputs.supplied[key] === undefined ? [] : [[key, inputs.supplied[key]]]));\n}\n\nfunction routingEvidence(routing: DynamicRoutingContext): Record<string, unknown> {\n const binding = routing.selectedBinding;\n return {\n outboundCallId: routing.outboundCallId,\n callerRepoId: routing.callerRepoId,\n callerRepo: routing.callerRepo,\n selectedBindingId: routing.selectedBindingId,\n bindingResolutionStatus: routing.bindingResolutionStatus,\n selectedBinding: binding ? {\n bindingId: binding.bindingId,\n alias: binding.alias,\n aliasExpr: binding.aliasExpr,\n destination: binding.destination,\n destinationExpr: binding.destination,\n servicePath: binding.servicePath,\n servicePathExpr: binding.servicePath,\n sourceFile: binding.sourceFile,\n sourceLine: binding.sourceLine,\n helperChain: binding.helperChain,\n } : undefined,\n bindingAlternativeCount: routing.bindingAlternativeCount,\n shownBindingAlternativeCount: routing.shownBindingAlternativeCount,\n omittedBindingAlternativeCount: routing.omittedBindingAlternativeCount,\n bindingAlternatives: routing.bindingAlternatives,\n fallbackUsed: routing.fallbackUsed,\n };\n}\n\nfunction signalCode(kind: 'servicePath' | 'operationPath'): string {\n return kind === 'servicePath' ? 'service_path' : 'operation_path';\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction stringRecord(value: unknown): Record<string, string> {\n const entries = Object.entries(record(value))\n .filter((entry): entry is [string, string] => typeof entry[1] === 'string')\n .sort(([left], [right]) => left.localeCompare(right));\n return Object.fromEntries(entries);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n\nfunction nonEmptyStrings(value: unknown, fallback: string[]): string[] {\n const values = stringArray(value).filter((item) => item.length > 0);\n return values.length > 0 ? values : fallback;\n}\n\nfunction isConcrete(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0\n && extractPlaceholders(value).length === 0;\n}\n","import { projectBounded } from '../utils/000-bounded-projection.js';\n\nexport function boundedContextCandidates(values: unknown[]): {\n candidates: Array<Record<string, unknown>>;\n candidateCount: number;\n shownCandidateCount: number;\n omittedCandidateCount: number;\n} {\n const candidates = values.flatMap((value): Array<Record<string, unknown>> => {\n return isRecord(value) ? [value] : [];\n });\n const projection = projectBounded(candidates, (left, right) =>\n Number(right.score ?? 0) - Number(left.score ?? 0)\n || String(left.repoName ?? '').localeCompare(String(right.repoName ?? ''))\n || String(left.servicePath ?? '').localeCompare(String(right.servicePath ?? ''))\n || String(left.sourceFile ?? '').localeCompare(String(right.sourceFile ?? ''))\n || Number(left.sourceLine ?? 0) - Number(right.sourceLine ?? 0)\n || Number(left.bindingId ?? left.operationId ?? 0)\n - Number(right.bindingId ?? right.operationId ?? 0));\n return {\n candidates: projection.items,\n candidateCount: projection.totalCount,\n shownCandidateCount: projection.shownCount,\n omittedCandidateCount: projection.omittedCount,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { Db } from '../db/connection.js';\nimport { normalizeODataOperationInvocationPath } from '../linker/odata-path-normalizer.js';\nimport { resolveOperation, type OperationResolution } from '../linker/service-resolver.js';\nimport { boundedContextCandidates } from './006-contextual-projection.js';\n\nexport interface ContextBinding {\n bindingId?: number;\n alias?: string;\n aliasExpr?: string;\n destinationExpr?: string;\n servicePathExpr?: string;\n requireServicePath?: string;\n requireDestination?: string;\n effectiveServicePath?: string;\n effectiveDestination?: string;\n sourceFile?: string;\n sourceLine?: number;\n source: string;\n callerArgument?: string;\n callerProperty?: string;\n calleeParameter?: string;\n calleeObjectProperty?: string;\n calleeLocalDestructuredIdentifier?: string;\n parameterPropertyAliasKind?: unknown;\n parameterPropertyAliasLine?: unknown;\n calleeReceiver: string;\n callerSite?: { sourceFile?: string; sourceLine?: number };\n calleeSite?: { sourceFile?: string; sourceLine?: number };\n resolutionStatus?: 'selected' | 'ambiguous';\n bindingCandidates?: Array<Record<string, unknown>>;\n}\n\ninterface ContextualCall {\n id: number;\n call_type: string;\n operation_path_expr?: unknown;\n}\n\ninterface PersistedGraphRow {\n status?: string;\n}\n\nexport interface ContextualGraphRow {\n id: number;\n edge_type: string;\n from_id: string;\n to_kind: string;\n to_id: string;\n confidence: number;\n evidence_json: string;\n status: 'resolved';\n}\n\nexport type ContextualResolutionCategory =\n | 'none'\n | 'dynamic_missing'\n | 'ambiguous_binding'\n | 'ambiguous_operation'\n | 'no_matching_operation'\n | 'other_blocker';\n\nexport interface ContextualRuntimeState {\n category: ContextualResolutionCategory;\n message?: string;\n missingVariables?: string[];\n resolutionStatus?: string;\n phase?: 'before_runtime_substitution';\n}\n\nexport interface ContextualRuntimeResolution {\n row?: ContextualGraphRow;\n evidence?: Record<string, unknown>;\n state: ContextualRuntimeState;\n}\n\nexport function dynamicMissingReason(keys: readonly string[]): string {\n const missing = normalizedKeys(keys);\n return missing.length > 0\n ? `Dynamic target is missing runtime variables: ${missing.join(', ')}`\n : 'Dynamic target still requires runtime variables';\n}\n\nexport function isStructuralContextualBlocker(\n state: ContextualRuntimeState | undefined,\n): boolean {\n return state?.category === 'ambiguous_binding'\n || state?.category === 'ambiguous_operation'\n || state?.category === 'no_matching_operation'\n || state?.category === 'other_blocker';\n}\n\nexport function contextualRuntimeResolution(\n db: Db,\n call: ContextualCall,\n binding: ContextBinding | undefined,\n workspaceId: number | undefined,\n persistedRows: PersistedGraphRow[] = [],\n): ContextualRuntimeResolution {\n if (!binding || call.call_type !== 'remote_action'\n || call.operation_path_expr === undefined || call.operation_path_expr === null)\n return { state: { category: 'none' } };\n if (binding.resolutionStatus === 'ambiguous')\n return ambiguousBindingResolution(binding);\n return selectedBindingResolution(db, call, binding, workspaceId, persistedRows);\n}\n\nfunction ambiguousBindingResolution(\n binding: ContextBinding,\n): ContextualRuntimeResolution {\n const candidates = boundedContextCandidates(binding.bindingCandidates ?? []);\n const state: ContextualRuntimeState = {\n category: 'ambiguous_binding',\n message: 'Ambiguous contextual service binding candidates',\n resolutionStatus: 'ambiguous',\n };\n return {\n evidence: {\n contextualServiceBindingAttempted: true,\n contextualBinding: {\n source: binding.source,\n status: 'tied',\n candidates: candidates.candidates,\n candidateCount: candidates.candidateCount,\n shownCandidateCount: candidates.shownCandidateCount,\n omittedCandidateCount: candidates.omittedCandidateCount,\n },\n contextualResolutionStatus: 'ambiguous',\n contextualCandidateCount: candidates.candidateCount,\n contextualPreSubstitutionState: historicalState(state),\n },\n state,\n };\n}\n\nfunction selectedBindingResolution(\n db: Db,\n call: ContextualCall,\n binding: ContextBinding,\n workspaceId: number | undefined,\n persistedRows: PersistedGraphRow[],\n): ContextualRuntimeResolution {\n const normalized = normalizeODataOperationInvocationPath(\n String(call.operation_path_expr),\n );\n const operationPath = normalized?.normalizedOperationPath\n ?? withLeadingSlash(String(call.operation_path_expr));\n const servicePath = binding.effectiveServicePath\n ?? binding.servicePathExpr ?? binding.requireServicePath;\n const destination = binding.effectiveDestination\n ?? binding.destinationExpr ?? binding.requireDestination;\n const resolution = resolveOperation(db, {\n servicePath,\n operationPath,\n alias: binding.aliasExpr ?? binding.alias,\n destination,\n hasExplicitOverride: true,\n isDynamic: false,\n }, workspaceId);\n const state = stateForResolution(resolution);\n const evidence = contextualEvidence(\n binding, normalized, operationPath, servicePath, destination, resolution, state,\n );\n if (!resolution.target) return { evidence, state };\n const resolvedEvidence = {\n ...evidence,\n contextualServiceBindingSelected: true,\n targetRepo: resolution.target.repoName,\n targetServicePath: resolution.target.servicePath,\n targetOperationPath: resolution.target.operationPath,\n targetOperation: resolution.target.operationName,\n };\n if (persistedRows.some((row) => row.status === 'resolved'))\n return { evidence: { ...resolvedEvidence, contextualPreservedPersistedResolvedEdge: true }, state };\n return {\n row: {\n id: -call.id,\n edge_type: 'REMOTE_CALL_RESOLVES_TO_OPERATION',\n from_id: String(call.id),\n to_kind: 'operation',\n to_id: String(resolution.target.operationId),\n confidence: resolution.target.score,\n evidence_json: JSON.stringify(resolvedEvidence),\n status: 'resolved',\n },\n evidence: resolvedEvidence,\n state,\n };\n}\n\nfunction contextualEvidence(\n binding: ContextBinding,\n normalized: ReturnType<typeof normalizeODataOperationInvocationPath>,\n operationPath: string,\n servicePath: string | undefined,\n destination: string | undefined,\n resolution: OperationResolution,\n state: ContextualRuntimeState,\n): Record<string, unknown> {\n const candidates = boundedContextCandidates(resolution.candidates);\n return {\n contextualServiceBindingAttempted: true,\n contextualBinding: bindingEvidence(binding),\n operationPath,\n rawOperationPath: normalized?.rawOperationPath,\n normalizedOperationPath: normalized?.wasInvocation\n ? normalized.normalizedOperationPath : undefined,\n invocationArgumentPlaceholderKeys: normalized?.invocationArgumentPlaceholderKeys.length\n ? normalized.invocationArgumentPlaceholderKeys : undefined,\n servicePath,\n serviceAlias: binding.alias,\n serviceAliasExpr: binding.aliasExpr,\n destination,\n requireServicePath: binding.requireServicePath,\n requireDestination: binding.requireDestination,\n effectiveServicePath: binding.effectiveServicePath,\n effectiveDestination: binding.effectiveDestination,\n contextualResolutionStatus: resolution.status,\n contextualCandidateCount: candidates.candidateCount,\n shownContextualCandidateCount: candidates.shownCandidateCount,\n omittedContextualCandidateCount: candidates.omittedCandidateCount,\n candidates: candidates.candidates,\n contextualResolutionReasons: resolution.reasons,\n resolutionReasons: resolution.reasons,\n contextualPreSubstitutionState: historicalState(state),\n };\n}\n\nfunction bindingEvidence(binding: ContextBinding): Record<string, unknown> {\n return {\n source: binding.source,\n callerArgument: binding.callerArgument,\n callerProperty: binding.callerProperty,\n calleeParameter: binding.calleeParameter,\n calleeReceiver: binding.calleeReceiver,\n callerSite: binding.callerSite,\n calleeSite: binding.calleeSite,\n bindingSourceFile: binding.sourceFile,\n bindingSourceLine: binding.sourceLine,\n alias: binding.alias,\n aliasExpr: binding.aliasExpr,\n requireServicePath: binding.requireServicePath,\n requireDestination: binding.requireDestination,\n effectiveServicePath: binding.effectiveServicePath,\n effectiveDestination: binding.effectiveDestination,\n };\n}\n\nfunction stateForResolution(\n resolution: OperationResolution,\n): ContextualRuntimeState {\n if (resolution.status === 'resolved') return { category: 'none' };\n if (resolution.status === 'dynamic') {\n const missingVariables = missingVariableKeys(resolution.reasons);\n return {\n category: 'dynamic_missing',\n message: dynamicMissingReason(missingVariables),\n missingVariables,\n resolutionStatus: resolution.status,\n };\n }\n if (resolution.status === 'ambiguous') return {\n category: 'ambiguous_operation',\n message: 'Ambiguous contextual operation candidates',\n resolutionStatus: resolution.status,\n };\n return {\n category: resolution.status === 'unresolved'\n ? 'no_matching_operation' : 'other_blocker',\n message: resolution.status === 'unresolved'\n ? 'No contextual operation candidate matched'\n : 'Contextual operation resolution is blocked',\n resolutionStatus: resolution.status,\n };\n}\n\nfunction historicalState(\n state: ContextualRuntimeState,\n): ContextualRuntimeState {\n return { ...state, phase: 'before_runtime_substitution' };\n}\n\nfunction missingVariableKeys(reasons: string[]): string[] {\n return normalizedKeys(reasons.flatMap((reason) =>\n reason.startsWith('missing_variable:')\n ? [reason.slice('missing_variable:'.length)] : []));\n}\n\nfunction normalizedKeys(keys: readonly string[]): string[] {\n return [...new Set(keys.filter((key) => key.length > 0))].sort();\n}\n\nfunction withLeadingSlash(value: string): string {\n return value.startsWith('/') ? value : `/${value}`;\n}\n","import type { Db } from '../db/connection.js';\nimport { extractPlaceholders, substituteVariables, type RuntimeSubstitution } from '../linker/dynamic-edge-resolver.js';\nimport { normalizeODataOperationInvocationPath } from '../linker/odata-path-normalizer.js';\nimport { resolveOperation, type OperationTarget } from '../linker/service-resolver.js';\nimport type { DynamicMode } from '../types.js';\nimport { analyzeDynamicTargetCandidates, type DynamicTargetAnalysis, type DynamicTargetCandidate } from './dynamic-targets.js';\nimport { boundCandidateLikeEvidence } from '../utils/000-bounded-projection.js';\nimport {\n dynamicMissingReason,\n isStructuralContextualBlocker,\n type ContextualRuntimeState,\n} from './008-contextual-runtime-state.js';\n\nexport interface TraceGraphRow extends Record<string, unknown> {\n id: number;\n edge_type: string;\n from_id: string;\n to_kind: string;\n to_id: string;\n confidence: number;\n evidence_json: string;\n unresolved_reason?: string;\n status?: string;\n}\n\ninterface Candidate {\n servicePath?: string;\n operationPath?: string;\n repoName?: string;\n operationName?: string;\n score?: number;\n}\ninterface RuntimeDiagnosticTotals {\n missing: Set<string>;\n candidateCount: number;\n viableCandidateCount: number;\n rejectedCandidateCount: number;\n maxCandidates: number;\n candidateSuggestions: Record<string, unknown>[];\n rejectedCandidates: Record<string, unknown>[];\n suggestedVarSets: Record<string, unknown>[];\n}\ninterface RuntimeResolutionResult {\n row: TraceGraphRow;\n evidence: Record<string, unknown>;\n target?: OperationTarget;\n unresolvedReason?: string;\n}\n\nexport function baseTraceEvidence(\n row: TraceGraphRow,\n call: Record<string, unknown>,\n persistedEvidence: Record<string, unknown>,\n contextualEvidence: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n const evidence = { ...persistedEvidence, ...(contextualEvidence ?? {}) };\n return {\n ...evidence,\n graphEdgeId: row.id,\n persistedGraphEdgeId: row.id > 0 ? row.id : undefined,\n outboundCallId: call.id,\n callSite: { sourceFile: call.source_file, sourceLine: call.source_line },\n callType: call.call_type,\n repoId: call.repo_id,\n sourceFile: call.source_file,\n sourceLine: call.source_line,\n file: call.source_file,\n line: call.source_line,\n persistedTarget: { kind: row.to_kind, id: row.to_id },\n contextualResolutionParticipated: Boolean(contextualEvidence?.contextualServiceBindingAttempted),\n persistedResolution: persistedResolution(row),\n };\n}\n\nexport function runtimeResolution(\n db: Db,\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n options: { vars?: Record<string, string>; dynamicMode?: DynamicMode; maxDynamicCandidates?: number },\n workspaceId: number | undefined,\n contextualState?: ContextualRuntimeState,\n): RuntimeResolutionResult {\n const dynamicMode = options.dynamicMode ?? 'strict';\n const candidateCap = positiveCandidateCap(options.maxDynamicCandidates);\n const boundedEvidence = boundCandidateLikeEvidence(evidence, candidateCap);\n if (!isDynamicRemoteOperationEdge(row, evidence))\n return unchangedRuntimeResolution(\n row,\n boundDynamicEvidence(boundedEvidence, candidateCap),\n contextualState,\n );\n const substituted = evidenceWithRuntimeVariables(boundedEvidence, options.vars);\n const analysis = analyzeDynamicTargetCandidates(\n db, substituted, workspaceId, dynamicMode, candidateCap,\n );\n const enriched = boundDynamicEvidence(\n analysis ? evidenceWithDynamicAnalysis(substituted, analysis) : substituted,\n candidateCap,\n );\n const appliedRuntimeValues = hasApplicableRuntimeVariables(evidence, options.vars);\n const analyzed = analyzedRuntimeResolution(\n row, enriched, analysis, dynamicMode, appliedRuntimeValues, contextualState,\n );\n if (analyzed) return analyzed;\n if (!appliedRuntimeValues) {\n const unresolvedReason = contextualReason(contextualState) ?? row.unresolved_reason;\n const withSections = withEffectiveResolution(\n enriched, row, unresolvedReason, undefined, contextualState,\n );\n return { row, evidence: withSections, unresolvedReason };\n }\n return resolveSuppliedRuntimeOperation(db, row, enriched, workspaceId, contextualState);\n}\n\nfunction analyzedRuntimeResolution(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n analysis: DynamicTargetAnalysis | undefined,\n dynamicMode: DynamicMode,\n appliedRuntimeValues: boolean,\n contextualState: ContextualRuntimeState | undefined,\n): RuntimeResolutionResult | undefined {\n if (analysis && analysis.viableCandidateCount === 0\n && Object.keys(analysis.appliedSuppliedVariables).length > 0)\n return noCandidateRuntimeResolution(row, evidence, contextualState);\n const inferred = dynamicMode === 'infer' ? inferredTarget(analysis) : undefined;\n if (inferred && !isStructuralContextualBlocker(contextualState))\n return resolvedRuntimeResolution(row, evidence, inferred, inferred.reasons);\n if (analysis && analysis.missingVariables.length > 0 && appliedRuntimeValues) {\n const unresolvedReason = dynamicMissingReason(analysis.missingVariables);\n return {\n row,\n evidence: withEffectiveResolution(\n evidence, row, unresolvedReason, undefined, contextualState,\n ),\n unresolvedReason,\n };\n }\n return isStructuralContextualBlocker(contextualState)\n ? unchangedRuntimeResolution(row, evidence, contextualState)\n : undefined;\n}\n\nfunction resolveSuppliedRuntimeOperation(\n db: Db,\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n workspaceId: number | undefined,\n contextualState: ContextualRuntimeState | undefined,\n): RuntimeResolutionResult {\n const resolution = resolveRuntimeOperation(db, evidence, workspaceId);\n if (resolution.target)\n return resolvedRuntimeResolution(\n row, evidence, resolution.target, resolution.reasons,\n );\n const unresolvedReason = runtimeUnresolvedReason(resolution);\n return {\n row,\n evidence: withEffectiveResolution(\n evidence, row, unresolvedReason, resolution, contextualState,\n ),\n unresolvedReason,\n };\n}\n\nfunction unchangedRuntimeResolution(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n contextualState: ContextualRuntimeState | undefined,\n): RuntimeResolutionResult {\n const unresolvedReason = contextualReason(contextualState) ?? row.unresolved_reason;\n return {\n row,\n evidence: withEffectiveResolution(\n evidence, row, unresolvedReason, undefined, contextualState,\n ),\n unresolvedReason,\n };\n}\n\nfunction noCandidateRuntimeResolution(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n contextualState: ContextualRuntimeState | undefined,\n): RuntimeResolutionResult {\n const unresolvedReason = 'No candidate remained after runtime substitution';\n return {\n row,\n evidence: withEffectiveResolution(\n evidence, row, unresolvedReason, undefined, contextualState,\n ),\n unresolvedReason,\n };\n}\n\nfunction resolvedRuntimeResolution(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n target: OperationTarget,\n reasons: string[],\n): RuntimeResolutionResult {\n const resolvedRow = {\n ...row,\n status: 'resolved',\n to_kind: 'operation',\n to_id: String(target.operationId),\n unresolved_reason: undefined,\n confidence: Math.max(0, Math.min(1, target.score)),\n };\n const resolution = {\n status: 'resolved' as const,\n target,\n candidates: [],\n reasons,\n };\n return {\n row: resolvedRow,\n evidence: withEffectiveResolution(evidence, resolvedRow, undefined, resolution),\n target,\n };\n}\n\nexport function runtimeVariableDiagnostic(edges: Array<{ evidence: Record<string, unknown> }>): Record<string, unknown> | undefined {\n const totals = runtimeDiagnosticTotals(edges);\n const missingVariables = [...totals.missing].sort();\n if (missingVariables.length === 0) return undefined;\n const shownSuggestions = totals.candidateSuggestions.slice(0, totals.maxCandidates);\n const shownRejected = totals.rejectedCandidates.slice(0, totals.maxCandidates);\n const shownCandidateCount = shownSuggestions.length;\n return {\n severity: 'warning',\n code: 'trace_runtime_variables_missing',\n message: `Runtime variables are required to resolve dynamic trace targets: ${missingVariables.join(', ')}`,\n missingVariables,\n suggestions: missingVariables.map((key) => `--var ${key}=<value>`),\n candidateCount: totals.candidateCount,\n viableCandidateCount: totals.viableCandidateCount,\n rejectedCandidateCount: totals.rejectedCandidateCount,\n shownCandidateCount,\n omittedCandidateCount: Math.max(0, totals.viableCandidateCount - shownCandidateCount),\n maxDynamicCandidates: totals.maxCandidates,\n shownRejectedCandidateCount: shownRejected.length,\n omittedRejectedCandidateCount: Math.max(0, totals.rejectedCandidateCount - shownRejected.length),\n candidateSuggestions: shownSuggestions,\n rejectedCandidates: shownRejected,\n suggestedVarSets: uniqueCliRows(totals.suggestedVarSets).slice(0, totals.maxCandidates),\n copyableExamples: copyableExamples(totals.suggestedVarSets, totals.candidateCount, totals.maxCandidates),\n };\n}\n\nfunction runtimeDiagnosticTotals(\n edges: Array<{ evidence: Record<string, unknown> }>): RuntimeDiagnosticTotals {\n const missing = new Set<string>();\n let candidateCount = 0;\n let viableCandidateCount = 0;\n let rejectedCandidateCount = 0;\n let maxCandidates = 5;\n const candidateSuggestions: Record<string, unknown>[] = [];\n const rejectedCandidates: Record<string, unknown>[] = [];\n const suggestedVarSets: Record<string, unknown>[] = [];\n for (const edge of edges) {\n const effective = parseObject(edge.evidence.effectiveResolution);\n if (!['dynamic', 'unresolved', 'ambiguous'].includes(String(effective.status ?? '')))\n continue;\n const substitutions = edge.evidence.runtimeSubstitutions;\n if (!substitutions || typeof substitutions !== 'object' || Array.isArray(substitutions)) continue;\n for (const value of Object.values(substitutions as Record<string, RuntimeSubstitution>))\n for (const key of value.missing ?? []) missing.add(key);\n const exploration = parseObject(edge.evidence.dynamicTargetExploration);\n maxCandidates = positiveCandidateCap(numeric(exploration.maxCandidates) || maxCandidates);\n candidateCount += numeric(exploration.candidateCount);\n viableCandidateCount += numeric(exploration.viableCandidateCount);\n rejectedCandidateCount += numeric(exploration.rejectedCandidateCount);\n appendBounded(\n candidateSuggestions,\n recordArray(edge.evidence.dynamicTargetCandidateSuggestions),\n maxCandidates,\n );\n appendBounded(\n rejectedCandidates,\n recordArray(exploration.rejectedCandidates),\n maxCandidates,\n );\n appendBounded(\n suggestedVarSets,\n recordArray(exploration.suggestedVarSets),\n maxCandidates,\n );\n }\n return {\n missing,\n candidateCount,\n viableCandidateCount,\n rejectedCandidateCount,\n maxCandidates,\n candidateSuggestions,\n rejectedCandidates,\n suggestedVarSets,\n };\n}\n\nexport function runtimeNoCandidateDiagnostics(\n edges: Array<{ evidence: Record<string, unknown> }>,\n): Array<Record<string, unknown>> {\n const seen = new Set<string>();\n return edges.flatMap((edge) => {\n const exploration = parseObject(edge.evidence.dynamicTargetExploration);\n const suppliedVariables = parseObject(exploration.suppliedVariables);\n const appliedSuppliedVariables = parseObject(\n exploration.appliedSuppliedVariables,\n );\n if (numeric(exploration.viableCandidateCount) !== 0\n || Object.keys(appliedSuppliedVariables).length === 0) return [];\n const callSite = parseObject(edge.evidence.callSite);\n const key = JSON.stringify([callSite, suppliedVariables]);\n if (seen.has(key)) return [];\n seen.add(key);\n const maxCandidates = positiveCandidateCap(numeric(exploration.maxCandidates));\n return [{\n severity: 'warning',\n code: 'no_candidate_after_runtime_substitution',\n message: 'No dynamic target candidate remained after applying runtime variables',\n suppliedVariables,\n appliedSuppliedVariables,\n substitutedSignals: parseObject(exploration.substitutedSignals),\n candidateCount: numeric(exploration.candidateCount),\n viableCandidateCount: 0,\n rejectedCandidateCount: numeric(exploration.rejectedCandidateCount),\n shownCandidateCount: numeric(exploration.shownCandidateCount),\n omittedCandidateCount: numeric(exploration.omittedCandidateCount),\n shownRejectedCandidateCount: numeric(\n exploration.shownRejectedCandidateCount,\n ),\n omittedRejectedCandidateCount: numeric(\n exploration.omittedRejectedCandidateCount,\n ),\n rejectedCandidates: recordArray(exploration.rejectedCandidates).slice(0, maxCandidates),\n callSite,\n }];\n });\n}\n\nexport function edgeTarget(row: TraceGraphRow, evidence: Record<string, unknown>): string {\n const effective = parseObject(evidence.effectiveResolution);\n const targetServicePath = stringValue(effective.targetServicePath ?? evidence.targetServicePath);\n const targetOperationPath = stringValue(effective.targetOperationPath ?? evidence.targetOperationPath);\n if (targetServicePath && targetOperationPath) return `${targetServicePath}${targetOperationPath}`;\n const runtimeCandidate = evidence.runtimeResolvedCandidate as Candidate | undefined;\n if (runtimeCandidate?.servicePath && runtimeCandidate.operationPath) return `${runtimeCandidate.servicePath}${runtimeCandidate.operationPath}`;\n const servicePath = stringValue(evidence.servicePath);\n const operationPath = stringValue(evidence.operationPath);\n const targetOperation = stringValue(evidence.targetOperation);\n const targetRepo = stringValue(evidence.targetRepo) ?? '';\n if (row.edge_type === 'HANDLER_RUNS_DB_QUERY') return `Entity: ${row.to_id || 'unknown'}`;\n if (row.edge_type === 'HANDLER_RUNS_REMOTE_QUERY') return stringValue(evidence.remoteQueryTarget) ?? `Remote query: ${row.to_id || 'unknown'}`;\n if (row.edge_type === 'HANDLER_CALLS_EXTERNAL_HTTP') {\n const target = parseObject(evidence.externalTarget);\n return stringValue(target.label) ?? `External endpoint: ${row.to_id || 'unknown'}`;\n }\n if (servicePath && operationPath) return `${servicePath}${operationPath}`;\n return targetOperation ? `${targetRepo}:${targetOperation}` : row.to_id;\n}\n\nfunction persistedResolution(row: TraceGraphRow): Record<string, unknown> {\n return {\n status: row.status,\n targetKind: row.to_kind,\n targetId: row.to_id,\n edgeId: row.id > 0 ? row.id : undefined,\n confidence: row.confidence,\n unresolvedReason: row.unresolved_reason,\n edgeType: row.edge_type,\n };\n}\n\nfunction effectiveResolution(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n unresolvedReason: string | undefined,\n resolution?: ReturnType<typeof resolveRuntimeOperation>,\n contextualState?: ContextualRuntimeState,\n): Record<string, unknown> {\n const target = resolution?.target;\n return {\n status: target ? 'resolved' : row.status,\n targetKind: target ? 'operation' : row.to_kind,\n targetId: target ? String(target.operationId) : row.to_id,\n targetRepo: target?.repoName ?? evidence.targetRepo,\n targetServicePath: target?.servicePath ?? evidence.targetServicePath,\n targetOperationPath: target?.operationPath ?? evidence.targetOperationPath,\n targetOperation: target?.operationName ?? evidence.targetOperation,\n confidence: target?.score ?? row.confidence,\n reasons: resolution?.reasons ?? evidence.resolutionReasons,\n unresolvedReason,\n edgeType: target ? 'REMOTE_CALL_RESOLVES_TO_OPERATION' : row.edge_type,\n contextualBlocker: isStructuralContextualBlocker(contextualState)\n ? contextualState : undefined,\n };\n}\n\nfunction withEffectiveResolution(\n evidence: Record<string, unknown>,\n row: TraceGraphRow,\n unresolvedReason: string | undefined,\n resolution?: ReturnType<typeof resolveRuntimeOperation>,\n contextualState?: ContextualRuntimeState,\n): Record<string, unknown> {\n const current = effectiveResolution(\n row, evidence, unresolvedReason, resolution, contextualState,\n );\n const rest = { ...evidence };\n delete rest.runtimeResolvedCandidate;\n return {\n ...rest,\n effectiveResolution: current,\n linker: {\n status: current.status,\n confidence: current.confidence,\n reason: unresolvedReason,\n edgeType: current.edgeType,\n contextualBlocker: current.contextualBlocker,\n },\n };\n}\n\nfunction contextualReason(\n state: ContextualRuntimeState | undefined,\n): string | undefined {\n return state?.category === 'none' ? undefined : state?.message;\n}\n\nfunction resolveRuntimeOperation(db: Db, evidence: Record<string, unknown>, workspaceId: number | undefined): ReturnType<typeof resolveOperation> {\n const servicePath = stringValue(evidence.servicePath);\n const rawOperationPath = stringValue(evidence.operationPath);\n const normalized = normalizeODataOperationInvocationPath(rawOperationPath);\n const operationPath = normalized?.wasInvocation\n ? normalized.normalizedOperationPath\n : stringValue(evidence.normalizedOperationPath) ?? rawOperationPath;\n const alias = stringValue(evidence.serviceAliasExpr ?? evidence.serviceAlias);\n const destination = stringValue(evidence.destination);\n return resolveOperation(db, { servicePath, operationPath, alias, destination, hasExplicitOverride: true, isDynamic: true }, workspaceId);\n}\n\nfunction evidenceWithRuntimeVariables(evidence: Record<string, unknown>, vars: Record<string, string> | undefined): Record<string, unknown> {\n const substitutions = runtimeSubstitutions(evidence, vars ?? {});\n const suppliedRuntimeVariables = Object.fromEntries(\n Object.entries(vars ?? {}).sort(([left], [right]) => left.localeCompare(right)),\n );\n const next: Record<string, unknown> = {\n ...evidence,\n runtimeSubstitutions: substitutions,\n suppliedRuntimeVariables,\n };\n for (const [key, value] of Object.entries(substitutions)) if (value.effective) next[key] = value.effective;\n const missing = Object.values(substitutions).flatMap((value) => value.missing);\n if (missing.length > 0) next.missingRuntimeVariables = [...new Set(missing)].sort();\n if (Object.keys(suppliedRuntimeVariables).length > 0) next.runtimeVariablesApplied = true;\n return next;\n}\n\nfunction evidenceWithDynamicAnalysis(\n evidence: Record<string, unknown>,\n analysis: DynamicTargetAnalysis,\n): Record<string, unknown> {\n const persistedCandidates = recordArray(evidence.candidates);\n const persistedScores = recordArray(evidence.candidateScores);\n const persistedCandidateCount = numeric(evidence.persistedCandidateCount)\n || numeric(evidence.candidateCount)\n || persistedCandidates.length;\n const persistedScoreCount = numeric(evidence.candidateScoreCount)\n || persistedScores.length;\n return {\n ...evidence,\n candidates: persistedCandidates.slice(0, analysis.maxCandidates),\n candidateScores: persistedScores.slice(0, analysis.maxCandidates),\n persistedCandidateCount,\n persistedCandidateOmittedCount: Math.max(\n 0,\n persistedCandidateCount - Math.min(persistedCandidates.length, analysis.maxCandidates),\n ),\n persistedCandidateScoreCount: persistedScoreCount,\n persistedCandidateScoreOmittedCount: Math.max(\n 0, persistedScoreCount - Math.min(persistedScores.length, analysis.maxCandidates),\n ),\n dynamicTargetExploration: {\n mode: analysis.mode,\n maxCandidates: analysis.maxCandidates,\n missingVariables: analysis.missingVariables,\n requiredVariables: analysis.requiredVariables,\n suppliedVariables: analysis.suppliedVariables,\n appliedSuppliedVariables: analysis.appliedSuppliedVariables,\n substitutedSignals: analysis.substitutedSignals,\n candidateCount: analysis.candidateCount,\n viableCandidateCount: analysis.viableCandidateCount,\n rejectedCandidateCount: analysis.rejectedCandidateCount,\n shownCandidateCount: analysis.shownCandidateCount,\n omittedCandidateCount: analysis.omittedCandidateCount,\n shownRejectedCandidateCount: analysis.shownRejectedCandidateCount,\n omittedRejectedCandidateCount: analysis.omittedRejectedCandidateCount,\n rejectedCandidates: analysis.rejectedCandidates,\n suggestedVarSets: analysis.suggestedVarSets,\n suggestedVarSetCount: analysis.suggestedVarSetCount,\n shownSuggestedVarSetCount: analysis.shownSuggestedVarSetCount,\n omittedSuggestedVarSetCount: analysis.omittedSuggestedVarSetCount,\n routingContext: analysis.routingContext,\n },\n dynamicTargetCandidates: analysis.candidates,\n dynamicTargetCandidateSuggestions: analysis.shownCandidates,\n dynamicTargetCandidateSuggestionCount: analysis.viableCandidateCount,\n shownDynamicTargetCandidateSuggestionCount: analysis.shownCandidateCount,\n omittedDynamicTargetCandidateSuggestionCount: analysis.omittedCandidateCount,\n rejectedCandidates: analysis.rejectedCandidates,\n dynamicTargetInference: analysis.inference,\n };\n}\n\nconst boundedDynamicListKeys = new Set([\n 'candidates',\n 'candidateScores',\n 'dynamicTargetCandidates',\n 'dynamicTargetCandidateSuggestions',\n 'candidateSuggestions',\n 'suggestedVarSets',\n 'rejectedCandidates',\n 'rejectedCandidateSuggestions',\n 'copyableExamples',\n 'conflicts',\n 'bindingAlternatives',\n]);\n\nfunction boundDynamicEvidence(\n evidence: Record<string, unknown>,\n limit: number,\n): Record<string, unknown> {\n const candidateCount = numeric(evidence.persistedCandidateCount)\n || numeric(evidence.candidateCount)\n || (Array.isArray(evidence.candidates) ? evidence.candidates.length : 0);\n const projected = boundDynamicValue(evidence, limit);\n const next = parseObject(projected);\n if (candidateCount === 0) return next;\n return {\n ...next,\n persistedCandidateCount: candidateCount,\n persistedCandidateOmittedCount: Math.max(0, candidateCount - limit),\n };\n}\n\nfunction boundDynamicValue(\n value: unknown,\n limit: number,\n key?: string,\n parentKey?: string,\n): unknown {\n if (Array.isArray(value)) {\n const bounded = Boolean(key && (boundedDynamicListKeys.has(key)\n || parentKey === 'derivationProvenance'\n || parentKey === 'conflicts' && key === 'sources'));\n const input = bounded ? value.slice(0, limit) : value;\n const projected = input.map((item) =>\n boundDynamicValue(item, limit, undefined, key ?? parentKey));\n return projected;\n }\n if (!value || typeof value !== 'object') return value;\n return Object.fromEntries(Object.entries(value).map(([childKey, child]) => [\n childKey,\n boundDynamicValue(child, limit, childKey, key ?? parentKey),\n ]));\n}\n\nfunction runtimeSubstitutions(evidence: Record<string, unknown>, vars: Record<string, string>): Record<string, RuntimeSubstitution> {\n const substitutions: Record<string, RuntimeSubstitution> = {};\n for (const key of ['servicePath', 'operationPath', 'serviceAliasExpr', 'serviceAlias', 'destination']) {\n const substitution = substituteVariables(substitutionValue(evidence, key), vars);\n if (substitution.placeholders.length > 0) substitutions[key] = substitution;\n }\n return substitutions;\n}\n\nfunction substitutionValue(\n evidence: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = stringValue(evidence[key]);\n if (key !== 'operationPath') return value;\n const normalized = normalizeODataOperationInvocationPath(value);\n return normalized?.wasInvocation ? normalized.normalizedOperationPath : value;\n}\n\nfunction isDynamicRemoteOperationEdge(\n row: TraceGraphRow,\n evidence: Record<string, unknown>,\n): boolean {\n if (evidence.callType !== 'remote_action') return false;\n if (!['dynamic', 'ambiguous', 'unresolved'].includes(String(row.status ?? ''))) return false;\n return ['DYNAMIC_EDGE_CANDIDATE', 'UNRESOLVED_EDGE', 'REMOTE_CALL_RESOLVES_TO_OPERATION']\n .includes(row.edge_type);\n}\n\nfunction hasApplicableRuntimeVariables(\n evidence: Record<string, unknown>,\n vars: Record<string, string> | undefined,\n): boolean {\n if (!vars || Object.keys(vars).length === 0) return false;\n return ['servicePath', 'operationPath', 'serviceAliasExpr', 'serviceAlias', 'destination'].some((key) => hasRuntimeVariable(evidence[key], vars));\n}\n\nfunction inferredTarget(analysis: DynamicTargetAnalysis | undefined): OperationTarget | undefined {\n if (analysis?.inference.status !== 'resolved') return undefined;\n const id = Number(analysis.inference.candidateOperationId);\n const candidate = analysis.candidates.find((item) => item.candidateOperationId === id);\n if (!candidate) return undefined;\n return targetFromCandidate(candidate);\n}\n\nfunction targetFromCandidate(candidate: DynamicTargetCandidate): OperationTarget {\n return {\n operationId: candidate.candidateOperationId,\n repoName: candidate.repoName,\n serviceName: '',\n qualifiedName: '',\n servicePath: candidate.servicePath,\n operationPath: candidate.operationPath,\n operationName: candidate.operationName,\n repoId: candidate.repoId,\n packageName: candidate.packageName,\n score: candidate.score,\n reasons: candidate.reasons,\n sourceFile: candidate.sourceFile,\n sourceLine: candidate.sourceLine,\n };\n}\n\nfunction hasRuntimeVariable(value: unknown, vars: Record<string, string>): boolean {\n return typeof value === 'string' && extractPlaceholders(value).some((key) => Object.hasOwn(vars, key));\n}\n\nfunction runtimeUnresolvedReason(resolution: ReturnType<typeof resolveRuntimeOperation>): string {\n if (resolution.status === 'dynamic') return `Dynamic target is missing runtime variables: ${resolution.reasons.join(', ')}`;\n if (resolution.status === 'ambiguous') return 'Ambiguous runtime operation candidates';\n return 'No runtime operation candidate matched substituted service and operation path';\n}\n\nfunction parseObject(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numeric(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction recordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction appendBounded<T>(target: T[], values: T[], limit: number): void {\n const remaining = Math.max(0, limit - target.length);\n if (remaining > 0) target.push(...values.slice(0, remaining));\n}\n\nfunction uniqueCliRows(rows: Record<string, unknown>[]): Record<string, unknown>[] {\n const seen = new Set<string>();\n return rows.filter((row) => {\n const cli = typeof row.cli === 'string' ? row.cli : JSON.stringify(row);\n if (seen.has(cli)) return false;\n seen.add(cli);\n return true;\n });\n}\n\nfunction copyableExamples(\n suggestedVarSets: Record<string, unknown>[],\n candidateCount: number,\n limit: number,\n): string[] {\n const variableExamples = uniqueCliRows(suggestedVarSets).flatMap((row) =>\n typeof row.cli === 'string' ? [row.cli] : []);\n const exploration = candidateCount > 0\n ? ['--dynamic-mode candidates --max-dynamic-candidates 20']\n : [];\n return [...variableExamples, ...exploration].slice(0, limit);\n}\n\nfunction positiveCandidateCap(value: number | undefined): number {\n return Number.isFinite(value) && Number(value) > 0 ? Math.floor(Number(value)) : 5;\n}\n","import type { Db } from '../db/connection.js';\n\nexport function loadTraceDiagnostics(\n db: Db,\n repoId: number | undefined,\n includeWorkspaceDiagnostics: boolean,\n workspaceId?: number,\n): Array<Record<string, unknown>> {\n if (repoId === undefined && !includeWorkspaceDiagnostics) return [];\n const diagnostics = db.prepare(`SELECT d.repo_id repoId,d.severity,d.code,d.message,\n d.source_file sourceFile,d.source_line sourceLine\n FROM diagnostics d LEFT JOIN repositories r ON r.id=d.repo_id\n WHERE (? IS NULL OR d.repo_id=?)\n AND (? IS NULL OR d.repo_id IS NULL OR r.workspace_id=?)\n ORDER BY severity,code,COALESCE(source_file,''),\n COALESCE(source_line,0),d.id`).all(\n repoId, repoId, workspaceId, workspaceId,\n ) as Array<\n Record<string, unknown>\n >;\n const pending = packagePendingCount(\n db, repoId, includeWorkspaceDiagnostics, workspaceId,\n );\n if (pending > 0) diagnostics.unshift(packagePendingDiagnostic(pending));\n return diagnostics;\n}\n\nfunction packagePendingCount(\n db: Db,\n repoId: number | undefined,\n includeWorkspace: boolean,\n workspaceId: number | undefined,\n): number {\n const row = db.prepare(`SELECT COUNT(*) count FROM symbol_calls sc\n JOIN repositories r ON r.id=sc.repo_id\n WHERE sc.status='unresolved' AND sc.callee_symbol_id IS NULL\n AND sc.unresolved_reason='package_resolution_pending'\n AND (?=1 OR sc.repo_id=?)\n AND (? IS NULL OR r.workspace_id=?)`).get(\n includeWorkspace ? 1 : 0, repoId, workspaceId, workspaceId,\n );\n return Number(row?.count ?? 0);\n}\n\nfunction packagePendingDiagnostic(count: number): Record<string, unknown> {\n return {\n severity: 'warning',\n code: 'package_import_resolution_pending',\n message: 'Package-import facts await workspace linking.',\n packageResolutionState: 'pre_link_pending',\n pendingPackageImportCount: count,\n graphState: 'stale',\n requiredAction: 'relink',\n remediation: 'Run service-flow link --force for this workspace.',\n };\n}\n\nexport function prependTraceDiagnostic(\n diagnostics: Array<Record<string, unknown>>,\n diagnostic: Record<string, unknown>,\n): void {\n const duplicate = diagnostics.findIndex((item) =>\n sameDiagnosticLocation(item, diagnostic));\n if (duplicate >= 0) diagnostics.splice(duplicate, 1);\n diagnostics.unshift(diagnostic);\n}\n\nfunction sameDiagnosticLocation(\n left: Record<string, unknown>,\n right: Record<string, unknown>,\n): boolean {\n if (left.code !== right.code) return false;\n const leftFile = stringValue(left.sourceFile);\n const rightFile = stringValue(right.sourceFile);\n if (leftFile || rightFile)\n return leftFile === rightFile\n && numericValue(left.sourceLine) === numericValue(right.sourceLine);\n return String(left.message ?? '') === String(right.message ?? '');\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numericValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value)\n ? value\n : undefined;\n}\n","import { createHash } from 'node:crypto';\nimport type { Db } from '../db/connection.js';\nimport type { ContextBinding } from './008-contextual-runtime-state.js';\n\nexport interface TraversalScopeIdentity {\n workspaceId?: number;\n repoId?: number;\n files?: ReadonlySet<string>;\n symbolIds?: ReadonlySet<number>;\n context?: ReadonlyMap<string, ContextBinding>;\n}\n\nexport interface TraversalScopeState {\n structuralKey: string;\n evaluationKey: string;\n ancestry: ReadonlySet<string>;\n}\n\nexport type TraversalScheduleKind = 'scheduled' | 'converged' | 'cycle';\n\nexport interface TraversalScheduleDecision {\n kind: TraversalScheduleKind;\n state: TraversalScopeState;\n alreadyExpanded: boolean;\n}\n\nexport function compareBinary(left: string, right: string): number {\n const leftPoints = [...left];\n const rightPoints = [...right];\n const length = Math.min(leftPoints.length, rightPoints.length);\n for (let index = 0; index < length; index += 1) {\n const leftPoint = leftPoints[index]?.codePointAt(0) ?? 0;\n const rightPoint = rightPoints[index]?.codePointAt(0) ?? 0;\n if (leftPoint !== rightPoint) return leftPoint < rightPoint ? -1 : 1;\n }\n return leftPoints.length - rightPoints.length;\n}\n\nexport function resolveTraversalWorkspaceId(\n db: Db,\n requestedWorkspaceId: number | undefined,\n repoId: number | undefined,\n): number | undefined {\n if (requestedWorkspaceId !== undefined) return requestedWorkspaceId;\n if (repoId !== undefined) {\n const row = db.prepare(\n 'SELECT workspace_id workspaceId FROM repositories WHERE id=?',\n ).get(repoId) as { workspaceId?: number } | undefined;\n return typeof row?.workspaceId === 'number' ? row.workspaceId : undefined;\n }\n const rows = db.prepare(`SELECT DISTINCT w.id workspaceId FROM workspaces w\n JOIN repositories r ON r.workspace_id=w.id ORDER BY w.id LIMIT 2`).all() as\n Array<{ workspaceId?: number }>;\n return rows.length === 1 && typeof rows[0]?.workspaceId === 'number'\n ? rows[0].workspaceId : undefined;\n}\n\nexport function structuralScopeKey(\n workspaceId: number | undefined,\n repoId: number | undefined,\n files: ReadonlySet<string> | undefined,\n symbolIds: ReadonlySet<number> | undefined,\n): string {\n return JSON.stringify([\n workspaceId ?? null,\n repoId ?? null,\n files ? [...files].sort(compareBinary) : null,\n symbolIds ? [...symbolIds].sort((left, right) => left - right) : null,\n ]);\n}\n\nexport function canonicalContextFingerprint(\n context: ReadonlyMap<string, ContextBinding> | undefined,\n): string {\n const entries = [...(context ?? new Map<string, ContextBinding>()).entries()]\n .map(([name, binding]) => `${JSON.stringify(name)}:${canonicalValue(binding)}`)\n .sort(compareBinary);\n return createHash('sha256').update(`[${entries.join(',')}]`).digest('hex');\n}\n\nexport function evaluationScopeKey(\n structuralKey: string,\n context: ReadonlyMap<string, ContextBinding> | undefined,\n): string {\n return JSON.stringify([structuralKey, canonicalContextFingerprint(context)]);\n}\n\nexport class TraversalScopeScheduler {\n readonly #scheduled = new Set<string>();\n readonly #expanded = new Set<string>();\n readonly #structuralByEvaluation = new Map<string, string>();\n readonly #childrenByEvaluation = new Map<string, Set<string>>();\n\n schedule(\n identity: TraversalScopeIdentity,\n parent?: TraversalScopeState,\n ): TraversalScheduleDecision {\n const state = scopeState(identity, parent);\n this.#rememberState(state);\n if (parent) this.#rememberState(parent);\n const cycle = parent\n ? parent.ancestry.has(state.structuralKey)\n || this.#reachesStructural(state.evaluationKey, parent.structuralKey)\n : false;\n if (parent) this.#recordEdge(parent.evaluationKey, state.evaluationKey);\n if (cycle)\n return { kind: 'cycle', state, alreadyExpanded: this.#expanded.has(state.evaluationKey) };\n if (this.#scheduled.has(state.evaluationKey))\n return { kind: 'converged', state, alreadyExpanded: this.#expanded.has(state.evaluationKey) };\n this.#scheduled.add(state.evaluationKey);\n return { kind: 'scheduled', state, alreadyExpanded: false };\n }\n\n markExpanded(state: TraversalScopeState): boolean {\n if (this.#expanded.has(state.evaluationKey)) return false;\n this.#expanded.add(state.evaluationKey);\n return true;\n }\n\n #rememberState(state: TraversalScopeState): void {\n this.#structuralByEvaluation.set(state.evaluationKey, state.structuralKey);\n }\n\n #recordEdge(parent: string, child: string): void {\n const children = this.#childrenByEvaluation.get(parent) ?? new Set<string>();\n children.add(child);\n this.#childrenByEvaluation.set(parent, children);\n }\n\n #reachesStructural(start: string, targetStructuralKey: string): boolean {\n const pending = [start];\n const seen = new Set<string>();\n let cursor = 0;\n while (cursor < pending.length) {\n const current = pending[cursor];\n cursor += 1;\n if (seen.has(current)) continue;\n seen.add(current);\n if (this.#structuralByEvaluation.get(current) === targetStructuralKey)\n return true;\n pending.push(...(this.#childrenByEvaluation.get(current) ?? []));\n }\n return false;\n }\n}\n\nfunction scopeState(\n identity: TraversalScopeIdentity,\n parent: TraversalScopeState | undefined,\n): TraversalScopeState {\n const structuralKey = structuralScopeKey(\n identity.workspaceId, identity.repoId, identity.files, identity.symbolIds,\n );\n const ancestry = new Set(parent?.ancestry ?? []);\n ancestry.add(structuralKey);\n return {\n structuralKey,\n evaluationKey: evaluationScopeKey(structuralKey, identity.context),\n ancestry,\n };\n}\n\nfunction canonicalValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `string:${JSON.stringify(value)}`;\n if (typeof value === 'boolean') return `boolean:${String(value)}`;\n if (typeof value === 'number') return canonicalNumber(value);\n if (typeof value === 'bigint') return `bigint:${String(value)}`;\n if (Array.isArray(value))\n return `array:[${value.map(canonicalValue).join(',')}]`;\n if (!isRecord(value)) return `unsupported:${typeof value}`;\n const entries = Object.entries(value).sort(([left], [right]) => compareBinary(left, right));\n return `object:{${entries.map(([key, child]) =>\n `${JSON.stringify(key)}:${canonicalValue(child)}`).join(',')}}`;\n}\n\nfunction canonicalNumber(value: number): string {\n if (Number.isNaN(value)) return 'number:NaN';\n if (value === Number.POSITIVE_INFINITY) return 'number:Infinity';\n if (value === Number.NEGATIVE_INFINITY) return 'number:-Infinity';\n if (Object.is(value, -0)) return 'number:-0';\n return `number:${String(value)}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { Db } from '../db/connection.js';\nimport { currentFactLifecycleDiagnostic } from '../db/001-fact-lifecycle.js';\nimport type { ContextBinding } from './008-contextual-runtime-state.js';\nimport {\n resolveTraversalWorkspaceId,\n type TraversalScopeScheduler,\n type TraversalScopeState,\n} from './010-traversal-scope.js';\n\nexport interface TraceQueueScope {\n repoId?: number;\n files?: Set<string>;\n symbolIds?: Set<number>;\n depth: number;\n context: Map<string, ContextBinding>;\n state: TraversalScopeState;\n unownedOnly?: boolean;\n rootObservationOnly?: boolean;\n}\n\nexport interface PendingTraceRootScope {\n repoId: number;\n files: Set<string>;\n symbolIds: Set<number>;\n unownedOnly: boolean;\n rootObservationOnly: boolean;\n}\n\ninterface RootCallRow {\n id: number;\n repoId: number;\n repoName: string;\n workspaceId: number;\n graphGeneration: number;\n sourceSymbolId?: number | null;\n sourceFile: string;\n callType: string;\n eventName?: string | null;\n}\n\nexport interface TraceRootPlan {\n workspaceId?: number;\n queue: TraceQueueScope[];\n pendingRoots: PendingTraceRootScope[];\n diagnostic?: Record<string, unknown>;\n}\n\nexport function createTraceRootPlan(\n db: Db,\n scheduler: TraversalScopeScheduler,\n scope: {\n repoId?: number;\n files?: Set<string>;\n symbolIds?: Set<number>;\n selectorMatched: boolean;\n },\n requestedWorkspaceId: number | undefined,\n includeAsync: boolean,\n): TraceRootPlan {\n const workspaceId = resolveTraversalWorkspaceId(\n db, requestedWorkspaceId, scope.repoId,\n );\n if (workspaceId !== undefined) {\n const lifecycle = currentFactLifecycleDiagnostic(db, workspaceId);\n if (lifecycle) return {\n workspaceId, queue: [], pendingRoots: [], diagnostic: lifecycle,\n };\n }\n if (!scope.selectorMatched)\n return { workspaceId, queue: [], pendingRoots: [] };\n if (workspaceId === undefined) return {\n workspaceId, queue: [], pendingRoots: [],\n diagnostic: workspaceAmbiguityDiagnostic(db),\n };\n const pendingRoots = includeAsync\n ? rootScopes(db, workspaceId, scope) : undefined;\n if (pendingRoots)\n return { workspaceId, queue: [], pendingRoots };\n return {\n workspaceId,\n queue: initialQueue(scheduler, workspaceId, scope),\n pendingRoots: [],\n };\n}\n\nexport function nextPendingRoot(\n pendingRoots: PendingTraceRootScope[],\n scheduler: TraversalScopeScheduler,\n workspaceId: number,\n): TraceQueueScope | undefined {\n while (pendingRoots.length > 0) {\n const root = pendingRoots.shift();\n if (!root) return undefined;\n const context = new Map<string, ContextBinding>();\n const scheduled = scheduler.schedule({\n workspaceId, repoId: root.repoId, files: root.files,\n symbolIds: root.symbolIds, context,\n });\n if (scheduled.kind !== 'scheduled') continue;\n return { ...root, depth: 1, context, state: scheduled.state };\n }\n return undefined;\n}\n\nexport function claimPendingRoot(\n pendingRoots: PendingTraceRootScope[],\n target: {\n repoId?: number;\n files: ReadonlySet<string>;\n symbolIds: ReadonlySet<number>;\n },\n): boolean {\n const index = pendingRoots.findIndex((root) =>\n target.repoId === root.repoId\n && !root.unownedOnly\n && setsEqual(root.files, target.files)\n && setsEqual(root.symbolIds, target.symbolIds));\n if (index < 0) return false;\n pendingRoots.splice(index, 1);\n return true;\n}\n\nexport function enqueueCausalScope(\n queue: TraceQueueScope[],\n pendingRoots: PendingTraceRootScope[],\n scope: TraceQueueScope,\n): void {\n if (scope.context.size === 0 && scope.files && scope.symbolIds)\n claimPendingRoot(pendingRoots, {\n repoId: scope.repoId, files: scope.files, symbolIds: scope.symbolIds,\n });\n queue.push(scope);\n}\n\nfunction initialQueue(\n scheduler: TraversalScopeScheduler,\n workspaceId: number,\n scope: { repoId?: number; files?: Set<string>; symbolIds?: Set<number> },\n): TraceQueueScope[] {\n const context = new Map<string, ContextBinding>();\n const scheduled = scheduler.schedule({\n workspaceId, repoId: scope.repoId, files: scope.files,\n symbolIds: scope.symbolIds, context,\n });\n return scheduled.kind === 'scheduled' ? [{\n repoId: scope.repoId, files: scope.files, symbolIds: scope.symbolIds,\n depth: 1, context, state: scheduled.state,\n }] : [];\n}\n\nfunction rootScopes(\n db: Db,\n workspaceId: number,\n scope: { repoId?: number; files?: Set<string>; symbolIds?: Set<number> },\n): PendingTraceRootScope[] | undefined {\n if (scope.symbolIds && scope.symbolIds.size === 1) return undefined;\n const calls = scopedRootCalls(db, workspaceId, scope);\n if (!hasExactDispatch(db, calls)) return undefined;\n if (scope.symbolIds && scope.symbolIds.size > 1)\n return selectedSymbolRoots(db, workspaceId, scope.symbolIds);\n return callOwnerRoots(calls);\n}\n\nfunction scopedRootCalls(\n db: Db,\n workspaceId: number,\n scope: { repoId?: number; files?: Set<string>; symbolIds?: Set<number> },\n): RootCallRow[] {\n return rootCalls(db, workspaceId, scope.repoId, scope.files)\n .filter((call) => !scope.symbolIds\n || (typeof call.sourceSymbolId === 'number'\n && scope.symbolIds.has(call.sourceSymbolId)));\n}\n\nfunction callOwnerRoots(\n calls: RootCallRow[],\n): PendingTraceRootScope[] | undefined {\n const roots = new Map<string, PendingTraceRootScope>();\n for (const call of calls) {\n const [key, root] = callOwnerRoot(call);\n if (roots.has(key)) continue;\n roots.set(key, root);\n }\n return roots.size > 0 ? [...roots.values()] : undefined;\n}\n\nfunction callOwnerRoot(\n call: RootCallRow,\n): [string, PendingTraceRootScope] {\n const symbolId = call.sourceSymbolId;\n const owned = typeof symbolId === 'number';\n const key = owned\n ? `symbol:${symbolId}` : `unowned:${call.repoId}:${call.sourceFile}`;\n return [key, {\n repoId: call.repoId,\n files: new Set([call.sourceFile]),\n symbolIds: owned ? new Set([symbolId]) : new Set(),\n unownedOnly: !owned,\n rootObservationOnly: true,\n }];\n}\n\nfunction selectedSymbolRoots(\n db: Db,\n workspaceId: number,\n symbolIds: Set<number>,\n): PendingTraceRootScope[] {\n const ids = [...symbolIds];\n const rows = db.prepare(`SELECT s.id,s.repo_id repoId,s.source_file sourceFile\n FROM symbols s JOIN repositories r ON r.id=s.repo_id\n WHERE r.workspace_id=? AND s.id IN (${ids.map(() => '?').join(',')})\n ORDER BY r.name COLLATE BINARY,r.id,s.source_file COLLATE BINARY,\n s.start_offset,s.end_offset,s.id`).all(workspaceId, ...ids);\n return rows.flatMap((row) => typeof row.id === 'number'\n && typeof row.repoId === 'number' && typeof row.sourceFile === 'string'\n ? [{ repoId: row.repoId, files: new Set([row.sourceFile]),\n symbolIds: new Set([row.id]), unownedOnly: false,\n rootObservationOnly: false }]\n : []);\n}\n\nfunction setsEqual<T>(left: ReadonlySet<T>, right: ReadonlySet<T>): boolean {\n if (left.size !== right.size) return false;\n return [...left].every((value) => right.has(value));\n}\n\nfunction rootCalls(\n db: Db,\n workspaceId: number,\n repoId: number | undefined,\n files: Set<string> | undefined,\n): RootCallRow[] {\n const rows = db.prepare(`SELECT c.id,c.repo_id repoId,r.name repoName,\n r.workspace_id workspaceId,r.graph_generation graphGeneration,\n c.source_symbol_id sourceSymbolId,c.source_file sourceFile,\n c.call_type callType,c.event_name_expr eventName\n FROM outbound_calls c JOIN repositories r ON r.id=c.repo_id\n WHERE r.workspace_id=? AND (? IS NULL OR c.repo_id=?)\n ORDER BY r.name COLLATE BINARY,r.id,c.source_file COLLATE BINARY,\n c.call_site_start_offset,c.call_site_end_offset,c.source_line,c.id`).all(\n workspaceId, repoId, repoId,\n ) as unknown as RootCallRow[];\n return files ? rows.filter((row) => files.has(row.sourceFile)) : rows;\n}\n\nfunction hasExactDispatch(db: Db, calls: RootCallRow[]): boolean {\n const match = db.prepare(`SELECT 1 matched FROM graph_edges emitted\n WHERE emitted.workspace_id=? AND emitted.generation=?\n AND emitted.edge_type='HANDLER_EMITS_EVENT'\n AND emitted.from_kind='call' AND emitted.from_id=?\n AND EXISTS (SELECT 1 FROM graph_edges subscriber\n WHERE subscriber.workspace_id=emitted.workspace_id\n AND subscriber.generation=emitted.generation\n AND subscriber.edge_type='EVENT_SUBSCRIPTION_HANDLED_BY'\n AND subscriber.from_kind='event'\n AND subscriber.from_id COLLATE BINARY=? COLLATE BINARY)\n LIMIT 1`);\n return calls.some((call) => call.callType === 'async_emit'\n && typeof call.eventName === 'string'\n && Boolean(match.get(call.workspaceId, call.graphGeneration,\n String(call.id), call.eventName)));\n}\n\nfunction workspaceAmbiguityDiagnostic(db: Db): Record<string, unknown> {\n const total = Number(db.prepare(`SELECT COUNT(DISTINCT w.id) count\n FROM workspaces w JOIN repositories r ON r.workspace_id=w.id`).get()?.count ?? 0);\n const workspaceIds = db.prepare(`SELECT DISTINCT w.id FROM workspaces w\n JOIN repositories r ON r.workspace_id=w.id ORDER BY w.id LIMIT 5`).all()\n .flatMap((row) => typeof row.id === 'number' ? [row.id] : []);\n return {\n severity: 'error', code: 'trace_workspace_ambiguous',\n message: total > 1\n ? 'Trace spans multiple indexed workspaces; provide a workspace identity.'\n : 'No indexed workspace could be selected for this trace.',\n workspaceCount: total, workspaceIds,\n omittedWorkspaceCount: Math.max(0, total - workspaceIds.length),\n remediation: 'Pass TraceOptions.workspaceId or select a repository in one workspace.',\n };\n}\n","import type { TraceEdge } from '../types.js';\nimport type {\n CompactDecisionInput,\n CompactEdgeObservation,\n CompactReferenceInput,\n CompactSemanticEndpoint,\n CompactSourceSite,\n CompactStatus,\n CompactTraceObserver,\n} from './014-compact-contract.js';\n\nexport interface TraceEdgeSemantics {\n source: CompactSemanticEndpoint;\n target: CompactSemanticEndpoint;\n status: CompactStatus;\n decision?: CompactDecisionInput;\n refs?: CompactReferenceInput;\n site?: CompactSourceSite;\n}\n\nexport interface SemanticCallRow extends Record<string, unknown> {\n id: number;\n repo_id: number;\n repoName: string;\n source_file: string;\n source_line: number;\n source_symbol_id?: number;\n}\n\nexport interface SemanticTargetRow extends Record<string, unknown> {\n to_kind: string;\n to_id: string;\n status?: string;\n}\n\nconst nonResolvedGraphStatuses: Readonly<Record<string, CompactStatus>> = {\n ambiguous: 'ambiguous', dynamic: 'dynamic', terminal: 'terminal',\n};\n\nexport class TraceEdgeRecorder {\n constructor(\n private readonly edges: TraceEdge[],\n private readonly observer?: CompactTraceObserver,\n ) {}\n\n record(edge: TraceEdge, semantics: TraceEdgeSemantics): number {\n const ordinal = this.edges.length;\n this.edges.push(edge);\n this.observer?.record(observation(ordinal, edge, semantics));\n return ordinal;\n }\n\n unavailable(\n side: 'source' | 'target',\n endpointKind: string,\n ): CompactSemanticEndpoint {\n return { kind: 'unavailable', side, endpointKind,\n detailedEdgeIndex: this.edges.length };\n }\n}\n\nexport function semanticCallSource(\n call: SemanticCallRow,\n workspaceId: number,\n): CompactSemanticEndpoint {\n const symbolId = positiveNumber(call.source_symbol_id);\n if (symbolId !== undefined) return { kind: 'symbol', symbolId };\n return {\n kind: 'call_site', workspaceId, repositoryId: call.repo_id,\n repositoryName: call.repoName, sourceFile: call.source_file,\n sourceLine: call.source_line,\n startOffset: finiteNumber(call.call_site_start_offset),\n endOffset: finiteNumber(call.call_site_end_offset), callId: call.id,\n };\n}\n\nexport function semanticOperation(\n value: unknown,\n unavailable: () => CompactSemanticEndpoint,\n): CompactSemanticEndpoint {\n const operationId = positiveNumber(value);\n return operationId === undefined ? unavailable()\n : { kind: 'operation', operationId };\n}\n\nexport function semanticSymbol(\n value: unknown,\n unavailable: () => CompactSemanticEndpoint,\n): CompactSemanticEndpoint {\n const symbolId = positiveNumber(value);\n return symbolId === undefined ? unavailable() : { kind: 'symbol', symbolId };\n}\n\nexport function semanticHandler(\n methodIdValue: unknown,\n symbolIdValue: unknown,\n unavailable: () => CompactSemanticEndpoint,\n): CompactSemanticEndpoint {\n const symbolId = positiveNumber(symbolIdValue);\n if (symbolId !== undefined) return { kind: 'symbol', symbolId };\n const handlerMethodId = positiveNumber(methodIdValue);\n return handlerMethodId === undefined ? unavailable()\n : { kind: 'handler_method', handlerMethodId };\n}\n\nexport function semanticGraphTarget(\n row: SemanticTargetRow,\n call: Record<string, unknown>,\n workspaceId: number,\n unavailable: () => CompactSemanticEndpoint,\n): CompactSemanticEndpoint {\n if (row.to_kind === 'event') return {\n kind: 'event', workspaceId,\n eventName: typeof call.event_name_expr === 'string'\n ? call.event_name_expr : row.to_id,\n };\n const id = positiveNumber(row.to_id);\n if (row.to_kind === 'operation')\n return id === undefined ? unavailable() : { kind: 'operation', operationId: id };\n if (row.to_kind === 'symbol')\n return id === undefined ? unavailable() : { kind: 'symbol', symbolId: id };\n if (row.to_kind === 'handler_method') return id === undefined\n ? unavailable() : { kind: 'handler_method', handlerMethodId: id };\n return { kind: 'target', workspaceId,\n repositoryId: positiveNumber(call.repo_id), targetKind: row.to_kind,\n targetId: row.to_id };\n}\n\nexport function semanticScopeTarget(\n workspaceId: number,\n repositoryId: number | undefined,\n sourceFiles: ReadonlySet<string> | undefined,\n symbolIds: ReadonlySet<number> | undefined,\n structuralKey: string,\n): CompactSemanticEndpoint {\n return {\n kind: 'scope', workspaceId, repositoryId,\n sourceFiles: [...(sourceFiles ?? [])],\n symbolIds: [...(symbolIds ?? [])], structuralKey,\n };\n}\n\nexport function compactGraphStatus(\n row: SemanticTargetRow,\n evidence: Record<string, unknown>,\n unresolvedReason: string | undefined,\n dynamicMode: string | undefined,\n): CompactStatus {\n const effective = recordValue(evidence.effectiveResolution);\n const status = stringValue(effective.status) ?? row.status ?? 'unresolved';\n if (status !== 'resolved')\n return nonResolvedGraphStatuses[status] ?? 'unresolved';\n if (unresolvedReason) return 'unresolved';\n const inference = recordValue(evidence.dynamicTargetInference);\n if (isDynamicInference(dynamicMode, inference)) return 'dynamic';\n return traversableTargetKind(row.to_kind) ? 'resolved' : 'terminal';\n}\n\nfunction isDynamicInference(\n mode: string | undefined,\n evidence: Record<string, unknown>,\n): boolean {\n return mode === 'infer' && evidence.status === 'resolved';\n}\n\nfunction traversableTargetKind(kind: string): boolean {\n return ['operation', 'symbol', 'handler_method'].includes(kind);\n}\n\nexport function compactResolutionStatus(\n status: unknown,\n unresolvedReason?: string,\n): CompactStatus {\n if (status === 'ambiguous') return 'ambiguous';\n if (status === 'dynamic') return 'dynamic';\n return status === 'resolved' && !unresolvedReason ? 'resolved' : 'unresolved';\n}\n\nexport function compactEventStatus(\n status: unknown,\n bodyExpansion: unknown,\n): CompactStatus {\n if (bodyExpansion === 'cycle_blocked') return 'cycle';\n if (status === 'ambiguous') return 'ambiguous';\n return status === 'resolved' ? 'inferred' : 'unresolved';\n}\n\nexport function compactDecisionFromEvidence(\n evidence: Record<string, unknown>,\n overrides: CompactDecisionInput = {},\n): CompactDecisionInput {\n const effective = recordValue(evidence.effectiveResolution);\n const persisted = recordValue(evidence.persistedResolution);\n const dynamic = recordValue(evidence.dynamicTargetExploration);\n const implementation = recordValue(evidence.implementationSelection);\n const missing = stringArray(dynamic.missingVariables\n ?? evidence.missingRuntimeVariables);\n const authoritativeMissingCount = finiteNumber(\n dynamic.missingVariableCount ?? evidence.missingVariableCount,\n );\n return {\n effectiveResolutionStatus: stringValue(effective.status),\n effectiveTarget: targetSummary(effective),\n persistedResolutionStatus: stringValue(persisted.status),\n persistedTarget: targetSummary(persisted),\n missingVariableNames: missing.length > 0 ? missing : undefined,\n missingVariableCount: authoritativeMissingCount\n ?? (missing.length > 0 ? missing.length : undefined),\n dynamicMode: dynamicMode(dynamic.mode),\n candidateCount: firstNumber(\n dynamic.candidateCount,\n implementation.candidateCount,\n implementation.candidateScoreCount,\n evidence.candidateCount,\n evidence.persistedCandidateCount,\n ),\n viableCandidateCount: finiteNumber(dynamic.viableCandidateCount),\n rejectedCandidateCount: finiteNumber(dynamic.rejectedCandidateCount),\n omittedCandidateCount: finiteNumber(dynamic.omittedCandidateCount),\n implementationStrategy: stringValue(implementation.strategy),\n implementationGuided: booleanValue(implementation.guided),\n implementationContextual: booleanValue(\n evidence.contextualImplementationSelected),\n reasonCode: stringValue(evidence.reasonCode ?? evidence.cycleReason),\n eventMatchStrategy: stringValue(evidence.matchStrategy),\n dispatchCertainty: stringValue(evidence.dispatchCertainty),\n associationStatus: stringValue(evidence.associationStatus),\n associationBasis: stringValue(evidence.associationBasis),\n eventScope: stringValue(evidence.dispatchScope),\n callRole: stringValue(evidence.callRole),\n factOrigin: stringValue(evidence.factOrigin),\n roleSiteMatchCount: finiteNumber(evidence.roleSiteMatchCount),\n bodyExpansion: stringValue(evidence.bodyExpansion),\n ...overrides,\n };\n}\n\nexport function compactRefs(\n values: Record<string, unknown>,\n): CompactReferenceInput {\n return {\n graphEdgeIds: reference(values.graphEdgeId),\n outboundCallIds: reference(values.outboundCallId),\n subscribeCallIds: reference(values.subscribeCallId),\n symbolCallIds: reference(values.symbolCallId),\n operationIds: reference(values.operationId),\n symbolIds: reference(values.symbolId),\n handlerMethodIds: reference(values.handlerMethodId),\n };\n}\n\nexport function compactSite(\n values: Record<string, unknown>,\n): CompactSourceSite {\n return {\n repository: stringValue(values.repository ?? values.repoName),\n sourceFile: stringValue(values.sourceFile ?? values.source_file),\n sourceLine: finiteNumber(values.sourceLine ?? values.source_line),\n startOffset: finiteNumber(values.startOffset ?? values.call_site_start_offset),\n endOffset: finiteNumber(values.endOffset ?? values.call_site_end_offset),\n };\n}\n\nfunction observation(\n ordinal: number,\n edge: TraceEdge,\n semantics: TraceEdgeSemantics,\n): CompactEdgeObservation {\n return {\n ordinal, step: edge.step, type: edge.type,\n source: semantics.source, target: semantics.target,\n status: semantics.status, confidence: edge.confidence,\n decision: semantics.decision, refs: semantics.refs, site: semantics.site,\n };\n}\n\nfunction targetSummary(\n value: Record<string, unknown>,\n): { kind: string; id: string } | undefined {\n const kind = stringValue(value.targetKind);\n const id = stringValue(value.targetId);\n return kind && id ? { kind, id } : undefined;\n}\n\nfunction reference(value: unknown): Array<number | string> | undefined {\n if (typeof value === 'string' && value.length > 0) {\n const numeric = Number(value);\n if (Number.isSafeInteger(numeric)) return numeric > 0 ? [numeric] : undefined;\n return [value];\n }\n const number = finiteNumber(value);\n return number === undefined || number <= 0 ? undefined : [number];\n}\n\nfunction dynamicMode(value: unknown): 'strict' | 'candidates' | 'infer' | undefined {\n return value === 'strict' || value === 'candidates' || value === 'infer'\n ? value : undefined;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown> : {};\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value !== 'string' || value.trim() === '') return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction positiveNumber(value: unknown): number | undefined {\n const number = finiteNumber(value);\n return number !== undefined && number > 0 ? number : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === 'boolean' ? value : undefined;\n}\n\nfunction firstNumber(...values: unknown[]): number | undefined {\n for (const value of values) {\n const numeric = finiteNumber(value);\n if (numeric !== undefined) return numeric;\n }\n return undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport { canonicalImplementationEvidence } from '../linker/000-implementation-candidates.js';\nimport type { ImplementationHint } from '../types.js';\nimport { projectBounded } from '../utils/000-bounded-projection.js';\nimport {\n selectImplementation,\n type ImplementationSelection,\n} from './implementation-hints.js';\n\nexport interface ImplementationGraphEdge {\n status?: string;\n evidence_json?: string;\n}\n\nexport interface ImplementationSelectionOptions {\n implementationRepo?: string;\n implementationHints?: ImplementationHint[];\n}\n\nexport function hintedImplementationSelection(\n db: Db,\n edge: ImplementationGraphEdge | undefined,\n operationId: string,\n options: ImplementationSelectionOptions,\n): ImplementationSelection {\n if (!edge || edge.status !== 'ambiguous')\n return { blocksAutomatic: false, evidence: { status: 'not_applicable' } };\n return selectImplementation(\n parsedEvidence(edge.evidence_json), options.implementationHints,\n options.implementationRepo, canonicalImplementationEvidence(db, operationId),\n );\n}\n\nexport function contextualImplementationSelection(\n db: Db,\n edge: ImplementationGraphEdge | undefined,\n operationId: string,\n callerRepoId: number | undefined,\n remoteEvidence: Record<string, unknown>,\n options: ImplementationSelectionOptions,\n): ImplementationSelection {\n const hinted = hintedImplementationSelection(db, edge, operationId, options);\n if (hinted.methodId || hinted.blocksAutomatic || !edge\n || edge.status !== 'ambiguous' || callerRepoId === undefined) return hinted;\n const candidates = implementationCandidates(\n canonicalImplementationEvidence(db, operationId) ?? parsedEvidence(edge.evidence_json),\n );\n const scores = candidates.filter((candidate) => candidate.accepted)\n .map((candidate) => contextualScore(candidate, callerRepoId, remoteEvidence))\n .sort(compareScore);\n if (scores.length === 0)\n return { blocksAutomatic: false, evidence: { status: 'not_applicable', candidateScores: [] } };\n const [first, second] = scores;\n if (first?.methodId !== undefined && first.score > 0\n && (!second || first.score > second.score))\n return selectedContext(first, scores);\n return tiedContext(hinted, scores);\n}\n\nfunction selectedContext(\n first: ContextScore,\n scores: ContextScore[],\n): ImplementationSelection {\n const projection = projectBounded(scores, compareScore);\n return {\n methodId: String(first.methodId),\n blocksAutomatic: false,\n evidence: {\n status: 'selected',\n selectedMethodId: first.methodId,\n candidateScores: projection.items,\n candidateScoreCount: projection.totalCount,\n shownCandidateScoreCount: projection.shownCount,\n omittedCandidateScoreCount: projection.omittedCount,\n },\n };\n}\n\nfunction tiedContext(\n hinted: ImplementationSelection,\n scores: ContextScore[],\n): ImplementationSelection {\n if (hinted.evidence.reason === 'no_scoped_hint_matched_edge') return hinted;\n const projection = projectBounded(scores, compareScore);\n return {\n blocksAutomatic: false,\n evidence: {\n status: 'tied',\n tieReason: scores.length > 1\n ? 'duplicate_helper_implementation_candidates'\n : 'no_unique_materially_stronger_candidate',\n candidateScores: projection.items,\n candidateScoreCount: projection.totalCount,\n shownCandidateScoreCount: projection.shownCount,\n omittedCandidateScoreCount: projection.omittedCount,\n },\n };\n}\n\ninterface ImplementationCandidate {\n accepted: boolean;\n methodId?: number;\n score: number;\n handlerPackage: Record<string, unknown>;\n applicationPackage: Record<string, unknown>;\n}\n\ninterface ContextScore {\n methodId?: number;\n score: number;\n reasons: string[];\n handlerPackage: Record<string, unknown>;\n applicationPackage: Record<string, unknown>;\n}\n\nfunction implementationCandidates(evidence: Record<string, unknown>): ImplementationCandidate[] {\n const rows = Array.isArray(evidence.candidates) ? evidence.candidates : [];\n return rows.flatMap((value) => {\n const row = record(value);\n return Object.keys(row).length === 0 ? [] : [{\n accepted: row.accepted === true,\n methodId: numberValue(row.methodId),\n score: numberValue(row.score) ?? 0,\n handlerPackage: record(row.handlerPackage),\n applicationPackage: record(row.applicationPackage),\n }];\n });\n}\n\nfunction contextualScore(\n candidate: ImplementationCandidate,\n callerRepoId: number,\n remoteEvidence: Record<string, unknown>,\n): ContextScore {\n const reasons: string[] = [];\n let score = candidate.score;\n if (numberValue(candidate.handlerPackage.id) === callerRepoId) {\n score += 10;\n reasons.push('handler_package_matches_caller_repository');\n }\n if (numberValue(candidate.applicationPackage.id) === callerRepoId) {\n score += 10;\n reasons.push('registration_package_matches_caller_repository');\n }\n if (hasRemoteContext(remoteEvidence)) {\n score += 1;\n reasons.push('remote_call_context_available');\n }\n return {\n methodId: candidate.methodId,\n score,\n reasons,\n handlerPackage: candidate.handlerPackage,\n applicationPackage: candidate.applicationPackage,\n };\n}\n\nfunction hasRemoteContext(evidence: Record<string, unknown>): boolean {\n return typeof evidence.effectiveServicePath === 'string'\n || typeof evidence.effectiveDestination === 'string'\n || typeof evidence.effectiveAlias === 'string';\n}\n\nfunction compareScore(left: ContextScore, right: ContextScore): number {\n return right.score - left.score\n || Number(left.methodId ?? 0) - Number(right.methodId ?? 0);\n}\n\nfunction parsedEvidence(value: string | undefined): Record<string, unknown> {\n try {\n return record(JSON.parse(String(value ?? '{}')) as unknown);\n } catch {\n return {};\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n","interface ImplementationStartEdge {\n id: number;\n status?: string;\n}\n\nexport function implementationStartDiagnostic(\n edge: ImplementationStartEdge,\n evidence: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n severity: 'warning',\n code: edge.status === 'ambiguous'\n ? 'trace_start_ambiguous'\n : 'trace_start_implementation_unresolved',\n message: `Indexed operation matched but implementation edge is ${String(\n edge.status ?? 'unresolved',\n )}`,\n resolutionStage: 'implementation',\n resolutionStatus: edge.status === 'ambiguous'\n ? 'ambiguous_implementation'\n : 'rejected_implementation',\n implementationEdgeId: edge.id,\n implementationStatus: edge.status,\n implementationAmbiguityReasons: evidence.ambiguityReasons,\n implementationRejectionReasons: implementationRejectionReasons(evidence),\n implementationHintSuggestions: evidence.implementationHintSuggestions,\n implementationHintSuggestionCount: evidence.implementationHintSuggestionCount,\n shownImplementationHintSuggestionCount:\n evidence.shownImplementationHintSuggestionCount,\n omittedImplementationHintSuggestionCount:\n evidence.omittedImplementationHintSuggestionCount,\n candidates: evidence.candidates,\n candidateCount: evidence.candidateCount,\n shownCandidateCount: evidence.shownCandidateCount,\n omittedCandidateCount: evidence.omittedCandidateCount,\n };\n}\n\nfunction implementationRejectionReasons(\n evidence: Record<string, unknown>,\n): string[] {\n const candidates = recordArray(evidence.candidates);\n const reasons = candidates.flatMap((candidate) => stringArray(candidate.rejectedReasons));\n return [...new Set(reasons)].sort();\n}\n\nfunction recordArray(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value)\n ? value.filter(isRecord)\n : [];\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { Db } from '../db/connection.js';\nimport { extractPlaceholders } from '../linker/dynamic-edge-resolver.js';\nimport { boundCandidateLikeEvidence } from '../utils/000-bounded-projection.js';\nimport type { ContextBinding } from './008-contextual-runtime-state.js';\n\nexport interface TraceContextCall extends Record<string, unknown> {\n service_binding_id?: number;\n evidence_json?: string;\n}\n\ntype BindingRow = Omit<ContextBinding,\n 'bindingId' | 'source' | 'calleeReceiver'> & {\n id?: number;\n symbolId?: number | null;\n variableName?: string;\n};\n\nexport function parseTraceEvidence(value: unknown): Record<string, unknown> {\n try {\n const parsed = JSON.parse(String(value || '{}')) as unknown;\n return isRecord(parsed) ? boundCandidateLikeEvidence(parsed) : {};\n } catch {\n return {};\n }\n}\n\nexport function receiverFromTraceEvidence(value: unknown): string | undefined {\n const evidence = parseTraceEvidence(value);\n return typeof evidence.receiver === 'string' ? evidence.receiver : undefined;\n}\n\nexport function knownBindingsForCalls(\n db: Db,\n calls: TraceContextCall[],\n): Map<string, ContextBinding> {\n const map = new Map<string, ContextBinding>();\n for (const call of calls) addCallBinding(db, map, call);\n return map;\n}\n\nexport function knownBindingsForScope(\n db: Db,\n repoId: number | undefined,\n symbolIds: Set<number> | undefined,\n files: Set<string> | undefined,\n): Map<string, ContextBinding> {\n const map = new Map<string, ContextBinding>();\n if (repoId === undefined) return map;\n const rows = db.prepare(`SELECT b.id,b.symbol_id symbolId,\n b.variable_name variableName,b.alias,b.alias_expr aliasExpr,\n b.destination_expr destinationExpr,b.service_path_expr servicePathExpr,\n b.source_file sourceFile,b.source_line sourceLine,\n req.service_path requireServicePath,req.destination requireDestination\n FROM service_bindings b LEFT JOIN cds_requires req\n ON req.repo_id=b.repo_id AND req.alias=b.alias\n WHERE b.repo_id=?\n ORDER BY b.source_file COLLATE BINARY,b.source_line,b.id`).all(\n repoId,\n ) as BindingRow[];\n for (const row of rows) addScopeBinding(map, row, symbolIds, files);\n return map;\n}\n\nexport function contextForSymbolCall(\n db: Db,\n symbolCall: Record<string, unknown>,\n callerBindings: Map<string, ContextBinding>,\n): Map<string, ContextBinding> {\n const next = new Map<string, ContextBinding>();\n if (callerBindings.size === 0) return next;\n const context = symbolCallContext(db, symbolCall);\n context.args.forEach((argument, index) => addArgumentBindings(\n next, callerBindings, context, argument, index,\n ));\n return next;\n}\n\nfunction addCallBinding(\n db: Db,\n map: Map<string, ContextBinding>,\n call: TraceContextCall,\n): void {\n const receiver = receiverFromTraceEvidence(call.evidence_json);\n const bindingId = Number(call.service_binding_id ?? 0);\n if (!receiver || !bindingId) return;\n const row = db.prepare(`SELECT b.id,b.alias,b.alias_expr aliasExpr,\n b.destination_expr destinationExpr,b.service_path_expr servicePathExpr,\n b.source_file sourceFile,b.source_line sourceLine,\n req.service_path requireServicePath,req.destination requireDestination\n FROM service_bindings b LEFT JOIN cds_requires req\n ON req.repo_id=b.repo_id AND req.alias=b.alias WHERE b.id=?`).get(\n bindingId,\n ) as ContextBinding | undefined;\n if (row) map.set(receiver, enrichBinding({\n ...row, bindingId, source: 'local_service_binding', calleeReceiver: receiver,\n }));\n}\n\nfunction addScopeBinding(\n map: Map<string, ContextBinding>,\n row: BindingRow,\n symbolIds: Set<number> | undefined,\n files: Set<string> | undefined,\n): void {\n if (!row.variableName) return;\n if (files && !files.has(String(row.sourceFile))) return;\n if (symbolIds?.size && row.symbolId != null\n && !symbolIds.has(Number(row.symbolId))) return;\n const candidate = enrichBinding({\n ...row, bindingId: Number(row.id), source: 'local_service_binding',\n calleeReceiver: row.variableName, resolutionStatus: 'selected',\n });\n const existing = map.get(row.variableName);\n if (!existing) {\n map.set(row.variableName, candidate);\n return;\n }\n map.set(row.variableName, ambiguousBinding(existing, candidate));\n}\n\nfunction ambiguousBinding(\n existing: ContextBinding,\n candidate: ContextBinding,\n): ContextBinding {\n const bindingCandidates = uniqueBindingCandidates([\n ...(existing.bindingCandidates ?? [bindingEvidence(existing)]),\n bindingEvidence(candidate),\n ]);\n return {\n ...candidate, bindingId: undefined,\n source: 'ambiguous_local_service_bindings', resolutionStatus: 'ambiguous',\n bindingCandidates,\n };\n}\n\ninterface SymbolCallContext {\n args: Array<Record<string, unknown>>;\n params: string[];\n parameterBindings: Array<Record<string, unknown>>;\n parameterPropertyAliases: Array<Record<string, unknown>>;\n provenance: Record<string, unknown>;\n}\n\nfunction symbolCallContext(\n db: Db,\n symbolCall: Record<string, unknown>,\n): SymbolCallContext {\n const callEvidence = parseTraceEvidence(symbolCall.evidence_json);\n const callee = db.prepare(`SELECT evidence_json evidenceJson,\n source_file sourceFile,start_line startLine FROM symbols WHERE id=?`).get(\n symbolCall.callee_symbol_id,\n ) as { evidenceJson?: string; sourceFile?: string; startLine?: number } | undefined;\n const evidence = parseTraceEvidence(callee?.evidenceJson);\n return {\n args: recordArray(callEvidence.callArguments),\n params: stringArray(evidence.parameters),\n parameterBindings: recordArray(evidence.parameterBindings),\n parameterPropertyAliases: recordArray(evidence.parameterPropertyAliases),\n provenance: {\n callerSite: { sourceFile: String(symbolCall.source_file ?? ''),\n sourceLine: Number(symbolCall.source_line ?? 0) },\n calleeSite: { sourceFile: callee?.sourceFile, sourceLine: callee?.startLine },\n },\n };\n}\n\nfunction addArgumentBindings(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n context: SymbolCallContext,\n argument: Record<string, unknown>,\n index: number,\n): void {\n const parameterBinding = context.parameterBindings.find(\n (binding) => binding.index === index,\n );\n const parameter = parameterBinding?.kind === 'identifier'\n && typeof parameterBinding.name === 'string'\n ? parameterBinding.name : context.params[index];\n addIdentifierBinding(next, caller, context.provenance, argument, parameter);\n addObjectBindings(next, caller, context, argument, parameterBinding, parameter, index);\n addArrayBindings(next, caller, context.provenance, argument, parameterBinding, index);\n}\n\nfunction addIdentifierBinding(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n provenance: Record<string, unknown>,\n argument: Record<string, unknown>,\n parameter: string | undefined,\n): void {\n if (argument.kind !== 'identifier' || typeof argument.name !== 'string'\n || !parameter) return;\n const binding = caller.get(argument.name);\n if (binding) next.set(parameter, { ...binding, ...provenance,\n source: 'local_symbol_argument', callerArgument: argument.name,\n calleeParameter: parameter, calleeReceiver: parameter });\n}\n\nfunction addObjectBindings(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n context: SymbolCallContext,\n argument: Record<string, unknown>,\n parameterBinding: Record<string, unknown> | undefined,\n parameter: string | undefined,\n index: number,\n): void {\n if (argument.kind !== 'object_literal' || !Array.isArray(argument.properties)) return;\n for (const property of recordArray(argument.properties)) addObjectPropertyBinding(\n next, caller, context, property, parameterBinding, parameter, index,\n );\n}\n\nfunction addObjectPropertyBinding(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n context: SymbolCallContext,\n property: Record<string, unknown>,\n parameterBinding: Record<string, unknown> | undefined,\n parameter: string | undefined,\n index: number,\n): void {\n if (typeof property.property !== 'string' || typeof property.argument !== 'string') return;\n const binding = caller.get(property.argument);\n if (!binding) return;\n const local = objectPatternLocal(parameterBinding, property.property);\n if (local) {\n next.set(local, objectBinding(binding, context.provenance,\n property.property, property.argument, String(index), local,\n 'local_symbol_destructured_object_argument'));\n return;\n }\n if (!parameter) return;\n const receiver = `${parameter}.${property.property}`;\n next.set(receiver, objectBinding(binding, context.provenance,\n property.property, property.argument, parameter, receiver,\n 'local_symbol_object_argument'));\n addObjectAliases(next, binding, context, property, parameter, receiver);\n}\n\nfunction addObjectAliases(\n next: Map<string, ContextBinding>,\n binding: ContextBinding,\n context: SymbolCallContext,\n property: Record<string, unknown>,\n parameter: string,\n receiver: string,\n): void {\n for (const alias of context.parameterPropertyAliases) {\n if (alias.parameter !== parameter || alias.property !== property.property\n || typeof alias.local !== 'string') continue;\n next.set(alias.local, {\n ...objectBinding(binding, context.provenance,\n String(property.property), String(property.argument), parameter,\n alias.local, 'local_symbol_object_parameter_destructure'),\n calleeObjectProperty: receiver,\n calleeLocalDestructuredIdentifier: alias.local,\n parameterPropertyAliasKind: alias.kind,\n parameterPropertyAliasLine: alias.line,\n });\n }\n}\n\nfunction addArrayBindings(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n provenance: Record<string, unknown>,\n argument: Record<string, unknown>,\n parameterBinding: Record<string, unknown> | undefined,\n index: number,\n): void {\n const arrays = arrayPattern(argument, parameterBinding);\n if (!arrays) return;\n for (const element of arrays.elements)\n addArrayElement(next, caller, provenance, element, arrays.targets, index);\n}\n\nfunction arrayPattern(\n argument: Record<string, unknown>,\n binding: Record<string, unknown> | undefined,\n): { elements: Array<Record<string, unknown>>;\n targets: Array<Record<string, unknown>> } | undefined {\n if (argument.kind !== 'array_literal') return undefined;\n if (!Array.isArray(argument.elements)) return undefined;\n if (binding?.kind !== 'array_pattern') return undefined;\n if (!Array.isArray(binding.elements)) return undefined;\n return { elements: recordArray(argument.elements),\n targets: recordArray(binding.elements) };\n}\n\nfunction addArrayElement(\n next: Map<string, ContextBinding>,\n caller: Map<string, ContextBinding>,\n provenance: Record<string, unknown>,\n element: Record<string, unknown>,\n targets: Array<Record<string, unknown>>,\n index: number,\n): void {\n if (element.kind !== 'identifier' || typeof element.name !== 'string') return;\n const target = targets.find((item) => item.index === element.index);\n if (typeof target?.local !== 'string') return;\n const binding = caller.get(element.name);\n if (binding) next.set(target.local, { ...binding, ...provenance,\n source: 'local_symbol_destructured_array_argument',\n callerArgument: element.name, calleeParameter: String(index),\n calleeReceiver: target.local });\n}\n\nfunction objectPatternLocal(\n binding: Record<string, unknown> | undefined,\n property: string,\n): string | undefined {\n if (binding?.kind !== 'object_pattern' || !Array.isArray(binding.properties)) return undefined;\n const match = recordArray(binding.properties).find(\n (item) => item.property === property && typeof item.local === 'string',\n );\n return typeof match?.local === 'string' ? match.local : undefined;\n}\n\nfunction objectBinding(\n binding: ContextBinding,\n provenance: Record<string, unknown>,\n callerProperty: string,\n callerArgument: string,\n parameter: string,\n receiver: string,\n source: string,\n): ContextBinding {\n return { ...binding, ...provenance, source,\n callerProperty, callerArgument,\n calleeParameter: parameter, calleeReceiver: receiver };\n}\n\nfunction enrichBinding(row: ContextBinding): ContextBinding {\n const servicePath = row.servicePathExpr && !hasPlaceholder(row.servicePathExpr)\n ? row.servicePathExpr : !row.servicePathExpr ? row.requireServicePath : undefined;\n const destination = row.destinationExpr && !hasPlaceholder(row.destinationExpr)\n ? row.destinationExpr : !row.destinationExpr ? row.requireDestination : undefined;\n return { ...row, effectiveServicePath: servicePath,\n effectiveDestination: destination };\n}\n\nfunction hasPlaceholder(value: string | undefined): boolean {\n return extractPlaceholders(value).length > 0;\n}\n\nfunction bindingEvidence(binding: ContextBinding): Record<string, unknown> {\n return { bindingId: binding.bindingId, sourceFile: binding.sourceFile,\n sourceLine: binding.sourceLine, alias: binding.alias,\n aliasExpr: binding.aliasExpr, destinationExpr: binding.destinationExpr,\n servicePathExpr: binding.servicePathExpr };\n}\n\nfunction uniqueBindingCandidates(\n candidates: Array<Record<string, unknown>>,\n): Array<Record<string, unknown>> {\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n const key = JSON.stringify(candidate);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction recordArray(value: unknown): Array<Record<string, unknown>> {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { Db } from '../db/connection.js';\nimport { currentFactLifecycleDiagnostic } from '../db/001-fact-lifecycle.js';\nimport { resolveTraversalWorkspaceId } from './010-traversal-scope.js';\n\nfunction workspaceScopeIsAmbiguous(db: Db): boolean {\n const rows = db.prepare(`SELECT DISTINCT workspace_id workspaceId\n FROM repositories ORDER BY workspace_id LIMIT 2`).all();\n return rows.length > 1;\n}\n\nexport function shouldDeferTraceStartSelection(\n db: Db,\n requestedWorkspaceId: number | undefined,\n repoId: number | undefined,\n): boolean {\n const workspaceId = resolveTraversalWorkspaceId(\n db, requestedWorkspaceId, repoId,\n );\n if (workspaceId === undefined) return workspaceScopeIsAmbiguous(db);\n return currentFactLifecycleDiagnostic(db, workspaceId) !== undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport type { ImplementationHint } from '../types.js';\nimport type { TraceGraphEdgeRow } from './012-trace-graph-lookups.js';\n\nexport interface ImplementationHintOptions {\n implementationRepo?: string;\n implementationHints?: ImplementationHint[];\n}\n\nexport interface ImplementationScope {\n repoId?: number;\n files: Set<string>;\n symbolId?: number;\n edge?: TraceGraphEdgeRow;\n}\n\ninterface HandlerScopeRow {\n repoId?: number;\n sourceFile?: string;\n symbolId?: number;\n}\n\nfunction normalizeOperation(value: string | undefined): string | undefined {\n if (!value) return undefined;\n return value.startsWith('/') ? value.slice(1) : value;\n}\n\nfunction implementationEdge(\n db: Db,\n operationId: string,\n): TraceGraphEdgeRow | undefined {\n return db.prepare(`SELECT * FROM graph_edges\n WHERE edge_type='OPERATION_IMPLEMENTED_BY_HANDLER'\n AND from_kind='operation' AND from_id=?\n ORDER BY CASE status WHEN 'resolved' THEN 0\n WHEN 'ambiguous' THEN 1 ELSE 2 END,id LIMIT 1`)\n .get(operationId) as TraceGraphEdgeRow | undefined;\n}\n\nfunction handlerScopeRow(db: Db, methodId: string): HandlerScopeRow | undefined {\n return db.prepare(`SELECT hc.repo_id repoId,hc.source_file sourceFile,\n s.id symbolId\n FROM handler_methods hm\n JOIN handler_classes hc ON hc.id=hm.handler_class_id\n LEFT JOIN symbols s ON s.repo_id=hc.repo_id\n AND s.source_file=hc.source_file\n AND s.qualified_name=hc.class_name || '.' || hm.method_name\n AND s.start_line=hm.source_line\n WHERE hm.id=?`).get(methodId) as HandlerScopeRow | undefined;\n}\n\nexport function implementationScope(\n db: Db,\n operationId: string,\n): ImplementationScope {\n const edge = implementationEdge(db, operationId);\n if (!edge || edge.status !== 'resolved') return { files: new Set(), edge };\n const row = handlerScopeRow(db, edge.to_id);\n if (!row || typeof row.symbolId !== 'number')\n return { repoId: row?.repoId, files: new Set(), edge };\n return {\n repoId: row.repoId,\n files: new Set(row.sourceFile ? [row.sourceFile] : []),\n symbolId: row.symbolId,\n edge,\n };\n}\n\nexport function handlerScope(\n db: Db,\n methodId: string,\n): Omit<ImplementationScope, 'edge'> | undefined {\n const row = handlerScopeRow(db, methodId);\n if (!row || typeof row.symbolId !== 'number') return undefined;\n return {\n repoId: row.repoId,\n files: new Set(row.sourceFile ? [row.sourceFile] : []),\n symbolId: row.symbolId,\n };\n}\n\nexport function handlerFilesForOperation(\n db: Db,\n operationId: string,\n): Set<string> {\n const op = db.prepare(`SELECT o.operation_name operationName,\n o.operation_path operationPath,s.repo_id repoId\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n WHERE o.id=?`).get(operationId) as {\n operationName?: string;\n operationPath?: string;\n repoId?: number;\n } | undefined;\n if (!op) return new Set();\n const operation = normalizeOperation(op.operationPath ?? op.operationName);\n const rows = handlerFileRows(db, op.repoId, operation, op.operationName);\n return new Set(rows.flatMap((row) =>\n typeof row.sourceFile === 'string' ? [row.sourceFile] : []));\n}\n\nfunction handlerFileRows(\n db: Db,\n repoId: number | undefined,\n operation: string | undefined,\n operationName: string | undefined,\n): Array<{ sourceFile?: string }> {\n return db.prepare(`SELECT DISTINCT hc.source_file sourceFile\n FROM handler_classes hc\n JOIN handler_methods hm ON hm.handler_class_id=hc.id\n WHERE hc.repo_id=?\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.handlerKind'),\n CASE WHEN hm.decorator_kind='Event' THEN 'event'\n WHEN hm.decorator_kind IN ('Action','Func','On') THEN 'operation'\n ELSE 'unsupported' END)='operation'\n AND COALESCE(json_extract(hm.decorator_resolution_json,'$.executable'),\n CASE WHEN hm.decorator_kind IN ('Action','Func','On')\n THEN 1 ELSE 0 END)=1\n AND (hm.decorator_value=? OR hm.method_name=?\n OR hm.decorator_value=?)`)\n .all(repoId, operation, operation, operationName) as Array<{\n sourceFile?: string;\n }>;\n}\n","import type { Db } from '../db/connection.js';\nimport type { TraceStart } from '../types.js';\nimport { implementationHintDiagnostic } from './implementation-hints.js';\nimport { hintedImplementationSelection } from './005-implementation-selection.js';\nimport { implementationStartDiagnostic } from './007-implementation-start-diagnostic.js';\nimport { parseTraceEvidence } from './017-trace-context.js';\nimport { shouldDeferTraceStartSelection } from './022-trace-fact-preflight.js';\nimport {\n handlerScope,\n implementationScope,\n type ImplementationHintOptions,\n} from './025-trace-implementation-scope.js';\nimport {\n ambiguousStartDiagnostic,\n selectorRepoAmbiguousDiagnostic,\n selectorRepoNotFoundDiagnostic,\n sourceScopeForSelector,\n} from './selectors.js';\n\ninterface RepoRef {\n id: number;\n name: string;\n packageName?: string;\n workspaceId: number;\n}\n\ninterface OperationRow extends Record<string, unknown> {\n operationId?: string | number;\n repoName?: string;\n servicePath?: string;\n}\n\ninterface OperationStartScope {\n files?: Set<string>;\n symbols?: Set<number>;\n repoId?: number;\n operationId?: string;\n diagnostics?: Array<Record<string, unknown>>;\n}\n\nexport interface TraceStartScope {\n repo?: RepoRef;\n executionRepoId?: number;\n sourceFiles?: Set<string>;\n symbolIds?: Set<number>;\n selectorMatched: boolean;\n startOperationId?: string;\n startDiagnostics?: Array<Record<string, unknown>>;\n}\n\nfunction normalizeOperation(value: string | undefined): string | undefined {\n if (!value) return undefined;\n return value.startsWith('/') ? value.slice(1) : value;\n}\n\nfunction operationRows(\n db: Db,\n repoId: number | undefined,\n start: TraceStart,\n workspaceId: number | undefined,\n requested: string,\n): OperationRow[] {\n return db.prepare(`SELECT o.id operationId,o.operation_name operationName,\n o.operation_path operationPath,o.source_file sourceFile,\n o.source_line sourceLine,s.service_path servicePath,\n r.id repoId,r.name repoName\n FROM cds_operations o\n JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id\n WHERE (? IS NULL OR r.workspace_id=?) AND (? IS NULL OR r.id=?)\n AND (? IS NULL OR s.service_path=?)\n AND (o.operation_name=? OR o.operation_path=? OR o.operation_path=?)\n ORDER BY r.name,s.service_path,o.operation_name,o.id`).all(\n workspaceId, workspaceId, repoId, repoId,\n start.servicePath, start.servicePath, requested, requested,\n requested.startsWith('/') ? requested : `/${requested}`,\n ) as OperationRow[];\n}\n\nfunction operationAmbiguity(\n requested: string,\n start: TraceStart,\n rows: OperationRow[],\n): Record<string, unknown> | undefined {\n const repoCount = new Set(rows.map((row) => String(row.repoName))).size;\n const services = rows.map((row) =>\n `${String(row.repoName)}:${String(row.servicePath)}`);\n if (!start.repo && repoCount > 1)\n return ambiguousStartDiagnostic(requested, rows,\n 'Operation trace start matched multiple repositories; add --repo to disambiguate');\n if (!start.servicePath && new Set(services).size > 1)\n return ambiguousStartDiagnostic(requested, rows,\n 'Operation trace start matched multiple services; add --service to disambiguate');\n return rows.length !== 1\n ? ambiguousStartDiagnostic(requested, rows,\n 'Operation trace start matched multiple indexed operations')\n : undefined;\n}\n\nfunction resolvedOperationStart(\n db: Db,\n operationId: string,\n hintOptions: ImplementationHintOptions,\n): OperationStartScope {\n const implementation = implementationScope(db, operationId);\n if (implementation.edge?.status === 'resolved'\n && implementation.files.size > 0) return {\n files: implementation.files,\n symbols: implementation.symbolId\n ? new Set([implementation.symbolId]) : undefined,\n repoId: implementation.repoId,\n operationId,\n diagnostics: [],\n };\n return hintedOrUnresolvedStart(\n db, operationId, implementation, hintOptions,\n );\n}\n\nfunction hintedOrUnresolvedStart(\n db: Db,\n operationId: string,\n implementation: ReturnType<typeof implementationScope>,\n hintOptions: ImplementationHintOptions,\n): OperationStartScope {\n const hinted = hintedImplementationSelection(\n db, implementation.edge, operationId, hintOptions,\n );\n if (hinted.methodId) {\n const scope = handlerScope(db, hinted.methodId);\n if (scope?.files.size) return {\n files: scope.files,\n symbols: scope.symbolId ? new Set([scope.symbolId]) : undefined,\n repoId: scope.repoId,\n operationId,\n diagnostics: [],\n };\n }\n return unresolvedOperationStart(operationId, implementation.edge, hinted);\n}\n\nfunction unresolvedOperationStart(\n operationId: string,\n edge: ReturnType<typeof implementationScope>['edge'],\n hinted: ReturnType<typeof hintedImplementationSelection>,\n): OperationStartScope {\n if (!edge) return {\n operationId,\n diagnostics: [{\n severity: 'warning',\n code: 'trace_start_implementation_unresolved',\n message: 'Indexed operation matched but no implementation candidate exists',\n resolutionStage: 'implementation',\n resolutionStatus: 'operation_without_implementation',\n }],\n };\n const evidence = parseTraceEvidence(edge.evidence_json);\n const hintDiagnostic = implementationHintDiagnostic(hinted, evidence);\n const diagnostic = implementationStartDiagnostic(edge, evidence);\n return {\n operationId,\n diagnostics: hintDiagnostic ? [hintDiagnostic, diagnostic] : [diagnostic],\n };\n}\n\nfunction operationStartScope(\n db: Db,\n repoId: number | undefined,\n start: TraceStart,\n hintOptions: ImplementationHintOptions,\n workspaceId: number | undefined,\n): OperationStartScope | undefined {\n const requested = normalizeOperation(start.operationPath ?? start.operation);\n if (!requested) return undefined;\n const rows = operationRows(db, repoId, start, workspaceId, requested);\n if (rows.length === 0) return undefined;\n const diagnostic = operationAmbiguity(requested, start, rows);\n if (diagnostic) return { diagnostics: [diagnostic] };\n return resolvedOperationStart(db, String(rows[0]?.operationId), hintOptions);\n}\n\nfunction matchingRepos(\n db: Db,\n start: TraceStart,\n workspaceId: number | undefined,\n): RepoRef[] {\n if (!start.repo) return [];\n const rows = db.prepare(`SELECT id,name,package_name packageName,\n workspace_id workspaceId\n FROM repositories\n WHERE (? IS NULL OR workspace_id=?)\n AND (name=? OR package_name=?)\n ORDER BY name COLLATE BINARY,absolute_path COLLATE BINARY,id`).all(\n workspaceId, workspaceId, start.repo, start.repo,\n );\n return rows.flatMap((row) =>\n typeof row.id === 'number' && typeof row.name === 'string'\n && typeof row.workspaceId === 'number'\n ? [{\n id: row.id,\n name: row.name,\n packageName: typeof row.packageName === 'string'\n ? row.packageName : undefined,\n workspaceId: row.workspaceId,\n }]\n : []);\n}\n\nfunction repoSelectionDiagnostic(\n start: TraceStart,\n repos: RepoRef[],\n): TraceStartScope | undefined {\n if (start.repo && repos.length === 0) return {\n selectorMatched: false,\n startDiagnostics: [selectorRepoNotFoundDiagnostic(start.repo)],\n };\n if (start.repo && repos.length > 1) return {\n selectorMatched: false,\n startDiagnostics: [selectorRepoAmbiguousDiagnostic(start.repo, repos)],\n };\n return undefined;\n}\n\nfunction terminalOperationScope(\n scope: OperationStartScope | undefined,\n): boolean {\n return Boolean(scope && !scope.files && (scope.diagnostics ?? []).some(\n (diagnostic) => diagnostic.resolutionStage === 'operation'\n || diagnostic.resolutionStage === 'implementation',\n ));\n}\n\nfunction hasTraceSelector(start: TraceStart): boolean {\n return Boolean(\n start.handler ?? start.operation ?? start.operationPath ?? start.servicePath,\n );\n}\n\nfunction serviceOnlyStart(start: TraceStart): boolean {\n return Boolean(start.servicePath)\n && !start.operation && !start.operationPath && !start.handler;\n}\n\nfunction selectedExecutionRepoId(\n source: ReturnType<typeof sourceScopeForSelector>,\n repo: RepoRef | undefined,\n): number | undefined {\n return source?.repoId ?? repo?.id;\n}\n\nfunction startDiagnostics(\n operation: OperationStartScope | undefined,\n source: ReturnType<typeof sourceScopeForSelector>,\n): Array<Record<string, unknown>> | undefined {\n const operationDiagnostics = operation?.diagnostics;\n return operationDiagnostics && operationDiagnostics.length > 0\n ? operationDiagnostics : source?.diagnostics;\n}\n\nfunction startSelectorMatched(\n start: TraceStart,\n operation: OperationStartScope | undefined,\n source: ReturnType<typeof sourceScopeForSelector>,\n): boolean {\n if (terminalOperationScope(operation)) return false;\n if (source?.diagnostics?.length && !source.files) return false;\n if (!hasTraceSelector(start)) return true;\n return source?.files !== undefined;\n}\n\nfunction selectedStartScope(\n start: TraceStart,\n repo: RepoRef | undefined,\n operation: OperationStartScope | undefined,\n source: ReturnType<typeof sourceScopeForSelector>,\n): TraceStartScope {\n const sourceFiles = source?.files;\n if (serviceOnlyStart(start)) return { repo, selectorMatched: false };\n return {\n repo,\n executionRepoId: selectedExecutionRepoId(source, repo),\n sourceFiles,\n symbolIds: source?.symbols,\n selectorMatched: startSelectorMatched(start, operation, source),\n startOperationId: operation?.operationId,\n startDiagnostics: startDiagnostics(operation, source),\n };\n}\n\nfunction deferredStartScope(\n db: Db,\n workspaceId: number | undefined,\n repo: RepoRef | undefined,\n): TraceStartScope | undefined {\n if (!shouldDeferTraceStartSelection(db, workspaceId, repo?.id))\n return undefined;\n return {\n repo,\n executionRepoId: repo?.id,\n selectorMatched: true,\n };\n}\n\nfunction selectorSourceScope(\n db: Db,\n start: TraceStart,\n repo: RepoRef | undefined,\n operation: OperationStartScope | undefined,\n workspaceId: number | undefined,\n): ReturnType<typeof sourceScopeForSelector> {\n if (operation?.files || terminalOperationScope(operation)) return operation;\n return sourceScopeForSelector(db, repo?.id, start, workspaceId);\n}\n\nexport function resolveTraceStartScope(\n db: Db,\n start: TraceStart,\n hintOptions: ImplementationHintOptions,\n workspaceId: number | undefined,\n): TraceStartScope {\n const repos = matchingRepos(db, start, workspaceId);\n const exactRepo = repos.length === 1 ? repos[0] : undefined;\n const deferred = deferredStartScope(db, workspaceId, exactRepo);\n if (deferred) return deferred;\n const repoDiagnostic = repoSelectionDiagnostic(start, repos);\n if (repoDiagnostic) return repoDiagnostic;\n const repo = repos[0];\n const operation = operationStartScope(\n db, repo?.id, start, hintOptions, workspaceId,\n );\n const source = selectorSourceScope(\n db, start, repo, operation, workspaceId,\n );\n return selectedStartScope(start, repo, operation, source);\n}\n","import type { TraceEdge } from '../types.js';\n\ninterface DynamicBranchCall {\n repoName: string;\n source_file: string;\n source_line: number;\n}\n\nexport interface DynamicCandidateBranch {\n edge: TraceEdge;\n operationId?: number;\n repositoryId?: number;\n servicePath?: string;\n operationPath?: string;\n}\n\nexport function dynamicCandidateBranches(\n depth: number,\n call: DynamicBranchCall,\n evidence: Record<string, unknown>,\n): DynamicCandidateBranch[] {\n const exploration = objectRecord(evidence.dynamicTargetExploration);\n return recordArray(evidence.dynamicTargetCandidateSuggestions).map((candidate) => ({\n edge: {\n step: depth,\n type: 'dynamic_candidate_branch',\n from: `${call.repoName}:${call.source_file}:${call.source_line}`,\n to: `${String(candidate.servicePath ?? '')}${String(candidate.operationPath ?? '')}`,\n evidence: {\n ...candidate,\n exploratory: true,\n dynamicMode: String(exploration.mode ?? 'candidates'),\n selected: false,\n omittedCandidateCount: numericValue(exploration.omittedCandidateCount),\n },\n confidence: numericValue(candidate.score),\n unresolvedReason: 'Exploratory dynamic target candidate; provide runtime variables to select it',\n },\n operationId: optionalNumber(candidate.candidateOperationId),\n repositoryId: optionalNumber(candidate.repoId),\n servicePath: optionalString(candidate.servicePath),\n operationPath: optionalString(candidate.operationPath),\n }));\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n\nfunction recordArray(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value)\n ? value.filter((item): item is Record<string, unknown> =>\n Boolean(item && typeof item === 'object' && !Array.isArray(item)))\n : [];\n}\n\nfunction numericValue(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport {\n type TraversalScopeScheduler,\n type TraversalScopeState,\n} from './010-traversal-scope.js';\n\nexport type EventSubscriberTransitionStatus =\n | 'resolved'\n | 'ambiguous'\n | 'unresolved';\n\nexport interface EventSubscriberSymbolTarget {\n symbolId: number;\n kind: string;\n qualifiedName: string;\n repoId: number;\n repoName: string;\n packageName?: string;\n sourceFile: string;\n sourceLine: number;\n endLine: number;\n startOffset?: number;\n endOffset?: number;\n}\n\nexport interface EventSubscriberTransition {\n graphEdgeId: number;\n graphGeneration: number;\n eventName: string;\n status: EventSubscriberTransitionStatus;\n targetKind: 'symbol' | 'symbol_reference' | 'subscription_handler';\n targetId: string;\n confidence: number;\n unresolvedReason?: string;\n reasonCode?: string;\n subscribeCallId?: number;\n symbolCallId?: number;\n roleSiteMatchCount: number;\n callRole?: string;\n factOrigin?: string;\n associationBasis?: string;\n dispatchScope?: string;\n subscriptionRepoId?: number;\n subscriptionRepoName?: string;\n sourceFile?: string;\n sourceLine?: number;\n callSiteStartOffset?: number;\n callSiteEndOffset?: number;\n wrapperFunction?: string;\n resolutionStrategy?: string;\n associationStatus?: string;\n symbolCallResolutionStatus?: string;\n candidateCount: number;\n symbolCallUnresolvedReason?: string;\n omittedSymbolCallUnresolvedReasonCharacterCount?: number;\n handler?: EventSubscriberSymbolTarget;\n}\n\nexport interface EventSubscriberTransitionQuery {\n workspaceId: number;\n graphGeneration: number;\n eventName: string;\n}\n\nexport type EventBodyExpansion =\n | 'scheduled'\n | 'already_scheduled'\n | 'already_expanded'\n | 'cycle_blocked'\n | 'depth_limited'\n | 'not_resolved';\n\nexport interface PlannedEventSubscriberTransition {\n transition: EventSubscriberTransition;\n node: Record<string, unknown>;\n evidence: Record<string, unknown>;\n bodyExpansion: EventBodyExpansion;\n state?: TraversalScopeState;\n}\n\nexport function planEventSubscriberTransitions(\n db: Db,\n query: EventSubscriberTransitionQuery,\n scheduler: TraversalScopeScheduler,\n parent: TraversalScopeState,\n depth: number,\n maxDepth: number,\n): PlannedEventSubscriberTransition[] {\n return loadEventSubscriberTransitions(db, query).map((transition) => {\n const handler = transition.handler;\n if (!handler) return plannedTransition(transition, 'not_resolved');\n if (depth >= maxDepth)\n return plannedTransition(transition, 'depth_limited');\n const state = scheduler.schedule({\n workspaceId: query.workspaceId,\n repoId: handler.repoId,\n files: new Set([handler.sourceFile]),\n symbolIds: new Set([handler.symbolId]),\n context: new Map(),\n }, parent);\n const bodyExpansion: EventBodyExpansion = state.kind === 'scheduled'\n ? 'scheduled'\n : state.kind === 'cycle' ? 'cycle_blocked'\n : state.alreadyExpanded ? 'already_expanded' : 'already_scheduled';\n return plannedTransition(transition, bodyExpansion, state.state);\n });\n}\n\nfunction plannedTransition(\n transition: EventSubscriberTransition,\n bodyExpansion: EventBodyExpansion,\n state?: TraversalScopeState,\n): PlannedEventSubscriberTransition {\n return {\n transition,\n node: eventSubscriberNode(transition),\n evidence: eventTransitionEvidence(transition, bodyExpansion),\n bodyExpansion,\n state,\n };\n}\n\nexport function eventSubscriberNode(\n transition: EventSubscriberTransition,\n): Record<string, unknown> {\n const handler = transition.handler;\n if (!handler) return {\n id: `event_subscription:${transition.graphEdgeId}`,\n kind: transition.targetKind,\n label: `${transition.targetKind}:${transition.targetId}`,\n graphEdgeId: transition.graphEdgeId,\n };\n const fileName = handler.sourceFile.split('/').at(-1) ?? handler.sourceFile;\n return {\n id: `symbol:${handler.symbolId}`,\n kind: 'symbol',\n label: `${fileName}:${handler.qualifiedName}`,\n symbolId: handler.symbolId,\n symbolName: handler.qualifiedName,\n qualifiedName: handler.qualifiedName,\n sourceFile: handler.sourceFile,\n startLine: handler.sourceLine,\n endLine: handler.endLine,\n repoName: handler.repoName,\n repoId: handler.repoId,\n };\n}\n\nexport function eventTransitionEvidence(\n transition: EventSubscriberTransition,\n bodyExpansion: EventBodyExpansion,\n): Record<string, unknown> {\n return {\n graphEdgeId: transition.graphEdgeId,\n graphGeneration: transition.graphGeneration,\n subscribeCallId: transition.subscribeCallId,\n symbolCallId: transition.symbolCallId,\n eventName: transition.eventName,\n matchStrategy: 'workspace_exact_event_name',\n dispatchCertainty: 'static_name_only',\n associationBasis: transition.associationBasis,\n dispatchScope: transition.dispatchScope,\n roleSiteMatchCount: transition.roleSiteMatchCount,\n callRole: transition.callRole,\n factOrigin: transition.factOrigin,\n repositoryId: transition.subscriptionRepoId,\n repositoryName: transition.subscriptionRepoName,\n sourceFile: transition.sourceFile,\n sourceLine: transition.sourceLine,\n callSiteStartOffset: transition.callSiteStartOffset,\n callSiteEndOffset: transition.callSiteEndOffset,\n wrapperFunction: transition.wrapperFunction,\n handlerSymbolId: transition.handler?.symbolId,\n handlerSourceFile: transition.handler?.sourceFile,\n handlerSourceLine: transition.handler?.sourceLine,\n associationStatus: transition.associationStatus ?? transition.status,\n symbolCallResolutionStatus: transition.symbolCallResolutionStatus,\n resolutionStatus: transition.status,\n resolutionStrategy: transition.resolutionStrategy,\n candidateCount: transition.candidateCount,\n symbolCallUnresolvedReason: transition.symbolCallUnresolvedReason,\n omittedSymbolCallUnresolvedReasonCharacterCount:\n transition.omittedSymbolCallUnresolvedReasonCharacterCount,\n reasonCode: transition.reasonCode,\n bodyExpansion,\n cycle: bodyExpansion === 'cycle_blocked' || undefined,\n cycleReason: bodyExpansion === 'cycle_blocked'\n ? 'structural_ancestry_cycle' : undefined,\n };\n}\n\nexport function loadEventSubscriberTransitions(\n db: Db,\n query: EventSubscriberTransitionQuery,\n): EventSubscriberTransition[] {\n const rows = db.prepare(`SELECT ge.id graphEdgeId,ge.generation graphGeneration,\n ge.from_id eventName,ge.status,ge.to_kind targetKind,ge.to_id targetId,\n ge.confidence,ge.unresolved_reason unresolvedReason,ge.evidence_json evidenceJson,\n subscribe.id subscribeCallId,subscribe.repo_id subscriptionRepoId,\n subscribe.source_file sourceFile,subscribe.source_line sourceLine,\n subscribe.call_site_start_offset callSiteStartOffset,\n subscribe.call_site_end_offset callSiteEndOffset,\n subscription_repo.name subscriptionRepoName,\n handler.id handlerSymbolId,handler.kind handlerKind,\n handler.qualified_name handlerQualifiedName,handler.source_file handlerSourceFile,\n handler.start_line handlerSourceLine,handler.end_line handlerEndLine,\n handler.start_offset handlerStartOffset,handler.end_offset handlerEndOffset,\n handler_repo.id handlerRepoId,handler_repo.name handlerRepoName,\n handler_repo.package_name handlerPackageName\n FROM graph_edges ge\n LEFT JOIN outbound_calls subscribe\n ON subscribe.id=CAST(json_extract(ge.evidence_json,'$.subscribeCallId') AS INTEGER)\n LEFT JOIN repositories subscription_repo\n ON subscription_repo.id=subscribe.repo_id\n AND subscription_repo.workspace_id=ge.workspace_id\n LEFT JOIN symbols handler\n ON ge.to_kind='symbol' AND handler.id=CAST(ge.to_id AS INTEGER)\n LEFT JOIN repositories handler_repo\n ON handler_repo.id=handler.repo_id AND handler_repo.workspace_id=ge.workspace_id\n WHERE ge.workspace_id=? AND ge.generation=?\n AND ge.edge_type='EVENT_SUBSCRIPTION_HANDLED_BY' AND ge.from_kind='event'\n AND ge.from_id COLLATE BINARY=? COLLATE BINARY\n ORDER BY COALESCE(subscription_repo.name,'') COLLATE BINARY,\n COALESCE(subscription_repo.id,0),COALESCE(subscribe.source_file,'') COLLATE BINARY,\n subscribe.call_site_start_offset,subscribe.call_site_end_offset,ge.id`).all(\n query.workspaceId, query.graphGeneration, query.eventName,\n );\n return rows.flatMap((row) => {\n const transition = transitionFromRow(row);\n return transition ? [transition] : [];\n });\n}\n\nfunction transitionFromRow(\n row: Record<string, unknown>,\n): EventSubscriberTransition | undefined {\n const graphEdgeId = numberValue(row.graphEdgeId);\n const graphGeneration = numberValue(row.graphGeneration);\n const eventName = stringValue(row.eventName);\n const targetId = stringValue(row.targetId);\n if (graphEdgeId === undefined || graphGeneration === undefined\n || eventName === undefined || targetId === undefined) return undefined;\n const evidence = parseEvidence(row.evidenceJson);\n const handler = symbolTarget(row);\n const status = transitionStatus(stringValue(row.status), handler);\n const reasonCode = status === 'resolved'\n ? undefined\n : stringValue(evidence.reasonCode) ?? missingTargetReason(row, handler);\n return {\n graphEdgeId, graphGeneration, eventName, status,\n targetKind: targetKind(row.targetKind), targetId,\n confidence: numberValue(row.confidence) ?? 0,\n unresolvedReason: status === 'resolved'\n ? undefined : stringValue(row.unresolvedReason) ?? reasonCode,\n reasonCode,\n ...associationEvidence(row, evidence),\n handler,\n };\n}\n\nfunction associationEvidence(\n row: Record<string, unknown>,\n evidence: Record<string, unknown>,\n): Omit<EventSubscriberTransition,\n 'graphEdgeId' | 'graphGeneration' | 'eventName' | 'status' | 'targetKind'\n | 'targetId' | 'confidence' | 'unresolvedReason' | 'reasonCode' | 'handler'> {\n const symbolCallUnresolvedReason = stringValue(\n evidence.symbolCallUnresolvedReason,\n );\n return {\n subscribeCallId: numberValue(row.subscribeCallId),\n symbolCallId: numberValue(evidence.symbolCallId),\n roleSiteMatchCount: nonNegativeCount(evidence.roleSiteMatchCount),\n callRole: stringValue(evidence.callRole),\n factOrigin: stringValue(evidence.factOrigin),\n associationBasis: stringValue(evidence.associationBasis),\n dispatchScope: stringValue(evidence.dispatchScope),\n subscriptionRepoId: numberValue(row.subscriptionRepoId),\n subscriptionRepoName: stringValue(row.subscriptionRepoName),\n sourceFile: stringValue(row.sourceFile),\n sourceLine: numberValue(row.sourceLine),\n callSiteStartOffset: numberValue(row.callSiteStartOffset),\n callSiteEndOffset: numberValue(row.callSiteEndOffset),\n wrapperFunction: stringValue(evidence.wrapperFunction),\n resolutionStrategy: stringValue(evidence.resolutionStrategy),\n associationStatus: stringValue(evidence.associationStatus),\n symbolCallResolutionStatus: stringValue(evidence.symbolCallResolutionStatus),\n candidateCount: nonNegativeCount(evidence.candidateCount),\n symbolCallUnresolvedReason,\n omittedSymbolCallUnresolvedReasonCharacterCount: symbolCallUnresolvedReason\n ? nonNegativeCount(evidence.omittedSymbolCallUnresolvedReasonCharacterCount)\n : undefined,\n };\n}\n\nfunction symbolTarget(\n row: Record<string, unknown>,\n): EventSubscriberSymbolTarget | undefined {\n const symbolId = numberValue(row.handlerSymbolId);\n const repoId = numberValue(row.handlerRepoId);\n const repoName = stringValue(row.handlerRepoName);\n const sourceFile = stringValue(row.handlerSourceFile);\n const sourceLine = numberValue(row.handlerSourceLine);\n const endLine = numberValue(row.handlerEndLine);\n const kind = stringValue(row.handlerKind);\n const qualifiedName = stringValue(row.handlerQualifiedName);\n if (symbolId === undefined || repoId === undefined || !repoName || !sourceFile\n || sourceLine === undefined || endLine === undefined || !kind || !qualifiedName)\n return undefined;\n return {\n symbolId, repoId, repoName, sourceFile, sourceLine, endLine, kind, qualifiedName,\n packageName: stringValue(row.handlerPackageName),\n startOffset: numberValue(row.handlerStartOffset),\n endOffset: numberValue(row.handlerEndOffset),\n };\n}\n\nfunction transitionStatus(\n value: string | undefined,\n handler: EventSubscriberSymbolTarget | undefined,\n): EventSubscriberTransitionStatus {\n if (value === 'resolved' && handler) return 'resolved';\n return value === 'ambiguous' ? 'ambiguous' : 'unresolved';\n}\n\nfunction missingTargetReason(\n row: Record<string, unknown>,\n handler: EventSubscriberSymbolTarget | undefined,\n): string | undefined {\n return stringValue(row.status) === 'resolved' && !handler\n ? 'subscription_handler_target_missing'\n : undefined;\n}\n\nfunction targetKind(\n value: unknown,\n): EventSubscriberTransition['targetKind'] {\n return value === 'symbol' || value === 'symbol_reference'\n || value === 'subscription_handler' ? value : 'subscription_handler';\n}\n\nfunction parseEvidence(value: unknown): Record<string, unknown> {\n try {\n const parsed: unknown = JSON.parse(String(value ?? '{}'));\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nfunction nonNegativeCount(value: unknown): number {\n const count = numberValue(value);\n return count === undefined ? 0 : Math.max(0, Math.floor(count));\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n","import type { Db } from '../db/connection.js';\n\nexport interface TraceGraphEdgeRow extends Record<string, unknown> {\n id: number;\n edge_type: string;\n from_id: string;\n to_kind: string;\n to_id: string;\n confidence: number;\n evidence_json: string;\n unresolved_reason?: string;\n status?: string;\n}\n\nexport function graphForCalls(\n db: Db,\n callIds: number[],\n): Map<number, TraceGraphEdgeRow[]> {\n const map = new Map<number, TraceGraphEdgeRow[]>();\n if (callIds.length === 0) return map;\n const rows = db.prepare(`SELECT * FROM graph_edges\n WHERE from_kind='call'\n AND from_id IN (${callIds.map(() => '?').join(',')})\n ORDER BY id`).all(\n ...callIds.map(String),\n ) as TraceGraphEdgeRow[];\n for (const row of rows) {\n const id = Number(row.from_id);\n map.set(id, [...(map.get(id) ?? []), row]);\n }\n return map;\n}\n\nexport function symbolNode(\n db: Db,\n symbolId: number,\n): Record<string, unknown> | undefined {\n const row = db.prepare(`SELECT s.id symbolId,s.name symbolName,\n s.qualified_name qualifiedName,s.source_file sourceFile,\n s.start_line startLine,s.end_line endLine,r.name repoName,r.id repoId\n FROM symbols s JOIN repositories r ON r.id=s.repo_id\n WHERE s.id=?`).get(symbolId) as Record<string, unknown> | undefined;\n if (!row) return undefined;\n const sourceFile = String(row.sourceFile ?? '');\n const fileName = sourceFile.split('/').at(-1) ?? sourceFile;\n return {\n id: `symbol:${symbolId}`,\n kind: 'symbol',\n label: `${fileName}:${String(row.qualifiedName ?? row.symbolName)}`,\n ...row,\n };\n}\n\nexport function operationNode(\n db: Db,\n operationId: string,\n): Record<string, unknown> | undefined {\n const row = db.prepare(`SELECT o.id operationId,o.operation_name operationName,\n o.operation_type operationType,o.operation_path operationPath,\n o.source_file sourceFile,o.source_line sourceLine,s.id serviceId,\n s.service_name serviceName,s.qualified_name qualifiedName,\n s.service_path servicePath,r.id repoId,r.name repoName\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id WHERE o.id=?`).get(\n operationId,\n ) as Record<string, unknown> | undefined;\n if (!row) return undefined;\n return {\n id: `operation:${operationId}`,\n kind: 'operation',\n label: `${String(row.repoName)}:${String(row.servicePath)}${String(row.operationPath)}`,\n ...row,\n };\n}\n","import type { TraceEdge } from '../types.js';\nimport type { CompactSemanticEndpoint, CompactStatus } from './014-compact-contract.js';\nimport {\n compactDecisionFromEvidence,\n compactEventStatus,\n compactGraphStatus,\n compactRefs,\n compactResolutionStatus,\n compactSite,\n semanticCallSource,\n semanticGraphTarget,\n semanticHandler,\n semanticOperation,\n semanticScopeTarget,\n semanticSymbol,\n type SemanticCallRow,\n type SemanticTargetRow,\n type TraceEdgeRecorder,\n} from './015-trace-edge-recorder.js';\nimport type { PlannedEventSubscriberTransition } from './011-event-subscriber-traversal.js';\nimport type { DynamicCandidateBranch } from './dynamic-branches.js';\n\ninterface ImplementationObservation {\n operationId: unknown;\n handlerMethodId?: unknown;\n handlerSymbolId?: unknown;\n graphEdgeId?: unknown;\n persistedStatus?: string;\n persistedTargetKind?: string;\n persistedTargetId?: string;\n effectiveStatus: string;\n strategy: string;\n guided?: boolean;\n contextual?: boolean;\n unresolvedReason?: string;\n evidence: Record<string, unknown>;\n site: Record<string, unknown>;\n}\n\ninterface LocalCallObservation {\n symbolCall: Record<string, unknown>;\n evidence: Record<string, unknown>;\n unresolvedReason?: string;\n}\n\ninterface ScopeObservation {\n workspaceId?: number;\n repositoryId?: number;\n sourceFiles?: ReadonlySet<string>;\n symbolIds?: ReadonlySet<number>;\n structuralKey: string;\n}\n\ninterface OutboundObservation {\n call: SemanticCallRow;\n row: SemanticTargetRow;\n evidence: Record<string, unknown>;\n workspaceId: number;\n dynamicMode?: string;\n unresolvedReason?: string;\n}\n\nexport function recordImplementationObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n input: ImplementationObservation,\n): void {\n const target = semanticHandler(input.handlerMethodId, input.handlerSymbolId,\n () => recorder.unavailable('target', 'selected_handler'));\n recorder.record(edge, {\n source: semanticOperation(input.operationId,\n () => recorder.unavailable('source', 'operation')),\n target,\n status: compactResolutionStatus(input.effectiveStatus, input.unresolvedReason),\n decision: compactDecisionFromEvidence(input.evidence, {\n effectiveResolutionStatus: input.unresolvedReason\n ? 'unresolved' : input.effectiveStatus,\n effectiveTarget: decisionTarget(target),\n persistedResolutionStatus: input.persistedStatus,\n persistedTarget: input.persistedTargetKind && input.persistedTargetId\n ? { kind: input.persistedTargetKind, id: input.persistedTargetId }\n : undefined,\n implementationStrategy: input.strategy,\n implementationGuided: input.guided,\n implementationContextual: input.contextual,\n reasonCode: input.unresolvedReason\n ? 'selected_handler_unavailable' : undefined,\n }),\n refs: compactRefs({ graphEdgeId: input.graphEdgeId,\n operationId: input.operationId,\n handlerMethodId: input.handlerMethodId,\n symbolId: input.handlerSymbolId }),\n site: compactSite(input.site),\n });\n}\n\nexport function recordLocalCallObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n input: LocalCallObservation,\n): CompactSemanticEndpoint {\n const source = semanticSymbol(input.symbolCall.caller_symbol_id,\n () => recorder.unavailable('source', 'caller_symbol'));\n const target = semanticSymbol(input.symbolCall.callee_symbol_id,\n () => recorder.unavailable('target', 'callee_symbol'));\n recorder.record(edge, {\n source, target,\n status: compactResolutionStatus(\n input.symbolCall.status, input.unresolvedReason,\n ),\n decision: compactDecisionFromEvidence(input.evidence, {\n effectiveResolutionStatus: String(input.symbolCall.status),\n reasonCode: input.unresolvedReason ? 'symbol_call_unresolved' : undefined,\n }),\n refs: { symbolCallIds: idArray(input.symbolCall.id),\n symbolIds: idArray(input.symbolCall.caller_symbol_id,\n input.symbolCall.callee_symbol_id) },\n site: compactSite(input.symbolCall),\n });\n return target;\n}\n\nexport function recordCycleObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n source: CompactSemanticEndpoint,\n scope: ScopeObservation,\n refs: Record<string, unknown>,\n site: Record<string, unknown>,\n): void {\n recorder.record(edge, {\n source,\n target: scope.workspaceId === undefined\n ? recorder.unavailable('target', 'cycle_scope')\n : semanticScopeTarget(scope.workspaceId, scope.repositoryId,\n scope.sourceFiles, scope.symbolIds, scope.structuralKey),\n status: 'cycle',\n decision: compactDecisionFromEvidence(edge.evidence, {\n reasonCode: 'structural_ancestry_cycle',\n }),\n refs: compactRefs(refs),\n site: compactSite(site),\n });\n}\n\nexport function recordOutboundObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n input: OutboundObservation,\n): { source: CompactSemanticEndpoint; target: CompactSemanticEndpoint } {\n const source = semanticCallSource(input.call, input.workspaceId);\n const target = semanticGraphTarget(\n input.row, input.call, input.workspaceId,\n () => recorder.unavailable('target', input.row.to_kind),\n );\n recorder.record(edge, {\n source, target,\n status: compactGraphStatus(input.row, input.evidence,\n input.unresolvedReason, input.dynamicMode),\n decision: compactDecisionFromEvidence(input.evidence, {\n reasonCode: input.unresolvedReason\n ? safeReasonCode(input.evidence.reasonCode, 'outbound_target_unresolved')\n : undefined,\n }),\n refs: compactRefs({\n graphEdgeId: positiveId(input.evidence.persistedGraphEdgeId),\n outboundCallId: input.call.id,\n operationId: input.row.to_kind === 'operation' ? input.row.to_id : undefined,\n symbolId: input.call.source_symbol_id,\n }),\n site: compactSite(input.call),\n });\n return { source, target };\n}\n\nexport function recordEventBridgeObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n plan: PlannedEventSubscriberTransition,\n workspaceId: number,\n subscriptionCount: number,\n): CompactSemanticEndpoint {\n const handler = plan.transition.handler;\n const target: CompactSemanticEndpoint = handler\n ? { kind: 'symbol', symbolId: handler.symbolId }\n : { kind: 'target', workspaceId,\n repositoryId: plan.transition.subscriptionRepoId,\n targetKind: plan.transition.targetKind,\n targetId: plan.transition.targetId };\n recorder.record(edge, {\n source: { kind: 'event', workspaceId,\n eventName: plan.transition.eventName },\n target,\n status: compactEventStatus(plan.transition.status, plan.bodyExpansion),\n decision: compactDecisionFromEvidence(plan.evidence, {\n eventSubscriptionCount: subscriptionCount,\n reasonCode: plan.transition.reasonCode,\n }),\n refs: eventReferences(plan),\n site: eventSite(plan),\n });\n return target;\n}\n\nexport function recordEventCycleObservation(\n recorder: TraceEdgeRecorder,\n edge: TraceEdge,\n plan: PlannedEventSubscriberTransition,\n source: CompactSemanticEndpoint,\n workspaceId: number,\n): void {\n const handler = plan.transition.handler;\n if (!plan.state) return;\n recorder.record(edge, {\n source,\n target: semanticScopeTarget(workspaceId, handler?.repoId,\n handler ? new Set([handler.sourceFile]) : undefined,\n handler ? new Set([handler.symbolId]) : undefined,\n plan.state.structuralKey),\n status: 'cycle',\n decision: compactDecisionFromEvidence(edge.evidence, {\n reasonCode: 'structural_ancestry_cycle',\n dispatchCertainty: 'static_name_only',\n }),\n refs: eventReferences(plan),\n site: eventSite(plan),\n });\n}\n\nexport function recordDynamicBranchObservation(\n recorder: TraceEdgeRecorder,\n branch: DynamicCandidateBranch,\n call: SemanticCallRow,\n source: CompactSemanticEndpoint,\n evidence: Record<string, unknown>,\n workspaceId: number,\n): void {\n const target = dynamicBranchTarget(recorder, branch, workspaceId);\n recorder.record(branch.edge, {\n source, target, status: 'dynamic',\n decision: compactDecisionFromEvidence(evidence, {\n dynamicMode: 'candidates',\n effectiveTarget: branch.operationId === undefined\n ? undefined : { kind: 'operation', id: String(branch.operationId) },\n remediationCode: 'provide_runtime_variables',\n }),\n refs: compactRefs({ graphEdgeId: positiveId(evidence.persistedGraphEdgeId),\n outboundCallId: call.id, operationId: branch.operationId,\n symbolId: call.source_symbol_id }),\n site: compactSite(call),\n });\n}\n\nfunction dynamicBranchTarget(\n recorder: TraceEdgeRecorder,\n branch: DynamicCandidateBranch,\n workspaceId: number,\n): CompactSemanticEndpoint {\n if (branch.operationId !== undefined)\n return { kind: 'operation', operationId: branch.operationId };\n if (branch.servicePath && branch.operationPath) return {\n kind: 'target', workspaceId,\n repositoryId: branch.repositoryId,\n targetKind: 'dynamic_operation_candidate',\n targetId: JSON.stringify([branch.servicePath, branch.operationPath]),\n };\n return recorder.unavailable('target', 'dynamic_operation_candidate');\n}\n\nexport function graphObservationStatus(\n row: SemanticTargetRow,\n evidence: Record<string, unknown>,\n unresolvedReason: string | undefined,\n dynamicMode: string | undefined,\n): CompactStatus {\n return compactGraphStatus(row, evidence, unresolvedReason, dynamicMode);\n}\n\nfunction eventReferences(\n plan: PlannedEventSubscriberTransition,\n): ReturnType<typeof compactRefs> {\n return compactRefs({ graphEdgeId: plan.transition.graphEdgeId,\n subscribeCallId: plan.transition.subscribeCallId,\n symbolCallId: plan.transition.symbolCallId,\n symbolId: plan.transition.handler?.symbolId });\n}\n\nfunction eventSite(\n plan: PlannedEventSubscriberTransition,\n): ReturnType<typeof compactSite> {\n return compactSite({ repository: plan.transition.subscriptionRepoName,\n sourceFile: plan.transition.sourceFile,\n sourceLine: plan.transition.sourceLine,\n startOffset: plan.transition.callSiteStartOffset,\n endOffset: plan.transition.callSiteEndOffset });\n}\n\nfunction safeReasonCode(value: unknown, fallback: string): string {\n return typeof value === 'string' && /^[a-z][a-z0-9_.-]{0,79}$/.test(value)\n ? value : fallback;\n}\n\nfunction positiveId(value: unknown): number | string | undefined {\n if (typeof value === 'number') return Number.isFinite(value) && value > 0\n ? value : undefined;\n if (typeof value !== 'string' || value.length === 0) return undefined;\n const numeric = Number(value);\n if (Number.isSafeInteger(numeric)) return numeric > 0 ? numeric : undefined;\n return value;\n}\n\nfunction idArray(...values: unknown[]): Array<number | string> | undefined {\n const ids = values.flatMap((value) => {\n const id = positiveId(value);\n return id === undefined ? [] : [id];\n });\n return ids.length > 0 ? ids : undefined;\n}\n\nfunction decisionTarget(\n endpoint: CompactSemanticEndpoint,\n): { kind: string; id: string } | undefined {\n if (endpoint.kind === 'symbol')\n return { kind: 'symbol', id: String(endpoint.symbolId) };\n if (endpoint.kind === 'handler_method')\n return { kind: 'handler_method', id: String(endpoint.handlerMethodId) };\n return undefined;\n}\n","import type { Db } from '../db/connection.js';\n\nexport function outboundScopeSymbolIds(\n db: Db,\n symbolIds: ReadonlySet<number> | undefined,\n includeAsync: boolean,\n): ReadonlySet<number> | undefined {\n if (!includeAsync || !symbolIds || symbolIds.size === 0) return symbolIds;\n const ids = [...symbolIds];\n const rows = db.prepare(`SELECT DISTINCT child.id FROM symbols parent\n JOIN symbols child ON child.repo_id=parent.repo_id\n AND child.source_file=parent.source_file\n AND child.kind='event_registration'\n AND parent.start_offset<=child.start_offset\n AND parent.end_offset>=child.end_offset\n WHERE parent.id IN (${ids.map(() => '?').join(',')})\n ORDER BY child.id`).all(...ids);\n return new Set([\n ...ids,\n ...rows.flatMap((row) =>\n typeof row.id === 'number' ? [row.id] : []),\n ]);\n}\n","import type { Db } from '../db/connection.js';\nimport {\n selectedHandlerProvenance,\n type SelectedHandlerProvenance,\n type SelectedHandlerSource,\n} from '../linker/001-implementation-evidence-projection.js';\n\nexport interface HandlerMethodNode extends Record<string, unknown> {\n id: string;\n kind: 'handler_method';\n label: string;\n methodId: number;\n methodName: string;\n className: string;\n sourceFile: string;\n sourceLine: number;\n repoId: number;\n repoName: string;\n packageName?: string;\n}\n\nexport interface SelectedHandlerEvidence {\n handler?: HandlerMethodNode;\n evidence: Record<string, unknown>;\n diagnostic?: Record<string, unknown>;\n unresolvedReason?: string;\n}\n\nexport function handlerMethodNode(\n db: Db,\n methodId: string,\n): HandlerMethodNode | undefined {\n const row = db.prepare(`SELECT hm.id methodId,hm.method_name methodName,\n hm.source_line sourceLine,hc.class_name className,hc.source_file sourceFile,\n r.name repoName,r.id repoId,r.package_name packageName\n FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id WHERE hm.id=?`).get(methodId) as\n | Record<string, unknown>\n | undefined;\n return handlerNodeFromRow(row);\n}\n\nexport function withSelectedHandlerProvenance(\n evidence: Record<string, unknown>,\n targetId: string,\n handler: HandlerMethodNode | undefined,\n): SelectedHandlerEvidence {\n if (!handler) return unavailableHandlerEvidence(evidence, targetId);\n const selected = selectedHandlerProvenance(handlerSource(handler));\n const stored = record(evidence.selectedHandler);\n const mismatchedFields = storedSelectedHandlerMismatches(\n stored, selected, targetId,\n );\n if (mismatchedFields.length === 0)\n return { handler, evidence: { ...evidence, selectedHandler: selected } };\n return {\n handler,\n evidence: {\n ...evidence,\n selectedHandler: selected,\n selectedHandlerProvenanceAudit: {\n status: 'mismatch',\n graphTargetId: targetId,\n mismatchedFields,\n persistedSelectedHandler: stored,\n },\n },\n diagnostic: {\n severity: 'warning',\n code: 'selected_handler_provenance_mismatch',\n message: 'Persisted selected handler provenance did not match the resolved graph target',\n graphTargetId: targetId,\n mismatchedFields,\n sourceFile: handler.sourceFile,\n sourceLine: handler.sourceLine,\n },\n };\n}\n\nfunction unavailableHandlerEvidence(\n evidence: Record<string, unknown>,\n targetId: string,\n): SelectedHandlerEvidence {\n return {\n evidence: {\n ...evidence,\n selectedHandlerProvenanceAudit: {\n status: 'unavailable',\n graphTargetId: targetId,\n reason: 'handler_target_not_indexed',\n },\n },\n diagnostic: {\n severity: 'warning',\n code: 'selected_handler_target_not_found',\n message: 'Resolved implementation target is not an indexed handler method',\n graphTargetId: targetId,\n },\n unresolvedReason: 'Resolved implementation target is not an indexed handler method',\n };\n}\n\nfunction handlerNodeFromRow(\n row: Record<string, unknown> | undefined,\n): HandlerMethodNode | undefined {\n const methodId = numberValue(row?.methodId);\n const methodName = stringValue(row?.methodName);\n const className = stringValue(row?.className);\n const sourceFile = stringValue(row?.sourceFile);\n const sourceLine = numberValue(row?.sourceLine);\n const repoId = numberValue(row?.repoId);\n const repoName = stringValue(row?.repoName);\n if (methodId === undefined || !methodName || !className || !sourceFile\n || sourceLine === undefined || repoId === undefined || !repoName)\n return undefined;\n return {\n id: `handler_method:${methodId}`,\n kind: 'handler_method',\n label: `${repoName}:${className}.${methodName}`,\n methodId,\n methodName,\n className,\n sourceFile,\n sourceLine,\n repoId,\n repoName,\n packageName: stringValue(row?.packageName),\n };\n}\n\nfunction handlerSource(node: HandlerMethodNode): SelectedHandlerSource {\n return {\n methodId: node.methodId,\n methodName: node.methodName,\n className: node.className,\n repositoryId: node.repoId,\n repositoryName: node.repoName,\n repositoryPackageName: node.packageName,\n sourceFile: node.sourceFile,\n sourceLine: node.sourceLine,\n };\n}\n\nfunction storedSelectedHandlerMismatches(\n stored: Record<string, unknown>,\n selected: SelectedHandlerProvenance,\n targetId: string,\n): string[] {\n if (Object.keys(stored).length === 0) return [];\n const expectedRepository = record(stored.repository);\n const selectedRepository = selected.repository ?? {};\n return [\n mismatch('graphTargetId', stored.graphTargetId, targetId),\n mismatch('methodId', stored.methodId, selected.methodId),\n mismatch('className', stored.className, selected.className),\n mismatch('methodName', stored.methodName, selected.methodName),\n mismatch('sourceFile', stored.sourceFile, selected.sourceFile),\n mismatch('sourceLine', stored.sourceLine, selected.sourceLine),\n mismatch('repository.id', expectedRepository.id, selectedRepository.id),\n mismatch('repository.name', expectedRepository.name, selectedRepository.name),\n mismatch('repository.packageName', expectedRepository.packageName,\n selectedRepository.packageName),\n ].flatMap((field) => field ? [field] : []);\n}\n\nfunction mismatch(\n field: string,\n stored: unknown,\n actual: unknown,\n): string | undefined {\n return stored === undefined || stored === actual ? undefined : field;\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n","import type { Db } from '../db/connection.js';\nimport type { TraceEdge } from '../types.js';\nimport { implementationHintDiagnostic } from './implementation-hints.js';\nimport { contextualImplementationSelection } from './005-implementation-selection.js';\nimport type { ContextBinding } from './008-contextual-runtime-state.js';\nimport {\n handlerMethodNode,\n withSelectedHandlerProvenance,\n type SelectedHandlerEvidence,\n} from './009-selected-handler-provenance.js';\nimport type { TraversalScopeState } from './010-traversal-scope.js';\nimport type { TraceGraphEdgeRow } from './012-trace-graph-lookups.js';\nimport {\n enqueueCausalScope,\n type TraceQueueScope,\n} from './013-trace-root-scopes.js';\nimport { parseTraceEvidence } from './017-trace-context.js';\nimport {\n recordCycleObservation,\n recordImplementationObservation,\n} from './019-trace-edge-semantics.js';\nimport {\n handlerFilesForOperation,\n handlerScope,\n implementationScope,\n} from './025-trace-implementation-scope.js';\nimport type {\n CallRow,\n EffectiveOutbound,\n TraceExecutionRuntime,\n} from './027-trace-scope-execution.js';\n\ninterface OperationSelection {\n implementation: ReturnType<typeof implementationScope>;\n contextMethodId?: string;\n selectedHandlerAvailable: boolean;\n}\n\nexport function processOperationTarget(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n): void {\n const selection = selectOperation(runtime, current, effective);\n if (current.depth >= runtime.maxDepth) return;\n scheduleOperation(runtime, current, call, effective, selection);\n}\n\nfunction selectOperation(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n effective: EffectiveOutbound,\n): OperationSelection {\n const implementation = implementationScope(\n runtime.db, effective.row.to_id,\n );\n const context = contextualImplementationSelection(\n runtime.db, implementation.edge, effective.row.to_id,\n current.repoId, effective.evidence, runtime.hintOptions,\n );\n const available = implementation.edge\n ? recordOperationImplementation(runtime, current, effective,\n implementation.edge, context)\n : true;\n return {\n implementation,\n contextMethodId: context.methodId,\n selectedHandlerAvailable: available,\n };\n}\n\nfunction recordOperationImplementation(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n effective: EffectiveOutbound,\n edge: TraceGraphEdgeRow,\n context: ReturnType<typeof contextualImplementationSelection>,\n): boolean {\n const evidence = parseTraceEvidence(edge.evidence_json);\n const hintDiagnostic = implementationHintDiagnostic(context, evidence);\n if (hintDiagnostic) runtime.diagnostics.unshift(hintDiagnostic);\n const methodId = edge.status === 'resolved' ? edge.to_id : context.methodId;\n const selectionEvidence = contextualSelectionEvidence(evidence, context);\n const selected = methodId\n ? withSelectedHandlerProvenance(\n selectionEvidence, methodId, handlerMethodNode(runtime.db, methodId),\n )\n : { evidence: selectionEvidence };\n recordSelectedOperation(\n runtime, current, effective, edge, context, methodId, selected,\n );\n return !selected.unresolvedReason;\n}\n\nfunction recordSelectedOperation(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n effective: EffectiveOutbound,\n edge: TraceGraphEdgeRow,\n context: ReturnType<typeof contextualImplementationSelection>,\n methodId: string | undefined,\n selected: SelectedHandlerEvidence,\n): void {\n retainSelectedHandler(runtime, selected);\n const unresolvedReason = operationUnresolvedReason(edge, context, selected);\n const traceEdge = implementationTraceEdge(\n current.depth, effective.to, edge, selected, unresolvedReason,\n );\n const scope = methodId ? handlerScope(runtime.db, methodId) : undefined;\n recordImplementationObservation(runtime.recorder, traceEdge, {\n operationId: effective.row.to_id,\n handlerMethodId: methodId,\n handlerSymbolId: scope?.symbolId,\n graphEdgeId: edge.id,\n persistedStatus: edge.status,\n persistedTargetKind: edge.to_kind,\n persistedTargetId: edge.to_id,\n effectiveStatus: context.methodId ? 'resolved' : String(edge.status),\n strategy: implementationStrategy(context),\n guided: context.evidence.guided === true,\n contextual: contextualSelection(context),\n unresolvedReason,\n evidence: selected.evidence,\n site: effective.evidence,\n });\n}\n\nfunction retainSelectedHandler(\n runtime: TraceExecutionRuntime,\n selected: SelectedHandlerEvidence,\n): void {\n if (selected.diagnostic) runtime.diagnostics.unshift(selected.diagnostic);\n if (selected.handler)\n runtime.nodes.set(String(selected.handler.id), selected.handler);\n}\n\nfunction operationUnresolvedReason(\n edge: TraceGraphEdgeRow,\n context: ReturnType<typeof contextualImplementationSelection>,\n selected: SelectedHandlerEvidence,\n): string | undefined {\n if (selected.unresolvedReason) return selected.unresolvedReason;\n if (edge.status === 'resolved' || context.methodId) return undefined;\n return String(edge.unresolved_reason ?? edge.status);\n}\n\nfunction contextualSelection(\n context: ReturnType<typeof contextualImplementationSelection>,\n): boolean {\n return Boolean(context.methodId)\n && context.evidence.strategy !== 'implementation_repo_hint';\n}\n\nfunction implementationStrategy(\n context: ReturnType<typeof contextualImplementationSelection>,\n): string {\n return String(context.evidence.strategy\n ?? (context.methodId\n ? 'contextual_implementation_selection' : 'indexed_operation_graph'));\n}\n\nfunction contextualSelectionEvidence(\n evidence: Record<string, unknown>,\n context: ReturnType<typeof contextualImplementationSelection>,\n): Record<string, unknown> {\n return context.methodId ? {\n ...evidence,\n contextualImplementationSelected:\n context.evidence.strategy !== 'implementation_repo_hint',\n contextualImplementation: context.evidence,\n implementationSelection: context.evidence,\n } : {\n ...evidence,\n contextualImplementation: context.evidence,\n implementationSelection: context.evidence,\n };\n}\n\nfunction implementationTraceEdge(\n depth: number,\n from: string,\n edge: TraceGraphEdgeRow,\n selected: SelectedHandlerEvidence,\n unresolvedReason: string | undefined,\n): TraceEdge {\n return {\n step: depth,\n type: 'operation_implemented_by_handler',\n from,\n to: selected.handler?.label\n ? String(selected.handler.label) : `${edge.to_kind}:${edge.to_id}`,\n evidence: selected.evidence,\n confidence: Number(edge.confidence ?? 0),\n unresolvedReason,\n };\n}\n\nfunction scheduleOperation(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n selection: OperationSelection,\n): void {\n const contextScope = operationContextScope(runtime.db, selection);\n const files = operationFiles(runtime.db, effective, selection, contextScope);\n const symbols = operationSymbols(selection, contextScope);\n if (!operationCanSchedule(selection, contextScope, files)) return;\n scheduleOperationScope(\n runtime, current, call, effective, selection, contextScope, files, symbols,\n );\n}\n\nfunction operationContextScope(\n db: Db,\n selection: OperationSelection,\n): ReturnType<typeof handlerScope> {\n return selection.contextMethodId\n ? handlerScope(db, selection.contextMethodId) : undefined;\n}\n\nfunction operationFiles(\n db: Db,\n effective: EffectiveOutbound,\n selection: OperationSelection,\n contextScope: ReturnType<typeof handlerScope>,\n): Set<string> {\n if (contextScope) return contextScope.files;\n if (selection.implementation.files.size > 0)\n return selection.implementation.files;\n return handlerFilesForOperation(db, effective.row.to_id);\n}\n\nfunction operationSymbols(\n selection: OperationSelection,\n contextScope: ReturnType<typeof handlerScope>,\n): Set<number> | undefined {\n if (contextScope?.symbolId) return new Set([contextScope.symbolId]);\n const symbolId = selection.implementation.symbolId;\n return symbolId ? new Set([symbolId]) : undefined;\n}\n\nfunction operationCanSchedule(\n selection: OperationSelection,\n contextScope: ReturnType<typeof handlerScope>,\n files: ReadonlySet<string>,\n): boolean {\n if (!selection.selectedHandlerAvailable || files.size === 0) return false;\n const edge = selection.implementation.edge;\n if (!edge) return false;\n return edge.status === 'resolved' || contextScope !== undefined;\n}\n\nfunction scheduleOperationScope(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n selection: OperationSelection,\n contextScope: ReturnType<typeof handlerScope>,\n files: Set<string>,\n symbols: Set<number> | undefined,\n): void {\n const repoId = contextScope?.repoId ?? selection.implementation.repoId\n ?? operationRepositoryId(runtime.db, effective.row.to_id);\n const context = new Map<string, ContextBinding>();\n const scheduling = runtime.scheduler.schedule({\n workspaceId: runtime.workspaceId ?? call.workspaceId,\n repoId,\n files,\n symbolIds: symbols,\n context,\n }, current.state);\n if (scheduling.kind === 'cycle')\n recordOperationCycle(\n runtime, current, call, effective, scheduling.state,\n repoId, files, symbols,\n );\n if (scheduling.kind === 'scheduled')\n enqueueCausalScope(runtime.queue, runtime.pendingRoots, {\n repoId,\n files,\n symbolIds: symbols,\n depth: current.depth + 1,\n context,\n state: scheduling.state,\n });\n}\n\nfunction operationRepositoryId(\n db: Db,\n operationId: string,\n): number | undefined {\n return db.prepare(`SELECT s.repo_id repoId\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n WHERE o.id=?`).get(operationId)?.repoId as number | undefined;\n}\n\nfunction recordOperationCycle(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n state: TraversalScopeState,\n repoId: number | undefined,\n files: Set<string>,\n symbols: Set<number> | undefined,\n): void {\n const evidence = {\n ...effective.evidence,\n cycle: true,\n cycleReason: 'structural_ancestry_cycle',\n };\n const edge: TraceEdge = {\n step: current.depth,\n type: 'cycle',\n from: effective.to,\n to: state.structuralKey,\n evidence,\n confidence: 1,\n unresolvedReason:\n 'Cycle detected in structural ancestry; downstream scope was not expanded',\n };\n recordCycleObservation(runtime.recorder, edge, effective.semantic.target, {\n workspaceId: effective.semanticWorkspaceId,\n repositoryId: repoId,\n sourceFiles: files,\n symbolIds: symbols,\n structuralKey: state.structuralKey,\n }, {\n graphEdgeId: effective.evidence.persistedGraphEdgeId,\n outboundCallId: call.id,\n operationId: effective.row.to_id,\n }, call);\n}\n","import type { Db } from '../db/connection.js';\nimport type { TraceEdge, TraceOptions } from '../types.js';\nimport {\n baseTraceEvidence,\n edgeTarget,\n runtimeResolution,\n type TraceGraphRow,\n} from './evidence.js';\nimport { dynamicCandidateBranches } from './dynamic-branches.js';\nimport {\n contextualRuntimeResolution,\n type ContextBinding,\n type ContextualGraphRow,\n type ContextualRuntimeResolution,\n} from './008-contextual-runtime-state.js';\nimport {\n TraversalScopeScheduler,\n type TraversalScopeState,\n} from './010-traversal-scope.js';\nimport {\n planEventSubscriberTransitions,\n type PlannedEventSubscriberTransition,\n} from './011-event-subscriber-traversal.js';\nimport {\n graphForCalls,\n operationNode,\n symbolNode,\n type TraceGraphEdgeRow,\n} from './012-trace-graph-lookups.js';\nimport {\n enqueueCausalScope,\n nextPendingRoot,\n type PendingTraceRootScope,\n type TraceQueueScope,\n} from './013-trace-root-scopes.js';\nimport type { CompactSemanticEndpoint } from './014-compact-contract.js';\nimport { TraceEdgeRecorder } from './015-trace-edge-recorder.js';\nimport {\n contextForSymbolCall,\n knownBindingsForCalls,\n knownBindingsForScope,\n parseTraceEvidence,\n receiverFromTraceEvidence,\n} from './017-trace-context.js';\nimport {\n recordCycleObservation,\n recordDynamicBranchObservation,\n recordEventBridgeObservation,\n recordEventCycleObservation,\n recordLocalCallObservation,\n recordOutboundObservation,\n} from './019-trace-edge-semantics.js';\nimport { outboundScopeSymbolIds } from './023-nested-event-scopes.js';\nimport type { ImplementationHintOptions } from './025-trace-implementation-scope.js';\nimport { processOperationTarget } from './028-trace-operation-execution.js';\n\nexport interface CallRow extends Record<string, unknown> {\n id: number;\n repo_id: number;\n repoName: string;\n source_file: string;\n source_line: number;\n call_type: string;\n confidence: number;\n source_symbol_id?: number;\n workspaceId: number;\n graphGeneration: number;\n}\n\nexport interface EffectiveOutbound {\n evidence: Record<string, unknown>;\n row: TraceGraphRow;\n to: string;\n semanticWorkspaceId: number;\n semantic: {\n source: CompactSemanticEndpoint;\n target: CompactSemanticEndpoint;\n };\n}\n\nexport interface TraceExecutionRuntime {\n db: Db;\n options: TraceOptions;\n hintOptions: ImplementationHintOptions;\n workspaceId?: number;\n maxDepth: number;\n scheduler: TraversalScopeScheduler;\n queue: TraceQueueScope[];\n pendingRoots: PendingTraceRootScope[];\n diagnostics: Array<Record<string, unknown>>;\n nodes: Map<string, Record<string, unknown>>;\n recorder: TraceEdgeRecorder;\n}\n\nfunction traceEdgeType(call: CallRow, row: TraceGraphRow): string {\n if (row.to_kind === 'operation'\n && row.edge_type === 'REMOTE_CALL_RESOLVES_TO_OPERATION')\n return 'remote_action';\n if (row.to_kind === 'operation'\n && row.edge_type === 'LOCAL_CALL_RESOLVES_TO_OPERATION')\n return 'local_service_call';\n return String(call.call_type);\n}\n\nfunction includeCall(type: string, options: TraceOptions): boolean {\n if (!options.includeDb && type === 'local_db_query') return false;\n if (!options.includeExternal && type === 'external_http') return false;\n if (!options.includeAsync && type.startsWith('async_')) return false;\n return true;\n}\n\nfunction nextTraceScope(\n runtime: TraceExecutionRuntime,\n): TraceQueueScope | undefined {\n const depth = runtime.queue[0]?.depth ?? Number.POSITIVE_INFINITY;\n if (depth > 1 && runtime.workspaceId !== undefined) {\n const root = nextPendingRoot(\n runtime.pendingRoots, runtime.scheduler, runtime.workspaceId,\n );\n if (root) runtime.queue.unshift(root);\n }\n return runtime.queue.shift();\n}\n\nexport function executeTraceScopes(runtime: TraceExecutionRuntime): void {\n while (runtime.queue.length > 0 || runtime.pendingRoots.length > 0) {\n const current = nextTraceScope(runtime);\n if (!current || current.depth > runtime.maxDepth) continue;\n if (!runtime.scheduler.markExpanded(current.state)) continue;\n processTraceScope(runtime, current);\n }\n}\n\nfunction processTraceScope(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n): void {\n const calls = callsForScope(runtime, current);\n const bindings = callerBindings(runtime.db, current, calls);\n processLocalCalls(runtime, current, bindings);\n const graph = graphForCalls(\n runtime.db, calls.map((call) => Number(call.id)),\n );\n for (const call of calls)\n processOutboundCall(runtime, current, bindings, call,\n graph.get(Number(call.id)) ?? []);\n}\n\nfunction callsForScope(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n): CallRow[] {\n const rows = runtime.db.prepare(`SELECT c.*,r.name repoName,\n r.workspace_id workspaceId,r.graph_generation graphGeneration\n FROM outbound_calls c JOIN repositories r ON r.id=c.repo_id\n WHERE (? IS NULL OR c.repo_id=?) AND (? IS NULL OR r.workspace_id=?)\n ORDER BY c.source_file COLLATE BINARY,c.call_site_start_offset,\n c.call_site_end_offset,c.source_line,c.id`).all(\n current.repoId, current.repoId,\n runtime.workspaceId, runtime.workspaceId,\n ) as CallRow[];\n const symbols = outboundScopeSymbolIds(\n runtime.db, current.symbolIds, Boolean(runtime.options.includeAsync),\n );\n return rows.filter((call) =>\n callInScope(call, current, symbols)\n && includeCall(String(call.call_type), runtime.options));\n}\n\nfunction callInScope(\n call: CallRow,\n current: TraceQueueScope,\n symbols: ReadonlySet<number> | undefined,\n): boolean {\n const ownerMatches = current.unownedOnly\n ? call.source_symbol_id == null\n : !symbols || symbols.has(Number(call.source_symbol_id));\n return ownerMatches\n && (!current.files || current.files.has(String(call.source_file)));\n}\n\nfunction callerBindings(\n db: Db,\n current: TraceQueueScope,\n calls: CallRow[],\n): Map<string, ContextBinding> {\n return new Map<string, ContextBinding>([\n ...current.context,\n ...knownBindingsForScope(\n db, current.repoId, current.symbolIds, current.files,\n ),\n ...knownBindingsForCalls(db, calls),\n ]);\n}\n\nfunction localCallRows(\n db: Db,\n symbolIds: ReadonlySet<number>,\n): Array<Record<string, unknown>> {\n const ids = [...symbolIds];\n return db.prepare(`SELECT sc.*,s.repo_id calleeRepoId,\n s.source_file calleeFile FROM symbol_calls sc\n LEFT JOIN symbols s ON s.id=sc.callee_symbol_id\n WHERE sc.call_role='ordinary_call'\n AND sc.caller_symbol_id IN (${ids.map(() => '?').join(',')})\n ORDER BY sc.source_file COLLATE BINARY,sc.call_site_start_offset,\n sc.call_site_end_offset,sc.source_line,sc.id`).all(\n ...ids,\n ) as Array<Record<string, unknown>>;\n}\n\nfunction processLocalCalls(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n bindings: Map<string, ContextBinding>,\n): void {\n if (current.rootObservationOnly || !current.symbolIds\n || current.symbolIds.size === 0 || current.depth >= runtime.maxDepth) return;\n for (const row of localCallRows(runtime.db, current.symbolIds))\n processLocalCall(runtime, current, bindings, row);\n}\n\nfunction processLocalCall(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n bindings: Map<string, ContextBinding>,\n row: Record<string, unknown>,\n): void {\n if (!row.callee_symbol_id) return;\n const symbolId = Number(row.callee_symbol_id);\n const symbols = new Set([symbolId]);\n const files = new Set([String(row.calleeFile)]);\n const repoId = Number(row.calleeRepoId);\n const context = contextForSymbolCall(runtime.db, row, bindings);\n const scheduling = runtime.scheduler.schedule({\n workspaceId: runtime.workspaceId,\n repoId,\n files,\n symbolIds: symbols,\n context,\n }, current.state);\n const node = symbolNode(runtime.db, symbolId);\n if (node) runtime.nodes.set(String(node.id), node);\n const evidence = localCallEvidence(row, node);\n const unresolvedReason = localCallUnresolvedReason(row);\n const edge = localTraceEdge(current.depth, row, node, evidence, unresolvedReason);\n const target = recordLocalCallObservation(runtime.recorder, edge, {\n symbolCall: row, evidence, unresolvedReason,\n });\n if (scheduling.kind === 'cycle')\n recordLocalCycle(runtime, current, row, target, scheduling.state,\n repoId, files, symbols);\n if (scheduling.kind === 'scheduled')\n enqueueCausalScope(runtime.queue, runtime.pendingRoots, {\n repoId, files, symbolIds: symbols, depth: current.depth + 1,\n context, state: scheduling.state,\n });\n}\n\nfunction localCallEvidence(\n row: Record<string, unknown>,\n node: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n return {\n ...parseTraceEvidence(row.evidence_json),\n sourceFile: row.source_file,\n sourceLine: row.source_line,\n calleeSymbolId: row.callee_symbol_id,\n calleeSymbolName: node?.symbolName,\n calleeSymbolFile: node?.sourceFile,\n resolutionStatus: row.status,\n };\n}\n\nfunction localCallUnresolvedReason(\n row: Record<string, unknown>,\n): string | undefined {\n if (String(row.status) === 'resolved') return undefined;\n return row.unresolved_reason ? String(row.unresolved_reason) : undefined;\n}\n\nfunction localTraceEdge(\n depth: number,\n row: Record<string, unknown>,\n node: Record<string, unknown> | undefined,\n evidence: Record<string, unknown>,\n unresolvedReason: string | undefined,\n): TraceEdge {\n return {\n step: depth,\n type: 'local_symbol_call',\n from: String(row.callee_expression),\n to: node?.label\n ? String(node.label) : `symbol:${String(row.callee_symbol_id)}`,\n evidence,\n confidence: Number(row.confidence ?? 0.8),\n unresolvedReason,\n };\n}\n\nfunction recordLocalCycle(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n row: Record<string, unknown>,\n target: CompactSemanticEndpoint,\n state: TraversalScopeState,\n repoId: number,\n files: Set<string>,\n symbols: Set<number>,\n): void {\n const evidence = {\n cycle: true,\n cycleReason: 'structural_ancestry_cycle',\n symbolCallId: row.id,\n };\n const edge: TraceEdge = {\n step: current.depth,\n type: 'cycle',\n from: String(row.callee_expression),\n to: state.structuralKey,\n evidence,\n confidence: 1,\n unresolvedReason:\n 'Cycle detected in structural ancestry; downstream symbol was not expanded',\n };\n recordCycleObservation(runtime.recorder, edge, target, {\n workspaceId: runtime.workspaceId,\n repositoryId: repoId,\n sourceFiles: files,\n symbolIds: symbols,\n structuralKey: state.structuralKey,\n }, { symbolCallId: row.id, symbolId: row.callee_symbol_id }, row);\n}\n\nfunction processOutboundCall(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n bindings: Map<string, ContextBinding>,\n call: CallRow,\n persistedRows: TraceGraphEdgeRow[],\n): void {\n recordCallNode(runtime.nodes, call);\n const receiver = receiverFromTraceEvidence(call.evidence_json) ?? '';\n const contextual = contextualRuntimeResolution(\n runtime.db, call, bindings.get(receiver), call.workspaceId, persistedRows,\n );\n const rows = contextual.row ? [contextual.row] : persistedRows;\n for (const row of rows)\n processOutboundRow(runtime, current, call, { ...row }, contextual);\n}\n\nfunction recordCallNode(\n nodes: Map<string, Record<string, unknown>>,\n call: CallRow,\n): void {\n const id = `call:${call.id}`;\n nodes.set(id, {\n id,\n kind: 'outbound_call',\n repo: call.repoName,\n file: call.source_file,\n line: call.source_line,\n callType: call.call_type,\n });\n}\n\nfunction processOutboundRow(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n row: TraceGraphRow | ContextualGraphRow,\n contextual: ContextualRuntimeResolution,\n): void {\n const graphRow: TraceGraphRow = { ...row };\n const effective = recordEffectiveOutbound(\n runtime, current, call, graphRow, contextual,\n );\n processEventTransitions(runtime, current, call, effective);\n recordDynamicBranches(runtime, current, call, effective);\n if (effective.row.to_kind === 'operation')\n processOperationTarget(runtime, current, call, effective);\n}\n\nfunction recordEffectiveOutbound(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n row: TraceGraphRow,\n contextual: ContextualRuntimeResolution,\n): EffectiveOutbound {\n const persisted = parseTraceEvidence(row.evidence_json);\n const raw = baseTraceEvidence(row, call, persisted, contextual.evidence);\n const effective = runtimeResolution(runtime.db, row, raw, {\n vars: runtime.options.vars,\n dynamicMode: runtime.options.dynamicMode ?? 'strict',\n maxDynamicCandidates: runtime.options.maxDynamicCandidates,\n }, call.workspaceId, contextual.state);\n const target = `${effective.row.to_kind}:${effective.row.to_id}`;\n const operation = effective.row.to_kind === 'operation'\n ? operationNode(runtime.db, effective.row.to_id) : undefined;\n runtime.nodes.set(target, operation ?? targetNode(target, effective.row));\n const to = edgeTarget(effective.row, effective.evidence);\n const edge = outboundTraceEdge(\n current.depth, call, effective.row, to,\n effective.evidence, effective.unresolvedReason,\n );\n const semanticWorkspaceId = runtime.workspaceId ?? call.workspaceId;\n const semantic = recordOutboundObservation(runtime.recorder, edge, {\n call,\n row: effective.row,\n evidence: effective.evidence,\n workspaceId: semanticWorkspaceId,\n dynamicMode: runtime.options.dynamicMode,\n unresolvedReason: effective.unresolvedReason,\n });\n return {\n evidence: effective.evidence,\n row: effective.row,\n to,\n semanticWorkspaceId,\n semantic,\n };\n}\n\nfunction targetNode(\n id: string,\n row: TraceGraphRow,\n): Record<string, unknown> {\n return {\n id,\n kind: row.to_kind,\n label: row.to_kind === 'db_entity'\n ? `Entity: ${row.to_id || 'unknown'}` : row.to_id,\n };\n}\n\nfunction outboundTraceEdge(\n depth: number,\n call: CallRow,\n row: TraceGraphRow,\n to: string,\n evidence: Record<string, unknown>,\n unresolvedReason: string | undefined,\n): TraceEdge {\n return {\n step: depth,\n type: traceEdgeType(call, row),\n from: `${call.repoName}:${call.source_file}:${call.source_line}`,\n to,\n evidence,\n confidence: Number(row.confidence ?? call.confidence),\n unresolvedReason,\n };\n}\n\nfunction processEventTransitions(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n): void {\n if (!runtime.options.includeAsync || call.call_type !== 'async_emit'\n || effective.row.edge_type !== 'HANDLER_EMITS_EVENT'\n || typeof call.event_name_expr !== 'string') return;\n const plans = planEventSubscriberTransitions(runtime.db, {\n workspaceId: runtime.workspaceId ?? call.workspaceId,\n graphGeneration: call.graphGeneration,\n eventName: call.event_name_expr,\n }, runtime.scheduler, current.state, current.depth, runtime.maxDepth);\n for (const plan of plans)\n recordEventTransition(runtime, current, plan,\n effective.semanticWorkspaceId, plans.length);\n}\n\nfunction recordEventTransition(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n plan: PlannedEventSubscriberTransition,\n workspaceId: number,\n subscriptionCount: number,\n): void {\n const nodeId = String(plan.node.id);\n const targetLabel = String(plan.node.label ?? nodeId);\n runtime.nodes.set(nodeId, plan.node);\n const bridge: TraceEdge = {\n step: current.depth,\n type: 'event_name_matches_subscription_handler',\n from: plan.transition.eventName,\n to: targetLabel,\n evidence: plan.evidence,\n confidence: plan.transition.confidence,\n unresolvedReason: plan.transition.unresolvedReason,\n };\n const target = recordEventBridgeObservation(\n runtime.recorder, bridge, plan, workspaceId, subscriptionCount,\n );\n if (plan.bodyExpansion === 'cycle_blocked' && plan.state)\n recordEventCycle(runtime, current, plan, target, targetLabel, workspaceId);\n if (plan.bodyExpansion === 'scheduled' && plan.state\n && plan.transition.handler)\n enqueueEventHandler(runtime, current, plan);\n}\n\nfunction recordEventCycle(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n plan: PlannedEventSubscriberTransition,\n target: CompactSemanticEndpoint,\n targetLabel: string,\n workspaceId: number,\n): void {\n if (!plan.state) return;\n const evidence = {\n cycle: true,\n cycleReason: 'structural_ancestry_cycle',\n graphEdgeId: plan.transition.graphEdgeId,\n };\n const edge: TraceEdge = {\n step: current.depth,\n type: 'cycle',\n from: targetLabel,\n to: plan.state.structuralKey,\n evidence,\n confidence: 1,\n unresolvedReason:\n 'Cycle detected across an event subscriber boundary; downstream symbol was not expanded',\n };\n recordEventCycleObservation(\n runtime.recorder, edge, plan, target, workspaceId,\n );\n}\n\nfunction enqueueEventHandler(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n plan: PlannedEventSubscriberTransition,\n): void {\n const handler = plan.transition.handler;\n if (!handler || !plan.state) return;\n enqueueCausalScope(runtime.queue, runtime.pendingRoots, {\n repoId: handler.repoId,\n files: new Set([handler.sourceFile]),\n symbolIds: new Set([handler.symbolId]),\n depth: current.depth + 1,\n context: new Map(),\n state: plan.state,\n });\n}\n\nfunction recordDynamicBranches(\n runtime: TraceExecutionRuntime,\n current: TraceQueueScope,\n call: CallRow,\n effective: EffectiveOutbound,\n): void {\n if ((runtime.options.dynamicMode ?? 'strict') !== 'candidates'\n || effective.row.status === 'resolved') return;\n for (const branch of dynamicCandidateBranches(\n current.depth, call, effective.evidence,\n )) {\n recordDynamicBranchObservation(\n runtime.recorder, branch, call, effective.semantic.source,\n effective.evidence, effective.semanticWorkspaceId,\n );\n }\n}\n","import type { Db } from '../db/connection.js';\nimport type { TraceEdge } from '../types.js';\nimport { hintedImplementationSelection } from './005-implementation-selection.js';\nimport {\n handlerMethodNode,\n withSelectedHandlerProvenance,\n type SelectedHandlerEvidence,\n} from './009-selected-handler-provenance.js';\nimport {\n operationNode,\n type TraceGraphEdgeRow,\n} from './012-trace-graph-lookups.js';\nimport { parseTraceEvidence } from './017-trace-context.js';\nimport { recordImplementationObservation } from './019-trace-edge-semantics.js';\nimport {\n handlerScope,\n implementationScope,\n} from './025-trace-implementation-scope.js';\nimport type { TraceExecutionRuntime } from './027-trace-scope-execution.js';\n\ninterface StartImplementationSelection {\n edge: TraceGraphEdgeRow;\n operationNode?: Record<string, unknown>;\n selectedMethodId?: string;\n selected: SelectedHandlerEvidence;\n selectedSymbolId?: number;\n effectiveStatus: string;\n strategy: string;\n guided: boolean;\n unresolvedReason?: string;\n}\n\nfunction selectedStartImplementation(\n runtime: TraceExecutionRuntime,\n operationId: string,\n): StartImplementationSelection | undefined {\n const operation = operationNode(runtime.db, operationId);\n if (operation) runtime.nodes.set(String(operation.id), operation);\n const implementation = implementationScope(runtime.db, operationId);\n const startSelection = hintedImplementationSelection(\n runtime.db, implementation.edge, operationId, runtime.hintOptions,\n );\n const edge = implementation.edge;\n if (!edge) return undefined;\n const selectedMethodId = startSelectedMethod(edge, startSelection.methodId);\n if (!selectedMethodId && edge.status !== 'resolved') return undefined;\n const evidence = startImplementationEvidence(\n edge, operationId, selectedMethodId, startSelection,\n );\n const selected = startSelectedHandler(\n runtime.db, evidence, selectedMethodId,\n );\n const scope = selectedMethodId\n ? handlerScope(runtime.db, selectedMethodId) : undefined;\n return {\n edge, operationNode: operation, selectedMethodId, selected,\n selectedSymbolId: scope?.symbolId,\n effectiveStatus: startEffectiveStatus(edge, startSelection.methodId),\n strategy: startStrategy(startSelection.evidence.strategy),\n guided: startSelection.evidence.guided === true,\n unresolvedReason: startUnresolvedReason(\n edge, selected, startSelection.methodId,\n ),\n };\n}\n\nfunction startSelectedMethod(\n edge: TraceGraphEdgeRow,\n hintedMethodId: string | undefined,\n): string | undefined {\n return edge.status === 'resolved' ? edge.to_id : hintedMethodId;\n}\n\nfunction startSelectedHandler(\n db: Db,\n evidence: Record<string, unknown>,\n methodId: string | undefined,\n): SelectedHandlerEvidence {\n if (!methodId) return { evidence };\n return withSelectedHandlerProvenance(\n evidence, methodId, handlerMethodNode(db, methodId),\n );\n}\n\nfunction startEffectiveStatus(\n edge: TraceGraphEdgeRow,\n hintedMethodId: string | undefined,\n): string {\n return hintedMethodId ? 'resolved' : String(edge.status ?? 'unresolved');\n}\n\nfunction startStrategy(value: unknown): string {\n return typeof value === 'string' ? value : 'indexed_operation_graph';\n}\n\nfunction startUnresolvedReason(\n edge: TraceGraphEdgeRow,\n selected: SelectedHandlerEvidence,\n hintedMethodId: string | undefined,\n): string | undefined {\n if (selected.unresolvedReason) return selected.unresolvedReason;\n if (edge.status === 'resolved' || hintedMethodId) return undefined;\n return String(edge.unresolved_reason ?? edge.status);\n}\n\nfunction startImplementationEvidence(\n edge: TraceGraphEdgeRow,\n operationId: string,\n selectedMethodId: string | undefined,\n selection: ReturnType<typeof hintedImplementationSelection>,\n): Record<string, unknown> {\n return {\n ...parseTraceEvidence(edge.evidence_json),\n startResolution: {\n strategy: 'indexed_operation_graph',\n matchedOperationId: operationId,\n implementationEdgeId: edge.id,\n implementationStatus: edge.status,\n selectedHandlerMethodId: selectedMethodId,\n },\n implementationSelection: selection.methodId\n ? selection.evidence : undefined,\n };\n}\n\nexport function recordTraceStartImplementation(\n runtime: TraceExecutionRuntime,\n operationId: string,\n): void {\n const selection = selectedStartImplementation(runtime, operationId);\n if (!selection) return;\n const selected = selection.selected;\n if (selected.diagnostic)\n runtime.diagnostics.unshift(selected.diagnostic);\n if (selected.handler)\n runtime.nodes.set(String(selected.handler.id), selected.handler);\n const edge = startImplementationTraceEdge(operationId, selection);\n recordImplementationObservation(runtime.recorder, edge, {\n operationId,\n handlerMethodId: selection.selectedMethodId,\n handlerSymbolId: selection.selectedSymbolId,\n graphEdgeId: selection.edge.id,\n persistedStatus: selection.edge.status,\n persistedTargetKind: selection.edge.to_kind,\n persistedTargetId: selection.edge.to_id,\n effectiveStatus: selection.effectiveStatus,\n strategy: selection.strategy,\n guided: selection.guided,\n unresolvedReason: selection.unresolvedReason,\n evidence: selected.evidence,\n site: selection.operationNode ?? {},\n });\n}\n\nfunction startImplementationTraceEdge(\n operationId: string,\n selection: StartImplementationSelection,\n): TraceEdge {\n const selected = selection.selected;\n return {\n step: 1,\n type: 'operation_implemented_by_handler',\n from: selection.operationNode?.label\n ? String(selection.operationNode.label) : `operation:${operationId}`,\n to: selected.handler?.label\n ? String(selected.handler.label)\n : `${selection.edge.to_kind}:${selection.edge.to_id}`,\n evidence: selected.evidence,\n confidence: Number(selection.edge.confidence ?? 0),\n unresolvedReason: selection.unresolvedReason,\n };\n}\n","import type { Db } from '../db/connection.js';\nimport { schemaLifecycleDiagnostic } from '../db/001-fact-lifecycle.js';\nimport type {\n TraceEdge,\n TraceOptions,\n TraceResult,\n TraceStart,\n} from '../types.js';\nimport {\n runtimeNoCandidateDiagnostics,\n runtimeVariableDiagnostic,\n} from './evidence.js';\nimport {\n loadTraceDiagnostics,\n prependTraceDiagnostic,\n} from './002-trace-diagnostics.js';\nimport { TraversalScopeScheduler } from './010-traversal-scope.js';\nimport { createTraceRootPlan } from './013-trace-root-scopes.js';\nimport type { CompactTraceObserver } from './014-compact-contract.js';\nimport { TraceEdgeRecorder } from './015-trace-edge-recorder.js';\nimport type { ImplementationHintOptions } from './025-trace-implementation-scope.js';\nimport {\n resolveTraceStartScope,\n type TraceStartScope,\n} from './026-trace-start-scope.js';\nimport {\n executeTraceScopes,\n type TraceExecutionRuntime,\n} from './027-trace-scope-execution.js';\nimport { recordTraceStartImplementation } from './029-trace-start-implementation.js';\nimport { selectorNotFoundDiagnostic } from './selectors.js';\n\nconst compactObserverKey = Symbol('service-flow.compact-trace-observer');\n\ntype ObservedTraceOptions = TraceOptions & {\n [compactObserverKey]?: CompactTraceObserver;\n};\n\nfunction compactObserver(options: TraceOptions): CompactTraceObserver | undefined {\n const observed: ObservedTraceOptions = options;\n return observed[compactObserverKey];\n}\n\nfunction positiveDepth(value: number): number {\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : 25;\n}\n\nfunction hasSelector(start: TraceStart): boolean {\n return Boolean(start.repo || start.handler || start.operation\n || start.operationPath || start.servicePath);\n}\n\nfunction staleRows(\n db: Db,\n repoId: number | undefined,\n workspaceId: number | undefined,\n includeAll: boolean,\n): Array<{ name?: string; reason?: string }> {\n if (repoId === undefined && !includeAll) return [];\n return db.prepare(`SELECT name,graph_stale_reason reason FROM repositories\n WHERE graph_stale_reason IS NOT NULL AND (? IS NULL OR id=?)\n AND (? IS NULL OR workspace_id=?)\n ORDER BY name,id`).all(\n repoId, repoId, workspaceId, workspaceId,\n ) as Array<{ name?: string; reason?: string }>;\n}\n\nfunction addStaleDiagnostics(\n diagnostics: Array<Record<string, unknown>>,\n rows: Array<{ name?: string; reason?: string }>,\n): void {\n for (const row of rows)\n prependTraceDiagnostic(diagnostics, {\n severity: 'warning',\n code: 'graph_stale',\n message: `Graph is stale for ${row.name ?? 'repository'}: ${row.reason ?? 'facts_changed'}. Run service-flow link.`,\n });\n}\n\nfunction initialDiagnostics(\n db: Db,\n start: TraceStart,\n scope: TraceStartScope,\n workspaceId: number | undefined,\n): Array<Record<string, unknown>> {\n const selected = hasSelector(start);\n const repoId = scope.executionRepoId ?? scope.repo?.id;\n const diagnostics = loadTraceDiagnostics(db, repoId, !selected, workspaceId);\n addStaleDiagnostics(\n diagnostics, staleRows(db, repoId, workspaceId, !selected),\n );\n for (const diagnostic of scope.startDiagnostics ?? [])\n prependTraceDiagnostic(diagnostics, diagnostic);\n if (!scope.selectorMatched && !scope.startDiagnostics?.length)\n prependTraceDiagnostic(diagnostics, selectorNotFoundDiagnostic(start));\n return diagnostics;\n}\n\nfunction finalizeDiagnostics(\n diagnostics: Array<Record<string, unknown>>,\n edges: TraceEdge[],\n): void {\n const runtimeDiagnostic = runtimeVariableDiagnostic(edges);\n if (runtimeDiagnostic)\n prependTraceDiagnostic(diagnostics, runtimeDiagnostic);\n for (const diagnostic of runtimeNoCandidateDiagnostics(edges))\n prependTraceDiagnostic(diagnostics, diagnostic);\n}\n\nfunction traceRuntime(\n db: Db,\n options: TraceOptions,\n hintOptions: ImplementationHintOptions,\n roots: ReturnType<typeof createTraceRootPlan>,\n diagnostics: Array<Record<string, unknown>>,\n edges: TraceEdge[],\n observer: CompactTraceObserver | undefined,\n scheduler: TraversalScopeScheduler,\n): TraceExecutionRuntime {\n return {\n db,\n options,\n hintOptions,\n workspaceId: roots.workspaceId,\n maxDepth: positiveDepth(options.depth),\n scheduler,\n queue: roots.queue,\n pendingRoots: roots.pendingRoots,\n diagnostics,\n nodes: new Map(),\n recorder: new TraceEdgeRecorder(edges, observer),\n };\n}\n\nexport function trace(\n db: Db,\n start: TraceStart,\n options: TraceOptions,\n): TraceResult {\n const observer = compactObserver(options);\n const schemaLifecycle = schemaLifecycleDiagnostic(db);\n if (schemaLifecycle)\n return { start, nodes: [], edges: [], diagnostics: [schemaLifecycle] };\n const hints: ImplementationHintOptions = {\n implementationRepo: options.implementationRepo,\n implementationHints: options.implementationHints,\n };\n const scope = resolveTraceStartScope(db, start, hints, options.workspaceId);\n const scheduler = new TraversalScopeScheduler();\n const roots = createTraceRootPlan(db, scheduler, {\n repoId: scope.executionRepoId ?? scope.repo?.id,\n files: scope.sourceFiles,\n symbolIds: scope.symbolIds,\n selectorMatched: scope.selectorMatched,\n }, options.workspaceId, Boolean(options.includeAsync));\n observer?.setWorkspaceId?.(roots.workspaceId);\n if (roots.diagnostic)\n return { start, nodes: [], edges: [], diagnostics: [roots.diagnostic] };\n const diagnostics = initialDiagnostics(db, start, scope, roots.workspaceId);\n const edges: TraceEdge[] = [];\n const runtime = traceRuntime(\n db, options, hints, roots, diagnostics, edges, observer, scheduler,\n );\n if (scope.startOperationId && scope.selectorMatched)\n recordTraceStartImplementation(runtime, scope.startOperationId);\n executeTraceScopes(runtime);\n finalizeDiagnostics(diagnostics, edges);\n return { start, nodes: [...runtime.nodes.values()], edges, diagnostics };\n}\n\nexport function traceWithObserver(\n db: Db,\n start: TraceStart,\n options: TraceOptions,\n observer: CompactTraceObserver,\n): TraceResult {\n const observed: ObservedTraceOptions = {\n ...options,\n [compactObserverKey]: observer,\n };\n return trace(db, start, observed);\n}\n","import type { Db } from '../db/connection.js';\nimport type {\n DynamicMode,\n TraceOptions,\n TraceResult,\n TraceStart,\n} from '../types.js';\n\nexport type CompactStatus =\n | 'resolved'\n | 'terminal'\n | 'inferred'\n | 'dynamic'\n | 'ambiguous'\n | 'unresolved'\n | 'cycle';\n\nexport type CompactEndpointSide = 'source' | 'target';\n\nexport type CompactSemanticEndpoint =\n | { kind: 'operation'; operationId: number }\n | { kind: 'symbol'; symbolId: number }\n | { kind: 'handler_method'; handlerMethodId: number }\n | { kind: 'event'; workspaceId: number; eventName: string }\n | {\n kind: 'target';\n workspaceId: number;\n repositoryId?: number;\n targetKind: string;\n targetId: string;\n }\n | {\n kind: 'call_site';\n workspaceId: number;\n repositoryId: number;\n repositoryName: string;\n sourceFile: string;\n sourceLine: number;\n startOffset?: number;\n endOffset?: number;\n callId: number;\n }\n | {\n kind: 'scope';\n workspaceId: number;\n repositoryId?: number;\n sourceFiles: string[];\n symbolIds: number[];\n structuralKey: string;\n }\n | {\n kind: 'unavailable';\n side: CompactEndpointSide;\n endpointKind: string;\n detailedEdgeIndex: number;\n site?: CompactSourceSite;\n };\n\nexport type CompactRemediationCode =\n | 'provide_runtime_variables'\n | 'select_implementation'\n | 'reindex_and_link'\n | 'inspect_detailed_edge';\n\nexport interface CompactDecisionTargetInput {\n kind: string;\n id: string;\n}\n\nexport interface CompactDecisionInput {\n effectiveResolutionStatus?: string;\n effectiveTarget?: CompactDecisionTargetInput;\n persistedResolutionStatus?: string;\n persistedTarget?: CompactDecisionTargetInput;\n missingVariableNames?: string[];\n missingVariableCount?: number;\n dynamicMode?: DynamicMode;\n candidateCount?: number;\n viableCandidateCount?: number;\n rejectedCandidateCount?: number;\n omittedCandidateCount?: number;\n implementationStrategy?: string;\n implementationGuided?: boolean;\n implementationContextual?: boolean;\n reasonCode?: string;\n eventMatchStrategy?: string;\n dispatchCertainty?: string;\n eventSubscriptionCount?: number;\n associationStatus?: string;\n associationBasis?: string;\n eventScope?: string;\n callRole?: string;\n factOrigin?: string;\n roleSiteMatchCount?: number;\n bodyExpansion?: string;\n remediationCode?: CompactRemediationCode;\n remediationHintCount?: number;\n}\n\nexport interface CompactReferenceInput {\n graphEdgeIds?: Array<number | string>;\n outboundCallIds?: Array<number | string>;\n subscribeCallIds?: Array<number | string>;\n symbolCallIds?: Array<number | string>;\n operationIds?: Array<number | string>;\n symbolIds?: Array<number | string>;\n handlerMethodIds?: Array<number | string>;\n}\n\nexport interface CompactSourceSite {\n repository?: string;\n sourceFile?: string;\n sourceLine?: number;\n startOffset?: number;\n endOffset?: number;\n}\n\nexport interface CompactEdgeObservation {\n ordinal: number;\n step: number;\n type: string;\n source: CompactSemanticEndpoint;\n target: CompactSemanticEndpoint;\n status: CompactStatus;\n confidence: number;\n decision?: CompactDecisionInput;\n refs?: CompactReferenceInput;\n site?: CompactSourceSite;\n}\n\nexport interface CompactTraceObserver {\n record(observation: CompactEdgeObservation): void;\n setWorkspaceId?(workspaceId: number | undefined): void;\n}\n\nexport class CompactObservationCollector implements CompactTraceObserver {\n readonly observations: CompactEdgeObservation[] = [];\n workspaceId?: number;\n\n record(observation: CompactEdgeObservation): void {\n this.observations.push(observation);\n }\n\n setWorkspaceId(workspaceId: number | undefined): void {\n this.workspaceId = workspaceId;\n }\n}\n\nexport interface CompactSourceContext {\n schemaVersion: number;\n analyzerVersion: string;\n graphGeneration: number;\n}\n\nexport interface CompactProjectionInput {\n db: Db;\n start: TraceStart;\n options: TraceOptions;\n source: CompactSourceContext;\n trace: TraceResult;\n observations: CompactEdgeObservation[];\n}\n\nexport interface CompactHintV1 {\n servicePath: string | null;\n operationPath: string | null;\n packageName: string | null;\n repositoryName: string | null;\n candidateFamily: string | null;\n implementationRepo: string | null;\n}\n\nexport interface CompactStartV1 {\n repo: string | null;\n servicePath: string | null;\n operation: string | null;\n operationPath: string | null;\n handler: string | null;\n}\n\nexport interface CompactQueryV1 {\n depth: number;\n includeAsync: boolean;\n includeDb: boolean;\n includeExternal: boolean;\n dynamicMode: DynamicMode;\n maxDynamicCandidates: number;\n suppliedVariableNames: string[];\n runtimeValuesOmitted: true;\n implementationRepo: string | null;\n implementationHints: CompactHintV1[];\n}\n\nexport interface CompactReferenceGroupV1 {\n values: Array<number | string>;\n total: number;\n shown: number;\n omitted: number;\n}\n\nexport interface CompactReferencesV1 {\n graphEdgeIds?: CompactReferenceGroupV1;\n outboundCallIds?: CompactReferenceGroupV1;\n subscribeCallIds?: CompactReferenceGroupV1;\n symbolCallIds?: CompactReferenceGroupV1;\n operationIds?: CompactReferenceGroupV1;\n symbolIds?: CompactReferenceGroupV1;\n handlerMethodIds?: CompactReferenceGroupV1;\n}\n\nexport interface CompactDecisionV1 {\n effectiveResolutionStatus?: string;\n effectiveTarget?: string;\n persistedResolutionStatus?: string;\n persistedTarget?: string;\n missingVariableNames?: string[];\n missingVariableCount?: number;\n shownMissingVariableCount?: number;\n omittedMissingVariableCount?: number;\n dynamicMode?: DynamicMode;\n candidateCount?: number;\n viableCandidateCount?: number;\n rejectedCandidateCount?: number;\n omittedCandidateCount?: number;\n implementationStrategy?: string;\n implementationGuided?: boolean;\n implementationContextual?: boolean;\n eventMatchStrategy?: string;\n dispatchCertainty?: string;\n eventSubscriptionCount?: number;\n associationStatus?: string;\n associationBasis?: string;\n eventScope?: string;\n callRole?: string;\n factOrigin?: string;\n roleSiteMatchCount?: number;\n bodyExpansion?: string;\n reasonCode?: string;\n remediationHint?: string;\n omittedRemediationHintCount?: number;\n}\n\nexport interface CompactEdgeDetailsV1 {\n decision: CompactDecisionV1;\n refs: CompactReferencesV1;\n}\n\nexport interface CompactDiagnosticDetailsV1 {\n reasonCode?: string;\n missingVariableNames?: string[];\n missingVariableCount?: number;\n shownMissingVariableCount?: number;\n omittedMissingVariableCount?: number;\n candidateCount?: number;\n viableCandidateCount?: number;\n rejectedCandidateCount?: number;\n remediationHint?: string;\n omittedHintCount?: number;\n}\n\nexport interface CompactProjectedDiagnostic {\n index: number;\n severity: 'error' | 'warning' | 'info';\n code: string;\n message: string;\n file?: string;\n line?: number;\n details?: CompactDiagnosticDetailsV1;\n}\n\nexport type CompactNodeRowV1 = [\n id: string,\n kind: string,\n label: string,\n repo: number | null,\n file: number | null,\n line: number | null,\n];\n\nexport type CompactEdgeRowV1 = [\n id: string,\n traceOrdinals: number[],\n step: number,\n type: string,\n from: string,\n to: string,\n status: CompactStatus,\n confidence: number,\n count: number,\n details: CompactEdgeDetailsV1 | null,\n];\n\nexport type CompactDiagnosticRowV1 = [\n fullDiagnosticIndex: number,\n severity: 'error' | 'warning' | 'info',\n code: string,\n message: string,\n file: number | null,\n line: number | null,\n details: CompactDiagnosticDetailsV1 | null,\n];\n\nexport interface CompactStatusCountsV1 {\n resolved: number;\n terminal: number;\n inferred: number;\n dynamic: number;\n ambiguous: number;\n unresolved: number;\n cycle: number;\n}\n\nexport interface CompactGraphV1 {\n schema: 'service-flow/compact-graph@1';\n start: CompactStartV1;\n query: CompactQueryV1;\n source: CompactSourceContext;\n summary: {\n completeness: 'complete' | 'partial' | 'blocked';\n fullTraceNodes: number;\n fullTraceEdges: number;\n fullTraceDiagnostics: number;\n nodes: number;\n edges: number;\n collapsedEdges: number;\n statusCounts: CompactStatusCountsV1;\n projection: {\n evidence: 'summary-only';\n syntheticEndpoints: number;\n omittedUnreferencedFullNodes: number;\n };\n };\n repos: string[];\n files: string[];\n nodeColumns: ['id', 'kind', 'label', 'repo', 'file', 'line'];\n nodes: CompactNodeRowV1[];\n edgeColumns: [\n 'id', 'traceOrdinals', 'step', 'type', 'from', 'to',\n 'status', 'confidence', 'count', 'details',\n ];\n edges: CompactEdgeRowV1[];\n diagnosticColumns: [\n 'fullDiagnosticIndex', 'severity', 'code', 'message',\n 'file', 'line', 'details',\n ];\n diagnostics: CompactDiagnosticRowV1[];\n}\n","import { compareBinary } from './010-traversal-scope.js';\nimport type {\n CompactDecisionV1,\n CompactStatus,\n} from './014-compact-contract.js';\n\nexport const COMPACT_MISSING_NAME_LIMIT = 8;\nexport const COMPACT_MISSING_NAME_MAX_LENGTH = 160;\n\nexport interface CompactMissingNameProjection {\n readonly names: string[];\n readonly total: number;\n readonly shown: number;\n readonly omitted: number;\n}\n\nconst identifier = '[A-Za-z_$][A-Za-z0-9_$]*';\nconst member = `(?:(?:\\\\.|\\\\?\\\\.)${identifier}|(?:\\\\[|\\\\?\\\\.\\\\[)(?:0|[1-9][0-9]*)\\\\])`;\nconst transform = '(?:(?:\\\\.|\\\\?\\\\.)(?:toLowerCase|toUpperCase|trim)\\\\(\\\\))?';\nconst safeMissingName = new RegExp(`^${identifier}(?:${member})*${transform}$`);\n\nexport function projectCompactMissingNames(\n values: readonly string[] | undefined,\n authoritativeCount: unknown,\n): CompactMissingNameProjection {\n const raw = [...new Set((values ?? [])\n .map((value) => value.trim())\n .filter(Boolean))]\n .sort(compareBinary);\n const safe = raw.filter(isSafeCompactMissingName);\n const names = safe.slice(0, COMPACT_MISSING_NAME_LIMIT);\n const total = Math.max(compactCount(authoritativeCount), raw.length);\n return {\n names, total, shown: names.length,\n omitted: Math.max(0, total - names.length),\n };\n}\n\nexport function isSafeCompactMissingName(value: string): boolean {\n const normalized = value.trim();\n return normalized.length > 0\n && normalized.length <= COMPACT_MISSING_NAME_MAX_LENGTH\n && !hasControlCharacter(normalized)\n && safeMissingName.test(normalized);\n}\n\nexport function normalizeCompactDecisionEquivalence(\n decision: CompactDecisionV1,\n status: CompactStatus,\n canonicalTarget: string | undefined,\n targetIdentityEqual = false,\n persistedIdentityEqual = false,\n): void {\n removeEquivalentPersistedDecision(\n decision, status, canonicalTarget, persistedIdentityEqual,\n );\n if (decision.effectiveResolutionStatus === status)\n delete decision.effectiveResolutionStatus;\n if (targetIdentityEqual && canonicalTarget !== undefined\n && decision.effectiveTarget === canonicalTarget)\n delete decision.effectiveTarget;\n}\n\nexport function compactMissingRemediation(\n projection: CompactMissingNameProjection,\n artifact: 'detailed diagnostic' | 'detailed trace edge',\n): string {\n if (projection.total > 0 && projection.shown === projection.total)\n return 'Provide the missing variable names listed in details.';\n if (projection.shown > 0)\n return `Provide the listed names; inspect the correlated ${artifact} for omitted names.`;\n return `Inspect the correlated ${artifact} for missing variable names.`;\n}\n\nfunction removeEquivalentPersistedDecision(\n decision: CompactDecisionV1,\n status: CompactStatus,\n canonicalTarget: string | undefined,\n identityEqual: boolean,\n): void {\n if (!identityEqual\n || decision.persistedResolutionStatus !== status\n || (decision.effectiveResolutionStatus !== undefined\n && decision.persistedResolutionStatus\n !== decision.effectiveResolutionStatus))\n return;\n if (!decision.persistedTarget || canonicalTarget === undefined\n || decision.persistedTarget !== canonicalTarget)\n return;\n delete decision.persistedResolutionStatus;\n delete decision.persistedTarget;\n}\n\nfunction compactCount(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.max(0, Math.floor(value)) : 0;\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code <= 31 || code === 127) return true;\n }\n return false;\n}\n","import { redactText } from '../utils/redaction.js';\nimport type {\n ImplementationHint,\n TraceOptions,\n TraceStart,\n} from '../types.js';\nimport { compareBinary } from './010-traversal-scope.js';\nimport type {\n CompactDecisionInput,\n CompactDecisionV1,\n CompactDiagnosticDetailsV1,\n CompactDiagnosticRowV1,\n CompactEdgeObservation,\n CompactHintV1,\n CompactProjectedDiagnostic,\n CompactQueryV1,\n CompactStartV1,\n CompactStatusCountsV1,\n} from './014-compact-contract.js';\nimport {\n compactMissingRemediation,\n projectCompactMissingNames,\n type CompactMissingNameProjection,\n} from './021-compact-decision-normalization.js';\n\nconst compactDiagnosticMessages: Readonly<Record<string, string>> = {\n schema_upgrade_required: 'The database schema must be upgraded before tracing.',\n reindex_required: 'Current analyzer facts are required before tracing.',\n trace_workspace_ambiguous: 'The trace workspace is ambiguous.',\n trace_runtime_variables_missing: 'Runtime variable names are required to resolve a branch.',\n implementation_hint_mismatch: 'The implementation hint did not select one implementation.',\n selected_handler_provenance_mismatch: 'Selected handler provenance did not match its graph target.',\n selected_handler_target_not_found: 'The selected handler target is not indexed.',\n trace_start_implementation_unresolved: 'The trace start implementation is unresolved.',\n};\n\nexport function projectCompactDecision(\n input: CompactDecisionInput | undefined,\n): CompactDecisionV1 {\n if (!input) return {};\n const out = resolutionDecision(input);\n addNameDecision(out, input);\n addDynamicDecision(out, input);\n addImplementationDecision(out, input);\n addEventDecision(out, input);\n const reasonCode = compactSafeCode(input.reasonCode);\n if (reasonCode) out.reasonCode = reasonCode;\n addRemediationDecision(out, input);\n return out;\n}\n\nfunction resolutionDecision(input: CompactDecisionInput): CompactDecisionV1 {\n const out: CompactDecisionV1 = {};\n const status = compactSafeCode(input.effectiveResolutionStatus);\n if (status) out.effectiveResolutionStatus = status;\n if (!persistedResolutionDiffers(input)) return out;\n const persistedStatus = compactSafeCode(input.persistedResolutionStatus);\n if (persistedStatus) out.persistedResolutionStatus = persistedStatus;\n return out;\n}\n\nfunction addNameDecision(out: CompactDecisionV1, input: CompactDecisionInput): void {\n const projection = projectCompactMissingNames(\n input.missingVariableNames, input.missingVariableCount,\n );\n applyMissingProjection(out, projection);\n}\n\nfunction addDynamicDecision(out: CompactDecisionV1, input: CompactDecisionInput): void {\n if (input.dynamicMode) out.dynamicMode = input.dynamicMode;\n if (input.candidateCount !== undefined) out.candidateCount = compactCount(input.candidateCount);\n if (input.viableCandidateCount !== undefined)\n out.viableCandidateCount = compactCount(input.viableCandidateCount);\n if (input.rejectedCandidateCount !== undefined)\n out.rejectedCandidateCount = compactCount(input.rejectedCandidateCount);\n if (input.omittedCandidateCount !== undefined)\n out.omittedCandidateCount = compactCount(input.omittedCandidateCount);\n}\n\nfunction addImplementationDecision(\n out: CompactDecisionV1,\n input: CompactDecisionInput,\n): void {\n const strategy = compactSafeCode(input.implementationStrategy);\n if (strategy) out.implementationStrategy = strategy;\n if (input.implementationGuided !== undefined)\n out.implementationGuided = input.implementationGuided;\n if (input.implementationContextual !== undefined)\n out.implementationContextual = input.implementationContextual;\n}\n\nfunction addEventDecision(out: CompactDecisionV1, input: CompactDecisionInput): void {\n addEventCodes(out, input);\n if (input.eventSubscriptionCount !== undefined)\n out.eventSubscriptionCount = compactCount(input.eventSubscriptionCount);\n if (input.roleSiteMatchCount !== undefined)\n out.roleSiteMatchCount = compactCount(input.roleSiteMatchCount);\n}\n\nfunction addEventCodes(out: CompactDecisionV1, input: CompactDecisionInput): void {\n const values: Array<[keyof CompactDecisionV1, string | undefined]> = [\n ['eventMatchStrategy', compactSafeCode(input.eventMatchStrategy)],\n ['dispatchCertainty', compactSafeCode(input.dispatchCertainty)],\n ['associationStatus', compactSafeCode(input.associationStatus)],\n ['associationBasis', compactSafeCode(input.associationBasis)],\n ['eventScope', compactSafeCode(input.eventScope)],\n ['callRole', compactSafeCode(input.callRole)],\n ['factOrigin', compactSafeCode(input.factOrigin)],\n ['bodyExpansion', compactSafeCode(input.bodyExpansion)],\n ];\n for (const [key, value] of values) {\n if (value) Object.assign(out, { [key]: value });\n }\n}\n\nfunction addRemediationDecision(\n out: CompactDecisionV1,\n input: CompactDecisionInput,\n): void {\n const hint = decisionRemediation(input);\n if (!hint) return;\n out.remediationHint = hint;\n const total = Math.max(1, compactCount(input.remediationHintCount));\n out.omittedRemediationHintCount = Math.max(0, total - 1);\n}\n\nfunction decisionRemediation(input: CompactDecisionInput): string | undefined {\n if (input.remediationCode === 'provide_runtime_variables') {\n const projection = projectCompactMissingNames(\n input.missingVariableNames, input.missingVariableCount,\n );\n return compactMissingRemediation(projection, 'detailed trace edge');\n }\n return input.remediationCode\n ? compactRemediationHint(input.remediationCode) : undefined;\n}\n\nexport function projectCompactDiagnostics(\n values: Array<Record<string, unknown>>,\n): CompactProjectedDiagnostic[] {\n return values.map((value, index) => compactDiagnostic(value, index))\n .sort(compareCompactDiagnostic);\n}\n\nexport function projectCompactStart(start: TraceStart): CompactStartV1 {\n return {\n repo: start.repo ?? null,\n servicePath: start.servicePath ?? null,\n operation: start.operation ?? null,\n operationPath: start.operationPath ?? null,\n handler: start.handler ?? null,\n };\n}\n\nexport function projectCompactQuery(options: TraceOptions): CompactQueryV1 {\n const hints = (options.implementationHints ?? []).map(projectCompactHint)\n .sort((left, right) => compareBinary(\n JSON.stringify(left), JSON.stringify(right),\n ));\n return {\n depth: compactPositiveInteger(options.depth) ?? 25,\n includeAsync: Boolean(options.includeAsync),\n includeDb: Boolean(options.includeDb),\n includeExternal: Boolean(options.includeExternal),\n dynamicMode: options.dynamicMode ?? 'strict',\n maxDynamicCandidates: compactPositiveInteger(options.maxDynamicCandidates) ?? 5,\n suppliedVariableNames: compactSortedUnique(Object.keys(options.vars ?? {})),\n runtimeValuesOmitted: true,\n implementationRepo: options.implementationRepo ?? null,\n implementationHints: hints,\n };\n}\n\nfunction projectCompactHint(hint: ImplementationHint): CompactHintV1 {\n return {\n servicePath: hint.servicePath ?? null,\n operationPath: hint.operationPath ?? null,\n packageName: hint.packageName ?? null,\n repositoryName: hint.repositoryName ?? null,\n candidateFamily: hint.candidateFamily ?? null,\n implementationRepo: hint.implementationRepo ?? null,\n };\n}\n\nexport function compactStatusCounts(\n values: CompactEdgeObservation[],\n): CompactStatusCountsV1 {\n const counts: CompactStatusCountsV1 = {\n resolved: 0, terminal: 0, inferred: 0, dynamic: 0,\n ambiguous: 0, unresolved: 0, cycle: 0,\n };\n for (const value of values) counts[value.status] += 1;\n return counts;\n}\n\nexport function compactCompleteness(\n counts: CompactStatusCountsV1,\n diagnostics: CompactDiagnosticRowV1[],\n): 'complete' | 'partial' | 'blocked' {\n const total = compactStatusTotal(counts);\n if (total === 0 && diagnostics.some(compactBlockingDiagnostic)) return 'blocked';\n if (counts.dynamic + counts.ambiguous + counts.unresolved > 0) return 'partial';\n if (diagnostics.some((item) => item[1] === 'error' || item[1] === 'warning'))\n return 'partial';\n return 'complete';\n}\n\nexport function compactStatusTotal(counts: CompactStatusCountsV1): number {\n return counts.resolved + counts.terminal + counts.inferred + counts.dynamic\n + counts.ambiguous + counts.unresolved + counts.cycle;\n}\n\nfunction compactBlockingDiagnostic(item: CompactDiagnosticRowV1): boolean {\n if (item[1] === 'error') return true;\n return item[2] === 'schema_upgrade_required'\n || item[2] === 'reindex_required'\n || item[2] === 'trace_workspace_ambiguous'\n || item[2].startsWith('selector_')\n || item[2].startsWith('trace_start_');\n}\n\nfunction compactDiagnostic(\n value: Record<string, unknown>,\n index: number,\n): CompactProjectedDiagnostic {\n const code = compactSafeCode(value.code) ?? 'unknown_diagnostic';\n const details = compactDiagnosticDetails(value, code);\n return {\n index,\n severity: compactDiagnosticSeverity(value.severity),\n code,\n message: compactDiagnosticMessages[code] ?? `See detailed diagnostic at index ${index}.`,\n file: compactSafeSourceFile(value.sourceFile) ?? compactSafeSourceFile(value.file),\n line: compactPositiveInteger(value.sourceLine) ?? compactPositiveInteger(value.line),\n details: Object.keys(details).length > 0 ? details : undefined,\n };\n}\n\nfunction compactDiagnosticDetails(\n value: Record<string, unknown>,\n code: string,\n): CompactDiagnosticDetailsV1 {\n const out: CompactDiagnosticDetailsV1 = {};\n const reasonCode = compactSafeCode(value.reasonCode);\n if (reasonCode) out.reasonCode = reasonCode;\n if (code === 'trace_runtime_variables_missing') addDiagnosticNames(out, value);\n addDiagnosticCounts(out, value);\n const hint = compactDiagnosticRemediation(code, out);\n if (hint) {\n out.remediationHint = hint;\n out.omittedHintCount = Math.max(\n 0, compactDiagnosticHintCount(value, code, out) - 1,\n );\n }\n return out;\n}\n\nfunction addDiagnosticNames(\n out: CompactDiagnosticDetailsV1,\n value: Record<string, unknown>,\n): void {\n const projection = projectCompactMissingNames(\n compactStringArray(value.missingVariables), value.missingVariableCount,\n );\n applyMissingProjection(out, projection);\n}\n\nfunction applyMissingProjection(\n out: CompactDecisionV1 | CompactDiagnosticDetailsV1,\n projection: CompactMissingNameProjection,\n): void {\n if (projection.names.length > 0) out.missingVariableNames = projection.names;\n if (projection.total === 0) return;\n out.missingVariableCount = projection.total;\n out.shownMissingVariableCount = projection.shown;\n out.omittedMissingVariableCount = projection.omitted;\n}\n\nfunction addDiagnosticCounts(\n out: CompactDiagnosticDetailsV1,\n value: Record<string, unknown>,\n): void {\n if (value.candidateCount !== undefined)\n out.candidateCount = compactCount(value.candidateCount);\n if (value.viableCandidateCount !== undefined)\n out.viableCandidateCount = compactCount(value.viableCandidateCount);\n if (value.rejectedCandidateCount !== undefined)\n out.rejectedCandidateCount = compactCount(value.rejectedCandidateCount);\n}\n\nfunction compareCompactDiagnostic(\n left: CompactProjectedDiagnostic,\n right: CompactProjectedDiagnostic,\n): number {\n const ranks = { error: 0, warning: 1, info: 2 } as const;\n return ranks[left.severity] - ranks[right.severity]\n || compareBinary(left.code, right.code)\n || compareBinary(left.file ?? '', right.file ?? '')\n || (left.line ?? Number.MAX_SAFE_INTEGER) - (right.line ?? Number.MAX_SAFE_INTEGER)\n || compareBinary(left.message, right.message)\n || left.index - right.index;\n}\n\nfunction persistedResolutionDiffers(input: CompactDecisionInput): boolean {\n return input.persistedResolutionStatus !== undefined\n && (input.persistedResolutionStatus !== input.effectiveResolutionStatus\n || JSON.stringify(input.persistedTarget) !== JSON.stringify(input.effectiveTarget));\n}\n\nfunction compactDiagnosticSeverity(value: unknown): 'error' | 'warning' | 'info' {\n return value === 'error' || value === 'warning' ? value : 'info';\n}\n\nfunction compactDiagnosticRemediation(\n code: string,\n details: CompactDiagnosticDetailsV1,\n): string | undefined {\n if (code === 'schema_upgrade_required' || code === 'reindex_required')\n return compactRemediationHint('reindex_and_link');\n if (code === 'trace_runtime_variables_missing')\n return compactMissingRemediation({\n names: details.missingVariableNames ?? [],\n total: details.missingVariableCount ?? 0,\n shown: details.shownMissingVariableCount ?? 0,\n omitted: details.omittedMissingVariableCount ?? 0,\n }, 'detailed diagnostic');\n if (code === 'implementation_hint_mismatch')\n return compactRemediationHint('select_implementation');\n return undefined;\n}\n\nfunction compactDiagnosticHintCount(\n value: Record<string, unknown>,\n code: string,\n details: CompactDiagnosticDetailsV1,\n): number {\n const missing = code === 'trace_runtime_variables_missing'\n ? details.missingVariableCount ?? 0 : 0;\n return Math.max(1, missing, compactArrayLength(value.suggestions),\n compactArrayLength(value.implementationHintSuggestions),\n compactArrayLength(value.copyableExamples), compactCount(value.suggestionCount),\n compactCount(value.implementationHintSuggestionCount),\n compactCount(value.copyableExampleCount));\n}\n\nfunction compactRemediationHint(code: string): string | undefined {\n if (code === 'provide_runtime_variables') return 'Provide the missing variable names listed in details.';\n if (code === 'select_implementation') return 'Select one implementation with a scoped implementation hint.';\n if (code === 'reindex_and_link') return 'Force reindex, then force relink the workspace.';\n if (code === 'inspect_detailed_edge') return 'Inspect the correlated detailed trace edge.';\n return undefined;\n}\n\nexport function compactSafeCode(value: unknown): string | undefined {\n return typeof value === 'string' && /^[a-z][a-z0-9_.-]{0,79}$/.test(value)\n ? value : undefined;\n}\n\nexport function projectCompactDecisionTarget(\n kindValue: string,\n id: string,\n): string | undefined {\n const kind = compactSafeCode(kindValue);\n if (!kind || id.length === 0 || id.length > 240 || /[\\r\\n]/.test(id)) return undefined;\n if (/^[a-z]+:\\/\\//i.test(id)\n || /\\b(?:bearer|token|secret|password|credential|authorization)\\b/i.test(id))\n return undefined;\n const redacted = redactText(id);\n return redacted === id ? `${kind}:${redacted}` : undefined;\n}\n\nfunction compactSafeSourceFile(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 && value.length <= 512\n && !/^[a-z]+:\\/\\//i.test(value) && !/[\\r\\n]/.test(value) ? value : undefined;\n}\n\nfunction compactCount(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.max(0, Math.floor(value)) : 0;\n}\n\nfunction compactPositiveInteger(value: unknown): number | undefined {\n const normalized = compactCount(value);\n return normalized > 0 ? normalized : undefined;\n}\n\nfunction compactStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction compactArrayLength(value: unknown): number {\n return Array.isArray(value) ? value.length : 0;\n}\n\nfunction compactSortedUnique(values: string[]): string[] {\n return [...new Set(values)].sort(compareBinary);\n}\n","import type {\n CompactDecisionTargetInput,\n CompactDecisionV1,\n CompactEdgeObservation,\n} from './014-compact-contract.js';\nimport { projectCompactDecision } from './020-compact-field-projection.js';\nimport { normalizeCompactDecisionEquivalence } from\n './021-compact-decision-normalization.js';\n\nexport interface CompactDecisionNode {\n key?: string;\n decisionTarget?: string;\n}\n\nfunction resolvedNode(\n value: CompactDecisionTargetInput | undefined,\n resolve: (input: CompactDecisionTargetInput) => CompactDecisionNode,\n): CompactDecisionNode | undefined {\n return value ? resolve(value) : undefined;\n}\n\nfunction applyEffectiveTarget(\n decision: CompactDecisionV1,\n effective: CompactDecisionNode | undefined,\n): void {\n if (effective?.decisionTarget)\n decision.effectiveTarget = effective.decisionTarget;\n}\n\nfunction applyPersistedTarget(\n decision: CompactDecisionV1,\n persisted: CompactDecisionNode | undefined,\n status: string | undefined,\n): void {\n if (persisted?.decisionTarget && status)\n decision.persistedTarget = persisted.decisionTarget;\n}\n\nfunction sameCanonicalNode(\n left: CompactDecisionNode | undefined,\n right: CompactDecisionNode,\n): boolean {\n return left?.key !== undefined && left.key === right.key;\n}\n\nfunction persistedCanonical(\n persisted: CompactDecisionNode | undefined,\n effective: CompactDecisionNode | undefined,\n target: CompactDecisionNode,\n): boolean {\n if (!sameCanonicalNode(persisted, target)) return false;\n return effective?.key === undefined || effective.key === target.key;\n}\n\nexport function projectObservationDecision(\n input: CompactEdgeObservation,\n target: CompactDecisionNode,\n resolve: (value: CompactDecisionTargetInput) => CompactDecisionNode,\n): CompactDecisionV1 {\n const decision = projectCompactDecision(input.decision);\n const source = input.decision;\n const effective = resolvedNode(source?.effectiveTarget, resolve);\n const persisted = resolvedNode(source?.persistedTarget, resolve);\n applyEffectiveTarget(decision, effective);\n applyPersistedTarget(\n decision, persisted, source?.persistedResolutionStatus,\n );\n normalizeCompactDecisionEquivalence(\n decision,\n input.status,\n target.decisionTarget,\n sameCanonicalNode(effective, target),\n persistedCanonical(persisted, effective, target),\n );\n return decision;\n}\n","import type { Db } from '../db/connection.js';\nimport { redactText } from '../utils/redaction.js';\nimport { compareBinary as binaryCompare } from './010-traversal-scope.js';\nimport {\n type CompactDecisionTargetInput,\n type CompactProjectedDiagnostic,\n type CompactDecisionV1,\n type CompactDiagnosticRowV1,\n type CompactEdgeDetailsV1,\n type CompactEdgeObservation,\n type CompactEdgeRowV1,\n type CompactGraphV1,\n type CompactProjectionInput,\n type CompactReferenceGroupV1,\n type CompactReferenceInput,\n type CompactReferencesV1,\n type CompactSemanticEndpoint,\n type CompactSourceSite,\n type CompactStatus,\n} from './014-compact-contract.js';\nimport {\n compactCompleteness, compactSafeCode, compactStatusCounts, compactStatusTotal,\n projectCompactDecisionTarget, projectCompactDiagnostics,\n projectCompactQuery, projectCompactStart,\n} from './020-compact-field-projection.js';\nimport {\n projectObservationDecision,\n type CompactDecisionNode,\n} from './024-compact-observation-decision.js';\n\nconst REFERENCE_LIMIT = 5;\n\ninterface ResolvedNode {\n key: string;\n kind: string;\n label: string;\n repo?: string;\n file?: string;\n line?: number;\n synthetic: boolean;\n decisionTarget?: string;\n}\n\ninterface ResolvedObservation {\n input: CompactEdgeObservation;\n source: ResolvedNode;\n target: ResolvedNode;\n decision: CompactDecisionV1;\n}\n\ninterface EdgeAggregate {\n source: ResolvedNode;\n target: ResolvedNode;\n step: number;\n type: string;\n status: CompactStatus;\n confidence: number;\n decision: CompactDecisionV1;\n ordinals: number[];\n refs: CompactReferenceInput[];\n site?: CompactSourceSite;\n}\n\nexport function projectCompactGraph(input: CompactProjectionInput): CompactGraphV1 {\n validateObservationOrdinals(input.observations, input.trace.edges.length);\n const resolved = input.observations.map((item) => resolveObservation(input.db, item));\n const diagnostics = projectCompactDiagnostics(input.trace.diagnostics);\n const aggregates = aggregateObservations(resolved);\n const nodes = canonicalNodes(resolved);\n const repos = sortedUnique(nodes.flatMap((node) => node.repo ? [node.repo] : []));\n const files = sortedUnique([\n ...nodes.flatMap((node) => node.file ? [node.file] : []),\n ...diagnostics.flatMap((item) => item.file ? [item.file] : []),\n ]);\n const nodeRows = compactNodeRows(nodes, repos, files);\n const edgeRows = compactEdgeRows(aggregates, nodes);\n const diagnosticRows = compactDiagnosticRows(diagnostics, files);\n const result = compactResult(input, nodes, nodeRows, edgeRows, diagnosticRows, repos, files);\n validateCompactResult(result);\n return result;\n}\n\nfunction resolveObservation(db: Db, input: CompactEdgeObservation): ResolvedObservation {\n const target = resolveEndpoint(db, input.target, input.ordinal, 'target', input.site);\n return {\n input,\n source: resolveEndpoint(db, input.source, input.ordinal, 'source', input.site),\n target,\n decision: observationDecision(db, input, target),\n };\n}\n\nfunction observationDecision(\n db: Db,\n input: CompactEdgeObservation,\n target: ResolvedNode,\n): CompactDecisionV1 {\n return projectObservationDecision(\n input, target, (value) => decisionInputNode(db, value),\n );\n}\n\nfunction decisionInputNode(\n db: Db,\n target: CompactDecisionTargetInput,\n): CompactDecisionNode {\n const numeric = numericId(target.id);\n if (target.kind === 'operation' && numeric !== undefined)\n return operationNode(db, numeric) ?? {};\n if (target.kind === 'symbol' && numeric !== undefined)\n return symbolNode(db, numeric) ?? {};\n if (target.kind === 'handler_method' && numeric !== undefined)\n return handlerNode(db, numeric) ?? {};\n return {\n decisionTarget: projectCompactDecisionTarget(target.kind, target.id),\n };\n}\n\nfunction resolveEndpoint(\n db: Db,\n endpoint: CompactSemanticEndpoint,\n ordinal: number,\n side: 'source' | 'target',\n site: CompactSourceSite | undefined,\n): ResolvedNode {\n if (endpoint.kind === 'operation')\n return resolvedOrUnavailable(operationNode(db, endpoint.operationId), side,\n 'operation', ordinal, site);\n if (endpoint.kind === 'symbol')\n return resolvedOrUnavailable(symbolNode(db, endpoint.symbolId), side,\n 'symbol', ordinal, site);\n if (endpoint.kind === 'handler_method')\n return resolvedOrUnavailable(handlerNode(db, endpoint.handlerMethodId), side,\n 'handler_method', ordinal, site);\n if (endpoint.kind === 'event') return eventNode(endpoint.workspaceId, endpoint.eventName);\n if (endpoint.kind === 'target') return targetNode(db, endpoint, ordinal, side, site);\n if (endpoint.kind === 'call_site') return callSiteNode(db, endpoint);\n if (endpoint.kind === 'scope') return scopeNode(db, endpoint);\n return unavailableNode(endpoint.side, endpoint.endpointKind,\n endpoint.detailedEdgeIndex, endpoint.site ?? site);\n}\n\nfunction resolvedOrUnavailable(\n node: ResolvedNode | undefined,\n side: 'source' | 'target',\n kind: string,\n ordinal: number,\n site?: CompactSourceSite,\n): ResolvedNode {\n return node ?? unavailableNode(side, kind, ordinal, site);\n}\n\nfunction operationNode(db: Db, operationId: number): ResolvedNode | undefined {\n const row = db.prepare(`SELECT o.id,o.operation_name operationName,\n o.operation_path operationPath,o.source_file sourceFile,o.source_line sourceLine,\n s.service_path servicePath,r.workspace_id workspaceId,r.relative_path relativePath,\n r.name repoName\n FROM cds_operations o JOIN cds_services s ON s.id=o.service_id\n JOIN repositories r ON r.id=s.repo_id WHERE o.id=?`).get(operationId);\n if (!row) return undefined;\n const operationPath = stringValue(row.operationPath);\n const servicePath = stringValue(row.servicePath);\n const repo = repositoryLabel(row);\n const workspaceId = numberValue(row.workspaceId);\n if (!operationPath) return undefined;\n if (!servicePath) return undefined;\n if (!repo) return undefined;\n if (workspaceId === undefined) return undefined;\n const operationName = stringValue(row.operationName);\n return {\n key: canonicalKey('operation', workspaceId, repo, servicePath, operationPath),\n kind: 'operation',\n label: `${servicePath}:${operationName || operationPath}`,\n repo,\n file: stringValue(row.sourceFile),\n line: numberValue(row.sourceLine),\n synthetic: false,\n decisionTarget: projectCompactDecisionTarget('operation',\n `${repo}:${servicePath}:${operationPath}`),\n };\n}\n\nfunction symbolNode(db: Db, symbolId: number): ResolvedNode | undefined {\n const row = db.prepare(`SELECT s.id,s.kind,s.qualified_name qualifiedName,\n s.source_file sourceFile,s.start_line startLine,s.start_offset startOffset,\n s.end_offset endOffset,r.workspace_id workspaceId,r.relative_path relativePath,\n r.name repoName FROM symbols s JOIN repositories r ON r.id=s.repo_id\n WHERE s.id=?`).get(symbolId);\n return symbolNodeFromRow(row);\n}\n\nfunction symbolNodeFromRow(row: Record<string, unknown> | undefined): ResolvedNode | undefined {\n if (!row) return undefined;\n const name = stringValue(row.qualifiedName);\n const repo = repositoryLabel(row);\n const file = stringValue(row.sourceFile);\n const workspaceId = numberValue(row.workspaceId);\n if (!name) return undefined;\n if (!repo) return undefined;\n if (!file) return undefined;\n if (workspaceId === undefined) return undefined;\n const startOffset = numberValue(row.startOffset);\n const endOffset = numberValue(row.endOffset);\n return {\n key: canonicalKey('symbol', workspaceId, repo, file,\n startOffset, endOffset, name),\n kind: 'symbol', label: name, repo, file,\n line: numberValue(row.startLine), synthetic: false,\n decisionTarget: projectCompactDecisionTarget('symbol',\n `${repo}:${file}:${startOffset ?? ''}:${endOffset ?? ''}:${name}`),\n };\n}\n\nfunction handlerNode(db: Db, handlerMethodId: number): ResolvedNode | undefined {\n const symbol = db.prepare(`SELECT s.kind,s.qualified_name qualifiedName,\n s.source_file sourceFile,s.start_line startLine,s.start_offset startOffset,\n s.end_offset endOffset,r.workspace_id workspaceId,r.relative_path relativePath,\n r.name repoName\n FROM handler_methods hm JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id LEFT JOIN symbols s\n ON s.repo_id=hc.repo_id AND s.source_file=hc.source_file\n AND s.qualified_name=hc.class_name || '.' || hm.method_name\n AND s.start_line=hm.source_line WHERE hm.id=?\n ORDER BY s.id LIMIT 1`).get(handlerMethodId);\n const resolved = symbolNodeFromRow(symbol);\n return resolved ?? standaloneHandlerNode(db, handlerMethodId);\n}\n\nfunction standaloneHandlerNode(db: Db, handlerMethodId: number): ResolvedNode | undefined {\n const row = db.prepare(`SELECT hm.method_name methodName,hm.source_file sourceFile,\n hm.source_line sourceLine,hc.class_name className,r.workspace_id workspaceId,\n r.relative_path relativePath,r.name repoName FROM handler_methods hm\n JOIN handler_classes hc ON hc.id=hm.handler_class_id\n JOIN repositories r ON r.id=hc.repo_id WHERE hm.id=?`).get(handlerMethodId);\n if (!row) return undefined;\n const methodName = stringValue(row.methodName);\n const className = stringValue(row.className);\n const repo = repositoryLabel(row);\n const file = stringValue(row.sourceFile);\n const workspaceId = numberValue(row.workspaceId);\n if (!methodName) return undefined;\n if (!className) return undefined;\n if (!repo) return undefined;\n if (!file) return undefined;\n if (workspaceId === undefined) return undefined;\n const sourceLine = numberValue(row.sourceLine);\n return {\n key: canonicalKey('handler_method', workspaceId, repo, file,\n sourceLine, className, methodName),\n kind: 'handler_method', label: `${className}.${methodName}`, repo, file,\n line: sourceLine, synthetic: false,\n decisionTarget: projectCompactDecisionTarget('handler_method',\n `${repo}:${file}:${sourceLine ?? ''}:${className}.${methodName}`),\n };\n}\n\nfunction eventNode(workspaceId: number, eventName: string): ResolvedNode {\n return {\n key: canonicalKey('event', workspaceId, eventName),\n kind: 'event', label: eventName, synthetic: false,\n decisionTarget: projectCompactDecisionTarget('event', eventName),\n };\n}\n\nfunction targetNode(\n db: Db,\n endpoint: Extract<CompactSemanticEndpoint, { kind: 'target' }>,\n ordinal: number,\n side: 'source' | 'target',\n site: CompactSourceSite | undefined,\n): ResolvedNode {\n const linked = linkedTargetNode(db, endpoint.targetKind, endpoint.targetId);\n if (linked !== undefined)\n return linked ?? unavailableNode(side, endpoint.targetKind, ordinal, site);\n const repo = endpoint.repositoryId === undefined\n ? undefined : repositoryById(db, endpoint.repositoryId);\n return {\n key: canonicalKey('target', endpoint.workspaceId, repo,\n endpoint.targetKind, endpoint.targetId),\n kind: compactTargetKind(endpoint.targetKind),\n label: endpoint.targetId || endpoint.targetKind,\n repo,\n synthetic: false,\n decisionTarget: projectCompactDecisionTarget(endpoint.targetKind, endpoint.targetId),\n };\n}\n\nfunction linkedTargetNode(\n db: Db,\n kind: string,\n id: string,\n): ResolvedNode | null | undefined {\n const numeric = numericId(id);\n if (kind === 'operation') {\n if (numeric === undefined) return null;\n return operationNode(db, numeric) ?? null;\n }\n if (kind === 'symbol') {\n if (numeric === undefined) return null;\n return symbolNode(db, numeric) ?? null;\n }\n if (kind === 'handler_method') {\n if (numeric === undefined) return null;\n return handlerNode(db, numeric) ?? null;\n }\n return undefined;\n}\n\nfunction callSiteNode(\n db: Db,\n endpoint: Extract<CompactSemanticEndpoint, { kind: 'call_site' }>,\n): ResolvedNode {\n const repo = repositoryById(db, endpoint.repositoryId) ?? endpoint.repositoryName;\n const span = endpoint.startOffset === undefined || endpoint.endOffset === undefined\n ? ['line', endpoint.sourceLine] : [endpoint.startOffset, endpoint.endOffset];\n return {\n key: canonicalKey('call_site', endpoint.workspaceId, repo,\n endpoint.sourceFile, ...span, endpoint.callId),\n kind: 'call_site',\n label: `${repo}:${endpoint.sourceFile}:${endpoint.sourceLine}`,\n repo, file: endpoint.sourceFile, line: endpoint.sourceLine, synthetic: false,\n decisionTarget: projectCompactDecisionTarget('call_site',\n `${repo}:${endpoint.sourceFile}:${span.join(':')}`),\n };\n}\n\nfunction scopeNode(\n db: Db,\n endpoint: Extract<CompactSemanticEndpoint, { kind: 'scope' }>,\n): ResolvedNode {\n const repo = endpoint.repositoryId === undefined\n ? undefined : repositoryById(db, endpoint.repositoryId);\n const files = sortedUnique(endpoint.sourceFiles);\n const symbols = sortedUnique(endpoint.symbolIds.flatMap((id) => {\n const key = symbolNode(db, id)?.key;\n return key ? [key] : [];\n }));\n const identity = canonicalKey('scope', endpoint.workspaceId, repo, files, symbols);\n return {\n key: symbols.length > 0 || files.length > 0 ? identity\n : canonicalKey('scope', endpoint.workspaceId, repo, endpoint.structuralKey),\n kind: 'scope',\n label: repo ? `scope:${repo}` : 'scope:workspace',\n repo, file: files.length === 1 ? files[0] : undefined,\n synthetic: false,\n decisionTarget: projectCompactDecisionTarget('scope', identity),\n };\n}\n\nfunction unavailableNode(\n side: 'source' | 'target',\n endpointKind: string,\n ordinal: number,\n site?: CompactSourceSite,\n): ResolvedNode {\n return {\n key: canonicalKey('unavailable', side, endpointKind,\n site?.repository, site?.sourceFile, site?.startOffset,\n site?.endOffset, site?.sourceLine, ordinal),\n kind: 'synthetic',\n label: `${side}:${compactSafeCode(endpointKind) ?? 'unavailable'}`,\n repo: site?.repository,\n file: site?.sourceFile,\n line: site?.sourceLine,\n synthetic: true,\n };\n}\n\nfunction aggregateObservations(items: ResolvedObservation[]): EdgeAggregate[] {\n const groups = new Map<string, EdgeAggregate>();\n for (const item of items) {\n const key = aggregationKey(item);\n const current = groups.get(key);\n if (current) appendAggregate(current, item);\n else groups.set(key, createAggregate(item));\n }\n return [...groups.values()].map(finalizeAggregate);\n}\n\nfunction aggregationKey(item: ResolvedObservation): string {\n return JSON.stringify([\n item.input.step, item.input.type, item.source.key, item.target.key,\n item.input.status, normalizedConfidence(item.input.confidence), item.decision,\n ]);\n}\n\nfunction createAggregate(item: ResolvedObservation): EdgeAggregate {\n return {\n source: item.source, target: item.target, step: item.input.step,\n type: item.input.type, status: item.input.status,\n confidence: normalizedConfidence(item.input.confidence),\n decision: item.decision, ordinals: [item.input.ordinal],\n refs: item.input.refs ? [item.input.refs] : [], site: item.input.site,\n };\n}\n\nfunction appendAggregate(group: EdgeAggregate, item: ResolvedObservation): void {\n group.ordinals.push(item.input.ordinal);\n if (item.input.refs) group.refs.push(item.input.refs);\n if (compareSite(item.input.site, group.site) < 0) group.site = item.input.site;\n}\n\nfunction finalizeAggregate(group: EdgeAggregate): EdgeAggregate {\n group.ordinals.sort((left, right) => left - right);\n return group;\n}\n\nfunction canonicalNodes(items: ResolvedObservation[]): ResolvedNode[] {\n const nodes = new Map<string, ResolvedNode>();\n for (const node of items.flatMap((item) => [item.source, item.target])) {\n const existing = nodes.get(node.key);\n if (!existing || compareNodeBody(node, existing) < 0) nodes.set(node.key, node);\n }\n return [...nodes.values()].sort((left, right) => binaryCompare(left.key, right.key));\n}\n\nfunction compactNodeRows(\n nodes: ResolvedNode[],\n repos: string[],\n files: string[],\n): CompactGraphV1['nodes'] {\n const repoIndexes = indexMap(repos);\n const fileIndexes = indexMap(files);\n return nodes.map((node, index) => [\n `n${index}`, node.kind, redactText(node.label),\n node.repo === undefined ? null : repoIndexes.get(node.repo) ?? null,\n node.file === undefined ? null : fileIndexes.get(node.file) ?? null,\n node.line ?? null,\n ]);\n}\n\nfunction compactEdgeRows(\n groups: EdgeAggregate[],\n nodes: ResolvedNode[],\n): CompactGraphV1['edges'] {\n const nodeIndexes = new Map(nodes.map((node, index) => [node.key, index]));\n const sorted = [...groups].sort((left, right) => compareAggregate(left, right, nodeIndexes));\n return sorted.map((group, index) => edgeRow(group, index, nodeIndexes));\n}\n\nfunction edgeRow(\n group: EdgeAggregate,\n index: number,\n nodeIndexes: Map<string, number>,\n): CompactEdgeRowV1 {\n const source = nodeIndexes.get(group.source.key);\n const target = nodeIndexes.get(group.target.key);\n if (source === undefined || target === undefined) throw compactError('edge_node_missing');\n return [\n `e${index}`, group.ordinals, group.step, group.type, `n${source}`, `n${target}`,\n group.status, group.confidence, group.ordinals.length, edgeDetails(group),\n ];\n}\n\nfunction edgeDetails(group: EdgeAggregate): CompactEdgeDetailsV1 | null {\n const refs = projectReferences(group.refs);\n if (Object.keys(group.decision).length === 0 && Object.keys(refs).length === 0) return null;\n return { decision: group.decision, refs };\n}\n\nfunction projectReferences(values: CompactReferenceInput[]): CompactReferencesV1 {\n const out: CompactReferencesV1 = {};\n setReference(out, 'graphEdgeIds', values.flatMap((item) => item.graphEdgeIds ?? []));\n setReference(out, 'outboundCallIds', values.flatMap((item) => item.outboundCallIds ?? []));\n setReference(out, 'subscribeCallIds', values.flatMap((item) => item.subscribeCallIds ?? []));\n setReference(out, 'symbolCallIds', values.flatMap((item) => item.symbolCallIds ?? []));\n setReference(out, 'operationIds', values.flatMap((item) => item.operationIds ?? []));\n setReference(out, 'symbolIds', values.flatMap((item) => item.symbolIds ?? []));\n setReference(out, 'handlerMethodIds', values.flatMap((item) => item.handlerMethodIds ?? []));\n return out;\n}\n\nfunction setReference(\n out: CompactReferencesV1,\n key: keyof CompactReferencesV1,\n values: Array<number | string>,\n): void {\n const unique = uniqueReferences(values);\n if (unique.length === 0) return;\n const shown = unique.slice(0, REFERENCE_LIMIT);\n out[key] = {\n values: shown, total: unique.length, shown: shown.length,\n omitted: unique.length - shown.length,\n } satisfies CompactReferenceGroupV1;\n}\n\nfunction compactDiagnosticRows(\n diagnostics: CompactProjectedDiagnostic[],\n files: string[],\n): CompactDiagnosticRowV1[] {\n const fileIndexes = indexMap(files);\n return diagnostics.map((item) => [\n item.index, item.severity, item.code, item.message,\n item.file === undefined ? null : fileIndexes.get(item.file) ?? null,\n item.line ?? null, item.details ?? null,\n ]);\n}\n\nfunction compactResult(\n input: CompactProjectionInput,\n resolvedNodes: ResolvedNode[],\n nodes: CompactGraphV1['nodes'],\n edges: CompactGraphV1['edges'],\n diagnostics: CompactGraphV1['diagnostics'],\n repos: string[],\n files: string[],\n): CompactGraphV1 {\n const statusCounts = compactStatusCounts(input.observations);\n return {\n schema: 'service-flow/compact-graph@1',\n start: projectCompactStart(input.start),\n query: projectCompactQuery(input.options),\n source: input.source,\n summary: {\n completeness: compactCompleteness(statusCounts, diagnostics),\n fullTraceNodes: input.trace.nodes.length,\n fullTraceEdges: input.trace.edges.length,\n fullTraceDiagnostics: input.trace.diagnostics.length,\n nodes: nodes.length, edges: edges.length,\n collapsedEdges: input.trace.edges.length - edges.length,\n statusCounts,\n projection: {\n evidence: 'summary-only',\n syntheticEndpoints: resolvedNodes.filter((node) => node.synthetic).length,\n omittedUnreferencedFullNodes: omittedDetailedNodeCount(input),\n },\n },\n repos, files,\n nodeColumns: ['id', 'kind', 'label', 'repo', 'file', 'line'],\n nodes,\n edgeColumns: ['id', 'traceOrdinals', 'step', 'type', 'from', 'to',\n 'status', 'confidence', 'count', 'details'],\n edges,\n diagnosticColumns: ['fullDiagnosticIndex', 'severity', 'code', 'message',\n 'file', 'line', 'details'],\n diagnostics,\n };\n}\n\nfunction omittedDetailedNodeCount(input: CompactProjectionInput): number {\n const referenced = new Set(input.observations.flatMap((item) => [\n ...detailedNodeIds(item.source), ...detailedNodeIds(item.target),\n ]));\n return input.trace.nodes.filter((node) => {\n const id = typeof node.id === 'string' ? node.id : undefined;\n return id === undefined || !referenced.has(id);\n }).length;\n}\n\nfunction detailedNodeIds(endpoint: CompactSemanticEndpoint): string[] {\n if (endpoint.kind === 'operation') return [`operation:${endpoint.operationId}`];\n if (endpoint.kind === 'symbol') return [`symbol:${endpoint.symbolId}`];\n if (endpoint.kind === 'handler_method')\n return [`handler_method:${endpoint.handlerMethodId}`];\n if (endpoint.kind === 'event') return [`event:${endpoint.eventName}`];\n if (endpoint.kind === 'target') return [`${endpoint.targetKind}:${endpoint.targetId}`];\n if (endpoint.kind === 'call_site') return [`call:${endpoint.callId}`];\n if (endpoint.kind === 'scope')\n return endpoint.symbolIds.map((symbolId) => `symbol:${symbolId}`);\n return [];\n}\n\nfunction validateObservationOrdinals(\n observations: CompactEdgeObservation[],\n fullEdgeCount: number,\n): void {\n const ordinals = observations.map((item) => item.ordinal).sort((left, right) => left - right);\n if (ordinals.length !== fullEdgeCount) throw compactError('observation_count_mismatch');\n if (ordinals.some((value, index) => value !== index))\n throw compactError('trace_ordinal_partition_invalid');\n}\n\nfunction validateCompactResult(result: CompactGraphV1): void {\n if (result.summary.nodes !== result.nodes.length) throw compactError('node_count_mismatch');\n if (result.summary.edges !== result.edges.length) throw compactError('edge_count_mismatch');\n const statusTotal = compactStatusTotal(result.summary.statusCounts);\n if (statusTotal !== result.summary.fullTraceEdges) throw compactError('status_count_mismatch');\n const edgeTotal = result.edges.reduce((sum, edge) => sum + edge[8], 0);\n if (edgeTotal !== result.summary.fullTraceEdges) throw compactError('edge_member_count_mismatch');\n if (result.edges.some((edge) => edge.length !== 10 || edge[8] !== edge[1].length))\n throw compactError('edge_tuple_invalid');\n if (result.nodes.some((node) => node.length !== 6)) throw compactError('node_tuple_invalid');\n if (result.diagnostics.some((item) => item.length !== 7)) throw compactError('diagnostic_tuple_invalid');\n validateResultOrdinals(result);\n}\n\nfunction validateResultOrdinals(result: CompactGraphV1): void {\n const ordinals = result.edges.flatMap((edge) => edge[1]).sort((left, right) => left - right);\n if (ordinals.some((value, index) => value !== index)\n || ordinals.length !== result.summary.fullTraceEdges)\n throw compactError('output_trace_ordinal_partition_invalid');\n if (result.summary.collapsedEdges !== result.summary.fullTraceEdges - result.summary.edges)\n throw compactError('collapsed_edge_count_mismatch');\n}\n\nfunction compareAggregate(\n left: EdgeAggregate,\n right: EdgeAggregate,\n nodeIndexes: Map<string, number>,\n): number {\n return left.step - right.step\n || indexFor(nodeIndexes, left.source.key) - indexFor(nodeIndexes, right.source.key)\n || indexFor(nodeIndexes, left.target.key) - indexFor(nodeIndexes, right.target.key)\n || binaryCompare(left.type, right.type)\n || binaryCompare(left.status, right.status)\n || compareSite(left.site, right.site)\n || (left.ordinals[0] ?? 0) - (right.ordinals[0] ?? 0);\n}\n\nfunction compareSite(left: CompactSourceSite | undefined, right: CompactSourceSite | undefined): number {\n return binaryCompare(siteSortKey(left), siteSortKey(right));\n}\n\nfunction siteSortKey(site: CompactSourceSite | undefined): string {\n return JSON.stringify([\n site?.repository ?? '', site?.sourceFile ?? '',\n sortableNumber(site?.startOffset), sortableNumber(site?.endOffset),\n sortableNumber(site?.sourceLine),\n ]);\n}\n\nfunction sortableNumber(value: number | undefined): string {\n return value === undefined ? 'z' : `n${String(value).padStart(16, '0')}`;\n}\n\nfunction compareNodeBody(left: ResolvedNode, right: ResolvedNode): number {\n return binaryCompare(JSON.stringify([\n left.kind, left.label, left.repo, left.file, left.line,\n ]), JSON.stringify([\n right.kind, right.label, right.repo, right.file, right.line,\n ]));\n}\n\nfunction compactTargetKind(kind: string): string {\n if (kind === 'db_entity') return 'database_entity';\n if (kind === 'operation_candidate') return 'dynamic_target';\n if (kind === 'symbol_reference' || kind === 'subscription_handler')\n return 'unresolved_target';\n return compactSafeCode(kind) ?? 'target';\n}\n\nfunction repositoryById(db: Db, repositoryId: number): string | undefined {\n const row = db.prepare('SELECT relative_path relativePath,name repoName FROM repositories WHERE id=?')\n .get(repositoryId);\n return repositoryLabel(row);\n}\n\nfunction repositoryLabel(row: Record<string, unknown> | undefined): string | undefined {\n return stringValue(row?.relativePath) ?? stringValue(row?.repoName);\n}\n\nfunction normalizedConfidence(value: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 0;\n}\n\nfunction numericId(value: string): number | undefined {\n return /^\\d+$/.test(value) ? Number(value) : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction uniqueReferences(values: Array<number | string>): Array<number | string> {\n const unique = new Map(values.map((value) => [`${typeof value}:${String(value)}`, value]));\n return [...unique.values()].sort((left, right) => {\n if (typeof left === 'number' && typeof right === 'number') return left - right;\n return binaryCompare(`${typeof left}:${String(left)}`, `${typeof right}:${String(right)}`);\n });\n}\n\nfunction sortedUnique(values: string[]): string[] {\n return [...new Set(values)].sort(binaryCompare);\n}\n\nfunction canonicalKey(...parts: unknown[]): string {\n return JSON.stringify(parts);\n}\n\nfunction indexMap(values: string[]): Map<string, number> {\n return new Map(values.map((value, index) => [value, index]));\n}\n\nfunction indexFor(values: Map<string, number>, key: string): number {\n const value = values.get(key);\n if (value === undefined) throw compactError('canonical_node_index_missing');\n return value;\n}\n\nfunction compactError(code: string): Error {\n return new Error(`compact_graph_invariant:${code}`);\n}\n","import type { Db } from '../db/connection.js';\nimport { CURRENT_SCHEMA_VERSION } from '../db/migrations.js';\nimport type { CompactGraphV1, CompactSourceContext } from './014-compact-contract.js';\nimport { CompactObservationCollector } from './014-compact-contract.js';\nimport { projectCompactGraph } from './016-compact-projector.js';\nimport { traceWithObserver } from './trace-engine.js';\nimport type { TraceOptions, TraceResult, TraceStart } from '../types.js';\n\nexport interface CompactTraceExecution {\n trace: TraceResult;\n compact: CompactGraphV1;\n}\n\nexport function compactTrace(\n db: Db,\n start: TraceStart,\n options: TraceOptions,\n): CompactGraphV1 {\n return traceAndCompact(db, start, options).compact;\n}\n\nexport function traceAndCompact(\n db: Db,\n start: TraceStart,\n options: TraceOptions,\n): CompactTraceExecution {\n const collector = new CompactObservationCollector();\n const trace = traceWithObserver(db, start, options, collector);\n const source = compactSourceContext(db, options, collector.workspaceId);\n const compact = projectCompactGraph({\n db, start, options, source, trace,\n observations: collector.observations,\n });\n return { trace, compact };\n}\n\nexport function compactSourceContext(\n db: Db,\n options: TraceOptions,\n traversalWorkspaceId?: number,\n): CompactSourceContext {\n return {\n schemaVersion: schemaVersion(db),\n analyzerVersion: sourceAnalyzerVersion(\n db, traversalWorkspaceId ?? options.workspaceId,\n ),\n graphGeneration: graphGeneration(\n db, traversalWorkspaceId ?? options.workspaceId,\n ),\n };\n}\n\nfunction sourceAnalyzerVersion(\n db: Db,\n workspaceId: number | undefined,\n): string {\n const rows = db.prepare(`SELECT DISTINCT\n COALESCE(fact_analyzer_version,'legacy_unknown') analyzerVersion\n FROM repositories WHERE (? IS NULL OR workspace_id=?)\n ORDER BY analyzerVersion COLLATE BINARY LIMIT 2`).all(\n workspaceId, workspaceId,\n );\n if (rows.length === 0) return 'none';\n if (rows.length > 1) return 'mixed';\n return stringValue(rows[0]?.analyzerVersion) ?? 'legacy_unknown';\n}\n\nfunction graphGeneration(db: Db, workspaceId: number | undefined): number {\n if (workspaceId === undefined) return 0;\n const rows = db.prepare(`SELECT DISTINCT graph_generation generation\n FROM repositories WHERE workspace_id=?\n ORDER BY graph_generation LIMIT 2`).all(workspaceId);\n return rows.length === 1 ? numberValue(rows[0]?.generation) ?? 0 : 0;\n}\n\nfunction schemaVersion(db: Db): number {\n const row = db.pragma('user_version')[0];\n return numberValue(row?.user_version) ?? CURRENT_SCHEMA_VERSION;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n"],"mappings":"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","names":["path","path","fs","path","fs","path","path","fs","fs","path","ts","literal","identifier","normalizedCandidate","fs","path","fs","path","ts","member","resolved","objectValue","unsupported","fs","path","fs","path","ts","lineOf","ts","identifier","path","fs","path","ts","fs","path","ts","ts","lineOf","stringValue","ts","literal","fs","ts","path","ts","ts","ts","ts","scopeNode","site","matches","ts","ts","candidates","matches","ts","propertyName","branchDependent","ts","ts","propertyName","lineOf","rows","returnedProperty","resolved","matches","ts","sourceLine","lineOf","returnedProperty","path","propertyName","member","fs","path","ts","path","candidates","path","placeholders","path","path","ts","ts","unique","ts","identifier","binding","rows","matches","path","placeholders","ts","path","methodName","lineOf","propertyName","ts","ts","maxAliasDepth","expressionName","ts","unwrapQueryExpression","declarationScope","resolveBinding","identifier","isAssignmentOperator","binding","literal","lineOf","expressionName","ts","placeholders","maxAliasDepth","binding","resolveBinding","resolved","candidates","methodName","firstArg","fs","path","placeholders","hint","numericValue","candidates","matches","stringValue","candidates","compareHints","stringArray","numberValue","rows","candidates","unique","stringValue","upperFirst","simpleName","candidates","isRecord","numberValue","candidates","candidateEvidence","objectJson","isRecord","stringValue","rows","posix","ts","ts","ts","reference","compareBinary","identifier","matches","member","unwrap","ts","parent","member","path","isAssignmentOperator","unsupported","ts","ts","member","matches","compareBinary","candidates","rows","resolved","compareBinary","ts","canonicalModulePath","targetKey","propertyName","member","posix","candidates","rows","member","validEntry","record","rows","binding","unresolved","matches","exposure","parserEvidence","matches","mismatch","value","count","bodyReasons","record","parseRecord","nonEmpty","bodyEligibility","rows","record","parseRecord","category","count","rows","packageCallRows","all","binding","exposure","posix","record","parsedRecord","rows","binding","resolved","unresolved","record","parseRecord","all","memberReference","binding","rows","record","nonEmpty","all","reference","contains","targetMatches","unresolvedReasons","record","parseRecord","integer","nonEmpty","all","category","count","rows","reference","candidates","rows","binding","candidates","record","reference","record","parseRecord","nullableNumber","rows","resolutionMatches","category","rows","columns","unique","category","count","count","objectJson","status","targetKind","candidates","operationRows","rows","numericValue","record","numberValue","stringValue","stringArray","rows","isRecord","candidates","matches","identity","escapeRegex","placeholders","rows","numberValue","stringValue","numberValue","stringValue","reference","rows","record","recordArray","candidates","routingEvidence","stringValue","numberValue","reference","unique","rows","record","binding","stringArray","candidates","isRecord","binding","candidates","contextualEvidence","dynamicMode","suggestedVarSets","recordArray","stringValue","rows","count","stringValue","numericValue","createHash","compareBinary","rows","binding","isRecord","rows","dynamicMode","recordValue","stringValue","stringArray","numeric","candidates","implementationCandidates","rows","record","numberValue","isRecord","candidates","recordArray","stringArray","isRecord","isRecord","rows","callerBindings","bindingEvidence","recordArray","stringArray","binding","candidates","rows","normalizeOperation","rows","normalizeOperation","rows","objectRecord","recordArray","numericValue","rows","numberValue","graphGeneration","stringValue","sourceLine","isRecord","count","rows","numeric","rows","record","numberValue","methodName","stringValue","sourceLine","rows","rows","observation","compareBinary","compactCount","compareBinary","resolved","numeric","operationNode","symbolNode","targetNode","stringValue","numberValue","methodName","sourceLine","compareBinary","unique","trace","schemaVersion","rows","stringValue","numberValue"]}