@getrift/rift 0.1.0-beta.21 → 0.1.0-beta.23

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 (320) hide show
  1. package/README.md +7 -3
  2. package/dist/src/capture/auto-capture.d.ts +105 -4
  3. package/dist/src/capture/auto-capture.d.ts.map +1 -1
  4. package/dist/src/capture/auto-capture.js +313 -34
  5. package/dist/src/capture/auto-capture.js.map +1 -1
  6. package/dist/src/capture/claude-cli-triage-provider.d.ts +28 -0
  7. package/dist/src/capture/claude-cli-triage-provider.d.ts.map +1 -0
  8. package/dist/src/capture/claude-cli-triage-provider.js +88 -0
  9. package/dist/src/capture/claude-cli-triage-provider.js.map +1 -0
  10. package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -1
  11. package/dist/src/capture/codex-cli-triage-provider.js +1 -33
  12. package/dist/src/capture/codex-cli-triage-provider.js.map +1 -1
  13. package/dist/src/capture/cursor-capture.d.ts +89 -0
  14. package/dist/src/capture/cursor-capture.d.ts.map +1 -0
  15. package/dist/src/capture/cursor-capture.js +121 -0
  16. package/dist/src/capture/cursor-capture.js.map +1 -0
  17. package/dist/src/capture/observability.d.ts +30 -0
  18. package/dist/src/capture/observability.d.ts.map +1 -1
  19. package/dist/src/capture/observability.js +29 -0
  20. package/dist/src/capture/observability.js.map +1 -1
  21. package/dist/src/capture/recover-quarantine.d.ts +4 -4
  22. package/dist/src/capture/sources.d.ts +41 -3
  23. package/dist/src/capture/sources.d.ts.map +1 -1
  24. package/dist/src/capture/sources.js +43 -1
  25. package/dist/src/capture/sources.js.map +1 -1
  26. package/dist/src/capture/triage-classification.d.ts +69 -0
  27. package/dist/src/capture/triage-classification.d.ts.map +1 -0
  28. package/dist/src/capture/triage-classification.js +62 -0
  29. package/dist/src/capture/triage-classification.js.map +1 -0
  30. package/dist/src/capture/triage-provider-factory.d.ts +36 -0
  31. package/dist/src/capture/triage-provider-factory.d.ts.map +1 -0
  32. package/dist/src/capture/triage-provider-factory.js +55 -0
  33. package/dist/src/capture/triage-provider-factory.js.map +1 -0
  34. package/dist/src/capture/triage.d.ts +1 -1
  35. package/dist/src/capture/triage.d.ts.map +1 -1
  36. package/dist/src/capture/triage.js +8 -6
  37. package/dist/src/capture/triage.js.map +1 -1
  38. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  39. package/dist/src/cli/commands/capture.js +79 -17
  40. package/dist/src/cli/commands/capture.js.map +1 -1
  41. package/dist/src/cli/commands/chunk-backfill.d.ts +13 -0
  42. package/dist/src/cli/commands/chunk-backfill.d.ts.map +1 -0
  43. package/dist/src/cli/commands/chunk-backfill.js +157 -0
  44. package/dist/src/cli/commands/chunk-backfill.js.map +1 -0
  45. package/dist/src/cli/commands/cursor-probe.d.ts +20 -0
  46. package/dist/src/cli/commands/cursor-probe.d.ts.map +1 -0
  47. package/dist/src/cli/commands/cursor-probe.js +162 -0
  48. package/dist/src/cli/commands/cursor-probe.js.map +1 -0
  49. package/dist/src/cli/commands/menubar.d.ts +3 -1
  50. package/dist/src/cli/commands/menubar.d.ts.map +1 -1
  51. package/dist/src/cli/commands/menubar.js +36 -12
  52. package/dist/src/cli/commands/menubar.js.map +1 -1
  53. package/dist/src/cli/commands/onboard.d.ts +22 -2
  54. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  55. package/dist/src/cli/commands/onboard.js +160 -32
  56. package/dist/src/cli/commands/onboard.js.map +1 -1
  57. package/dist/src/cli/commands/status.d.ts.map +1 -1
  58. package/dist/src/cli/commands/status.js +12 -0
  59. package/dist/src/cli/commands/status.js.map +1 -1
  60. package/dist/src/cli/commands/update.d.ts +34 -1
  61. package/dist/src/cli/commands/update.d.ts.map +1 -1
  62. package/dist/src/cli/commands/update.js +166 -1
  63. package/dist/src/cli/commands/update.js.map +1 -1
  64. package/dist/src/cli/index.d.ts.map +1 -1
  65. package/dist/src/cli/index.js +4 -0
  66. package/dist/src/cli/index.js.map +1 -1
  67. package/dist/src/cli/postinstall-menubar.d.ts +20 -13
  68. package/dist/src/cli/postinstall-menubar.d.ts.map +1 -1
  69. package/dist/src/cli/postinstall-menubar.js +56 -1
  70. package/dist/src/cli/postinstall-menubar.js.map +1 -1
  71. package/dist/src/cli/status/friend-header.d.ts +16 -3
  72. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  73. package/dist/src/cli/status/friend-header.js +186 -10
  74. package/dist/src/cli/status/friend-header.js.map +1 -1
  75. package/dist/src/cli/status/local-signals.d.ts +42 -4
  76. package/dist/src/cli/status/local-signals.d.ts.map +1 -1
  77. package/dist/src/cli/status/local-signals.js +52 -1
  78. package/dist/src/cli/status/local-signals.js.map +1 -1
  79. package/dist/src/config/schema.d.ts +220 -14
  80. package/dist/src/config/schema.d.ts.map +1 -1
  81. package/dist/src/config/schema.js +82 -7
  82. package/dist/src/config/schema.js.map +1 -1
  83. package/dist/src/diagnostics/claude-preflight.d.ts +35 -0
  84. package/dist/src/diagnostics/claude-preflight.d.ts.map +1 -0
  85. package/dist/src/diagnostics/claude-preflight.js +90 -0
  86. package/dist/src/diagnostics/claude-preflight.js.map +1 -0
  87. package/dist/src/diagnostics/codex-preflight.d.ts +1 -1
  88. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -1
  89. package/dist/src/diagnostics/codex-preflight.js +24 -0
  90. package/dist/src/diagnostics/codex-preflight.js.map +1 -1
  91. package/dist/src/diagnostics/doctor.d.ts +7 -4
  92. package/dist/src/diagnostics/doctor.d.ts.map +1 -1
  93. package/dist/src/diagnostics/doctor.js +70 -11
  94. package/dist/src/diagnostics/doctor.js.map +1 -1
  95. package/dist/src/diagnostics/memory-coverage.d.ts +54 -0
  96. package/dist/src/diagnostics/memory-coverage.d.ts.map +1 -0
  97. package/dist/src/diagnostics/memory-coverage.js +272 -0
  98. package/dist/src/diagnostics/memory-coverage.js.map +1 -0
  99. package/dist/src/diagnostics/notify.d.ts +20 -3
  100. package/dist/src/diagnostics/notify.d.ts.map +1 -1
  101. package/dist/src/diagnostics/notify.js +54 -14
  102. package/dist/src/diagnostics/notify.js.map +1 -1
  103. package/dist/src/ingestion/chunk-meta.d.ts +85 -0
  104. package/dist/src/ingestion/chunk-meta.d.ts.map +1 -0
  105. package/dist/src/ingestion/chunk-meta.js +167 -0
  106. package/dist/src/ingestion/chunk-meta.js.map +1 -0
  107. package/dist/src/ingestion/chunk-text.d.ts +39 -0
  108. package/dist/src/ingestion/chunk-text.d.ts.map +1 -0
  109. package/dist/src/ingestion/chunk-text.js +114 -0
  110. package/dist/src/ingestion/chunk-text.js.map +1 -0
  111. package/dist/src/ingestion/cursor/cursor-store.d.ts +177 -0
  112. package/dist/src/ingestion/cursor/cursor-store.d.ts.map +1 -0
  113. package/dist/src/ingestion/cursor/cursor-store.js +243 -0
  114. package/dist/src/ingestion/cursor/cursor-store.js.map +1 -0
  115. package/dist/src/ingestion/cursor/enrich-roots.d.ts +16 -0
  116. package/dist/src/ingestion/cursor/enrich-roots.d.ts.map +1 -0
  117. package/dist/src/ingestion/cursor/enrich-roots.js +22 -0
  118. package/dist/src/ingestion/cursor/enrich-roots.js.map +1 -0
  119. package/dist/src/ingestion/cursor/vscdb-reader.d.ts +32 -0
  120. package/dist/src/ingestion/cursor/vscdb-reader.d.ts.map +1 -0
  121. package/dist/src/ingestion/cursor/vscdb-reader.js +113 -0
  122. package/dist/src/ingestion/cursor/vscdb-reader.js.map +1 -0
  123. package/dist/src/ingestion/cursor/workspace-root.d.ts +96 -0
  124. package/dist/src/ingestion/cursor/workspace-root.d.ts.map +1 -0
  125. package/dist/src/ingestion/cursor/workspace-root.js +187 -0
  126. package/dist/src/ingestion/cursor/workspace-root.js.map +1 -0
  127. package/dist/src/ingestion/indexer.d.ts.map +1 -1
  128. package/dist/src/ingestion/indexer.js +41 -32
  129. package/dist/src/ingestion/indexer.js.map +1 -1
  130. package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
  131. package/dist/src/jobs/handlers/compact.js +9 -4
  132. package/dist/src/jobs/handlers/compact.js.map +1 -1
  133. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  134. package/dist/src/jobs/handlers/ingest.js +60 -30
  135. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  136. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  137. package/dist/src/jobs/handlers/reconcile.js +128 -45
  138. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  139. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  140. package/dist/src/jobs/handlers/save.js +122 -72
  141. package/dist/src/jobs/handlers/save.js.map +1 -1
  142. package/dist/src/jobs/types.d.ts +1 -1
  143. package/dist/src/main.js +27 -16
  144. package/dist/src/main.js.map +1 -1
  145. package/dist/src/mcp/capture-diagnostics.d.ts +51 -0
  146. package/dist/src/mcp/capture-diagnostics.d.ts.map +1 -0
  147. package/dist/src/mcp/capture-diagnostics.js +127 -0
  148. package/dist/src/mcp/capture-diagnostics.js.map +1 -0
  149. package/dist/src/mcp/memory-diagnostics.d.ts +6 -0
  150. package/dist/src/mcp/memory-diagnostics.d.ts.map +1 -0
  151. package/dist/src/mcp/memory-diagnostics.js +51 -0
  152. package/dist/src/mcp/memory-diagnostics.js.map +1 -0
  153. package/dist/src/mcp/server.d.ts.map +1 -1
  154. package/dist/src/mcp/server.js +10 -3
  155. package/dist/src/mcp/server.js.map +1 -1
  156. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
  157. package/dist/src/mcp/tools/context-pack.js +7 -1
  158. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  159. package/dist/src/mcp/tools/conversations-search.d.ts +1 -1
  160. package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -1
  161. package/dist/src/mcp/tools/conversations-search.js +7 -1
  162. package/dist/src/mcp/tools/conversations-search.js.map +1 -1
  163. package/dist/src/mcp/tools/evidence-feedback.d.ts +60 -0
  164. package/dist/src/mcp/tools/evidence-feedback.d.ts.map +1 -0
  165. package/dist/src/mcp/tools/evidence-feedback.js +62 -0
  166. package/dist/src/mcp/tools/evidence-feedback.js.map +1 -0
  167. package/dist/src/mcp/tools/log-outcome.d.ts +72 -0
  168. package/dist/src/mcp/tools/log-outcome.d.ts.map +1 -0
  169. package/dist/src/mcp/tools/log-outcome.js +59 -0
  170. package/dist/src/mcp/tools/log-outcome.js.map +1 -0
  171. package/dist/src/mcp/tools/open-evidence.d.ts +37 -0
  172. package/dist/src/mcp/tools/open-evidence.d.ts.map +1 -0
  173. package/dist/src/mcp/tools/open-evidence.js +72 -0
  174. package/dist/src/mcp/tools/open-evidence.js.map +1 -0
  175. package/dist/src/mcp/tools/save.d.ts +7 -2
  176. package/dist/src/mcp/tools/save.d.ts.map +1 -1
  177. package/dist/src/mcp/tools/save.js +7 -2
  178. package/dist/src/mcp/tools/save.js.map +1 -1
  179. package/dist/src/mcp/tools/search.d.ts.map +1 -1
  180. package/dist/src/mcp/tools/search.js +7 -1
  181. package/dist/src/mcp/tools/search.js.map +1 -1
  182. package/dist/src/mcp/tools/status.d.ts +15 -1
  183. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  184. package/dist/src/mcp/tools/status.js +53 -2
  185. package/dist/src/mcp/tools/status.js.map +1 -1
  186. package/dist/src/observability/retrieval-feedback.d.ts +82 -0
  187. package/dist/src/observability/retrieval-feedback.d.ts.map +1 -0
  188. package/dist/src/observability/retrieval-feedback.js +231 -0
  189. package/dist/src/observability/retrieval-feedback.js.map +1 -0
  190. package/dist/src/observability/rift-context.d.ts.map +1 -1
  191. package/dist/src/observability/rift-context.js +3 -0
  192. package/dist/src/observability/rift-context.js.map +1 -1
  193. package/dist/src/observability/tool-usage-stats.d.ts +13 -0
  194. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  195. package/dist/src/observability/tool-usage-stats.js +15 -0
  196. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  197. package/dist/src/observability/tool-usage.d.ts +56 -0
  198. package/dist/src/observability/tool-usage.d.ts.map +1 -1
  199. package/dist/src/observability/tool-usage.js +86 -0
  200. package/dist/src/observability/tool-usage.js.map +1 -1
  201. package/dist/src/providers/claude-cli-metadata-extraction.d.ts +47 -0
  202. package/dist/src/providers/claude-cli-metadata-extraction.d.ts.map +1 -0
  203. package/dist/src/providers/claude-cli-metadata-extraction.js +120 -0
  204. package/dist/src/providers/claude-cli-metadata-extraction.js.map +1 -0
  205. package/dist/src/providers/claude-cli-runner.d.ts +92 -0
  206. package/dist/src/providers/claude-cli-runner.d.ts.map +1 -0
  207. package/dist/src/providers/claude-cli-runner.js +598 -0
  208. package/dist/src/providers/claude-cli-runner.js.map +1 -0
  209. package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -1
  210. package/dist/src/providers/codex-cli-metadata-extraction.js +1 -40
  211. package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -1
  212. package/dist/src/providers/codex-cli-runner.d.ts +7 -0
  213. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  214. package/dist/src/providers/codex-cli-runner.js +131 -5
  215. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  216. package/dist/src/providers/conversation-generation.d.ts +10 -0
  217. package/dist/src/providers/conversation-generation.d.ts.map +1 -1
  218. package/dist/src/providers/conversation-generation.js +54 -13
  219. package/dist/src/providers/conversation-generation.js.map +1 -1
  220. package/dist/src/providers/openai-metadata-extraction.d.ts +48 -1
  221. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
  222. package/dist/src/providers/openai-metadata-extraction.js +51 -2
  223. package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
  224. package/dist/src/providers/types.d.ts +1 -1
  225. package/dist/src/providers/types.d.ts.map +1 -1
  226. package/dist/src/providers/types.js +4 -0
  227. package/dist/src/providers/types.js.map +1 -1
  228. package/dist/src/retrieval/canonical-files.d.ts +48 -0
  229. package/dist/src/retrieval/canonical-files.d.ts.map +1 -0
  230. package/dist/src/retrieval/canonical-files.js +210 -0
  231. package/dist/src/retrieval/canonical-files.js.map +1 -0
  232. package/dist/src/retrieval/compact.d.ts +95 -0
  233. package/dist/src/retrieval/compact.d.ts.map +1 -1
  234. package/dist/src/retrieval/compact.js +254 -8
  235. package/dist/src/retrieval/compact.js.map +1 -1
  236. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  237. package/dist/src/retrieval/context-pack.js +65 -15
  238. package/dist/src/retrieval/context-pack.js.map +1 -1
  239. package/dist/src/retrieval/conversation-dedup.d.ts +40 -0
  240. package/dist/src/retrieval/conversation-dedup.d.ts.map +1 -0
  241. package/dist/src/retrieval/conversation-dedup.js +141 -0
  242. package/dist/src/retrieval/conversation-dedup.js.map +1 -0
  243. package/dist/src/retrieval/evidence-key.d.ts +48 -0
  244. package/dist/src/retrieval/evidence-key.d.ts.map +1 -0
  245. package/dist/src/retrieval/evidence-key.js +131 -0
  246. package/dist/src/retrieval/evidence-key.js.map +1 -0
  247. package/dist/src/retrieval/feedback-ranking.d.ts +49 -0
  248. package/dist/src/retrieval/feedback-ranking.d.ts.map +1 -0
  249. package/dist/src/retrieval/feedback-ranking.js +138 -0
  250. package/dist/src/retrieval/feedback-ranking.js.map +1 -0
  251. package/dist/src/retrieval/git-state.d.ts +9 -0
  252. package/dist/src/retrieval/git-state.d.ts.map +1 -1
  253. package/dist/src/retrieval/git-state.js +18 -0
  254. package/dist/src/retrieval/git-state.js.map +1 -1
  255. package/dist/src/retrieval/group-by-parent.d.ts +38 -0
  256. package/dist/src/retrieval/group-by-parent.d.ts.map +1 -0
  257. package/dist/src/retrieval/group-by-parent.js +40 -0
  258. package/dist/src/retrieval/group-by-parent.js.map +1 -0
  259. package/dist/src/retrieval/lexical.d.ts.map +1 -1
  260. package/dist/src/retrieval/lexical.js +1 -3
  261. package/dist/src/retrieval/lexical.js.map +1 -1
  262. package/dist/src/retrieval/receipt.d.ts +57 -0
  263. package/dist/src/retrieval/receipt.d.ts.map +1 -0
  264. package/dist/src/retrieval/receipt.js +119 -0
  265. package/dist/src/retrieval/receipt.js.map +1 -0
  266. package/dist/src/retrieval/reranker.d.ts +49 -2
  267. package/dist/src/retrieval/reranker.d.ts.map +1 -1
  268. package/dist/src/retrieval/reranker.js +64 -4
  269. package/dist/src/retrieval/reranker.js.map +1 -1
  270. package/dist/src/retrieval/stitch-chunks.d.ts +73 -0
  271. package/dist/src/retrieval/stitch-chunks.d.ts.map +1 -0
  272. package/dist/src/retrieval/stitch-chunks.js +106 -0
  273. package/dist/src/retrieval/stitch-chunks.js.map +1 -0
  274. package/dist/src/server/app.d.ts +1 -1
  275. package/dist/src/server/app.d.ts.map +1 -1
  276. package/dist/src/server/app.js +20 -3
  277. package/dist/src/server/app.js.map +1 -1
  278. package/dist/src/server/routes/conversations-search.d.ts.map +1 -1
  279. package/dist/src/server/routes/conversations-search.js +22 -3
  280. package/dist/src/server/routes/conversations-search.js.map +1 -1
  281. package/dist/src/server/routes/friend-status.d.ts +64 -6
  282. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  283. package/dist/src/server/routes/friend-status.js +114 -18
  284. package/dist/src/server/routes/friend-status.js.map +1 -1
  285. package/dist/src/server/routes/mcp-usage.d.ts +9 -6
  286. package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
  287. package/dist/src/server/routes/mcp-usage.js.map +1 -1
  288. package/dist/src/server/routes/retrieval-feedback.d.ts +3 -0
  289. package/dist/src/server/routes/retrieval-feedback.d.ts.map +1 -0
  290. package/dist/src/server/routes/retrieval-feedback.js +290 -0
  291. package/dist/src/server/routes/retrieval-feedback.js.map +1 -0
  292. package/dist/src/server/routes/save.d.ts +3 -3
  293. package/dist/src/server/routes/save.d.ts.map +1 -1
  294. package/dist/src/server/routes/save.js +6 -2
  295. package/dist/src/server/routes/save.js.map +1 -1
  296. package/dist/src/server/routes/search.d.ts +1 -1
  297. package/dist/src/server/routes/search.d.ts.map +1 -1
  298. package/dist/src/server/routes/search.js +55 -8
  299. package/dist/src/server/routes/search.js.map +1 -1
  300. package/dist/src/server/serving-marker.d.ts +85 -0
  301. package/dist/src/server/serving-marker.d.ts.map +1 -0
  302. package/dist/src/server/serving-marker.js +226 -0
  303. package/dist/src/server/serving-marker.js.map +1 -0
  304. package/dist/src/storage/chunk-backfill.d.ts +39 -0
  305. package/dist/src/storage/chunk-backfill.d.ts.map +1 -0
  306. package/dist/src/storage/chunk-backfill.js +295 -0
  307. package/dist/src/storage/chunk-backfill.js.map +1 -0
  308. package/dist/src/storage/filter.d.ts +42 -0
  309. package/dist/src/storage/filter.d.ts.map +1 -0
  310. package/dist/src/storage/filter.js +70 -0
  311. package/dist/src/storage/filter.js.map +1 -0
  312. package/dist/src/storage/rebuild.d.ts.map +1 -1
  313. package/dist/src/storage/rebuild.js +44 -27
  314. package/dist/src/storage/rebuild.js.map +1 -1
  315. package/dist/src/storage/tables.d.ts +41 -0
  316. package/dist/src/storage/tables.d.ts.map +1 -1
  317. package/dist/src/storage/tables.js +64 -1
  318. package/dist/src/storage/tables.js.map +1 -1
  319. package/operator/swiftbar/render-menu.py +60 -18
  320. package/package.json +6 -4
@@ -11,6 +11,11 @@
11
11
  */
12
12
  import { getTable, TABLE_NAMES } from "../storage/tables.js";
13
13
  import { tokenize } from "./lexical.js";
14
+ import { parentKeyForRow, readChunkMarker, } from "../ingestion/chunk-meta.js";
15
+ import { rankedKey } from "./group-by-parent.js";
16
+ import { stitchChunkContents } from "./stitch-chunks.js";
17
+ import { eqFilter, inFilter } from "../storage/filter.js";
18
+ import { stableEvidenceIdentityForRow } from "./evidence-key.js";
14
19
  export const SNIPPET_MAX = 400;
15
20
  export const SUMMARY_MAX = 800;
16
21
  export const TITLE_MAX = 120;
@@ -39,6 +44,14 @@ export const LARGE_HIT_TOKEN_THRESHOLD = 10_000;
39
44
  export const MIDDLE_HEAD_CHARS = 8_000;
40
45
  export const MIDDLE_TAIL_CHARS = 4_000;
41
46
  export const MIDDLE_INLINE_THRESHOLD_CHARS = 12_000;
47
+ /**
48
+ * Neighbor chunks to include on each side of the matched chunk for a
49
+ * `detail="middle"` expand of a chunked source. The window is `[i-K, i+K]`
50
+ * clamped to the set, so K=1 yields up to 3 contiguous chunks (~5k chars /
51
+ * ~1.4k tokens at the default 1800-char target) — enough surrounding context to
52
+ * read the matched section in place without re-dumping the whole conversation.
53
+ */
54
+ export const MIDDLE_CHUNK_NEIGHBORS = 1;
42
55
  /**
43
56
  * Pre-call size advert for an expansion: every compact hit carries this on
44
57
  * both the top-level fields and inside `expand.params`, so an agent that
@@ -78,9 +91,33 @@ function formatTokensShort(tokens) {
78
91
  return `${Math.round(tokens / 1000)}k`;
79
92
  return String(tokens);
80
93
  }
94
+ /**
95
+ * Pointer fields that let an agent re-cite this exact evidence for retrieval
96
+ * feedback without the route having to re-derive identity from a stale/partial
97
+ * pointer. `stable_evidence_key` is authoritative; `source` + `parent_id` are
98
+ * carried so conversation identity survives even if the key is ever dropped.
99
+ * Empty when no backing row is available (the expand path can still fetch by id).
100
+ */
101
+ function evidencePointerParams(sourceTable, row) {
102
+ if (!row)
103
+ return {};
104
+ const identity = stableEvidenceIdentityForRow(sourceTable, row);
105
+ const source = row["source"];
106
+ const parentId = row["parent_id"];
107
+ return {
108
+ stable_evidence_key: identity.stable_evidence_key,
109
+ ...(typeof source === "string" && source ? { source } : {}),
110
+ ...(typeof parentId === "string" && parentId ? { parent_id: parentId } : {}),
111
+ };
112
+ }
81
113
  /**
82
114
  * Batch-fetch the raw source rows for reranked results.
83
115
  * Groups ids by source table and issues one `id IN (...)` query per table.
116
+ *
117
+ * Keyed by {@link rankedKey} — `(source_table, id)`, NOT bare id — so a row id
118
+ * shared across two tables (cloud vs local docs, hot vs cold) can never have one
119
+ * table's row overwrite the other's and produce a dishonest snippet/title/source
120
+ * for the surviving hit. Callers must look up via `get(rankedKey(r))`.
84
121
  */
85
122
  export async function fetchRawRowsForRanked(ranked) {
86
123
  const byTable = new Map();
@@ -93,18 +130,84 @@ export async function fetchRawRowsForRanked(ranked) {
93
130
  for (const [tableName, ids] of byTable) {
94
131
  if (ids.length === 0)
95
132
  continue;
96
- const quoted = ids.map((i) => `'${i.replace(/'/g, "''")}'`).join(",");
97
133
  const rows = (await getTable(tableName)
98
134
  .query()
99
- .where(`id IN (${quoted})`)
135
+ .where(inFilter("id", ids, { validateAsRowId: true }))
100
136
  .limit(ids.length)
101
137
  .toArray());
102
138
  for (const row of rows) {
103
- out.set(row.id, row);
139
+ out.set(rankedKey({ source_table: tableName, id: row.id }), row);
104
140
  }
105
141
  }
106
142
  return out;
107
143
  }
144
+ /**
145
+ * The minimal column projections each table family needs for
146
+ * {@link parentKeyForRow}. Deliberately excludes `content` and the embedding
147
+ * vector: chunk-grouping must inspect the WHOLE reranked pool (siblings beyond
148
+ * top_k still have to collapse before the top_k slice), and pulling full rows —
149
+ * embeddings included — for the entire deep pool on every query was a real
150
+ * hot-path regression. These projections let us key the pool cheaply, then fetch
151
+ * full rows only for the surviving representatives.
152
+ */
153
+ const CONV_MARKER_COLUMNS = [
154
+ "id",
155
+ "parent_id",
156
+ "chunk_index",
157
+ "chunk_count",
158
+ "source",
159
+ ];
160
+ const DOC_MARKER_COLUMNS = ["id", "source_path", "metadata"];
161
+ /**
162
+ * Compute the parent grouping key for every reranked result using a
163
+ * projection-only query (no `content`, no embedding vector) per source table.
164
+ *
165
+ * Returns `rankedKey(r) → parentKey | null`, keyed by `(source_table, id)` so a
166
+ * row id shared across two tables (cloud vs local docs, hot vs cold) can never
167
+ * collide into one entry. `null` for any row with no explicit chunk marker (the
168
+ * flag-off / legacy case — never grouped) and for any id with no backing row.
169
+ * Digests never chunk, so their ids map to `null` without a query. Pair with
170
+ * {@link groupByParent} (which looks up via {@link rankedKey}), then call
171
+ * {@link fetchRawRowsForRanked} on the post-group top-k representatives only.
172
+ */
173
+ export async function fetchParentKeysForRanked(ranked) {
174
+ const byTable = new Map();
175
+ for (const r of ranked) {
176
+ const arr = byTable.get(r.source_table) ?? [];
177
+ arr.push(r.id);
178
+ byTable.set(r.source_table, arr);
179
+ }
180
+ const out = new Map();
181
+ for (const [tableName, ids] of byTable) {
182
+ if (ids.length === 0)
183
+ continue;
184
+ const keyOf = (id) => rankedKey({ source_table: tableName, id });
185
+ // Digests can never be chunked — skip the query entirely.
186
+ if (tableName === "digests") {
187
+ for (const id of ids)
188
+ out.set(keyOf(id), null);
189
+ continue;
190
+ }
191
+ const columns = tableName === "conversations_hot" || tableName === "conversations_cold"
192
+ ? CONV_MARKER_COLUMNS
193
+ : DOC_MARKER_COLUMNS;
194
+ const rows = (await getTable(tableName)
195
+ .query()
196
+ .where(inFilter("id", ids, { validateAsRowId: true }))
197
+ .select([...columns])
198
+ .limit(ids.length)
199
+ .toArray());
200
+ for (const row of rows) {
201
+ const id = row.id;
202
+ out.set(keyOf(id), parentKeyForRow(tableName, row));
203
+ }
204
+ // Any id with no returned row reads as ungrouped.
205
+ for (const id of ids)
206
+ if (!out.has(keyOf(id)))
207
+ out.set(keyOf(id), null);
208
+ }
209
+ return out;
210
+ }
108
211
  /** Derive the compact `tier` label from source_table (+ source_scope for docs). */
109
212
  export function deriveTier(sourceTable, row) {
110
213
  switch (sourceTable) {
@@ -152,14 +255,15 @@ export function tablesForTier(tier) {
152
255
  * hand-crafted expansion requests that don't carry `source_table`.
153
256
  */
154
257
  export async function fetchRowByIdForTier(id, tier, sourceTableHint) {
155
- const escaped = id.replace(/'/g, "''");
156
258
  const candidates = sourceTableHint
157
259
  ? [sourceTableHint]
158
260
  : tablesForTier(tier);
159
261
  for (const tableName of candidates) {
160
262
  const rows = (await getTable(tableName)
161
263
  .query()
162
- .where(`id = '${escaped}'`)
264
+ // `id` is user-supplied via /search → escape only (no charset throw, so a
265
+ // malformed id stays a clean 404 rather than a 500).
266
+ .where(eqFilter("id", id))
163
267
  .limit(1)
164
268
  .toArray());
165
269
  if (rows.length > 0) {
@@ -189,12 +293,12 @@ export async function fetchRowsByIdAcrossTables(id) {
189
293
  * first-match-wins.
190
294
  */
191
295
  export async function fetchRowsByIdInTables(id, tables) {
192
- const escaped = id.replace(/'/g, "''");
193
296
  const matches = [];
194
297
  for (const tableName of tables) {
195
298
  const rows = (await getTable(tableName)
196
299
  .query()
197
- .where(`id = '${escaped}'`)
300
+ // `id` is user-supplied via /search → escape only (see fetchRowByIdForTier).
301
+ .where(eqFilter("id", id))
198
302
  .limit(2)
199
303
  .toArray());
200
304
  for (const row of rows) {
@@ -241,6 +345,7 @@ export function buildCompactHitFromRow(row, sourceTable, opts) {
241
345
  detail: "full",
242
346
  content_bytes,
243
347
  content_tokens_estimate,
348
+ ...evidencePointerParams(sourceTable, row),
244
349
  },
245
350
  },
246
351
  };
@@ -255,6 +360,134 @@ export function buildCompactHitFromRow(row, sourceTable, opts) {
255
360
  }
256
361
  return hit;
257
362
  }
363
+ /** Projection columns needed to stitch a conversation / document chunk set. */
364
+ const CONV_STITCH_COLUMNS = [
365
+ "id",
366
+ "content",
367
+ "parent_id",
368
+ "chunk_index",
369
+ "chunk_count",
370
+ "source",
371
+ ];
372
+ const DOC_STITCH_COLUMNS = [
373
+ "id",
374
+ "content",
375
+ "metadata",
376
+ "source_path",
377
+ ];
378
+ /**
379
+ * Fetch the WHOLE parent chunk set of `matchedRow`. Reads only the columns
380
+ * needed to reassemble content (never the embedding vector). Best-effort: a
381
+ * sibling missing from the table (a partially-written set) simply doesn't appear,
382
+ * and the stitcher renders the gap honestly.
383
+ *
384
+ * The caller always needs the full set: even a bounded `middle` window must
385
+ * advertise the full-parent size on its `detail="full"` escalation pointer, so we
386
+ * stitch the whole set for that advert and a sub-window for the returned body.
387
+ * Server-side IO/memory therefore scales with parent length regardless of detail
388
+ * — fine for the bounded response, but not free for very long Codex/Claude
389
+ * threads. We read each sibling's ordinal from the authoritative column /
390
+ * metadata because that is simpler and more robust than an index-range predicate
391
+ * over the stringified `chunk_index`; a range/ID-targeted fetch is the follow-up
392
+ * if long-parent expand cost shows up in practice.
393
+ */
394
+ async function fetchChunkSiblings(sourceTable, matchedRow, marker) {
395
+ const isConv = sourceTable === "conversations_hot" || sourceTable === "conversations_cold";
396
+ const limit = marker.count + 4; // small slack to surface any stray duplicate
397
+ const where = isConv
398
+ ? // A conversation chunk set shares parent_id AND source (the namespaced
399
+ // retrieval key includes source), so scope to both.
400
+ `${eqFilter("parent_id", marker.parentId)} AND ${eqFilter("source", typeof matchedRow["source"] === "string" ? matchedRow["source"] : "")}`
401
+ : eqFilter("source_path", marker.parentId);
402
+ const rows = (await getTable(sourceTable)
403
+ .query()
404
+ .where(where)
405
+ .select([...(isConv ? CONV_STITCH_COLUMNS : DOC_STITCH_COLUMNS)])
406
+ .limit(limit)
407
+ .toArray());
408
+ const out = [];
409
+ for (const row of rows) {
410
+ const m = readChunkMarker(sourceTable, row);
411
+ if (!m)
412
+ continue;
413
+ out.push({ index: m.index, content: row.content ?? "" });
414
+ }
415
+ return out;
416
+ }
417
+ /**
418
+ * Build a CompactHit for the exact-ID expand path, reassembling chunk siblings
419
+ * when the matched row belongs to a chunk set.
420
+ *
421
+ * - Unchunked rows, and any `detail="summary"` request, are returned verbatim by
422
+ * {@link buildCompactHitFromRow} — so with `RIFT_CHUNKING` off (no marked rows)
423
+ * this is provably the pre-stitching behavior.
424
+ * - For a chunked row, `detail="full"` reassembles the whole parent in
425
+ * `chunk_index` order; `detail="middle"` reassembles the matched chunk plus a
426
+ * bounded neighbor window (`MIDDLE_CHUNK_NEIGHBORS` each side). Both ranges are
427
+ * contiguous, and seams are de-overlapped so duplicated text appears once.
428
+ *
429
+ * The representative identity (id, title, source, timestamp, snippet, score)
430
+ * comes from the matched row. `content` and the TOP-LEVEL size fields are
431
+ * replaced with the stitched body actually returned, while the `expand.params`
432
+ * size fields advertise the FULL parent (what the `detail="full"` escalation
433
+ * pointer would return), plus `chunk_count` / `stitched_chunks` for observability.
434
+ */
435
+ export async function buildExpandedHit(row, sourceTable, opts) {
436
+ const detail = opts.detail ?? "full";
437
+ const marker = readChunkMarker(sourceTable, row);
438
+ if (!marker || detail === "summary") {
439
+ return buildCompactHitFromRow(row, sourceTable, opts);
440
+ }
441
+ // Fetch the whole parent set once, then stitch it twice: the full ordered set
442
+ // sizes the `detail="full"` escalation pointer (expand.params), and a bounded
443
+ // sub-window is the body we actually return for `detail="middle"`.
444
+ const allSiblings = await fetchChunkSiblings(sourceTable, row, marker);
445
+ // Expected range = the whole parent [0, count-1]; passing it lets the stitcher
446
+ // mark a missing leading/trailing section (a partially-written set) instead of
447
+ // returning a partial body that reads as the complete parent.
448
+ const fullStitched = stitchChunkContents(allSiblings, {
449
+ expectedStart: 0,
450
+ expectedEnd: marker.count - 1,
451
+ });
452
+ let returned = fullStitched;
453
+ if (detail === "middle") {
454
+ const start = Math.max(0, marker.index - MIDDLE_CHUNK_NEIGHBORS);
455
+ const end = Math.min(marker.count - 1, marker.index + MIDDLE_CHUNK_NEIGHBORS);
456
+ // Expected range = the requested window [start, end]; a sibling missing
457
+ // inside it (including its first/last index) renders as an omission marker.
458
+ // The deliberately out-of-window chunks are not "missing" and aren't marked.
459
+ returned = stitchChunkContents(allSiblings.filter((c) => c.index >= start && c.index <= end), { expectedStart: start, expectedEnd: end });
460
+ }
461
+ // Reuse all the title/source/snippet/timestamp derivation from the matched
462
+ // row, but start from "summary" so buildCompactHitFromRow doesn't also emit
463
+ // the single-chunk content — we replace content + size with the stitched body.
464
+ const hit = buildCompactHitFromRow(row, sourceTable, {
465
+ ...opts,
466
+ detail: "summary",
467
+ });
468
+ // Top-level size = the body actually returned (middle window or full parent).
469
+ // The escalation pointer keeps detail="full" (set by buildCompactHitFromRow)
470
+ // and must advertise the FULL parent body re-expanding would return — so a
471
+ // bounded `middle` hit never under-states the cost of escalating to `full`.
472
+ const returnedSize = computeContentSize(returned.text);
473
+ const fullSize = computeContentSize(fullStitched.text);
474
+ hit.content = returned.text;
475
+ hit.content_bytes = returnedSize.content_bytes;
476
+ hit.content_tokens_estimate = returnedSize.content_tokens_estimate;
477
+ hit.expand.params["content_bytes"] = fullSize.content_bytes;
478
+ hit.expand.params["content_tokens_estimate"] = fullSize.content_tokens_estimate;
479
+ hit.chunk_count = marker.count;
480
+ hit.stitched_chunks = returned.sectionsUsed;
481
+ // A returned body that omits any sibling is an incomplete view of the parent.
482
+ // `content_truncated` is the existing contract downstream telemetry/agents use
483
+ // to know the body is partial: a bounded `middle` window trips it, and so does
484
+ // a `full` reassembly missing a sibling (a partially-written set). When a small
485
+ // parent's window happens to cover every chunk, sectionsUsed === count and it
486
+ // is correctly NOT flagged.
487
+ if (returned.sectionsUsed < marker.count)
488
+ hit.content_truncated = true;
489
+ return hit;
490
+ }
258
491
  /** Derive a stable `source` string (what produced this row). */
259
492
  export function deriveSource(sourceTable, row) {
260
493
  if (sourceTable === "conversations_hot" || sourceTable === "conversations_cold") {
@@ -355,6 +588,7 @@ export function buildCompactHit(ranked, row, opts) {
355
588
  detail: "full",
356
589
  content_bytes,
357
590
  content_tokens_estimate,
591
+ ...evidencePointerParams(ranked.source_table, row),
358
592
  },
359
593
  },
360
594
  };
@@ -367,6 +601,12 @@ export function buildCompactHit(ranked, row, opts) {
367
601
  if (excerpt.truncated)
368
602
  hit.content_truncated = true;
369
603
  }
604
+ if (opts.siblingCount !== undefined && opts.siblingCount > 1) {
605
+ hit.matched_sections = opts.siblingCount;
606
+ }
607
+ if (opts.duplicateCount !== undefined && opts.duplicateCount > 1) {
608
+ hit.duplicate_count = opts.duplicateCount;
609
+ }
370
610
  return hit;
371
611
  }
372
612
  // --- Markdown rendering (MCP text channel) ---
@@ -391,7 +631,13 @@ export function renderCompactMarkdown(hits, opts = {}) {
391
631
  const score = typeof h.score === "number" ? h.score.toFixed(3) : "?";
392
632
  const method = h.retrieval_method ?? "?";
393
633
  const sizeWarning = formatSizeWarning(h.content_tokens_estimate);
394
- lines.push(`${i + 1}. **${title}** _${tier}_ · ${source} · score ${score} (${method})${sizeWarning ? ` · ${sizeWarning}` : ""}`);
634
+ const sections = typeof h.matched_sections === "number" && h.matched_sections > 1
635
+ ? ` · +${h.matched_sections - 1} more section${h.matched_sections - 1 === 1 ? "" : "s"}`
636
+ : "";
637
+ const duplicates = typeof h.duplicate_count === "number" && h.duplicate_count > 1
638
+ ? ` · +${h.duplicate_count - 1} duplicate capture${h.duplicate_count - 1 === 1 ? "" : "s"}`
639
+ : "";
640
+ lines.push(`${i + 1}. **${title}** — _${tier}_ · ${source} · score ${score} (${method})${sizeWarning ? ` · ${sizeWarning}` : ""}${sections}${duplicates}`);
395
641
  if (h.snippet)
396
642
  lines.push(` ${escapeMd(h.snippet)}`);
397
643
  // Render the expand pointer with the *actual* params object the route
@@ -1 +1 @@
1
- {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,13 @@ import { rerank } from "./reranker.js";
3
3
  import { getTable } from "../storage/tables.js";
4
4
  import { resolveCwdRoot } from "./cwd.js";
5
5
  import { computeContentSize } from "./compact.js";
6
+ import { groupByParent, rankedKey } from "./group-by-parent.js";
7
+ import { collapseConversationDuplicates, convDedupEnabled, poolHasChunkMarkers, } from "./conversation-dedup.js";
8
+ import { parentKeyForRow } from "../ingestion/chunk-meta.js";
9
+ import { inFilter } from "../storage/filter.js";
6
10
  import { classifyClaimType, classifyEvidenceIntent, partitionEvidence, } from "./current-truth.js";
7
- import { probeGitStates } from "./git-state.js";
11
+ import { probeGitStates, resolveRepoRoot, } from "./git-state.js";
12
+ import { buildCanonicalFileEvidence, canonicalFilesEnabled, } from "./canonical-files.js";
8
13
  // --- Locked caps ---
9
14
  export const ITEM_TEXT_MAX = 200;
10
15
  export const SNIPPET_MAX = 200;
@@ -74,8 +79,8 @@ export async function buildContextPack(opts) {
74
79
  ]);
75
80
  const degraded = convRes.degraded || docRes.degraded;
76
81
  const degradedReason = convRes.degraded_reason ?? docRes.degraded_reason;
77
- const convRanked = rerank(toRerankInput(convRes.candidates)).slice(0, fetchK);
78
- const docRanked = rerank(toRerankInput(docRes.candidates.filter((c) => c.source_table === "structured_docs" ||
82
+ let convRanked = rerank(toRerankInput(convRes.candidates)).slice(0, fetchK);
83
+ let docRanked = rerank(toRerankInput(docRes.candidates.filter((c) => c.source_table === "structured_docs" ||
79
84
  c.source_table === "structured_docs_local"))).slice(0, fetchK);
80
85
  // Fetch raw rows for the top ranked results so we can pull `decisions`,
81
86
  // `content`, `metadata.title`, `source_path`, etc.
@@ -83,6 +88,25 @@ export async function buildContextPack(opts) {
83
88
  fetchRowsById(convRanked),
84
89
  fetchRowsById(docRanked),
85
90
  ]);
91
+ // Collapse chunk siblings so one long conversation/document contributes a
92
+ // single card downstream (decisions / examples / rules / evidence) instead of
93
+ // one per chunk. No-op for unchunked/legacy rows (parentKeyForRow → null).
94
+ const parentKeyOf = (rows) => (r) => {
95
+ const row = rows.get(rankedKey(r));
96
+ return row ? parentKeyForRow(r.source_table, row) : null;
97
+ };
98
+ const convGrouped = groupByParent(convRanked, parentKeyOf(convRows));
99
+ convRanked = convGrouped.ranked;
100
+ docRanked = groupByParent(docRanked, parentKeyOf(docRows)).ranked;
101
+ // Collapse near-duplicate conversation captures (same task re-captured across
102
+ // sessions = distinct rows groupByParent can't merge) so one card per topic
103
+ // reaches decisions/examples/evidence instead of N redundant copies.
104
+ // Conversation rows only; docs pass through. Flag-gated (RIFT_CONV_DEDUP),
105
+ // provable no-op when off. Skipped when the conversation pool has chunk markers
106
+ // (best-chunk text would false-merge distinct conversations — see conversation-dedup).
107
+ if (convDedupEnabled() && !poolHasChunkMarkers(convGrouped)) {
108
+ convRanked = collapseConversationDuplicates(convRanked).ranked;
109
+ }
86
110
  // Drop any doc candidates whose source_path points into engine-internal or
87
111
  // build-artifact directories. These rows are not project rules — they are
88
112
  // raw conversation snapshots, embedding cache files, quarantine drops,
@@ -90,7 +114,7 @@ export async function buildContextPack(opts) {
90
114
  // real project-rule files (CLAUDE.md / AGENTS.md / PROJECT_STATE.md /
91
115
  // TODO.md) out of the `rules` and `constraints` buckets. Conversation
92
116
  // content is still reachable via `convRanked`.
93
- const docRankedClean = docRanked.filter((r) => !shouldExcludeDocFromRules(docRows.get(r.id)?.["source_path"]));
117
+ const docRankedClean = docRanked.filter((r) => !shouldExcludeDocFromRules(docRows.get(rankedKey(r))?.["source_path"]));
94
118
  // Constraints layer an extra filter on top via the contract helper:
95
119
  // one-shot agent prompts (`*-prompt.md`) routinely carry "Hard
96
120
  // Constraints" sections that match `extractConstraintLines`'s marker
@@ -100,7 +124,7 @@ export async function buildContextPack(opts) {
100
124
  // `shouldExcludeDocFromConstraints` here — rather than composing the
101
125
  // two helpers inline — keeps the constraint-exclusion contract in one
102
126
  // place, so any future per-bucket exclusion is picked up automatically.
103
- const docRankedForConstraints = docRanked.filter((r) => !shouldExcludeDocFromConstraints(docRows.get(r.id)?.["source_path"]));
127
+ const docRankedForConstraints = docRanked.filter((r) => !shouldExcludeDocFromConstraints(docRows.get(rankedKey(r))?.["source_path"]));
104
128
  // Re-sort the conversation candidates by query relevance before
105
129
  // extracting `decisions` and `examples`. The global rerank() composite
106
130
  // weights S_sim at only 55% — quality/tier/freshness can pull a
@@ -130,7 +154,7 @@ export async function buildContextPack(opts) {
130
154
  const gitStateInputs = [];
131
155
  if (opts.cwd) {
132
156
  for (const r of docRankedClean) {
133
- const row = docRows.get(r.id);
157
+ const row = docRows.get(rankedKey(r));
134
158
  const sourcePath = row?.["source_path"] || undefined;
135
159
  if (!sourcePath)
136
160
  continue;
@@ -144,11 +168,11 @@ export async function buildContextPack(opts) {
144
168
  const evidenceInputs = [
145
169
  ...convByRelevance.map((r) => ({
146
170
  ranked: r,
147
- row: convRows.get(r.id),
171
+ row: convRows.get(rankedKey(r)),
148
172
  kind: "conversation",
149
173
  })),
150
174
  ...docRankedClean.map((r) => {
151
- const row = docRows.get(r.id);
175
+ const row = docRows.get(rankedKey(r));
152
176
  const sourcePath = row?.["source_path"] || undefined;
153
177
  const gs = sourcePath ? gitStateBySourcePath.get(sourcePath) : undefined;
154
178
  const input = {
@@ -161,6 +185,30 @@ export async function buildContextPack(opts) {
161
185
  return input;
162
186
  }),
163
187
  ];
188
+ // Current-decision source coverage (read-only canonical-file lane, flag-gated,
189
+ // default OFF). Trackers aren't indexed, so a query like "what did we decide
190
+ // about pricing" can't retrieve PROJECT_STATE.md / TODO.md — read them live and
191
+ // prepend their query-matching sections as tracker-tier evidence. The
192
+ // partitioner below is UNCHANGED and decides placement BY INTENT: tracker docs
193
+ // lead `current_truth` for current_truth/blended, and stay `current_truth`
194
+ // background under reasoning_archive — so we run regardless of intent (note:
195
+ // "what did we decide …" itself classifies as reasoning_archive, the exact case
196
+ // this lane must cover). Gated only on the flag + a project root to locate the
197
+ // files; a non-matching query yields no inputs, so this is a no-op when off or
198
+ // when nothing matches.
199
+ if (canonicalFilesEnabled() && opts.cwd) {
200
+ // opts.cwd is the agent's working dir, often a SUBDIR (src/, tests/). The
201
+ // canonical files live at the repo root, so resolve the git top-level first
202
+ // (same resolution probeGitStates does) — otherwise we'd look in the subdir,
203
+ // find nothing, and silently no-op. Falls back to cwd outside a git repo.
204
+ const repoRoot = resolveRepoRoot(opts.cwd);
205
+ const canonical = buildCanonicalFileEvidence({
206
+ projectRoot: repoRoot,
207
+ query: opts.task,
208
+ });
209
+ if (canonical.length > 0)
210
+ evidenceInputs.unshift(...canonical);
211
+ }
164
212
  const partition = partitionEvidence(evidenceInputs, {
165
213
  intent,
166
214
  claimType,
@@ -262,7 +310,7 @@ function extractDecisions(ranked, rows, cap) {
262
310
  for (const r of ranked) {
263
311
  if (out.length >= cap)
264
312
  break;
265
- const row = rows.get(r.id);
313
+ const row = rows.get(rankedKey(r));
266
314
  if (!row)
267
315
  continue;
268
316
  const raw = row["decisions"];
@@ -294,7 +342,7 @@ function buildExamples(ranked, rows, cap) {
294
342
  for (const r of ranked) {
295
343
  if (out.length >= cap)
296
344
  break;
297
- const row = rows.get(r.id);
345
+ const row = rows.get(rankedKey(r));
298
346
  const fullContent = row?.["content"] || r.content || "";
299
347
  const summary = truncate(collapseWhitespace(row?.["summary"] || fullContent), SNIPPET_MAX);
300
348
  if (!summary)
@@ -336,7 +384,7 @@ function buildRules(ranked, rows, cap) {
336
384
  for (const r of ranked) {
337
385
  if (out.length >= cap)
338
386
  break;
339
- const row = rows.get(r.id);
387
+ const row = rows.get(rankedKey(r));
340
388
  const content = row?.["content"] || r.content || "";
341
389
  const snippet = truncate(collapseWhitespace(content), SNIPPET_MAX);
342
390
  if (!snippet)
@@ -381,7 +429,7 @@ function extractConstraints(ranked, rows, cap) {
381
429
  for (const r of ranked) {
382
430
  if (out.length >= cap)
383
431
  break;
384
- const row = rows.get(r.id);
432
+ const row = rows.get(rankedKey(r));
385
433
  const content = row?.["content"] || r.content;
386
434
  if (!content)
387
435
  continue;
@@ -661,18 +709,20 @@ async function fetchRowsById(ranked) {
661
709
  arr.push(r.id);
662
710
  byTable.set(r.source_table, arr);
663
711
  }
712
+ // Keyed by rankedKey — (source_table, id), not bare id — so a doc id present
713
+ // in both the cloud and local tables can't have one row overwrite the other
714
+ // and misattribute evidence. Look up via get(rankedKey(r)).
664
715
  const out = new Map();
665
716
  for (const [tableName, ids] of byTable) {
666
717
  if (ids.length === 0)
667
718
  continue;
668
- const quoted = ids.map((i) => `'${i.replace(/'/g, "''")}'`).join(",");
669
719
  const rows = (await getTable(tableName)
670
720
  .query()
671
- .where(`id IN (${quoted})`)
721
+ .where(inFilter("id", ids, { validateAsRowId: true }))
672
722
  .limit(ids.length)
673
723
  .toArray());
674
724
  for (const row of rows) {
675
- out.set(row["id"], row);
725
+ out.set(rankedKey({ source_table: tableName, id: row["id"] }), row);
676
726
  }
677
727
  }
678
728
  return out;