@remnic/core 9.69.86 → 9.69.88

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 (513) hide show
  1. package/dist/access-admin-ops-surface.js +74 -67
  2. package/dist/access-authorization-probe.js +75 -68
  3. package/dist/access-boundary.js +74 -67
  4. package/dist/access-citation-namespace.js +2 -2
  5. package/dist/access-cli.js +158 -151
  6. package/dist/access-cli.js.map +1 -1
  7. package/dist/access-extraction-force-flush.d.ts.map +1 -1
  8. package/dist/access-extraction-force-flush.js +74 -67
  9. package/dist/access-http-briefing.js +75 -68
  10. package/dist/access-http-offline-stream.d.ts.map +1 -1
  11. package/dist/access-http-offline-stream.js +1 -1
  12. package/dist/access-http-query.js +76 -69
  13. package/dist/access-http.js +100 -93
  14. package/dist/access-identity-continuity-surface.js +74 -67
  15. package/dist/access-lcm-surface.js +74 -67
  16. package/dist/access-mcp-output-schemas.d.ts.map +1 -1
  17. package/dist/access-mcp-output-schemas.js +1 -1
  18. package/dist/access-mcp.d.ts.map +1 -1
  19. package/dist/access-mcp.js +89 -82
  20. package/dist/access-namespace-preflight.js +74 -67
  21. package/dist/access-observe-write-category.js +19 -13
  22. package/dist/access-observe-write-surface.js +74 -67
  23. package/dist/access-offline-manifest.js +15 -10
  24. package/dist/access-operations-batch.js +78 -71
  25. package/dist/access-operations.js +85 -78
  26. package/dist/access-recall-concurrency.js +74 -67
  27. package/dist/access-recall-diagnostics.js +4 -4
  28. package/dist/access-recall-response.js +74 -67
  29. package/dist/access-recall-surface.js +74 -67
  30. package/dist/access-schema.js +15 -7
  31. package/dist/access-service-helpers.d.ts +1 -0
  32. package/dist/access-service-helpers.d.ts.map +1 -1
  33. package/dist/access-service-helpers.js +1 -1
  34. package/dist/access-service.d.ts.map +1 -1
  35. package/dist/access-service.js +74 -67
  36. package/dist/access-surface-catalog.js +76 -69
  37. package/dist/access-surface-catalog.js.map +1 -1
  38. package/dist/active-recall.js +34 -28
  39. package/dist/active-recall.js.map +1 -1
  40. package/dist/adapters/index.js +4 -4
  41. package/dist/adapters/registry.js +2 -2
  42. package/dist/{auto-sync-WEUDMXUW.js → auto-sync-U5N3CB5Y.js} +10 -10
  43. package/dist/background-generation.js +2 -2
  44. package/dist/briefing.js +18 -18
  45. package/dist/buffer.js +9 -8
  46. package/dist/calibration.js +2 -2
  47. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  48. package/dist/{capsule-merge-3MNURAQ3.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  49. package/dist/causal-behavior.js +2 -2
  50. package/dist/causal-chain.js +2 -2
  51. package/dist/causal-consolidation.js +21 -21
  52. package/dist/causal-retrieval.js +2 -2
  53. package/dist/causal-trajectory-graph.js +3 -3
  54. package/dist/causal-trajectory.js +1 -1
  55. package/dist/{chunk-JE334SIA.js → chunk-22DYJLFN.js} +2 -2
  56. package/dist/{chunk-DGAWEJVI.js → chunk-2DLWLNO4.js} +3 -3
  57. package/dist/{chunk-J3IWHCMF.js → chunk-2DT7PIDZ.js} +3 -3
  58. package/dist/{chunk-NKFLHW7J.js → chunk-2NAD4YCI.js} +2 -2
  59. package/dist/{chunk-SV72F4DS.js → chunk-2WLMWP2T.js} +2 -2
  60. package/dist/{chunk-IVH7INFM.js → chunk-3O5BB45T.js} +7 -7
  61. package/dist/{chunk-RDEUG2M2.js → chunk-3SGTV7RD.js} +6 -6
  62. package/dist/{chunk-QOPB6KE3.js → chunk-3TB2XQ3C.js} +2 -2
  63. package/dist/{chunk-C7JAUNFC.js → chunk-4KN2JLQV.js} +2 -2
  64. package/dist/{chunk-TIQZNDZ5.js → chunk-4MP7XR5J.js} +2 -2
  65. package/dist/chunk-4NSLQ7EU.js +137 -0
  66. package/dist/chunk-4NSLQ7EU.js.map +1 -0
  67. package/dist/{chunk-7DE2NOON.js → chunk-4O4XCBOS.js} +3 -3
  68. package/dist/{chunk-SLEAJ67D.js → chunk-4OQET73E.js} +4 -4
  69. package/dist/{chunk-Q3THVX75.js → chunk-4RL3JOB3.js} +2 -2
  70. package/dist/{chunk-GDYU6VF4.js → chunk-5AYUHSAU.js} +2 -2
  71. package/dist/{chunk-B47OHVFT.js → chunk-5E6RYRYW.js} +7 -7
  72. package/dist/{chunk-2U3R3DDH.js → chunk-5FAGCOZD.js} +9 -9
  73. package/dist/{chunk-CRKWSSS4.js → chunk-5MNUBT7T.js} +2 -2
  74. package/dist/{chunk-CK5KOVHW.js → chunk-5R627MYY.js} +3 -2
  75. package/dist/{chunk-CK5KOVHW.js.map → chunk-5R627MYY.js.map} +1 -1
  76. package/dist/chunk-5X4MXNEU.js +64 -0
  77. package/dist/chunk-5X4MXNEU.js.map +1 -0
  78. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  79. package/dist/{chunk-7G6WUOLB.js → chunk-66DKTOBY.js} +2 -2
  80. package/dist/{chunk-AZ2X5LNA.js → chunk-6LYAEM54.js} +2 -2
  81. package/dist/{chunk-DUJYRVUD.js → chunk-6O2VUWV6.js} +3 -3
  82. package/dist/{chunk-IMAP236M.js → chunk-6UQFJULG.js} +2 -2
  83. package/dist/chunk-75PT4N7Q.js +75 -0
  84. package/dist/chunk-75PT4N7Q.js.map +1 -0
  85. package/dist/{chunk-2I6VHX6Q.js → chunk-76M5OK7V.js} +2 -2
  86. package/dist/{chunk-OEBLZZKK.js → chunk-7XG7KMIW.js} +2 -2
  87. package/dist/{chunk-FYAU4S6E.js → chunk-A4VSOUCB.js} +3 -3
  88. package/dist/{chunk-GEX5NI36.js → chunk-AE5U5NMS.js} +2 -2
  89. package/dist/{chunk-UNJOB4DY.js → chunk-AEHVZY3X.js} +2 -2
  90. package/dist/{chunk-ML2MVAEZ.js → chunk-AEU4EQGV.js} +1 -1
  91. package/dist/{chunk-3SG4FGDV.js → chunk-AWD36R4D.js} +5 -2
  92. package/dist/chunk-AWD36R4D.js.map +1 -0
  93. package/dist/{chunk-JVY556FW.js → chunk-AWG3TIAY.js} +2 -2
  94. package/dist/{chunk-JX6USXZR.js → chunk-AXC4WSF3.js} +4 -4
  95. package/dist/{chunk-BOUFVFV2.js → chunk-AZSGSRIM.js} +2 -2
  96. package/dist/{chunk-VZBW6CDG.js → chunk-B3O3IRZN.js} +1 -1
  97. package/dist/{chunk-4V44AA7O.js → chunk-BGI4NUAO.js} +2 -2
  98. package/dist/{chunk-BNPLDVM6.js → chunk-BJVO4H5C.js} +2 -2
  99. package/dist/{chunk-S42HZILI.js → chunk-BLVR4WYU.js} +3 -3
  100. package/dist/{chunk-JXMECXMF.js → chunk-BOZJD5PK.js} +2 -2
  101. package/dist/{chunk-6DTJBTHL.js → chunk-BUQKSQXL.js} +15 -3
  102. package/dist/chunk-BUQKSQXL.js.map +1 -0
  103. package/dist/{chunk-OWHERGF2.js → chunk-BXLOS5AJ.js} +2 -2
  104. package/dist/{chunk-EVBI7S4J.js → chunk-C6U57KG4.js} +4 -4
  105. package/dist/{chunk-RB776UH3.js → chunk-C7V3KPKJ.js} +235 -93
  106. package/dist/chunk-C7V3KPKJ.js.map +1 -0
  107. package/dist/{chunk-T4BE5KJM.js → chunk-C7ZDKWPS.js} +4 -4
  108. package/dist/{chunk-HKFJ3PF3.js → chunk-CRXRZA3G.js} +2 -2
  109. package/dist/{chunk-NMBX4D7P.js → chunk-CZJA2EQE.js} +2 -2
  110. package/dist/{chunk-BJX3VQWZ.js → chunk-D5BSQR63.js} +2 -2
  111. package/dist/{chunk-MFZACYZ6.js → chunk-DGS34QSY.js} +2 -2
  112. package/dist/{chunk-UVYI6VIX.js → chunk-DQEMWVMT.js} +1 -1
  113. package/dist/{chunk-DQISIT63.js → chunk-DZ42MDZE.js} +3 -3
  114. package/dist/{chunk-5ELENZTA.js → chunk-EDIH6X2P.js} +2 -2
  115. package/dist/{chunk-3BTFBQLO.js → chunk-EFHNFTWB.js} +49 -3
  116. package/dist/chunk-EFHNFTWB.js.map +1 -0
  117. package/dist/{chunk-C3QXITIP.js → chunk-EQUD7FP4.js} +2 -2
  118. package/dist/chunk-ETUZFFPU.js +218 -0
  119. package/dist/chunk-ETUZFFPU.js.map +1 -0
  120. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  121. package/dist/{chunk-IA3X2Y4K.js → chunk-FJLQXMTU.js} +3 -3
  122. package/dist/{chunk-TY446V34.js → chunk-FKD656D2.js} +2 -2
  123. package/dist/{chunk-CLXTDOKV.js → chunk-FUNBJQYR.js} +2 -2
  124. package/dist/{chunk-CLSYE5OZ.js → chunk-G2STTRYB.js} +2 -2
  125. package/dist/{chunk-SQDKX4RW.js → chunk-GWM6T5EQ.js} +2 -2
  126. package/dist/{chunk-AXDOF4VI.js → chunk-GZDTVYK2.js} +2 -2
  127. package/dist/{chunk-55FCXCXJ.js → chunk-H56VY4BY.js} +7 -7
  128. package/dist/{chunk-OM5BIPBR.js → chunk-H5BJWPUI.js} +4 -4
  129. package/dist/{chunk-7QK5TUTW.js → chunk-HLB7GKGG.js} +2 -2
  130. package/dist/{chunk-CHDGJJV6.js → chunk-HWLIMQE2.js} +2 -2
  131. package/dist/{chunk-QB75LKQQ.js → chunk-IOSZHHJC.js} +34 -15
  132. package/dist/chunk-IOSZHHJC.js.map +1 -0
  133. package/dist/{chunk-NAFPHFDM.js → chunk-JNLEJE4A.js} +2 -2
  134. package/dist/{chunk-7UUKRS3J.js → chunk-JVPWRNHA.js} +3 -3
  135. package/dist/{chunk-6ET2VII7.js → chunk-JYG2334B.js} +2 -2
  136. package/dist/chunk-K6T33R4Q.js +535 -0
  137. package/dist/chunk-K6T33R4Q.js.map +1 -0
  138. package/dist/{chunk-2QG4SLZI.js → chunk-KF7PQ7G2.js} +2 -2
  139. package/dist/{chunk-WIKO4SCR.js → chunk-LHRQBMJN.js} +2 -2
  140. package/dist/{chunk-IFCKHPY4.js → chunk-LO4UKPKX.js} +2 -2
  141. package/dist/{chunk-TEV2JGU5.js → chunk-LU7E2MXE.js} +19 -19
  142. package/dist/{chunk-RJLV4BKR.js → chunk-LV5H6FTN.js} +2 -2
  143. package/dist/{chunk-IBGEHKQ6.js → chunk-LW3HKRL7.js} +3 -3
  144. package/dist/{chunk-3XQYM4RE.js → chunk-M6C7SOR6.js} +2 -2
  145. package/dist/{chunk-JN72EPOE.js → chunk-MAAL6OZV.js} +7 -7
  146. package/dist/chunk-MAAL6OZV.js.map +1 -0
  147. package/dist/{chunk-MY2PLXSM.js → chunk-MCTM4YPL.js} +2 -1
  148. package/dist/{chunk-MY2PLXSM.js.map → chunk-MCTM4YPL.js.map} +1 -1
  149. package/dist/{chunk-T4QGUXCV.js → chunk-MXCAJKMA.js} +9 -9
  150. package/dist/{chunk-BMYZTZ5D.js → chunk-MY7B3HYC.js} +2 -2
  151. package/dist/{chunk-NB3LRY4T.js → chunk-N4PYB235.js} +2 -2
  152. package/dist/{chunk-S3YM4SZQ.js → chunk-N7QV3CMX.js} +2 -2
  153. package/dist/{chunk-3GN2PEOT.js → chunk-NYKIUQL6.js} +2 -2
  154. package/dist/{chunk-WQZZDN5M.js → chunk-OCFXVDBZ.js} +322 -376
  155. package/dist/chunk-OCFXVDBZ.js.map +1 -0
  156. package/dist/{chunk-L2LBMKSI.js → chunk-OK52IY3W.js} +10 -10
  157. package/dist/{chunk-WB2I2EQK.js → chunk-P2ODTYOF.js} +2 -2
  158. package/dist/{chunk-RIEX7NOZ.js → chunk-PEBHPCX2.js} +2 -2
  159. package/dist/{chunk-VYCOJKSX.js → chunk-PO7NXNGC.js} +2 -2
  160. package/dist/{chunk-G6SVZWPB.js → chunk-PZX3AQLF.js} +44 -1
  161. package/dist/chunk-PZX3AQLF.js.map +1 -0
  162. package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
  163. package/dist/{chunk-EU3N5MK3.js → chunk-QAW55ZHJ.js} +4 -4
  164. package/dist/{chunk-SVZWVZ7E.js → chunk-QB57WIS6.js} +101 -93
  165. package/dist/chunk-QB57WIS6.js.map +1 -0
  166. package/dist/{chunk-I4G4UWQA.js → chunk-QI2E6ISQ.js} +1 -1
  167. package/dist/{chunk-CK5U7JGH.js → chunk-QI7K7BZ5.js} +2 -2
  168. package/dist/{chunk-VTPASHTO.js → chunk-R3X2T2LP.js} +3 -3
  169. package/dist/{chunk-I53NAHZ4.js → chunk-RBITPCMK.js} +10 -9
  170. package/dist/chunk-RBITPCMK.js.map +1 -0
  171. package/dist/{chunk-EJPF6XDQ.js → chunk-RDJ6C7NZ.js} +3 -3
  172. package/dist/{chunk-C2WWQ4OR.js → chunk-RMMA44HE.js} +1 -1
  173. package/dist/chunk-RMMA44HE.js.map +1 -0
  174. package/dist/{chunk-QC56VZXC.js → chunk-S2GE2K36.js} +85 -82
  175. package/dist/{chunk-QC56VZXC.js.map → chunk-S2GE2K36.js.map} +1 -1
  176. package/dist/{chunk-2UPTRDGM.js → chunk-SCXURCVT.js} +3 -3
  177. package/dist/{chunk-S55WTPFJ.js → chunk-STEOT4DI.js} +20 -20
  178. package/dist/chunk-STEOT4DI.js.map +1 -0
  179. package/dist/{chunk-N3MNDVJO.js → chunk-SWBC3UER.js} +2 -2
  180. package/dist/{chunk-ZTHGFTMW.js → chunk-TKC5LZ43.js} +2 -2
  181. package/dist/chunk-TYT4TEQV.js +45 -0
  182. package/dist/chunk-TYT4TEQV.js.map +1 -0
  183. package/dist/{chunk-YRLHEEQT.js → chunk-U6VC6RP3.js} +2 -2
  184. package/dist/chunk-UCPGOUDZ.js +726 -0
  185. package/dist/chunk-UCPGOUDZ.js.map +1 -0
  186. package/dist/{chunk-MOQPEFLN.js → chunk-UP75KL3L.js} +2 -2
  187. package/dist/{chunk-D5F7TKMH.js → chunk-V4JZCTMK.js} +2 -2
  188. package/dist/{chunk-NAYBHNGN.js → chunk-VALKBYBN.js} +2 -2
  189. package/dist/{chunk-BUKK5SWA.js → chunk-VDX2J7OX.js} +2 -2
  190. package/dist/{chunk-H36X4NRH.js → chunk-VVX5PZFS.js} +2 -2
  191. package/dist/{chunk-RCQKAOOB.js → chunk-W3XXFPRI.js} +52 -52
  192. package/dist/{chunk-W75BBBSY.js → chunk-WKY7N3L7.js} +11 -11
  193. package/dist/{chunk-GZAGLCQH.js → chunk-X5SHE2O3.js} +3 -3
  194. package/dist/{chunk-OAOBL6OY.js → chunk-XOV7NRY5.js} +5 -5
  195. package/dist/{chunk-FZVROZKC.js → chunk-XVZA6VXC.js} +4 -4
  196. package/dist/{chunk-RGMVMVMF.js → chunk-YBA52OKG.js} +2 -1
  197. package/dist/chunk-YBA52OKG.js.map +1 -0
  198. package/dist/{chunk-IP5VLSLO.js → chunk-YJ7MW627.js} +2 -2
  199. package/dist/{chunk-HS75MCQF.js → chunk-YRULQW5J.js} +2 -2
  200. package/dist/{chunk-DINRT75P.js → chunk-YSBL7VPO.js} +2 -2
  201. package/dist/{chunk-QWUJWBZ5.js → chunk-Z3O53WZR.js} +2 -2
  202. package/dist/{chunk-KERNN6BC.js → chunk-Z5LP6ILP.js} +2 -2
  203. package/dist/{chunk-5FNZ3G6X.js → chunk-Z6EZCN6Z.js} +5 -5
  204. package/dist/chunk-ZJP66Q4I.js +48 -0
  205. package/dist/chunk-ZJP66Q4I.js.map +1 -0
  206. package/dist/{chunk-JS3S2HVG.js → chunk-ZZZ4I455.js} +2 -2
  207. package/dist/cli.js +122 -115
  208. package/dist/coding/export-okf-codegraph.js +19 -19
  209. package/dist/coding/pre-action-gate.js +2 -2
  210. package/dist/compounding/engine.js +19 -19
  211. package/dist/config.js +34 -28
  212. package/dist/connectors/codex-materialize-runner.js +18 -18
  213. package/dist/connectors/index.js +18 -18
  214. package/dist/console/state.d.ts +30 -0
  215. package/dist/console/state.d.ts.map +1 -1
  216. package/dist/contradiction/index.js +7 -7
  217. package/dist/{contradiction-scan-5EJYRKD3.js → contradiction-scan-TAGMOUQ2.js} +3 -3
  218. package/dist/convergence-refresh.js +20 -20
  219. package/dist/corpus-watermark.js +20 -20
  220. package/dist/correction/correction-access-wiring.d.ts.map +1 -1
  221. package/dist/dashboard-runtime.js +2 -2
  222. package/dist/deep-recall-http-glue.js +15 -8
  223. package/dist/deep-recall-policy-llm.js +3 -3
  224. package/dist/deep-recall.js +2 -2
  225. package/dist/embedding-fallback.d.ts +41 -31
  226. package/dist/embedding-fallback.d.ts.map +1 -1
  227. package/dist/embedding-fallback.js +9 -1
  228. package/dist/embedding-generation-lock.d.ts +49 -0
  229. package/dist/embedding-generation-lock.d.ts.map +1 -0
  230. package/dist/embedding-generation-lock.js +19 -0
  231. package/dist/embedding-index-storage.d.ts +276 -0
  232. package/dist/embedding-index-storage.d.ts.map +1 -0
  233. package/dist/embedding-index-storage.js +28 -0
  234. package/dist/entity-retrieval.js +19 -19
  235. package/dist/event-order-recall.js +3 -3
  236. package/dist/explicit-capture.js +6 -6
  237. package/dist/external-wiki-access.js +75 -68
  238. package/dist/extraction-faithfulness.js +3 -3
  239. package/dist/extraction-judge.js +3 -3
  240. package/dist/extraction-liveness.d.ts +9 -0
  241. package/dist/extraction-liveness.d.ts.map +1 -1
  242. package/dist/extraction-liveness.js +2 -1
  243. package/dist/extraction-llm-health.d.ts +32 -0
  244. package/dist/extraction-llm-health.d.ts.map +1 -0
  245. package/dist/extraction-llm-health.js +17 -0
  246. package/dist/extraction-span-config.js +3 -2
  247. package/dist/extraction-span-materialize.js +2 -2
  248. package/dist/extraction.js +29 -28
  249. package/dist/fallback-llm.js +2 -2
  250. package/dist/{first-start-migration-GAT7G733.js → first-start-migration-7OATHJKB.js} +4 -4
  251. package/dist/{graph-edge-decay-PVKDKLQK.js → graph-edge-decay-MKIRZ762.js} +6 -6
  252. package/dist/graph-jsonl.js +4 -4
  253. package/dist/graph-snapshot.js +4 -4
  254. package/dist/graph.js +5 -5
  255. package/dist/harmonic-retrieval.js +1 -1
  256. package/dist/index.d.ts +2 -0
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +237 -206
  259. package/dist/json-extract.d.ts.map +1 -1
  260. package/dist/json-extract.js +1 -1
  261. package/dist/lcm/engine.js +2 -2
  262. package/dist/lcm/index.js +5 -5
  263. package/dist/local-llm.d.ts.map +1 -1
  264. package/dist/local-llm.js +2 -2
  265. package/dist/location/index.js +21 -21
  266. package/dist/maintenance/memory-governance.js +18 -18
  267. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +18 -18
  268. package/dist/maintenance/rebuild-memory-projection.js +19 -19
  269. package/dist/memory-browse-operations.js +75 -68
  270. package/dist/memory-browse.js +3 -3
  271. package/dist/memory-subject.js +3 -3
  272. package/dist/namespaces/migrate.js +19 -19
  273. package/dist/namespaces/search.js +4 -4
  274. package/dist/namespaces/storage.js +18 -18
  275. package/dist/offline-sync-embedding-generation.d.ts +207 -0
  276. package/dist/offline-sync-embedding-generation.d.ts.map +1 -0
  277. package/dist/offline-sync-embedding-generation.js +42 -0
  278. package/dist/offline-sync-embedding-generation.js.map +1 -0
  279. package/dist/offline-sync-exclude-globs.d.ts +15 -0
  280. package/dist/offline-sync-exclude-globs.d.ts.map +1 -1
  281. package/dist/offline-sync-exclude-globs.js +11 -3
  282. package/dist/offline-sync-file-io.d.ts +7 -0
  283. package/dist/offline-sync-file-io.d.ts.map +1 -1
  284. package/dist/offline-sync-file-io.js +14 -2
  285. package/dist/offline-sync-impression-drain.js +3 -3
  286. package/dist/offline-sync-runtime-state.d.ts +5 -0
  287. package/dist/offline-sync-runtime-state.d.ts.map +1 -0
  288. package/dist/offline-sync-runtime-state.js +14 -0
  289. package/dist/offline-sync-runtime-state.js.map +1 -0
  290. package/dist/offline-sync-snapshot-stream.d.ts +26 -0
  291. package/dist/offline-sync-snapshot-stream.d.ts.map +1 -0
  292. package/dist/offline-sync-snapshot-stream.js +28 -0
  293. package/dist/offline-sync-snapshot-stream.js.map +1 -0
  294. package/dist/offline-sync-upload-staging.d.ts +34 -0
  295. package/dist/offline-sync-upload-staging.d.ts.map +1 -0
  296. package/dist/offline-sync-upload-staging.js +26 -0
  297. package/dist/offline-sync-upload-staging.js.map +1 -0
  298. package/dist/offline-sync.d.ts +46 -27
  299. package/dist/offline-sync.d.ts.map +1 -1
  300. package/dist/offline-sync.js +21 -8
  301. package/dist/operator-doctor-corpus.js +21 -21
  302. package/dist/operator-toolkit.js +46 -40
  303. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  304. package/dist/orchestration/maintenance.js +30 -30
  305. package/dist/orchestrator.d.ts.map +1 -1
  306. package/dist/orchestrator.js +159 -152
  307. package/dist/recall-navigation-operations.js +75 -68
  308. package/dist/recall-navigation.js +74 -67
  309. package/dist/recall-planner-llm.js +2 -2
  310. package/dist/recall-state-view-admission.js +3 -3
  311. package/dist/recall-why-service.js +6 -6
  312. package/dist/recall-why.js +3 -3
  313. package/dist/reconcile/manifest.js +4 -4
  314. package/dist/{resolution-UYJU5JUA.js → resolution-K4A3VPKZ.js} +8 -8
  315. package/dist/resolution-K4A3VPKZ.js.map +1 -0
  316. package/dist/resume-bundles.js +35 -29
  317. package/dist/salvage-envelope.js +5 -5
  318. package/dist/search/factory.js +3 -3
  319. package/dist/search/index.js +7 -7
  320. package/dist/secure-store/index.js +2 -2
  321. package/dist/secure-store/secure-fs.d.ts +14 -1
  322. package/dist/secure-store/secure-fs.d.ts.map +1 -1
  323. package/dist/semantic-consolidation.js +19 -19
  324. package/dist/semantic-rule-promotion.js +18 -18
  325. package/dist/semantic-rule-verifier.js +18 -18
  326. package/dist/source-agent-qualifier.js +23 -22
  327. package/dist/standup/build.js +18 -18
  328. package/dist/{state-ITXJKXRE.js → state-JB47KHYV.js} +2 -2
  329. package/dist/state-JB47KHYV.js.map +1 -0
  330. package/dist/storage.d.ts +9 -3
  331. package/dist/storage.d.ts.map +1 -1
  332. package/dist/storage.js +17 -17
  333. package/dist/subject-config.js +4 -4
  334. package/dist/summarizer.js +6 -6
  335. package/dist/support-passport/index.js +77 -70
  336. package/dist/{trace-ZFVRH4GO.js → trace-LXXCMZJA.js} +3 -3
  337. package/dist/transfer/backup.js +2 -2
  338. package/dist/transfer/capsule-export.js +2 -2
  339. package/dist/transfer/capsule-import.js +3 -3
  340. package/dist/transfer/export-okf.js +19 -19
  341. package/dist/{tui-55UJMJX7.js → tui-2Z5WOV7L.js} +3 -3
  342. package/dist/tui-2Z5WOV7L.js.map +1 -0
  343. package/dist/verified-recall.js +18 -18
  344. package/dist/who-knows-cli.js +19 -19
  345. package/dist/who-knows.js +18 -18
  346. package/dist/write-envelope.js +4 -4
  347. package/package.json +2 -2
  348. package/src/access-extraction-force-flush.ts +15 -7
  349. package/src/access-http-offline-stream.ts +3 -0
  350. package/src/access-mcp-output-schemas.ts +1 -0
  351. package/src/access-mcp.ts +90 -28
  352. package/src/access-service-health.test.ts +41 -5
  353. package/src/access-service-helpers.ts +1 -0
  354. package/src/access-service-observe-lcm-parity.test.ts +56 -24
  355. package/src/access-service.ts +7 -18
  356. package/src/console/state.test.ts +56 -0
  357. package/src/console/state.ts +83 -0
  358. package/src/correction/correction-access-wiring.ts +36 -8
  359. package/src/correction/correction-classify-parse.test.ts +178 -0
  360. package/src/embedding-fallback.ts +325 -141
  361. package/src/embedding-generation-lock.ts +141 -0
  362. package/src/embedding-index-storage.test.ts +245 -0
  363. package/src/embedding-index-storage.ts +1068 -0
  364. package/src/extraction-liveness.ts +13 -1
  365. package/src/extraction-llm-health.test.ts +103 -0
  366. package/src/extraction-llm-health.ts +71 -0
  367. package/src/index.ts +3 -3
  368. package/src/json-extract.ts +6 -0
  369. package/src/local-llm-thinking.test.ts +12 -0
  370. package/src/local-llm.ts +1 -0
  371. package/src/offline-sync-embedding-generation.test.ts +2173 -0
  372. package/src/offline-sync-embedding-generation.ts +885 -0
  373. package/src/offline-sync-exclude-globs.ts +112 -0
  374. package/src/offline-sync-file-io.ts +48 -0
  375. package/src/offline-sync-runtime-state.ts +48 -0
  376. package/src/offline-sync-snapshot-stream.ts +99 -0
  377. package/src/offline-sync-upload-staging.ts +291 -0
  378. package/src/offline-sync.test.ts +164 -1
  379. package/src/offline-sync.ts +458 -453
  380. package/src/orchestration/extraction-run.test.ts +55 -1
  381. package/src/orchestration/extraction-run.ts +13 -0
  382. package/src/orchestrator.ts +2 -1
  383. package/src/secure-store/secure-fs.ts +26 -6
  384. package/src/storage.ts +11 -6
  385. package/dist/chunk-3BTFBQLO.js.map +0 -1
  386. package/dist/chunk-3SG4FGDV.js.map +0 -1
  387. package/dist/chunk-6DTJBTHL.js.map +0 -1
  388. package/dist/chunk-AREGMX2J.js +0 -50
  389. package/dist/chunk-AREGMX2J.js.map +0 -1
  390. package/dist/chunk-C2WWQ4OR.js.map +0 -1
  391. package/dist/chunk-G6SVZWPB.js.map +0 -1
  392. package/dist/chunk-I53NAHZ4.js.map +0 -1
  393. package/dist/chunk-JN72EPOE.js.map +0 -1
  394. package/dist/chunk-QB75LKQQ.js.map +0 -1
  395. package/dist/chunk-RB776UH3.js.map +0 -1
  396. package/dist/chunk-RGMVMVMF.js.map +0 -1
  397. package/dist/chunk-S55WTPFJ.js.map +0 -1
  398. package/dist/chunk-SVZWVZ7E.js.map +0 -1
  399. package/dist/chunk-WQZZDN5M.js.map +0 -1
  400. /package/dist/{auto-sync-WEUDMXUW.js.map → auto-sync-U5N3CB5Y.js.map} +0 -0
  401. /package/dist/{capsule-crypto-GWVG7LGC.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  402. /package/dist/{capsule-merge-3MNURAQ3.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  403. /package/dist/{chunk-JE334SIA.js.map → chunk-22DYJLFN.js.map} +0 -0
  404. /package/dist/{chunk-DGAWEJVI.js.map → chunk-2DLWLNO4.js.map} +0 -0
  405. /package/dist/{chunk-J3IWHCMF.js.map → chunk-2DT7PIDZ.js.map} +0 -0
  406. /package/dist/{chunk-NKFLHW7J.js.map → chunk-2NAD4YCI.js.map} +0 -0
  407. /package/dist/{chunk-SV72F4DS.js.map → chunk-2WLMWP2T.js.map} +0 -0
  408. /package/dist/{chunk-IVH7INFM.js.map → chunk-3O5BB45T.js.map} +0 -0
  409. /package/dist/{chunk-RDEUG2M2.js.map → chunk-3SGTV7RD.js.map} +0 -0
  410. /package/dist/{chunk-QOPB6KE3.js.map → chunk-3TB2XQ3C.js.map} +0 -0
  411. /package/dist/{chunk-C7JAUNFC.js.map → chunk-4KN2JLQV.js.map} +0 -0
  412. /package/dist/{chunk-TIQZNDZ5.js.map → chunk-4MP7XR5J.js.map} +0 -0
  413. /package/dist/{chunk-7DE2NOON.js.map → chunk-4O4XCBOS.js.map} +0 -0
  414. /package/dist/{chunk-SLEAJ67D.js.map → chunk-4OQET73E.js.map} +0 -0
  415. /package/dist/{chunk-Q3THVX75.js.map → chunk-4RL3JOB3.js.map} +0 -0
  416. /package/dist/{chunk-GDYU6VF4.js.map → chunk-5AYUHSAU.js.map} +0 -0
  417. /package/dist/{chunk-B47OHVFT.js.map → chunk-5E6RYRYW.js.map} +0 -0
  418. /package/dist/{chunk-2U3R3DDH.js.map → chunk-5FAGCOZD.js.map} +0 -0
  419. /package/dist/{chunk-CRKWSSS4.js.map → chunk-5MNUBT7T.js.map} +0 -0
  420. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  421. /package/dist/{chunk-7G6WUOLB.js.map → chunk-66DKTOBY.js.map} +0 -0
  422. /package/dist/{chunk-AZ2X5LNA.js.map → chunk-6LYAEM54.js.map} +0 -0
  423. /package/dist/{chunk-DUJYRVUD.js.map → chunk-6O2VUWV6.js.map} +0 -0
  424. /package/dist/{chunk-IMAP236M.js.map → chunk-6UQFJULG.js.map} +0 -0
  425. /package/dist/{chunk-2I6VHX6Q.js.map → chunk-76M5OK7V.js.map} +0 -0
  426. /package/dist/{chunk-OEBLZZKK.js.map → chunk-7XG7KMIW.js.map} +0 -0
  427. /package/dist/{chunk-FYAU4S6E.js.map → chunk-A4VSOUCB.js.map} +0 -0
  428. /package/dist/{chunk-GEX5NI36.js.map → chunk-AE5U5NMS.js.map} +0 -0
  429. /package/dist/{chunk-UNJOB4DY.js.map → chunk-AEHVZY3X.js.map} +0 -0
  430. /package/dist/{chunk-ML2MVAEZ.js.map → chunk-AEU4EQGV.js.map} +0 -0
  431. /package/dist/{chunk-JVY556FW.js.map → chunk-AWG3TIAY.js.map} +0 -0
  432. /package/dist/{chunk-JX6USXZR.js.map → chunk-AXC4WSF3.js.map} +0 -0
  433. /package/dist/{chunk-BOUFVFV2.js.map → chunk-AZSGSRIM.js.map} +0 -0
  434. /package/dist/{chunk-VZBW6CDG.js.map → chunk-B3O3IRZN.js.map} +0 -0
  435. /package/dist/{chunk-4V44AA7O.js.map → chunk-BGI4NUAO.js.map} +0 -0
  436. /package/dist/{chunk-BNPLDVM6.js.map → chunk-BJVO4H5C.js.map} +0 -0
  437. /package/dist/{chunk-S42HZILI.js.map → chunk-BLVR4WYU.js.map} +0 -0
  438. /package/dist/{chunk-JXMECXMF.js.map → chunk-BOZJD5PK.js.map} +0 -0
  439. /package/dist/{chunk-OWHERGF2.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  440. /package/dist/{chunk-EVBI7S4J.js.map → chunk-C6U57KG4.js.map} +0 -0
  441. /package/dist/{chunk-T4BE5KJM.js.map → chunk-C7ZDKWPS.js.map} +0 -0
  442. /package/dist/{chunk-HKFJ3PF3.js.map → chunk-CRXRZA3G.js.map} +0 -0
  443. /package/dist/{chunk-NMBX4D7P.js.map → chunk-CZJA2EQE.js.map} +0 -0
  444. /package/dist/{chunk-BJX3VQWZ.js.map → chunk-D5BSQR63.js.map} +0 -0
  445. /package/dist/{chunk-MFZACYZ6.js.map → chunk-DGS34QSY.js.map} +0 -0
  446. /package/dist/{chunk-UVYI6VIX.js.map → chunk-DQEMWVMT.js.map} +0 -0
  447. /package/dist/{chunk-DQISIT63.js.map → chunk-DZ42MDZE.js.map} +0 -0
  448. /package/dist/{chunk-5ELENZTA.js.map → chunk-EDIH6X2P.js.map} +0 -0
  449. /package/dist/{chunk-C3QXITIP.js.map → chunk-EQUD7FP4.js.map} +0 -0
  450. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  451. /package/dist/{chunk-IA3X2Y4K.js.map → chunk-FJLQXMTU.js.map} +0 -0
  452. /package/dist/{chunk-TY446V34.js.map → chunk-FKD656D2.js.map} +0 -0
  453. /package/dist/{chunk-CLXTDOKV.js.map → chunk-FUNBJQYR.js.map} +0 -0
  454. /package/dist/{chunk-CLSYE5OZ.js.map → chunk-G2STTRYB.js.map} +0 -0
  455. /package/dist/{chunk-SQDKX4RW.js.map → chunk-GWM6T5EQ.js.map} +0 -0
  456. /package/dist/{chunk-AXDOF4VI.js.map → chunk-GZDTVYK2.js.map} +0 -0
  457. /package/dist/{chunk-55FCXCXJ.js.map → chunk-H56VY4BY.js.map} +0 -0
  458. /package/dist/{chunk-OM5BIPBR.js.map → chunk-H5BJWPUI.js.map} +0 -0
  459. /package/dist/{chunk-7QK5TUTW.js.map → chunk-HLB7GKGG.js.map} +0 -0
  460. /package/dist/{chunk-CHDGJJV6.js.map → chunk-HWLIMQE2.js.map} +0 -0
  461. /package/dist/{chunk-NAFPHFDM.js.map → chunk-JNLEJE4A.js.map} +0 -0
  462. /package/dist/{chunk-7UUKRS3J.js.map → chunk-JVPWRNHA.js.map} +0 -0
  463. /package/dist/{chunk-6ET2VII7.js.map → chunk-JYG2334B.js.map} +0 -0
  464. /package/dist/{chunk-2QG4SLZI.js.map → chunk-KF7PQ7G2.js.map} +0 -0
  465. /package/dist/{chunk-WIKO4SCR.js.map → chunk-LHRQBMJN.js.map} +0 -0
  466. /package/dist/{chunk-IFCKHPY4.js.map → chunk-LO4UKPKX.js.map} +0 -0
  467. /package/dist/{chunk-TEV2JGU5.js.map → chunk-LU7E2MXE.js.map} +0 -0
  468. /package/dist/{chunk-RJLV4BKR.js.map → chunk-LV5H6FTN.js.map} +0 -0
  469. /package/dist/{chunk-IBGEHKQ6.js.map → chunk-LW3HKRL7.js.map} +0 -0
  470. /package/dist/{chunk-3XQYM4RE.js.map → chunk-M6C7SOR6.js.map} +0 -0
  471. /package/dist/{chunk-T4QGUXCV.js.map → chunk-MXCAJKMA.js.map} +0 -0
  472. /package/dist/{chunk-BMYZTZ5D.js.map → chunk-MY7B3HYC.js.map} +0 -0
  473. /package/dist/{chunk-NB3LRY4T.js.map → chunk-N4PYB235.js.map} +0 -0
  474. /package/dist/{chunk-S3YM4SZQ.js.map → chunk-N7QV3CMX.js.map} +0 -0
  475. /package/dist/{chunk-3GN2PEOT.js.map → chunk-NYKIUQL6.js.map} +0 -0
  476. /package/dist/{chunk-L2LBMKSI.js.map → chunk-OK52IY3W.js.map} +0 -0
  477. /package/dist/{chunk-WB2I2EQK.js.map → chunk-P2ODTYOF.js.map} +0 -0
  478. /package/dist/{chunk-RIEX7NOZ.js.map → chunk-PEBHPCX2.js.map} +0 -0
  479. /package/dist/{chunk-VYCOJKSX.js.map → chunk-PO7NXNGC.js.map} +0 -0
  480. /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
  481. /package/dist/{chunk-EU3N5MK3.js.map → chunk-QAW55ZHJ.js.map} +0 -0
  482. /package/dist/{chunk-I4G4UWQA.js.map → chunk-QI2E6ISQ.js.map} +0 -0
  483. /package/dist/{chunk-CK5U7JGH.js.map → chunk-QI7K7BZ5.js.map} +0 -0
  484. /package/dist/{chunk-VTPASHTO.js.map → chunk-R3X2T2LP.js.map} +0 -0
  485. /package/dist/{chunk-EJPF6XDQ.js.map → chunk-RDJ6C7NZ.js.map} +0 -0
  486. /package/dist/{chunk-2UPTRDGM.js.map → chunk-SCXURCVT.js.map} +0 -0
  487. /package/dist/{chunk-N3MNDVJO.js.map → chunk-SWBC3UER.js.map} +0 -0
  488. /package/dist/{chunk-ZTHGFTMW.js.map → chunk-TKC5LZ43.js.map} +0 -0
  489. /package/dist/{chunk-YRLHEEQT.js.map → chunk-U6VC6RP3.js.map} +0 -0
  490. /package/dist/{chunk-MOQPEFLN.js.map → chunk-UP75KL3L.js.map} +0 -0
  491. /package/dist/{chunk-D5F7TKMH.js.map → chunk-V4JZCTMK.js.map} +0 -0
  492. /package/dist/{chunk-NAYBHNGN.js.map → chunk-VALKBYBN.js.map} +0 -0
  493. /package/dist/{chunk-BUKK5SWA.js.map → chunk-VDX2J7OX.js.map} +0 -0
  494. /package/dist/{chunk-H36X4NRH.js.map → chunk-VVX5PZFS.js.map} +0 -0
  495. /package/dist/{chunk-RCQKAOOB.js.map → chunk-W3XXFPRI.js.map} +0 -0
  496. /package/dist/{chunk-W75BBBSY.js.map → chunk-WKY7N3L7.js.map} +0 -0
  497. /package/dist/{chunk-GZAGLCQH.js.map → chunk-X5SHE2O3.js.map} +0 -0
  498. /package/dist/{chunk-OAOBL6OY.js.map → chunk-XOV7NRY5.js.map} +0 -0
  499. /package/dist/{chunk-FZVROZKC.js.map → chunk-XVZA6VXC.js.map} +0 -0
  500. /package/dist/{chunk-IP5VLSLO.js.map → chunk-YJ7MW627.js.map} +0 -0
  501. /package/dist/{chunk-HS75MCQF.js.map → chunk-YRULQW5J.js.map} +0 -0
  502. /package/dist/{chunk-DINRT75P.js.map → chunk-YSBL7VPO.js.map} +0 -0
  503. /package/dist/{chunk-QWUJWBZ5.js.map → chunk-Z3O53WZR.js.map} +0 -0
  504. /package/dist/{chunk-KERNN6BC.js.map → chunk-Z5LP6ILP.js.map} +0 -0
  505. /package/dist/{chunk-5FNZ3G6X.js.map → chunk-Z6EZCN6Z.js.map} +0 -0
  506. /package/dist/{chunk-JS3S2HVG.js.map → chunk-ZZZ4I455.js.map} +0 -0
  507. /package/dist/{contradiction-scan-5EJYRKD3.js.map → contradiction-scan-TAGMOUQ2.js.map} +0 -0
  508. /package/dist/{graph-edge-decay-PVKDKLQK.js.map → embedding-generation-lock.js.map} +0 -0
  509. /package/dist/{resolution-UYJU5JUA.js.map → embedding-index-storage.js.map} +0 -0
  510. /package/dist/{state-ITXJKXRE.js.map → extraction-llm-health.js.map} +0 -0
  511. /package/dist/{first-start-migration-GAT7G733.js.map → first-start-migration-7OATHJKB.js.map} +0 -0
  512. /package/dist/{tui-55UJMJX7.js.map → graph-edge-decay-MKIRZ762.js.map} +0 -0
  513. /package/dist/{trace-ZFVRH4GO.js.map → trace-LXXCMZJA.js.map} +0 -0
@@ -42,6 +42,15 @@ async function readUtf8(root: string, relPath: string): Promise<string> {
42
42
  return readFile(path.join(root, relPath), "utf-8");
43
43
  }
44
44
 
45
+ async function exists(root: string, relPath: string): Promise<boolean> {
46
+ try {
47
+ await readFile(path.join(root, relPath));
48
+ return true;
49
+ } catch {
50
+ return false;
51
+ }
52
+ }
53
+
45
54
  test("offline snapshot captures source-of-truth files and excludes private/internal paths", async () => {
46
55
  const root = await tempDir("remnic-offline-snapshot");
47
56
  try {
@@ -381,6 +390,84 @@ test("offline sync includes retrieval debug snapshots for full-fidelity offline
381
390
  }
382
391
  });
383
392
 
393
+ test("offline sync defers a whole locally diverged shard generation, preserving extras and other namespaces (#3146)", async () => {
394
+ const localRoot = await tempDir("remnic-offline-embgen-local");
395
+ const remoteRoot = await tempDir("remnic-offline-embgen-remote");
396
+ try {
397
+ // Local: generation drifted since the shared base + a local-only shard
398
+ // + an unrelated namespace shard that must stay local-authoritative.
399
+ await write(localRoot, "facts/a.md", "alpha");
400
+ await write(localRoot, "state/embeddings/shard-0000.json", JSON.stringify({
401
+ version: 1, provider: "openai", model: "local-drift", entries: {},
402
+ }));
403
+ await write(localRoot, "state/embeddings/shard-0050.json", "local only extra");
404
+ await write(localRoot, "namespaces/team/state/embeddings/shard-0009.json", "team local");
405
+
406
+ // Remote generation: base-unchanged 0000 + new 0001.
407
+ await write(remoteRoot, "facts/a.md", "alpha");
408
+ await write(remoteRoot, "state/embeddings/shard-0000.json", JSON.stringify({
409
+ version: 1, provider: "openai", model: "base", entries: {},
410
+ }));
411
+
412
+ // The shared base is REQUIRED for the base-unchanged shortcut below
413
+ // (CodeRabbit round 4: supply the base so the branch is really tested).
414
+ const baseSnapshot = await buildOfflineSyncSnapshot({
415
+ root: remoteRoot,
416
+ sourceId: "remote",
417
+ includeContent: true,
418
+ });
419
+ await write(remoteRoot, "state/embeddings/shard-0037.json", JSON.stringify({
420
+ version: 1, provider: "openai", model: "base", entries: {
421
+ added: { path: "memories/added.md", vector: [1] },
422
+ },
423
+ }));
424
+ const snapshot = await buildOfflineSyncSnapshot({
425
+ root: remoteRoot,
426
+ sourceId: "remote",
427
+ includeContent: true,
428
+ });
429
+ const result = await applyOfflineSyncSnapshot({
430
+ root: localRoot,
431
+ snapshot,
432
+ baseFiles: baseSnapshot.files,
433
+ });
434
+
435
+ // An unchanged remote base must not erase local indexing. Deferral is
436
+ // generation-wide: neither the incoming addition nor deletion of local
437
+ // extras may partially replace the preserved generation.
438
+ assert.equal(JSON.parse(await readUtf8(localRoot, "state/embeddings/shard-0000.json")).model, "local-drift");
439
+ assert.equal(await exists(localRoot, "state/embeddings/shard-0037.json"), false);
440
+ assert.equal(await readUtf8(localRoot, "state/embeddings/shard-0050.json"), "local only extra");
441
+ assert.equal(await readUtf8(localRoot, "namespaces/team/state/embeddings/shard-0009.json"), "team local");
442
+ assert.equal(result.deleted, 0);
443
+ assert.equal(result.upserted, 0);
444
+ assert.ok(result.skipped >= 2);
445
+ } finally {
446
+ await rm(localRoot, { recursive: true, force: true });
447
+ await rm(remoteRoot, { recursive: true, force: true });
448
+ }
449
+ });
450
+
451
+ test("offline sync excludes embedding-index transaction leftovers (#3146)", async () => {
452
+ const root = await tempDir("remnic-offline-emb3146");
453
+ try {
454
+ await write(root, "facts/a.md", "alpha");
455
+ await write(root, "state/embeddings.pre-replace.tmp/shard-0000.json", "old generation");
456
+ await write(root, "state/embeddings.staging.tmp-123/staged.json", "staged");
457
+ await write(root, "state/embeddings.json.pre-migration.tmp-456", "demoted legacy");
458
+ await write(root, "namespaces/team/state/embeddings.pre-replace.tmp/shard-0001.json", "ns old");
459
+
460
+ const snapshot = await buildOfflineSyncSnapshot({
461
+ root,
462
+ sourceId: "remote",
463
+ includeContent: true,
464
+ });
465
+ assert.deepEqual(snapshot.files.map((file) => file.path), ["facts/a.md"]);
466
+ } finally {
467
+ await rm(root, { recursive: true, force: true });
468
+ }
469
+ });
470
+
384
471
  test("offline sync push-side default excludes live LCM sqlite but apply-side still accepts it (#1786)", async () => {
385
472
  const root = await tempDir("remnic-offline-lcm-sqlite");
386
473
  try {
@@ -401,6 +488,16 @@ test("offline sync push-side default excludes live LCM sqlite but apply-side sti
401
488
  assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/lcm.sqlite-shm"), true);
402
489
  assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/lcm.sqlite-wal"), true);
403
490
  assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/last_qmd_recall.json"), true);
491
+ // Sharded embedding index files (#3146) are remote-authoritative like
492
+ // the legacy single-file index.
493
+ assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/embeddings/shard-0003.json"), true);
494
+ assert.equal(
495
+ shouldPreferIncomingOfflineRuntimeFile("namespaces/team/state/embeddings/shard-0042.json"),
496
+ true,
497
+ );
498
+ assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/embeddings/other.json"), false);
499
+ // Shard preference is scoped to the embedding index directory.
500
+ assert.equal(shouldPreferIncomingOfflineRuntimeFile("state/other/shard-0000.json"), false);
404
501
 
405
502
  // buildOfflineSyncSnapshotForPaths still rejects explicitly excluded
406
503
  // paths so callers cannot bypass the default exclude via path lists.
@@ -480,7 +577,7 @@ test("offline sync includes durable runtime state and excludes only transient sy
480
577
  await write(root, "state/buffer-surprise-ledger.jsonl", "surprise");
481
578
  await write(root, "state/buffer.json", "buffer");
482
579
  await write(root, "state/buffer.json.tmp-123-456", "tmp");
483
- await write(root, "state/embeddings.json", "embeddings");
580
+ await write(root, "state/embeddings.json", '{"version":1,"provider":"openai","model":"m","entries":{}}');
484
581
  await write(root, "state/entity-mention-index.json", "entities");
485
582
  await write(root, "state/index_tags.json", "tags");
486
583
  await write(root, "state/index_time.json", "time");
@@ -3204,3 +3301,69 @@ test("plain-file content chunks carry the full-file sha256 (file-content respons
3204
3301
  await rm(root, { recursive: true, force: true });
3205
3302
  }
3206
3303
  });
3304
+
3305
+ test("applyOfflineSyncSnapshot consumes readIncomingFile for records without inline content", async () => {
3306
+ const root = await tempDir("remnic-offline-read-incoming");
3307
+ try {
3308
+ const oldBody = "old incoming payload";
3309
+ const newBody = "brand new incoming payload";
3310
+ const shaOf = (content: string) => createHash("sha256").update(content).digest("hex");
3311
+ await write(root, "facts/a.md", oldBody);
3312
+ const baseEntry = { path: "facts/a.md", sha256: shaOf(oldBody), bytes: Buffer.byteLength(oldBody), mtimeMs: 1 };
3313
+ const incoming = { path: "facts/a.md", sha256: shaOf(newBody), bytes: Buffer.byteLength(newBody), mtimeMs: 2 };
3314
+ const snapshot = {
3315
+ format: OFFLINE_SYNC_SNAPSHOT_FORMAT,
3316
+ schemaVersion: 1,
3317
+ createdAt: new Date().toISOString(),
3318
+ sourceId: "remote",
3319
+ includeTranscripts: true,
3320
+ files: [incoming],
3321
+ };
3322
+ const baseFiles = [baseEntry];
3323
+
3324
+ // (a) The callback supplies the verified incoming buffer; the record
3325
+ // carries no contentBase64 at all.
3326
+ const applied = await applyOfflineSyncSnapshot({
3327
+ root,
3328
+ snapshot,
3329
+ baseFiles,
3330
+ currentFiles: baseFiles,
3331
+ readIncomingFile: async (target) =>
3332
+ target.path === "facts/a.md" && target.sha256 === incoming.sha256 ? Buffer.from(newBody) : null,
3333
+ });
3334
+ assert.equal(applied.upserted, 1);
3335
+ assert.equal(await readUtf8(root, "facts/a.md"), newBody);
3336
+
3337
+ // (b) A callback buffer that does not match the declared digest is
3338
+ // rejected BEFORE any publication; the published file is untouched.
3339
+ await write(root, "facts/a.md", oldBody);
3340
+ await assert.rejects(() =>
3341
+ applyOfflineSyncSnapshot({
3342
+ root,
3343
+ snapshot,
3344
+ baseFiles,
3345
+ currentFiles: baseFiles,
3346
+ readIncomingFile: async () => Buffer.from("tampered payload"),
3347
+ }),
3348
+ );
3349
+ assert.equal(await readUtf8(root, "facts/a.md"), oldBody);
3350
+
3351
+ // (c) null keeps the metadata-only behavior: an unchanged member whose
3352
+ // local hash matches the incoming record needs no content.
3353
+ const unchangedSnapshot = {
3354
+ ...snapshot,
3355
+ files: [{ ...incoming, sha256: shaOf(oldBody), bytes: Buffer.byteLength(oldBody) }],
3356
+ };
3357
+ const skipped = await applyOfflineSyncSnapshot({
3358
+ root,
3359
+ snapshot: unchangedSnapshot,
3360
+ baseFiles,
3361
+ currentFiles: baseFiles,
3362
+ readIncomingFile: async () => null,
3363
+ });
3364
+ assert.equal(skipped.upserted, 0);
3365
+ assert.equal(await readUtf8(root, "facts/a.md"), oldBody);
3366
+ } finally {
3367
+ await rm(root, { recursive: true, force: true });
3368
+ }
3369
+ });