@devflow-tools/context-engine 0.17.8 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/dist/code-evidence-producer.d.ts +29 -0
  3. package/dist/code-evidence-producer.d.ts.map +1 -0
  4. package/dist/code-evidence-producer.js +522 -0
  5. package/dist/code-evidence-producer.js.map +1 -0
  6. package/dist/code-evidence-types.d.ts +26 -0
  7. package/dist/code-evidence-types.d.ts.map +1 -0
  8. package/dist/code-evidence-types.js +2 -0
  9. package/dist/code-evidence-types.js.map +1 -0
  10. package/dist/compressor.d.ts.map +1 -1
  11. package/dist/compressor.js +2 -3
  12. package/dist/compressor.js.map +1 -1
  13. package/dist/context-budget-allocator.d.ts +5 -1
  14. package/dist/context-budget-allocator.d.ts.map +1 -1
  15. package/dist/context-budget-allocator.js +25 -3
  16. package/dist/context-budget-allocator.js.map +1 -1
  17. package/dist/context-engine.d.ts +19 -43
  18. package/dist/context-engine.d.ts.map +1 -1
  19. package/dist/context-engine.js +203 -1702
  20. package/dist/context-engine.js.map +1 -1
  21. package/dist/create-engines.d.ts +15 -19
  22. package/dist/create-engines.d.ts.map +1 -1
  23. package/dist/create-engines.js +39 -106
  24. package/dist/create-engines.js.map +1 -1
  25. package/dist/index.d.ts +7 -22
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -15
  28. package/dist/index.js.map +1 -1
  29. package/dist/symbol-embedder.d.ts +1 -1
  30. package/dist/symbol-embedder.d.ts.map +1 -1
  31. package/dist/symbol-embedder.js +17 -12
  32. package/dist/symbol-embedder.js.map +1 -1
  33. package/dist/symbol-embedding-document.d.ts +4 -0
  34. package/dist/symbol-embedding-document.d.ts.map +1 -0
  35. package/dist/symbol-embedding-document.js +39 -0
  36. package/dist/symbol-embedding-document.js.map +1 -0
  37. package/dist/symbol-vector-store.d.ts +13 -1
  38. package/dist/symbol-vector-store.d.ts.map +1 -1
  39. package/dist/symbol-vector-store.js +45 -16
  40. package/dist/symbol-vector-store.js.map +1 -1
  41. package/dist/types.d.ts +1 -0
  42. package/dist/types.d.ts.map +1 -1
  43. package/package.json +12 -9
  44. package/dist/artifact-inventory.d.ts +0 -39
  45. package/dist/artifact-inventory.d.ts.map +0 -1
  46. package/dist/artifact-inventory.js +0 -224
  47. package/dist/artifact-inventory.js.map +0 -1
  48. package/dist/channel-query-planner.d.ts +0 -9
  49. package/dist/channel-query-planner.d.ts.map +0 -1
  50. package/dist/channel-query-planner.js +0 -92
  51. package/dist/channel-query-planner.js.map +0 -1
  52. package/dist/intent-parser.d.ts +0 -15
  53. package/dist/intent-parser.d.ts.map +0 -1
  54. package/dist/intent-parser.js +0 -388
  55. package/dist/intent-parser.js.map +0 -1
  56. package/dist/retrieval-gap-detector.d.ts +0 -10
  57. package/dist/retrieval-gap-detector.d.ts.map +0 -1
  58. package/dist/retrieval-gap-detector.js +0 -85
  59. package/dist/retrieval-gap-detector.js.map +0 -1
  60. package/dist/retrieval-handlers.d.ts +0 -73
  61. package/dist/retrieval-handlers.d.ts.map +0 -1
  62. package/dist/retrieval-handlers.js +0 -289
  63. package/dist/retrieval-handlers.js.map +0 -1
  64. package/dist/retrieval-ledger.d.ts +0 -3
  65. package/dist/retrieval-ledger.d.ts.map +0 -1
  66. package/dist/retrieval-ledger.js +0 -156
  67. package/dist/retrieval-ledger.js.map +0 -1
  68. package/dist/retrieval-session-controller.d.ts +0 -6
  69. package/dist/retrieval-session-controller.d.ts.map +0 -1
  70. package/dist/retrieval-session-controller.js +0 -372
  71. package/dist/retrieval-session-controller.js.map +0 -1
  72. package/dist/retrieval-task-plan.d.ts +0 -28
  73. package/dist/retrieval-task-plan.d.ts.map +0 -1
  74. package/dist/retrieval-task-plan.js +0 -232
  75. package/dist/retrieval-task-plan.js.map +0 -1
  76. package/dist/semantic-authority-merger.d.ts +0 -11
  77. package/dist/semantic-authority-merger.d.ts.map +0 -1
  78. package/dist/semantic-authority-merger.js +0 -176
  79. package/dist/semantic-authority-merger.js.map +0 -1
  80. package/dist/semantic-resolver.d.ts +0 -19
  81. package/dist/semantic-resolver.d.ts.map +0 -1
  82. package/dist/semantic-resolver.js +0 -49
  83. package/dist/semantic-resolver.js.map +0 -1
  84. package/dist/semantic-route-catalog.d.ts +0 -22
  85. package/dist/semantic-route-catalog.d.ts.map +0 -1
  86. package/dist/semantic-route-catalog.js +0 -53
  87. package/dist/semantic-route-catalog.js.map +0 -1
  88. package/dist/semantic-router.d.ts +0 -39
  89. package/dist/semantic-router.d.ts.map +0 -1
  90. package/dist/semantic-router.js +0 -153
  91. package/dist/semantic-router.js.map +0 -1
  92. package/dist/semantic-structural-evidence.d.ts +0 -20
  93. package/dist/semantic-structural-evidence.d.ts.map +0 -1
  94. package/dist/semantic-structural-evidence.js +0 -84
  95. package/dist/semantic-structural-evidence.js.map +0 -1
  96. package/dist/task-retrieval-orchestrator.d.ts +0 -46
  97. package/dist/task-retrieval-orchestrator.d.ts.map +0 -1
  98. package/dist/task-retrieval-orchestrator.js +0 -418
  99. package/dist/task-retrieval-orchestrator.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 shilongfeicool
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ import type { CodeGraph } from '@colbymchenry/codegraph';
2
+ import { type CodeEvidenceProducerPort, type EvidenceProducerResult, type RetrievalRequestSignatureV1, type SemanticExecutionContext } from '@devflow-tools/sdk';
3
+ import type { IndexerAdapter } from './indexer-adapter.js';
4
+ import type { SymbolVectorStore } from './symbol-vector-store.js';
5
+ import type { EmbeddingProviderContract } from '@devflow-tools/sdk';
6
+ import { type CodeEvidenceSearchInput, type CodeEvidenceSearchOutput } from './code-evidence-types.js';
7
+ export declare class CodeEvidenceRuntime {
8
+ private readonly dependencies;
9
+ constructor(dependencies: {
10
+ codegraph: CodeGraph;
11
+ indexer: IndexerAdapter;
12
+ embedder?: EmbeddingProviderContract;
13
+ symbolStore?: SymbolVectorStore;
14
+ });
15
+ search(input: CodeEvidenceSearchInput): Promise<CodeEvidenceSearchOutput>;
16
+ private addSegmentCandidates;
17
+ private addVectorCandidates;
18
+ }
19
+ export declare class CodeEvidenceProducer implements CodeEvidenceProducerPort {
20
+ private readonly runtime;
21
+ private lastVectorCandidateRefs;
22
+ constructor(runtime: CodeEvidenceRuntime);
23
+ getLastVectorCandidateRefs(): Array<{
24
+ ref: string;
25
+ rank: number;
26
+ }>;
27
+ search(context: SemanticExecutionContext, request: RetrievalRequestSignatureV1): Promise<EvidenceProducerResult>;
28
+ }
29
+ //# sourceMappingURL=code-evidence-producer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-evidence-producer.d.ts","sourceRoot":"","sources":["../src/code-evidence-producer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAGL,KAAK,wBAAwB,EAI7B,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AA0ClC,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE;QACzC,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,cAAc,CAAC;QACxB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;QACrC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC;IAEK,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAmM/E,OAAO,CAAC,oBAAoB;YA2Dd,mBAAmB;CAwClC;AAED,qBAAa,oBAAqB,YAAW,wBAAwB;IAGvD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,uBAAuB,CAA4C;gBAE9C,OAAO,EAAE,mBAAmB;IAEzD,0BAA0B,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5D,MAAM,CACV,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,sBAAsB,CAAC;CA+CnC"}
@@ -0,0 +1,522 @@
1
+ import { codeEvidenceStableRef, stableRuntimeHash, } from '@devflow-tools/sdk';
2
+ import { sanitizeCodeGraphEdges } from './graph-edge-quality.js';
3
+ import { requestValidatedEmbedding } from '@devflow-tools/provider-runtime';
4
+ import { CODE_EVIDENCE_PRODUCER_VERSION, } from './code-evidence-types.js';
5
+ const SEGMENT_CANDIDATE_LIMIT = 20;
6
+ const PROSE_STOPWORDS = new Set([
7
+ 'about', 'above', 'actually', 'after', 'again', 'against', 'almost', 'along', 'also', 'always',
8
+ 'another', 'anything', 'around', 'away', 'back', 'because', 'been', 'before', 'behind', 'being',
9
+ 'below', 'best', 'better', 'between', 'both', 'cannot', 'come', 'could', 'does', 'doing', 'done',
10
+ 'down', 'each', 'either', 'else', 'even', 'ever', 'every', 'everything', 'fine', 'first', 'from',
11
+ 'getting', 'give', 'goes', 'going', 'gone', 'good', 'great', 'have', 'having', 'help', 'here',
12
+ 'inside', 'instead', 'into', 'just', 'keep', 'know', 'last', 'least', 'less', 'like', 'likely',
13
+ 'little', 'look', 'looking', 'made', 'make', 'making', 'many', 'maybe', 'mind', 'more', 'most',
14
+ 'much', 'must', 'need', 'needs', 'never', 'next', 'nice', 'none', 'nothing', 'okay', 'only',
15
+ 'onto', 'other', 'otherwise', 'over', 'please', 'pretty', 'probably', 'quite', 'rather', 'really',
16
+ 'right', 'same', 'seem', 'seems', 'should', 'show', 'since', 'some', 'someone', 'something',
17
+ 'somewhere', 'soon', 'still', 'such', 'sure', 'take', 'than', 'thank', 'thanks', 'that', 'their',
18
+ 'them', 'then', 'there', 'these', 'they', 'thing', 'things', 'think', 'this', 'those', 'though',
19
+ 'tried', 'tries', 'trying', 'under', 'until', 'upon', 'very', 'want', 'wants', 'well', 'went',
20
+ 'were', 'what', 'when', 'which', 'while', 'will', 'wish', 'with', 'within', 'without', 'would',
21
+ 'wrong', 'your', 'yours', 'change', 'changes', 'check', 'class', 'classes', 'code', 'detail',
22
+ 'details', 'directory', 'error', 'errors', 'example', 'examples', 'file', 'files', 'folder',
23
+ 'function', 'functions', 'issue', 'issues', 'line', 'lines', 'method', 'methods', 'name', 'names',
24
+ 'problem', 'problems', 'project', 'question', 'questions', 'rename', 'test', 'tests', 'type',
25
+ 'types', 'update', 'value', 'values', 'warning', 'warnings', 'work', 'working', 'write', 'writing',
26
+ ]);
27
+ export class CodeEvidenceRuntime {
28
+ dependencies;
29
+ constructor(dependencies) {
30
+ this.dependencies = dependencies;
31
+ }
32
+ async search(input) {
33
+ const stats = this.dependencies.codegraph.getStats();
34
+ if (stats.nodeCount === 0 || stats.lastUpdated === 0) {
35
+ return {
36
+ candidates: [], rejectedRefs: [], indexReady: false,
37
+ gaps: [gap('unavailable_channel', 'code_index_not_ready', 'code')],
38
+ producerLegs: unavailableProducerLegs(input.query.query, 'code_index_not_ready', Boolean(input.profileHash)),
39
+ };
40
+ }
41
+ const query = input.query.query.slice(0, 2_000);
42
+ const searchLimit = Math.min(30, Math.max(5, input.query.symbols.length * 3));
43
+ let result;
44
+ try {
45
+ result = await this.dependencies.codegraph.findRelevantContext(query, {
46
+ searchLimit,
47
+ traversalDepth: Math.max(0, Math.min(3, input.query.maxDepth)),
48
+ maxNodes: Math.min(60, Math.max(10, Math.floor(input.tokenBudget / 128))),
49
+ });
50
+ }
51
+ catch (error) {
52
+ const reason = error instanceof Error && error.message.toLowerCase().includes('timeout')
53
+ ? 'code_search_timeout' : 'code_search_unavailable';
54
+ return {
55
+ candidates: [], rejectedRefs: [], indexReady: false,
56
+ gaps: [gap('unavailable_channel', reason, 'code')],
57
+ producerLegs: unavailableProducerLegs(query, reason, Boolean(input.profileHash), reason.endsWith('timeout') ? 'timeout' : 'unavailable'),
58
+ };
59
+ }
60
+ const ranked = new Map();
61
+ for (const [index, rootId] of result.roots.entries()) {
62
+ const node = result.nodes.get(rootId);
63
+ if (node)
64
+ ranked.set(node.id, { node, lexicalRank: index + 1, root: true });
65
+ }
66
+ for (const node of result.nodes.values()) {
67
+ if (!ranked.has(node.id))
68
+ ranked.set(node.id, { node, root: false });
69
+ }
70
+ const segment = this.addSegmentCandidates(ranked, query, Math.max(0, Math.min(3, input.query.maxDepth)));
71
+ const vector = await this.addVectorCandidates(ranked, query, input.projectId, input.profileHash);
72
+ const rawEdges = result.edges.map(edge => ({
73
+ ...edge,
74
+ kind: typeof edge.kind === 'string'
75
+ ? edge.kind : 'depends_on',
76
+ }));
77
+ const sanitized = sanitizeCodeGraphEdges(this.dependencies.codegraph, rawEdges);
78
+ const graphRanks = graphEvidenceRanks(result.roots, sanitized.accepted);
79
+ const rejectedRefs = sanitized.rejected.map(edge => ({
80
+ ref: `code-relation:${edge.source}:${edge.target}:${edge.kind}`,
81
+ reason: edge.reason,
82
+ }));
83
+ const retrievalProfile = this.dependencies.symbolStore?.getProfile();
84
+ const gaps = [];
85
+ const candidates = [];
86
+ const bodyScores = new Map();
87
+ for (const item of ranked.values()) {
88
+ const freshness = this.dependencies.indexer.getFileFreshness(item.node.filePath);
89
+ const targetMatch = matchesTarget(item.node.filePath, input.query.targetAnchors);
90
+ const symbolMatch = input.query.symbols.some(symbol => normalizeSymbol(symbol) === normalizeSymbol(item.node.name));
91
+ const graphRank = graphRanks.get(item.node.id);
92
+ const boundStructure = graphRank !== undefined && sanitized.accepted.some(edge => edge.source === item.node.id || edge.target === item.node.id);
93
+ const segmentEvidence = item.segmentRank !== undefined || item.segmentGraphRank !== undefined;
94
+ const strength = freshness.current && (targetMatch || symbolMatch)
95
+ ? 'strong' : freshness.current && (boundStructure || segmentEvidence) ? 'supporting' : 'weak';
96
+ const stableRef = codeStableRef(input.projectId, item.node);
97
+ const hasEvidenceLeg = item.lexicalRank !== undefined || item.vectorRank !== undefined
98
+ || segmentEvidence || targetMatch || symbolMatch || boundStructure;
99
+ if (!hasEvidenceLeg) {
100
+ rejectedRefs.push({ ref: stableRef, reason: 'unbound_graph_node' });
101
+ continue;
102
+ }
103
+ if (!freshness.current) {
104
+ rejectedRefs.push({ ref: stableRef, reason: `stale:${freshness.reason ?? 'unknown'}` });
105
+ gaps.push({
106
+ kind: 'runtime_evidence', target: item.node.filePath,
107
+ reason: `code_source_stale:${freshness.reason ?? 'unknown'}`,
108
+ evidenceRefs: [stableRef], resolver: 'code', priority: 1,
109
+ });
110
+ continue;
111
+ }
112
+ const excerpt = await this.dependencies.codegraph.getCode(item.node.id);
113
+ if (!excerpt?.trim()) {
114
+ rejectedRefs.push({ ref: stableRef, reason: 'source_excerpt_unavailable' });
115
+ gaps.push({
116
+ kind: 'runtime_evidence', target: item.node.filePath,
117
+ reason: 'code_source_excerpt_unavailable', evidenceRefs: [stableRef],
118
+ resolver: 'code', priority: 1,
119
+ });
120
+ continue;
121
+ }
122
+ const bodyScore = sourceBodyMatchScore(query, excerpt);
123
+ if (bodyScore > 0)
124
+ bodyScores.set(stableRef, bodyScore);
125
+ const legs = [];
126
+ if (item.lexicalRank)
127
+ legs.push({ leg: 'code:bm25', rank: item.lexicalRank });
128
+ if (item.vectorRank)
129
+ legs.push({ leg: 'code:vector', rank: item.vectorRank });
130
+ if (item.segmentRank)
131
+ legs.push({ leg: 'code:segment', rank: item.segmentRank });
132
+ if (item.segmentGraphRank) {
133
+ legs.push({ leg: 'code:segment-graph', rank: item.segmentGraphRank });
134
+ }
135
+ if (boundStructure)
136
+ legs.push({ leg: 'code:graph', rank: graphRank });
137
+ if (targetMatch)
138
+ legs.push({ leg: 'code:target', rank: 1 });
139
+ if (symbolMatch)
140
+ legs.push({ leg: 'code:symbol', rank: 1 });
141
+ candidates.push({
142
+ stableRef, channel: 'code', strength,
143
+ rank: Math.min(...legs.map(leg => leg.rank), item.lexicalRank ?? 999),
144
+ ...(retrievalProfile ? {
145
+ retrievalProfile: retrievalProfile.profileHash,
146
+ generation: retrievalProfile.generation,
147
+ } : {}),
148
+ evidence: {
149
+ ref: stableRef,
150
+ sourceId: `${item.node.filePath}:${item.node.id}`,
151
+ producer: 'context-engine', producerVersion: CODE_EVIDENCE_PRODUCER_VERSION,
152
+ ...(freshness.currentHash ?? freshness.indexedHash
153
+ ? { sourceRevision: freshness.currentHash ?? freshness.indexedHash }
154
+ : {}),
155
+ ...(freshness.currentHash ?? freshness.indexedHash
156
+ ? { contentHash: freshness.currentHash ?? freshness.indexedHash }
157
+ : {}),
158
+ parentRefs: [
159
+ ...(boundStructure ? relationRefs(item.node.id, sanitized.accepted) : []),
160
+ ...(item.segmentParentRefs ?? []),
161
+ ],
162
+ },
163
+ payload: {
164
+ path: item.node.filePath, symbolId: item.node.id,
165
+ symbol: item.node.name, kind: item.node.kind,
166
+ excerpt: excerpt.slice(0, 2_000),
167
+ ...(item.node.startLine !== undefined ? { startLine: item.node.startLine } : {}),
168
+ ...(item.node.endLine !== undefined ? { endLine: item.node.endLine } : {}),
169
+ relationKinds: input.query.relationKinds,
170
+ },
171
+ freshness: { current: true, checkedAt: input.now },
172
+ contributingLegs: legs.length > 0 ? legs : [{ leg: 'code:lexical', rank: item.lexicalRank ?? 999 }],
173
+ eligibility: {
174
+ scope: { kind: 'project', id: input.projectId }, permission: 'allowed', sourceReady: true,
175
+ ...(item.vectorRank && input.profileHash ? { profileHash: input.profileHash } : {}),
176
+ },
177
+ estimatedTokens: estimateTokens(item.node),
178
+ });
179
+ }
180
+ const bodyRanks = new Map([...bodyScores.entries()]
181
+ .sort(([leftRef, leftScore], [rightRef, rightScore]) => rightScore - leftScore
182
+ || leftRef.localeCompare(rightRef))
183
+ .map(([stableRef], index) => [stableRef, index + 1]));
184
+ for (const candidate of candidates) {
185
+ const bodyRank = bodyRanks.get(candidate.stableRef);
186
+ if (bodyRank === undefined)
187
+ continue;
188
+ candidate.contributingLegs = [
189
+ ...candidate.contributingLegs,
190
+ { leg: 'code:body', rank: bodyRank },
191
+ ];
192
+ candidate.rank = Math.min(candidate.rank, bodyRank);
193
+ }
194
+ if (input.query.targetAnchors.length > 0 && !candidates.some(candidate => candidate.strength === 'strong')) {
195
+ gaps.push({
196
+ kind: 'target', reason: 'explicit_target_not_resolved_to_current_strong_evidence',
197
+ target: input.query.targetAnchors.join(','), evidenceRefs: [], resolver: 'code', priority: 1,
198
+ });
199
+ }
200
+ if (input.query.symbols.length > 0 && !candidates.some(candidate => candidate.strength === 'strong')) {
201
+ gaps.push({
202
+ kind: 'symbol_ambiguity', reason: 'requested_symbol_not_resolved_to_unique_current_evidence',
203
+ target: input.query.symbols.join(','), evidenceRefs: [], resolver: 'code', priority: 1,
204
+ });
205
+ }
206
+ const legPrefix = producerLegPrefix(query);
207
+ return {
208
+ candidates,
209
+ rejectedRefs,
210
+ gaps: dedupeGaps(gaps),
211
+ indexReady: true,
212
+ producerLegs: [
213
+ { schemaVersion: 'evidence-producer-leg-receipt.v1', legId: `${legPrefix}:lexical`, parentReceiptIds: [], kind: 'lexical', required: true, status: result.roots.length > 0 ? 'ready' : 'empty_valid', candidateCount: result.roots.length },
214
+ { schemaVersion: 'evidence-producer-leg-receipt.v1', legId: `${legPrefix}:segment`, parentReceiptIds: [], kind: 'graph', required: false, status: segment.status, candidateCount: segment.candidateCount, ...(segment.reasonCode ? { reasonCode: segment.reasonCode } : {}) },
215
+ { schemaVersion: 'evidence-producer-leg-receipt.v1', legId: `${legPrefix}:body`, parentReceiptIds: [], kind: 'lexical', required: false, status: bodyRanks.size > 0 ? 'ready' : 'empty_valid', candidateCount: bodyRanks.size },
216
+ { schemaVersion: 'evidence-producer-leg-receipt.v1', legId: `${legPrefix}:vector`, parentReceiptIds: [], kind: 'vector', required: Boolean(input.profileHash), ...vector },
217
+ { schemaVersion: 'evidence-producer-leg-receipt.v1', legId: `${legPrefix}:graph`, parentReceiptIds: [], kind: 'graph', required: false, status: sanitized.accepted.length > 0 ? 'ready' : 'empty_valid', candidateCount: graphRanks.size },
218
+ ],
219
+ };
220
+ }
221
+ addSegmentCandidates(ranked, query, maxDepth) {
222
+ try {
223
+ const words = latinProseWords(query);
224
+ if (words.length === 0) {
225
+ return { status: 'empty_valid', candidateCount: 0 };
226
+ }
227
+ const matches = this.dependencies.codegraph.getSegmentMatches(words, SEGMENT_CANDIDATE_LIMIT);
228
+ const additions = new Map();
229
+ for (const [index, match] of matches.entries()) {
230
+ const node = resolveExactSegmentNode(this.dependencies.codegraph, match);
231
+ if (!node)
232
+ continue;
233
+ mergeSegmentNode(additions, node, 'segmentRank', index + 1);
234
+ if (!isCallerExpandable(node) || maxDepth === 0)
235
+ continue;
236
+ const callers = this.dependencies.codegraph.getCallers(node.id, maxDepth)
237
+ .map(item => ({ ...item, current: resolveExactNode(this.dependencies.codegraph, item.node) }));
238
+ const callerIds = new Set([node.id, ...callers.flatMap(item => item.current ? [item.current.id] : [])]);
239
+ for (const [callerIndex, caller] of callers.entries()) {
240
+ const current = caller.current;
241
+ if (!current || caller.edge.kind !== 'calls'
242
+ || caller.edge.source !== current.id || !callerIds.has(caller.edge.target))
243
+ continue;
244
+ const relationRef = `code-relation:${caller.edge.source}:${caller.edge.target}:${caller.edge.kind}`;
245
+ mergeSegmentNode(additions, current, 'segmentGraphRank', callerIndex + 1, [relationRef]);
246
+ }
247
+ }
248
+ for (const item of additions.values()) {
249
+ const existing = ranked.get(item.node.id);
250
+ ranked.set(item.node.id, {
251
+ ...(existing ?? item),
252
+ ...(item.segmentRank ? { segmentRank: item.segmentRank } : {}),
253
+ ...(item.segmentGraphRank ? { segmentGraphRank: item.segmentGraphRank } : {}),
254
+ ...((existing?.segmentParentRefs?.length || item.segmentParentRefs?.length) ? {
255
+ segmentParentRefs: [...new Set([
256
+ ...(existing?.segmentParentRefs ?? []), ...(item.segmentParentRefs ?? []),
257
+ ])],
258
+ } : {}),
259
+ });
260
+ }
261
+ return {
262
+ status: additions.size > 0 ? 'ready' : 'empty_valid',
263
+ candidateCount: additions.size,
264
+ };
265
+ }
266
+ catch {
267
+ return {
268
+ status: 'unavailable', candidateCount: 0,
269
+ reasonCode: 'segment_query_unavailable',
270
+ };
271
+ }
272
+ }
273
+ async addVectorCandidates(ranked, query, projectId, expectedProfileHash) {
274
+ if (!this.dependencies.embedder || !this.dependencies.symbolStore || !expectedProfileHash) {
275
+ return { status: 'unavailable', candidateCount: 0, reasonCode: 'vector_provider_not_configured', candidateRefs: [] };
276
+ }
277
+ const storeProfile = this.dependencies.symbolStore.getProfile?.();
278
+ if (storeProfile && storeProfile.profileHash !== expectedProfileHash) {
279
+ return { status: 'invalid', candidateCount: 0, reasonCode: 'vector_profile_mismatch', candidateRefs: [] };
280
+ }
281
+ try {
282
+ const embedding = await requestValidatedEmbedding({
283
+ provider: this.dependencies.embedder,
284
+ purpose: 'code_retrieval',
285
+ text: query,
286
+ });
287
+ let vectorRank = 0;
288
+ const candidateRefs = [];
289
+ for (const result of this.dependencies.symbolStore.search(embedding, 30)) {
290
+ vectorRank += 1;
291
+ const node = this.dependencies.codegraph.getNode(result.id);
292
+ if (!node)
293
+ continue;
294
+ candidateRefs.push({ ref: codeStableRef(projectId, node), rank: vectorRank });
295
+ const existing = ranked.get(node.id);
296
+ ranked.set(node.id, existing ? { ...existing, vectorRank } : { node, vectorRank, root: false });
297
+ }
298
+ return { status: vectorRank > 0 ? 'ready' : 'empty_valid', candidateCount: vectorRank, candidateRefs };
299
+ }
300
+ catch (error) {
301
+ const message = error instanceof Error ? error.message.toLowerCase() : '';
302
+ return {
303
+ status: message.includes('timeout') ? 'timeout' : 'unavailable',
304
+ candidateCount: 0,
305
+ candidateRefs: [],
306
+ reasonCode: message.includes('timeout') ? 'vector_query_timeout' : 'vector_query_unavailable',
307
+ };
308
+ }
309
+ }
310
+ }
311
+ export class CodeEvidenceProducer {
312
+ runtime;
313
+ lastVectorCandidateRefs = [];
314
+ constructor(runtime) {
315
+ this.runtime = runtime;
316
+ }
317
+ getLastVectorCandidateRefs() {
318
+ return this.lastVectorCandidateRefs.map(item => ({ ...item }));
319
+ }
320
+ async search(context, request) {
321
+ this.lastVectorCandidateRefs = [];
322
+ if (request.channel !== 'code'
323
+ || request.factsHash !== context.facts.factsHash
324
+ || request.planHash !== context.plan.planHash
325
+ || request.activationSnapshotHash !== context.activationSnapshotHash
326
+ || stableRuntimeHash(request.identity) !== stableRuntimeHash(context.identity)) {
327
+ throw new Error('CODE_EVIDENCE_REQUEST_CONTEXT_MISMATCH');
328
+ }
329
+ if (context.plan.code.requirement === 'prohibited') {
330
+ throw new Error('CODE_EVIDENCE_CHANNEL_PROHIBITED');
331
+ }
332
+ const query = { ...context.plan.code.typedQuery, query: request.queryVariant.query };
333
+ const outputs = await Promise.all([this.runtime.search({
334
+ query,
335
+ projectId: context.scopeBindings.project.id,
336
+ contextHash: context.contextHash,
337
+ profileHash: request.filters.embeddingProfileHash,
338
+ tokenBudget: 8_000,
339
+ now: context.createdAt,
340
+ })]);
341
+ const candidates = dedupeCandidates(outputs.flatMap(output => output.candidates));
342
+ this.lastVectorCandidateRefs = outputs.flatMap(output => output.vectorCandidateRefs ?? []);
343
+ const gaps = dedupeGaps(outputs.flatMap(output => output.gaps));
344
+ const rejected = outputs.flatMap(output => output.rejectedRefs);
345
+ const producerLegs = outputs.flatMap(output => output.producerLegs)
346
+ .map(leg => ({ ...leg, parentReceiptIds: [request.receiptId] }));
347
+ const requiredLegFailure = producerLegs.find(leg => leg.required
348
+ && leg.status !== 'ready' && leg.status !== 'empty_valid');
349
+ const unavailableGaps = requiredLegFailure ? dedupeGaps([...gaps, gap('unavailable_channel', requiredLegFailure.reasonCode ?? `${requiredLegFailure.kind}_unavailable`, 'code')]) : gaps;
350
+ const availability = outputs.every(output => !output.indexReady) || requiredLegFailure
351
+ ? 'unavailable' : candidates.length === 0 ? 'empty_valid' : 'available';
352
+ return receipt(context, request, availability === 'unavailable' ? [] : candidates, rejected, unavailableGaps, availability, producerLegs, outputs.flatMap(output => output.vectorCandidateRefs ?? []));
353
+ }
354
+ }
355
+ function receipt(context, request, candidates, rejectedRefs, gaps, availability, producerLegs, vectorCandidateRefs) {
356
+ const contributingLegs = {};
357
+ for (const candidate of candidates) {
358
+ for (const leg of candidate.contributingLegs) {
359
+ (contributingLegs[leg.leg] ??= []).push({
360
+ ref: candidate.stableRef,
361
+ rank: leg.rank,
362
+ ...(leg.score !== undefined ? { score: leg.score } : {}),
363
+ });
364
+ }
365
+ }
366
+ if (vectorCandidateRefs.length > 0)
367
+ contributingLegs['code:vector'] = vectorCandidateRefs;
368
+ const body = {
369
+ schemaVersion: 'evidence-receipt.v1',
370
+ receiptId: `code:${stableRuntimeHash({ context: context.contextHash, ...(request.queryVariant ? { queryVariant: request.queryVariant } : {}), refs: candidates.map(item => item.stableRef), gaps }).slice(0, 32)}`,
371
+ parentReceiptIds: [request.receiptId],
372
+ taskContextHash: context.contextHash,
373
+ channel: 'code',
374
+ availability,
375
+ factsHash: context.facts.factsHash,
376
+ planHash: context.plan.planHash,
377
+ activationSnapshotHash: context.activationSnapshotHash,
378
+ selectedRefs: [],
379
+ legId: request.signatureHash,
380
+ rejectedRefs,
381
+ gaps,
382
+ contributingLegs,
383
+ producerLegs,
384
+ createdAt: context.createdAt,
385
+ };
386
+ return { candidates, gaps, availability, receipt: { ...body, receiptHash: stableRuntimeHash(body) } };
387
+ }
388
+ function producerLegPrefix(query) {
389
+ return `code:${stableRuntimeHash(query).slice(0, 16)}`;
390
+ }
391
+ function unavailableProducerLegs(query, reasonCode, vectorRequired, status = 'unavailable') {
392
+ const prefix = producerLegPrefix(query);
393
+ return ['lexical', 'vector', 'graph'].map(kind => ({
394
+ schemaVersion: 'evidence-producer-leg-receipt.v1',
395
+ legId: `${prefix}:${kind}`,
396
+ parentReceiptIds: [],
397
+ kind,
398
+ required: kind === 'lexical' || (kind === 'vector' && vectorRequired),
399
+ status,
400
+ candidateCount: 0,
401
+ reasonCode,
402
+ }));
403
+ }
404
+ function codeStableRef(projectId, node) {
405
+ return codeEvidenceStableRef({
406
+ projectId,
407
+ normalizedPath: stableEvidencePath(node.filePath),
408
+ symbolId: node.id,
409
+ range: [node.startLine ?? 0, node.endLine ?? 0],
410
+ });
411
+ }
412
+ function stableEvidencePath(value) {
413
+ return value.normalize('NFKC').replaceAll('\\', '/').replace(/^\.\//u, '');
414
+ }
415
+ function latinProseWords(query) {
416
+ const unique = new Set();
417
+ for (const word of query.match(/[\p{L}\p{N}]+/gu) ?? []) {
418
+ const normalized = word.normalize('NFD').replace(/\p{M}+/gu, '').toLocaleLowerCase('en-US');
419
+ if (normalized.length < 4 || normalized.length > 24
420
+ || /^\p{N}+$/u.test(normalized) || PROSE_STOPWORDS.has(normalized))
421
+ continue;
422
+ unique.add(normalized);
423
+ if (unique.size === 16)
424
+ break;
425
+ }
426
+ return [...unique];
427
+ }
428
+ function sourceBodyMatchScore(query, excerpt) {
429
+ const body = excerpt.normalize('NFKC').toLocaleLowerCase('en-US');
430
+ return new Set(latinProseWords(query).filter(word => body.includes(word))).size;
431
+ }
432
+ function resolveExactSegmentNode(codegraph, match) {
433
+ const matches = codegraph.getNodesByName(match.name).filter(node => node.name === match.name
434
+ && stableEvidencePath(node.filePath) === stableEvidencePath(match.filePath)
435
+ && node.kind === match.kind
436
+ && node.startLine === match.startLine);
437
+ return matches.length === 1 ? matches[0] : undefined;
438
+ }
439
+ function resolveExactNode(codegraph, candidate) {
440
+ const current = codegraph.getNodesByName(candidate.name).filter(node => node.id === candidate.id
441
+ && stableEvidencePath(node.filePath) === stableEvidencePath(candidate.filePath)
442
+ && node.kind === candidate.kind
443
+ && node.startLine === candidate.startLine);
444
+ return current.length === 1 ? current[0] : undefined;
445
+ }
446
+ function isCallerExpandable(node) {
447
+ return node.kind === 'function' || node.kind === 'method';
448
+ }
449
+ function mergeSegmentNode(ranked, node, rankKey, rank, parentRefs = []) {
450
+ const existing = ranked.get(node.id);
451
+ ranked.set(node.id, {
452
+ ...(existing ?? { node, root: false }),
453
+ [rankKey]: Math.min(existing?.[rankKey] ?? Number.MAX_SAFE_INTEGER, rank),
454
+ ...(parentRefs.length > 0 ? {
455
+ segmentParentRefs: [...new Set([...(existing?.segmentParentRefs ?? []), ...parentRefs])],
456
+ } : {}),
457
+ });
458
+ }
459
+ function graphEvidenceRanks(roots, edges) {
460
+ const adjacency = new Map();
461
+ for (const edge of edges) {
462
+ adjacency.set(edge.source, [...(adjacency.get(edge.source) ?? []), edge.target]);
463
+ adjacency.set(edge.target, [...(adjacency.get(edge.target) ?? []), edge.source]);
464
+ }
465
+ const ranks = new Map();
466
+ const queue = [];
467
+ for (const root of roots) {
468
+ if (ranks.has(root))
469
+ continue;
470
+ ranks.set(root, ranks.size + 1);
471
+ queue.push(root);
472
+ }
473
+ while (queue.length > 0) {
474
+ const current = queue.shift();
475
+ for (const next of adjacency.get(current) ?? []) {
476
+ if (ranks.has(next))
477
+ continue;
478
+ ranks.set(next, ranks.size + 1);
479
+ queue.push(next);
480
+ }
481
+ }
482
+ return ranks;
483
+ }
484
+ function relationRefs(id, edges) {
485
+ return edges.filter(edge => edge.source === id || edge.target === id)
486
+ .map(edge => `code-relation:${edge.source}:${edge.target}:${edge.kind}`);
487
+ }
488
+ function matchesTarget(path, targets) {
489
+ const normalized = normalizePath(path);
490
+ return targets.some(target => {
491
+ const anchor = normalizePath(target);
492
+ return normalized === anchor || normalized.endsWith(`/${anchor}`);
493
+ });
494
+ }
495
+ function normalizePath(value) {
496
+ return value.normalize('NFKC').replaceAll('\\', '/').replace(/^\.\//u, '').toLocaleLowerCase('en-US');
497
+ }
498
+ function normalizeSymbol(value) {
499
+ return value.normalize('NFKC').toLocaleLowerCase('en-US').replace(/[^\p{L}\p{N}_$]+/gu, '');
500
+ }
501
+ function estimateTokens(node) {
502
+ return Math.max(24, Math.ceil(`${node.name} ${node.signature ?? ''} ${node.filePath}`.length / 4));
503
+ }
504
+ function gap(kind, reason, resolver) {
505
+ return { kind, reason, evidenceRefs: [], resolver, priority: 1 };
506
+ }
507
+ function dedupeGaps(gaps) {
508
+ return [...new Map(gaps.map(item => [stableRuntimeHash(item), item])).values()];
509
+ }
510
+ function dedupeCandidates(candidates) {
511
+ const byRef = new Map();
512
+ for (const candidate of candidates) {
513
+ const existing = byRef.get(candidate.stableRef);
514
+ if (!existing || strengthRank(candidate.strength) > strengthRank(existing.strength))
515
+ byRef.set(candidate.stableRef, candidate);
516
+ }
517
+ return [...byRef.values()];
518
+ }
519
+ function strengthRank(value) {
520
+ return value === 'strong' ? 3 : value === 'supporting' ? 2 : 1;
521
+ }
522
+ //# sourceMappingURL=code-evidence-producer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-evidence-producer.js","sourceRoot":"","sources":["../src/code-evidence-producer.ts"],"names":[],"mappings":"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"}