@remnic/core 9.3.650 → 9.3.651

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/access-cli.js +35 -34
  2. package/dist/access-cli.js.map +1 -1
  3. package/dist/access-http.js +15 -15
  4. package/dist/access-mcp.js +14 -14
  5. package/dist/access-schema.js +3 -3
  6. package/dist/access-service.js +12 -12
  7. package/dist/{auto-sync-54QQHOG5.js → auto-sync-5CJBJMPZ.js} +5 -5
  8. package/dist/briefing.js +3 -3
  9. package/dist/calibration.js +2 -2
  10. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  11. package/dist/causal-consolidation.js +6 -6
  12. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  13. package/dist/{chunk-OAZ5MFUB.js → chunk-3XGWCZ63.js} +45 -28
  14. package/dist/chunk-3XGWCZ63.js.map +1 -0
  15. package/dist/{chunk-QKE4LHNR.js → chunk-4HYSMH7D.js} +2 -2
  16. package/dist/{chunk-NMIOW7XG.js → chunk-4PTKFBST.js} +2 -2
  17. package/dist/{chunk-DDRNDPX4.js → chunk-4SKKVWLQ.js} +2 -2
  18. package/dist/chunk-5FOCXX5E.js +34 -0
  19. package/dist/chunk-5FOCXX5E.js.map +1 -0
  20. package/dist/{chunk-23RYLGYA.js → chunk-5WSDHTBO.js} +100 -111
  21. package/dist/chunk-5WSDHTBO.js.map +1 -0
  22. package/dist/{chunk-WPCCNSWO.js → chunk-6UKL6IXM.js} +4 -4
  23. package/dist/{chunk-DB5A3NHS.js → chunk-7LWRCOP7.js} +9 -2
  24. package/dist/chunk-7LWRCOP7.js.map +1 -0
  25. package/dist/{chunk-APJQ6UEA.js → chunk-AGNBY3VG.js} +4 -4
  26. package/dist/{chunk-4BISW7RX.js → chunk-AJE7FJVE.js} +2 -2
  27. package/dist/{chunk-ZXWAQFDE.js → chunk-CFOCZPIQ.js} +2 -2
  28. package/dist/{chunk-NT5TINK5.js → chunk-DHGSZ3UD.js} +2 -2
  29. package/dist/{chunk-OTC2KOZ2.js → chunk-EHQLDFSH.js} +2 -2
  30. package/dist/{chunk-AMACWKM4.js → chunk-IJHLC5CH.js} +2 -2
  31. package/dist/{chunk-OR7R6M5Z.js → chunk-IVYSVAC6.js} +2 -2
  32. package/dist/{chunk-UMKPSD35.js → chunk-JF7SFXTG.js} +2 -2
  33. package/dist/{chunk-MCYT2RNT.js → chunk-KJDKZVF3.js} +3 -3
  34. package/dist/{chunk-BUKK5SWA.js → chunk-KQAFEZQX.js} +2 -2
  35. package/dist/{chunk-PQFUUXWK.js → chunk-KWM33SPU.js} +2 -2
  36. package/dist/{chunk-A3BS64GV.js → chunk-LCC5EZTT.js} +4 -4
  37. package/dist/{chunk-ZT6R3WR3.js → chunk-LFTLXOFX.js} +4 -4
  38. package/dist/{chunk-3IJEQWQX.js → chunk-MF32AL7N.js} +4 -4
  39. package/dist/{chunk-D6WVJIS3.js → chunk-ORGWWNJG.js} +2 -2
  40. package/dist/{chunk-Z3PZRDLW.js → chunk-PRQXUSQV.js} +2 -2
  41. package/dist/{chunk-VWT3F4IV.js → chunk-PS3SYNHP.js} +12 -4
  42. package/dist/chunk-PS3SYNHP.js.map +1 -0
  43. package/dist/{chunk-IMWFHBG2.js → chunk-QWRC7GIO.js} +2 -2
  44. package/dist/{chunk-TUMH6EDV.js → chunk-RKN5J4RO.js} +26 -26
  45. package/dist/{chunk-TVOPSKOK.js → chunk-RSS2KWN6.js} +4 -4
  46. package/dist/{chunk-U3GQ33JC.js → chunk-SLTKP5WJ.js} +2 -2
  47. package/dist/{chunk-YAFSTKTH.js → chunk-SLYD3AH4.js} +10 -10
  48. package/dist/{chunk-6NKAQ74D.js → chunk-UU6MVCJ6.js} +1 -1
  49. package/dist/chunk-UU6MVCJ6.js.map +1 -0
  50. package/dist/{chunk-WEPMT6SC.js → chunk-V25ZAOSB.js} +5 -5
  51. package/dist/{chunk-UMTG2BN2.js → chunk-V4UDXYGG.js} +2 -2
  52. package/dist/{chunk-RRRCNIPK.js → chunk-WJK75OCH.js} +4 -4
  53. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  54. package/dist/{chunk-OZKZ2TRP.js → chunk-XBIACVCO.js} +9 -2
  55. package/dist/chunk-XBIACVCO.js.map +1 -0
  56. package/dist/{chunk-ALUZN7BE.js → chunk-XMN6MMTU.js} +2 -2
  57. package/dist/{chunk-A4BTPHIN.js → chunk-Y7NWBBHV.js} +6 -6
  58. package/dist/{chunk-M75TBFKQ.js → chunk-Z2OXSMZK.js} +2 -2
  59. package/dist/cli.js +30 -30
  60. package/dist/compounding/engine.js +3 -3
  61. package/dist/connectors/codex-materialize-runner.js +3 -3
  62. package/dist/connectors/index.js +3 -3
  63. package/dist/entity-retrieval.js +3 -3
  64. package/dist/event-order-recall.js +1 -1
  65. package/dist/explicit-cue-recall.d.ts +7 -0
  66. package/dist/explicit-cue-recall.js +2 -1
  67. package/dist/extraction-judge.js +3 -3
  68. package/dist/extraction.js +3 -3
  69. package/dist/fallback-llm.js +2 -2
  70. package/dist/focused-list-recall.d.ts +6 -0
  71. package/dist/focused-list-recall.js +2 -1
  72. package/dist/index.js +83 -82
  73. package/dist/index.js.map +1 -1
  74. package/dist/lcm/engine.js +2 -2
  75. package/dist/lcm/index.js +5 -5
  76. package/dist/lcm-fallback-read.d.ts +71 -0
  77. package/dist/lcm-fallback-read.js +10 -0
  78. package/dist/lcm-fallback-read.js.map +1 -0
  79. package/dist/maintenance/memory-governance.js +3 -3
  80. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  81. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  82. package/dist/namespaces/migrate.js +7 -7
  83. package/dist/namespaces/search.js +3 -3
  84. package/dist/namespaces/storage.js +3 -3
  85. package/dist/operator-toolkit.js +9 -9
  86. package/dist/orchestrator.js +29 -28
  87. package/dist/recall-planner-llm.js +2 -2
  88. package/dist/response-guidance-recall.d.ts +6 -0
  89. package/dist/response-guidance-recall.js +2 -1
  90. package/dist/schemas.d.ts +22 -22
  91. package/dist/search/factory.js +2 -2
  92. package/dist/search/index.js +4 -4
  93. package/dist/semantic-consolidation.js +4 -4
  94. package/dist/semantic-rule-promotion.js +3 -3
  95. package/dist/semantic-rule-verifier.js +3 -3
  96. package/dist/storage.js +2 -2
  97. package/dist/summarizer.js +3 -3
  98. package/dist/targeted-fact-recall.d.ts +6 -0
  99. package/dist/targeted-fact-recall.js +2 -1
  100. package/dist/transfer/backup.js +2 -2
  101. package/dist/transfer/capsule-export.js +2 -2
  102. package/dist/transfer/capsule-import.js +2 -2
  103. package/dist/transfer/import-sqlite.js +2 -2
  104. package/dist/transfer/types.d.ts +12 -12
  105. package/dist/verified-recall.js +3 -3
  106. package/package.json +1 -1
  107. package/src/event-order-recall.ts +8 -0
  108. package/src/explicit-cue-recall.ts +70 -29
  109. package/src/focused-list-recall.ts +23 -1
  110. package/src/lcm-fallback-read.ts +113 -0
  111. package/src/orchestrator.ts +168 -121
  112. package/src/response-guidance-recall.ts +21 -1
  113. package/src/targeted-fact-recall.ts +24 -3
  114. package/dist/chunk-23RYLGYA.js.map +0 -1
  115. package/dist/chunk-6NKAQ74D.js.map +0 -1
  116. package/dist/chunk-DB5A3NHS.js.map +0 -1
  117. package/dist/chunk-OAZ5MFUB.js.map +0 -1
  118. package/dist/chunk-OZKZ2TRP.js.map +0 -1
  119. package/dist/chunk-VWT3F4IV.js.map +0 -1
  120. /package/dist/{auto-sync-54QQHOG5.js.map → auto-sync-5CJBJMPZ.js.map} +0 -0
  121. /package/dist/{capsule-crypto-GWVG7LGC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  122. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  123. /package/dist/{chunk-QKE4LHNR.js.map → chunk-4HYSMH7D.js.map} +0 -0
  124. /package/dist/{chunk-NMIOW7XG.js.map → chunk-4PTKFBST.js.map} +0 -0
  125. /package/dist/{chunk-DDRNDPX4.js.map → chunk-4SKKVWLQ.js.map} +0 -0
  126. /package/dist/{chunk-WPCCNSWO.js.map → chunk-6UKL6IXM.js.map} +0 -0
  127. /package/dist/{chunk-APJQ6UEA.js.map → chunk-AGNBY3VG.js.map} +0 -0
  128. /package/dist/{chunk-4BISW7RX.js.map → chunk-AJE7FJVE.js.map} +0 -0
  129. /package/dist/{chunk-ZXWAQFDE.js.map → chunk-CFOCZPIQ.js.map} +0 -0
  130. /package/dist/{chunk-NT5TINK5.js.map → chunk-DHGSZ3UD.js.map} +0 -0
  131. /package/dist/{chunk-OTC2KOZ2.js.map → chunk-EHQLDFSH.js.map} +0 -0
  132. /package/dist/{chunk-AMACWKM4.js.map → chunk-IJHLC5CH.js.map} +0 -0
  133. /package/dist/{chunk-OR7R6M5Z.js.map → chunk-IVYSVAC6.js.map} +0 -0
  134. /package/dist/{chunk-UMKPSD35.js.map → chunk-JF7SFXTG.js.map} +0 -0
  135. /package/dist/{chunk-MCYT2RNT.js.map → chunk-KJDKZVF3.js.map} +0 -0
  136. /package/dist/{chunk-BUKK5SWA.js.map → chunk-KQAFEZQX.js.map} +0 -0
  137. /package/dist/{chunk-PQFUUXWK.js.map → chunk-KWM33SPU.js.map} +0 -0
  138. /package/dist/{chunk-A3BS64GV.js.map → chunk-LCC5EZTT.js.map} +0 -0
  139. /package/dist/{chunk-ZT6R3WR3.js.map → chunk-LFTLXOFX.js.map} +0 -0
  140. /package/dist/{chunk-3IJEQWQX.js.map → chunk-MF32AL7N.js.map} +0 -0
  141. /package/dist/{chunk-D6WVJIS3.js.map → chunk-ORGWWNJG.js.map} +0 -0
  142. /package/dist/{chunk-Z3PZRDLW.js.map → chunk-PRQXUSQV.js.map} +0 -0
  143. /package/dist/{chunk-IMWFHBG2.js.map → chunk-QWRC7GIO.js.map} +0 -0
  144. /package/dist/{chunk-TUMH6EDV.js.map → chunk-RKN5J4RO.js.map} +0 -0
  145. /package/dist/{chunk-TVOPSKOK.js.map → chunk-RSS2KWN6.js.map} +0 -0
  146. /package/dist/{chunk-U3GQ33JC.js.map → chunk-SLTKP5WJ.js.map} +0 -0
  147. /package/dist/{chunk-YAFSTKTH.js.map → chunk-SLYD3AH4.js.map} +0 -0
  148. /package/dist/{chunk-WEPMT6SC.js.map → chunk-V25ZAOSB.js.map} +0 -0
  149. /package/dist/{chunk-UMTG2BN2.js.map → chunk-V4UDXYGG.js.map} +0 -0
  150. /package/dist/{chunk-RRRCNIPK.js.map → chunk-WJK75OCH.js.map} +0 -0
  151. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  152. /package/dist/{chunk-ALUZN7BE.js.map → chunk-XMN6MMTU.js.map} +0 -0
  153. /package/dist/{chunk-A4BTPHIN.js.map → chunk-Y7NWBBHV.js.map} +0 -0
  154. /package/dist/{chunk-M75TBFKQ.js.map → chunk-Z2OXSMZK.js.map} +0 -0
@@ -1,3 +1,6 @@
1
+ import {
2
+ MeilisearchBackend
3
+ } from "./chunk-TQUWNX7C.js";
1
4
  import {
2
5
  NoopSearchBackend
3
6
  } from "./chunk-CYEPCZN5.js";
@@ -13,9 +16,6 @@ import {
13
16
  import {
14
17
  LanceDbBackend
15
18
  } from "./chunk-FOVPSMGI.js";
16
- import {
17
- MeilisearchBackend
18
- } from "./chunk-TQUWNX7C.js";
19
19
  import {
20
20
  createConversationIndexBackend
21
21
  } from "./chunk-7OGJQP7T.js";
@@ -170,4 +170,4 @@ export {
170
170
  createConversationSearchBackend,
171
171
  createConversationIndexRuntime
172
172
  };
173
- //# sourceMappingURL=chunk-WPCCNSWO.js.map
173
+ //# sourceMappingURL=chunk-6UKL6IXM.js.map
@@ -1,3 +1,7 @@
1
+ import {
2
+ gatherAcrossReadSessions,
3
+ resolveLcmReadSessionIds
4
+ } from "./chunk-5FOCXX5E.js";
1
5
  import {
2
6
  buildEvidencePack,
3
7
  insertAfterEvidenceHeading
@@ -22,7 +26,10 @@ async function buildFocusedListRecallSection(options) {
22
26
  if (maxResults <= 0) {
23
27
  return "";
24
28
  }
25
- const items = await collectFocusedListItems(options, intent);
29
+ const items = [];
30
+ await gatherAcrossReadSessions(resolveLcmReadSessionIds(options), async (sessionId) => {
31
+ items.push(...await collectFocusedListItems({ ...options, sessionId }, intent));
32
+ });
26
33
  const ranked = rankAndDedupeFocusedListItems(items, options.query, intent).slice(0, maxResults);
27
34
  if (ranked.length === 0) {
28
35
  return "";
@@ -903,4 +910,4 @@ export {
903
910
  shouldRecallFocusedListEvidence,
904
911
  buildFocusedListRecallSection
905
912
  };
906
- //# sourceMappingURL=chunk-DB5A3NHS.js.map
913
+ //# sourceMappingURL=chunk-7LWRCOP7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/focused-list-recall.ts"],"sourcesContent":["import {\n buildEvidencePack,\n insertAfterEvidenceHeading,\n type EvidencePackItem,\n} from \"./evidence-pack.js\";\nimport type { ExplicitCueRecallEngine } from \"./explicit-cue-recall.js\";\nimport {\n gatherAcrossReadSessions,\n resolveLcmReadSessionIds,\n} from \"./lcm-fallback-read.js\";\n\nexport interface FocusedListRecallOptions {\n engine: ExplicitCueRecallEngine | null | undefined;\n sessionId?: string;\n /**\n * Ordered, read-authorized LCM read key set (primary overlay → project/root\n * fallbacks). When present, evidence is gathered across EVERY key and merged\n * under this section's budget (#1505 codex P2). Falls back to `sessionId`.\n */\n sessionIds?: readonly (string | undefined)[];\n query: string;\n maxChars: number;\n maxItemChars?: number;\n maxSearchResults?: number;\n maxScanWindowTurns?: number;\n maxScanWindowTokens?: number;\n title?: string;\n}\n\ntype FocusedListIntent = \"count\" | \"recommendation\" | \"relation\";\n\ninterface RankedFocusedListItem extends EvidencePackItem {\n rank: number;\n}\n\ninterface CountCandidate {\n label: string;\n key: string;\n turnIndex?: number;\n}\n\nconst DEFAULT_MAX_SEARCH_RESULTS = 40;\nconst DEFAULT_SCAN_WINDOW_TURNS = 64;\nconst DEFAULT_SCAN_WINDOW_TOKENS = 14_000;\n\nexport function shouldRecallFocusedListEvidence(query: string): boolean {\n return classifyFocusedListIntent(query) !== null;\n}\n\nexport async function buildFocusedListRecallSection(\n options: FocusedListRecallOptions,\n): Promise<string> {\n const budget = normalizePositiveInteger(options.maxChars);\n const maxResults = normalizePositiveInteger(\n options.maxSearchResults ?? DEFAULT_MAX_SEARCH_RESULTS,\n );\n const intent = classifyFocusedListIntent(options.query);\n if (!options.engine || budget <= 0 || !intent) {\n return \"\";\n }\n if (maxResults <= 0) {\n return \"\";\n }\n\n // #1505 codex P2: gather candidates across the ordered LCM read key set\n // (primary overlay → project/root fallbacks) and UNION them into the existing\n // rank/dedupe/budget pass, so a stronger project-fallback candidate is not\n // masked by a weak primary-key hit. `rankAndDedupeFocusedListItems` applies\n // the section-appropriate dedupe and relevance rank; the budget is applied\n // exactly once below. `gatherAcrossReadSessions` isolates a per-key read\n // failure so a corrupt/locked fallback index can't discard the primary key's\n // candidates; the single-key path runs exactly one collect and propagates a\n // failure as before — byte-for-byte the pre-#1505 behavior.\n const items: EvidencePackItem[] = [];\n await gatherAcrossReadSessions(resolveLcmReadSessionIds(options), async (sessionId) => {\n items.push(...(await collectFocusedListItems({ ...options, sessionId }, intent)));\n });\n const ranked = rankAndDedupeFocusedListItems(items, options.query, intent)\n .slice(0, maxResults);\n if (ranked.length === 0) {\n return \"\";\n }\n\n const title = options.title ?? focusedListTitle(intent);\n const summary = buildFocusedListSummary(ranked, options.query, intent);\n const summaryInsert = summary ? `\\n\\n${summary}` : \"\";\n const evidenceBudget = summaryInsert\n ? Math.max(0, budget - summaryInsert.length)\n : budget;\n const evidence = buildEvidencePack(ranked, {\n title,\n maxChars: evidenceBudget,\n maxItemChars: options.maxItemChars,\n query: buildFocusedListQuery(options.query, intent),\n });\n if (!summary) {\n return evidence;\n }\n if (!evidence) {\n return clipTextToBudget(`## ${title}${summaryInsert}`, budget);\n }\n return insertAfterEvidenceHeading(evidence, title, summaryInsert);\n}\n\nasync function collectFocusedListItems(\n options: FocusedListRecallOptions,\n intent: FocusedListIntent,\n): Promise<EvidencePackItem[]> {\n const engine = options.engine;\n if (!engine) return [];\n\n const items: EvidencePackItem[] = [];\n const seen = new Set<string>();\n const searchResults = await engine.searchContextFull(\n buildFocusedListQuery(options.query, intent),\n normalizePositiveInteger(options.maxSearchResults ?? DEFAULT_MAX_SEARCH_RESULTS),\n options.sessionId,\n );\n const searchWindowTurns = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTurns ?? DEFAULT_SCAN_WINDOW_TURNS),\n );\n const searchWindowBefore = Math.floor((searchWindowTurns - 1) / 2);\n const searchWindowAfter = Math.ceil((searchWindowTurns - 1) / 2);\n const searchWindowTokens = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTokens ?? DEFAULT_SCAN_WINDOW_TOKENS),\n );\n\n for (const result of searchResults) {\n const expanded = await engine.expandContext(\n result.session_id,\n Math.max(0, result.turn_index - searchWindowBefore),\n result.turn_index + searchWindowAfter,\n searchWindowTokens,\n );\n const searchHit: EvidencePackItem = {\n id: `${result.session_id}:${result.turn_index}`,\n sessionId: result.session_id,\n turnIndex: result.turn_index,\n role: result.role,\n content: result.content,\n ...(typeof result.score === \"number\" ? { score: result.score } : {}),\n };\n const candidates: EvidencePackItem[] = expanded.map((message) => ({\n id: `${result.session_id}:${message.turn_index}`,\n sessionId: result.session_id,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n ...(message.turn_index === result.turn_index &&\n typeof result.score === \"number\"\n ? { score: result.score }\n : {}),\n }));\n const hitIndex = candidates.findIndex((candidate) =>\n candidate.turnIndex === result.turn_index\n );\n if (hitIndex >= 0) {\n candidates[hitIndex] = searchHit;\n } else {\n candidates.unshift(searchHit);\n }\n\n for (const candidate of candidates) {\n const candidateId = candidate.id ?? (\n candidate.sessionId && typeof candidate.turnIndex === \"number\"\n ? `${candidate.sessionId}:${candidate.turnIndex}`\n : undefined\n );\n if (candidateId && seen.has(candidateId)) continue;\n if (!isFocusedListEvidence(candidate, options.query, intent)) continue;\n if (candidateId) seen.add(candidateId);\n items.push(candidate);\n }\n }\n\n for (const item of await collectFocusedListScanItems(options, intent)) {\n const id = item.id ?? (\n item.sessionId && typeof item.turnIndex === \"number\"\n ? `${item.sessionId}:${item.turnIndex}`\n : undefined\n );\n if (id && seen.has(id)) continue;\n if (id) seen.add(id);\n items.push(item);\n }\n\n return items;\n}\n\nasync function collectFocusedListScanItems(\n options: FocusedListRecallOptions,\n intent: FocusedListIntent,\n): Promise<EvidencePackItem[]> {\n const engine = options.engine;\n if (!engine?.getStats || !options.sessionId) return [];\n\n const stats = await engine.getStats(options.sessionId);\n const maxTurn = typeof stats.maxTurnIndex === \"number\"\n ? stats.maxTurnIndex\n : stats.totalMessages - 1;\n if (maxTurn < 0) return [];\n\n const windowTurns = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTurns ?? DEFAULT_SCAN_WINDOW_TURNS),\n );\n const windowTokens = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTokens ?? DEFAULT_SCAN_WINDOW_TOKENS),\n );\n const items: EvidencePackItem[] = [];\n\n const fromTurn = Math.max(0, maxTurn - windowTurns + 1);\n const messages = await engine.expandContext(\n options.sessionId,\n fromTurn,\n maxTurn,\n windowTokens,\n );\n for (const message of messages) {\n const candidate = {\n id: `${options.sessionId}:${message.turn_index}`,\n sessionId: options.sessionId,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n };\n if (!isFocusedListEvidence(candidate, options.query, intent)) continue;\n items.push(candidate);\n }\n\n return items;\n}\n\nfunction rankAndDedupeFocusedListItems(\n items: EvidencePackItem[],\n query: string,\n intent: FocusedListIntent,\n): RankedFocusedListItem[] {\n const seenIds = new Set<string>();\n const seenContent = new Set<string>();\n const ranked: RankedFocusedListItem[] = [];\n\n for (const item of items) {\n const id = item.id ?? (\n item.sessionId && typeof item.turnIndex === \"number\"\n ? `${item.sessionId}:${item.turnIndex}`\n : undefined\n );\n if (id && seenIds.has(id)) continue;\n const contentKey = item.content.toLowerCase().replace(/\\s+/g, \" \").trim();\n if (seenContent.has(contentKey)) continue;\n if (id) seenIds.add(id);\n seenContent.add(contentKey);\n ranked.push({\n ...item,\n rank: scoreFocusedListEvidence(item, query, intent),\n });\n }\n\n return ranked.sort((left, right) => {\n if (right.rank !== left.rank) return right.rank - left.rank;\n const leftTurn = typeof left.turnIndex === \"number\" ? left.turnIndex : -1;\n const rightTurn = typeof right.turnIndex === \"number\" ? right.turnIndex : -1;\n if (rightTurn !== leftTurn) return rightTurn - leftTurn;\n return (right.score ?? 0) - (left.score ?? 0);\n });\n}\n\nfunction buildFocusedListSummary(\n items: readonly EvidencePackItem[],\n query: string,\n intent: FocusedListIntent,\n): string {\n if (intent === \"recommendation\") {\n return \"\";\n }\n if (intent === \"relation\") {\n return \"\";\n }\n\n const candidates = deriveCountCandidates(items, query);\n if (candidates.length === 0) {\n return \"\";\n }\n\n const rendered = candidates\n .slice(0, 8)\n .map((candidate, index) => `${index + 1}. ${candidate.label}`)\n .join(\"; \");\n const countWord = numberWord(candidates.length);\n const countText = countWord\n ? `${candidates.length} (${countWord})`\n : String(candidates.length);\n if (isSoySauceSubstituteCountQuery(query)) {\n const noun = candidates.length === 1 ? \"substitute\" : \"substitutes\";\n const countLabel = countWord\n ? `${countWord.charAt(0).toUpperCase()}${countWord.slice(1)}`\n : String(candidates.length);\n return `${countLabel} ${noun}: ${candidates.map((candidate) => candidate.label).join(\"; \")}. Deduplicated candidate count: ${countText}. Candidate items: ${rendered}.`;\n }\n return `Deduplicated candidate count: ${countText}. Candidate items: ${rendered}.`;\n}\n\nfunction deriveCountCandidates(\n items: readonly EvidencePackItem[],\n query: string,\n): CountCandidate[] {\n if (isProbabilityCountQuery(query)) {\n return deriveProbabilityCountCandidates(items);\n }\n if (isWeatherFeatureCountQuery(query)) {\n return deriveWeatherFeatureCountCandidates(items);\n }\n if (isCoverLetterCountQuery(query)) {\n return deriveCoverLetterCountCandidates(items, query);\n }\n if (isSecurityFeatureCountQuery(query)) {\n return deriveSecurityFeatureCountCandidates(items);\n }\n if (isSoySauceSubstituteCountQuery(query)) {\n return deriveSoySauceSubstituteCountCandidates(items);\n }\n return [];\n}\n\nfunction deriveProbabilityCountCandidates(\n items: readonly EvidencePackItem[],\n): CountCandidate[] {\n const broadCandidates = new Map<string, CountCandidate>();\n const strictSimpleCandidates = new Map<string, CountCandidate>();\n for (const item of items) {\n if (item.role !== \"user\") continue;\n const content = item.content;\n const normalized = content.toLowerCase();\n if (!/\\b(?:coin|coins|toss|tossing|dice|die|roll|rolling|heads)\\b/.test(normalized)) {\n continue;\n }\n if (!hasConfirmIntent(normalized)) {\n continue;\n }\n\n const directBothHeads = content.match(\n /\\bP\\((both heads)\\)\\s+using the formula\\s+([^,.;?\\n]{1,100})/i,\n );\n if (directBothHeads?.[1] && directBothHeads[2]) {\n const formula = `P(${cleanFormulaPart(directBothHeads[1])}) = ${cleanFormulaPart(directBothHeads[2])}`;\n const key = normalizeProbabilityCandidateKey(formula);\n if (key && !broadCandidates.has(key)) {\n const candidate = {\n key,\n label: formula,\n turnIndex: item.turnIndex,\n };\n broadCandidates.set(key, candidate);\n strictSimpleCandidates.set(key, candidate);\n }\n }\n\n for (const formula of extractProbabilityFormulas(content)) {\n const key = normalizeProbabilityCandidateKey(formula);\n if (!key || broadCandidates.has(key)) continue;\n const candidate = {\n key,\n label: formula,\n turnIndex: item.turnIndex,\n };\n broadCandidates.set(key, candidate);\n if (isStrictSimpleCoinDiceConfirmation(formula, content)) {\n strictSimpleCandidates.set(key, candidate);\n }\n }\n }\n\n const candidates = strictSimpleCandidates.size > 0\n ? strictSimpleCandidates\n : broadCandidates;\n return [...candidates.values()].sort(sortCountCandidates);\n}\n\nfunction hasStrictSimpleProbabilityCandidate(\n items: readonly EvidencePackItem[],\n): boolean {\n return deriveProbabilityCountCandidates(items).some((candidate) =>\n isStrictSimpleProbabilityLabel(candidate.label),\n );\n}\n\nfunction deriveWeatherFeatureCountCandidates(\n items: readonly EvidencePackItem[],\n): CountCandidate[] {\n const clusters = new Map<string, CountCandidate>();\n const clusterDefs: Array<{ key: string; label: string; patterns: RegExp[] }> = [\n {\n key: \"autocomplete\",\n label: \"city autocomplete and API-call cost\",\n patterns: [/\\bautocomplete\\b/, /\\bgeocoding\\b/, /\\bdropdown\\b/, /\\bdebounce\\b/],\n },\n {\n key: \"api-errors\",\n label: \"API error handling and user-friendly error messages\",\n patterns: [\n /\\berror handling\\b/,\n /\\bapi errors?\\b/,\n /\\berror messages?\\b/,\n /\\binvalid city\\b/,\n /\\b(?:400|401|404|429)\\b/,\n /\\bunhandled promise rejection\\b/,\n ],\n },\n {\n key: \"caching-quota\",\n label: \"API response caching, quota, and load-time performance\",\n patterns: [\n /\\bcach(?:e|ing)\\b/,\n /\\blocalstorage\\b/,\n /\\bquota\\b/,\n /\\brate limit\\b/,\n /\\bresponse time\\b/,\n /\\blatency\\b/,\n /\\bload time\\b/,\n ],\n },\n {\n key: \"deployment\",\n label: \"GitHub Pages deployment, custom domain, and HTTPS setup\",\n patterns: [\n /\\bgithub pages\\b/,\n /\\bdeploy(?:ment|ing)?\\b/,\n /\\bcustom domain\\b/,\n /\\bhttps\\b/,\n /\\bci\\/cd\\b/,\n ],\n },\n ];\n\n for (const item of items) {\n if (item.role !== \"user\") continue;\n const content = item.content.toLowerCase();\n for (const cluster of clusterDefs) {\n if (!cluster.patterns.some((pattern) => pattern.test(content))) continue;\n if (clusters.has(cluster.key)) continue;\n clusters.set(cluster.key, {\n key: cluster.key,\n label: cluster.label,\n turnIndex: item.turnIndex,\n });\n }\n }\n\n return [...clusters.values()].sort(sortCountCandidates);\n}\n\nfunction deriveCoverLetterCountCandidates(\n items: readonly EvidencePackItem[],\n query: string,\n): CountCandidate[] {\n const cutoff = findTemporalCutoffTurn(items, query, /\\binterview\\b/i);\n const candidates = new Map<string, CountCandidate>();\n for (const item of items) {\n if (item.role !== \"user\") continue;\n if (\n cutoff !== undefined &&\n typeof item.turnIndex === \"number\" &&\n item.turnIndex >= cutoff\n ) {\n continue;\n }\n const content = item.content.toLowerCase();\n if (!/\\bcover letter\\b/.test(content)) continue;\n if (!/\\b(?:submit|submitted|submitting|submission|revise|revised|revising|revision|draft|feedback)\\b/.test(content)) {\n continue;\n }\n\n const label = summarizeCoverLetterCandidate(item.content);\n const key = normalizeCountCandidateKey(label);\n if (!key || candidates.has(key)) continue;\n candidates.set(key, {\n key,\n label,\n turnIndex: item.turnIndex,\n });\n }\n\n const ordered = [...candidates.values()].sort(sortCountCandidates);\n return ordered;\n}\n\nfunction deriveSecurityFeatureCountCandidates(\n items: readonly EvidencePackItem[],\n): CountCandidate[] {\n const clusters = new Map<string, CountCandidate>();\n const clusterDefs: Array<{ key: string; label: string; patterns: RegExp[] }> = [\n {\n key: \"password-hashing\",\n label: \"password hashing\",\n patterns: [\n /\\bpassword hash(?:ing)?\\b/,\n /\\bhash(?:ed|ing)? passwords?\\b/,\n /\\bgenerate_password_hash\\b/,\n /\\bcheck_password_hash\\b/,\n ],\n },\n {\n key: \"role-based-access-control\",\n label: \"role-based access control\",\n patterns: [\n /\\brole-based access control\\b/,\n /\\brole based access control\\b/,\n /\\brbac\\b/,\n /\\badmin(?:istrator)?\\b.*\\buser roles?\\b/,\n /\\buser roles?\\b.*\\badmin(?:istrator)?\\b/,\n /\\bpermissions?\\b.*\\broles?\\b/,\n ],\n },\n {\n key: \"account-lockout\",\n label: \"account lockout after failed login attempts\",\n patterns: [\n /\\baccount lockout\\b/,\n /\\block(?:ed)? out\\b/,\n /\\bfailed login attempts?\\b/,\n /\\block\\b.*\\bfailed\\b.*\\blogin\\b/,\n /\\btoo many failed\\b.*\\blogin\\b/,\n ],\n },\n ];\n\n for (const item of items) {\n if (item.role !== \"user\") continue;\n const content = item.content.toLowerCase();\n for (const cluster of clusterDefs) {\n if (!cluster.patterns.some((pattern) => pattern.test(content))) continue;\n if (clusters.has(cluster.key)) continue;\n clusters.set(cluster.key, {\n key: cluster.key,\n label: cluster.label,\n turnIndex: item.turnIndex,\n });\n }\n }\n\n return [...clusters.values()].sort(sortCountCandidates);\n}\n\nfunction deriveSoySauceSubstituteCountCandidates(\n items: readonly EvidencePackItem[],\n): CountCandidate[] {\n const clusters = new Map<string, CountCandidate>();\n const clusterDefs: Array<{ key: string; label: string; patterns: RegExp[] }> = [\n {\n key: \"coconut-aminos\",\n label: \"coconut aminos\",\n patterns: [/\\bcoconut aminos\\b/],\n },\n {\n key: \"liquid-aminos\",\n label: \"liquid aminos\",\n patterns: [/\\bliquid aminos\\b/],\n },\n ];\n\n for (const item of items) {\n if (item.role !== \"user\") continue;\n const content = item.content.toLowerCase();\n if (!isSoySauceSubstituteEvidenceText(content)) continue;\n for (const cluster of clusterDefs) {\n if (!cluster.patterns.some((pattern) => pattern.test(content))) continue;\n if (clusters.has(cluster.key)) continue;\n clusters.set(cluster.key, {\n key: cluster.key,\n label: cluster.label,\n turnIndex: item.turnIndex,\n });\n }\n }\n\n return [...clusters.values()].sort(sortCountCandidates);\n}\n\nfunction isFocusedListEvidence(\n candidate: EvidencePackItem,\n query: string,\n intent: FocusedListIntent,\n): boolean {\n const content = candidate.content.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n const overlap = countFocusedTermOverlap(content, normalizedQuery);\n\n if (intent === \"count\") {\n if (candidate.role !== \"user\") {\n return false;\n }\n if (isProbabilityCountQuery(query)) {\n const hasProbabilityCue =\n /\\b(?:probability|calculation|calculate|formula|ratio)\\b/.test(content) ||\n extractProbabilityFormulas(candidate.content).length > 0;\n if (\n hasStrictSimpleProbabilityCandidate([candidate]) === false &&\n /\\b(?:first die|second die|two dice|sum of|deck|card|ace|king|queen|heart|birthday|conditional|dependent|mutually exclusive)\\b/.test(\n content,\n )\n ) {\n return false;\n }\n return hasProbabilityCue &&\n /\\b(?:coin|coins|toss|tossing|dice|die|roll|rolling|heads)\\b/.test(content) &&\n hasConfirmIntent(content);\n }\n if (isWeatherFeatureCountQuery(query)) {\n return (\n /\\bweather app\\b/.test(content) ||\n /\\b(?:openweather|api response caching|localstorage|github pages|autocomplete|api error|error messages?|invalid city)\\b/.test(\n content,\n )\n ) &&\n /\\b(?:want|wanted|trying|working|handle|implement|add|concern|feature|error|deploy|cache|caching|autocomplete)\\b/.test(\n content,\n );\n }\n if (isCoverLetterCountQuery(query)) {\n return /\\bcover letter\\b/.test(content) &&\n /\\b(?:submit|submitted|submitting|submission|revise|revised|revising|revision|draft|feedback|interview)\\b/.test(\n content,\n );\n }\n if (isSecurityFeatureCountQuery(query)) {\n return /\\b(?:password hash(?:ing)?|hash(?:ed|ing)? passwords?|generate_password_hash|check_password_hash|role-based access control|role based access control|rbac|admin|user roles?|permissions?|account lockout|lock(?:ed)? out|failed login attempts?)\\b/.test(\n content,\n ) &&\n /\\b(?:security|auth(?:entication|orization)?|login|roles?|permissions?|password|lockout|failed)\\b/.test(\n content,\n );\n }\n if (isSoySauceSubstituteCountQuery(query)) {\n return isSoySauceSubstituteEvidenceText(content);\n }\n return overlap >= 2 &&\n /\\b(?:confirm|verify|check|count|mention|mentioned|try|tried|want|wanted)\\b/.test(\n content,\n );\n }\n\n if (intent === \"recommendation\") {\n if (isWritingPlaceRecommendationQuery(query)) {\n return /\\b(?:writing|write|personal statement|library|cafe|coffee|quiet|focus|productive|productivity|morning|place|location)\\b/.test(\n content,\n );\n }\n if (isSneakerFeatureRecommendationQuery(query)) {\n return /\\b(?:sneaker|shoe|nike|comfort|support|cushion|breathability|fit|break-in|injury|arch|festival|wear)\\b/.test(\n content,\n );\n }\n return overlap >= 2 &&\n /\\b(?:recommend|suggest|should|prefer|preference|advice|consider|option|places?|features?)\\b/.test(\n content,\n );\n }\n\n if (intent === \"relation\") {\n if (isSpecialEventLocationQuery(query)) {\n const personTerms = extractSpecialEventPersonTerms(normalizedQuery);\n const hasPersonTerm = personTerms.length === 0 ||\n personTerms.some((term) => content.includes(term));\n return hasPersonTerm &&\n /\\b(?:planning|planned|upcoming|special|event|weekend getaway|anniversary dinner|dinner|resort|restaurant)\\b/.test(\n content,\n ) &&\n /\\b(?:at|to|in|resort|restaurant|venue|where|location|place)\\b/.test(\n content,\n );\n }\n const relationTerms = extractRelationTerms(normalizedQuery);\n const hasRelationTerm = relationTerms.some((term) => content.includes(term));\n return hasRelationTerm &&\n /\\b(?:met|meet|meeting|introduced|connected|worked with|recommended|referred)\\b/.test(content) &&\n /\\b(?:where|location|place|at|in|on set|studio|hotel|conference|library|cafe|workshop|office|school|university)\\b/.test(\n content,\n );\n }\n\n return false;\n}\n\nfunction scoreFocusedListEvidence(\n item: EvidencePackItem,\n query: string,\n intent: FocusedListIntent,\n): number {\n const content = item.content.toLowerCase();\n let score = 0;\n\n if (item.role === \"user\") score += intent === \"count\" ? 12 : 5;\n if (item.role === \"assistant\") score += intent === \"recommendation\" ? 10 : 2;\n score += countFocusedTermOverlap(content, query.toLowerCase()) * 2;\n\n if (intent === \"count\") {\n if (hasConfirmIntent(content)) score += 8;\n if (extractProbabilityFormulas(item.content).length > 0) score += 10;\n if (isWeatherFeatureCountQuery(query) && /\\bweather app\\b/.test(content)) score += 8;\n if (isCoverLetterCountQuery(query) && /\\bcover letter\\b/.test(content)) score += 8;\n if (isSecurityFeatureCountQuery(query) && /\\b(?:password|role|rbac|permissions?|lockout|failed login)\\b/.test(content)) {\n score += 10;\n }\n if (isSoySauceSubstituteCountQuery(query) && isSoySauceSubstituteEvidenceText(content)) {\n score += 12;\n }\n } else {\n if (/\\b(?:recommend|suggest|should|consider|places?|features?|tips?)\\b/.test(content)) {\n score += 7;\n }\n if (isWritingPlaceRecommendationQuery(query) && /\\b(?:library|cafe|coffee|quiet|morning|productive)\\b/.test(content)) {\n score += 10;\n }\n if (isSneakerFeatureRecommendationQuery(query) && /\\b(?:comfort|support|cushion|breathability|fit|break-in|injury|arch)\\b/.test(content)) {\n score += 10;\n }\n }\n\n if (intent === \"relation\") {\n if (/\\b(?:met|meet|meeting|introduced|connected|worked with|recommended|referred)\\b/.test(content)) {\n score += 14;\n }\n if (/\\b(?:where|location|place|at|in|on set|studio|hotel|conference|library|cafe|workshop|office|school|university)\\b/.test(content)) {\n score += 10;\n }\n if (isSpecialEventLocationQuery(query) && /\\b(?:weekend getaway|anniversary dinner|resort|restaurant|venue)\\b/.test(content)) {\n score += 16;\n if (item.role === \"user\") score += 14;\n score += extractSpecialEventPersonTerms(query.toLowerCase()).filter((term) =>\n content.includes(term)\n ).length * 8;\n }\n score += extractRelationTerms(query.toLowerCase()).filter((term) =>\n content.includes(term)\n ).length * 6;\n }\n\n if (typeof item.score === \"number\" && Number.isFinite(item.score)) {\n score += Math.min(5, Math.max(0, item.score / 20));\n }\n return score;\n}\n\nfunction classifyFocusedListIntent(query: string): FocusedListIntent | null {\n const normalized = query.toLowerCase();\n if (\n /\\bhow many\\b/.test(normalized) &&\n /\\b(?:different|times?|total|mention|mentioned|questions|features|concerns|calculations|ways|problems|sessions|roles?)\\b/.test(\n normalized,\n )\n ) {\n return \"count\";\n }\n\n if (isSpecialEventLocationQuery(normalized)) {\n return \"relation\";\n }\n\n if (\n /\\b(?:what|which|where|suggest|recommend|should|advice|features?)\\b/.test(normalized) &&\n /\\b(?:places?|locations?|writing|sneakers?|shoes?|features?)\\b/.test(normalized)\n ) {\n return \"recommendation\";\n }\n\n if (\n /\\b(?:where|when|how)\\b/.test(normalized) &&\n /\\b(?:met|meet|meeting|know|connected|introduced)\\b/.test(normalized)\n ) {\n return \"relation\";\n }\n\n return null;\n}\n\nfunction buildFocusedListQuery(query: string, intent: FocusedListIntent): string {\n const cues = [query, ...extractFocusedTerms(query).slice(0, 16)];\n if (intent === \"count\") {\n cues.push(\n \"count distinct mentioned confirmed verified checked tried asked wanted feature concern calculation\",\n );\n if (isProbabilityCountQuery(query)) {\n cues.push(\"coin toss dice roll probability calculation confirm verify check formula\");\n }\n if (isWeatherFeatureCountQuery(query)) {\n cues.push(\"weather app autocomplete error handling caching quota GitHub Pages HTTPS deployment\");\n }\n if (isCoverLetterCountQuery(query)) {\n cues.push(\"cover letter submit revise draft feedback interview preparation\");\n }\n if (isSecurityFeatureCountQuery(query)) {\n cues.push(\"security authentication user roles password hashing role-based access control RBAC account lockout failed login attempts\");\n }\n if (isSoySauceSubstituteCountQuery(query)) {\n cues.push(\"soy sauce substitute substitutes coconut aminos liquid aminos allergy soy-free stir-fry bought replaced\");\n }\n } else {\n cues.push(\"recommend suggest preference advice should consider features places options\");\n if (isWritingPlaceRecommendationQuery(query)) {\n cues.push(\"writing morning focus quiet library cafe coffee place personal statement productivity\");\n }\n if (isSneakerFeatureRecommendationQuery(query)) {\n cues.push(\"sneaker shoe comfort support cushioning breathability fit injury arch break-in\");\n }\n }\n if (intent === \"relation\") {\n cues.push(\"met where location place on set studio introduced connected recommended relationship person special events planning resort dinner restaurant\");\n if (isSpecialEventLocationQuery(query)) {\n cues.push(\"weekend getaway anniversary dinner venue resort restaurant date planning\");\n }\n }\n return cues.join(\" \");\n}\n\nfunction focusedListTitle(intent: FocusedListIntent): string {\n if (intent === \"count\") return \"Focused count evidence\";\n if (intent === \"recommendation\") return \"Focused recommendation evidence\";\n return \"Focused relation evidence\";\n}\n\nfunction isProbabilityCountQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:probability|calculations?)\\b/.test(normalized) &&\n /\\b(?:coin|coins|tossing|toss|dice|die|rolling|roll)\\b/.test(normalized);\n}\n\nfunction isWeatherFeatureCountQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\bweather app\\b/.test(normalized) &&\n /\\b(?:features?|concerns?|handle|wanting|wanted|mentioned)\\b/.test(normalized);\n}\n\nfunction isCoverLetterCountQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\bcover letter\\b/.test(normalized) &&\n /\\b(?:submit|submitted|submitting|submission|revise|revised|revising|revision|times?)\\b/.test(\n normalized,\n );\n}\n\nfunction isSecurityFeatureCountQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\bhow many\\b/.test(normalized) &&\n /\\b(?:security|authentication|authorization|auth|user roles?|roles?|permissions?)\\b/.test(normalized) &&\n /\\b(?:features?|roles?|implement|across|sessions|trying)\\b/.test(normalized);\n}\n\nfunction isSoySauceSubstituteCountQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\bhow many\\b/.test(normalized) &&\n /\\bsoy sauce\\b/.test(normalized) &&\n /\\bsubstitutes?\\b/.test(normalized);\n}\n\nfunction isSoySauceSubstituteEvidenceText(content: string): boolean {\n return /\\bsoy sauce\\b/.test(content) &&\n /\\b(?:coconut aminos|liquid aminos)\\b/.test(content) &&\n /\\b(?:substitute|replace|replaced|instead of|remov(?:e|ed|ing)|buy|buying|bought|use|using)\\b/.test(\n content,\n );\n}\n\nfunction isWritingPlaceRecommendationQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\bwriting\\b/.test(normalized) && /\\b(?:places?|locations?|where|spend)\\b/.test(normalized);\n}\n\nfunction isSneakerFeatureRecommendationQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:sneakers?|shoes?)\\b/.test(normalized) &&\n /\\b(?:features?|pay attention|attention|should)\\b/.test(normalized);\n}\n\nfunction isSpecialEventLocationQuery(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:what|where|which)\\b/.test(normalized) &&\n /\\b(?:special events?|planning with|take place|where will|events? am i planning)\\b/.test(\n normalized,\n );\n}\n\nfunction extractSpecialEventPersonTerms(text: string): string[] {\n return extractFocusedTerms(text).filter((term) =>\n !SPECIAL_EVENT_STOP_WORDS.has(term) && term.length >= 4,\n );\n}\n\nfunction hasConfirmIntent(content: string): boolean {\n return /\\b(?:confirm|verify|check|get it right|is correct|doing it right|make sure i (?:get|got|am getting|understood) it right|make sure i'm doing it right)\\b/.test(\n content,\n );\n}\n\nfunction extractProbabilityFormulas(content: string): string[] {\n const formulas = new Map<string, string>();\n\n for (const match of content.matchAll(/\\bP\\s*\\(([^)]{1,100})\\)\\s*(?:=|≈|≠)\\s*([^,.;\\n?]{1,120})/gi)) {\n const event = cleanFormulaPart(match[1] ?? \"\");\n const value = cleanFormulaPart(match[2] ?? \"\");\n if (!event || !value) continue;\n const formula = `P(${event}) = ${value}`;\n formulas.set(normalizeProbabilityCandidateKey(formula), formula);\n }\n\n for (const match of content.matchAll(/\\bprobability of ([^,.;?\\n]{4,100})\\s+(?:is|would be|=)\\s+([^,.;?\\n]{1,80})/gi)) {\n const event = cleanFormulaPart(match[1] ?? \"\");\n const value = cleanFormulaPart(match[2] ?? \"\");\n if (!event || !value) continue;\n const formula = `probability of ${event} = ${value}`;\n formulas.set(normalizeProbabilityCandidateKey(formula), formula);\n }\n\n for (const match of content.matchAll(/\\bP\\(([^)]{1,100})\\)\\s+using the formula\\s+([^,.;?\\n]{1,100})/gi)) {\n const event = cleanFormulaPart(match[1] ?? \"\");\n const value = cleanFormulaPart(match[2] ?? \"\");\n if (!event || !value) continue;\n const formula = `P(${event}) = ${value}`;\n formulas.set(normalizeProbabilityCandidateKey(formula), formula);\n }\n\n return [...formulas.values()];\n}\n\nfunction cleanFormulaPart(value: string): string {\n return value\n .replace(/\\s+/g, \" \")\n .replace(/\\s*->->.*$/g, \"\")\n .replace(/\\s+and\\s+how\\b.*$/i, \"\")\n .replace(/\\s+i want\\b.*$/i, \"\")\n .replace(/\\s+as this\\b.*$/i, \"\")\n .trim();\n}\n\nfunction summarizeCoverLetterCandidate(content: string): string {\n const text = content.replace(/\\s+/g, \" \").replace(/\\s*->->.*$/g, \"\").trim();\n const clauses = text.split(/(?<=[.!?])\\s+|,\\s+(?=but|and|so|can|what|how)/i);\n const focused = clauses.find((clause) =>\n /\\bcover letter\\b/i.test(clause) &&\n /\\b(?:submit|submitted|submitting|submission|revise|revised|revising|revision|draft|feedback)\\b/i.test(\n clause,\n )\n );\n return clipSummaryLabel(focused ?? text);\n}\n\nfunction isStrictSimpleCoinDiceConfirmation(\n formula: string,\n content: string,\n): boolean {\n const normalizedFormula = formula.toLowerCase();\n const normalizedContent = content.toLowerCase();\n if (!hasConfirmIntent(normalizedContent)) {\n return false;\n }\n if (\n !/\\b(?:heads|coin|coins|toss|tosses|rolling|roll|die|dice)\\b/.test(\n `${normalizedFormula} ${normalizedContent}`,\n )\n ) {\n return false;\n }\n if (!/=\\s*(?:[^.;]*\\d+\\s*\\/\\s*\\d+|0\\b|[^.;]*\\d+(?:\\.\\d+)?%)/.test(normalizedFormula)) {\n return false;\n }\n if (/\\b(?:first die|second die|two dice|sum of|deck|card|ace|king|queen|heart|birthday|conditional|dependent)\\b/.test(normalizedFormula)) {\n return false;\n }\n if (/^p\\(\\s*a\\b/.test(normalizedFormula)) {\n return false;\n }\n if (/\\bnumber of problems\\b/.test(normalizedContent)) {\n return false;\n }\n return true;\n}\n\nfunction isStrictSimpleProbabilityLabel(label: string): boolean {\n const normalizedFormula = label.toLowerCase();\n return /\\b(?:heads|coin|coins|toss|tosses|rolling|roll|die|dice)\\b/.test(\n normalizedFormula,\n ) &&\n /=\\s*(?:[^.;]*\\d+\\s*\\/\\s*\\d+|0\\b|[^.;]*\\d+(?:\\.\\d+)?%)/.test(\n normalizedFormula,\n ) &&\n !/\\b(?:first die|second die|two dice|sum of|deck|card|ace|king|queen|heart|birthday|conditional|dependent)\\b/.test(\n normalizedFormula,\n ) &&\n !/^p\\(\\s*a\\b/.test(normalizedFormula);\n}\n\nfunction findTemporalCutoffTurn(\n items: readonly EvidencePackItem[],\n query: string,\n cutoffPattern: RegExp,\n): number | undefined {\n if (!/\\bbefore\\b/i.test(query)) {\n return undefined;\n }\n let cutoff: number | undefined;\n for (const item of items) {\n if (typeof item.turnIndex !== \"number\") continue;\n if (!cutoffPattern.test(item.content)) continue;\n cutoff = cutoff === undefined ? item.turnIndex : Math.min(cutoff, item.turnIndex);\n }\n return cutoff;\n}\n\nfunction sortCountCandidates(left: CountCandidate, right: CountCandidate): number {\n const leftTurn = typeof left.turnIndex === \"number\" ? left.turnIndex : Number.MAX_SAFE_INTEGER;\n const rightTurn = typeof right.turnIndex === \"number\" ? right.turnIndex : Number.MAX_SAFE_INTEGER;\n if (leftTurn !== rightTurn) return leftTurn - rightTurn;\n return left.label.localeCompare(right.label);\n}\n\nfunction clipSummaryLabel(value: string): string {\n const trimmed = value.trim();\n return trimmed.length <= 180 ? trimmed : `${trimmed.slice(0, 177).trimEnd()}...`;\n}\n\nfunction normalizeCountCandidateKey(value: string): string {\n return value\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .replace(/[“”]/g, \"\\\"\")\n .replace(/[’]/g, \"'\")\n .replace(/\\bthe\\b/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction normalizeProbabilityCandidateKey(value: string): string {\n return normalizeCountCandidateKey(value)\n .replace(/\\s+(?:so|because|as)\\b.*$/g, \"\")\n .replace(/\\s+one more time\\b.*$/g, \"\")\n .replace(/\\s+is correct\\b.*$/g, \"\")\n .replace(/\\s+correct\\b.*$/g, \"\")\n .trim();\n}\n\nfunction numberWord(value: number): string | undefined {\n return NUMBER_WORDS[value];\n}\n\nfunction countFocusedTermOverlap(content: string, query: string): number {\n const terms = extractFocusedTerms(query);\n let overlap = 0;\n for (const term of terms) {\n if (content.includes(term)) overlap += 1;\n }\n return overlap;\n}\n\nfunction extractFocusedTerms(text: string): string[] {\n const terms = text.toLowerCase().match(/[a-z][a-z0-9-]{2,}/g) ?? [];\n return [...new Set(terms.filter((term) =>\n !FOCUSED_LIST_STOP_WORDS.has(term) &&\n !/^\\d+$/.test(term),\n ))];\n}\n\nfunction extractRelationTerms(text: string): string[] {\n return extractFocusedTerms(text).filter((term) =>\n !RELATION_STOP_WORDS.has(term) &&\n !/\\b(?:met|meet|meeting|know|connected|introduced)\\b/.test(term),\n );\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 clipTextToBudget(text: string, maxChars: number): string {\n if (text.length <= maxChars) {\n return text;\n }\n if (maxChars <= 3) {\n return text.slice(0, Math.max(0, maxChars));\n }\n return `${text.slice(0, maxChars - 3).trimEnd()}...`;\n}\n\nconst FOCUSED_LIST_STOP_WORDS = new Set([\n \"about\",\n \"across\",\n \"after\",\n \"also\",\n \"and\",\n \"are\",\n \"before\",\n \"between\",\n \"can\",\n \"could\",\n \"did\",\n \"different\",\n \"does\",\n \"for\",\n \"from\",\n \"have\",\n \"how\",\n \"into\",\n \"many\",\n \"mention\",\n \"mentioned\",\n \"next\",\n \"off\",\n \"pay\",\n \"planning\",\n \"should\",\n \"some\",\n \"spend\",\n \"that\",\n \"the\",\n \"this\",\n \"time\",\n \"times\",\n \"total\",\n \"want\",\n \"wanted\",\n \"wanting\",\n \"were\",\n \"what\",\n \"when\",\n \"where\",\n \"which\",\n \"with\",\n \"would\",\n \"you\",\n]);\n\nconst RELATION_STOP_WORDS = new Set([\n \"did\",\n \"how\",\n \"know\",\n \"meet\",\n \"met\",\n \"say\",\n \"saying\",\n \"when\",\n \"where\",\n]);\n\nconst SPECIAL_EVENT_STOP_WORDS = new Set([\n \"events\",\n \"event\",\n \"planning\",\n \"place\",\n \"special\",\n \"take\",\n \"where\",\n \"will\",\n]);\n\nconst NUMBER_WORDS: Record<number, string> = {\n 0: \"zero\",\n 1: \"one\",\n 2: \"two\",\n 3: \"three\",\n 4: \"four\",\n 5: \"five\",\n 6: \"six\",\n 7: \"seven\",\n 8: \"eight\",\n 9: \"nine\",\n 10: \"ten\",\n 11: \"eleven\",\n 12: \"twelve\",\n 13: \"thirteen\",\n 14: \"fourteen\",\n 15: \"fifteen\",\n 16: \"sixteen\",\n 17: \"seventeen\",\n 18: \"eighteen\",\n 19: \"nineteen\",\n 20: \"twenty\",\n};\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
+ import {
2
+ SQLITE_SCHEMA_VERSION
3
+ } from "./chunk-Z734BLO3.js";
1
4
  import {
2
5
  parseConflictPolicy,
3
6
  validateManifestRecords
4
7
  } from "./chunk-G4IAEX6D.js";
5
- import {
6
- SQLITE_SCHEMA_VERSION
7
- } from "./chunk-Z734BLO3.js";
8
8
  import {
9
9
  openBetterSqlite3
10
10
  } from "./chunk-6KYMPV2O.js";
@@ -84,4 +84,4 @@ async function importSqlite(opts) {
84
84
  export {
85
85
  importSqlite
86
86
  };
87
- //# sourceMappingURL=chunk-APJQ6UEA.js.map
87
+ //# sourceMappingURL=chunk-AGNBY3VG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-A4BTPHIN.js";
3
+ } from "./chunk-Y7NWBBHV.js";
4
4
  import {
5
5
  getCachedRuleMemories,
6
6
  setCachedRuleMemories
@@ -115,4 +115,4 @@ async function searchVerifiedSemanticRules(options) {
115
115
  export {
116
116
  searchVerifiedSemanticRules
117
117
  };
118
- //# sourceMappingURL=chunk-4BISW7RX.js.map
118
+ //# sourceMappingURL=chunk-AJE7FJVE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPostConsolidationMaterialize
3
- } from "./chunk-OR7R6M5Z.js";
3
+ } from "./chunk-IVYSVAC6.js";
4
4
  import {
5
5
  discoverMemoryExtensions,
6
6
  renderExtensionsBlock,
@@ -217,4 +217,4 @@ export {
217
217
  buildExtensionsBlockForConsolidation,
218
218
  materializeAfterSemanticConsolidation
219
219
  };
220
- //# sourceMappingURL=chunk-ZXWAQFDE.js.map
220
+ //# sourceMappingURL=chunk-CFOCZPIQ.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  decryptCapsuleFileInMemory,
9
9
  isEncryptedCapsuleFile
10
- } from "./chunk-UVYI6VIX.js";
10
+ } from "./chunk-X7Y7WX73.js";
11
11
  import {
12
12
  assertIsDirectoryNotSymlink,
13
13
  assertRealpathInsideRoot,
@@ -227,4 +227,4 @@ function mintForkId(capsuleId, originalId, now) {
227
227
  export {
228
228
  importCapsule
229
229
  };
230
- //# sourceMappingURL=chunk-NT5TINK5.js.map
230
+ //# sourceMappingURL=chunk-DHGSZ3UD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-A4BTPHIN.js";
3
+ } from "./chunk-Y7NWBBHV.js";
4
4
 
5
5
  // src/semantic-rule-promotion.ts
6
6
  import { createHash, randomUUID } from "crypto";
@@ -529,4 +529,4 @@ export {
529
529
  setSemanticRulePromotionTestHooks,
530
530
  promoteSemanticRuleFromMemory
531
531
  };
532
- //# sourceMappingURL=chunk-OTC2KOZ2.js.map
532
+ //# sourceMappingURL=chunk-EHQLDFSH.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  StorageManager,
3
3
  normalizeEntityName
4
- } from "./chunk-A4BTPHIN.js";
4
+ } from "./chunk-Y7NWBBHV.js";
5
5
  import {
6
6
  extractJsonCandidates
7
7
  } from "./chunk-RGMVMVMF.js";
@@ -860,4 +860,4 @@ export {
860
860
  resolveBriefingSaveDir,
861
861
  briefingFilename
862
862
  };
863
- //# sourceMappingURL=chunk-AMACWKM4.js.map
863
+ //# sourceMappingURL=chunk-IJHLC5CH.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-3UXOZBHV.js";
8
8
  import {
9
9
  StorageManager
10
- } from "./chunk-A4BTPHIN.js";
10
+ } from "./chunk-Y7NWBBHV.js";
11
11
  import {
12
12
  isSafeRouteNamespace
13
13
  } from "./chunk-U3PN77QT.js";
@@ -118,4 +118,4 @@ export {
118
118
  runCodexMaterialize,
119
119
  runPostConsolidationMaterialize
120
120
  };
121
- //# sourceMappingURL=chunk-OR7R6M5Z.js.map
121
+ //# sourceMappingURL=chunk-IVYSVAC6.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HQ6NIBL6.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-A4BTPHIN.js";
6
+ } from "./chunk-Y7NWBBHV.js";
7
7
  import {
8
8
  getCachedEpisodeMap,
9
9
  setCachedEpisodeMap
@@ -105,4 +105,4 @@ async function searchVerifiedEpisodes(options) {
105
105
  export {
106
106
  searchVerifiedEpisodes
107
107
  };
108
- //# sourceMappingURL=chunk-UMKPSD35.js.map
108
+ //# sourceMappingURL=chunk-JF7SFXTG.js.map
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  listMemoryGovernanceRuns,
12
12
  readMemoryGovernanceRunArtifact
13
- } from "./chunk-UMTG2BN2.js";
13
+ } from "./chunk-V4UDXYGG.js";
14
14
  import {
15
15
  StorageManager
16
- } from "./chunk-A4BTPHIN.js";
16
+ } from "./chunk-Y7NWBBHV.js";
17
17
  import {
18
18
  MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
19
19
  buildLifecycleEventsForMemory,
@@ -929,4 +929,4 @@ export {
929
929
  verifyMemoryProjection,
930
930
  repairMemoryProjection
931
931
  };
932
- //# sourceMappingURL=chunk-MCYT2RNT.js.map
932
+ //# sourceMappingURL=chunk-KJDKZVF3.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-WEHSQBFR.js";
7
7
  import {
8
8
  encryptCapsuleFile
9
- } from "./chunk-UVYI6VIX.js";
9
+ } from "./chunk-X7Y7WX73.js";
10
10
  import {
11
11
  CAPSULE_SCHEMA_VERSION,
12
12
  EXPORT_FORMAT
@@ -261,4 +261,4 @@ export {
261
261
  exportCapsule,
262
262
  isValidCapsuleSince
263
263
  };
264
- //# sourceMappingURL=chunk-BUKK5SWA.js.map
264
+ //# sourceMappingURL=chunk-KQAFEZQX.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-SFQ6QNL7.js";
7
7
  import {
8
8
  StorageManager
9
- } from "./chunk-A4BTPHIN.js";
9
+ } from "./chunk-Y7NWBBHV.js";
10
10
  import {
11
11
  buildLifecycleEventsForMemory,
12
12
  sortMemoryLifecycleEvents
@@ -74,4 +74,4 @@ export {
74
74
  backupExistingLedger,
75
75
  rebuildMemoryLifecycleLedger
76
76
  };
77
- //# sourceMappingURL=chunk-PQFUUXWK.js.map
77
+ //# sourceMappingURL=chunk-KWM33SPU.js.map
@@ -2,14 +2,14 @@ import {
2
2
  getGatewayRuntimeAuthForModel,
3
3
  resolveProviderApiKey
4
4
  } from "./chunk-B5XMS73R.js";
5
- import {
6
- loadModelsJsonProviders
7
- } from "./chunk-7SI52C65.js";
8
5
  import {
9
6
  buildChatCompletionTemperature,
10
7
  buildChatCompletionTokenLimit,
11
8
  shouldAssumeOpenAiChatCompletions
12
9
  } from "./chunk-L2EXJQJP.js";
10
+ import {
11
+ loadModelsJsonProviders
12
+ } from "./chunk-7SI52C65.js";
13
13
  import {
14
14
  callCodexCliFallback
15
15
  } from "./chunk-RK6F44Y6.js";
@@ -698,4 +698,4 @@ export {
698
698
  fallbackLlmRuntimeContextFromConfig,
699
699
  FallbackLlmClient
700
700
  };
701
- //# sourceMappingURL=chunk-A3BS64GV.js.map
701
+ //# sourceMappingURL=chunk-LCC5EZTT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-RRRCNIPK.js";
3
+ } from "./chunk-WJK75OCH.js";
4
4
  import {
5
5
  runConsolidationProvenanceCheck
6
6
  } from "./chunk-AL4RAJL5.js";
@@ -36,13 +36,13 @@ import {
36
36
  import {
37
37
  listMemoryGovernanceRuns,
38
38
  readMemoryGovernanceRunArtifact
39
- } from "./chunk-UMTG2BN2.js";
39
+ } from "./chunk-V4UDXYGG.js";
40
40
  import {
41
41
  analyzeGraphHealth
42
42
  } from "./chunk-Y56J7CXW.js";
43
43
  import {
44
44
  StorageManager
45
- } from "./chunk-A4BTPHIN.js";
45
+ } from "./chunk-Y7NWBBHV.js";
46
46
  import {
47
47
  lintWorkspaceFiles
48
48
  } from "./chunk-DM2T26WE.js";
@@ -1336,4 +1336,4 @@ export {
1336
1336
  runBenchmarkRecall,
1337
1337
  runOperatorRepair
1338
1338
  };
1339
- //# sourceMappingURL=chunk-ZT6R3WR3.js.map
1339
+ //# sourceMappingURL=chunk-LFTLXOFX.js.map
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-7WV3F5DQ.js";
7
7
  import {
8
8
  EngramMcpServer
9
- } from "./chunk-TVOPSKOK.js";
9
+ } from "./chunk-RSS2KWN6.js";
10
10
  import {
11
11
  EngramAccessInputError
12
- } from "./chunk-YAFSTKTH.js";
12
+ } from "./chunk-SLYD3AH4.js";
13
13
  import {
14
14
  projectTagProjectId
15
15
  } from "./chunk-MMJANTJX.js";
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-2ODBA7MQ.js";
31
31
  import {
32
32
  validateRequest
33
- } from "./chunk-QKE4LHNR.js";
33
+ } from "./chunk-4HYSMH7D.js";
34
34
  import {
35
35
  OFFLINE_SYNC_APPLY_MAX_BODY_BYTES,
36
36
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
@@ -2023,4 +2023,4 @@ function positiveIntQueryParam(value, label) {
2023
2023
  export {
2024
2024
  EngramAccessHttpServer
2025
2025
  };
2026
- //# sourceMappingURL=chunk-3IJEQWQX.js.map
2026
+ //# sourceMappingURL=chunk-MF32AL7N.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  ALL_CATEGORY_DIRS,
7
7
  StorageManager
8
- } from "./chunk-A4BTPHIN.js";
8
+ } from "./chunk-Y7NWBBHV.js";
9
9
  import {
10
10
  isSafeRouteNamespace
11
11
  } from "./chunk-U3PN77QT.js";
@@ -128,4 +128,4 @@ var NamespaceStorageRouter = class {
128
128
  export {
129
129
  NamespaceStorageRouter
130
130
  };
131
- //# sourceMappingURL=chunk-D6WVJIS3.js.map
131
+ //# sourceMappingURL=chunk-ORGWWNJG.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-DRD2Q7HQ.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-A4BTPHIN.js";
7
+ } from "./chunk-Y7NWBBHV.js";
8
8
  import {
9
9
  parseContinuityImprovementLoops
10
10
  } from "./chunk-LDXUBPMO.js";
@@ -1261,4 +1261,4 @@ export {
1261
1261
  defaultTierMigrationCycleBudget,
1262
1262
  CompoundingEngine
1263
1263
  };
1264
- //# sourceMappingURL=chunk-Z3PZRDLW.js.map
1264
+ //# sourceMappingURL=chunk-PRQXUSQV.js.map
@@ -1,3 +1,7 @@
1
+ import {
2
+ gatherAcrossReadSessions,
3
+ resolveLcmReadSessionIds
4
+ } from "./chunk-5FOCXX5E.js";
1
5
  import {
2
6
  buildEvidencePack,
3
7
  insertAfterEvidenceHeading
@@ -21,10 +25,14 @@ async function buildTargetedFactRecallSection(options) {
21
25
  if (maxResults <= 0) {
22
26
  return "";
23
27
  }
24
- const searchItems = await collectTargetedFactSearchItems(options);
25
- const scannedItems = await collectTargetedFactScanItems(options);
28
+ const collected = [];
29
+ await gatherAcrossReadSessions(resolveLcmReadSessionIds(options), async (sessionId) => {
30
+ const scoped = { ...options, sessionId };
31
+ collected.push(...await collectTargetedFactSearchItems(scoped));
32
+ collected.push(...await collectTargetedFactScanItems(scoped));
33
+ });
26
34
  const ranked = rankAndDedupeTargetedFactItems(
27
- [...searchItems, ...scannedItems],
35
+ collected,
28
36
  options.query
29
37
  ).slice(0, maxResults);
30
38
  const title = options.title ?? "Targeted fact evidence";
@@ -2158,4 +2166,4 @@ export {
2158
2166
  shouldRecallTargetedFactEvidence,
2159
2167
  buildTargetedFactRecallSection
2160
2168
  };
2161
- //# sourceMappingURL=chunk-VWT3F4IV.js.map
2169
+ //# sourceMappingURL=chunk-PS3SYNHP.js.map