@remnic/core 9.6.30 → 9.6.31
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/dist/access-admin-ops-surface.d.ts +1 -0
- package/dist/access-boundary.d.ts +1 -0
- package/dist/access-cli.js +9 -9
- package/dist/access-http.d.ts +1 -0
- package/dist/access-identity-continuity-surface.d.ts +1 -0
- package/dist/access-lcm-surface.d.ts +1 -0
- package/dist/access-mcp.d.ts +1 -0
- package/dist/access-observe-write-surface.d.ts +1 -0
- package/dist/access-operations.d.ts +1 -0
- package/dist/access-recall-surface.d.ts +1 -0
- package/dist/access-service.d.ts +1 -0
- package/dist/access-surface-catalog.d.ts +1 -0
- package/dist/bootstrap.d.ts +1 -0
- package/dist/causal-behavior.d.ts +1 -0
- package/dist/{chunk-XGSOXFD4.js → chunk-6TCXIRP5.js} +2 -2
- package/dist/{chunk-7O2JL5RY.js → chunk-DEOYTFA6.js} +2 -2
- package/dist/{chunk-R26WO46Z.js → chunk-DGFU5MSX.js} +16 -1
- package/dist/chunk-DGFU5MSX.js.map +1 -0
- package/dist/{chunk-BFU7H32D.js → chunk-OH7QLI6W.js} +2 -2
- package/dist/{chunk-IRMLYBMU.js → chunk-T67LUYCR.js} +2 -2
- package/dist/{chunk-77UPM7P3.js → chunk-TVIVY7KU.js} +160 -61
- package/dist/chunk-TVIVY7KU.js.map +1 -0
- package/dist/{chunk-KCYE2MZM.js → chunk-UXPUUL3G.js} +29 -8
- package/dist/chunk-UXPUUL3G.js.map +1 -0
- package/dist/{chunk-3VSTTB74.js → chunk-WSOEYOHN.js} +7 -7
- package/dist/{chunk-5AJIDEFT.js → chunk-XFTPUXCE.js} +11 -7
- package/dist/chunk-XFTPUXCE.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/compounding/preference-consolidator.d.ts +1 -0
- package/dist/event-order-recall.d.ts +1 -0
- package/dist/event-order-recall.js +2 -2
- package/dist/evidence-pack.d.ts +16 -1
- package/dist/evidence-pack.js +1 -1
- package/dist/explicit-capture.d.ts +1 -0
- package/dist/explicit-cue-recall.d.ts +16 -1
- package/dist/explicit-cue-recall.js +2 -2
- package/dist/focused-list-recall.d.ts +1 -0
- package/dist/focused-list-recall.js +2 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +9 -9
- package/dist/lcm/engine.d.ts +3 -0
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +5 -3
- package/dist/lcm/recall.d.ts +15 -1
- package/dist/lcm/recall.js +5 -3
- package/dist/lcm/tools.d.ts +1 -0
- package/dist/mcp-memory-inspector-app.d.ts +1 -0
- package/dist/orchestrator.d.ts +1 -0
- package/dist/orchestrator.js +9 -9
- package/dist/response-guidance-recall.d.ts +1 -0
- package/dist/response-guidance-recall.js +2 -2
- package/dist/targeted-fact-recall.d.ts +1 -0
- package/dist/targeted-fact-recall.js +2 -2
- package/package.json +2 -2
- package/src/evidence-pack.test.ts +66 -1
- package/src/evidence-pack.ts +39 -0
- package/src/explicit-cue-recall.ts +224 -67
- package/src/index.ts +3 -0
- package/src/lcm/engine.ts +17 -5
- package/src/lcm/index.ts +6 -1
- package/src/lcm/recall.ts +48 -5
- package/src/lcm-engine.test.ts +46 -0
- package/src/lcm-recall.test.ts +48 -1
- package/src/recall-trace-receipts.test.ts +380 -0
- package/dist/chunk-5AJIDEFT.js.map +0 -1
- package/dist/chunk-77UPM7P3.js.map +0 -1
- package/dist/chunk-KCYE2MZM.js.map +0 -1
- package/dist/chunk-R26WO46Z.js.map +0 -1
- /package/dist/{chunk-XGSOXFD4.js.map → chunk-6TCXIRP5.js.map} +0 -0
- /package/dist/{chunk-7O2JL5RY.js.map → chunk-DEOYTFA6.js.map} +0 -0
- /package/dist/{chunk-BFU7H32D.js.map → chunk-OH7QLI6W.js.map} +0 -0
- /package/dist/{chunk-IRMLYBMU.js.map → chunk-T67LUYCR.js.map} +0 -0
- /package/dist/{chunk-3VSTTB74.js.map → chunk-WSOEYOHN.js.map} +0 -0
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
// src/lcm/recall.ts
|
|
2
2
|
function assembleCompressedHistory(dag, archive, sessionId, config) {
|
|
3
|
+
return assembleCompressedHistoryWithTrace(dag, archive, sessionId, config).text;
|
|
4
|
+
}
|
|
5
|
+
function assembleCompressedHistoryWithTrace(dag, archive, sessionId, config) {
|
|
3
6
|
const maxTurn = archive.getMaxTurnIndex(sessionId);
|
|
4
|
-
if (maxTurn < 0) return "";
|
|
7
|
+
if (maxTurn < 0) return { text: "", selectedSummaries: [] };
|
|
5
8
|
const allNodes = dag.getAllNodes(sessionId);
|
|
6
|
-
if (allNodes.length === 0) return "";
|
|
9
|
+
if (allNodes.length === 0) return { text: "", selectedSummaries: [] };
|
|
7
10
|
const freshTailStart = Math.max(0, maxTurn - config.freshTailTurns + 1);
|
|
8
11
|
const sections = [];
|
|
12
|
+
const selectedNodes = [];
|
|
9
13
|
let usedChars = 0;
|
|
10
14
|
if (freshTailStart > 0) {
|
|
11
15
|
const oldNodes = selectBestCoverage(allNodes, 0, freshTailStart - 1);
|
|
@@ -15,6 +19,7 @@ function assembleCompressedHistory(dag, archive, sessionId, config) {
|
|
|
15
19
|
${node.summary_text}`;
|
|
16
20
|
if (usedChars + entry.length > config.budgetChars) break;
|
|
17
21
|
sections.push(entry);
|
|
22
|
+
selectedNodes.push(node);
|
|
18
23
|
usedChars += entry.length;
|
|
19
24
|
}
|
|
20
25
|
}
|
|
@@ -27,12 +32,27 @@ ${node.summary_text}`;
|
|
|
27
32
|
${node.summary_text}`;
|
|
28
33
|
if (usedChars + entry.length > config.budgetChars) break;
|
|
29
34
|
sections.push(entry);
|
|
35
|
+
selectedNodes.push(node);
|
|
30
36
|
usedChars += entry.length;
|
|
31
37
|
}
|
|
32
|
-
if (sections.length === 0) return "";
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
if (sections.length === 0) return { text: "", selectedSummaries: [] };
|
|
39
|
+
const prefix = "## Session History (Compressed)\n\n";
|
|
40
|
+
const text = `${prefix}${sections.join("\n\n")}`;
|
|
41
|
+
let entryStart = prefix.length;
|
|
42
|
+
const selectedSummaries = selectedNodes.map((node, index) => {
|
|
43
|
+
const entryEnd = entryStart + sections[index].length;
|
|
44
|
+
const receipt = {
|
|
45
|
+
id: node.id,
|
|
46
|
+
depth: node.depth,
|
|
47
|
+
msgStart: node.msg_start,
|
|
48
|
+
msgEnd: node.msg_end,
|
|
49
|
+
entryStart,
|
|
50
|
+
entryEnd
|
|
51
|
+
};
|
|
52
|
+
entryStart = entryEnd + 2;
|
|
53
|
+
return receipt;
|
|
54
|
+
});
|
|
55
|
+
return { text, selectedSummaries };
|
|
36
56
|
}
|
|
37
57
|
function selectBestCoverage(allNodes, fromTurn, toTurn) {
|
|
38
58
|
const candidates = allNodes.filter(
|
|
@@ -64,6 +84,7 @@ function formatRangeLabel(node, maxTurn) {
|
|
|
64
84
|
}
|
|
65
85
|
|
|
66
86
|
export {
|
|
67
|
-
assembleCompressedHistory
|
|
87
|
+
assembleCompressedHistory,
|
|
88
|
+
assembleCompressedHistoryWithTrace
|
|
68
89
|
};
|
|
69
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-UXPUUL3G.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lcm/recall.ts"],"sourcesContent":["import type { LcmDag, SummaryNode } from \"./dag.js\";\nimport type { LcmArchive } from \"./archive.js\";\nimport { log } from \"../logger.js\";\n\nexport interface LcmRecallConfig {\n freshTailTurns: number;\n budgetChars: number;\n}\n\nexport interface LcmSummarySelectionReceipt {\n id: string;\n depth: number;\n msgStart: number;\n msgEnd: number;\n /** Half-open offsets within the returned compressed-history string. */\n entryStart: number;\n entryEnd: number;\n}\n\nexport interface LcmRecallWithTraceResult {\n text: string;\n selectedSummaries: LcmSummarySelectionReceipt[];\n}\n\n/**\n * Assemble a compressed session history section from the summary DAG.\n *\n * Strategy:\n * 1. For the \"fresh tail\" (most recent N turns), use leaf-level summaries for maximum detail.\n * 2. For older portions, use the deepest available summary nodes (most compressed).\n * 3. Fill within budget, prioritizing recent content.\n */\nexport function assembleCompressedHistory(\n dag: LcmDag,\n archive: LcmArchive,\n sessionId: string,\n config: LcmRecallConfig,\n): string {\n return assembleCompressedHistoryWithTrace(dag, archive, sessionId, config).text;\n}\n\nexport function assembleCompressedHistoryWithTrace(\n dag: LcmDag,\n archive: LcmArchive,\n sessionId: string,\n config: LcmRecallConfig,\n): LcmRecallWithTraceResult {\n const maxTurn = archive.getMaxTurnIndex(sessionId);\n if (maxTurn < 0) return { text: \"\", selectedSummaries: [] };\n\n const allNodes = dag.getAllNodes(sessionId);\n if (allNodes.length === 0) return { text: \"\", selectedSummaries: [] };\n\n const freshTailStart = Math.max(0, maxTurn - config.freshTailTurns + 1);\n const sections: string[] = [];\n const selectedNodes: SummaryNode[] = [];\n let usedChars = 0;\n\n // Collect nodes covering the \"old\" portion (before fresh tail)\n if (freshTailStart > 0) {\n const oldNodes = selectBestCoverage(allNodes, 0, freshTailStart - 1);\n for (const node of oldNodes) {\n const label = formatRangeLabel(node, maxTurn);\n const entry = `**${label}** (depth ${node.depth}):\\n${node.summary_text}`;\n if (usedChars + entry.length > config.budgetChars) break;\n sections.push(entry);\n selectedNodes.push(node);\n usedChars += entry.length;\n }\n }\n\n // Collect leaf nodes that overlap with the fresh tail region.\n // The old section uses deep nodes (depth > 0), so leaf nodes included here\n // won't duplicate old-section content. Use msg_end >= freshTailStart to\n // include straddling leaf nodes that partially cover the fresh region.\n const freshNodes = allNodes\n .filter(\n (n) => n.depth === 0 && n.msg_end >= freshTailStart && n.msg_end <= maxTurn,\n )\n .sort((a, b) => a.msg_start - b.msg_start);\n\n for (const node of freshNodes) {\n const label = `Recent (turns ${node.msg_start}-${node.msg_end})`;\n const entry = `**${label}**:\\n${node.summary_text}`;\n if (usedChars + entry.length > config.budgetChars) break;\n sections.push(entry);\n selectedNodes.push(node);\n usedChars += entry.length;\n }\n\n if (sections.length === 0) return { text: \"\", selectedSummaries: [] };\n\n const prefix = \"## Session History (Compressed)\\n\\n\";\n const text = `${prefix}${sections.join(\"\\n\\n\")}`;\n let entryStart = prefix.length;\n const selectedSummaries = selectedNodes.map((node, index) => {\n const entryEnd = entryStart + sections[index]!.length;\n const receipt: LcmSummarySelectionReceipt = {\n id: node.id,\n depth: node.depth,\n msgStart: node.msg_start,\n msgEnd: node.msg_end,\n entryStart,\n entryEnd,\n };\n entryStart = entryEnd + 2;\n return receipt;\n });\n return { text, selectedSummaries };\n}\n\n/**\n * Select the best coverage for a turn range.\n * Prefers deeper (more compressed) nodes. Avoids overlapping coverage.\n */\nfunction selectBestCoverage(\n allNodes: SummaryNode[],\n fromTurn: number,\n toTurn: number,\n): SummaryNode[] {\n // Filter to nodes fully contained in the requested range. Straddling nodes\n // would duplicate protected fresh-tail turns while still emitting their full\n // summary text and range label.\n const candidates = allNodes.filter(\n (n) => n.msg_start >= fromTurn && n.msg_end <= toTurn,\n );\n\n if (candidates.length === 0) return [];\n\n // Sort by msg_start ascending, then depth descending (prefer deeper at same position)\n candidates.sort((a, b) => {\n if (a.msg_start !== b.msg_start) return a.msg_start - b.msg_start;\n return b.depth - a.depth;\n });\n\n // Greedily select non-overlapping nodes, preferring deeper coverage.\n const selected: SummaryNode[] = [];\n let coveredUpTo = fromTurn - 1;\n\n for (const node of candidates) {\n if (node.msg_start > coveredUpTo) {\n selected.push(node);\n coveredUpTo = node.msg_end;\n if (coveredUpTo >= toTurn) break;\n }\n }\n\n // Re-sort selected by msg_start for chronological output\n selected.sort((a, b) => a.msg_start - b.msg_start);\n return selected;\n}\n\nfunction formatRangeLabel(node: SummaryNode, maxTurn: number): string {\n const startPct = Math.round((node.msg_start / Math.max(1, maxTurn)) * 100);\n const endPct = Math.round((node.msg_end / Math.max(1, maxTurn)) * 100);\n\n if (startPct < 33) return `Early session (turns ${node.msg_start}-${node.msg_end})`;\n if (endPct < 66) return `Mid session (turns ${node.msg_start}-${node.msg_end})`;\n return `Later session (turns ${node.msg_start}-${node.msg_end})`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-7HYPN2GC.js";
|
|
20
20
|
import {
|
|
21
21
|
LcmEngine
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-XFTPUXCE.js";
|
|
23
23
|
import {
|
|
24
24
|
cleanupConversationChunks
|
|
25
25
|
} from "./chunk-RP7YXA67.js";
|
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
import {
|
|
62
62
|
buildTargetedFactRecallSection,
|
|
63
63
|
shouldRecallTargetedFactEvidence
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-T67LUYCR.js";
|
|
65
65
|
import {
|
|
66
66
|
buildTemporalTimelineRecallSection
|
|
67
67
|
} from "./chunk-I6WYQSX4.js";
|
|
@@ -87,7 +87,7 @@ import {
|
|
|
87
87
|
import {
|
|
88
88
|
buildResponseGuidanceRecallSection,
|
|
89
89
|
shouldRecallResponseGuidance
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-6TCXIRP5.js";
|
|
91
91
|
import {
|
|
92
92
|
mergeWithAgentResults,
|
|
93
93
|
runDirectAgent,
|
|
@@ -177,18 +177,18 @@ import {
|
|
|
177
177
|
import {
|
|
178
178
|
buildFocusedListRecallSection,
|
|
179
179
|
shouldRecallFocusedListEvidence
|
|
180
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-OH7QLI6W.js";
|
|
181
181
|
import {
|
|
182
182
|
buildEventOrderRecallSection,
|
|
183
183
|
shouldRecallEventOrderEvidence
|
|
184
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-DEOYTFA6.js";
|
|
185
185
|
import {
|
|
186
186
|
pickFactEventTimeAnchor,
|
|
187
187
|
resolveFactEventTime
|
|
188
188
|
} from "./chunk-IAIPNEHD.js";
|
|
189
189
|
import {
|
|
190
190
|
buildExplicitCueRecallSection
|
|
191
|
-
} from "./chunk-
|
|
191
|
+
} from "./chunk-TVIVY7KU.js";
|
|
192
192
|
import {
|
|
193
193
|
formatDaySummaryMemories
|
|
194
194
|
} from "./chunk-I73G4UH7.js";
|
|
@@ -23092,4 +23092,4 @@ export {
|
|
|
23092
23092
|
blendGraphExpandedRecallScore,
|
|
23093
23093
|
Orchestrator
|
|
23094
23094
|
};
|
|
23095
|
-
//# sourceMappingURL=chunk-
|
|
23095
|
+
//# sourceMappingURL=chunk-WSOEYOHN.js.map
|
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
LcmWorkQueue
|
|
3
3
|
} from "./chunk-TPDBFYEG.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
5
|
+
assembleCompressedHistoryWithTrace
|
|
6
|
+
} from "./chunk-UXPUUL3G.js";
|
|
7
7
|
import {
|
|
8
8
|
ensureLcmStateDir,
|
|
9
9
|
openLcmDatabase
|
|
@@ -269,15 +269,19 @@ var LcmEngine = class {
|
|
|
269
269
|
}
|
|
270
270
|
/** Build the compressed history recall section for a session. */
|
|
271
271
|
async assembleRecall(sessionId, budgetChars) {
|
|
272
|
-
|
|
272
|
+
return (await this.assembleRecallWithTrace(sessionId, budgetChars)).text;
|
|
273
|
+
}
|
|
274
|
+
/** Build compressed recall plus content-free selected-summary receipts. */
|
|
275
|
+
async assembleRecallWithTrace(sessionId, budgetChars) {
|
|
276
|
+
if (!this.config.enabled) return { text: "", selectedSummaries: [] };
|
|
273
277
|
const normalizedSessionId = normalizeLcmSessionId(sessionId);
|
|
274
|
-
if (!normalizedSessionId) return "";
|
|
278
|
+
if (!normalizedSessionId) return { text: "", selectedSummaries: [] };
|
|
275
279
|
await this.ensureInitialized();
|
|
276
280
|
const effectiveBudget = Math.ceil(
|
|
277
281
|
budgetChars * this.config.recallBudgetShare
|
|
278
282
|
);
|
|
279
|
-
if (effectiveBudget <= 0) return "";
|
|
280
|
-
return
|
|
283
|
+
if (effectiveBudget <= 0) return { text: "", selectedSummaries: [] };
|
|
284
|
+
return assembleCompressedHistoryWithTrace(this.dag, this.archive, normalizedSessionId, {
|
|
281
285
|
freshTailTurns: this.config.freshTailTurns,
|
|
282
286
|
budgetChars: effectiveBudget
|
|
283
287
|
});
|
|
@@ -522,4 +526,4 @@ export {
|
|
|
522
526
|
extractLcmConfig,
|
|
523
527
|
LcmEngine
|
|
524
528
|
};
|
|
525
|
-
//# sourceMappingURL=chunk-
|
|
529
|
+
//# sourceMappingURL=chunk-XFTPUXCE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lcm/engine.ts"],"sourcesContent":["import type Database from \"better-sqlite3\";\nimport { openLcmDatabase, ensureLcmStateDir } from \"./schema.js\";\nimport { LcmArchive, type LcmStructuredRecallMatch } from \"./archive.js\";\nimport { LcmDag } from \"./dag.js\";\nimport { LcmSummarizer, type SummarizeFn } from \"./summarizer.js\";\nimport {\n assembleCompressedHistoryWithTrace,\n type LcmRecallConfig,\n type LcmRecallWithTraceResult,\n} from \"./recall.js\";\nimport { LcmWorkQueue, type LcmObserveMessage } from \"./queue.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { log } from \"../logger.js\";\n\nexport interface LcmEngineConfig {\n enabled: boolean;\n leafBatchSize: number;\n rollupFanIn: number;\n freshTailTurns: number;\n maxDepth: number;\n deterministicMaxTokens: number;\n archiveRetentionDays: number;\n recallBudgetShare: number;\n observeConcurrency: number;\n telemetryPrefilterEnabled: boolean;\n messagePartsEnabled: boolean;\n messagePartsRecallMaxResults: number;\n}\n\n/** An expanded archive row with stable lineage identity; content may be budget-truncated. */\nexport interface LcmExpandedMessage {\n id: number;\n session_id: string;\n turn_index: number;\n role: string;\n content: string;\n}\n\nfunction positiveInteger(value: unknown, fallback: number, min = 1): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n return Math.max(min, Math.floor(value));\n}\n\nexport function extractLcmConfig(cfg: PluginConfig): LcmEngineConfig {\n return {\n enabled: (cfg as any).lcmEnabled === true,\n leafBatchSize: positiveInteger((cfg as any).lcmLeafBatchSize, 8),\n rollupFanIn: positiveInteger((cfg as any).lcmRollupFanIn, 4, 2),\n freshTailTurns: positiveInteger((cfg as any).lcmFreshTailTurns, 16),\n maxDepth: positiveInteger((cfg as any).lcmMaxDepth, 5),\n deterministicMaxTokens: positiveInteger((cfg as any).lcmDeterministicMaxTokens, 512),\n archiveRetentionDays: positiveInteger((cfg as any).lcmArchiveRetentionDays, 90, 0),\n recallBudgetShare: (cfg as any).lcmRecallBudgetShare ?? 0.15,\n observeConcurrency:\n typeof (cfg as any).lcmObserveConcurrency === \"number\" &&\n Number.isFinite((cfg as any).lcmObserveConcurrency)\n ? Math.max(1, Math.floor((cfg as any).lcmObserveConcurrency))\n : 1,\n telemetryPrefilterEnabled: (cfg as any).lcmTelemetryPrefilterEnabled !== false,\n messagePartsEnabled: (cfg as any).messagePartsEnabled === true,\n messagePartsRecallMaxResults:\n typeof (cfg as any).messagePartsRecallMaxResults === \"number\"\n ? Math.max(0, Math.floor((cfg as any).messagePartsRecallMaxResults))\n : 6,\n };\n}\n\nfunction normalizeLcmSessionId(sessionId: string): string {\n return sessionId.trim();\n}\n\nfunction normalizeOptionalLcmSessionId(sessionId?: string): string | undefined {\n if (sessionId === undefined) {\n return undefined;\n }\n const normalized = normalizeLcmSessionId(sessionId);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nconst EMPTY_LCM_STATS = {\n totalMessages: 0,\n totalSummaryNodes: 0,\n maxDepth: -1,\n} as const;\n\nexport class LcmEngine {\n private db: Database.Database | null = null;\n private archive: LcmArchive | null = null;\n private dag: LcmDag | null = null;\n private summarizer: LcmSummarizer | null = null;\n private observeQueue: LcmWorkQueue | null = null;\n private closed = false;\n private readonly config: LcmEngineConfig;\n private readonly memoryDir: string;\n private initPromise: Promise<void> | null = null;\n private readonly pendingObserveInitCounts = new Map<string, number>();\n private readonly pendingObserveInitWaiters = new Map<string, Array<() => void>>();\n private readonly pendingObserveInitIdleWaiters: Array<() => void> = [];\n\n constructor(\n pluginConfig: PluginConfig,\n private readonly summarizeFn: SummarizeFn,\n ) {\n this.config = extractLcmConfig(pluginConfig);\n this.memoryDir = pluginConfig.memoryDir;\n }\n\n get enabled(): boolean {\n return this.config.enabled;\n }\n\n /** Lazy init — open database on first use. */\n async ensureInitialized(): Promise<void> {\n if (this.closed) return;\n if (this.db) return;\n if (this.initPromise) {\n await this.initPromise;\n return;\n }\n this.initPromise = this.doInit().catch((err) => {\n // Reset so next call retries instead of caching the failure\n this.initPromise = null;\n throw err;\n });\n await this.initPromise;\n }\n\n private async doInit(): Promise<void> {\n await ensureLcmStateDir(this.memoryDir);\n const db = openLcmDatabase(this.memoryDir);\n const archive = new LcmArchive(db);\n const dag = new LcmDag(db);\n const { telemetryPrefilterEnabled } = this.config;\n const summarizer = new LcmSummarizer(\n archive,\n dag,\n this.summarizeFn,\n {\n leafBatchSize: this.config.leafBatchSize,\n rollupFanIn: this.config.rollupFanIn,\n maxDepth: this.config.maxDepth,\n deterministicMaxTokens: this.config.deterministicMaxTokens,\n telemetryPrefilterEnabled,\n },\n );\n const observeQueue = new LcmWorkQueue({\n concurrency: this.config.observeConcurrency,\n worker: async (sessionId, messages) => {\n await this.processObserveMessages(sessionId, messages);\n },\n hooks: {\n onJobStart: ({ sessionId, depth, inFlight, waitMs }) => {\n log.debug(\n `LCM observe queue start: session=${sessionId}, depth=${depth}, inFlight=${inFlight}, wait=${waitMs}ms`,\n );\n },\n onJobFinish: ({\n sessionId,\n depth,\n inFlight,\n waitMs,\n runMs,\n totalMs,\n error,\n }) => {\n if (error) {\n log.error(\n `LCM observe queue failure: session=${sessionId}, depth=${depth}, inFlight=${inFlight}, wait=${waitMs}ms, run=${runMs}ms, total=${totalMs}ms, error=${error}`,\n );\n return;\n }\n\n log.debug(\n `LCM observe queue finish: session=${sessionId}, depth=${depth}, inFlight=${inFlight}, wait=${waitMs}ms, run=${runMs}ms, total=${totalMs}ms`,\n );\n },\n },\n });\n\n if (this.closed) {\n db.close();\n return;\n }\n\n this.db = db;\n this.archive = archive;\n this.dag = dag;\n this.summarizer = summarizer;\n this.observeQueue = observeQueue;\n log.info(\"LCM engine initialized\");\n }\n\n /**\n * Enqueue messages from agent_end hook.\n * The queue worker performs the archive append and incremental summarization.\n */\n async observeMessages(\n sessionId: string,\n messages: LcmObserveMessage[],\n ): Promise<void> {\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n this.enqueueObserveMessages(normalizedSessionId, messages);\n }\n\n /** Enqueue an observe job without waiting for worker completion. */\n enqueueObserveMessages(\n sessionId: string,\n messages: LcmObserveMessage[],\n ): void {\n if (!this.config.enabled || this.closed) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n if (messages.length === 0) return;\n\n this.reservePendingObserveInit(normalizedSessionId);\n\n void this.ensureInitialized()\n .then(() => {\n if (this.closed || !this.observeQueue) return;\n this.observeQueue.enqueue(normalizedSessionId, messages);\n log.debug(\n `LCM observe enqueued: session=${normalizedSessionId}, depth=${this.observeQueue.depth}, inFlight=${this.observeQueue.inFlightCount}`,\n );\n })\n .catch((err) => {\n if (this.closed) return;\n log.error(`LCM observe enqueue initialization error: ${err}`);\n })\n .finally(() => {\n this.releasePendingObserveInit(normalizedSessionId);\n });\n }\n\n private async processObserveMessages(\n sessionId: string,\n messages: LcmObserveMessage[],\n ): Promise<void> {\n if (this.closed) return;\n await this.ensureInitialized();\n if (this.closed || !this.archive || !this.summarizer) return;\n\n if (messages.length === 0) return;\n\n const currentMax = this.archive.getMaxTurnIndex(sessionId);\n const { messagePartsEnabled } = this.config;\n const newMessages = messages.map((m, i) => ({\n turnIndex: currentMax + 1 + i,\n role: m.role,\n content: m.content,\n parts: messagePartsEnabled ? m.parts : undefined,\n rawContent: messagePartsEnabled ? m.rawContent : undefined,\n sourceFormat: messagePartsEnabled ? m.sourceFormat : undefined,\n }));\n\n this.archive.appendMessages(sessionId, newMessages, {\n messagePartsEnabled,\n });\n\n // Trigger incremental summarization inside the worker, after append.\n try {\n await this.summarizer.summarizeIncremental(sessionId);\n } catch (err) {\n log.debug(`LCM incremental summarization error: ${err}`);\n }\n }\n\n get observeQueueDepth(): number {\n return this.observeQueue?.depth ?? 0;\n }\n\n get observeQueueInFlightCount(): number {\n return this.observeQueue?.inFlightCount ?? 0;\n }\n\n async waitForObserveQueueIdle(): Promise<void> {\n if (!this.config.enabled || this.closed) return;\n await this.ensureInitialized();\n if (this.closed) return;\n await this.waitForPendingObserveInitIdle();\n await this.observeQueue?.whenIdle();\n }\n\n async waitForSessionObserveIdle(sessionId: string): Promise<void> {\n if (!this.config.enabled || this.closed) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n await this.ensureInitialized();\n if (this.closed) return;\n await this.waitForPendingObserveInitIdle(normalizedSessionId);\n await this.observeQueue?.whenSessionIdle(normalizedSessionId);\n }\n\n private reservePendingObserveInit(sessionId: string): void {\n const count = this.pendingObserveInitCounts.get(sessionId) ?? 0;\n this.pendingObserveInitCounts.set(sessionId, count + 1);\n }\n\n private releasePendingObserveInit(sessionId: string): void {\n const count = this.pendingObserveInitCounts.get(sessionId);\n if (!count) return;\n\n if (count === 1) {\n this.pendingObserveInitCounts.delete(sessionId);\n const waiters = this.pendingObserveInitWaiters.get(sessionId) ?? [];\n this.pendingObserveInitWaiters.delete(sessionId);\n for (const resolve of waiters) resolve();\n if (this.pendingObserveInitCounts.size === 0) {\n const idleWaiters = this.pendingObserveInitIdleWaiters.splice(\n 0,\n this.pendingObserveInitIdleWaiters.length,\n );\n for (const resolve of idleWaiters) resolve();\n }\n return;\n }\n\n this.pendingObserveInitCounts.set(sessionId, count - 1);\n }\n\n private async waitForPendingObserveInitIdle(sessionId?: string): Promise<void> {\n if (sessionId) {\n if (!this.pendingObserveInitCounts.has(sessionId)) return;\n await new Promise<void>((resolve) => {\n const waiters = this.pendingObserveInitWaiters.get(sessionId) ?? [];\n waiters.push(resolve);\n this.pendingObserveInitWaiters.set(sessionId, waiters);\n });\n return;\n }\n\n if (this.pendingObserveInitCounts.size === 0) return;\n await new Promise<void>((resolve) => {\n this.pendingObserveInitIdleWaiters.push(resolve);\n });\n }\n\n /** Build the compressed history recall section for a session. */\n async assembleRecall(\n sessionId: string,\n budgetChars: number,\n ): Promise<string> {\n return (await this.assembleRecallWithTrace(sessionId, budgetChars)).text;\n }\n\n /** Build compressed recall plus content-free selected-summary receipts. */\n async assembleRecallWithTrace(\n sessionId: string,\n budgetChars: number,\n ): Promise<LcmRecallWithTraceResult> {\n if (!this.config.enabled) return { text: \"\", selectedSummaries: [] };\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return { text: \"\", selectedSummaries: [] };\n await this.ensureInitialized();\n\n const effectiveBudget = Math.ceil(\n budgetChars * this.config.recallBudgetShare,\n );\n if (effectiveBudget <= 0) return { text: \"\", selectedSummaries: [] };\n\n return assembleCompressedHistoryWithTrace(this.dag!, this.archive!, normalizedSessionId, {\n freshTailTurns: this.config.freshTailTurns,\n budgetChars: effectiveBudget,\n });\n }\n\n async searchStructuredParts(\n sessionId: string,\n query: string,\n limit = this.config.messagePartsRecallMaxResults,\n ): Promise<LcmStructuredRecallMatch[]> {\n const { messagePartsEnabled } = this.config;\n if (!this.config.enabled || !messagePartsEnabled) return [];\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return [];\n await this.ensureInitialized();\n if (!this.archive) return [];\n return this.archive.searchStructuredParts(query, limit, normalizedSessionId);\n }\n\n formatStructuredRecall(\n matches: LcmStructuredRecallMatch[],\n budgetChars: number,\n ): string {\n if (matches.length === 0 || budgetChars <= 0) return \"\";\n const lines: string[] = [];\n let used = \"## Structured Session Matches\\n\\n\".length;\n for (const match of matches) {\n const label = match.file_path\n ? `${match.kind} ${match.file_path}`\n : match.tool_name\n ? `${match.kind} ${match.tool_name}`\n : match.kind;\n const excerpt = match.content.replace(/\\s+/g, \" \").slice(0, 220);\n const line = `- turn ${match.turn_index} (${match.role}): ${label} — ${excerpt}`;\n if (used + line.length + 1 > budgetChars) break;\n lines.push(line);\n used += line.length + 1;\n }\n return lines.length > 0 ? `## Structured Session Matches\\n\\n${lines.join(\"\\n\")}` : \"\";\n }\n\n /** Flush pending summaries before compaction (called from before_compaction hook). */\n async preCompactionFlush(sessionId: string): Promise<void> {\n if (!this.config.enabled) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n await this.ensureInitialized();\n await this.waitForSessionObserveIdle(normalizedSessionId);\n\n try {\n await this.summarizer!.summarizeIncremental(normalizedSessionId);\n } catch (err) {\n log.debug(`LCM pre-compaction flush error: ${err}`);\n }\n }\n\n /** Record a compaction event with real token counts (called from after_compaction hook). */\n async recordCompaction(\n sessionId: string,\n tokensBefore: number,\n tokensAfter: number,\n ): Promise<void> {\n if (!this.config.enabled) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n await this.ensureInitialized();\n await this.waitForSessionObserveIdle(normalizedSessionId);\n\n const maxTurn = this.archive!.getMaxTurnIndex(normalizedSessionId);\n\n this.dag!.recordCompaction(normalizedSessionId, maxTurn, tokensBefore, tokensAfter);\n log.info(\n `LCM compaction recorded: session=${normalizedSessionId}, turn=${maxTurn}, tokens ${tokensBefore}→${tokensAfter}`,\n );\n }\n\n /** Verify archive coverage after compaction. */\n async verifyPostCompaction(sessionId: string): Promise<void> {\n if (!this.config.enabled) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n await this.ensureInitialized();\n\n const msgCount = this.archive!.getMessageCount(normalizedSessionId);\n const nodeCount = this.dag!.getNodeCount(normalizedSessionId);\n log.debug(\n `LCM post-compaction verify: session=${normalizedSessionId}, messages=${msgCount}, summaryNodes=${nodeCount}`,\n );\n }\n\n // ── MCP Tool implementations ──\n\n /** Search across all conversation history via FTS (snippet mode). */\n async searchContext(\n query: string,\n limit: number,\n sessionId?: string,\n sessionPrefix?: string,\n ): Promise<\n Array<{\n turn_index: number;\n role: string;\n snippet: string;\n session_id: string;\n }>\n > {\n if (!this.config.enabled) return [];\n const normalizedSessionId = normalizeOptionalLcmSessionId(sessionId);\n if (sessionId !== undefined && !normalizedSessionId) return [];\n const normalizedSessionPrefix = normalizeOptionalLcmSessionId(sessionPrefix);\n if (sessionPrefix !== undefined && !normalizedSessionPrefix) return [];\n await this.ensureInitialized();\n return this.archive!.search(query, limit, normalizedSessionId, normalizedSessionPrefix);\n }\n\n /** Search via FTS returning full message content (not snippets). */\n async searchContextFull(\n query: string,\n limit: number,\n sessionId?: string,\n sessionPrefix?: string,\n ): Promise<\n Array<{\n id: number;\n turn_index: number;\n role: string;\n content: string;\n session_id: string;\n score: number;\n }>\n > {\n if (!this.config.enabled) return [];\n const normalizedSessionId = normalizeOptionalLcmSessionId(sessionId);\n if (sessionId !== undefined && !normalizedSessionId) return [];\n const normalizedSessionPrefix = normalizeOptionalLcmSessionId(sessionPrefix);\n if (sessionPrefix !== undefined && !normalizedSessionPrefix) return [];\n await this.ensureInitialized();\n return this.archive!.searchWithContent(\n query,\n limit,\n normalizedSessionId,\n 1000,\n normalizedSessionPrefix,\n );\n }\n\n /** Get a compressed summary of a turn range. */\n async describeContext(\n sessionId: string,\n fromTurn: number,\n toTurn: number,\n ): Promise<{ summary: string; turn_count: number; depth: number } | null> {\n if (!this.config.enabled) return null;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return null;\n await this.ensureInitialized();\n\n const nodes = this.dag!.getCoveringNodes(normalizedSessionId, fromTurn, toTurn);\n if (nodes.length === 0) {\n // No summary exists — build a description from raw messages\n const messages = this.archive!.getMessages(normalizedSessionId, fromTurn, toTurn);\n if (messages.length === 0) return null;\n const preview = messages\n .slice(0, 5)\n .map((m) => `[${m.role}] ${m.content.slice(0, 100)}`)\n .join(\"\\n\");\n return {\n summary: `No summary available for this range. Preview of ${messages.length} messages:\\n${preview}`,\n turn_count: messages.length,\n depth: -1,\n };\n }\n\n // Use the deepest covering node\n const best = nodes[0]; // Already sorted by depth DESC\n return {\n summary: best.summary_text,\n turn_count: best.msg_end - best.msg_start + 1,\n depth: best.depth,\n };\n }\n\n /** Retrieve raw messages for a turn range (lossless expansion). */\n async expandContext(\n sessionId: string,\n fromTurn: number,\n toTurn: number,\n maxTokens: number,\n ): Promise<LcmExpandedMessage[]> {\n if (!this.config.enabled) return [];\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return [];\n await this.ensureInitialized();\n\n const messages = this.archive!.getMessages(normalizedSessionId, fromTurn, toTurn);\n if (messages.length === 0) return [];\n\n // Enforce token budget — keep first and last, truncate middle\n const maxChars = maxTokens * 4;\n let totalChars = 0;\n for (const m of messages) totalChars += m.content.length;\n\n if (totalChars <= maxChars) {\n return messages.map((m) => ({\n id: m.id,\n session_id: m.session_id,\n turn_index: m.turn_index,\n role: m.role,\n content: m.content,\n }));\n }\n\n // Keep first and last messages, truncate from middle\n const result: LcmExpandedMessage[] = [];\n let budget = maxChars;\n\n // Reserve space for the last message\n const lastMsg = messages[messages.length - 1];\n const lastMsgChars = Math.min(\n lastMsg.content.length,\n Math.floor(maxChars * 0.3),\n );\n budget -= lastMsgChars;\n\n // Add messages from the beginning\n for (let i = 0; i < messages.length - 1; i++) {\n if (budget <= 0) break;\n const m = messages[i];\n const truncated = m.content.slice(0, budget);\n result.push({\n id: m.id,\n session_id: m.session_id,\n turn_index: m.turn_index,\n role: m.role,\n content: truncated,\n });\n budget -= truncated.length;\n }\n\n // Always append the last message\n result.push({\n id: lastMsg.id,\n session_id: lastMsg.session_id,\n turn_index: lastMsg.turn_index,\n role: lastMsg.role,\n content: lastMsg.content.slice(0, lastMsgChars + Math.max(0, budget)),\n });\n\n return result;\n }\n\n /** Get statistics about the LCM archive. */\n async getStats(sessionId?: string): Promise<{\n totalMessages: number;\n totalSummaryNodes: number;\n maxDepth: number;\n maxTurnIndex?: number;\n }> {\n if (!this.config.enabled)\n return { totalMessages: 0, totalSummaryNodes: 0, maxDepth: -1 };\n const normalizedSessionId = normalizeOptionalLcmSessionId(sessionId);\n if (sessionId !== undefined && !normalizedSessionId) {\n return { ...EMPTY_LCM_STATS };\n }\n await this.ensureInitialized();\n\n if (normalizedSessionId) {\n return {\n totalMessages: this.archive!.getMessageCount(normalizedSessionId),\n totalSummaryNodes: this.dag!.getNodeCount(normalizedSessionId),\n maxDepth: this.dag!.getMaxDepth(normalizedSessionId),\n maxTurnIndex: this.archive!.getMaxTurnIndex(normalizedSessionId),\n };\n }\n\n return {\n totalMessages: this.archive!.getTotalMessageCount(),\n totalSummaryNodes: 0, // Would need a global count query\n maxDepth: -1,\n };\n }\n\n /** Clear all LCM archive and summary state for one session. */\n async clearSession(sessionId: string): Promise<void> {\n if (!this.config.enabled || this.closed) return;\n const normalizedSessionId = normalizeLcmSessionId(sessionId);\n if (!normalizedSessionId) return;\n await this.ensureInitialized();\n if (this.closed || !this.archive || !this.dag) return;\n await this.waitForSessionObserveIdle(normalizedSessionId);\n this.dag.deleteSession(normalizedSessionId);\n this.archive.deleteSession(normalizedSessionId);\n }\n\n /** Clear all LCM archive and summary state without closing the engine. */\n async clearAll(): Promise<void> {\n if (!this.config.enabled || this.closed) return;\n await this.ensureInitialized();\n if (this.closed || !this.archive || !this.dag) return;\n await this.waitForObserveQueueIdle();\n this.dag.deleteAll();\n this.archive.deleteAll();\n }\n\n /** Prune old data beyond retention period. */\n async prune(): Promise<{ messagesPruned: number; nodesPruned: number }> {\n if (!this.config.enabled) return { messagesPruned: 0, nodesPruned: 0 };\n await this.ensureInitialized();\n\n const messagesPruned = this.archive!.pruneOldMessages(\n this.config.archiveRetentionDays,\n );\n const nodesPruned = this.dag!.pruneOldNodes(\n this.config.archiveRetentionDays,\n );\n return { messagesPruned, nodesPruned };\n }\n\n /** Close the database connection. */\n close(): void {\n this.closed = true;\n if (this.db) {\n this.db.close();\n }\n this.db = null;\n this.archive = null;\n this.dag = null;\n this.summarizer = null;\n this.observeQueue = null;\n this.initPromise = null;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildEventOrderRecallSection,
|
|
3
3
|
shouldRecallEventOrderEvidence
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DEOYTFA6.js";
|
|
5
5
|
import "./chunk-LUPVCGYK.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-DGFU5MSX.js";
|
|
7
7
|
import "./chunk-C37ZRXX7.js";
|
|
8
8
|
import "./chunk-PZ5AY32C.js";
|
|
9
9
|
export {
|
package/dist/evidence-pack.d.ts
CHANGED
|
@@ -13,8 +13,23 @@ interface EvidencePackOptions {
|
|
|
13
13
|
maxChars: number;
|
|
14
14
|
maxItemChars?: number;
|
|
15
15
|
query?: string;
|
|
16
|
+
/** Optional non-rendering receipt for each block actually appended. */
|
|
17
|
+
onSelection?: (receipt: EvidencePackSelectionReceipt) => void;
|
|
18
|
+
}
|
|
19
|
+
/** Content-free identity fields for an evidence item that survived selection. */
|
|
20
|
+
interface EvidencePackSelectedItem {
|
|
21
|
+
archiveRowId?: number;
|
|
22
|
+
turnIndex?: number;
|
|
23
|
+
role?: string;
|
|
24
|
+
score?: number;
|
|
25
|
+
}
|
|
26
|
+
interface EvidencePackSelectionReceipt {
|
|
27
|
+
item: EvidencePackSelectedItem;
|
|
28
|
+
/** Half-open offsets within the returned evidence-pack string. */
|
|
29
|
+
blockStart: number;
|
|
30
|
+
blockEnd: number;
|
|
16
31
|
}
|
|
17
32
|
declare function buildEvidencePack(items: readonly EvidencePackItem[], options: EvidencePackOptions): string;
|
|
18
33
|
declare function insertAfterEvidenceHeading(evidence: string, title: string, insert: string): string;
|
|
19
34
|
|
|
20
|
-
export { type EvidencePackItem, type EvidencePackOptions, buildEvidencePack, insertAfterEvidenceHeading };
|
|
35
|
+
export { type EvidencePackItem, type EvidencePackOptions, type EvidencePackSelectedItem, type EvidencePackSelectionReceipt, buildEvidencePack, insertAfterEvidenceHeading };
|
package/dist/evidence-pack.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { EvidencePackSelectionReceipt } from './evidence-pack.js';
|
|
2
|
+
|
|
1
3
|
interface ExplicitCueRecallEngine {
|
|
2
4
|
expandContext(sessionId: string, fromTurn: number, toTurn: number, maxTokens: number): Promise<Array<{
|
|
3
5
|
id?: number;
|
|
@@ -36,12 +38,25 @@ interface ExplicitCueRecallOptions {
|
|
|
36
38
|
includeBenchmarkAnchorCues?: boolean;
|
|
37
39
|
includeContentLexicalCues?: boolean;
|
|
38
40
|
includeStructuredPlanCues?: boolean;
|
|
41
|
+
/** Observe selected evidence blocks without changing rendered output. */
|
|
42
|
+
onEvidenceSelected?: (receipt: EvidencePackSelectionReceipt) => void;
|
|
39
43
|
}
|
|
40
44
|
interface TrajectoryAnalysisRecallOptions {
|
|
41
45
|
engine: ExplicitCueRecallEngine | null | undefined;
|
|
42
46
|
sessionId?: string;
|
|
43
47
|
query: string;
|
|
44
48
|
maxChars: number;
|
|
49
|
+
/** Observe only emitted lines; unavailable lineage is never guessed. */
|
|
50
|
+
onLineSelected?: (receipt: TrajectoryAnalysisLineReceipt) => void;
|
|
51
|
+
}
|
|
52
|
+
interface TrajectoryAnalysisLineReceipt {
|
|
53
|
+
/** Half-open offsets within the returned trajectory section. */
|
|
54
|
+
lineStart: number;
|
|
55
|
+
lineEnd: number;
|
|
56
|
+
/** Whether the source row set is structurally exact or unavailable. */
|
|
57
|
+
lineageStatus: "exact" | "unavailable";
|
|
58
|
+
actionArchiveRowIds: number[];
|
|
59
|
+
observationArchiveRowIds: number[];
|
|
45
60
|
}
|
|
46
61
|
type ExplicitTurnReference = {
|
|
47
62
|
number: number;
|
|
@@ -65,4 +80,4 @@ declare function collectBenchmarkAnchorCues(query: string): string[];
|
|
|
65
80
|
declare function collectStructuredPlanCues(query: string): string[];
|
|
66
81
|
declare function collectTemporalLexicalCues(query: string): string[];
|
|
67
82
|
|
|
68
|
-
export { type ExplicitCueRecallEngine, type ExplicitCueRecallOptions, type ExplicitTurnReference, type TrajectoryAnalysisRecallOptions, buildExplicitCueRecallSection, buildTrajectoryAnalysisRecallSection, collectBenchmarkAnchorCues, collectContentLexicalCues, collectExplicitTurnReferences, collectLexicalCues, collectQuestionSlotCues, collectStructuredPlanCues, collectTemporalLexicalCues, normalizeTurnExpansionEnd };
|
|
83
|
+
export { type ExplicitCueRecallEngine, type ExplicitCueRecallOptions, type ExplicitTurnReference, type TrajectoryAnalysisLineReceipt, type TrajectoryAnalysisRecallOptions, buildExplicitCueRecallSection, buildTrajectoryAnalysisRecallSection, collectBenchmarkAnchorCues, collectContentLexicalCues, collectExplicitTurnReferences, collectLexicalCues, collectQuestionSlotCues, collectStructuredPlanCues, collectTemporalLexicalCues, normalizeTurnExpansionEnd };
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
collectStructuredPlanCues,
|
|
10
10
|
collectTemporalLexicalCues,
|
|
11
11
|
normalizeTurnExpansionEnd
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TVIVY7KU.js";
|
|
13
13
|
import "./chunk-YVVQUAOO.js";
|
|
14
14
|
import "./chunk-LUPVCGYK.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-DGFU5MSX.js";
|
|
16
16
|
import "./chunk-C37ZRXX7.js";
|
|
17
17
|
import "./chunk-PZ5AY32C.js";
|
|
18
18
|
export {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFocusedListRecallSection,
|
|
3
3
|
shouldRecallFocusedListEvidence
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OH7QLI6W.js";
|
|
5
5
|
import "./chunk-YVVQUAOO.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-DGFU5MSX.js";
|
|
7
7
|
import "./chunk-C37ZRXX7.js";
|
|
8
8
|
import "./chunk-PZ5AY32C.js";
|
|
9
9
|
export {
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export { D as DEFAULT_SELF_NAME, O as Orchestrator, c as ResolvedSpeaker, d as S
|
|
|
7
7
|
export { normalizeProjectionPreview, normalizeProjectionTags } from './memory-projection-format.js';
|
|
8
8
|
export { ModelCapabilities, ModelRegistry } from './model-registry.js';
|
|
9
9
|
export { ACTIVE_STATUSES, ContradictionFilter, ContradictionJudgeBatchResult, ContradictionJudgeInput, ContradictionJudgeResult, ContradictionListResult, ContradictionVerdict, ResolutionResult, ResolutionVerb, ScanDependencies, ScanResult, computePairId, executeResolution, isCoolingDown, isValidResolutionVerb, judgeContradictionPairs, listPairs, readPair, resolvePair, runContradictionScan, writePair, writePairs } from './contradiction/index.js';
|
|
10
|
-
export { EvidencePackItem, EvidencePackOptions, buildEvidencePack } from './evidence-pack.js';
|
|
11
|
-
export { ExplicitCueRecallEngine, ExplicitCueRecallOptions, ExplicitTurnReference, TrajectoryAnalysisRecallOptions, buildExplicitCueRecallSection, buildTrajectoryAnalysisRecallSection, collectBenchmarkAnchorCues, collectContentLexicalCues, collectExplicitTurnReferences, collectLexicalCues, collectQuestionSlotCues, collectStructuredPlanCues, collectTemporalLexicalCues, normalizeTurnExpansionEnd } from './explicit-cue-recall.js';
|
|
10
|
+
export { EvidencePackItem, EvidencePackOptions, EvidencePackSelectedItem, EvidencePackSelectionReceipt, buildEvidencePack } from './evidence-pack.js';
|
|
11
|
+
export { ExplicitCueRecallEngine, ExplicitCueRecallOptions, ExplicitTurnReference, TrajectoryAnalysisLineReceipt, TrajectoryAnalysisRecallOptions, buildExplicitCueRecallSection, buildTrajectoryAnalysisRecallSection, collectBenchmarkAnchorCues, collectContentLexicalCues, collectExplicitTurnReferences, collectLexicalCues, collectQuestionSlotCues, collectStructuredPlanCues, collectTemporalLexicalCues, normalizeTurnExpansionEnd } from './explicit-cue-recall.js';
|
|
12
12
|
export { TargetedFactRecallOptions, buildTargetedFactRecallSection, shouldRecallTargetedFactEvidence } from './targeted-fact-recall.js';
|
|
13
13
|
export { FocusedListRecallOptions, buildFocusedListRecallSection, shouldRecallFocusedListEvidence } from './focused-list-recall.js';
|
|
14
14
|
export { ResponseGuidanceRecallOptions, buildResponseGuidanceRecallSection, shouldRecallResponseGuidance } from './response-guidance-recall.js';
|
|
@@ -148,6 +148,7 @@ import './lcm/engine.js';
|
|
|
148
148
|
import './lcm/archive.js';
|
|
149
149
|
import './lcm/summarizer.js';
|
|
150
150
|
import './lcm/dag.js';
|
|
151
|
+
import './lcm/recall.js';
|
|
151
152
|
import './lcm/queue.js';
|
|
152
153
|
import './policy-runtime.js';
|
|
153
154
|
import './profiling.js';
|
package/dist/index.js
CHANGED
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
validateTaxonomy,
|
|
94
94
|
watchForChanges,
|
|
95
95
|
writeManifest
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-WSOEYOHN.js";
|
|
97
97
|
import {
|
|
98
98
|
WEARABLE_SOURCE_PREFIX,
|
|
99
99
|
buildExtractionTurns,
|
|
@@ -139,9 +139,9 @@ import {
|
|
|
139
139
|
} from "./chunk-7HYPN2GC.js";
|
|
140
140
|
import "./chunk-666A3MOW.js";
|
|
141
141
|
import "./chunk-VDC6RZI4.js";
|
|
142
|
-
import "./chunk-
|
|
142
|
+
import "./chunk-XFTPUXCE.js";
|
|
143
143
|
import "./chunk-TPDBFYEG.js";
|
|
144
|
-
import "./chunk-
|
|
144
|
+
import "./chunk-UXPUUL3G.js";
|
|
145
145
|
import {
|
|
146
146
|
applyLcmSchema,
|
|
147
147
|
ensureLcmStateDir,
|
|
@@ -214,7 +214,7 @@ import "./chunk-YN2UN7N3.js";
|
|
|
214
214
|
import {
|
|
215
215
|
buildTargetedFactRecallSection,
|
|
216
216
|
shouldRecallTargetedFactEvidence
|
|
217
|
-
} from "./chunk-
|
|
217
|
+
} from "./chunk-T67LUYCR.js";
|
|
218
218
|
import "./chunk-I6WYQSX4.js";
|
|
219
219
|
import {
|
|
220
220
|
CODEX_THREAD_KEY_PREFIX
|
|
@@ -228,7 +228,7 @@ import "./chunk-E3VODCC3.js";
|
|
|
228
228
|
import {
|
|
229
229
|
buildResponseGuidanceRecallSection,
|
|
230
230
|
shouldRecallResponseGuidance
|
|
231
|
-
} from "./chunk-
|
|
231
|
+
} from "./chunk-6TCXIRP5.js";
|
|
232
232
|
import "./chunk-DE6ENYLG.js";
|
|
233
233
|
import "./chunk-HHAA35A3.js";
|
|
234
234
|
import "./chunk-X7XN6YU4.js";
|
|
@@ -301,11 +301,11 @@ import "./chunk-QT2RZNRT.js";
|
|
|
301
301
|
import {
|
|
302
302
|
buildFocusedListRecallSection,
|
|
303
303
|
shouldRecallFocusedListEvidence
|
|
304
|
-
} from "./chunk-
|
|
304
|
+
} from "./chunk-OH7QLI6W.js";
|
|
305
305
|
import {
|
|
306
306
|
buildEventOrderRecallSection,
|
|
307
307
|
shouldRecallEventOrderEvidence
|
|
308
|
-
} from "./chunk-
|
|
308
|
+
} from "./chunk-DEOYTFA6.js";
|
|
309
309
|
import "./chunk-IAIPNEHD.js";
|
|
310
310
|
import {
|
|
311
311
|
buildExplicitCueRecallSection,
|
|
@@ -318,12 +318,12 @@ import {
|
|
|
318
318
|
collectStructuredPlanCues,
|
|
319
319
|
collectTemporalLexicalCues,
|
|
320
320
|
normalizeTurnExpansionEnd
|
|
321
|
-
} from "./chunk-
|
|
321
|
+
} from "./chunk-TVIVY7KU.js";
|
|
322
322
|
import "./chunk-YVVQUAOO.js";
|
|
323
323
|
import "./chunk-LUPVCGYK.js";
|
|
324
324
|
import {
|
|
325
325
|
buildEvidencePack
|
|
326
|
-
} from "./chunk-
|
|
326
|
+
} from "./chunk-DGFU5MSX.js";
|
|
327
327
|
import {
|
|
328
328
|
buildExtensionsFooterForSummary,
|
|
329
329
|
loadDaySummaryPrompt
|
package/dist/lcm/engine.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LcmStructuredRecallMatch } from './archive.js';
|
|
2
2
|
import { SummarizeFn } from './summarizer.js';
|
|
3
|
+
import { LcmRecallWithTraceResult } from './recall.js';
|
|
3
4
|
import { LcmObserveMessage } from './queue.js';
|
|
4
5
|
import { P as PluginConfig } from '../types-DDUDgd7T.js';
|
|
5
6
|
import 'better-sqlite3';
|
|
@@ -65,6 +66,8 @@ declare class LcmEngine {
|
|
|
65
66
|
private waitForPendingObserveInitIdle;
|
|
66
67
|
/** Build the compressed history recall section for a session. */
|
|
67
68
|
assembleRecall(sessionId: string, budgetChars: number): Promise<string>;
|
|
69
|
+
/** Build compressed recall plus content-free selected-summary receipts. */
|
|
70
|
+
assembleRecallWithTrace(sessionId: string, budgetChars: number): Promise<LcmRecallWithTraceResult>;
|
|
68
71
|
searchStructuredParts(sessionId: string, query: string, limit?: number): Promise<LcmStructuredRecallMatch[]>;
|
|
69
72
|
formatStructuredRecall(matches: LcmStructuredRecallMatch[], budgetChars: number): string;
|
|
70
73
|
/** Flush pending summaries before compaction (called from before_compaction hook). */
|
package/dist/lcm/engine.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LcmEngine,
|
|
3
3
|
extractLcmConfig
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-XFTPUXCE.js";
|
|
5
5
|
import "../chunk-TPDBFYEG.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-UXPUUL3G.js";
|
|
7
7
|
import "../chunk-7N2RUBAP.js";
|
|
8
8
|
import "../chunk-MTR7BZQN.js";
|
|
9
9
|
import "../chunk-O7BBFJLP.js";
|
package/dist/lcm/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { LcmEngine, LcmEngineConfig, LcmExpandedMessage, extractLcmConfig } from
|
|
|
2
2
|
export { LcmArchive, estimateTokens } from './archive.js';
|
|
3
3
|
export { LcmDag, SummaryNode } from './dag.js';
|
|
4
4
|
export { LcmSummarizer, SummarizeFn } from './summarizer.js';
|
|
5
|
-
export { assembleCompressedHistory } from './recall.js';
|
|
5
|
+
export { LcmRecallWithTraceResult, LcmSummarySelectionReceipt, assembleCompressedHistory, assembleCompressedHistoryWithTrace } from './recall.js';
|
|
6
6
|
export { registerLcmTools } from './tools.js';
|
|
7
7
|
export { ensureLcmStateDir, openLcmDatabase } from './schema.js';
|
|
8
8
|
import './queue.js';
|
package/dist/lcm/index.js
CHANGED
|
@@ -2,11 +2,12 @@ import "../chunk-VDC6RZI4.js";
|
|
|
2
2
|
import {
|
|
3
3
|
LcmEngine,
|
|
4
4
|
extractLcmConfig
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-XFTPUXCE.js";
|
|
6
6
|
import "../chunk-TPDBFYEG.js";
|
|
7
7
|
import {
|
|
8
|
-
assembleCompressedHistory
|
|
9
|
-
|
|
8
|
+
assembleCompressedHistory,
|
|
9
|
+
assembleCompressedHistoryWithTrace
|
|
10
|
+
} from "../chunk-UXPUUL3G.js";
|
|
10
11
|
import {
|
|
11
12
|
ensureLcmStateDir,
|
|
12
13
|
openLcmDatabase
|
|
@@ -40,6 +41,7 @@ export {
|
|
|
40
41
|
LcmEngine,
|
|
41
42
|
LcmSummarizer,
|
|
42
43
|
assembleCompressedHistory,
|
|
44
|
+
assembleCompressedHistoryWithTrace,
|
|
43
45
|
ensureLcmStateDir,
|
|
44
46
|
estimateTokens,
|
|
45
47
|
extractLcmConfig,
|
package/dist/lcm/recall.d.ts
CHANGED
|
@@ -7,6 +7,19 @@ interface LcmRecallConfig {
|
|
|
7
7
|
freshTailTurns: number;
|
|
8
8
|
budgetChars: number;
|
|
9
9
|
}
|
|
10
|
+
interface LcmSummarySelectionReceipt {
|
|
11
|
+
id: string;
|
|
12
|
+
depth: number;
|
|
13
|
+
msgStart: number;
|
|
14
|
+
msgEnd: number;
|
|
15
|
+
/** Half-open offsets within the returned compressed-history string. */
|
|
16
|
+
entryStart: number;
|
|
17
|
+
entryEnd: number;
|
|
18
|
+
}
|
|
19
|
+
interface LcmRecallWithTraceResult {
|
|
20
|
+
text: string;
|
|
21
|
+
selectedSummaries: LcmSummarySelectionReceipt[];
|
|
22
|
+
}
|
|
10
23
|
/**
|
|
11
24
|
* Assemble a compressed session history section from the summary DAG.
|
|
12
25
|
*
|
|
@@ -16,5 +29,6 @@ interface LcmRecallConfig {
|
|
|
16
29
|
* 3. Fill within budget, prioritizing recent content.
|
|
17
30
|
*/
|
|
18
31
|
declare function assembleCompressedHistory(dag: LcmDag, archive: LcmArchive, sessionId: string, config: LcmRecallConfig): string;
|
|
32
|
+
declare function assembleCompressedHistoryWithTrace(dag: LcmDag, archive: LcmArchive, sessionId: string, config: LcmRecallConfig): LcmRecallWithTraceResult;
|
|
19
33
|
|
|
20
|
-
export { type LcmRecallConfig, assembleCompressedHistory };
|
|
34
|
+
export { type LcmRecallConfig, type LcmRecallWithTraceResult, type LcmSummarySelectionReceipt, assembleCompressedHistory, assembleCompressedHistoryWithTrace };
|
package/dist/lcm/recall.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
assembleCompressedHistory
|
|
3
|
-
|
|
2
|
+
assembleCompressedHistory,
|
|
3
|
+
assembleCompressedHistoryWithTrace
|
|
4
|
+
} from "../chunk-UXPUUL3G.js";
|
|
4
5
|
import "../chunk-PZ5AY32C.js";
|
|
5
6
|
export {
|
|
6
|
-
assembleCompressedHistory
|
|
7
|
+
assembleCompressedHistory,
|
|
8
|
+
assembleCompressedHistoryWithTrace
|
|
7
9
|
};
|
|
8
10
|
//# sourceMappingURL=recall.js.map
|
package/dist/lcm/tools.d.ts
CHANGED