@devflow-tools/context-engine 0.17.1 → 0.17.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,37 @@
1
+ import type { CodeGraph } from '@colbymchenry/codegraph';
2
+ import type { ArtifactContextRole, RetrievalTaskAction } from '@devflow-tools/sdk';
3
+ import type { IndexedFileFreshness, IndexerAdapter } from './indexer-adapter.js';
4
+ export type ArtifactMatchMode = 'explicit_path' | 'artifact_name' | 'exported_symbol' | 'route_registration' | 'lexical_support' | 'missing_explicit_path';
5
+ export interface ArtifactInventoryEntry {
6
+ path: string;
7
+ artifactRole: ArtifactContextRole;
8
+ score: number;
9
+ matchMode: ArtifactMatchMode;
10
+ artifactKind: 'component' | 'page' | 'route' | 'module' | 'test' | 'config' | 'resource' | 'source';
11
+ symbols: string[];
12
+ evidence: string[];
13
+ freshness: IndexedFileFreshness;
14
+ }
15
+ export interface ArtifactInventoryResult {
16
+ entries: ArtifactInventoryEntry[];
17
+ operationTargets: ArtifactInventoryEntry[];
18
+ missingExplicitTargets: ArtifactInventoryEntry[];
19
+ ambiguous: boolean;
20
+ }
21
+ export declare function buildArtifactInventory(input: {
22
+ codegraph: CodeGraph;
23
+ indexer: IndexerAdapter;
24
+ query: string;
25
+ explicitTargetAnchors: string[];
26
+ action: RetrievalTaskAction;
27
+ identity?: {
28
+ projectRoot: string;
29
+ sessionId?: string;
30
+ turnId?: string;
31
+ requestId?: string;
32
+ executionId?: string;
33
+ intentArtifactHash?: string;
34
+ queryPlanHash?: string;
35
+ };
36
+ }): ArtifactInventoryResult;
37
+ //# sourceMappingURL=artifact-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-inventory.d.ts","sourceRoot":"","sources":["../src/artifact-inventory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,mBAAmB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACpG,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;IAC3C,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH,GAAG,uBAAuB,CA+G1B"}
@@ -0,0 +1,211 @@
1
+ import { extname, normalize } from 'node:path';
2
+ import { emitSemanticControlLog } from '@devflow-tools/telemetry';
3
+ export function buildArtifactInventory(input) {
4
+ const files = input.codegraph.getFiles().map(file => normalizeProjectPath(file.path));
5
+ const indexedFiles = new Set(files);
6
+ const explicitAnchors = [...new Set(input.explicitTargetAnchors.map(normalizeProjectPath).filter(Boolean))];
7
+ const terms = artifactTerms(input.query, explicitAnchors);
8
+ const requestedKinds = inferRequestedArtifactKinds(input.query);
9
+ const candidates = new Map();
10
+ for (const anchor of explicitAnchors) {
11
+ const exact = resolveExplicitAnchor(anchor, files);
12
+ if (exact) {
13
+ setCandidate(candidates, inventoryEntry(input, exact, 'operation_target', 1, 'explicit_path', [
14
+ `explicit target anchor resolved to ${exact}`,
15
+ ]));
16
+ continue;
17
+ }
18
+ const freshness = input.indexer.getFileFreshness(anchor);
19
+ setCandidate(candidates, {
20
+ path: anchor,
21
+ artifactRole: 'operation_target',
22
+ score: 1,
23
+ matchMode: 'missing_explicit_path',
24
+ artifactKind: artifactKind(anchor),
25
+ symbols: [],
26
+ evidence: [`explicit target anchor ${anchor} does not resolve to a current project file`],
27
+ freshness,
28
+ });
29
+ }
30
+ for (const path of files) {
31
+ if (!isInventoryFile(path))
32
+ continue;
33
+ const nodes = input.codegraph.getNodesInFile(path)
34
+ .filter(node => node.kind !== 'file' && node.kind !== 'import');
35
+ const symbols = [...new Set(nodes.map(node => String(node.name)).filter(Boolean))];
36
+ const normalizedBase = normalizeIdentity(path.split('/').at(-1)?.replace(/\.[^.]+$/u, '') ?? '');
37
+ const normalizedPath = normalizeIdentity(path);
38
+ const symbolIdentities = symbols.map(normalizeIdentity);
39
+ const exactName = terms.find(term => normalizedBase === term || symbolIdentities.includes(term));
40
+ const partialName = terms.find(term => term.length >= 4
41
+ && (normalizedBase.includes(term) || symbolIdentities.some(symbol => symbol.includes(term))));
42
+ const routeMatch = artifactKind(path) === 'route' && terms.some(term => normalizedPath.includes(term));
43
+ if (!exactName && !partialName && !routeMatch)
44
+ continue;
45
+ const kind = artifactKind(path);
46
+ const kindAdjustment = requestedKinds.size === 0
47
+ ? 0
48
+ : requestedKinds.has(kind) ? 0.08
49
+ : kind === 'route' || kind === 'source' || kind === 'module' ? -0.12 : -0.04;
50
+ const score = clampScore((exactName ? 0.97 : routeMatch ? 0.91 : 0.88) + kindAdjustment);
51
+ const mode = exactName
52
+ ? symbolIdentities.includes(exactName) ? 'exported_symbol' : 'artifact_name'
53
+ : routeMatch ? 'route_registration' : 'artifact_name';
54
+ const strongArtifactMatch = score >= 0.88 && !isSupportOnlyPath(path)
55
+ && (requestedKinds.size === 0 || requestedKinds.has(kind));
56
+ const artifactRole = strongArtifactMatch
57
+ ? 'operation_target'
58
+ : 'supporting_file';
59
+ setCandidate(candidates, inventoryEntry(input, path, artifactRole, score, mode, [
60
+ `${mode} matched ${exactName ?? partialName ?? 'route'} in ${path}`,
61
+ ], symbols));
62
+ }
63
+ const entries = [...candidates.values()]
64
+ .filter(entry => entry.matchMode === 'missing_explicit_path' || entry.freshness.exists)
65
+ .sort((left, right) => right.score - left.score || left.path.localeCompare(right.path));
66
+ const explicitTargets = entries.filter(entry => entry.matchMode === 'explicit_path'
67
+ || entry.matchMode === 'missing_explicit_path');
68
+ let operationTargets = explicitTargets.length > 0
69
+ ? explicitTargets
70
+ : entries.filter(entry => entry.artifactRole === 'operation_target' && entry.score >= 0.88);
71
+ if (operationTargets.length > 1 && explicitTargets.length === 0) {
72
+ const top = operationTargets[0].score;
73
+ operationTargets = operationTargets.filter(entry => top - entry.score <= 0.03).slice(0, 5);
74
+ }
75
+ else {
76
+ operationTargets = operationTargets.slice(0, explicitTargets.length > 0 ? 16 : 3);
77
+ }
78
+ const operationPaths = new Set(operationTargets.map(entry => entry.path));
79
+ for (const entry of entries) {
80
+ if (!operationPaths.has(entry.path) && entry.artifactRole === 'operation_target') {
81
+ entry.artifactRole = input.action === 'create' ? 'reference_pattern' : 'supporting_file';
82
+ }
83
+ }
84
+ const ambiguous = explicitTargets.length === 0 && operationTargets.length > 1;
85
+ const result = {
86
+ entries: entries.slice(0, 40),
87
+ operationTargets,
88
+ missingExplicitTargets: entries.filter(entry => entry.matchMode === 'missing_explicit_path'),
89
+ ambiguous,
90
+ };
91
+ if (input.identity) {
92
+ try {
93
+ emitSemanticControlLog({
94
+ event: 'artifact.inventory.completed',
95
+ identity: input.identity,
96
+ level: result.missingExplicitTargets.length > 0 || ambiguous ? 'warn' : 'info',
97
+ timestamp: Date.now(),
98
+ data: {
99
+ action: input.action,
100
+ explicitAnchorCount: explicitAnchors.length,
101
+ candidateCount: result.entries.length,
102
+ operationTargets: operationTargets.map(entry => entry.path),
103
+ missingExplicitTargets: result.missingExplicitTargets.map(entry => entry.path),
104
+ ambiguous,
105
+ },
106
+ });
107
+ }
108
+ catch {
109
+ // Inventory observability cannot alter context selection.
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ function inventoryEntry(input, path, artifactRole, score, matchMode, evidence, symbols = []) {
115
+ return {
116
+ path,
117
+ artifactRole,
118
+ score,
119
+ matchMode,
120
+ artifactKind: artifactKind(path),
121
+ symbols,
122
+ evidence,
123
+ freshness: input.indexer.getFileFreshness(path),
124
+ };
125
+ }
126
+ function setCandidate(candidates, candidate) {
127
+ const existing = candidates.get(candidate.path);
128
+ if (!existing || candidate.score > existing.score
129
+ || candidate.matchMode === 'explicit_path' || candidate.matchMode === 'missing_explicit_path') {
130
+ candidates.set(candidate.path, candidate);
131
+ }
132
+ }
133
+ function resolveExplicitAnchor(anchor, files) {
134
+ if (files.includes(anchor))
135
+ return anchor;
136
+ const caseInsensitive = files.filter(path => path.toLocaleLowerCase('en-US') === anchor.toLocaleLowerCase('en-US'));
137
+ if (caseInsensitive.length === 1)
138
+ return caseInsensitive[0];
139
+ const withoutExtension = anchor.replace(/\.[^.]+$/u, '');
140
+ const candidates = files.filter(path => path.replace(/\.[^.]+$/u, '') === withoutExtension
141
+ || path.startsWith(`${withoutExtension}/index.`));
142
+ return candidates.length === 1 ? candidates[0] : undefined;
143
+ }
144
+ function inferRequestedArtifactKinds(query) {
145
+ const kinds = new Set();
146
+ if (/component|组件/iu.test(query)) {
147
+ kinds.add('component');
148
+ kinds.add('page');
149
+ }
150
+ if (/\bpage\b|页面/iu.test(query)) {
151
+ kinds.add('page');
152
+ kinds.add('component');
153
+ }
154
+ if (/\broute\b|routing|路由/iu.test(query))
155
+ kinds.add('route');
156
+ if (/\bmodule\b|模块/iu.test(query))
157
+ kinds.add('module');
158
+ if (/\btests?\b|测试/iu.test(query))
159
+ kinds.add('test');
160
+ if (/\bconfig\b|配置/iu.test(query))
161
+ kinds.add('config');
162
+ return kinds;
163
+ }
164
+ function clampScore(value) {
165
+ return Math.max(0, Math.min(1, value));
166
+ }
167
+ function artifactTerms(query, anchors) {
168
+ const normalized = query.normalize('NFKC').replace(/([a-z0-9])([A-Z])/gu, '$1 $2').toLocaleLowerCase('en-US');
169
+ const raw = [
170
+ ...(normalized.match(/[a-z_$][a-z0-9_$-]{2,}/gu) ?? []),
171
+ ...anchors.flatMap(anchor => anchor.split(/[/.\\_-]+/u)),
172
+ ];
173
+ const stop = new Set([
174
+ 'component', 'components', 'page', 'pages', 'module', 'file', 'files', 'src',
175
+ 'create', 'modify', 'update', 'build', 'review', 'analyze', 'performance',
176
+ 'add', 'new', 'feature', 'implement', 'props', 'jsx', 'react', 'tsx',
177
+ 'typescript', 'javascript', 'help', 'please', 'using', 'current', 'project',
178
+ ]);
179
+ return [...new Set(raw.map(normalizeIdentity).filter(term => term.length >= 3 && !stop.has(term)))];
180
+ }
181
+ function normalizeIdentity(value) {
182
+ return value.normalize('NFKC').toLocaleLowerCase('en-US').replace(/[^a-z0-9_$]+/gu, '');
183
+ }
184
+ function artifactKind(path) {
185
+ if (/(?:^|\/)routes?(?:\/|\.)|\.route\.[cm]?[jt]sx?$/iu.test(path))
186
+ return 'route';
187
+ if (/(?:^|\/)pages?(?:\/|\.)|page\.[cm]?[jt]sx?$/iu.test(path))
188
+ return 'page';
189
+ if (/(?:^|\/)components?(?:\/|\.)|\.[jt]sx$/iu.test(path))
190
+ return 'component';
191
+ if (/\.(?:test|spec)\.[cm]?[jt]sx?$/iu.test(path))
192
+ return 'test';
193
+ if (/(?:^|\/)config|\.config\.[cm]?[jt]s$/iu.test(path))
194
+ return 'config';
195
+ if (/\.(?:css|scss|sass|less|svg|png|jpe?g|webp)$/iu.test(path))
196
+ return 'resource';
197
+ if (/(?:^|\/)modules?(?:\/|\.)/iu.test(path))
198
+ return 'module';
199
+ return 'source';
200
+ }
201
+ function isSupportOnlyPath(path) {
202
+ return artifactKind(path) === 'test' || artifactKind(path) === 'config'
203
+ || artifactKind(path) === 'resource';
204
+ }
205
+ function isInventoryFile(path) {
206
+ return ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'].includes(extname(path).toLocaleLowerCase('en-US'));
207
+ }
208
+ function normalizeProjectPath(value) {
209
+ return normalize(value).replaceAll('\\', '/').replace(/^\.\//u, '');
210
+ }
211
+ //# sourceMappingURL=artifact-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-inventory.js","sourceRoot":"","sources":["../src/artifact-inventory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,WAAW,EACX,aAAa,EAOb,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,iCAAiC,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAU3D,OAAO,KAAK,EAKV,kBAAkB,EAClB,+BAA+B,EAChC,MAAM,YAAY,CAAC;AA0SpB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAoCD,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,IAAI,EAAE,iBAAiB;IAYnC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,UAAU,CAAkD;IAE9D,gCAAgC,CAAC,KAAK,EAAE;QAC5C,OAAO,EAAE,sBAAsB,EAAE,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,yBAAyB;YAoCnB,yBAAyB;IAiCvC,OAAO,CAAC,eAAe;IAKjB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAkRtD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,+BAA+B,CAAC;YA8nB/F,sBAAsB;IAsWpC,OAAO,CAAC,yBAAyB;YAgBnB,2BAA2B;YA4B3B,6BAA6B;IAkB3C,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,2BAA2B;IAOnC,SAAS,IAAI,WAAW;CASzB"}
1
+ {"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,WAAW,EACX,aAAa,EAOb,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,iCAAiC,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAU3D,OAAO,KAAK,EAKV,kBAAkB,EAClB,+BAA+B,EAChC,MAAM,YAAY,CAAC;AA2SpB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAoCD,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,IAAI,EAAE,iBAAiB;IAYnC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,UAAU,CAAkD;IAE9D,gCAAgC,CAAC,KAAK,EAAE;QAC5C,OAAO,EAAE,sBAAsB,EAAE,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,yBAAyB;YAqCnB,yBAAyB;IAiCvC,OAAO,CAAC,eAAe;IAKjB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAkRtD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,+BAA+B,CAAC;YAutB/F,sBAAsB;IAsWpC,OAAO,CAAC,yBAAyB;YAgBnB,2BAA2B;YA4B3B,6BAA6B;IAkB3C,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,2BAA2B;IAOnC,SAAS,IAAI,WAAW;CASzB"}
@@ -9,6 +9,7 @@ import { rankOptionalContextFiles, } from "./ranker.js";
9
9
  import { describeLayerEvidence, detectLanguageFromPath, } from "./layer-rules.js";
10
10
  import { reachableCodeGraphNodeIds, sanitizeCodeGraphEdges, } from './graph-edge-quality.js';
11
11
  import { assembleContextFileRoles } from './context-file-roles.js';
12
+ import { buildArtifactInventory } from './artifact-inventory.js';
12
13
  import { buildTaskContextEnvelope } from './task-retrieval-orchestrator.js';
13
14
  import { recordTaskEnvelopeLedger } from './retrieval-ledger.js';
14
15
  import { selectGraphEvidence } from './graph-evidence-selector.js';
@@ -315,6 +316,7 @@ export class ContextEngine {
315
316
  const languages = Object.keys(stats.filesByLanguage ?? {});
316
317
  return {
317
318
  limit,
319
+ retrievalIntent: 'automatic_context',
318
320
  budgetTokens: Math.max(0, Math.floor(totalBudget * 0.25)),
319
321
  activeSkill: options.activeSkill,
320
322
  relevantFiles: options.relevantFiles,
@@ -633,11 +635,11 @@ export class ContextEngine {
633
635
  const taskType = intent.intent;
634
636
  const combinedQuery = options?.queryPlan?.code[0]?.query
635
637
  ?? mergeQueries(query, expandQuery(query), options?.expandedTerms);
636
- const targetAnchors = options?.intentArtifact?.targetAnchors ?? extractTargetAnchors(query);
637
- const retrievalTaskPlan = buildRetrievalTaskPlan({
638
+ const explicitTargetAnchors = options?.intentArtifact?.targetAnchors ?? extractTargetAnchors(query);
639
+ const initialTaskPlan = buildRetrievalTaskPlan({
638
640
  query,
639
641
  parsedIntent: intent,
640
- targetAnchors,
642
+ targetAnchors: explicitTargetAnchors,
641
643
  activeSkill: options?.activeSkill,
642
644
  command: options?.command,
643
645
  authoritativeArtifact: options?.intentArtifact,
@@ -652,6 +654,49 @@ export class ContextEngine {
652
654
  intentArtifactHash: options?.intentArtifact?.artifactHash,
653
655
  queryPlanHash: options?.queryPlan?.planHash,
654
656
  };
657
+ let artifactInventory = this.indexer
658
+ ? buildArtifactInventory({
659
+ codegraph: this.cg,
660
+ indexer: this.indexer,
661
+ query: combinedQuery,
662
+ explicitTargetAnchors,
663
+ action: initialTaskPlan.action,
664
+ identity: logIdentity,
665
+ })
666
+ : { entries: [], operationTargets: [], missingExplicitTargets: [], ambiguous: false };
667
+ const staleInventoryTargets = artifactInventory.operationTargets
668
+ .filter(entry => entry.freshness.exists && !entry.freshness.current)
669
+ .map(entry => entry.path);
670
+ if (this.indexer && staleInventoryTargets.length > 0) {
671
+ await this.indexer.ensureFilesCurrent(staleInventoryTargets, { refresh: true, timeoutMs: 5_000 });
672
+ artifactInventory = buildArtifactInventory({
673
+ codegraph: this.cg,
674
+ indexer: this.indexer,
675
+ query: combinedQuery,
676
+ explicitTargetAnchors,
677
+ action: initialTaskPlan.action,
678
+ identity: logIdentity,
679
+ });
680
+ }
681
+ const targetAnchors = [...new Set([
682
+ ...explicitTargetAnchors,
683
+ ...artifactInventory.operationTargets
684
+ .filter(entry => entry.freshness.current)
685
+ .map(entry => entry.path),
686
+ ])];
687
+ const retrievalTaskPlan = buildRetrievalTaskPlan({
688
+ query,
689
+ parsedIntent: intent,
690
+ targetAnchors,
691
+ activeSkill: options?.activeSkill,
692
+ command: options?.command,
693
+ authoritativeArtifact: options?.intentArtifact,
694
+ });
695
+ if (artifactInventory.missingExplicitTargets.length > 0) {
696
+ warnings.push(`explicit-target-missing:${artifactInventory.missingExplicitTargets.length}`);
697
+ }
698
+ if (artifactInventory.ambiguous)
699
+ warnings.push('artifact-target-ambiguous');
655
700
  const timing = {};
656
701
  const t0 = Date.now();
657
702
  const [cgResult, knowledgeResult, memoryHits] = await Promise.all([
@@ -735,6 +780,20 @@ export class ContextEngine {
735
780
  }
736
781
  ctx.nodes = Array.isArray(ctx.nodes) ? ctx.nodes : [];
737
782
  ctx.entryPoints = Array.isArray(ctx.entryPoints) ? ctx.entryPoints : [];
783
+ const inventoryNodeIds = new Set(ctx.nodes.map((node) => String(node.id ?? '')));
784
+ for (const target of artifactInventory.operationTargets.filter(entry => entry.freshness.current)) {
785
+ const nodes = this.cg.getNodesInFile(target.path)
786
+ .filter(node => node.kind !== 'file' && node.kind !== 'import');
787
+ for (const node of nodes) {
788
+ if (!inventoryNodeIds.has(node.id)) {
789
+ ctx.nodes.push(node);
790
+ inventoryNodeIds.add(node.id);
791
+ }
792
+ }
793
+ const root = nodes.find(node => target.symbols.includes(node.name)) ?? nodes[0];
794
+ if (root && !ctx.entryPoints.some((entry) => entry.id === root.id))
795
+ ctx.entryPoints.unshift(root);
796
+ }
738
797
  await this.applyTaskSymbolVectorRecall(ctx, combinedQuery, warnings);
739
798
  this.clearRecoveredSymbolWarning(warnings);
740
799
  // Fallback: direct searchNodes for query terms that buildContext may have missed
@@ -797,6 +856,22 @@ export class ContextEngine {
797
856
  ctx.edges = edgeQuality.accepted;
798
857
  if (edgeQuality.rejected.length > 0) {
799
858
  warnings.push(`codegraph-relations-rejected:${edgeQuality.rejected.length}`);
859
+ emitSemanticControlLog({
860
+ event: 'codegraph.edge.rejected',
861
+ identity: logIdentity,
862
+ level: 'warn',
863
+ timestamp: Date.now(),
864
+ data: {
865
+ rejectedCount: edgeQuality.rejected.length,
866
+ reasons: countValues(edgeQuality.rejected.map(edge => edge.reason)),
867
+ examples: edgeQuality.rejected.slice(0, 8).map(edge => ({
868
+ kind: edge.kind,
869
+ sourceFile: edge.sourceFile,
870
+ targetFile: edge.targetFile,
871
+ reason: edge.reason,
872
+ })),
873
+ },
874
+ });
800
875
  }
801
876
  const tSnippet = Date.now();
802
877
  let allNodes = ctx.nodes ?? [];
@@ -845,6 +920,10 @@ export class ContextEngine {
845
920
  const optionalCandidates = new Map();
846
921
  const graphOptionalPaths = new Set();
847
922
  const queryTerms = combinedQuery.split(/\s+/).map(term => term.toLowerCase()).filter(term => term.length >= 3);
923
+ for (const target of artifactInventory.operationTargets) {
924
+ if (target.freshness.current)
925
+ requiredFileSet.add(target.path);
926
+ }
848
927
  for (const node of allNodes) {
849
928
  // Skip file wrappers and import edges — they're not actionable symbols
850
929
  if (node.kind === "file" || node.kind === "import")
@@ -899,6 +978,16 @@ export class ContextEngine {
899
978
  }
900
979
  }
901
980
  const fileRoleByPath = new Map();
981
+ for (const artifact of artifactInventory.entries.filter(entry => entry.freshness.current)) {
982
+ fileRoleByPath.set(artifact.path, {
983
+ path: artifact.path,
984
+ role: artifact.artifactRole === 'operation_target' ? 'target' : 'dependency',
985
+ artifactRole: artifact.artifactRole,
986
+ score: artifact.score,
987
+ evidence: artifact.evidence,
988
+ });
989
+ fileFreshnessByPath.set(artifact.path, artifact.freshness);
990
+ }
902
991
  const roleCandidates = this.indexer
903
992
  ? assembleContextFileRoles({
904
993
  codegraph: this.cg,
@@ -911,7 +1000,10 @@ export class ContextEngine {
911
1000
  if (this.indexer?.getFileFreshness) {
912
1001
  fileFreshnessByPath.set(candidate.path, this.indexer.getFileFreshness(candidate.path));
913
1002
  }
914
- fileRoleByPath.set(candidate.path, candidate);
1003
+ const inventoryRole = fileRoleByPath.get(candidate.path);
1004
+ fileRoleByPath.set(candidate.path, inventoryRole && inventoryRole.score >= candidate.score
1005
+ ? inventoryRole
1006
+ : candidate);
915
1007
  if (candidate.role === 'target') {
916
1008
  requiredFileSet.add(candidate.path);
917
1009
  continue;
@@ -1639,4 +1731,10 @@ function getGroupFilePaths(group) {
1639
1731
  return group;
1640
1732
  return group?.files ?? [];
1641
1733
  }
1734
+ function countValues(values) {
1735
+ const counts = {};
1736
+ for (const value of values)
1737
+ counts[value] = (counts[value] ?? 0) + 1;
1738
+ return counts;
1739
+ }
1642
1740
  //# sourceMappingURL=context-engine.js.map