pi-mega-compact 0.13.1 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/extensions/dashboard-server/api-contracts/embedder-health.js +11 -0
  2. package/dist/extensions/dashboard-server/api-contracts/endpoints/registry.js +238 -0
  3. package/dist/extensions/dashboard-server/api-contracts/endpoints/types.js +1 -0
  4. package/dist/extensions/dashboard-server/api-contracts/endpoints.js +5 -224
  5. package/dist/extensions/dashboard-server/api-contracts/rag-settings.js +10 -0
  6. package/dist/extensions/dashboard-server/api-contracts/raptor.js +8 -0
  7. package/dist/extensions/dashboard-server/api-contracts.test/_helpers.js +32 -0
  8. package/dist/extensions/dashboard-server/routes-cache.test/_helpers.js +48 -0
  9. package/dist/extensions/dashboard-server/routes-embedder-health.js +67 -0
  10. package/dist/extensions/dashboard-server/routes-rag-settings.js +169 -0
  11. package/dist/extensions/dashboard-server/routes-raptor.js +88 -0
  12. package/dist/extensions/dashboard-server/routes-setup.js +1 -1
  13. package/dist/extensions/dashboard-server/routes.js +3 -0
  14. package/dist/extensions/dashboard-server/server.js +7 -1
  15. package/dist/extensions/mega-cache-replay.test/_helpers.js +175 -0
  16. package/dist/extensions/mega-commands/dataCommands.js +151 -0
  17. package/dist/extensions/mega-commands/helpers.js +61 -0
  18. package/dist/extensions/mega-commands/historyCommands.js +97 -0
  19. package/dist/extensions/mega-commands/setupCommand.js +200 -0
  20. package/dist/extensions/mega-commands.js +14 -499
  21. package/dist/extensions/mega-compact-s38.test/_helpers.js +194 -0
  22. package/dist/extensions/mega-compact.test/_helpers.js +225 -0
  23. package/dist/extensions/mega-events/agent-handlers/agentEndHandler.js +211 -0
  24. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.js +49 -0
  25. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.js +33 -0
  26. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.js +387 -0
  27. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/event.js +7 -0
  28. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.js +55 -0
  29. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.js +12 -0
  30. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.js +22 -0
  31. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.js +38 -0
  32. package/dist/extensions/mega-events/agent-handlers/turnEndHandler.js +36 -0
  33. package/dist/extensions/mega-events/agent-handlers.js +4 -799
  34. package/dist/extensions/mega-events/context-handler/afterCompact.js +163 -0
  35. package/dist/extensions/mega-events/context-handler/messageText.js +12 -0
  36. package/dist/extensions/mega-events/context-handler/tailResult.js +46 -0
  37. package/dist/extensions/mega-events/context-handler.js +11 -198
  38. package/dist/extensions/mega-events/separated-prompt.test/_helpers.js +25 -0
  39. package/dist/src/config.js +14 -5
  40. package/dist/src/dedup-engine.test/_helpers.js +55 -0
  41. package/dist/src/e2e.test/_helpers.js +52 -0
  42. package/dist/src/embedder.js +1 -0
  43. package/dist/src/httpEmbedder.js +6 -0
  44. package/dist/src/hyde.js +146 -0
  45. package/dist/src/importance.test/_helpers.js +5 -0
  46. package/dist/src/memoryGraph/sources/checkpoints.js +78 -0
  47. package/dist/src/memoryGraph/sources/edges.js +17 -0
  48. package/dist/src/memoryGraph/sources/flags.js +22 -0
  49. package/dist/src/memoryGraph/sources/helpers.js +14 -0
  50. package/dist/src/memoryGraph/sources/memories.js +88 -0
  51. package/dist/src/memoryGraph/sources/raptor.js +26 -0
  52. package/dist/src/memoryGraph/sources/turns.js +176 -0
  53. package/dist/src/memoryGraph/sources.js +15 -441
  54. package/dist/src/memoryGraph-gates.test/_helpers.js +120 -0
  55. package/dist/src/ratio.bench.test/_helpers.js +198 -0
  56. package/dist/src/recall/async.js +112 -0
  57. package/dist/src/recall/format.js +149 -0
  58. package/dist/src/recall/memory.js +62 -0
  59. package/dist/src/recall/reformulate.js +82 -0
  60. package/dist/src/recall/sync.js +170 -0
  61. package/dist/src/recall/types.js +1 -0
  62. package/dist/src/recall.js +13 -530
  63. package/dist/src/store/sqlite/schema/core.js +232 -0
  64. package/dist/src/store/sqlite/schema/game.js +65 -0
  65. package/dist/src/store/sqlite/schema/plan-v2.js +107 -0
  66. package/dist/src/store/sqlite/schema/turns.js +59 -0
  67. package/dist/src/store/sqlite/schema.js +8 -441
  68. package/dist/src/store/turns/contract-compliance.test/_helpers.js +21 -0
  69. package/dist/src/store/turns/sqlite-store/admin.js +171 -0
  70. package/dist/src/store/turns/sqlite-store/ctx.js +1 -0
  71. package/dist/src/store/turns/sqlite-store/read.js +111 -0
  72. package/dist/src/store/turns/sqlite-store/rows.js +42 -0
  73. package/dist/src/store/turns/sqlite-store/write.js +102 -0
  74. package/dist/src/store/turns/sqlite-store.js +31 -367
  75. package/dist/src/vectorStore/class.js +356 -0
  76. package/dist/src/vectorStore/hash.js +10 -0
  77. package/dist/src/vectorStore/types.js +2 -0
  78. package/dist/src/vectorStore.js +8 -359
  79. package/dist/src/vectorStore.test/_helpers.js +17 -0
  80. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js → CacheTab-Cqnc7lMg.js} +2 -2
  81. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js.map → CacheTab-Cqnc7lMg.js.map} +1 -1
  82. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js → EventsTab-tYk3VFAp.js} +2 -2
  83. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js.map → EventsTab-tYk3VFAp.js.map} +1 -1
  84. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js → HealthTab-D2_kjgxw.js} +2 -2
  85. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js.map → HealthTab-D2_kjgxw.js.map} +1 -1
  86. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Bc-uPYrz.js +2 -0
  87. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Bc-uPYrz.js.map +1 -0
  88. package/extensions/dashboard-client/dist/assets/MemoryMapTab-D1V9g_NC.js +2 -0
  89. package/extensions/dashboard-client/dist/assets/MemoryMapTab-D1V9g_NC.js.map +1 -0
  90. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js → MetricsTab-DT_XfL96.js} +2 -2
  91. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js.map → MetricsTab-DT_XfL96.js.map} +1 -1
  92. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js → OverviewTab-BY6KZCme.js} +2 -2
  93. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js.map → OverviewTab-BY6KZCme.js.map} +1 -1
  94. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js → ReposTab-CeS-tpDM.js} +2 -2
  95. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js.map → ReposTab-CeS-tpDM.js.map} +1 -1
  96. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js → SessionsTab-C30AwyoF.js} +2 -2
  97. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js.map → SessionsTab-C30AwyoF.js.map} +1 -1
  98. package/extensions/dashboard-client/dist/assets/SetupTab-BJUHOVK2.js +2 -0
  99. package/extensions/dashboard-client/dist/assets/SetupTab-BJUHOVK2.js.map +1 -0
  100. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js → TimeSavedCard-p55K1tFP.js} +2 -2
  101. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js.map → TimeSavedCard-p55K1tFP.js.map} +1 -1
  102. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js → TopicsTab-D8FqyAbK.js} +2 -2
  103. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js.map → TopicsTab-D8FqyAbK.js.map} +1 -1
  104. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js → TurnsTab-ju-nXDys.js} +2 -2
  105. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js.map → TurnsTab-ju-nXDys.js.map} +1 -1
  106. package/extensions/dashboard-client/dist/assets/{index-Cucgohga.js → index-BEj1Zahy.js} +9 -9
  107. package/extensions/dashboard-client/dist/assets/index-BEj1Zahy.js.map +1 -0
  108. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js → useSSE-p1pOI_-P.js} +2 -2
  109. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js.map → useSSE-p1pOI_-P.js.map} +1 -1
  110. package/extensions/dashboard-client/dist/index.html +1 -1
  111. package/extensions/dashboard-client/src/api/client.ts +33 -0
  112. package/extensions/dashboard-client/src/tabs/MaintenanceTab/ActionsCard.tsx +178 -0
  113. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DbStatsCard.tsx +140 -0
  114. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DebugBundleCard.tsx +109 -0
  115. package/extensions/dashboard-client/src/tabs/MaintenanceTab/HealthMitigationCard.tsx +98 -0
  116. package/extensions/dashboard-client/src/tabs/MaintenanceTab/SchemaHealthCard.tsx +108 -0
  117. package/extensions/dashboard-client/src/tabs/MaintenanceTab.tsx +12 -598
  118. package/extensions/dashboard-client/src/tabs/MemoryMapTab/MemoryMapView.tsx +476 -0
  119. package/extensions/dashboard-client/src/tabs/MemoryMapTab/RaptorTreeView.tsx +163 -0
  120. package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +56 -466
  121. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderHealthCard.tsx +109 -0
  122. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderSetup.tsx +470 -0
  123. package/extensions/dashboard-client/src/tabs/SetupTab/RagSettingsCard.tsx +160 -0
  124. package/extensions/dashboard-client/src/tabs/SetupTab.tsx +13 -483
  125. package/extensions/dashboard-server/api-contracts/embedder-health.ts +32 -0
  126. package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +383 -0
  127. package/extensions/dashboard-server/api-contracts/endpoints/types.ts +350 -0
  128. package/extensions/dashboard-server/api-contracts/endpoints.ts +27 -648
  129. package/extensions/dashboard-server/api-contracts/index.ts +14 -0
  130. package/extensions/dashboard-server/api-contracts/rag-settings.ts +42 -0
  131. package/extensions/dashboard-server/api-contracts/raptor.ts +49 -0
  132. package/extensions/dashboard-server/api-contracts.test/_helpers.ts +47 -0
  133. package/extensions/dashboard-server/routes-cache.test/_helpers.ts +94 -0
  134. package/extensions/dashboard-server/routes-embedder-health.ts +77 -0
  135. package/extensions/dashboard-server/routes-rag-settings.ts +207 -0
  136. package/extensions/dashboard-server/routes-raptor.ts +128 -0
  137. package/extensions/dashboard-server/routes-setup.ts +1 -1
  138. package/extensions/dashboard-server/routes.ts +3 -0
  139. package/extensions/dashboard-server/server.ts +6 -0
  140. package/extensions/mega-cache-replay.test/_helpers.ts +188 -0
  141. package/extensions/mega-commands/dataCommands.ts +169 -0
  142. package/extensions/mega-commands/helpers.ts +62 -0
  143. package/extensions/mega-commands/historyCommands.ts +117 -0
  144. package/extensions/mega-commands/setupCommand.ts +235 -0
  145. package/extensions/mega-commands.ts +25 -538
  146. package/extensions/mega-compact-s38.test/_helpers.ts +201 -0
  147. package/extensions/mega-compact.test/_helpers.ts +237 -0
  148. package/extensions/mega-events/agent-handlers/agentEndHandler.ts +238 -0
  149. package/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.ts +74 -0
  150. package/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.ts +50 -0
  151. package/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.ts +421 -0
  152. package/extensions/mega-events/agent-handlers/turnEndHandler/event.ts +16 -0
  153. package/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.ts +73 -0
  154. package/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.ts +29 -0
  155. package/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.ts +42 -0
  156. package/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.ts +61 -0
  157. package/extensions/mega-events/agent-handlers/turnEndHandler.ts +64 -0
  158. package/extensions/mega-events/agent-handlers.ts +15 -861
  159. package/extensions/mega-events/context-handler/afterCompact.ts +213 -0
  160. package/extensions/mega-events/context-handler/messageText.ts +20 -0
  161. package/extensions/mega-events/context-handler/tailResult.ts +63 -0
  162. package/extensions/mega-events/context-handler.ts +17 -235
  163. package/extensions/mega-events/separated-prompt.test/_helpers.ts +35 -0
  164. package/package.json +1 -1
  165. package/src/config.ts +17 -5
  166. package/src/dedup-engine.test/_helpers.ts +79 -0
  167. package/src/e2e.test/_helpers.ts +59 -0
  168. package/src/embedder.ts +4 -0
  169. package/src/httpEmbedder.ts +7 -0
  170. package/src/hyde.ts +162 -0
  171. package/src/importance.test/_helpers.ts +5 -0
  172. package/src/memoryGraph/sources/checkpoints.ts +99 -0
  173. package/src/memoryGraph/sources/edges.ts +23 -0
  174. package/src/memoryGraph/sources/flags.ts +26 -0
  175. package/src/memoryGraph/sources/helpers.ts +13 -0
  176. package/src/memoryGraph/sources/memories.ts +108 -0
  177. package/src/memoryGraph/sources/raptor.ts +37 -0
  178. package/src/memoryGraph/sources/turns.ts +226 -0
  179. package/src/memoryGraph/sources.ts +19 -544
  180. package/src/memoryGraph-gates.test/_helpers.ts +164 -0
  181. package/src/ratio.bench.test/_helpers.ts +268 -0
  182. package/src/recall/async.ts +142 -0
  183. package/src/recall/format.ts +173 -0
  184. package/src/recall/memory.ts +90 -0
  185. package/src/recall/reformulate.ts +111 -0
  186. package/src/recall/sync.ts +197 -0
  187. package/src/recall/types.ts +63 -0
  188. package/src/recall.ts +25 -712
  189. package/src/store/sqlite/schema/core.ts +233 -0
  190. package/src/store/sqlite/schema/game.ts +66 -0
  191. package/src/store/sqlite/schema/plan-v2.ts +108 -0
  192. package/src/store/sqlite/schema/turns.ts +60 -0
  193. package/src/store/sqlite/schema.ts +13 -441
  194. package/src/store/turns/contract-compliance.test/_helpers.ts +38 -0
  195. package/src/store/turns/sqlite-store/admin.ts +249 -0
  196. package/src/store/turns/sqlite-store/ctx.ts +14 -0
  197. package/src/store/turns/sqlite-store/read.ts +174 -0
  198. package/src/store/turns/sqlite-store/rows.ts +55 -0
  199. package/src/store/turns/sqlite-store/write.ts +193 -0
  200. package/src/store/turns/sqlite-store.ts +33 -514
  201. package/src/vectorStore/class.ts +433 -0
  202. package/src/vectorStore/hash.ts +11 -0
  203. package/src/vectorStore/types.ts +58 -0
  204. package/src/vectorStore.test/_helpers.ts +20 -0
  205. package/src/vectorStore.ts +13 -489
  206. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js +0 -2
  207. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js.map +0 -1
  208. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js +0 -2
  209. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js.map +0 -1
  210. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js +0 -2
  211. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js.map +0 -1
  212. package/extensions/dashboard-client/dist/assets/index-Cucgohga.js.map +0 -1
@@ -0,0 +1,170 @@
1
+ /**
2
+ * recall/sync.ts — the unified synchronous recall+dedupe+prepare-inject path.
3
+ *
4
+ * ONE vector store, THREE entry points, ONE dedup engine. Every way context
5
+ * gets re-injected into the window (auto-inline on resume, on-demand
6
+ * /recall-context, and the dedup sentinel) goes through `recallAndInline`.
7
+ * It always does: search -> dedupe -> inject. The only thing that differs per
8
+ * entry point is *what triggers it* and *what query it uses*.
9
+ *
10
+ * Injection respects PREVENT-PI-003: pi has no `system` message role, so we
11
+ * prepend our recall block to the system prompt via the `before_agent_start`
12
+ * hook's `systemPrompt` result (the extension wires that). This module is
13
+ * pi-agnostic: it returns an injectable text block and records injections; the
14
+ * extension decides where it lands.
15
+ */
16
+ import { recall as searchRecall } from "../engine.js";
17
+ import { vectorMarkInjected } from "../vectorStore.js";
18
+ import { estimateBlockTokens } from "../tokens.js";
19
+ import { defaultEmbedder, cosineSimilarity } from "../embedder.js";
20
+ import { RAG_QUERY_REFORMULATION, RAG_TIERED_ROUTER, RAG_RECALL_METRICS, RAG_HYDE_ENABLED } from "../config.js";
21
+ import { generateHypotheticalDoc, fuseRecallHits } from "../hyde.js";
22
+ import { reformulateRecallQuery, runTieredRecall } from "./reformulate.js";
23
+ import { formatRecallBlock, scoreAndLogRecallMetrics, raptorOverviewBlock } from "./format.js";
24
+ /**
25
+ * Recall and inline context from the checkpoint store.
26
+ *
27
+ * S27 contract — DB-Mirror demotion:
28
+ *
29
+ * When `MEGACOMPACT_DB_MIRROR` is ON, the `raw_transcript` table is the
30
+ * canonical, byte-stable source of truth for message reconstruction. The
31
+ * `dedup_mirror` provides space-efficient storage with ref_count tracking
32
+ * (see src/mirror/dedup.ts). The legacy JSON checkpoint is retained as a
33
+ * DR snapshot only (see src/store.ts checkpoint helpers).
34
+ *
35
+ * The recall function continues to work from the VectorStore (checkpoint
36
+ * summaries + embeddings) for fast semantic search — this path is unaffected
37
+ * by the mirror flag. If full transcript reconstruction is ever needed
38
+ * (replay, export, debug), prefer reading from `raw_transcript + dedup_mirror`
39
+ * via `listRawTranscriptRange()` + `dedupTranscript()` instead of the legacy
40
+ * JSON checkpoint. Falls back to legacy checkpoint if mirror is empty
41
+ * (pre-migration sessions).
42
+ *
43
+ * Pi-agnostic: no pi runtime imports (src/ invariant).
44
+ */
45
+ export function recallAndInline(opts, store) {
46
+ // ── S27 Recall Demotion ─────────────────────────────────────────────
47
+ //
48
+ // When MEGACOMPACT_DB_MIRROR is ON, the raw_transcript + dedup_mirror
49
+ // tables are preferred for byte-stable reconstruction. The current
50
+ // recall path (VectorStore search → format → inject) is unaffected —
51
+ // it provides fast semantic search over checkpoint summaries.
52
+ //
53
+ // If full transcript reconstruction is ever needed (replay, export,
54
+ // debug), call reconstructFromMirror(db, sessionId, fromSeq, toSeq)
55
+ // from src/mirror/dedup.ts instead of reading from the legacy JSON
56
+ // checkpoint. Falls back to legacy checkpoint if mirror is empty
57
+ // (pre-migration sessions).
58
+ //
59
+ // Invariant: raw_transcript + dedup_mirror are additive and never
60
+ // lose data. The legacy JSON checkpoint remains as a DR snapshot.
61
+ // ─────────────────────────────────────────────────────────────────────
62
+ const limit = opts.limit ?? 3;
63
+ const skip = opts.skipInjected ?? true;
64
+ const maxTokens = opts.recallMaxTokens ?? 0; // 0 = unbounded (legacy behavior)
65
+ const doWindowDedupe = opts.windowDedupe ?? false;
66
+ const dedupSim = opts.dedupSim ?? 0.9;
67
+ // F4: thread skipInjected through to searchRecall instead of hardcoding false
68
+ // and re-implementing the filter here. newHits is already deduped when skip
69
+ // is true (default); equals hits when skip is false (openclaw command path).
70
+ //
71
+ // S57 B1: optionally expand a vague query via TF-IDF neighbor terms.
72
+ // S57 B2: optionally route via the TieredRouter's sync L0 cache peek.
73
+ // Both flags default OFF — recallQuery === opts.query and the single
74
+ // searchRecall call reproduce the pre-S57 byte-identical path.
75
+ const recallQuery = RAG_QUERY_REFORMULATION()
76
+ ? reformulateRecallQuery(opts.query, store, opts.sessionId)
77
+ : opts.query;
78
+ // F1: hoist one embedder instance (shared by HyDE below + inline dedupe later).
79
+ // defaultEmbedder() is deterministic but creating it per call wastes allocations.
80
+ const embedder = defaultEmbedder();
81
+ // S43 re-plan: HyDE — auto-ON when an HttpEmbedder is active (LLM configured
82
+ // for indexing); opt out via MEGACOMPACT_HYDE_DISABLED=true. Generates a
83
+ // hypothetical answer doc, embeds it, runs a second searchRecall, and
84
+ // RRF-fuses with the raw-query results. Non-fatal: any error → raw-only.
85
+ // TrigramEmbedder (kind !== "http") skips this — S57 B1 reformulation above
86
+ // already handles the no-LLM path.
87
+ let hydeHits = null;
88
+ if (RAG_HYDE_ENABLED() && embedder.kind === "http") {
89
+ const hyde = generateHypotheticalDoc(opts.query, embedder);
90
+ if (hyde) {
91
+ try {
92
+ const r2 = searchRecall({ sessionId: opts.sessionId, query: hyde, limit, skipInjected: skip }, store);
93
+ hydeHits = r2.newHits;
94
+ }
95
+ catch {
96
+ hydeHits = null;
97
+ }
98
+ }
99
+ }
100
+ let newHits;
101
+ if (RAG_TIERED_ROUTER()) {
102
+ newHits = runTieredRecall(recallQuery, opts.sessionId, limit, skip, store).newHits;
103
+ }
104
+ else {
105
+ const result = searchRecall({ sessionId: opts.sessionId, query: recallQuery, limit, skipInjected: skip }, store);
106
+ newHits = result.newHits;
107
+ }
108
+ // S43 re-plan: fuse the hypothetical-doc hits with the raw-query hits via RRF
109
+ // when HyDE produced results. The downstream inline dedupe + metrics + format
110
+ // operate on this fused set.
111
+ if (hydeHits && hydeHits.length > 0) {
112
+ newHits = fuseRecallHits(newHits, hydeHits, limit);
113
+ }
114
+ // Precompute live-window embeddings once for inline dedupe (Fix C). Trigram
115
+ // embedder is local + cheap; never a network call (PREVENT-PI-004).
116
+ let liveEmbeddings = [];
117
+ if (doWindowDedupe && opts.liveWindow && opts.liveWindow.length > 0) {
118
+ liveEmbeddings = opts.liveWindow.map((m) => embedder.embed(m));
119
+ }
120
+ // F3: build the hit list first; format ONCE at the end so the block carries
121
+ // exactly one preamble and [1..n] numbering, and the token cap counts body
122
+ // tokens (one preamble at format time, not N). We accumulate summaries and
123
+ // break mid-stream when the cap would be exceeded.
124
+ const toInject = [];
125
+ let blockTokens = 0;
126
+ for (const h of newHits) {
127
+ // Inline dedupe: skip a hit already resident in the live window (Fix C).
128
+ if (doWindowDedupe && liveEmbeddings.length > 0) {
129
+ const hitVec = embedder.embed(h.checkpoint.summary);
130
+ if (liveEmbeddings.some((v) => cosineSimilarity(v, hitVec) >= dedupSim))
131
+ continue;
132
+ }
133
+ const partTokens = estimateBlockTokens(h.checkpoint.summary);
134
+ // Token cap: never push a chunk that would overrun the ceiling.
135
+ if (maxTokens > 0 && blockTokens + partTokens > maxTokens)
136
+ break;
137
+ toInject.push(h);
138
+ blockTokens += partTokens;
139
+ vectorMarkInjected(store, opts.sessionId, h.checkpoint.checkpointId);
140
+ }
141
+ // S57 B3: optionally score + log recall quality metrics (flag-OFF: skipped,
142
+ // byte-identical). Scores the injected hits against the ORIGINAL query so the
143
+ // metric measures whether the (possibly expanded) search results stay
144
+ // relevant to what the user actually asked.
145
+ if (RAG_RECALL_METRICS())
146
+ scoreAndLogRecallMetrics(opts.query, toInject);
147
+ // F3: format once — one preamble, correct [1..n] numbering.
148
+ const recallBlock = toInject.length > 0 ? formatRecallBlock(toInject) : "";
149
+ const report = toInject.map((h) => ` • ${h.checkpoint.checkpointId} (${h.checkpoint.summary.slice(0, 60).replace(/\n/g, " ")}…)`);
150
+ // S25 Phase-2 (RAPTOR_INJECT_SUMMARIES): prepend a hierarchical overview
151
+ // header built from the tree's top-level summary nodes (root + the
152
+ // highest-scoring level-1 cluster summaries). This gives the model a topical
153
+ // map of the session before the detailed checkpoint hits. Default ON via
154
+ // the store's config; `opts.raptorSummaries` (when explicitly set) overrides.
155
+ // Skipped when no tree exists, the tree is stale/timedOut, or shadow mode is on.
156
+ let overview = "";
157
+ const injectSummaries = opts.raptorSummaries ?? store.cfg.RAPTOR_INJECT_SUMMARIES;
158
+ if (injectSummaries && recallBlock) {
159
+ overview = raptorOverviewBlock(store, opts.sessionId, opts.query);
160
+ }
161
+ const block = overview && recallBlock
162
+ ? overview + "\n" + recallBlock
163
+ : overview || recallBlock;
164
+ return {
165
+ toInject,
166
+ report,
167
+ block,
168
+ empty: block.length === 0,
169
+ };
170
+ }
@@ -0,0 +1 @@
1
+ export {};