@remnic/core 9.69.87 → 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 (414) hide show
  1. package/dist/access-admin-ops-surface.js +61 -55
  2. package/dist/access-authorization-probe.js +62 -56
  3. package/dist/access-boundary.js +61 -55
  4. package/dist/access-citation-namespace.js +2 -2
  5. package/dist/access-cli.js +140 -134
  6. package/dist/access-cli.js.map +1 -1
  7. package/dist/access-extraction-force-flush.js +61 -55
  8. package/dist/access-http-briefing.js +62 -56
  9. package/dist/access-http-offline-stream.d.ts.map +1 -1
  10. package/dist/access-http-offline-stream.js +1 -1
  11. package/dist/access-http-query.js +63 -57
  12. package/dist/access-http.js +85 -79
  13. package/dist/access-identity-continuity-surface.js +61 -55
  14. package/dist/access-lcm-surface.js +61 -55
  15. package/dist/access-mcp-output-schemas.d.ts.map +1 -1
  16. package/dist/access-mcp-output-schemas.js +1 -1
  17. package/dist/access-mcp.js +74 -68
  18. package/dist/access-namespace-preflight.js +61 -55
  19. package/dist/access-observe-write-category.js +19 -13
  20. package/dist/access-observe-write-surface.js +61 -55
  21. package/dist/access-offline-manifest.js +15 -10
  22. package/dist/access-operations-batch.js +65 -59
  23. package/dist/access-operations.js +72 -66
  24. package/dist/access-recall-concurrency.js +61 -55
  25. package/dist/access-recall-response.js +61 -55
  26. package/dist/access-recall-surface.js +61 -55
  27. package/dist/access-schema.js +15 -7
  28. package/dist/access-service.d.ts.map +1 -1
  29. package/dist/access-service.js +61 -55
  30. package/dist/access-surface-catalog.js +63 -57
  31. package/dist/access-surface-catalog.js.map +1 -1
  32. package/dist/active-recall.js +27 -22
  33. package/dist/active-recall.js.map +1 -1
  34. package/dist/adapters/index.js +4 -4
  35. package/dist/adapters/registry.js +2 -2
  36. package/dist/{auto-sync-6IPX2BAC.js → auto-sync-U5N3CB5Y.js} +7 -7
  37. package/dist/briefing.js +15 -15
  38. package/dist/buffer.js +7 -7
  39. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  40. package/dist/{capsule-merge-3MNURAQ3.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  41. package/dist/causal-behavior.js +2 -2
  42. package/dist/causal-chain.js +2 -2
  43. package/dist/causal-consolidation.js +18 -18
  44. package/dist/causal-retrieval.js +2 -2
  45. package/dist/causal-trajectory-graph.js +2 -2
  46. package/dist/causal-trajectory.js +1 -1
  47. package/dist/{chunk-JE334SIA.js → chunk-22DYJLFN.js} +2 -2
  48. package/dist/{chunk-JGSQ6P4D.js → chunk-2DLWLNO4.js} +3 -3
  49. package/dist/{chunk-LS3XH3UE.js → chunk-2NAD4YCI.js} +2 -2
  50. package/dist/{chunk-SY5KDWGU.js → chunk-2WLMWP2T.js} +2 -2
  51. package/dist/{chunk-P6WFK4ZJ.js → chunk-3O5BB45T.js} +4 -4
  52. package/dist/{chunk-SOZUJCME.js → chunk-3SGTV7RD.js} +6 -6
  53. package/dist/{chunk-YITN5WXI.js → chunk-4KN2JLQV.js} +2 -2
  54. package/dist/{chunk-JKMHZF3Q.js → chunk-4MP7XR5J.js} +2 -2
  55. package/dist/chunk-4NSLQ7EU.js +137 -0
  56. package/dist/chunk-4NSLQ7EU.js.map +1 -0
  57. package/dist/{chunk-7DE2NOON.js → chunk-4O4XCBOS.js} +3 -3
  58. package/dist/{chunk-SLEAJ67D.js → chunk-4OQET73E.js} +4 -4
  59. package/dist/{chunk-GDYU6VF4.js → chunk-5AYUHSAU.js} +2 -2
  60. package/dist/{chunk-QWW2JDDX.js → chunk-5E6RYRYW.js} +6 -6
  61. package/dist/{chunk-ICZQG4XE.js → chunk-5FAGCOZD.js} +4 -4
  62. package/dist/{chunk-4IEOGIPB.js → chunk-5MNUBT7T.js} +2 -2
  63. package/dist/{chunk-CK5KOVHW.js → chunk-5R627MYY.js} +3 -2
  64. package/dist/{chunk-CK5KOVHW.js.map → chunk-5R627MYY.js.map} +1 -1
  65. package/dist/chunk-5X4MXNEU.js +64 -0
  66. package/dist/chunk-5X4MXNEU.js.map +1 -0
  67. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  68. package/dist/{chunk-DUJYRVUD.js → chunk-6O2VUWV6.js} +3 -3
  69. package/dist/{chunk-CS52MFDV.js → chunk-6UQFJULG.js} +2 -2
  70. package/dist/chunk-75PT4N7Q.js +75 -0
  71. package/dist/chunk-75PT4N7Q.js.map +1 -0
  72. package/dist/{chunk-HESDNYRB.js → chunk-76M5OK7V.js} +2 -2
  73. package/dist/{chunk-4CDYONWO.js → chunk-A4VSOUCB.js} +3 -3
  74. package/dist/{chunk-HBBHL4YF.js → chunk-AE5U5NMS.js} +2 -2
  75. package/dist/{chunk-CUCWX3MO.js → chunk-AEHVZY3X.js} +2 -2
  76. package/dist/{chunk-DZ525SNQ.js → chunk-AEU4EQGV.js} +1 -1
  77. package/dist/{chunk-VLLD4TOB.js → chunk-AWG3TIAY.js} +2 -2
  78. package/dist/{chunk-72JNNJJJ.js → chunk-AXC4WSF3.js} +3 -3
  79. package/dist/{chunk-N4S4NUX5.js → chunk-B3O3IRZN.js} +1 -1
  80. package/dist/{chunk-FAN73COB.js → chunk-BGI4NUAO.js} +2 -2
  81. package/dist/{chunk-XTYX6V52.js → chunk-BJVO4H5C.js} +2 -2
  82. package/dist/{chunk-EHS5MJEF.js → chunk-BLVR4WYU.js} +3 -3
  83. package/dist/{chunk-KFCMMDHH.js → chunk-BOZJD5PK.js} +2 -2
  84. package/dist/{chunk-TM3RXL4G.js → chunk-BUQKSQXL.js} +2 -2
  85. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  86. package/dist/{chunk-EVBI7S4J.js → chunk-C6U57KG4.js} +4 -4
  87. package/dist/{chunk-RB776UH3.js → chunk-C7V3KPKJ.js} +235 -93
  88. package/dist/chunk-C7V3KPKJ.js.map +1 -0
  89. package/dist/{chunk-VX6GCKBS.js → chunk-C7ZDKWPS.js} +4 -4
  90. package/dist/{chunk-ZI7QA4MK.js → chunk-CRXRZA3G.js} +2 -2
  91. package/dist/{chunk-VQNONC4E.js → chunk-CZJA2EQE.js} +2 -2
  92. package/dist/{chunk-M536WNTQ.js → chunk-D5BSQR63.js} +2 -2
  93. package/dist/{chunk-37S3IMYB.js → chunk-DGS34QSY.js} +2 -2
  94. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  95. package/dist/{chunk-3BTFBQLO.js → chunk-EFHNFTWB.js} +49 -3
  96. package/dist/chunk-EFHNFTWB.js.map +1 -0
  97. package/dist/{chunk-C3QXITIP.js → chunk-EQUD7FP4.js} +2 -2
  98. package/dist/chunk-ETUZFFPU.js +218 -0
  99. package/dist/chunk-ETUZFFPU.js.map +1 -0
  100. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  101. package/dist/{chunk-EQ6YOIKO.js → chunk-FJLQXMTU.js} +3 -3
  102. package/dist/{chunk-SRZW7FNU.js → chunk-FKD656D2.js} +2 -2
  103. package/dist/{chunk-CLXTDOKV.js → chunk-FUNBJQYR.js} +2 -2
  104. package/dist/{chunk-CLSYE5OZ.js → chunk-G2STTRYB.js} +2 -2
  105. package/dist/{chunk-KP7SANCF.js → chunk-GWM6T5EQ.js} +2 -2
  106. package/dist/{chunk-UA5DX5C3.js → chunk-GZDTVYK2.js} +2 -2
  107. package/dist/{chunk-3GQC3NMB.js → chunk-H56VY4BY.js} +5 -5
  108. package/dist/{chunk-L6UZEAID.js → chunk-H5BJWPUI.js} +4 -4
  109. package/dist/{chunk-YSJTCOHR.js → chunk-HLB7GKGG.js} +2 -2
  110. package/dist/{chunk-PUKTBULQ.js → chunk-HWLIMQE2.js} +2 -2
  111. package/dist/{chunk-CWHV574S.js → chunk-IOSZHHJC.js} +6 -6
  112. package/dist/{chunk-P2WZHLUF.js → chunk-JVPWRNHA.js} +2 -2
  113. package/dist/{chunk-6ET2VII7.js → chunk-JYG2334B.js} +2 -2
  114. package/dist/chunk-K6T33R4Q.js +535 -0
  115. package/dist/chunk-K6T33R4Q.js.map +1 -0
  116. package/dist/{chunk-WIKO4SCR.js → chunk-LHRQBMJN.js} +2 -2
  117. package/dist/{chunk-K4J4E7WV.js → chunk-LO4UKPKX.js} +2 -2
  118. package/dist/{chunk-LF5IGOOD.js → chunk-LU7E2MXE.js} +17 -17
  119. package/dist/{chunk-RJLV4BKR.js → chunk-LV5H6FTN.js} +2 -2
  120. package/dist/{chunk-3C3J243X.js → chunk-LW3HKRL7.js} +3 -3
  121. package/dist/{chunk-4BZP2B4U.js → chunk-M6C7SOR6.js} +2 -2
  122. package/dist/{chunk-JN72EPOE.js → chunk-MAAL6OZV.js} +7 -7
  123. package/dist/chunk-MAAL6OZV.js.map +1 -0
  124. package/dist/{chunk-MY2PLXSM.js → chunk-MCTM4YPL.js} +2 -1
  125. package/dist/{chunk-MY2PLXSM.js.map → chunk-MCTM4YPL.js.map} +1 -1
  126. package/dist/{chunk-SPSRGEDQ.js → chunk-MXCAJKMA.js} +9 -9
  127. package/dist/{chunk-BMYZTZ5D.js → chunk-MY7B3HYC.js} +2 -2
  128. package/dist/{chunk-NB3LRY4T.js → chunk-N4PYB235.js} +2 -2
  129. package/dist/{chunk-S3YM4SZQ.js → chunk-N7QV3CMX.js} +2 -2
  130. package/dist/{chunk-AQK54Q7O.js → chunk-NYKIUQL6.js} +2 -2
  131. package/dist/{chunk-WQZZDN5M.js → chunk-OCFXVDBZ.js} +322 -376
  132. package/dist/chunk-OCFXVDBZ.js.map +1 -0
  133. package/dist/{chunk-NE6PHPLG.js → chunk-OK52IY3W.js} +10 -10
  134. package/dist/{chunk-6TT6HRE4.js → chunk-P2ODTYOF.js} +2 -2
  135. package/dist/{chunk-W4AOR52H.js → chunk-PEBHPCX2.js} +2 -2
  136. package/dist/{chunk-VYCOJKSX.js → chunk-PO7NXNGC.js} +2 -2
  137. package/dist/{chunk-G6SVZWPB.js → chunk-PZX3AQLF.js} +44 -1
  138. package/dist/chunk-PZX3AQLF.js.map +1 -0
  139. package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
  140. package/dist/{chunk-MQJL6CDZ.js → chunk-QAW55ZHJ.js} +4 -4
  141. package/dist/{chunk-FOH7AMMI.js → chunk-QB57WIS6.js} +73 -82
  142. package/dist/chunk-QB57WIS6.js.map +1 -0
  143. package/dist/{chunk-QVS22WTO.js → chunk-QI7K7BZ5.js} +2 -2
  144. package/dist/{chunk-NE7I2RCT.js → chunk-R3X2T2LP.js} +2 -2
  145. package/dist/{chunk-S7GCT7NU.js → chunk-RBITPCMK.js} +8 -8
  146. package/dist/{chunk-YTQGGO3K.js → chunk-S2GE2K36.js} +81 -78
  147. package/dist/{chunk-YTQGGO3K.js.map → chunk-S2GE2K36.js.map} +1 -1
  148. package/dist/{chunk-BJRAELDH.js → chunk-SCXURCVT.js} +3 -3
  149. package/dist/{chunk-FRCESVV6.js → chunk-STEOT4DI.js} +19 -19
  150. package/dist/chunk-STEOT4DI.js.map +1 -0
  151. package/dist/{chunk-BFO3IR56.js → chunk-SWBC3UER.js} +2 -2
  152. package/dist/chunk-TYT4TEQV.js +45 -0
  153. package/dist/chunk-TYT4TEQV.js.map +1 -0
  154. package/dist/{chunk-YRLHEEQT.js → chunk-U6VC6RP3.js} +2 -2
  155. package/dist/chunk-UCPGOUDZ.js +726 -0
  156. package/dist/chunk-UCPGOUDZ.js.map +1 -0
  157. package/dist/{chunk-MOQPEFLN.js → chunk-UP75KL3L.js} +2 -2
  158. package/dist/{chunk-D5F7TKMH.js → chunk-V4JZCTMK.js} +2 -2
  159. package/dist/{chunk-QEV26L2F.js → chunk-VALKBYBN.js} +2 -2
  160. package/dist/{chunk-7LCGFUMB.js → chunk-VDX2J7OX.js} +4 -4
  161. package/dist/{chunk-TDYAIXHK.js → chunk-VVX5PZFS.js} +5 -5
  162. package/dist/{chunk-6NQ4LSMS.js → chunk-W3XXFPRI.js} +52 -52
  163. package/dist/{chunk-4IIMMZZK.js → chunk-WKY7N3L7.js} +10 -10
  164. package/dist/{chunk-VVDWZRZG.js → chunk-X5SHE2O3.js} +3 -3
  165. package/dist/{chunk-NR2ASHBL.js → chunk-XOV7NRY5.js} +2 -2
  166. package/dist/{chunk-6L3PBSAR.js → chunk-YJ7MW627.js} +2 -2
  167. package/dist/{chunk-LQG5O5EP.js → chunk-Z3O53WZR.js} +2 -2
  168. package/dist/{chunk-FB64XE3R.js → chunk-Z5LP6ILP.js} +2 -2
  169. package/dist/{chunk-VKQI47DJ.js → chunk-Z6EZCN6Z.js} +8 -8
  170. package/dist/{chunk-V2ES4WCZ.js → chunk-ZZZ4I455.js} +2 -2
  171. package/dist/cli.js +106 -100
  172. package/dist/coding/export-okf-codegraph.js +16 -16
  173. package/dist/coding/pre-action-gate.js +2 -2
  174. package/dist/compounding/engine.js +16 -16
  175. package/dist/config.js +27 -22
  176. package/dist/connectors/codex-materialize-runner.js +15 -15
  177. package/dist/connectors/index.js +15 -15
  178. package/dist/console/state.d.ts +30 -0
  179. package/dist/console/state.d.ts.map +1 -1
  180. package/dist/contradiction/index.js +5 -5
  181. package/dist/convergence-refresh.js +17 -17
  182. package/dist/corpus-watermark.js +17 -17
  183. package/dist/dashboard-runtime.js +2 -2
  184. package/dist/deep-recall-http-glue.js +15 -8
  185. package/dist/embedding-fallback.d.ts +41 -31
  186. package/dist/embedding-fallback.d.ts.map +1 -1
  187. package/dist/embedding-fallback.js +9 -1
  188. package/dist/embedding-generation-lock.d.ts +49 -0
  189. package/dist/embedding-generation-lock.d.ts.map +1 -0
  190. package/dist/embedding-generation-lock.js +19 -0
  191. package/dist/embedding-index-storage.d.ts +276 -0
  192. package/dist/embedding-index-storage.d.ts.map +1 -0
  193. package/dist/embedding-index-storage.js +28 -0
  194. package/dist/entity-retrieval.js +16 -16
  195. package/dist/event-order-recall.js +3 -3
  196. package/dist/explicit-capture.js +6 -6
  197. package/dist/external-wiki-access.js +62 -56
  198. package/dist/extraction.js +21 -21
  199. package/dist/{graph-edge-decay-KQGS3L3B.js → graph-edge-decay-MKIRZ762.js} +5 -5
  200. package/dist/graph-jsonl.js +3 -3
  201. package/dist/graph-snapshot.js +3 -3
  202. package/dist/graph.js +2 -2
  203. package/dist/harmonic-retrieval.js +1 -1
  204. package/dist/index.d.ts +2 -0
  205. package/dist/index.d.ts.map +1 -1
  206. package/dist/index.js +207 -177
  207. package/dist/lcm/engine.js +3 -3
  208. package/dist/lcm/index.js +9 -9
  209. package/dist/local-llm.js +2 -2
  210. package/dist/location/index.js +18 -18
  211. package/dist/maintenance/memory-governance.js +15 -15
  212. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +15 -15
  213. package/dist/maintenance/rebuild-memory-projection.js +16 -16
  214. package/dist/memory-browse-operations.js +62 -56
  215. package/dist/memory-subject.js +3 -3
  216. package/dist/namespaces/migrate.js +16 -16
  217. package/dist/namespaces/search.js +4 -4
  218. package/dist/namespaces/storage.js +15 -15
  219. package/dist/offline-sync-embedding-generation.d.ts +207 -0
  220. package/dist/offline-sync-embedding-generation.d.ts.map +1 -0
  221. package/dist/offline-sync-embedding-generation.js +42 -0
  222. package/dist/offline-sync-exclude-globs.d.ts +15 -0
  223. package/dist/offline-sync-exclude-globs.d.ts.map +1 -1
  224. package/dist/offline-sync-exclude-globs.js +11 -3
  225. package/dist/offline-sync-file-io.d.ts +7 -0
  226. package/dist/offline-sync-file-io.d.ts.map +1 -1
  227. package/dist/offline-sync-file-io.js +14 -2
  228. package/dist/offline-sync-impression-drain.js +3 -3
  229. package/dist/offline-sync-runtime-state.d.ts +5 -0
  230. package/dist/offline-sync-runtime-state.d.ts.map +1 -0
  231. package/dist/offline-sync-runtime-state.js +14 -0
  232. package/dist/offline-sync-runtime-state.js.map +1 -0
  233. package/dist/offline-sync-snapshot-stream.d.ts +26 -0
  234. package/dist/offline-sync-snapshot-stream.d.ts.map +1 -0
  235. package/dist/offline-sync-snapshot-stream.js +28 -0
  236. package/dist/offline-sync-snapshot-stream.js.map +1 -0
  237. package/dist/offline-sync-upload-staging.d.ts +34 -0
  238. package/dist/offline-sync-upload-staging.d.ts.map +1 -0
  239. package/dist/offline-sync-upload-staging.js +26 -0
  240. package/dist/offline-sync-upload-staging.js.map +1 -0
  241. package/dist/offline-sync.d.ts +46 -27
  242. package/dist/offline-sync.d.ts.map +1 -1
  243. package/dist/offline-sync.js +21 -8
  244. package/dist/operator-doctor-corpus.js +18 -18
  245. package/dist/operator-toolkit.js +38 -33
  246. package/dist/orchestration/maintenance.js +26 -26
  247. package/dist/orchestrator.d.ts.map +1 -1
  248. package/dist/orchestrator.js +142 -136
  249. package/dist/recall-navigation-operations.js +62 -56
  250. package/dist/recall-navigation.js +61 -55
  251. package/dist/reconcile/manifest.js +4 -4
  252. package/dist/{resolution-DNX7FO7A.js → resolution-K4A3VPKZ.js} +6 -6
  253. package/dist/resolution-K4A3VPKZ.js.map +1 -0
  254. package/dist/resume-bundles.js +28 -23
  255. package/dist/salvage-envelope.js +5 -5
  256. package/dist/search/factory.js +3 -3
  257. package/dist/search/index.js +7 -7
  258. package/dist/secure-store/index.js +2 -2
  259. package/dist/secure-store/secure-fs.d.ts +14 -1
  260. package/dist/secure-store/secure-fs.d.ts.map +1 -1
  261. package/dist/semantic-consolidation.js +16 -16
  262. package/dist/semantic-rule-promotion.js +15 -15
  263. package/dist/semantic-rule-verifier.js +15 -15
  264. package/dist/source-agent-qualifier.js +18 -18
  265. package/dist/standup/build.js +15 -15
  266. package/dist/{state-ITXJKXRE.js → state-JB47KHYV.js} +2 -2
  267. package/dist/state-JB47KHYV.js.map +1 -0
  268. package/dist/storage.d.ts +9 -3
  269. package/dist/storage.d.ts.map +1 -1
  270. package/dist/storage.js +14 -14
  271. package/dist/subject-config.js +4 -4
  272. package/dist/summarizer.js +3 -3
  273. package/dist/support-passport/index.js +64 -58
  274. package/dist/{trace-ZFVRH4GO.js → trace-LXXCMZJA.js} +3 -3
  275. package/dist/transfer/backup.js +2 -2
  276. package/dist/transfer/capsule-export.js +2 -2
  277. package/dist/transfer/capsule-import.js +3 -3
  278. package/dist/transfer/export-okf.js +16 -16
  279. package/dist/{tui-55UJMJX7.js → tui-2Z5WOV7L.js} +3 -3
  280. package/dist/tui-2Z5WOV7L.js.map +1 -0
  281. package/dist/verified-recall.js +15 -15
  282. package/dist/who-knows-cli.js +16 -16
  283. package/dist/who-knows.js +15 -15
  284. package/dist/write-envelope.js +4 -4
  285. package/package.json +2 -2
  286. package/src/access-http-offline-stream.ts +3 -0
  287. package/src/access-mcp-output-schemas.ts +1 -0
  288. package/src/access-service.ts +7 -18
  289. package/src/console/state.test.ts +56 -0
  290. package/src/console/state.ts +83 -0
  291. package/src/embedding-fallback.ts +325 -141
  292. package/src/embedding-generation-lock.ts +141 -0
  293. package/src/embedding-index-storage.test.ts +245 -0
  294. package/src/embedding-index-storage.ts +1068 -0
  295. package/src/index.ts +3 -3
  296. package/src/offline-sync-embedding-generation.test.ts +2173 -0
  297. package/src/offline-sync-embedding-generation.ts +885 -0
  298. package/src/offline-sync-exclude-globs.ts +112 -0
  299. package/src/offline-sync-file-io.ts +48 -0
  300. package/src/offline-sync-runtime-state.ts +48 -0
  301. package/src/offline-sync-snapshot-stream.ts +99 -0
  302. package/src/offline-sync-upload-staging.ts +291 -0
  303. package/src/offline-sync.test.ts +164 -1
  304. package/src/offline-sync.ts +458 -453
  305. package/src/orchestrator.ts +2 -1
  306. package/src/secure-store/secure-fs.ts +26 -6
  307. package/src/storage.ts +11 -6
  308. package/dist/chunk-3BTFBQLO.js.map +0 -1
  309. package/dist/chunk-AREGMX2J.js +0 -50
  310. package/dist/chunk-AREGMX2J.js.map +0 -1
  311. package/dist/chunk-FOH7AMMI.js.map +0 -1
  312. package/dist/chunk-FRCESVV6.js.map +0 -1
  313. package/dist/chunk-G6SVZWPB.js.map +0 -1
  314. package/dist/chunk-JN72EPOE.js.map +0 -1
  315. package/dist/chunk-RB776UH3.js.map +0 -1
  316. package/dist/chunk-WQZZDN5M.js.map +0 -1
  317. /package/dist/{auto-sync-6IPX2BAC.js.map → auto-sync-U5N3CB5Y.js.map} +0 -0
  318. /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  319. /package/dist/{capsule-merge-3MNURAQ3.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  320. /package/dist/{chunk-JE334SIA.js.map → chunk-22DYJLFN.js.map} +0 -0
  321. /package/dist/{chunk-JGSQ6P4D.js.map → chunk-2DLWLNO4.js.map} +0 -0
  322. /package/dist/{chunk-LS3XH3UE.js.map → chunk-2NAD4YCI.js.map} +0 -0
  323. /package/dist/{chunk-SY5KDWGU.js.map → chunk-2WLMWP2T.js.map} +0 -0
  324. /package/dist/{chunk-P6WFK4ZJ.js.map → chunk-3O5BB45T.js.map} +0 -0
  325. /package/dist/{chunk-SOZUJCME.js.map → chunk-3SGTV7RD.js.map} +0 -0
  326. /package/dist/{chunk-YITN5WXI.js.map → chunk-4KN2JLQV.js.map} +0 -0
  327. /package/dist/{chunk-JKMHZF3Q.js.map → chunk-4MP7XR5J.js.map} +0 -0
  328. /package/dist/{chunk-7DE2NOON.js.map → chunk-4O4XCBOS.js.map} +0 -0
  329. /package/dist/{chunk-SLEAJ67D.js.map → chunk-4OQET73E.js.map} +0 -0
  330. /package/dist/{chunk-GDYU6VF4.js.map → chunk-5AYUHSAU.js.map} +0 -0
  331. /package/dist/{chunk-QWW2JDDX.js.map → chunk-5E6RYRYW.js.map} +0 -0
  332. /package/dist/{chunk-ICZQG4XE.js.map → chunk-5FAGCOZD.js.map} +0 -0
  333. /package/dist/{chunk-4IEOGIPB.js.map → chunk-5MNUBT7T.js.map} +0 -0
  334. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  335. /package/dist/{chunk-DUJYRVUD.js.map → chunk-6O2VUWV6.js.map} +0 -0
  336. /package/dist/{chunk-CS52MFDV.js.map → chunk-6UQFJULG.js.map} +0 -0
  337. /package/dist/{chunk-HESDNYRB.js.map → chunk-76M5OK7V.js.map} +0 -0
  338. /package/dist/{chunk-4CDYONWO.js.map → chunk-A4VSOUCB.js.map} +0 -0
  339. /package/dist/{chunk-HBBHL4YF.js.map → chunk-AE5U5NMS.js.map} +0 -0
  340. /package/dist/{chunk-CUCWX3MO.js.map → chunk-AEHVZY3X.js.map} +0 -0
  341. /package/dist/{chunk-DZ525SNQ.js.map → chunk-AEU4EQGV.js.map} +0 -0
  342. /package/dist/{chunk-VLLD4TOB.js.map → chunk-AWG3TIAY.js.map} +0 -0
  343. /package/dist/{chunk-72JNNJJJ.js.map → chunk-AXC4WSF3.js.map} +0 -0
  344. /package/dist/{chunk-N4S4NUX5.js.map → chunk-B3O3IRZN.js.map} +0 -0
  345. /package/dist/{chunk-FAN73COB.js.map → chunk-BGI4NUAO.js.map} +0 -0
  346. /package/dist/{chunk-XTYX6V52.js.map → chunk-BJVO4H5C.js.map} +0 -0
  347. /package/dist/{chunk-EHS5MJEF.js.map → chunk-BLVR4WYU.js.map} +0 -0
  348. /package/dist/{chunk-KFCMMDHH.js.map → chunk-BOZJD5PK.js.map} +0 -0
  349. /package/dist/{chunk-TM3RXL4G.js.map → chunk-BUQKSQXL.js.map} +0 -0
  350. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  351. /package/dist/{chunk-EVBI7S4J.js.map → chunk-C6U57KG4.js.map} +0 -0
  352. /package/dist/{chunk-VX6GCKBS.js.map → chunk-C7ZDKWPS.js.map} +0 -0
  353. /package/dist/{chunk-ZI7QA4MK.js.map → chunk-CRXRZA3G.js.map} +0 -0
  354. /package/dist/{chunk-VQNONC4E.js.map → chunk-CZJA2EQE.js.map} +0 -0
  355. /package/dist/{chunk-M536WNTQ.js.map → chunk-D5BSQR63.js.map} +0 -0
  356. /package/dist/{chunk-37S3IMYB.js.map → chunk-DGS34QSY.js.map} +0 -0
  357. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  358. /package/dist/{chunk-C3QXITIP.js.map → chunk-EQUD7FP4.js.map} +0 -0
  359. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  360. /package/dist/{chunk-EQ6YOIKO.js.map → chunk-FJLQXMTU.js.map} +0 -0
  361. /package/dist/{chunk-SRZW7FNU.js.map → chunk-FKD656D2.js.map} +0 -0
  362. /package/dist/{chunk-CLXTDOKV.js.map → chunk-FUNBJQYR.js.map} +0 -0
  363. /package/dist/{chunk-CLSYE5OZ.js.map → chunk-G2STTRYB.js.map} +0 -0
  364. /package/dist/{chunk-KP7SANCF.js.map → chunk-GWM6T5EQ.js.map} +0 -0
  365. /package/dist/{chunk-UA5DX5C3.js.map → chunk-GZDTVYK2.js.map} +0 -0
  366. /package/dist/{chunk-3GQC3NMB.js.map → chunk-H56VY4BY.js.map} +0 -0
  367. /package/dist/{chunk-L6UZEAID.js.map → chunk-H5BJWPUI.js.map} +0 -0
  368. /package/dist/{chunk-YSJTCOHR.js.map → chunk-HLB7GKGG.js.map} +0 -0
  369. /package/dist/{chunk-PUKTBULQ.js.map → chunk-HWLIMQE2.js.map} +0 -0
  370. /package/dist/{chunk-CWHV574S.js.map → chunk-IOSZHHJC.js.map} +0 -0
  371. /package/dist/{chunk-P2WZHLUF.js.map → chunk-JVPWRNHA.js.map} +0 -0
  372. /package/dist/{chunk-6ET2VII7.js.map → chunk-JYG2334B.js.map} +0 -0
  373. /package/dist/{chunk-WIKO4SCR.js.map → chunk-LHRQBMJN.js.map} +0 -0
  374. /package/dist/{chunk-K4J4E7WV.js.map → chunk-LO4UKPKX.js.map} +0 -0
  375. /package/dist/{chunk-LF5IGOOD.js.map → chunk-LU7E2MXE.js.map} +0 -0
  376. /package/dist/{chunk-RJLV4BKR.js.map → chunk-LV5H6FTN.js.map} +0 -0
  377. /package/dist/{chunk-3C3J243X.js.map → chunk-LW3HKRL7.js.map} +0 -0
  378. /package/dist/{chunk-4BZP2B4U.js.map → chunk-M6C7SOR6.js.map} +0 -0
  379. /package/dist/{chunk-SPSRGEDQ.js.map → chunk-MXCAJKMA.js.map} +0 -0
  380. /package/dist/{chunk-BMYZTZ5D.js.map → chunk-MY7B3HYC.js.map} +0 -0
  381. /package/dist/{chunk-NB3LRY4T.js.map → chunk-N4PYB235.js.map} +0 -0
  382. /package/dist/{chunk-S3YM4SZQ.js.map → chunk-N7QV3CMX.js.map} +0 -0
  383. /package/dist/{chunk-AQK54Q7O.js.map → chunk-NYKIUQL6.js.map} +0 -0
  384. /package/dist/{chunk-NE6PHPLG.js.map → chunk-OK52IY3W.js.map} +0 -0
  385. /package/dist/{chunk-6TT6HRE4.js.map → chunk-P2ODTYOF.js.map} +0 -0
  386. /package/dist/{chunk-W4AOR52H.js.map → chunk-PEBHPCX2.js.map} +0 -0
  387. /package/dist/{chunk-VYCOJKSX.js.map → chunk-PO7NXNGC.js.map} +0 -0
  388. /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
  389. /package/dist/{chunk-MQJL6CDZ.js.map → chunk-QAW55ZHJ.js.map} +0 -0
  390. /package/dist/{chunk-QVS22WTO.js.map → chunk-QI7K7BZ5.js.map} +0 -0
  391. /package/dist/{chunk-NE7I2RCT.js.map → chunk-R3X2T2LP.js.map} +0 -0
  392. /package/dist/{chunk-S7GCT7NU.js.map → chunk-RBITPCMK.js.map} +0 -0
  393. /package/dist/{chunk-BJRAELDH.js.map → chunk-SCXURCVT.js.map} +0 -0
  394. /package/dist/{chunk-BFO3IR56.js.map → chunk-SWBC3UER.js.map} +0 -0
  395. /package/dist/{chunk-YRLHEEQT.js.map → chunk-U6VC6RP3.js.map} +0 -0
  396. /package/dist/{chunk-MOQPEFLN.js.map → chunk-UP75KL3L.js.map} +0 -0
  397. /package/dist/{chunk-D5F7TKMH.js.map → chunk-V4JZCTMK.js.map} +0 -0
  398. /package/dist/{chunk-QEV26L2F.js.map → chunk-VALKBYBN.js.map} +0 -0
  399. /package/dist/{chunk-7LCGFUMB.js.map → chunk-VDX2J7OX.js.map} +0 -0
  400. /package/dist/{chunk-TDYAIXHK.js.map → chunk-VVX5PZFS.js.map} +0 -0
  401. /package/dist/{chunk-6NQ4LSMS.js.map → chunk-W3XXFPRI.js.map} +0 -0
  402. /package/dist/{chunk-4IIMMZZK.js.map → chunk-WKY7N3L7.js.map} +0 -0
  403. /package/dist/{chunk-VVDWZRZG.js.map → chunk-X5SHE2O3.js.map} +0 -0
  404. /package/dist/{chunk-NR2ASHBL.js.map → chunk-XOV7NRY5.js.map} +0 -0
  405. /package/dist/{chunk-6L3PBSAR.js.map → chunk-YJ7MW627.js.map} +0 -0
  406. /package/dist/{chunk-LQG5O5EP.js.map → chunk-Z3O53WZR.js.map} +0 -0
  407. /package/dist/{chunk-FB64XE3R.js.map → chunk-Z5LP6ILP.js.map} +0 -0
  408. /package/dist/{chunk-VKQI47DJ.js.map → chunk-Z6EZCN6Z.js.map} +0 -0
  409. /package/dist/{chunk-V2ES4WCZ.js.map → chunk-ZZZ4I455.js.map} +0 -0
  410. /package/dist/{graph-edge-decay-KQGS3L3B.js.map → embedding-generation-lock.js.map} +0 -0
  411. /package/dist/{resolution-DNX7FO7A.js.map → embedding-index-storage.js.map} +0 -0
  412. /package/dist/{state-ITXJKXRE.js.map → graph-edge-decay-MKIRZ762.js.map} +0 -0
  413. /package/dist/{tui-55UJMJX7.js.map → offline-sync-embedding-generation.js.map} +0 -0
  414. /package/dist/{trace-ZFVRH4GO.js.map → trace-LXXCMZJA.js.map} +0 -0
@@ -246,4 +246,4 @@ export {
246
246
  decryptCapsuleFile,
247
247
  decryptCapsuleFileInMemory
248
248
  };
249
- //# sourceMappingURL=chunk-X7Y7WX73.js.map
249
+ //# sourceMappingURL=chunk-DQEMWVMT.js.map
@@ -1,15 +1,22 @@
1
+ import {
2
+ resolveSafeArchiveTarget
3
+ } from "./chunk-GCGJW34D.js";
4
+ import {
5
+ isCensusMtimeMs
6
+ } from "./chunk-LQWOFU6L.js";
1
7
  import {
2
8
  throwIfAborted
3
9
  } from "./chunk-BTTPKDIL.js";
4
10
  import {
5
11
  MAGIC_HEADER_SIZE,
6
12
  isEncryptedFile
7
- } from "./chunk-JN72EPOE.js";
13
+ } from "./chunk-MAAL6OZV.js";
8
14
 
9
15
  // src/offline-sync-file-io.ts
10
16
  import { createHash } from "crypto";
11
17
  import { createReadStream } from "fs";
12
18
  import { open } from "fs/promises";
19
+ import { lstat, utimes } from "fs/promises";
13
20
  async function shouldExcludeOfflineSyncFile(excludeFile, target) {
14
21
  return excludeFile ? await excludeFile(target) : false;
15
22
  }
@@ -54,12 +61,51 @@ async function plainFileDigest(filePath) {
54
61
  }
55
62
  return hash.digest("hex");
56
63
  }
64
+ var SYNC_INTERNAL_DIR = ".offline-sync";
65
+ var OFFLINE_SYNC_FAST_BASE_MTIME_TOLERANCE_MS = 1e3;
66
+ function assertNonNegativeFinite(value, field) {
67
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
68
+ throw new Error(`${field} must be a non-negative finite number`);
69
+ }
70
+ return value;
71
+ }
72
+ function assertOfflineSyncMtimeMs(value, field) {
73
+ const mtimeMs = assertNonNegativeFinite(value, field);
74
+ if (!isCensusMtimeMs(mtimeMs)) {
75
+ throw new Error(`${field} must be within JavaScript Date range`);
76
+ }
77
+ return mtimeMs;
78
+ }
79
+ async function setSafeFileMtime(root, relPath, mtimeMs) {
80
+ if (mtimeMs === void 0) return true;
81
+ const target = await resolveSafeArchiveTarget(root, relPath);
82
+ const targetStat = await lstat(target).catch((error) => {
83
+ if (error.code === "ENOENT") return null;
84
+ throw error;
85
+ });
86
+ if (!targetStat) return false;
87
+ if (targetStat.isSymbolicLink()) {
88
+ throw new Error(`offline sync target is a symlink: ${relPath}`);
89
+ }
90
+ const targetMtimeMs = assertOfflineSyncMtimeMs(mtimeMs, "mtimeMs");
91
+ if (Math.abs(targetStat.mtimeMs - targetMtimeMs) <= OFFLINE_SYNC_FAST_BASE_MTIME_TOLERANCE_MS) {
92
+ return true;
93
+ }
94
+ const mtime = new Date(targetMtimeMs);
95
+ await utimes(target, mtime, mtime);
96
+ return true;
97
+ }
57
98
 
58
99
  export {
59
100
  shouldExcludeOfflineSyncFile,
60
101
  sha256OfflineSyncFile,
61
102
  isEncryptedOfflineSyncFile,
62
103
  readPlainOfflineSyncFileChunk,
63
- plainFileDigest
104
+ plainFileDigest,
105
+ SYNC_INTERNAL_DIR,
106
+ OFFLINE_SYNC_FAST_BASE_MTIME_TOLERANCE_MS,
107
+ assertNonNegativeFinite,
108
+ assertOfflineSyncMtimeMs,
109
+ setSafeFileMtime
64
110
  };
65
- //# sourceMappingURL=chunk-3BTFBQLO.js.map
111
+ //# sourceMappingURL=chunk-EFHNFTWB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/offline-sync-file-io.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { open } from \"node:fs/promises\";\nimport { throwIfAborted } from \"./abort-error.js\";\nimport { MAGIC_HEADER_SIZE, isEncryptedFile } from \"./secure-store/secure-fs.js\";\n\nexport interface OfflineSyncFileTarget {\n root: string;\n path: string;\n filePath: string;\n}\n\nexport type OfflineSyncExcludeFile = (target: OfflineSyncFileTarget) => boolean | Promise<boolean>;\nexport async function shouldExcludeOfflineSyncFile(\n excludeFile: OfflineSyncExcludeFile | undefined,\n target: OfflineSyncFileTarget\n): Promise<boolean> {\n return excludeFile ? await excludeFile(target) : false;\n}\n\nexport async function sha256OfflineSyncFile(\n filePath: string,\n signal?: AbortSignal\n): Promise<{ sha256: string; bytes: number }> {\n const hash = createHash(\"sha256\");\n let bytes = 0;\n for await (const chunk of createReadStream(filePath)) {\n throwIfAborted(signal, \"offline sync request aborted\");\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n hash.update(buffer);\n bytes += buffer.length;\n }\n throwIfAborted(signal, \"offline sync request aborted\");\n return { sha256: hash.digest(\"hex\"), bytes };\n}\n\nexport async function isEncryptedOfflineSyncFile(filePath: string): Promise<boolean> {\n const handle = await open(filePath, \"r\");\n try {\n const header = Buffer.alloc(MAGIC_HEADER_SIZE);\n const { bytesRead } = await handle.read(header, 0, header.length, 0);\n return bytesRead >= MAGIC_HEADER_SIZE && isEncryptedFile(header);\n } finally {\n await handle.close();\n }\n}\n\nexport async function readPlainOfflineSyncFileChunk(options: {\n filePath: string;\n offset: number;\n length: number;\n bytes: number;\n}): Promise<Buffer> {\n const chunkBytes = Math.min(options.length, options.bytes - options.offset);\n const chunk = Buffer.alloc(chunkBytes);\n if (chunkBytes === 0) return chunk;\n const handle = await open(options.filePath, \"r\");\n try {\n const { bytesRead } = await handle.read(chunk, 0, chunk.length, options.offset);\n return bytesRead === chunk.length ? chunk : chunk.subarray(0, bytesRead);\n } finally {\n await handle.close();\n }\n}\n\n/** Streamed whole-file sha256 for plain-file chunk reads — the value the\n * file-content response contract exposes as x-remnic-file-sha256. Deliberately\n * UNCACHED: identity keys like (path, size, mtimeMs) are spoofable (a rewrite\n * that preserves size and mtime would serve a stale digest, defeating the\n * uploader's verify-before-idempotent-skip check). One bounded-memory hash\n * pass per chunk request; content reads stay windowed. */\nexport async function plainFileDigest(filePath: string): Promise<string> {\n const hash = createHash(\"sha256\");\n for await (const piece of createReadStream(filePath)) {\n hash.update(piece as Buffer);\n }\n return hash.digest(\"hex\");\n}\n\nimport { lstat, utimes } from \"node:fs/promises\";\nimport { isCensusMtimeMs } from \"./census-validation.js\";\nimport { resolveSafeArchiveTarget, type SafeArchiveRoot } from \"./transfer/fs-utils.js\";\n\n/** Sync-internal directory spooling partial uploads and coordination state. */\nexport const SYNC_INTERNAL_DIR = \".offline-sync\";\n\nexport const OFFLINE_SYNC_FAST_BASE_MTIME_TOLERANCE_MS = 1_000;\n\nexport function assertNonNegativeFinite(value: unknown, field: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`${field} must be a non-negative finite number`);\n }\n return value;\n}\n\nexport function assertOfflineSyncMtimeMs(value: unknown, field: string): number {\n const mtimeMs = assertNonNegativeFinite(value, field);\n if (!isCensusMtimeMs(mtimeMs)) {\n throw new Error(`${field} must be within JavaScript Date range`);\n }\n return mtimeMs;\n}\n\nexport async function setSafeFileMtime(\n root: SafeArchiveRoot,\n relPath: string,\n mtimeMs: number | undefined,\n): Promise<boolean> {\n if (mtimeMs === undefined) return true;\n const target = await resolveSafeArchiveTarget(root, relPath);\n const targetStat = await lstat(target).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (!targetStat) return false;\n if (targetStat.isSymbolicLink()) {\n throw new Error(`offline sync target is a symlink: ${relPath}`);\n }\n const targetMtimeMs = assertOfflineSyncMtimeMs(mtimeMs, \"mtimeMs\");\n if (Math.abs(targetStat.mtimeMs - targetMtimeMs) <= OFFLINE_SYNC_FAST_BASE_MTIME_TOLERANCE_MS) {\n return true;\n }\n const mtime = new Date(targetMtimeMs);\n await utimes(target, mtime, mtime);\n return true;\n}\n"],"mappings":"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","names":[]}
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-FEHIOYML.js";
8
8
  import {
9
9
  composeMemoryEnvelope
10
- } from "./chunk-GDYU6VF4.js";
10
+ } from "./chunk-5AYUHSAU.js";
11
11
  import {
12
12
  displayErrorDetail
13
13
  } from "./chunk-RL6NEVXT.js";
@@ -1463,4 +1463,4 @@ export {
1463
1463
  serializeDecisionRecord,
1464
1464
  parseDecisionRecord
1465
1465
  };
1466
- //# sourceMappingURL=chunk-C3QXITIP.js.map
1466
+ //# sourceMappingURL=chunk-EQUD7FP4.js.map
@@ -0,0 +1,218 @@
1
+ import {
2
+ SYNC_INTERNAL_DIR,
3
+ setSafeFileMtime
4
+ } from "./chunk-EFHNFTWB.js";
5
+ import {
6
+ resolveSafeArchiveTarget
7
+ } from "./chunk-GCGJW34D.js";
8
+
9
+ // src/offline-sync-upload-staging.ts
10
+ import { createHash, randomUUID } from "crypto";
11
+ import { lstat, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from "fs/promises";
12
+ import path from "path";
13
+ var OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS = 24 * 60 * 60 * 1e3;
14
+ function hashText(value) {
15
+ return createHash("sha256").update(value).digest("hex");
16
+ }
17
+ function offlineUploadRelPath(options) {
18
+ const key = hashText([options.sourceId, options.relPath, options.sha256, String(options.bytes)].join("\0"));
19
+ return `${SYNC_INTERNAL_DIR}/uploads/${key}.part`;
20
+ }
21
+ async function offlineUploadPath(root, options) {
22
+ const relPath = offlineUploadRelPath(options);
23
+ return {
24
+ kind: "single",
25
+ relPath,
26
+ filePath: await resolveSafeArchiveTarget(root, relPath)
27
+ };
28
+ }
29
+ async function offlineUploadChunkPath(root, options) {
30
+ const uploadRelPath = offlineUploadRelPath(options);
31
+ const relPath = `${uploadRelPath}/${String(options.offset).padStart(20, "0")}.part`;
32
+ return {
33
+ kind: "chunks",
34
+ relPath,
35
+ filePath: await resolveSafeArchiveTarget(root, relPath)
36
+ };
37
+ }
38
+ async function writeOfflineUploadChunk(options) {
39
+ if ((options.writeFile || options.writeStagingFile) && !options.readFile) {
40
+ throw new Error("offline sync upload chunk storage hooks require readFile");
41
+ }
42
+ const uploadRoot = {
43
+ ...await offlineUploadPath(options.root, options),
44
+ kind: "chunks"
45
+ };
46
+ if (options.offset === 0) {
47
+ await rm(uploadRoot.filePath, { recursive: true, force: true }).catch(() => {
48
+ });
49
+ } else {
50
+ const existing = await stat(uploadRoot.filePath).catch((error) => {
51
+ if (error.code === "ENOENT") return null;
52
+ throw error;
53
+ });
54
+ if (!existing || !existing.isDirectory()) {
55
+ throw new Error(`offline sync upload is missing initial chunk for ${options.relPath}`);
56
+ }
57
+ }
58
+ const chunk = await offlineUploadChunkPath(options.root, { ...options, offset: options.offset });
59
+ const writeStagingFile = options.writeStagingFile ?? options.writeFile;
60
+ if (writeStagingFile) {
61
+ await writeOfflineUploadContent({
62
+ root: options.root,
63
+ relPath: chunk.relPath,
64
+ filePath: chunk.filePath,
65
+ content: options.content,
66
+ writeFile: writeStagingFile
67
+ });
68
+ return uploadRoot;
69
+ }
70
+ await mkdir(path.dirname(chunk.filePath), { recursive: true });
71
+ const existingChunk = await lstat(chunk.filePath).catch((error) => {
72
+ if (error.code === "ENOENT") return null;
73
+ throw error;
74
+ });
75
+ if (existingChunk?.isSymbolicLink()) {
76
+ throw new Error(`offline sync upload chunk is a symlink: ${chunk.relPath}`);
77
+ }
78
+ await writeFile(chunk.filePath, options.content, { mode: 384 });
79
+ return uploadRoot;
80
+ }
81
+ async function pruneOfflineUploadStaging(root) {
82
+ const uploadsRelPath = `${SYNC_INTERNAL_DIR}/uploads`;
83
+ const uploadsPath = await resolveSafeArchiveTarget(root, uploadsRelPath);
84
+ const entries = await readdir(uploadsPath, { withFileTypes: true }).catch((error) => {
85
+ if (error.code === "ENOENT") return [];
86
+ throw error;
87
+ });
88
+ const now = Date.now();
89
+ await Promise.all(
90
+ entries.map(async (entry) => {
91
+ if (!/^[a-f0-9]{64}\.part$/i.test(entry.name)) return;
92
+ const relPath = `${uploadsRelPath}/${entry.name}`;
93
+ const filePath = await resolveSafeArchiveTarget(root, relPath);
94
+ const info = await lstat(filePath).catch((error) => {
95
+ if (error.code === "ENOENT") return null;
96
+ throw error;
97
+ });
98
+ if (!info) return;
99
+ if (now - info.mtimeMs <= OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS) return;
100
+ await rm(filePath, { recursive: true, force: true });
101
+ })
102
+ );
103
+ }
104
+ async function* readOfflineUploadStagingChunks(options) {
105
+ if (options.upload.kind === "single") {
106
+ yield await readOfflineUploadContent({
107
+ root: options.root,
108
+ relPath: options.upload.relPath,
109
+ filePath: options.upload.filePath,
110
+ readFile: options.readFile
111
+ });
112
+ return;
113
+ }
114
+ const entries = await readdir(options.upload.filePath);
115
+ const chunkNames = entries.filter((entry) => /^\d{20}\.part$/.test(entry)).sort();
116
+ if (chunkNames.length === 0) {
117
+ throw new Error(`offline sync upload is missing chunks for ${options.upload.relPath}`);
118
+ }
119
+ let expectedOffset = 0;
120
+ for (const chunkName of chunkNames) {
121
+ const offset = Number(chunkName.slice(0, 20));
122
+ if (!Number.isSafeInteger(offset) || offset !== expectedOffset) {
123
+ throw new Error(
124
+ `offline sync upload offset mismatch for ${options.upload.relPath}: expected ${expectedOffset}, got ${offset}`
125
+ );
126
+ }
127
+ const relPath = `${options.upload.relPath}/${chunkName}`;
128
+ const filePath = await resolveSafeArchiveTarget(options.root, relPath);
129
+ const content = await readOfflineUploadContent({
130
+ root: options.root,
131
+ relPath,
132
+ filePath,
133
+ readFile: options.readFile
134
+ });
135
+ expectedOffset += content.length;
136
+ yield content;
137
+ }
138
+ }
139
+ async function digestOfflineUploadStagingContent(options) {
140
+ const hash = createHash("sha256");
141
+ let bytes = 0;
142
+ for await (const chunk of readOfflineUploadStagingChunks(options)) {
143
+ hash.update(chunk);
144
+ bytes += chunk.length;
145
+ }
146
+ return { sha256: hash.digest("hex"), bytes };
147
+ }
148
+ async function writeSafeFileFromUpload(root, relPath, upload, readFile2, writeFileChunks, mtimeMs) {
149
+ const target = await resolveSafeArchiveTarget(root, relPath);
150
+ const chunks = readOfflineUploadStagingChunks({ root, upload, readFile: readFile2 });
151
+ if (writeFileChunks) {
152
+ await writeFileChunks({ root: root.abs, path: relPath, filePath: target, chunks });
153
+ await setSafeFileMtime(root, relPath, mtimeMs);
154
+ return;
155
+ }
156
+ await mkdir(path.dirname(target), { recursive: true });
157
+ const tmp = path.join(path.dirname(target), `.remnic-sync.${process.pid}.${randomUUID()}.tmp`);
158
+ const handle = await open(tmp, "w", 384);
159
+ try {
160
+ for await (const chunk of chunks) {
161
+ if (chunk.length > 0) await handle.write(chunk);
162
+ }
163
+ await handle.close();
164
+ const targetStat = await lstat(target).catch((error) => {
165
+ if (error.code === "ENOENT") return null;
166
+ throw error;
167
+ });
168
+ if (targetStat?.isSymbolicLink()) {
169
+ throw new Error(`offline sync target is a symlink: ${relPath}`);
170
+ }
171
+ await rename(tmp, target);
172
+ await setSafeFileMtime(root, relPath, mtimeMs);
173
+ } catch (error) {
174
+ await handle.close().catch(() => {
175
+ });
176
+ await unlink(tmp).catch(() => {
177
+ });
178
+ throw error;
179
+ }
180
+ }
181
+ async function cleanupOfflineUpload(upload) {
182
+ if (upload.kind === "chunks") {
183
+ await rm(upload.filePath, { recursive: true, force: true });
184
+ return;
185
+ }
186
+ await unlink(upload.filePath).catch((error) => {
187
+ if (error.code === "ENOENT") return;
188
+ throw error;
189
+ });
190
+ }
191
+ async function readOfflineUploadContent(options) {
192
+ if (options.readFile) {
193
+ return options.readFile({
194
+ root: options.root.abs,
195
+ path: options.relPath,
196
+ filePath: options.filePath
197
+ });
198
+ }
199
+ return readFile(options.filePath);
200
+ }
201
+ async function writeOfflineUploadContent(options) {
202
+ await options.writeFile({
203
+ root: options.root.abs,
204
+ path: options.relPath,
205
+ filePath: options.filePath,
206
+ content: options.content
207
+ });
208
+ }
209
+
210
+ export {
211
+ hashText,
212
+ writeOfflineUploadChunk,
213
+ pruneOfflineUploadStaging,
214
+ digestOfflineUploadStagingContent,
215
+ writeSafeFileFromUpload,
216
+ cleanupOfflineUpload
217
+ };
218
+ //# sourceMappingURL=chunk-ETUZFFPU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/offline-sync-upload-staging.ts"],"sourcesContent":["// Offline-sync upload staging: chunked upload spool under\n// `.offline-sync/uploads/` (issue #2033). Extracted from offline-sync.ts so\n// the god-file line-count ratchet does not grow; behavior is unchanged.\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { lstat, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { SYNC_INTERNAL_DIR, setSafeFileMtime } from \"./offline-sync-file-io.js\";\nimport type { OfflineSyncFileTarget } from \"./offline-sync-file-io.js\";\nimport type {\n OfflineSyncFileStagingWriteTarget,\n OfflineSyncFileWriteChunksTarget,\n OfflineSyncFileWriteTarget,\n} from \"./offline-sync.js\";\nimport { type SafeArchiveRoot, resolveSafeArchiveTarget } from \"./transfer/fs-utils.js\";\n\nconst OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\nexport function hashText(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\ninterface OfflineUploadStaging {\n kind: \"single\" | \"chunks\";\n relPath: string;\n filePath: string;\n}\n\nfunction offlineUploadRelPath(options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n}): string {\n const key = hashText([options.sourceId, options.relPath, options.sha256, String(options.bytes)].join(\"\\0\"));\n return `${SYNC_INTERNAL_DIR}/uploads/${key}.part`;\n}\n\nasync function offlineUploadPath(\n root: SafeArchiveRoot,\n options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n }\n): Promise<OfflineUploadStaging> {\n const relPath = offlineUploadRelPath(options);\n return {\n kind: \"single\",\n relPath,\n filePath: await resolveSafeArchiveTarget(root, relPath),\n };\n}\n\nasync function offlineUploadChunkPath(\n root: SafeArchiveRoot,\n options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n offset: number;\n }\n): Promise<OfflineUploadStaging> {\n const uploadRelPath = offlineUploadRelPath(options);\n const relPath = `${uploadRelPath}/${String(options.offset).padStart(20, \"0\")}.part`;\n return {\n kind: \"chunks\",\n relPath,\n filePath: await resolveSafeArchiveTarget(root, relPath),\n };\n}\n\nexport async function writeOfflineUploadChunk(options: {\n root: SafeArchiveRoot;\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n offset: number;\n content: Buffer;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n writeFile?: (target: OfflineSyncFileWriteTarget) => Promise<void>;\n writeStagingFile?: (target: OfflineSyncFileStagingWriteTarget) => Promise<void>;\n}): Promise<OfflineUploadStaging> {\n if ((options.writeFile || options.writeStagingFile) && !options.readFile) {\n throw new Error(\"offline sync upload chunk storage hooks require readFile\");\n }\n const uploadRoot = {\n ...(await offlineUploadPath(options.root, options)),\n kind: \"chunks\" as const,\n };\n if (options.offset === 0) {\n await rm(uploadRoot.filePath, { recursive: true, force: true }).catch(() => {});\n } else {\n const existing = await stat(uploadRoot.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (!existing || !existing.isDirectory()) {\n throw new Error(`offline sync upload is missing initial chunk for ${options.relPath}`);\n }\n }\n const chunk = await offlineUploadChunkPath(options.root, { ...options, offset: options.offset });\n\n const writeStagingFile = options.writeStagingFile ?? options.writeFile;\n if (writeStagingFile) {\n // Storage-backed services provide these hooks so secure-store deployments\n // keep staged partial uploads encrypted at rest without mutating indexes.\n await writeOfflineUploadContent({\n root: options.root,\n relPath: chunk.relPath,\n filePath: chunk.filePath,\n content: options.content,\n writeFile: writeStagingFile,\n });\n return uploadRoot;\n }\n\n await mkdir(path.dirname(chunk.filePath), { recursive: true });\n const existingChunk = await lstat(chunk.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (existingChunk?.isSymbolicLink()) {\n throw new Error(`offline sync upload chunk is a symlink: ${chunk.relPath}`);\n }\n await writeFile(chunk.filePath, options.content, { mode: 0o600 });\n return uploadRoot;\n}\n\nexport async function pruneOfflineUploadStaging(root: SafeArchiveRoot): Promise<void> {\n const uploadsRelPath = `${SYNC_INTERNAL_DIR}/uploads`;\n const uploadsPath = await resolveSafeArchiveTarget(root, uploadsRelPath);\n const entries = await readdir(uploadsPath, { withFileTypes: true }).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw error;\n });\n const now = Date.now();\n await Promise.all(\n entries.map(async (entry) => {\n if (!/^[a-f0-9]{64}\\.part$/i.test(entry.name)) return;\n const relPath = `${uploadsRelPath}/${entry.name}`;\n const filePath = await resolveSafeArchiveTarget(root, relPath);\n const info = await lstat(filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (!info) return;\n if (now - info.mtimeMs <= OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS) return;\n await rm(filePath, { recursive: true, force: true });\n })\n );\n}\n\nasync function* readOfflineUploadStagingChunks(options: {\n root: SafeArchiveRoot;\n upload: OfflineUploadStaging;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): AsyncGenerator<Buffer> {\n if (options.upload.kind === \"single\") {\n yield await readOfflineUploadContent({\n root: options.root,\n relPath: options.upload.relPath,\n filePath: options.upload.filePath,\n readFile: options.readFile,\n });\n return;\n }\n\n const entries = await readdir(options.upload.filePath);\n const chunkNames = entries.filter((entry) => /^\\d{20}\\.part$/.test(entry)).sort();\n if (chunkNames.length === 0) {\n throw new Error(`offline sync upload is missing chunks for ${options.upload.relPath}`);\n }\n let expectedOffset = 0;\n for (const chunkName of chunkNames) {\n const offset = Number(chunkName.slice(0, 20));\n if (!Number.isSafeInteger(offset) || offset !== expectedOffset) {\n throw new Error(\n `offline sync upload offset mismatch for ${options.upload.relPath}: expected ${expectedOffset}, got ${offset}`\n );\n }\n const relPath = `${options.upload.relPath}/${chunkName}`;\n const filePath = await resolveSafeArchiveTarget(options.root, relPath);\n const content = await readOfflineUploadContent({\n root: options.root,\n relPath,\n filePath,\n readFile: options.readFile,\n });\n expectedOffset += content.length;\n yield content;\n }\n}\n\nexport async function digestOfflineUploadStagingContent(options: {\n root: SafeArchiveRoot;\n upload: OfflineUploadStaging;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): Promise<{ sha256: string; bytes: number }> {\n const hash = createHash(\"sha256\");\n let bytes = 0;\n for await (const chunk of readOfflineUploadStagingChunks(options)) {\n hash.update(chunk);\n bytes += chunk.length;\n }\n return { sha256: hash.digest(\"hex\"), bytes };\n}\n\nexport async function writeSafeFileFromUpload(\n root: SafeArchiveRoot,\n relPath: string,\n upload: OfflineUploadStaging,\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>,\n writeFileChunks?: (target: OfflineSyncFileWriteChunksTarget) => Promise<void>,\n mtimeMs?: number\n): Promise<void> {\n const target = await resolveSafeArchiveTarget(root, relPath);\n const chunks = readOfflineUploadStagingChunks({ root, upload, readFile });\n if (writeFileChunks) {\n await writeFileChunks({ root: root.abs, path: relPath, filePath: target, chunks });\n await setSafeFileMtime(root, relPath, mtimeMs);\n return;\n }\n\n await mkdir(path.dirname(target), { recursive: true });\n const tmp = path.join(path.dirname(target), `.remnic-sync.${process.pid}.${randomUUID()}.tmp`);\n const handle = await open(tmp, \"w\", 0o600);\n try {\n for await (const chunk of chunks) {\n if (chunk.length > 0) await handle.write(chunk);\n }\n await handle.close();\n const targetStat = await lstat(target).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (targetStat?.isSymbolicLink()) {\n throw new Error(`offline sync target is a symlink: ${relPath}`);\n }\n await rename(tmp, target);\n await setSafeFileMtime(root, relPath, mtimeMs);\n } catch (error) {\n await handle.close().catch(() => {});\n await unlink(tmp).catch(() => {});\n throw error;\n }\n}\n\nexport async function cleanupOfflineUpload(upload: OfflineUploadStaging): Promise<void> {\n if (upload.kind === \"chunks\") {\n await rm(upload.filePath, { recursive: true, force: true });\n return;\n }\n await unlink(upload.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return;\n throw error;\n });\n}\n\nasync function readOfflineUploadContent(options: {\n root: SafeArchiveRoot;\n relPath: string;\n filePath: string;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): Promise<Buffer> {\n if (options.readFile) {\n return options.readFile({\n root: options.root.abs,\n path: options.relPath,\n filePath: options.filePath,\n });\n }\n return readFile(options.filePath);\n}\n\nasync function writeOfflineUploadContent(options: {\n root: SafeArchiveRoot;\n relPath: string;\n filePath: string;\n content: Buffer;\n writeFile: (target: OfflineSyncFileWriteTarget) => Promise<void>;\n}): Promise<void> {\n await options.writeFile({\n root: options.root.abs,\n path: options.relPath,\n filePath: options.filePath,\n content: options.content,\n });\n}\n"],"mappings":"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","names":["readFile"]}
@@ -1,9 +1,9 @@
1
- import {
2
- diffGraphSnapshots
3
- } from "./chunk-AUDJPF4N.js";
4
1
  import {
5
2
  graphSnapshotFromMemoryDir
6
3
  } from "./chunk-44442YCH.js";
4
+ import {
5
+ diffGraphSnapshots
6
+ } from "./chunk-AUDJPF4N.js";
7
7
 
8
8
  // src/dashboard-runtime.ts
9
9
  import { createHash, timingSafeEqual } from "crypto";
@@ -370,4 +370,4 @@ var GraphDashboardServer = class {
370
370
  export {
371
371
  GraphDashboardServer
372
372
  };
373
- //# sourceMappingURL=chunk-YNDLCWXS.js.map
373
+ //# sourceMappingURL=chunk-EZ25VE3G.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-FRCESVV6.js";
3
+ } from "./chunk-STEOT4DI.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
- } from "./chunk-GDYU6VF4.js";
6
+ } from "./chunk-5AYUHSAU.js";
7
7
  import {
8
8
  isErrnoCode
9
9
  } from "./chunk-KNA3BXXL.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-EQ6YOIKO.js.map
549
+ //# sourceMappingURL=chunk-FJLQXMTU.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  canonicalCategoryForAlias,
3
3
  categoryAliasCoercion
4
- } from "./chunk-3C3J243X.js";
4
+ } from "./chunk-LW3HKRL7.js";
5
5
 
6
6
  // src/access-observe-write-category.ts
7
7
  function splitCanonicalWriteRequest(request) {
@@ -22,4 +22,4 @@ function splitCanonicalWriteRequest(request) {
22
22
  export {
23
23
  splitCanonicalWriteRequest
24
24
  };
25
- //# sourceMappingURL=chunk-SRZW7FNU.js.map
25
+ //# sourceMappingURL=chunk-FKD656D2.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  gatherConsoleState
3
- } from "./chunk-G6SVZWPB.js";
3
+ } from "./chunk-PZX3AQLF.js";
4
4
 
5
5
  // src/console/tui.ts
6
6
  var ANSI_CLEAR_HOME = "\x1B[2J\x1B[H";
@@ -242,4 +242,4 @@ export {
242
242
  renderFrame,
243
243
  stripAnsi
244
244
  };
245
- //# sourceMappingURL=chunk-CLXTDOKV.js.map
245
+ //# sourceMappingURL=chunk-FUNBJQYR.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-345MEMRU.js";
4
4
  import {
5
5
  MAGIC_BYTES
6
- } from "./chunk-JN72EPOE.js";
6
+ } from "./chunk-MAAL6OZV.js";
7
7
 
8
8
  // src/okf/lint.ts
9
9
  import fs from "fs";
@@ -202,4 +202,4 @@ export {
202
202
  publishBundle,
203
203
  rejectSymlinkPath
204
204
  };
205
- //# sourceMappingURL=chunk-CLSYE5OZ.js.map
205
+ //# sourceMappingURL=chunk-G2STTRYB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isNamespaceKind
3
- } from "./chunk-6TT6HRE4.js";
3
+ } from "./chunk-P2ODTYOF.js";
4
4
  import {
5
5
  EngramAccessInputError
6
6
  } from "./chunk-3MUKQQ7A.js";
@@ -40,4 +40,4 @@ export {
40
40
  positiveIntQueryParam,
41
41
  optionalNamespaceKindQueryParam
42
42
  };
43
- //# sourceMappingURL=chunk-KP7SANCF.js.map
43
+ //# sourceMappingURL=chunk-GWM6T5EQ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveCorpusNamespaceRoots
3
- } from "./chunk-4IEOGIPB.js";
3
+ } from "./chunk-5MNUBT7T.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
6
  } from "./chunk-IG747LRN.js";
@@ -200,4 +200,4 @@ async function readAggregateExtractionWatermark(options) {
200
200
  export {
201
201
  readAggregateExtractionWatermark
202
202
  };
203
- //# sourceMappingURL=chunk-UA5DX5C3.js.map
203
+ //# sourceMappingURL=chunk-GZDTVYK2.js.map
@@ -15,10 +15,10 @@ import {
15
15
  PRE_ACTION_GATE_DEFAULT_TIMEOUT_MS,
16
16
  normalizeActionIntent,
17
17
  sanitizePayloadString
18
- } from "./chunk-LQG5O5EP.js";
18
+ } from "./chunk-Z3O53WZR.js";
19
19
  import {
20
20
  parseSubjectRuntimeConfig
21
- } from "./chunk-WIKO4SCR.js";
21
+ } from "./chunk-LHRQBMJN.js";
22
22
  import {
23
23
  parseRecallStandingBlock,
24
24
  parseStandingBlockFreshDays,
@@ -129,7 +129,7 @@ import {
129
129
  } from "./chunk-PQVCH2AE.js";
130
130
  import {
131
131
  STRUCTURED_ATTRIBUTE_LIMITS
132
- } from "./chunk-GDYU6VF4.js";
132
+ } from "./chunk-5AYUHSAU.js";
133
133
  import {
134
134
  parseConvergeConfig
135
135
  } from "./chunk-6MINUTGJ.js";
@@ -138,7 +138,7 @@ import {
138
138
  } from "./chunk-7RJUVTVF.js";
139
139
  import {
140
140
  parseOfflineSyncExcludes
141
- } from "./chunk-WQZZDN5M.js";
141
+ } from "./chunk-4NSLQ7EU.js";
142
142
  import {
143
143
  excludeSupportPassportPrivateMemories
144
144
  } from "./chunk-PWPIERBM.js";
@@ -5510,4 +5510,4 @@ export {
5510
5510
  VALID_MEMORY_CATEGORIES,
5511
5511
  parseConfig
5512
5512
  };
5513
- //# sourceMappingURL=chunk-3GQC3NMB.js.map
5513
+ //# sourceMappingURL=chunk-H56VY4BY.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-FRCESVV6.js";
6
+ } from "./chunk-STEOT4DI.js";
7
7
  import {
8
8
  assertInjectedStorageRooted
9
- } from "./chunk-JE334SIA.js";
9
+ } from "./chunk-22DYJLFN.js";
10
10
  import {
11
11
  MEMORY_LIFECYCLE_LEDGER_LOCK_STALE_MS,
12
12
  buildLifecycleEventsForMemory,
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-FFAZ2XFU.js";
29
29
  import {
30
30
  probeEncryptedRegularFileHeader
31
- } from "./chunk-JN72EPOE.js";
31
+ } from "./chunk-MAAL6OZV.js";
32
32
  import {
33
33
  isErrnoCode
34
34
  } from "./chunk-KNA3BXXL.js";
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-L6UZEAID.js.map
263
+ //# sourceMappingURL=chunk-H5BJWPUI.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SupportPassportError,
3
3
  getOperation
4
- } from "./chunk-FOH7AMMI.js";
4
+ } from "./chunk-QB57WIS6.js";
5
5
  import {
6
6
  abortError,
7
7
  isAbortError
@@ -499,4 +499,4 @@ export {
499
499
  buildSupportPassportPublicRequestHandler,
500
500
  composeSupportPassportExternalRequestHandlers
501
501
  };
502
- //# sourceMappingURL=chunk-YSJTCOHR.js.map
502
+ //# sourceMappingURL=chunk-HLB7GKGG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readAllEdges
3
- } from "./chunk-ICZQG4XE.js";
3
+ } from "./chunk-5FAGCOZD.js";
4
4
  import {
5
5
  readEdgeConfidence
6
6
  } from "./chunk-2LSZVONP.js";
@@ -162,4 +162,4 @@ export {
162
162
  parseGraphSnapshotSince,
163
163
  buildGraphSnapshot
164
164
  };
165
- //# sourceMappingURL=chunk-PUKTBULQ.js.map
165
+ //# sourceMappingURL=chunk-HWLIMQE2.js.map
@@ -43,19 +43,19 @@ import {
43
43
  } from "./chunk-AB3A7EFH.js";
44
44
  import {
45
45
  applyToolOutputSchemas
46
- } from "./chunk-MY2PLXSM.js";
46
+ } from "./chunk-MCTM4YPL.js";
47
47
  import {
48
48
  getOperation
49
- } from "./chunk-FOH7AMMI.js";
49
+ } from "./chunk-QB57WIS6.js";
50
50
  import {
51
51
  WHO_KNOWS_MCP_TOOLS
52
- } from "./chunk-CS52MFDV.js";
52
+ } from "./chunk-6UQFJULG.js";
53
53
  import {
54
54
  PROMOTION_CANDIDATES_MCP_TOOLS
55
- } from "./chunk-VYCOJKSX.js";
55
+ } from "./chunk-PO7NXNGC.js";
56
56
  import {
57
57
  validateRequest
58
- } from "./chunk-3C3J243X.js";
58
+ } from "./chunk-LW3HKRL7.js";
59
59
  import {
60
60
  assertOperationAllowed,
61
61
  capabilityAllowsOp,
@@ -4023,4 +4023,4 @@ export {
4023
4023
  MCP_MIGRATED_OPERATIONS,
4024
4024
  EngramMcpServer
4025
4025
  };
4026
- //# sourceMappingURL=chunk-CWHV574S.js.map
4026
+ //# sourceMappingURL=chunk-IOSZHHJC.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-6JMQR72P.js";
7
7
  import {
8
8
  StorageManager
9
- } from "./chunk-FRCESVV6.js";
9
+ } from "./chunk-STEOT4DI.js";
10
10
  import {
11
11
  normalizeEntityName
12
12
  } from "./chunk-YXZG5TVN.js";
@@ -962,4 +962,4 @@ export {
962
962
  resolveBriefingSaveDir,
963
963
  briefingFilename
964
964
  };
965
- //# sourceMappingURL=chunk-P2WZHLUF.js.map
965
+ //# sourceMappingURL=chunk-JVPWRNHA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  composeMemoryEnvelope
3
- } from "./chunk-GDYU6VF4.js";
3
+ } from "./chunk-5AYUHSAU.js";
4
4
  import {
5
5
  log
6
6
  } from "./chunk-3WCASNQZ.js";
@@ -17,4 +17,4 @@ function composeSalvagedEnvelope(label, input, ctx) {
17
17
  export {
18
18
  composeSalvagedEnvelope
19
19
  };
20
- //# sourceMappingURL=chunk-6ET2VII7.js.map
20
+ //# sourceMappingURL=chunk-JYG2334B.js.map