@roarpeng/graphflow 1.15.2 → 1.15.3

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [1.15.3] - 2026-09-05
6
+
7
+ ### Changed
8
+
9
+ - **R4 context packaging 去重**:`buildLayeredContextPackage` / `buildEnhancedContextPackage` 抽出共享 `context-package-core`(keyword/vector 召回、L1–L3 配额打包、dialogue 与 neighbor expansion)。两条公开函数的签名与 MCP/CLI context preview 行为保持不变;enhanced 仍独占 adaptive budget、RepoMap、symbol boost、graph compression 与 same-file/import 扩展。
10
+
11
+ ### Tests
12
+
13
+ - **m74/m75 测试隔离**:不再 `process.chdir()`,也不再向真实 `$HOME/.npm/_npx` 写文件。fake home 与项目根均落在 `os.tmpdir()`,通过 `fromDir` 注入与 `process.cwd` mock 覆盖 unsafe-cwd 路径。
14
+
5
15
  ## [1.15.2] - 2026-09-05
6
16
 
7
17
  ### Added
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- [![npm version](https://img.shields.io/badge/npm-1.15.2-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
5
+ [![npm version](https://img.shields.io/badge/npm-1.15.3-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
6
6
 
7
7
  > **The memory & context harness for coding agents.** Local-first code knowledge graph · bounded context compression (~98% token savings) · cross-session learning flywheel.
8
8
 
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- [![npm version](https://img.shields.io/badge/npm-1.15.2-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
5
+ [![npm version](https://img.shields.io/badge/npm-1.15.3-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
6
6
 
7
7
  > **给编程 Agent 用的记忆与上下文 harness。** 本地优先的代码知识图谱 · 有界上下文压缩(约 98% token 节省) · 跨会话学习飞轮。
8
8
 
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Shared context-packaging core.
3
+ *
4
+ * `buildLayeredContextPackage` and `buildEnhancedContextPackage` used to
5
+ * duplicate retrieval + L1/L2/L3 quota packing (~60% overlap). Both public
6
+ * functions keep their signatures and extras; this module owns the common
7
+ * recall/pack steps so behavior stays identical.
8
+ */
9
+ import type { GraphNode } from "../core/types.js";
10
+ import type { GraphClient } from "./client-factory.js";
11
+ import type { ContextAnchorItem, LayeredContextPackage, LayeredPackageOptions, SubgraphExpansionOptions } from "./context-slicer-types.js";
12
+ export type DuplicateModulePolicy = "continue" | "break";
13
+ export interface PackState {
14
+ summaryChannel: string[];
15
+ anchorChannel: ContextAnchorItem[];
16
+ added: Set<string>;
17
+ quota: {
18
+ l1: number;
19
+ l2: number;
20
+ l3: number;
21
+ };
22
+ used: {
23
+ l1: number;
24
+ l2: number;
25
+ l3: number;
26
+ };
27
+ maxTokens: number;
28
+ maxAnchors?: number;
29
+ }
30
+ export interface PackBudget {
31
+ tokens: number;
32
+ truncated: boolean;
33
+ }
34
+ /**
35
+ * Governance pins for L3: Decision/goal nodes that packing must prefer so
36
+ * budget truncation cannot drop alignment / deviation / goal constraints.
37
+ */
38
+ export declare function isPinnedL3Node(node: GraphNode): boolean;
39
+ export declare function createPackState(maxTokens: number, options?: LayeredPackageOptions, maxAnchors?: number): PackState;
40
+ export declare function toLayeredPackage(state: PackState, budget: PackBudget): LayeredContextPackage;
41
+ export declare function expandSubgraph(client: GraphClient, seedIds: string[], options?: SubgraphExpansionOptions): Promise<GraphNode[]>;
42
+ export declare function vectorRecall(nodes: GraphNode[], queryEmbedding: number[], topK: number, minSimilarity: number): GraphNode[];
43
+ export declare function collectKeywordHits(client: GraphClient, query: string, options?: LayeredPackageOptions): Promise<GraphNode[]>;
44
+ /**
45
+ * Fuse keyword hits with vector recall when enabled.
46
+ * Returns `null` when vector recall is off so callers keep their current hit list
47
+ * (enhanced may have already applied symbol boosting).
48
+ * On failure, returns the original keyword hits (same reset both builders used).
49
+ */
50
+ export declare function fuseVectorRecallIfEnabled(client: GraphClient, query: string, keywordHits: GraphNode[], options: LayeredPackageOptions | undefined, logLabel: string): Promise<GraphNode[] | null>;
51
+ export declare function preparePackageHits(hits: GraphNode[], query: string, options: LayeredPackageOptions | undefined, snapshotNodes: GraphNode[] | undefined): GraphNode[];
52
+ export declare function tryAppendL3Node(node: GraphNode, state: PackState, budget: PackBudget): "packed" | "budget" | "skip";
53
+ export declare function packPrimaryHits(hits: GraphNode[], state: PackState, budget: PackBudget): void;
54
+ export declare function injectL2Modules(client: GraphClient, hits: GraphNode[], state: PackState, budget: PackBudget, duplicatePolicy: DuplicateModulePolicy): Promise<void>;
55
+ export declare function injectL3SkillsAndPins(client: GraphClient, query: string, options: LayeredPackageOptions | undefined, snapshotNodes: GraphNode[] | undefined, state: PackState, budget: PackBudget): Promise<void>;
56
+ export declare function injectDialogueTurns(client: GraphClient, query: string, options: LayeredPackageOptions | undefined, state: PackState, budget: PackBudget): Promise<void>;
57
+ export declare function injectSameFileAndImportExpansion(client: GraphClient, snapshotNodes: GraphNode[] | undefined, state: PackState, budget: PackBudget): Promise<void>;
58
+ export declare function injectNeighborExpansion(client: GraphClient, options: LayeredPackageOptions | undefined, state: PackState, budget: PackBudget): Promise<void>;
59
+ //# sourceMappingURL=context-package-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-package-core.d.ts","sourceRoot":"","sources":["../../src/graph/context-package-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,512 @@
1
+ "use strict";
2
+ /**
3
+ * Shared context-packaging core.
4
+ *
5
+ * `buildLayeredContextPackage` and `buildEnhancedContextPackage` used to
6
+ * duplicate retrieval + L1/L2/L3 quota packing (~60% overlap). Both public
7
+ * functions keep their signatures and extras; this module owns the common
8
+ * recall/pack steps so behavior stays identical.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.isPinnedL3Node = isPinnedL3Node;
12
+ exports.createPackState = createPackState;
13
+ exports.toLayeredPackage = toLayeredPackage;
14
+ exports.expandSubgraph = expandSubgraph;
15
+ exports.vectorRecall = vectorRecall;
16
+ exports.collectKeywordHits = collectKeywordHits;
17
+ exports.fuseVectorRecallIfEnabled = fuseVectorRecallIfEnabled;
18
+ exports.preparePackageHits = preparePackageHits;
19
+ exports.tryAppendL3Node = tryAppendL3Node;
20
+ exports.packPrimaryHits = packPrimaryHits;
21
+ exports.injectL2Modules = injectL2Modules;
22
+ exports.injectL3SkillsAndPins = injectL3SkillsAndPins;
23
+ exports.injectDialogueTurns = injectDialogueTurns;
24
+ exports.injectSameFileAndImportExpansion = injectSameFileAndImportExpansion;
25
+ exports.injectNeighborExpansion = injectNeighborExpansion;
26
+ const logger_js_1 = require("../utils/logger.js");
27
+ const embeddings_js_1 = require("../learning/embeddings.js");
28
+ const graph_utils_js_1 = require("./graph-utils.js");
29
+ const query_expand_js_1 = require("./query-expand.js");
30
+ const hit_diversify_js_1 = require("./hit-diversify.js");
31
+ const symbol_extract_js_1 = require("./symbol-extract.js");
32
+ const context_slicer_utils_js_1 = require("./context-slicer-utils.js");
33
+ const context_slicer_types_js_1 = require("./context-slicer-types.js");
34
+ const L3_PIN_HINT = /alignment|deviation|goal/i;
35
+ /** Max matched dialogue turns packed per preview (after effective-turns filter). */
36
+ const DIALOGUE_PACK_MAX_TURNS = 3;
37
+ /**
38
+ * Governance pins for L3: Decision/goal nodes that packing must prefer so
39
+ * budget truncation cannot drop alignment / deviation / goal constraints.
40
+ */
41
+ function isPinnedL3Node(node) {
42
+ if (node.id.startsWith("goal:")) {
43
+ return true;
44
+ }
45
+ if (node.type !== "Decision") {
46
+ return false;
47
+ }
48
+ if (L3_PIN_HINT.test(node.content)) {
49
+ return true;
50
+ }
51
+ if (node.metadata && L3_PIN_HINT.test(JSON.stringify(node.metadata))) {
52
+ return true;
53
+ }
54
+ return false;
55
+ }
56
+ function createPackState(maxTokens, options, maxAnchors) {
57
+ const state = {
58
+ summaryChannel: [],
59
+ anchorChannel: [],
60
+ added: new Set(),
61
+ quota: {
62
+ l1: options?.layerQuota?.l1 ?? Number.POSITIVE_INFINITY,
63
+ l2: options?.layerQuota?.l2 ?? Number.POSITIVE_INFINITY,
64
+ l3: options?.layerQuota?.l3 ?? Number.POSITIVE_INFINITY,
65
+ },
66
+ used: { l1: 0, l2: 0, l3: 0 },
67
+ maxTokens,
68
+ };
69
+ if (maxAnchors !== undefined) {
70
+ state.maxAnchors = maxAnchors;
71
+ }
72
+ return state;
73
+ }
74
+ function toLayeredPackage(state, budget) {
75
+ return {
76
+ summaryChannel: state.summaryChannel,
77
+ anchorChannel: state.anchorChannel,
78
+ tokenEstimate: budget.tokens,
79
+ truncated: budget.truncated,
80
+ };
81
+ }
82
+ async function expandSubgraph(client, seedIds, options) {
83
+ if (typeof client.getNeighbors !== "function")
84
+ return [];
85
+ const hops = options?.hops ?? 1;
86
+ const maxNodes = options?.maxNodes ?? 20;
87
+ const relations = options?.relations ?? context_slicer_types_js_1.DEFAULT_EXPANSION_RELATIONS;
88
+ const excluded = new Set(seedIds);
89
+ const collected = new Map();
90
+ let frontier = [...seedIds];
91
+ for (let depth = 0; depth < hops; depth += 1) {
92
+ if (frontier.length === 0)
93
+ break;
94
+ const neighbors = await client.getNeighbors(frontier, relations, "both");
95
+ const nextFrontier = [];
96
+ for (const { node } of neighbors) {
97
+ if (excluded.has(node.id) || collected.has(node.id))
98
+ continue;
99
+ collected.set(node.id, node);
100
+ nextFrontier.push(node.id);
101
+ if (collected.size >= maxNodes)
102
+ break;
103
+ }
104
+ if (collected.size >= maxNodes)
105
+ break;
106
+ frontier = nextFrontier;
107
+ }
108
+ return Array.from(collected.values());
109
+ }
110
+ function vectorRecall(nodes, queryEmbedding, topK, minSimilarity) {
111
+ if (!queryEmbedding || queryEmbedding.length === 0)
112
+ return [];
113
+ const scored = [];
114
+ for (const node of nodes) {
115
+ const emb = (0, embeddings_js_1.extractEmbedding)(node);
116
+ if (!emb)
117
+ continue;
118
+ const sim = (0, embeddings_js_1.cosineSimilarity)(queryEmbedding, emb);
119
+ if (sim >= minSimilarity)
120
+ scored.push({ node, sim });
121
+ }
122
+ scored.sort((a, b) => b.sim - a.sim);
123
+ return scored.slice(0, topK).map((s) => s.node);
124
+ }
125
+ function collectVectorRecallCandidates(client, keywordHits, enableFullGraphVectorRecall) {
126
+ if (!enableFullGraphVectorRecall) {
127
+ return keywordHits;
128
+ }
129
+ const byId = new Map();
130
+ for (const hit of keywordHits) {
131
+ if ((0, embeddings_js_1.extractEmbedding)(hit)) {
132
+ byId.set(hit.id, hit);
133
+ }
134
+ }
135
+ const snapshot = client.readSnapshot?.();
136
+ if (!snapshot) {
137
+ return keywordHits;
138
+ }
139
+ for (const node of snapshot.nodes) {
140
+ if ((0, embeddings_js_1.extractEmbedding)(node)) {
141
+ byId.set(node.id, node);
142
+ }
143
+ }
144
+ return byId.size > 0 ? Array.from(byId.values()) : keywordHits;
145
+ }
146
+ async function hnswVectorRecall(nodes, queryEmbedding, topK, minSimilarity, hnswIndexPath) {
147
+ const { getSharedVectorIndex } = await import("../learning/hnsw-index.js");
148
+ const { index } = getSharedVectorIndex(nodes, hnswIndexPath);
149
+ const results = await index.search(queryEmbedding, topK, minSimilarity);
150
+ return results.map((result) => result.node);
151
+ }
152
+ async function collectKeywordHits(client, query, options) {
153
+ return (0, query_expand_js_1.collectExpandedKeywordHits)(client, query, options?.workspaceRoot, options?.englishQuery);
154
+ }
155
+ /**
156
+ * Fuse keyword hits with vector recall when enabled.
157
+ * Returns `null` when vector recall is off so callers keep their current hit list
158
+ * (enhanced may have already applied symbol boosting).
159
+ * On failure, returns the original keyword hits (same reset both builders used).
160
+ */
161
+ async function fuseVectorRecallIfEnabled(client, query, keywordHits, options, logLabel) {
162
+ if (options?.enableVectorRecall !== true || !options.embeddingProvider) {
163
+ return null;
164
+ }
165
+ try {
166
+ const queryEmbedding = await options.embeddingProvider.embed(query);
167
+ const topK = options.vectorTopK ?? 8;
168
+ const minSim = options.vectorMinSimilarity ?? 0.05;
169
+ const vectorCandidates = collectVectorRecallCandidates(client, keywordHits, options.enableFullGraphVectorRecall === true);
170
+ const vectorHits = await hnswVectorRecall(vectorCandidates, queryEmbedding, topK, minSim, options.hnswIndexPath);
171
+ return (0, embeddings_js_1.reciprocalRankFusion)([keywordHits, vectorHits]);
172
+ }
173
+ catch (error) {
174
+ logger_js_1.logger.warn({ error }, `Vector recall failed in ${logLabel}`);
175
+ return keywordHits;
176
+ }
177
+ }
178
+ function preparePackageHits(hits, query, options, snapshotNodes) {
179
+ return (0, hit_diversify_js_1.prepareHitsForPackaging)(hits, {
180
+ query,
181
+ ...(options?.englishQuery !== undefined ? { englishQuery: options.englishQuery } : {}),
182
+ ...(snapshotNodes !== undefined ? { allNodes: snapshotNodes } : {}),
183
+ });
184
+ }
185
+ function atAnchorCap(state) {
186
+ return state.maxAnchors !== undefined && state.anchorChannel.length >= state.maxAnchors;
187
+ }
188
+ function tryAppendL3Node(node, state, budget) {
189
+ if (atAnchorCap(state)) {
190
+ return "skip";
191
+ }
192
+ if (state.added.has(node.id)) {
193
+ return "skip";
194
+ }
195
+ if (!(0, context_slicer_utils_js_1.canUseLayer)("L3", state.quota, state.used)) {
196
+ return "skip";
197
+ }
198
+ const summary = `${node.type}: ${node.content}`;
199
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
200
+ if (budget.tokens + estimate > state.maxTokens) {
201
+ budget.truncated = true;
202
+ return "budget";
203
+ }
204
+ state.summaryChannel.push(summary);
205
+ state.anchorChannel.push({ id: node.id, type: node.type, layer: "L3" });
206
+ state.added.add(node.id);
207
+ budget.tokens += estimate;
208
+ (0, context_slicer_utils_js_1.markLayerUsed)("L3", state.used);
209
+ return "packed";
210
+ }
211
+ function collectPinnedL3Nodes(ranked, snapshotNodes, added) {
212
+ const pins = [];
213
+ const seen = new Set();
214
+ const consider = (node) => {
215
+ if (added.has(node.id) || seen.has(node.id) || !isPinnedL3Node(node)) {
216
+ return;
217
+ }
218
+ seen.add(node.id);
219
+ pins.push(node);
220
+ };
221
+ for (const node of ranked)
222
+ consider(node);
223
+ if (snapshotNodes) {
224
+ for (const node of snapshotNodes)
225
+ consider(node);
226
+ }
227
+ return pins;
228
+ }
229
+ function packPrimaryHits(hits, state, budget) {
230
+ for (const hit of hits) {
231
+ if (atAnchorCap(state)) {
232
+ budget.truncated = true;
233
+ break;
234
+ }
235
+ const layer = (0, context_slicer_utils_js_1.classifyLayer)(hit);
236
+ if (!(0, context_slicer_utils_js_1.canUseLayer)(layer, state.quota, state.used)) {
237
+ continue;
238
+ }
239
+ const summary = `${hit.type}: ${hit.content}`;
240
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
241
+ if (budget.tokens + estimate > state.maxTokens) {
242
+ budget.truncated = true;
243
+ break;
244
+ }
245
+ state.summaryChannel.push(summary);
246
+ state.anchorChannel.push({ id: hit.id, type: hit.type, layer });
247
+ state.added.add(hit.id);
248
+ budget.tokens += estimate;
249
+ (0, context_slicer_utils_js_1.markLayerUsed)(layer, state.used);
250
+ }
251
+ }
252
+ async function injectL2Modules(client, hits, state, budget, duplicatePolicy) {
253
+ if (budget.truncated || atAnchorCap(state)) {
254
+ return;
255
+ }
256
+ const hitById = new Map();
257
+ for (const hit of hits) {
258
+ hitById.set(hit.id, hit);
259
+ }
260
+ const moduleIds = new Set();
261
+ for (const anchor of state.anchorChannel) {
262
+ if (anchor.layer !== "L1" || (anchor.type !== "File" && anchor.type !== "Symbol")) {
263
+ continue;
264
+ }
265
+ const moduleId = (0, context_slicer_utils_js_1.deriveModuleId)(anchor, hitById.get(anchor.id));
266
+ if (moduleId) {
267
+ moduleIds.add(moduleId);
268
+ }
269
+ }
270
+ let moduleNodes = [];
271
+ if (moduleIds.size > 0 && typeof client.getNodesByIds === "function") {
272
+ moduleNodes = await client.getNodesByIds(Array.from(moduleIds));
273
+ }
274
+ for (const moduleId of moduleIds) {
275
+ if (state.added.has(moduleId)) {
276
+ if (duplicatePolicy === "break") {
277
+ break;
278
+ }
279
+ continue;
280
+ }
281
+ if (atAnchorCap(state)) {
282
+ break;
283
+ }
284
+ if (!(0, context_slicer_utils_js_1.canUseLayer)("L2", state.quota, state.used)) {
285
+ break;
286
+ }
287
+ const node = moduleNodes.find((n) => n.id === moduleId) ??
288
+ ({ id: moduleId, type: "Module", content: moduleId.slice("module:".length) });
289
+ const summary = `${node.type}: ${node.content}`;
290
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
291
+ if (budget.tokens + estimate > state.maxTokens) {
292
+ budget.truncated = true;
293
+ break;
294
+ }
295
+ state.summaryChannel.push(summary);
296
+ state.anchorChannel.push({ id: node.id, type: node.type, layer: "L2" });
297
+ state.added.add(node.id);
298
+ budget.tokens += estimate;
299
+ (0, context_slicer_utils_js_1.markLayerUsed)("L2", state.used);
300
+ }
301
+ }
302
+ async function injectL3SkillsAndPins(client, query, options, snapshotNodes, state, budget) {
303
+ if (atAnchorCap(state)) {
304
+ return;
305
+ }
306
+ const archIntent = context_slicer_types_js_1.ARCHITECTURE_QUERY.test((0, graph_utils_js_1.composeContextQuery)(query, options?.englishQuery));
307
+ if (!(options?.enableAlwaysOnLayers || archIntent)) {
308
+ return;
309
+ }
310
+ const l3Candidates = (0, graph_utils_js_1.rankNodesForContextQuery)((await client.queryByKeyword(query)).filter((n) => n.type === "Skill" || n.type === "Decision"), query, {
311
+ scoreTokens: (0, graph_utils_js_1.buildSearchScoreTokens)(query, options?.englishQuery),
312
+ matchQueries: options?.englishQuery?.trim() ? [query, options.englishQuery.trim()] : [query],
313
+ ...(options?.englishQuery !== undefined ? { englishQuery: options.englishQuery } : {}),
314
+ });
315
+ const pins = collectPinnedL3Nodes(l3Candidates, snapshotNodes, state.added);
316
+ for (const node of pins) {
317
+ if (tryAppendL3Node(node, state, budget) === "budget")
318
+ break;
319
+ }
320
+ if (budget.truncated) {
321
+ return;
322
+ }
323
+ let l3Added = pins.filter((n) => state.added.has(n.id)).length;
324
+ for (const node of l3Candidates) {
325
+ if (l3Added >= 2 || atAnchorCap(state))
326
+ break;
327
+ if (isPinnedL3Node(node))
328
+ continue;
329
+ const result = tryAppendL3Node(node, state, budget);
330
+ if (result === "budget")
331
+ break;
332
+ if (result === "packed")
333
+ l3Added += 1;
334
+ }
335
+ }
336
+ async function collectDialogueContextLines(client, query, options) {
337
+ try {
338
+ const { listDialogueTurns, effectiveTurns, formatSupersessionLine } = await import("../learning/dialogue-thread.js");
339
+ const allTurns = await listDialogueTurns(client, { limit: 60 });
340
+ const turns = effectiveTurns(allTurns);
341
+ if (turns.length === 0)
342
+ return [];
343
+ const scoreTokens = (0, graph_utils_js_1.buildSearchScoreTokens)(query, options?.englishQuery);
344
+ if (scoreTokens.length === 0)
345
+ return [];
346
+ const tokenSet = new Set(scoreTokens.map((t) => t.toLowerCase()));
347
+ const scored = turns
348
+ .map((turn) => {
349
+ const haystack = `${turn.userQuery} ${turn.title ?? ""} ${turn.summary ?? ""}`.toLowerCase();
350
+ let hits = 0;
351
+ for (const token of tokenSet) {
352
+ if (haystack.includes(token))
353
+ hits += 1;
354
+ }
355
+ return { turn, hits };
356
+ })
357
+ .filter((s) => s.hits > 0)
358
+ .sort((a, b) => b.hits - a.hits || b.turn.updatedAt - a.turn.updatedAt)
359
+ .slice(0, DIALOGUE_PACK_MAX_TURNS);
360
+ if (scored.length === 0)
361
+ return [];
362
+ const byId = new Map(allTurns.map((t) => [t.id, t]));
363
+ const lines = [];
364
+ for (const { turn } of scored) {
365
+ const correctionTargets = (turn.supersedesTurnIds ?? [])
366
+ .map((id) => byId.get(id))
367
+ .filter((t) => Boolean(t));
368
+ const correctionLine = correctionTargets.length > 0
369
+ ? formatSupersessionLine(correctionTargets[correctionTargets.length - 1], turn)
370
+ : undefined;
371
+ lines.push({
372
+ kind: "turn",
373
+ text: turn.title ?? turn.userQuery,
374
+ node: {
375
+ id: turn.id,
376
+ type: "Decision",
377
+ content: `dialogue-turn #${turn.seq} Q: ${turn.userQuery}`,
378
+ metadata: { kind: "dialogue-turn", record: JSON.stringify(turn) },
379
+ },
380
+ ...(correctionLine ? { correctionLine } : {}),
381
+ });
382
+ }
383
+ return lines;
384
+ }
385
+ catch {
386
+ return [];
387
+ }
388
+ }
389
+ async function injectDialogueTurns(client, query, options, state, budget) {
390
+ if (budget.truncated) {
391
+ return;
392
+ }
393
+ const dialogueLines = await collectDialogueContextLines(client, query, options);
394
+ for (const line of dialogueLines) {
395
+ if (line.kind === "summary") {
396
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(line.text);
397
+ if (budget.tokens + estimate > state.maxTokens) {
398
+ budget.truncated = true;
399
+ break;
400
+ }
401
+ budget.tokens += estimate;
402
+ }
403
+ else if (line.kind === "turn" && line.node) {
404
+ if (tryAppendL3Node(line.node, state, budget) === "budget") {
405
+ break;
406
+ }
407
+ if (line.correctionLine) {
408
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(line.correctionLine);
409
+ if (budget.tokens + estimate > state.maxTokens) {
410
+ budget.truncated = true;
411
+ break;
412
+ }
413
+ state.summaryChannel.push(line.correctionLine);
414
+ budget.tokens += estimate;
415
+ }
416
+ }
417
+ }
418
+ }
419
+ async function injectSameFileAndImportExpansion(client, snapshotNodes, state, budget) {
420
+ if (budget.truncated || atAnchorCap(state)) {
421
+ return;
422
+ }
423
+ const seedFilePaths = [];
424
+ for (const anchor of state.anchorChannel) {
425
+ if (anchor.type === "File" && anchor.id.startsWith("file:")) {
426
+ seedFilePaths.push(anchor.id.slice("file:".length));
427
+ }
428
+ else if (anchor.type === "Symbol") {
429
+ const fp = (0, context_slicer_utils_js_1.extractFileFromSymbolId)(anchor.id);
430
+ if (fp)
431
+ seedFilePaths.push(fp);
432
+ }
433
+ }
434
+ if (seedFilePaths.length > 0 && snapshotNodes) {
435
+ for (const node of snapshotNodes) {
436
+ if (state.added.has(node.id) || atAnchorCap(state))
437
+ continue;
438
+ if (node.type !== "Symbol")
439
+ continue;
440
+ const nodeFile = (0, context_slicer_utils_js_1.extractFileFromSymbolId)(node.id);
441
+ if (!nodeFile)
442
+ continue;
443
+ const inSeedFile = seedFilePaths.some((sp) => nodeFile.includes(sp.replace(/\.(ts|tsx|js|jsx|py|go|rs)$/, "")) ||
444
+ sp
445
+ .replace(/\.(ts|tsx|js|jsx|py|go|rs)$/, "")
446
+ .includes(nodeFile.replace(/\.(ts|tsx|js|jsx|py|go|rs)$/, "")));
447
+ if (!inSeedFile)
448
+ continue;
449
+ const layer = (0, context_slicer_utils_js_1.classifyLayer)(node);
450
+ const summary = `${node.type}: ${node.content}`;
451
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
452
+ if (budget.tokens + estimate > state.maxTokens) {
453
+ budget.truncated = true;
454
+ break;
455
+ }
456
+ state.summaryChannel.push(summary);
457
+ state.anchorChannel.push({ id: node.id, type: node.type, layer });
458
+ state.added.add(node.id);
459
+ budget.tokens += estimate;
460
+ (0, context_slicer_utils_js_1.markLayerUsed)(layer, state.used);
461
+ }
462
+ }
463
+ if (seedFilePaths.length > 0 && !atAnchorCap(state)) {
464
+ const importHits = await (0, symbol_extract_js_1.collectImportRelatedFiles)(client, seedFilePaths, 5);
465
+ for (const node of importHits) {
466
+ if (state.added.has(node.id) || atAnchorCap(state))
467
+ continue;
468
+ const layer = (0, context_slicer_utils_js_1.classifyLayer)(node);
469
+ const summary = `${node.type}: ${node.content}`;
470
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
471
+ if (budget.tokens + estimate > state.maxTokens) {
472
+ budget.truncated = true;
473
+ break;
474
+ }
475
+ state.summaryChannel.push(summary);
476
+ state.anchorChannel.push({ id: node.id, type: node.type, layer });
477
+ state.added.add(node.id);
478
+ budget.tokens += estimate;
479
+ (0, context_slicer_utils_js_1.markLayerUsed)(layer, state.used);
480
+ }
481
+ }
482
+ }
483
+ async function injectNeighborExpansion(client, options, state, budget) {
484
+ const enableExpansion = options?.enableEdgeExpansion !== false;
485
+ if (!enableExpansion || budget.truncated || atAnchorCap(state) || typeof client.getNeighbors !== "function") {
486
+ return;
487
+ }
488
+ const seedIds = state.anchorChannel.slice(0, 5).map((a) => a.id);
489
+ if (seedIds.length === 0) {
490
+ return;
491
+ }
492
+ const expanded = await expandSubgraph(client, seedIds, { hops: 1 });
493
+ for (const node of expanded) {
494
+ if (state.added.has(node.id) || atAnchorCap(state))
495
+ continue;
496
+ const layer = (0, context_slicer_utils_js_1.classifyLayer)(node);
497
+ if (!(0, context_slicer_utils_js_1.canUseLayer)(layer, state.quota, state.used))
498
+ continue;
499
+ const summary = `${node.type}: ${node.content}`;
500
+ const estimate = (0, context_slicer_utils_js_1.estimateTokens)(summary);
501
+ if (budget.tokens + estimate > state.maxTokens) {
502
+ budget.truncated = true;
503
+ break;
504
+ }
505
+ state.summaryChannel.push(summary);
506
+ state.anchorChannel.push({ id: node.id, type: node.type, layer });
507
+ state.added.add(node.id);
508
+ budget.tokens += estimate;
509
+ (0, context_slicer_utils_js_1.markLayerUsed)(layer, state.used);
510
+ }
511
+ }
512
+ //# sourceMappingURL=context-package-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-package-core.js","sourceRoot":"","sources":["../../src/graph/context-package-core.ts"],"names":[],"mappings":"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"}