@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
package/dist/access-cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Orchestrator
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WSOEYOHN.js";
|
|
4
4
|
import "./chunk-J3XHPFEU.js";
|
|
5
5
|
import "./chunk-BRDJ2HFP.js";
|
|
6
6
|
import "./chunk-JODHPNLN.js";
|
|
@@ -9,9 +9,9 @@ import "./chunk-ILNPU5W5.js";
|
|
|
9
9
|
import "./chunk-7HYPN2GC.js";
|
|
10
10
|
import "./chunk-666A3MOW.js";
|
|
11
11
|
import "./chunk-VDC6RZI4.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-XFTPUXCE.js";
|
|
13
13
|
import "./chunk-TPDBFYEG.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-UXPUUL3G.js";
|
|
15
15
|
import "./chunk-7N2RUBAP.js";
|
|
16
16
|
import "./chunk-MTR7BZQN.js";
|
|
17
17
|
import "./chunk-UWK5OXUJ.js";
|
|
@@ -33,7 +33,7 @@ import "./chunk-4OKLXWDZ.js";
|
|
|
33
33
|
import "./chunk-UHGBNIOS.js";
|
|
34
34
|
import "./chunk-BCDKBDSY.js";
|
|
35
35
|
import "./chunk-YN2UN7N3.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-T67LUYCR.js";
|
|
37
37
|
import "./chunk-I6WYQSX4.js";
|
|
38
38
|
import "./chunk-4EX5WZ4M.js";
|
|
39
39
|
import "./chunk-XZ5I7OZR.js";
|
|
@@ -42,7 +42,7 @@ import "./chunk-FDPZVY6D.js";
|
|
|
42
42
|
import "./chunk-5IZL4DCV.js";
|
|
43
43
|
import "./chunk-2IZAGAJR.js";
|
|
44
44
|
import "./chunk-E3VODCC3.js";
|
|
45
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-6TCXIRP5.js";
|
|
46
46
|
import "./chunk-DE6ENYLG.js";
|
|
47
47
|
import "./chunk-HHAA35A3.js";
|
|
48
48
|
import "./chunk-X7XN6YU4.js";
|
|
@@ -68,13 +68,13 @@ import "./chunk-5GSUBCZM.js";
|
|
|
68
68
|
import "./chunk-54V4BZWP.js";
|
|
69
69
|
import "./chunk-KAWTOYAW.js";
|
|
70
70
|
import "./chunk-QT2RZNRT.js";
|
|
71
|
-
import "./chunk-
|
|
72
|
-
import "./chunk-
|
|
71
|
+
import "./chunk-OH7QLI6W.js";
|
|
72
|
+
import "./chunk-DEOYTFA6.js";
|
|
73
73
|
import "./chunk-IAIPNEHD.js";
|
|
74
|
-
import "./chunk-
|
|
74
|
+
import "./chunk-TVIVY7KU.js";
|
|
75
75
|
import "./chunk-YVVQUAOO.js";
|
|
76
76
|
import "./chunk-LUPVCGYK.js";
|
|
77
|
-
import "./chunk-
|
|
77
|
+
import "./chunk-DGFU5MSX.js";
|
|
78
78
|
import "./chunk-I73G4UH7.js";
|
|
79
79
|
import "./chunk-VEWZZM3H.js";
|
|
80
80
|
import "./chunk-Q6IP2ARR.js";
|
package/dist/access-http.d.ts
CHANGED
package/dist/access-mcp.d.ts
CHANGED
package/dist/access-service.d.ts
CHANGED
package/dist/bootstrap.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-LUPVCGYK.js";
|
|
8
8
|
import {
|
|
9
9
|
buildEvidencePack
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DGFU5MSX.js";
|
|
11
11
|
import {
|
|
12
12
|
isSameLcmRow,
|
|
13
13
|
lcmEvidenceIdentity
|
|
@@ -3731,4 +3731,4 @@ export {
|
|
|
3731
3731
|
shouldRecallResponseGuidance,
|
|
3732
3732
|
buildResponseGuidanceRecallSection
|
|
3733
3733
|
};
|
|
3734
|
-
//# sourceMappingURL=chunk-
|
|
3734
|
+
//# sourceMappingURL=chunk-6TCXIRP5.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-LUPVCGYK.js";
|
|
4
4
|
import {
|
|
5
5
|
buildEvidencePack
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DGFU5MSX.js";
|
|
7
7
|
import {
|
|
8
8
|
lcmEvidenceIdentity
|
|
9
9
|
} from "./chunk-C37ZRXX7.js";
|
|
@@ -2284,4 +2284,4 @@ export {
|
|
|
2284
2284
|
shouldRecallEventOrderEvidence,
|
|
2285
2285
|
buildEventOrderRecallSection
|
|
2286
2286
|
};
|
|
2287
|
-
//# sourceMappingURL=chunk-
|
|
2287
|
+
//# sourceMappingURL=chunk-DEOYTFA6.js.map
|
|
@@ -66,13 +66,28 @@ function buildEvidencePack(items, options) {
|
|
|
66
66
|
if (remaining <= 0) break;
|
|
67
67
|
const finalBlock = block.length > remaining ? clipText(block, remaining) : block;
|
|
68
68
|
if (!finalBlock.trim()) break;
|
|
69
|
+
const blockStart = used + separatorLength;
|
|
70
|
+
const blockEnd = blockStart + finalBlock.length;
|
|
69
71
|
lines.push(finalBlock);
|
|
70
72
|
used += separatorLength + finalBlock.length;
|
|
71
73
|
if (id) seenIds.add(id);
|
|
72
74
|
seenContent.add(contentKey);
|
|
75
|
+
options.onSelection?.({
|
|
76
|
+
item: evidencePackSelectedItem(item),
|
|
77
|
+
blockStart,
|
|
78
|
+
blockEnd
|
|
79
|
+
});
|
|
73
80
|
}
|
|
74
81
|
return lines.length === 1 ? "" : lines.join("\n\n");
|
|
75
82
|
}
|
|
83
|
+
function evidencePackSelectedItem(item) {
|
|
84
|
+
return {
|
|
85
|
+
...typeof item.archiveRowId === "number" ? { archiveRowId: item.archiveRowId } : {},
|
|
86
|
+
...typeof item.turnIndex === "number" ? { turnIndex: item.turnIndex } : {},
|
|
87
|
+
...typeof item.role === "string" ? { role: item.role } : {},
|
|
88
|
+
...typeof item.score === "number" && Number.isFinite(item.score) ? { score: item.score } : {}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
76
91
|
function insertAfterEvidenceHeading(evidence, title, insert) {
|
|
77
92
|
const heading = `## ${title}`;
|
|
78
93
|
if (!evidence.startsWith(heading)) {
|
|
@@ -291,4 +306,4 @@ export {
|
|
|
291
306
|
buildEvidencePack,
|
|
292
307
|
insertAfterEvidenceHeading
|
|
293
308
|
};
|
|
294
|
-
//# sourceMappingURL=chunk-
|
|
309
|
+
//# sourceMappingURL=chunk-DGFU5MSX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evidence-pack.ts"],"sourcesContent":["export interface EvidencePackItem {\n id?: string;\n /** Stable SQLite row lineage for diagnostics; intentionally not rendered. */\n archiveRowId?: number;\n sessionId?: string;\n turnIndex?: number;\n role?: string;\n content: string;\n score?: number;\n}\n\nexport interface EvidencePackOptions {\n title?: string;\n maxChars: number;\n maxItemChars?: number;\n query?: string;\n /** Optional non-rendering receipt for each block actually appended. */\n onSelection?: (receipt: EvidencePackSelectionReceipt) => void;\n}\n\n/** Content-free identity fields for an evidence item that survived selection. */\nexport interface EvidencePackSelectedItem {\n archiveRowId?: number;\n turnIndex?: number;\n role?: string;\n score?: number;\n}\n\nexport interface EvidencePackSelectionReceipt {\n item: EvidencePackSelectedItem;\n /** Half-open offsets within the returned evidence-pack string. */\n blockStart: number;\n blockEnd: number;\n}\n\nconst DEFAULT_MAX_ITEM_CHARS = 1_200;\nconst QUERY_FOCUS_STOPWORDS = new Set([\n \"about\",\n \"after\",\n \"again\",\n \"also\",\n \"and\",\n \"are\",\n \"between\",\n \"can\",\n \"could\",\n \"did\",\n \"does\",\n \"during\",\n \"for\",\n \"from\",\n \"have\",\n \"how\",\n \"into\",\n \"many\",\n \"should\",\n \"that\",\n \"the\",\n \"this\",\n \"till\",\n \"until\",\n \"want\",\n \"was\",\n \"were\",\n \"what\",\n \"when\",\n \"which\",\n \"with\",\n \"would\",\n \"you\",\n]);\n\nexport function buildEvidencePack(\n items: readonly EvidencePackItem[],\n options: EvidencePackOptions,\n): string {\n const budget = normalizePositiveInteger(options.maxChars);\n if (budget <= 0 || items.length === 0) {\n return \"\";\n }\n\n const maxItemChars = normalizePositiveInteger(\n options.maxItemChars ?? DEFAULT_MAX_ITEM_CHARS,\n );\n if (maxItemChars <= 0) {\n return \"\";\n }\n\n const title = options.title ?? \"Evidence\";\n const lines: string[] = [`## ${title}`];\n const seenIds = new Set<string>();\n const seenContent = new Set<string>();\n let used = lines[0]!.length;\n\n for (const item of items) {\n const content = item.content.trim();\n if (!content) continue;\n\n const id = item.id ?? evidenceItemFallbackId(item);\n if (id && seenIds.has(id)) continue;\n\n const contentKey = normalizeEvidenceContent(content);\n if (seenContent.has(contentKey)) continue;\n\n const label = formatEvidenceLabel(item);\n const clipped = clipEvidenceContent(content, maxItemChars, options.query);\n const block = `${label}: ${clipped}`;\n const separatorLength = lines.length > 0 ? 2 : 0;\n const remaining = budget - used - separatorLength;\n if (remaining <= 0) break;\n\n const finalBlock =\n block.length > remaining ? clipText(block, remaining) : block;\n if (!finalBlock.trim()) break;\n\n const blockStart = used + separatorLength;\n const blockEnd = blockStart + finalBlock.length;\n lines.push(finalBlock);\n used += separatorLength + finalBlock.length;\n if (id) seenIds.add(id);\n seenContent.add(contentKey);\n options.onSelection?.({\n item: evidencePackSelectedItem(item),\n blockStart,\n blockEnd,\n });\n }\n\n return lines.length === 1 ? \"\" : lines.join(\"\\n\\n\");\n}\n\nfunction evidencePackSelectedItem(\n item: EvidencePackItem,\n): EvidencePackSelectedItem {\n return {\n ...(typeof item.archiveRowId === \"number\"\n ? { archiveRowId: item.archiveRowId }\n : {}),\n ...(typeof item.turnIndex === \"number\" ? { turnIndex: item.turnIndex } : {}),\n ...(typeof item.role === \"string\" ? { role: item.role } : {}),\n ...(typeof item.score === \"number\" && Number.isFinite(item.score)\n ? { score: item.score }\n : {}),\n };\n}\n\nexport function insertAfterEvidenceHeading(\n evidence: string,\n title: string,\n insert: string,\n): string {\n const heading = `## ${title}`;\n if (!evidence.startsWith(heading)) {\n return evidence;\n }\n return `${heading}${insert}${evidence.slice(heading.length)}`;\n}\n\nfunction normalizePositiveInteger(value: number): number {\n if (!Number.isFinite(value) || value <= 0) {\n return 0;\n }\n return Math.floor(value);\n}\n\nfunction evidenceItemFallbackId(item: EvidencePackItem): string | undefined {\n if (item.sessionId && typeof item.turnIndex === \"number\") {\n return `${item.sessionId}:${item.turnIndex}`;\n }\n return undefined;\n}\n\nfunction normalizeEvidenceContent(content: string): string {\n return content.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction formatEvidenceLabel(item: EvidencePackItem): string {\n const parts: string[] = [];\n if (item.sessionId) parts.push(item.sessionId);\n if (typeof item.turnIndex === \"number\") parts.push(`turn ${item.turnIndex}`);\n if (item.role) parts.push(item.role);\n if (typeof item.score === \"number\" && Number.isFinite(item.score)) {\n parts.push(`score ${item.score.toFixed(3)}`);\n }\n return parts.length > 0 ? `[${parts.join(\", \")}]` : \"[evidence]\";\n}\n\nfunction clipText(text: string, maxChars: number): string {\n if (text.length <= maxChars) {\n return text;\n }\n if (maxChars <= 1) {\n return text.slice(0, maxChars);\n }\n if (maxChars <= 3) {\n return text.slice(0, maxChars);\n }\n return `${text.slice(0, maxChars - 3).trimEnd()}...`;\n}\n\nfunction clipEvidenceContent(\n content: string,\n maxChars: number,\n query?: string,\n): string {\n if (content.length <= maxChars) {\n return content;\n }\n\n const focused = buildQueryFocusedExcerpt(content, maxChars, query);\n return focused ?? clipText(content, maxChars);\n}\n\nfunction buildQueryFocusedExcerpt(\n content: string,\n maxChars: number,\n query?: string,\n): string | undefined {\n const cues = collectQueryFocusCues(query ?? \"\");\n if (cues.length === 0) {\n return undefined;\n }\n\n const lines = content\n .replaceAll(\"\\r\\n\", \"\\n\")\n .replaceAll(\"\\r\", \"\\n\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (lines.length < 2) {\n return undefined;\n }\n\n const temporalIntent = hasTemporalFocusIntent(query ?? \"\");\n const scored = lines\n .map((line, index) => ({\n index,\n score: scoreEvidenceLine(line, cues, temporalIntent, index),\n }))\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || left.index - right.index);\n\n if (scored.length === 0) {\n return undefined;\n }\n\n let selected = new Set<number>();\n for (let index = 0; index < Math.min(3, lines.length); index += 1) {\n if (isEvidenceMetadataLine(lines[index]!)) {\n selected.add(index);\n }\n }\n\n for (const entry of scored.slice(0, 8)) {\n const candidate = new Set(selected);\n const radius = lineWindowRadius(lines[entry.index]!, temporalIntent);\n for (\n let index = Math.max(0, entry.index - radius);\n index <= Math.min(lines.length - 1, entry.index + radius);\n index += 1\n ) {\n candidate.add(index);\n }\n if (renderSelectedEvidenceLines(lines, candidate).length <= maxChars) {\n selected = candidate;\n }\n }\n\n const excerpt = buildExcerptFromLineSelection(lines, selected, maxChars);\n return excerpt.length > 0 ? excerpt : undefined;\n}\n\nfunction collectQueryFocusCues(query: string): string[] {\n const words = (query.toLowerCase().match(/[a-z][a-z0-9-]{2,}/g) ?? [])\n .map(trimBoundaryHyphens)\n .filter(\n (word) =>\n word.length >= 3 &&\n !/^\\d+$/.test(word) &&\n !QUERY_FOCUS_STOPWORDS.has(word),\n );\n const cues = new Set<string>();\n for (const word of words) {\n cues.add(word);\n }\n for (let index = 0; index < words.length - 1; index += 1) {\n const left = words[index]!;\n const right = words[index + 1]!;\n if (left.length >= 4 && right.length >= 4) {\n cues.add(`${left} ${right}`);\n }\n }\n for (let index = 0; index < words.length - 2; index += 1) {\n const left = words[index]!;\n const middle = words[index + 1]!;\n const right = words[index + 2]!;\n if (left.length >= 4 && middle.length >= 4 && right.length >= 4) {\n cues.add(`${left} ${middle} ${right}`);\n }\n }\n return [...cues].sort((left, right) => right.length - left.length || left.localeCompare(right));\n}\n\nfunction trimBoundaryHyphens(value: string): string {\n let start = 0;\n let end = value.length;\n while (start < end && value[start] === \"-\") {\n start += 1;\n }\n while (end > start && value[end - 1] === \"-\") {\n end -= 1;\n }\n return start === 0 && end === value.length ? value : value.slice(start, end);\n}\n\nfunction hasTemporalFocusIntent(query: string): boolean {\n return /\\b(?:after|before|between|date|deadline|during|finish(?:ing|ed)?|how many|timeline|week|weeks|when)\\b/i.test(\n query,\n );\n}\n\nfunction scoreEvidenceLine(\n line: string,\n cues: readonly string[],\n temporalIntent: boolean,\n index: number,\n): number {\n const normalized = line.toLowerCase();\n let score = 0;\n for (const cue of cues) {\n if (!normalized.includes(cue)) {\n continue;\n }\n score += cue.includes(\" \") ? 8 : 3;\n }\n if (temporalIntent && hasDateLikeEvidence(line)) {\n score += 6;\n }\n if (\n temporalIntent &&\n /\\b(?:deadline|deployment|finish(?:ing|ed)?|milestones?|schedule|timeline)\\b/i.test(line)\n ) {\n score += 5;\n }\n if (/^\\s{0,3}(?:#{1,6}\\s*)?(?:milestones?|schedule|timeline)\\b/i.test(line)) {\n score += 3;\n }\n if (isEvidenceMetadataLine(line)) {\n score += Math.max(0, 3 - index);\n }\n return score;\n}\n\nfunction hasDateLikeEvidence(line: string): boolean {\n return /\\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\\.?\\s+\\d{1,2}\\b/i.test(\n line,\n ) || /\\b\\d{4}-\\d{2}-\\d{2}\\b/.test(line);\n}\n\nfunction isEvidenceMetadataLine(line: string): boolean {\n return /\\b(?:chat_id|source_chat_id|session_id|plan_id|task_id|ability)=/.test(\n line,\n );\n}\n\nfunction lineWindowRadius(line: string, temporalIntent: boolean): number {\n if (temporalIntent && hasDateLikeEvidence(line)) {\n return 0;\n }\n if (temporalIntent && /^\\s{0,3}(?:#{1,6}\\s*)?(?:milestones?|schedule|timeline)\\b/i.test(line)) {\n return 2;\n }\n return 1;\n}\n\nfunction buildExcerptFromLineSelection(\n lines: readonly string[],\n selected: ReadonlySet<number>,\n maxChars: number,\n): string {\n const ordered = [...selected].sort((left, right) => left - right);\n const output: string[] = [];\n let used = 0;\n let lastIndex = -1;\n\n const append = (text: string): boolean => {\n const separator = output.length === 0 ? \"\" : \"\\n\";\n const remaining = maxChars - used - separator.length;\n if (remaining <= 0) {\n return false;\n }\n const value = text.length > remaining ? clipText(text, remaining) : text;\n if (!value.trim()) {\n return false;\n }\n output.push(value);\n used += separator.length + value.length;\n return text.length <= remaining;\n };\n\n for (const index of ordered) {\n if (lastIndex >= 0 && index > lastIndex + 1 && !append(\"...\")) {\n break;\n }\n if (!append(lines[index]!)) {\n break;\n }\n lastIndex = index;\n }\n\n return output.join(\"\\n\");\n}\n\nfunction renderSelectedEvidenceLines(\n lines: readonly string[],\n selected: ReadonlySet<number>,\n): string {\n const ordered = [...selected].sort((left, right) => left - right);\n const output: string[] = [];\n let lastIndex = -1;\n for (const index of ordered) {\n if (lastIndex >= 0 && index > lastIndex + 1) {\n output.push(\"...\");\n }\n output.push(lines[index]!);\n lastIndex = index;\n }\n return output.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
buildEvidencePack,
|
|
7
7
|
insertAfterEvidenceHeading
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DGFU5MSX.js";
|
|
9
9
|
import {
|
|
10
10
|
isSameLcmRow,
|
|
11
11
|
lcmEvidenceIdentity
|
|
@@ -923,4 +923,4 @@ export {
|
|
|
923
923
|
shouldRecallFocusedListEvidence,
|
|
924
924
|
buildFocusedListRecallSection
|
|
925
925
|
};
|
|
926
|
-
//# sourceMappingURL=chunk-
|
|
926
|
+
//# sourceMappingURL=chunk-OH7QLI6W.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
buildEvidencePack,
|
|
10
10
|
insertAfterEvidenceHeading
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DGFU5MSX.js";
|
|
12
12
|
import {
|
|
13
13
|
isSameLcmRow,
|
|
14
14
|
lcmEvidenceIdentity
|
|
@@ -2165,4 +2165,4 @@ export {
|
|
|
2165
2165
|
shouldRecallTargetedFactEvidence,
|
|
2166
2166
|
buildTargetedFactRecallSection
|
|
2167
2167
|
};
|
|
2168
|
-
//# sourceMappingURL=chunk-
|
|
2168
|
+
//# sourceMappingURL=chunk-T67LUYCR.js.map
|