@remnic/core 9.65.8 → 9.66.0

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 (637) hide show
  1. package/dist/access-admin-ops-surface.d.ts +11 -12
  2. package/dist/access-admin-ops-surface.js +49 -46
  3. package/dist/access-authorization-probe.d.ts +11 -12
  4. package/dist/access-authorization-probe.js +50 -47
  5. package/dist/access-boundary.d.ts +11 -12
  6. package/dist/access-boundary.js +49 -46
  7. package/dist/access-citation-namespace.js +3 -3
  8. package/dist/access-cli.js +111 -106
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +1 -2
  11. package/dist/access-coding-context-resolution.js +2 -2
  12. package/dist/access-extraction-force-flush.d.ts +11 -12
  13. package/dist/access-extraction-force-flush.js +49 -46
  14. package/dist/access-health-types.d.ts +1 -2
  15. package/dist/access-http-lcm-compaction.d.ts +11 -12
  16. package/dist/access-http-lifecycle-flush.d.ts +11 -12
  17. package/dist/access-http-offline-stream.d.ts +11 -12
  18. package/dist/access-http-query.d.ts +2 -3
  19. package/dist/access-http-query.js +51 -48
  20. package/dist/access-http.d.ts +12 -13
  21. package/dist/access-http.js +68 -65
  22. package/dist/access-identity-continuity-surface.d.ts +9 -10
  23. package/dist/access-identity-continuity-surface.js +49 -46
  24. package/dist/access-lcm-surface.d.ts +11 -12
  25. package/dist/access-lcm-surface.js +49 -46
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp.d.ts +11 -12
  28. package/dist/access-mcp.js +62 -59
  29. package/dist/access-memory-search-fanout.d.ts +2 -3
  30. package/dist/{access-namespace-preflight-CpAOrS-9.d.ts → access-namespace-preflight-CLWUoMyW.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +3 -4
  32. package/dist/access-namespace-preflight.js +49 -46
  33. package/dist/access-observe-write-surface.d.ts +11 -12
  34. package/dist/access-observe-write-surface.js +49 -46
  35. package/dist/access-offline-manifest.d.ts +9 -10
  36. package/dist/access-offline-manifest.js +15 -15
  37. package/dist/access-operations-batch.js +54 -51
  38. package/dist/access-operations.d.ts +17 -18
  39. package/dist/access-operations.js +59 -56
  40. package/dist/access-recall-concurrency.d.ts +11 -12
  41. package/dist/access-recall-concurrency.js +49 -46
  42. package/dist/access-recall-response.d.ts +11 -12
  43. package/dist/access-recall-response.js +49 -46
  44. package/dist/access-recall-surface.d.ts +11 -12
  45. package/dist/access-recall-surface.js +49 -46
  46. package/dist/access-schema.d.ts +83 -83
  47. package/dist/access-schema.js +7 -7
  48. package/dist/{access-service-Diu61Cfv.d.ts → access-service-CEUE1Isj.d.ts} +66 -66
  49. package/dist/access-service-helpers.d.ts +11 -12
  50. package/dist/access-service.d.ts +11 -12
  51. package/dist/access-service.js +49 -46
  52. package/dist/access-surface-catalog.d.ts +11 -12
  53. package/dist/access-surface-catalog.js +53 -48
  54. package/dist/access-surface-catalog.js.map +1 -1
  55. package/dist/access-wearables-meetings-surface.d.ts +3 -4
  56. package/dist/action-confidence.d.ts +1 -2
  57. package/dist/active-memory-bridge.d.ts +1 -2
  58. package/dist/active-memory-bridge.js +2 -2
  59. package/dist/active-recall.d.ts +1 -2
  60. package/dist/active-recall.js +11 -11
  61. package/dist/ambient-provenance.d.ts +1 -2
  62. package/dist/artifact-search.d.ts +1 -2
  63. package/dist/{auto-sync-2YPITIWN.js → auto-sync-Q6Q2FVSC.js} +9 -9
  64. package/dist/behavior-learner.d.ts +1 -2
  65. package/dist/behavior-signals.d.ts +1 -2
  66. package/dist/bootstrap.d.ts +9 -10
  67. package/dist/briefing-window.d.ts +2 -3
  68. package/dist/briefing.d.ts +2 -3
  69. package/dist/briefing.js +23 -23
  70. package/dist/buffer-surprise-report.d.ts +1 -2
  71. package/dist/buffer-turn-helpers.d.ts +1 -2
  72. package/dist/buffer.d.ts +2 -3
  73. package/dist/buffer.js +20 -4
  74. package/dist/bulk-import/index.d.ts +3 -4
  75. package/dist/calibration.d.ts +1 -2
  76. package/dist/calibration.js +1 -1
  77. package/dist/capabilities.d.ts +1 -2
  78. package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
  79. package/dist/{catalog-9f-vEQLS.d.ts → catalog-D1HgugTA.d.ts} +1 -1
  80. package/dist/causal-behavior.d.ts +1 -2
  81. package/dist/causal-consolidation.d.ts +1 -2
  82. package/dist/causal-consolidation.js +24 -24
  83. package/dist/causal-trajectory-graph.d.ts +1 -2
  84. package/dist/{chunk-LEPOP46W.js → chunk-227UFSEQ.js} +4 -4
  85. package/dist/{chunk-NPFUNWNX.js → chunk-23CVL7HS.js} +2 -2
  86. package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
  87. package/dist/{chunk-MY2BC6UE.js → chunk-2LBAFHOQ.js} +11 -11
  88. package/dist/{chunk-AZMLH5UT.js → chunk-33MFRY25.js} +2 -2
  89. package/dist/{chunk-UEBDCMOO.js → chunk-3TSU662L.js} +3 -3
  90. package/dist/{chunk-CAMNRAJF.js → chunk-4FHRZD5T.js} +2 -2
  91. package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
  92. package/dist/chunk-4OFKZAJG.js.map +1 -0
  93. package/dist/{chunk-S5XOSTYM.js → chunk-4STAANV7.js} +3 -3
  94. package/dist/{chunk-LKYIOCWL.js → chunk-56IV4J5W.js} +546 -96
  95. package/dist/chunk-56IV4J5W.js.map +1 -0
  96. package/dist/{chunk-4F4AQFWL.js → chunk-6CEGSTBD.js} +10 -10
  97. package/dist/{chunk-JYSN42VN.js → chunk-6QDXA26G.js} +235 -181
  98. package/dist/chunk-6QDXA26G.js.map +1 -0
  99. package/dist/{chunk-MDD2RINF.js → chunk-6RUHELWR.js} +3 -3
  100. package/dist/{chunk-WNXYT4MK.js → chunk-72OIT7KS.js} +4 -4
  101. package/dist/{chunk-KQAFEZQX.js → chunk-7LCGFUMB.js} +4 -4
  102. package/dist/{chunk-SNOIKAHM.js → chunk-7UTDHQZ5.js} +3 -3
  103. package/dist/{chunk-5HK3CJAR.js → chunk-7XOG75AU.js} +3 -3
  104. package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
  105. package/dist/chunk-AJTG3CP7.js.map +1 -0
  106. package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
  107. package/dist/chunk-AL3UYZ5N.js.map +1 -0
  108. package/dist/{chunk-UPFNQJC7.js → chunk-CN4VKV3S.js} +2 -2
  109. package/dist/{chunk-PMVPCZJZ.js → chunk-CTCGHNWN.js} +6 -6
  110. package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
  111. package/dist/{chunk-XBGHAAKR.js → chunk-DDX6KIXF.js} +2 -2
  112. package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
  113. package/dist/{chunk-UENKPWCS.js → chunk-DMEHOEC7.js} +6 -6
  114. package/dist/{chunk-7KQB4EBS.js → chunk-DUAJKRR2.js} +2 -2
  115. package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
  116. package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
  117. package/dist/{chunk-SEEJOGQX.js → chunk-EFQCDJZ2.js} +4 -4
  118. package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
  119. package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
  120. package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
  121. package/dist/{chunk-PU56CXZA.js → chunk-EZSCW4EM.js} +2 -2
  122. package/dist/{chunk-HMZKGHMD.js → chunk-FESUGFIL.js} +3 -3
  123. package/dist/{chunk-3A2NJP2U.js → chunk-FKKGCGYL.js} +3 -3
  124. package/dist/{chunk-BWGCOLEL.js → chunk-FTTJRVB7.js} +2 -2
  125. package/dist/{chunk-ODU2CNNX.js → chunk-FYWLSFFS.js} +2 -2
  126. package/dist/{chunk-W2BAGGEW.js → chunk-GEJKYA7D.js} +33 -24
  127. package/dist/{chunk-W2BAGGEW.js.map → chunk-GEJKYA7D.js.map} +1 -1
  128. package/dist/chunk-GSKINLAK.js +267 -0
  129. package/dist/chunk-GSKINLAK.js.map +1 -0
  130. package/dist/{chunk-3PKAS6VL.js → chunk-GX6FTSYH.js} +2 -2
  131. package/dist/{chunk-76DIF5KT.js → chunk-H7VDIF2V.js} +2 -2
  132. package/dist/{chunk-F7XUD3PL.js → chunk-HJXA6ZM7.js} +2 -2
  133. package/dist/{chunk-4QEYREAV.js → chunk-HNPE66LB.js} +2 -2
  134. package/dist/{chunk-P36Z4JRA.js → chunk-I5VB44ZK.js} +2 -2
  135. package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
  136. package/dist/{chunk-OXRRJXPR.js → chunk-IHGMRDEE.js} +275 -1678
  137. package/dist/chunk-IHGMRDEE.js.map +1 -0
  138. package/dist/{chunk-5DHKCO52.js → chunk-IVIAHQBR.js} +2 -2
  139. package/dist/{chunk-TFR3HG4K.js → chunk-J3OND5QT.js} +4 -4
  140. package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
  141. package/dist/chunk-JALOAKSZ.js.map +1 -0
  142. package/dist/{chunk-5ACCD4L7.js → chunk-JRRQ747T.js} +7 -7
  143. package/dist/{chunk-V4IDF3EZ.js → chunk-JTWZKNUH.js} +5 -5
  144. package/dist/chunk-K66OY4EI.js +202 -0
  145. package/dist/chunk-K66OY4EI.js.map +1 -0
  146. package/dist/{chunk-XAB6STPO.js → chunk-KODXCHXJ.js} +17 -3
  147. package/dist/chunk-KODXCHXJ.js.map +1 -0
  148. package/dist/{chunk-KZIF6XHX.js → chunk-KXIXO76C.js} +28 -15
  149. package/dist/chunk-KXIXO76C.js.map +1 -0
  150. package/dist/{chunk-5RWZH6PH.js → chunk-L4X4PJYK.js} +2 -2
  151. package/dist/{chunk-UTQUEHC7.js → chunk-LUDBXTBJ.js} +8 -8
  152. package/dist/{chunk-XNWXSGHS.js → chunk-MAH64N55.js} +28 -10
  153. package/dist/chunk-MAH64N55.js.map +1 -0
  154. package/dist/{chunk-LDKPDODJ.js → chunk-ME35HVDJ.js} +2 -2
  155. package/dist/{chunk-DPCXDG7G.js → chunk-MJRGVXPQ.js} +2 -2
  156. package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
  157. package/dist/{chunk-T6ILXUAH.js → chunk-MN5NOOI7.js} +2 -2
  158. package/dist/{chunk-AHPIFKNG.js → chunk-N4F7ZSSG.js} +2 -2
  159. package/dist/{chunk-JOZUBF4A.js → chunk-NACLNNFQ.js} +2 -2
  160. package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
  161. package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
  162. package/dist/{chunk-DA7ITC5Z.js → chunk-O57GM3FR.js} +2 -2
  163. package/dist/{chunk-7VZFRUQU.js → chunk-O7ERGZDA.js} +5 -5
  164. package/dist/{chunk-3SZD4CYO.js → chunk-OAJMQKQR.js} +3 -3
  165. package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
  166. package/dist/{chunk-7WOWGRAU.js → chunk-PEBH5DCK.js} +10 -7
  167. package/dist/{chunk-7WOWGRAU.js.map → chunk-PEBH5DCK.js.map} +1 -1
  168. package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
  169. package/dist/{chunk-T7XP6IZE.js → chunk-QCRJMU5V.js} +2 -2
  170. package/dist/chunk-QJCWK2A7.js +1466 -0
  171. package/dist/chunk-QJCWK2A7.js.map +1 -0
  172. package/dist/{chunk-YEUXERJ6.js → chunk-RDGKVH6T.js} +7 -3
  173. package/dist/{chunk-YEUXERJ6.js.map → chunk-RDGKVH6T.js.map} +1 -1
  174. package/dist/{chunk-OA2O2GJ4.js → chunk-RZ3IZIJG.js} +3 -3
  175. package/dist/{chunk-UL4MKZHI.js → chunk-SN4JXNLL.js} +2 -2
  176. package/dist/chunk-TB2MJRI6.js +866 -0
  177. package/dist/chunk-TB2MJRI6.js.map +1 -0
  178. package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
  179. package/dist/chunk-TEZ2HTC7.js.map +1 -0
  180. package/dist/{chunk-CPA5NBHN.js → chunk-TNGH4ZYI.js} +2 -2
  181. package/dist/{chunk-F3NVYTTA.js → chunk-TNXNECAN.js} +6 -6
  182. package/dist/{chunk-BEC4YBNA.js → chunk-TVW4C7PV.js} +2 -2
  183. package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
  184. package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
  185. package/dist/chunk-UYA36DQ7.js.map +1 -0
  186. package/dist/{chunk-DEACDKE3.js → chunk-VCKWULAK.js} +112 -87
  187. package/dist/chunk-VCKWULAK.js.map +1 -0
  188. package/dist/chunk-VOSWUO3K.js +100 -0
  189. package/dist/chunk-VOSWUO3K.js.map +1 -0
  190. package/dist/{chunk-TUHBYJXL.js → chunk-VQ4AMTGZ.js} +1 -1
  191. package/dist/{chunk-3BCULS4U.js → chunk-VQNRICAQ.js} +145 -507
  192. package/dist/chunk-VQNRICAQ.js.map +1 -0
  193. package/dist/{chunk-H2YSH3DG.js → chunk-WKAXBXVA.js} +2 -2
  194. package/dist/{chunk-HRHO3ZNG.js → chunk-WKJFIMVN.js} +2 -2
  195. package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
  196. package/dist/{chunk-CRML27CO.js → chunk-X5YYSAZX.js} +4 -4
  197. package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
  198. package/dist/{chunk-U7EW2W4W.js → chunk-XKNHFDTT.js} +26 -6
  199. package/dist/chunk-XKNHFDTT.js.map +1 -0
  200. package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
  201. package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
  202. package/dist/{chunk-LPNCR4QK.js → chunk-YXFCALVT.js} +12 -12
  203. package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
  204. package/dist/{chunk-GTO56JY5.js → chunk-ZJPM7GZ3.js} +2 -2
  205. package/dist/{chunk-LOXHYCVS.js → chunk-ZW4VXELZ.js} +2 -2
  206. package/dist/{cli-O3F-ht3i.d.ts → cli-BEkm2MEf.d.ts} +5 -5
  207. package/dist/cli.d.ts +13 -14
  208. package/dist/cli.js +90 -85
  209. package/dist/coding/export-okf-codegraph.d.ts +56 -0
  210. package/dist/coding/export-okf-codegraph.js +526 -0
  211. package/dist/coding/export-okf-codegraph.js.map +1 -0
  212. package/dist/coding/pre-action-gate.d.ts +1 -2
  213. package/dist/compounding/engine.d.ts +2 -3
  214. package/dist/compounding/engine.js +24 -24
  215. package/dist/compounding/preference-consolidator.d.ts +1 -2
  216. package/dist/compression-optimizer.d.ts +1 -2
  217. package/dist/config.d.ts +1 -2
  218. package/dist/config.js +11 -11
  219. package/dist/connectors/codex-materialize-runner.d.ts +1 -2
  220. package/dist/connectors/codex-materialize-runner.js +23 -23
  221. package/dist/connectors/codex-materialize.d.ts +1 -2
  222. package/dist/connectors/index.d.ts +1 -2
  223. package/dist/connectors/index.js +23 -23
  224. package/dist/consolidation-provenance-check.d.ts +2 -3
  225. package/dist/consolidation-provenance-check.js +4 -4
  226. package/dist/consolidation-undo.d.ts +2 -3
  227. package/dist/consolidation-undo.js +3 -3
  228. package/dist/contradiction/index.d.ts +3 -4
  229. package/dist/contradiction/index.js +9 -9
  230. package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
  231. package/dist/converge-config.d.ts +1 -2
  232. package/dist/convergence-refresh.d.ts +2 -3
  233. package/dist/convergence-refresh.js +25 -25
  234. package/dist/conversation-index/backend.d.ts +1 -2
  235. package/dist/conversation-index/backend.js +2 -2
  236. package/dist/conversation-index/chunker.d.ts +1 -2
  237. package/dist/conversation-index/faiss-adapter.d.ts +1 -2
  238. package/dist/conversation-index/indexer.d.ts +1 -2
  239. package/dist/conversation-index/search.d.ts +1 -2
  240. package/dist/corpus-watermark.d.ts +1 -2
  241. package/dist/corpus-watermark.js +25 -25
  242. package/dist/cross-lingual-recall.d.ts +1 -2
  243. package/dist/day-summary.d.ts +1 -2
  244. package/dist/delinearize.d.ts +1 -2
  245. package/dist/dependency-propagation-config.d.ts +1 -2
  246. package/dist/{dependency-propagation-delivery-CL6RWXTA.d.ts → dependency-propagation-delivery-BCpeo14F.d.ts} +1 -1
  247. package/dist/direct-answer-wiring.d.ts +1 -2
  248. package/dist/direct-answer.d.ts +1 -2
  249. package/dist/embedding-fallback.d.ts +1 -2
  250. package/dist/enrichment/index.d.ts +1 -2
  251. package/dist/entity-origin-fields.d.ts +1 -2
  252. package/dist/entity-retrieval.d.ts +2 -3
  253. package/dist/entity-retrieval.js +23 -23
  254. package/dist/entity-schema.d.ts +1 -2
  255. package/dist/episodic-context.d.ts +1 -2
  256. package/dist/eval-trajectory-contracts.d.ts +1 -2
  257. package/dist/eval-trajectory-store.d.ts +1 -2
  258. package/dist/eval-trajectory.d.ts +1 -2
  259. package/dist/explicit-capture.d.ts +9 -10
  260. package/dist/explicit-capture.js +11 -11
  261. package/dist/external-wiki-access.d.ts +11 -12
  262. package/dist/external-wiki-access.js +50 -47
  263. package/dist/external-wiki-collection-registration.d.ts +1 -2
  264. package/dist/external-wiki-collection.d.ts +1 -2
  265. package/dist/external-wiki-mcp-tools.d.ts +11 -12
  266. package/dist/extraction-error-classification.d.ts +1 -2
  267. package/dist/extraction-faithfulness.d.ts +1 -2
  268. package/dist/extraction-faithfulness.js +2 -2
  269. package/dist/extraction-judge-telemetry.d.ts +1 -2
  270. package/dist/extraction-judge-training.d.ts +1 -2
  271. package/dist/extraction-judge.d.ts +1 -2
  272. package/dist/extraction-judge.js +2 -2
  273. package/dist/extraction-liveness.d.ts +1 -2
  274. package/dist/extraction-normalization.d.ts +1 -2
  275. package/dist/extraction-prompt.d.ts +1 -2
  276. package/dist/extraction-source-grounding-rules.d.ts +1 -2
  277. package/dist/extraction-source-grounding.d.ts +1 -2
  278. package/dist/extraction.d.ts +1 -2
  279. package/dist/extraction.js +32 -29
  280. package/dist/fallback-llm.d.ts +7 -2
  281. package/dist/fallback-llm.js +1 -1
  282. package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
  283. package/dist/graph-dashboard-diff.d.ts +1 -2
  284. package/dist/graph-dashboard-key.d.ts +1 -2
  285. package/dist/graph-dashboard-parser.d.ts +1 -2
  286. package/dist/graph-edge-reinforcement.d.ts +1 -2
  287. package/dist/graph-path-reconstruction.d.ts +1 -2
  288. package/dist/graph-path-scoring.d.ts +1 -2
  289. package/dist/graph-snapshot.d.ts +1 -2
  290. package/dist/graph.d.ts +1 -2
  291. package/dist/harmonic-retrieval.js +1 -1
  292. package/dist/importance.d.ts +1 -2
  293. package/dist/importers/index.d.ts +1 -2
  294. package/dist/in-flight-reads.d.ts +1 -2
  295. package/dist/{index-C7Xep6S9.d.ts → index-D_pyMUaP.d.ts} +2 -2
  296. package/dist/index.d.ts +929 -700
  297. package/dist/index.js +167 -132
  298. package/dist/intent.d.ts +1 -2
  299. package/dist/lcm/engine.d.ts +1 -2
  300. package/dist/lcm/index.d.ts +1 -2
  301. package/dist/lcm/tools.d.ts +1 -2
  302. package/dist/lifecycle.d.ts +1 -2
  303. package/dist/live-connectors-runner.d.ts +1 -2
  304. package/dist/local-llm.d.ts +1 -2
  305. package/dist/local-model-endpoint.d.ts +1 -2
  306. package/dist/location/index.d.ts +315 -6
  307. package/dist/location/index.js +151 -19
  308. package/dist/maintenance/memory-governance.d.ts +1 -2
  309. package/dist/maintenance/memory-governance.js +23 -23
  310. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -3
  311. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
  312. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -3
  313. package/dist/maintenance/rebuild-memory-projection.js +24 -24
  314. package/dist/{maintenance-CJ-xqFp0.d.ts → maintenance-DDUX9d6D.d.ts} +3 -3
  315. package/dist/mcp-memory-inspector-app.d.ts +11 -12
  316. package/dist/mcp-read-only-tools.js +1 -1
  317. package/dist/memory-action-policy.d.ts +1 -2
  318. package/dist/memory-cache.d.ts +1 -2
  319. package/dist/memory-controller.d.ts +1 -2
  320. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -2
  321. package/dist/memory-projection-mutations.js +3 -3
  322. package/dist/memory-projection-store.d.ts +1 -2
  323. package/dist/memory-projection-store.js +1 -1
  324. package/dist/memory-provenance.d.ts +1 -2
  325. package/dist/memory-snapshot.d.ts +1 -2
  326. package/dist/memory-subject-cli.d.ts +11 -12
  327. package/dist/memory-subject.d.ts +11 -12
  328. package/dist/memory-subject.js +4 -4
  329. package/dist/memory-worth-outcomes.d.ts +2 -3
  330. package/dist/models-json.d.ts +1 -2
  331. package/dist/namespaces/migrate.d.ts +3 -4
  332. package/dist/namespaces/migrate.js +24 -24
  333. package/dist/namespaces/principal.d.ts +1 -2
  334. package/dist/namespaces/search.d.ts +1 -2
  335. package/dist/namespaces/search.js +5 -5
  336. package/dist/namespaces/storage.d.ts +3 -4
  337. package/dist/namespaces/storage.js +23 -23
  338. package/dist/native-knowledge.d.ts +1 -2
  339. package/dist/offline-sync-file-io.js +3 -3
  340. package/dist/offline-sync-impression-drain.d.ts +1 -2
  341. package/dist/offline-sync-impression-drain.js +9 -9
  342. package/dist/offline-sync.js +4 -4
  343. package/dist/operator-doctor-corpus.d.ts +1 -2
  344. package/dist/operator-doctor-corpus.js +26 -26
  345. package/dist/operator-doctor-replica.d.ts +1 -2
  346. package/dist/operator-toolkit.d.ts +3 -4
  347. package/dist/operator-toolkit.js +42 -42
  348. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -3
  349. package/dist/orchestration/maintenance.d.ts +4 -5
  350. package/dist/orchestration/maintenance.js +37 -36
  351. package/dist/{orchestrator-BsntWxLy.d.ts → orchestrator-3F4jihCo.d.ts} +8 -8
  352. package/dist/orchestrator.d.ts +9 -10
  353. package/dist/orchestrator.js +111 -106
  354. package/dist/page-versioning.js +3 -3
  355. package/dist/patterns-cli.d.ts +1 -2
  356. package/dist/{pipeline-CVoysPm2.d.ts → pipeline-CB1dj6Uh.d.ts} +1 -1
  357. package/dist/policy-runtime.d.ts +1 -2
  358. package/dist/proactive-contention.d.ts +1 -2
  359. package/dist/provenance.d.ts +1 -2
  360. package/dist/{public-http-CuOxlTC2.d.ts → public-http-34-JIAGQ.d.ts} +1 -1
  361. package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
  362. package/dist/{qmd-DWMAGA5l.d.ts → qmd-edLLZXc5.d.ts} +1 -1
  363. package/dist/qmd-preflight.d.ts +2 -3
  364. package/dist/qmd-recall-cache.d.ts +1 -2
  365. package/dist/qmd.d.ts +2 -3
  366. package/dist/recall-concurrency-config.d.ts +1 -2
  367. package/dist/recall-disclosure-escalation.d.ts +1 -2
  368. package/dist/recall-explain-renderer.d.ts +1 -2
  369. package/dist/recall-memory-map.d.ts +1 -2
  370. package/dist/recall-planner-llm.d.ts +1 -2
  371. package/dist/recall-planner-llm.js +1 -1
  372. package/dist/recall-state.d.ts +1 -2
  373. package/dist/recall-tag-filter.d.ts +1 -2
  374. package/dist/recall-timings.d.ts +1 -2
  375. package/dist/recall-xray-cli.d.ts +1 -2
  376. package/dist/recall-xray-renderer.d.ts +1 -2
  377. package/dist/recall-xray.d.ts +1 -2
  378. package/dist/reconcile/cursor.d.ts +1 -2
  379. package/dist/reconcile/manifest.d.ts +1 -2
  380. package/dist/reconcile/manifest.js +4 -4
  381. package/dist/reconcile/plan.d.ts +1 -2
  382. package/dist/replay/normalizers/chatgpt.d.ts +1 -2
  383. package/dist/replay/normalizers/claude.d.ts +1 -2
  384. package/dist/replay/normalizers/openclaw.d.ts +1 -2
  385. package/dist/replay/normalizers/shared.d.ts +1 -2
  386. package/dist/replay/runner.d.ts +1 -2
  387. package/dist/replay/types.d.ts +1 -2
  388. package/dist/replica-divergence.d.ts +1 -2
  389. package/dist/replica-peers-config.d.ts +1 -2
  390. package/dist/{resolution-XWBPKYFB.js → resolution-4DLI3IOR.js} +10 -10
  391. package/dist/resolve-auth-token.d.ts +1 -2
  392. package/dist/resume-bundles.js +12 -12
  393. package/dist/retrieval-agents.d.ts +2 -3
  394. package/dist/retrieval-tiers.d.ts +1 -2
  395. package/dist/routing/engine.d.ts +1 -2
  396. package/dist/routing/store.d.ts +1 -2
  397. package/dist/salvage-envelope.d.ts +1 -2
  398. package/dist/salvage-envelope.js +6 -6
  399. package/dist/schemas.d.ts +639 -174
  400. package/dist/schemas.js +3 -1
  401. package/dist/{scope-profiles-CPWkW_dI.d.ts → scope-profiles-BF2lu81V.d.ts} +1 -1
  402. package/dist/search/document-scanner.js +1 -1
  403. package/dist/search/embed-helper.d.ts +1 -2
  404. package/dist/search/factory.d.ts +1 -2
  405. package/dist/search/factory.js +4 -4
  406. package/dist/search/index.d.ts +1 -2
  407. package/dist/search/index.js +4 -4
  408. package/dist/search/lancedb-backend.d.ts +1 -2
  409. package/dist/search/lancedb-backend.js +1 -1
  410. package/dist/search/meilisearch-backend.d.ts +1 -2
  411. package/dist/search/meilisearch-backend.js +1 -1
  412. package/dist/search/noop-backend.d.ts +1 -2
  413. package/dist/search/orama-backend.d.ts +1 -2
  414. package/dist/search/orama-backend.js +1 -1
  415. package/dist/search/port.d.ts +1 -2
  416. package/dist/search/remote-backend.d.ts +1 -2
  417. package/dist/secure-store/index.js +3 -3
  418. package/dist/{semantic-consolidation-CNFVBXFc.d.ts → semantic-consolidation-5OuWXBRt.d.ts} +1 -1
  419. package/dist/semantic-consolidation.d.ts +2 -3
  420. package/dist/semantic-consolidation.js +24 -24
  421. package/dist/semantic-rule-promotion.js +23 -23
  422. package/dist/semantic-rule-verifier.d.ts +1 -2
  423. package/dist/semantic-rule-verifier.js +23 -23
  424. package/dist/{service-Bb-JIdQ0.d.ts → service-CrqEhLXD.d.ts} +2 -2
  425. package/dist/session-observer-bands.d.ts +1 -2
  426. package/dist/session-observer-state.d.ts +1 -2
  427. package/dist/shared-context/manager.d.ts +7 -8
  428. package/dist/signal.d.ts +1 -2
  429. package/dist/source-agent-qualifier.d.ts +1 -2
  430. package/dist/source-agent-qualifier.js +30 -27
  431. package/dist/standup/build.d.ts +16 -0
  432. package/dist/standup/build.js +17 -0
  433. package/dist/standup/build.js.map +1 -0
  434. package/dist/{storage-CukrlNKk.d.ts → storage-BQn-xnxm.d.ts} +1 -1
  435. package/dist/storage.d.ts +2 -3
  436. package/dist/storage.js +22 -22
  437. package/dist/subject-config.d.ts +1 -2
  438. package/dist/subject-config.js +5 -5
  439. package/dist/summarizer.d.ts +1 -2
  440. package/dist/summarizer.js +2 -2
  441. package/dist/summary-snapshot.d.ts +1 -2
  442. package/dist/support-passport/index.d.ts +16 -17
  443. package/dist/support-passport/index.js +52 -49
  444. package/dist/temporal-supersession.d.ts +2 -3
  445. package/dist/temporal-timeline-recall.d.ts +1 -2
  446. package/dist/temporal-validity.d.ts +1 -2
  447. package/dist/threading.d.ts +1 -2
  448. package/dist/tier-migration.d.ts +2 -3
  449. package/dist/tier-routing.d.ts +1 -2
  450. package/dist/tier-routing.js +2 -2
  451. package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
  452. package/dist/topics.d.ts +1 -2
  453. package/dist/transcript.d.ts +1 -2
  454. package/dist/transfer/capsule-export.js +2 -2
  455. package/dist/transfer/capsule-import.js +5 -5
  456. package/dist/transfer/export-okf.d.ts +39 -0
  457. package/dist/transfer/export-okf.js +112 -0
  458. package/dist/transfer/export-okf.js.map +1 -0
  459. package/dist/transfer/types.d.ts +78 -78
  460. package/dist/trust-score-stage.d.ts +1 -2
  461. package/dist/trust-score.d.ts +1 -2
  462. package/dist/{types-djxQlxJ7.d.ts → types-BRpcNjHZ.d.ts} +117 -2
  463. package/dist/types.d.ts +1 -2
  464. package/dist/utility-runtime.d.ts +1 -2
  465. package/dist/verified-recall.js +23 -23
  466. package/dist/who-knows-cli.d.ts +11 -12
  467. package/dist/who-knows-cli.js +24 -24
  468. package/dist/who-knows.d.ts +11 -12
  469. package/dist/who-knows.js +23 -23
  470. package/dist/write-envelope.d.ts +1 -2
  471. package/dist/write-envelope.js +5 -5
  472. package/package.json +34 -3
  473. package/src/access-admin-ops-surface.ts +6 -1
  474. package/src/access-boundary.ts +1 -0
  475. package/src/access-http.ts +3 -1
  476. package/src/access-mcp-output-schemas.ts +1 -0
  477. package/src/access-mcp.ts +3 -3
  478. package/src/access-operations.ts +1 -0
  479. package/src/access-service-offline-file-content.test.ts +63 -0
  480. package/src/access-surface-catalog.ts +2 -0
  481. package/src/activity/config.test.ts +1 -0
  482. package/src/activity/config.ts +21 -1
  483. package/src/activity/index.ts +1 -0
  484. package/src/activity/timeline/build.ts +279 -0
  485. package/src/activity/timeline/categories.ts +111 -0
  486. package/src/activity/timeline/classify.ts +110 -0
  487. package/src/activity/timeline/corrections.ts +145 -0
  488. package/src/activity/timeline/index.ts +6 -0
  489. package/src/activity/timeline/timeline.test.ts +277 -0
  490. package/src/activity/timeline/types.ts +106 -0
  491. package/src/activity/types.ts +6 -0
  492. package/src/cli/okf-commands.ts +45 -0
  493. package/src/cli.ts +2 -2
  494. package/src/coding/export-okf-codegraph.test.ts +381 -0
  495. package/src/coding/export-okf-codegraph.ts +565 -0
  496. package/src/config.test.ts +1 -0
  497. package/src/extraction-prompt-safety.test.ts +14 -2
  498. package/src/extraction.ts +21 -1
  499. package/src/fallback-llm.test.ts +134 -0
  500. package/src/fallback-llm.ts +77 -5
  501. package/src/location/access-operations.ts +17 -8
  502. package/src/location/backfill.ts +137 -0
  503. package/src/location/config.test.ts +3 -0
  504. package/src/location/config.ts +46 -2
  505. package/src/location/http-glue.ts +1 -1
  506. package/src/location/index.ts +3 -0
  507. package/src/location/intervals.ts +1 -0
  508. package/src/location/matching.test.ts +65 -0
  509. package/src/location/matching.ts +354 -0
  510. package/src/location/mcp-tools.ts +2 -1
  511. package/src/location/surfaces.test.ts +15 -2
  512. package/src/location/surfaces.ts +95 -18
  513. package/src/location/tagging.test.ts +119 -0
  514. package/src/location/tagging.ts +277 -0
  515. package/src/location/types.ts +23 -1
  516. package/src/mcp-read-only-tools.ts +1 -0
  517. package/src/memory-projection-store.ts +3 -1
  518. package/src/okf/cli.ts +18 -5
  519. package/src/okf/config.ts +5 -0
  520. package/src/okf/index-files.test.ts +60 -0
  521. package/src/okf/index-files.ts +114 -0
  522. package/src/okf/render.ts +133 -0
  523. package/src/okf/type-mapping.test.ts +3 -0
  524. package/src/okf/type-mapping.ts +2 -0
  525. package/src/orchestration/extraction-run.ts +2 -1
  526. package/src/orchestration/generic-recall-paths.ts +4 -3
  527. package/src/schemas.ts +17 -1
  528. package/src/standup/access-operations.ts +14 -0
  529. package/src/standup/build.test.ts +34 -0
  530. package/src/standup/build.ts +115 -0
  531. package/src/standup/http-glue.ts +15 -0
  532. package/src/standup/mcp-tools.ts +16 -0
  533. package/src/support-passport/card-projection.ts +1 -0
  534. package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
  535. package/src/support-passport/card-service.test.ts +75 -1
  536. package/src/support-passport/card-service.ts +6 -3
  537. package/src/support-passport/card-state.ts +5 -1
  538. package/src/support-passport/offline-sync-guard.ts +14 -1
  539. package/src/transfer/export-okf.test.ts +164 -0
  540. package/src/transfer/export-okf.ts +286 -0
  541. package/dist/chunk-2LWQSV6A.js.map +0 -1
  542. package/dist/chunk-3BCULS4U.js.map +0 -1
  543. package/dist/chunk-7BDZTALN.js.map +0 -1
  544. package/dist/chunk-7PHI6GUI.js.map +0 -1
  545. package/dist/chunk-AX7UXCHJ.js.map +0 -1
  546. package/dist/chunk-DEACDKE3.js.map +0 -1
  547. package/dist/chunk-FP7YTTVO.js.map +0 -1
  548. package/dist/chunk-JYSN42VN.js.map +0 -1
  549. package/dist/chunk-KZIF6XHX.js.map +0 -1
  550. package/dist/chunk-LKYIOCWL.js.map +0 -1
  551. package/dist/chunk-OXRRJXPR.js.map +0 -1
  552. package/dist/chunk-U7EW2W4W.js.map +0 -1
  553. package/dist/chunk-UW5NPZJ2.js.map +0 -1
  554. package/dist/chunk-XAB6STPO.js.map +0 -1
  555. package/dist/chunk-XNWXSGHS.js.map +0 -1
  556. package/dist/types-CM86alG1.d.ts +0 -89
  557. /package/dist/{auto-sync-2YPITIWN.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
  558. /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
  559. /package/dist/{chunk-LEPOP46W.js.map → chunk-227UFSEQ.js.map} +0 -0
  560. /package/dist/{chunk-NPFUNWNX.js.map → chunk-23CVL7HS.js.map} +0 -0
  561. /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
  562. /package/dist/{chunk-MY2BC6UE.js.map → chunk-2LBAFHOQ.js.map} +0 -0
  563. /package/dist/{chunk-AZMLH5UT.js.map → chunk-33MFRY25.js.map} +0 -0
  564. /package/dist/{chunk-UEBDCMOO.js.map → chunk-3TSU662L.js.map} +0 -0
  565. /package/dist/{chunk-CAMNRAJF.js.map → chunk-4FHRZD5T.js.map} +0 -0
  566. /package/dist/{chunk-S5XOSTYM.js.map → chunk-4STAANV7.js.map} +0 -0
  567. /package/dist/{chunk-4F4AQFWL.js.map → chunk-6CEGSTBD.js.map} +0 -0
  568. /package/dist/{chunk-MDD2RINF.js.map → chunk-6RUHELWR.js.map} +0 -0
  569. /package/dist/{chunk-WNXYT4MK.js.map → chunk-72OIT7KS.js.map} +0 -0
  570. /package/dist/{chunk-KQAFEZQX.js.map → chunk-7LCGFUMB.js.map} +0 -0
  571. /package/dist/{chunk-SNOIKAHM.js.map → chunk-7UTDHQZ5.js.map} +0 -0
  572. /package/dist/{chunk-5HK3CJAR.js.map → chunk-7XOG75AU.js.map} +0 -0
  573. /package/dist/{chunk-UPFNQJC7.js.map → chunk-CN4VKV3S.js.map} +0 -0
  574. /package/dist/{chunk-PMVPCZJZ.js.map → chunk-CTCGHNWN.js.map} +0 -0
  575. /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
  576. /package/dist/{chunk-XBGHAAKR.js.map → chunk-DDX6KIXF.js.map} +0 -0
  577. /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
  578. /package/dist/{chunk-UENKPWCS.js.map → chunk-DMEHOEC7.js.map} +0 -0
  579. /package/dist/{chunk-7KQB4EBS.js.map → chunk-DUAJKRR2.js.map} +0 -0
  580. /package/dist/{chunk-SEEJOGQX.js.map → chunk-EFQCDJZ2.js.map} +0 -0
  581. /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
  582. /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
  583. /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
  584. /package/dist/{chunk-PU56CXZA.js.map → chunk-EZSCW4EM.js.map} +0 -0
  585. /package/dist/{chunk-HMZKGHMD.js.map → chunk-FESUGFIL.js.map} +0 -0
  586. /package/dist/{chunk-3A2NJP2U.js.map → chunk-FKKGCGYL.js.map} +0 -0
  587. /package/dist/{chunk-BWGCOLEL.js.map → chunk-FTTJRVB7.js.map} +0 -0
  588. /package/dist/{chunk-ODU2CNNX.js.map → chunk-FYWLSFFS.js.map} +0 -0
  589. /package/dist/{chunk-3PKAS6VL.js.map → chunk-GX6FTSYH.js.map} +0 -0
  590. /package/dist/{chunk-76DIF5KT.js.map → chunk-H7VDIF2V.js.map} +0 -0
  591. /package/dist/{chunk-F7XUD3PL.js.map → chunk-HJXA6ZM7.js.map} +0 -0
  592. /package/dist/{chunk-4QEYREAV.js.map → chunk-HNPE66LB.js.map} +0 -0
  593. /package/dist/{chunk-P36Z4JRA.js.map → chunk-I5VB44ZK.js.map} +0 -0
  594. /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
  595. /package/dist/{chunk-5DHKCO52.js.map → chunk-IVIAHQBR.js.map} +0 -0
  596. /package/dist/{chunk-TFR3HG4K.js.map → chunk-J3OND5QT.js.map} +0 -0
  597. /package/dist/{chunk-5ACCD4L7.js.map → chunk-JRRQ747T.js.map} +0 -0
  598. /package/dist/{chunk-V4IDF3EZ.js.map → chunk-JTWZKNUH.js.map} +0 -0
  599. /package/dist/{chunk-5RWZH6PH.js.map → chunk-L4X4PJYK.js.map} +0 -0
  600. /package/dist/{chunk-UTQUEHC7.js.map → chunk-LUDBXTBJ.js.map} +0 -0
  601. /package/dist/{chunk-LDKPDODJ.js.map → chunk-ME35HVDJ.js.map} +0 -0
  602. /package/dist/{chunk-DPCXDG7G.js.map → chunk-MJRGVXPQ.js.map} +0 -0
  603. /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
  604. /package/dist/{chunk-T6ILXUAH.js.map → chunk-MN5NOOI7.js.map} +0 -0
  605. /package/dist/{chunk-AHPIFKNG.js.map → chunk-N4F7ZSSG.js.map} +0 -0
  606. /package/dist/{chunk-JOZUBF4A.js.map → chunk-NACLNNFQ.js.map} +0 -0
  607. /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
  608. /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
  609. /package/dist/{chunk-DA7ITC5Z.js.map → chunk-O57GM3FR.js.map} +0 -0
  610. /package/dist/{chunk-7VZFRUQU.js.map → chunk-O7ERGZDA.js.map} +0 -0
  611. /package/dist/{chunk-3SZD4CYO.js.map → chunk-OAJMQKQR.js.map} +0 -0
  612. /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
  613. /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
  614. /package/dist/{chunk-T7XP6IZE.js.map → chunk-QCRJMU5V.js.map} +0 -0
  615. /package/dist/{chunk-OA2O2GJ4.js.map → chunk-RZ3IZIJG.js.map} +0 -0
  616. /package/dist/{chunk-UL4MKZHI.js.map → chunk-SN4JXNLL.js.map} +0 -0
  617. /package/dist/{chunk-CPA5NBHN.js.map → chunk-TNGH4ZYI.js.map} +0 -0
  618. /package/dist/{chunk-F3NVYTTA.js.map → chunk-TNXNECAN.js.map} +0 -0
  619. /package/dist/{chunk-BEC4YBNA.js.map → chunk-TVW4C7PV.js.map} +0 -0
  620. /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
  621. /package/dist/{chunk-TUHBYJXL.js.map → chunk-VQ4AMTGZ.js.map} +0 -0
  622. /package/dist/{chunk-H2YSH3DG.js.map → chunk-WKAXBXVA.js.map} +0 -0
  623. /package/dist/{chunk-HRHO3ZNG.js.map → chunk-WKJFIMVN.js.map} +0 -0
  624. /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
  625. /package/dist/{chunk-CRML27CO.js.map → chunk-X5YYSAZX.js.map} +0 -0
  626. /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
  627. /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
  628. /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
  629. /package/dist/{chunk-LPNCR4QK.js.map → chunk-YXFCALVT.js.map} +0 -0
  630. /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
  631. /package/dist/{chunk-GTO56JY5.js.map → chunk-ZJPM7GZ3.js.map} +0 -0
  632. /package/dist/{chunk-LOXHYCVS.js.map → chunk-ZW4VXELZ.js.map} +0 -0
  633. /package/dist/{contradiction-scan-AKUWPX5N.js.map → contradiction-scan-NOYMFG66.js.map} +0 -0
  634. /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
  635. /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
  636. /package/dist/{resolution-XWBPKYFB.js.map → resolution-4DLI3IOR.js.map} +0 -0
  637. /package/dist/{tier-stats-4B5IJ3NE.js.map → tier-stats-2TOW3QNL.js.map} +0 -0
@@ -832,7 +832,7 @@ export class SupportPassportCardService {
832
832
  if (currentCard.card.status === "pending_review") {
833
833
  const priorId = currentMemory.frontmatter.supersedes;
834
834
  if (!priorId) return currentMemory;
835
- const prior = await storage.getMemoryById(priorId);
835
+ const prior = await storage.getMemoryByIdIncludingArchived(priorId);
836
836
  if (
837
837
  prior &&
838
838
  ownsMemory(prior, namespace, principal) &&
@@ -973,7 +973,10 @@ export class SupportPassportCardService {
973
973
  onCommitted?: () => void
974
974
  ): Promise<void> {
975
975
  if (!replacement.replacesDraftId) return;
976
- const replacedDraft = await storage.getMemoryById(replacement.replacesDraftId);
976
+ // Tier-independent: an interrupted edit's rejected predecessor can be
977
+ // demoted to the cold tier before recovery runs; a hot-only lookup would
978
+ // mistake it for deleted and orphan the valid replacement (#2387).
979
+ const replacedDraft = await storage.getMemoryByIdIncludingArchived(replacement.replacesDraftId);
977
980
  const projectedDraft = replacedDraft ? projectOwnedCard(replacedDraft, namespace, principal) : null;
978
981
  if (
979
982
  replacedDraft &&
@@ -999,7 +1002,7 @@ export class SupportPassportCardService {
999
1002
  return;
1000
1003
  }
1001
1004
  }
1002
- const currentDraft = await storage.getMemoryById(replacement.replacesDraftId);
1005
+ const currentDraft = await storage.getMemoryByIdIncludingArchived(replacement.replacesDraftId);
1003
1006
  if (
1004
1007
  currentDraft &&
1005
1008
  ownsMemory(currentDraft, namespace, principal) &&
@@ -152,7 +152,11 @@ export function ownerListCards(storedCards: StoredSupportPassportCard[]): Stored
152
152
  if (activeReplacementPredecessors.has(item.card.cardId)) return false;
153
153
  if (replacedDraftIds.has(item.card.cardId)) return false;
154
154
  if (!item.replacesDraftId) return true;
155
+ // The replaced draft may be demoted to the cold tier or archived after
156
+ // its rejection; a hot-only projection then reports it missing. A
157
+ // missing predecessor must not hide the replacement — only a restored
158
+ // active predecessor does (#2387).
155
159
  const replacedStatus = byId.get(item.replacesDraftId)?.card.status;
156
- return replacedStatus === "pending_review" || replacedStatus === "rejected";
160
+ return replacedStatus === undefined || replacedStatus === "pending_review" || replacedStatus === "rejected";
157
161
  });
158
162
  }
@@ -9,9 +9,13 @@ import {
9
9
  type OfflineSyncApplyChangesetResult,
10
10
  type OfflineSyncApplyFileContentChunkResult,
11
11
  } from "../offline-sync.js";
12
+ import { parseFrontmatter } from "../storage.js";
12
13
  import { validateArchiveRelativePath } from "../transfer/fs-utils.js";
13
14
  import type { MemoryFile } from "../types.js";
14
- import { createSupportPassportPrivateFileExclusion } from "./card-projection.js";
15
+ import {
16
+ createSupportPassportPrivateFileExclusion,
17
+ isSupportPassportPrivateMemory,
18
+ } from "./card-projection.js";
15
19
 
16
20
  const MAX_SUPPORT_PASSPORT_FRONTMATTER_BYTES = 1_048_576;
17
21
  const SUPPORT_PASSPORT_MARKER = "support-passport-";
@@ -64,6 +68,15 @@ function assertFrontmatterAllowed(frontmatter: string, relativePath: string): vo
64
68
  if (frontmatter.includes(SUPPORT_PASSPORT_MARKER)) {
65
69
  throw new Error(`offline sync cannot modify private support-passport record: ${relativePath}`);
66
70
  }
71
+ // Canonical classification (#2387): YAML/JSON escapes — e.g. a
72
+ // structured-attribute key written as `support\u002dpassport-owner` — hide
73
+ // the marker from the raw scan above, while the storage reader's
74
+ // JSON.parse reconstructs it after the write. Validate the parsed
75
+ // frontmatter with the same predicate the read path classifies by.
76
+ const parsed = parseFrontmatter(frontmatter);
77
+ if (parsed && isSupportPassportPrivateMemory({ frontmatter: parsed.frontmatter })) {
78
+ throw new Error(`offline sync cannot modify private support-passport record: ${relativePath}`);
79
+ }
67
80
  }
68
81
 
69
82
  function inspectBufferedFrontmatter(
@@ -0,0 +1,164 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, readFile, rm, writeFile, symlink } from "node:fs/promises";
3
+ import { existsSync, lstatSync, readdirSync } from "node:fs";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import test from "node:test";
7
+
8
+ import { StorageManager } from "../storage.js";
9
+ import {
10
+ DEFAULT_OKF_LOG_MAX_ENTRIES,
11
+ exportOkfBundle,
12
+ OKF_EXPORT_VERSION,
13
+ OKF_LOG_TRUNCATION_MARKER,
14
+ parseIncludeStatus,
15
+ } from "./export-okf.js";
16
+
17
+ async function seedStore(dir: string): Promise<{ factId: string; decisionId: string }> {
18
+ const storage = new StorageManager(dir);
19
+ await storage.ensureDirectories();
20
+ const decision = await storage.writeMemory("decision", "# Use SQLite\n\nWe use SQLite for the local store.", {
21
+ source: "test",
22
+ confidence: 0.9,
23
+ });
24
+ const fact = await storage.writeMemory(
25
+ "fact",
26
+ "# Rate limit\n\nAPI rate limit is 100/min.\n\n<oai-mem-citation>\n<citation_entries>\nfacts/note.md:1-2|note=[source]\n</citation_entries>\n</oai-mem-citation>\n",
27
+ {
28
+ source: "test",
29
+ confidence: 0.9,
30
+ tags: ["api"],
31
+ links: [{ targetId: decision.id, linkType: "supports", strength: 0.8 }],
32
+ },
33
+ );
34
+ const superseded = await storage.writeMemory("fact", "# Old limit\n\nAPI rate limit is 10/min.", { source: "test" });
35
+ await storage.writeMemoryFrontmatter((await storage.getMemoryById(superseded.id))!, { status: "superseded" });
36
+ const pending = await storage.writeMemory("correction", "# Pending\n\nNeeds review.", { source: "test" });
37
+ await storage.writeMemoryFrontmatter((await storage.getMemoryById(pending.id))!, { status: "pending_review" });
38
+ await writeFile(path.join(dir, "profile.md"), "# User\n\nPrefers short answers.\n", "utf8");
39
+ return { factId: fact.id, decisionId: decision.id };
40
+ }
41
+ test("parseIncludeStatus rejects unknown values", () => {
42
+ assert.deepEqual(parseIncludeStatus(undefined), ["active"]);
43
+ assert.throws(() => parseIncludeStatus("nope"), /allowed:/);
44
+ });
45
+
46
+ test("exportOkfBundle writes a deterministic active-only bundle", async () => {
47
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-src-"));
48
+ const outA = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-a-"));
49
+ const outB = path.join(os.tmpdir(), `remnic-okf-b-${Date.now()}`);
50
+ try {
51
+ await seedStore(memoryDir);
52
+ await rm(outA, { recursive: true, force: true });
53
+ const first = await exportOkfBundle({ memoryDir, outDir: outA });
54
+ assert.equal(first.exported, 2);
55
+ assert.ok(first.excluded >= 2);
56
+ const root = await readFile(path.join(outA, "index.md"), "utf8");
57
+ assert.match(root, new RegExp(`okf_version: "${OKF_EXPORT_VERSION}"`));
58
+ assert.doesNotMatch(root, /^type:/m);
59
+ assert.equal(existsSync(path.join(outA, "profile.md")), false);
60
+ const files = collectFiles(outA);
61
+ assert.ok(files.some((f) => f.includes("facts/")));
62
+ const factFile = files.find((f) => f.includes("facts/"))!;
63
+ const factBody = await readFile(path.join(outA, factFile), "utf8");
64
+ assert.match(factBody, /# Citations/);
65
+ assert.match(factBody, /# Related/);
66
+ assert.match(factBody, /type: Memory Fact/);
67
+ await exportOkfBundle({ memoryDir, outDir: outB });
68
+ assert.deepEqual(collectFiles(outA), collectFiles(outB));
69
+ for (const rel of collectFiles(outA)) {
70
+ assert.equal(await readFile(path.join(outA, rel), "utf8"), await readFile(path.join(outB, rel), "utf8"));
71
+ }
72
+ } finally {
73
+ await rm(memoryDir, { recursive: true, force: true });
74
+ await rm(outA, { recursive: true, force: true });
75
+ await rm(outB, { recursive: true, force: true });
76
+ }
77
+ });
78
+
79
+ test("profile stays off unless requested; non-empty out requires --force", async () => {
80
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-src-"));
81
+ const outDir = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-out-"));
82
+ try {
83
+ await seedStore(memoryDir);
84
+ await rm(outDir, { recursive: true, force: true });
85
+ await exportOkfBundle({ memoryDir, outDir, includeProfile: true });
86
+ const profile = await readFile(path.join(outDir, "profile.md"), "utf8");
87
+ assert.match(profile, /type: Profile/);
88
+ await writeFile(path.join(outDir, "keep.txt"), "old", "utf8");
89
+ await assert.rejects(exportOkfBundle({ memoryDir, outDir }), /not empty/);
90
+ assert.equal(await readFile(path.join(outDir, "keep.txt"), "utf8"), "old");
91
+ await exportOkfBundle({ memoryDir, outDir, force: true });
92
+ assert.equal(existsSync(path.join(outDir, "keep.txt")), false);
93
+ assert.equal(existsSync(path.join(outDir, "index.md")), true);
94
+ } finally {
95
+ await rm(memoryDir, { recursive: true, force: true });
96
+ await rm(outDir, { recursive: true, force: true });
97
+ }
98
+ });
99
+
100
+ test("log.md is newest-first and marks truncation", async () => {
101
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-src-"));
102
+ const outDir = path.join(os.tmpdir(), `remnic-okf-log-${Date.now()}`);
103
+ try {
104
+ const storage = new StorageManager(memoryDir);
105
+ await storage.ensureDirectories();
106
+ await storage.writeMemory("fact", "# One\n\nbody", { source: "test" });
107
+ await storage.appendMemoryLifecycleEvents([
108
+ {
109
+ eventId: "e2",
110
+ memoryId: "m1",
111
+ eventType: "created",
112
+ timestamp: "2026-08-02T00:00:00.000Z",
113
+ actor: "test",
114
+ ruleVersion: "1",
115
+ },
116
+ {
117
+ eventId: "e1",
118
+ memoryId: "m1",
119
+ eventType: "updated",
120
+ timestamp: "2026-08-01T00:00:00.000Z",
121
+ actor: "test",
122
+ ruleVersion: "1",
123
+ },
124
+ ]);
125
+ await exportOkfBundle({ memoryDir, outDir, includeLog: true, logMaxEntries: 1 });
126
+ const log = await readFile(path.join(outDir, "log.md"), "utf8");
127
+ assert.match(log, /## 20\d{2}-\d{2}-\d{2}/);
128
+ assert.match(log, new RegExp(OKF_LOG_TRUNCATION_MARKER));
129
+ assert.ok(DEFAULT_OKF_LOG_MAX_ENTRIES > 1);
130
+ } finally {
131
+ await rm(memoryDir, { recursive: true, force: true });
132
+ await rm(outDir, { recursive: true, force: true });
133
+ }
134
+ });
135
+
136
+ test("symlink out is rejected", async () => {
137
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-src-"));
138
+ const real = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-real-"));
139
+ const link = `${real}-link`;
140
+ try {
141
+ await seedStore(memoryDir);
142
+ await symlink(real, link);
143
+ await assert.rejects(exportOkfBundle({ memoryDir, outDir: link }), /symlink/);
144
+ } finally {
145
+ await rm(memoryDir, { recursive: true, force: true });
146
+ await rm(real, { recursive: true, force: true });
147
+ await rm(link, { force: true });
148
+ }
149
+ });
150
+
151
+ function collectFiles(root: string): string[] {
152
+ const out: string[] = [];
153
+ const walk = (dir: string): void => {
154
+ for (const name of readdirSync(dir).sort()) {
155
+ const full = path.join(dir, name);
156
+ const stat = lstatSync(full);
157
+ if (stat.isSymbolicLink()) continue;
158
+ if (stat.isDirectory()) walk(full);
159
+ else out.push(path.relative(root, full).split(path.sep).join("/"));
160
+ }
161
+ };
162
+ walk(root);
163
+ return out.sort();
164
+ }
@@ -0,0 +1,286 @@
1
+ import { rmSync } from "node:fs";
2
+ import { mkdtemp } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+
6
+ import { parseOaiMemCitation } from "../citations.js";
7
+ import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
8
+ import { normalizeProjectionPreview } from "../memory-projection-format.js";
9
+ import { lintOkfDir } from "../okf/lint.js";
10
+ import { okfTypeForMemory, OKF_PROFILE_TYPE } from "../okf/type-mapping.js";
11
+ import {
12
+ OKF_EXPORT_VERSION,
13
+ publishBundle,
14
+ renderFrontmatter,
15
+ rejectSymlinkPath,
16
+ writeBundleFile,
17
+ } from "../okf/render.js";
18
+ // Re-exported for the existing `@remnic/core/export-okf` consumers and tests
19
+ // (one public surface; the value itself now lives in okf/render.ts).
20
+ export { OKF_EXPORT_VERSION };
21
+ import { StorageManager } from "../storage.js";
22
+ import type { MemoryFile, MemoryLink, MemoryStatus } from "../types.js";
23
+
24
+ // Shared bundle mechanics (frontmatter, publish, symlink guard, file write)
25
+ // live in ../okf/render.ts — one source of truth for every OKF exporter.
26
+ export const OKF_LOG_TRUNCATION_MARKER = "<!-- okf-log-truncated -->";
27
+ export const DEFAULT_OKF_LOG_MAX_ENTRIES = 500;
28
+
29
+ const MEMORY_STATUSES: readonly MemoryStatus[] = [
30
+ "active",
31
+ "pending_review",
32
+ "rejected",
33
+ "quarantined",
34
+ "superseded",
35
+ "archived",
36
+ "forgotten",
37
+ ];
38
+
39
+ export interface ExportOkfOptions {
40
+ memoryDir: string;
41
+ outDir: string;
42
+ includeStatus?: readonly string[];
43
+ includeCategories?: readonly string[];
44
+ excludeTags?: readonly string[];
45
+ includeProfile?: boolean;
46
+ includeWearables?: boolean;
47
+ includeLog?: boolean;
48
+ logMaxEntries?: number;
49
+ force?: boolean;
50
+ }
51
+
52
+ export interface ExportOkfResult {
53
+ exported: number;
54
+ excluded: number;
55
+ byCategory: Record<string, number>;
56
+ plaintextWarning: boolean;
57
+ }
58
+
59
+ export function parseIncludeStatus(raw: unknown): MemoryStatus[] {
60
+ const values = splitCsv(raw);
61
+ if (values.length === 0) return ["active"];
62
+ const allowed = new Set<string>(MEMORY_STATUSES);
63
+ for (const value of values) {
64
+ if (!allowed.has(value)) {
65
+ throw new Error(`invalid --include-status ${value}; allowed: ${MEMORY_STATUSES.join(", ")}`);
66
+ }
67
+ }
68
+ return values as MemoryStatus[];
69
+ }
70
+
71
+ export async function exportOkfBundle(opts: ExportOkfOptions): Promise<ExportOkfResult> {
72
+ const outDir = path.resolve(opts.outDir);
73
+ rejectSymlinkPath(outDir);
74
+ const includeStatus = new Set(parseIncludeStatus(opts.includeStatus));
75
+ const includeCategories = opts.includeCategories?.length ? new Set(opts.includeCategories) : null;
76
+ const excludeTags = new Set(opts.excludeTags ?? []);
77
+ const storage = new StorageManager(opts.memoryDir);
78
+ const memories = await storage.readAllMemories();
79
+ const included: MemoryFile[] = [];
80
+ let excluded = 0;
81
+ for (const memory of memories) {
82
+ const rel = toRel(memory.path, opts.memoryDir);
83
+ if (!opts.includeWearables && rel.startsWith("wearables/")) {
84
+ excluded += 1;
85
+ continue;
86
+ }
87
+ const status = inferMemoryStatus(memory.frontmatter, memory.path);
88
+ if (!includeStatus.has(status)) {
89
+ excluded += 1;
90
+ continue;
91
+ }
92
+ if (includeCategories && !includeCategories.has(memory.frontmatter.category)) {
93
+ excluded += 1;
94
+ continue;
95
+ }
96
+ if ((memory.frontmatter.tags ?? []).some((tag) => excludeTags.has(tag))) {
97
+ excluded += 1;
98
+ continue;
99
+ }
100
+ included.push(memory);
101
+ }
102
+ included.sort((a, b) => toRel(a.path, opts.memoryDir).localeCompare(toRel(b.path, opts.memoryDir)));
103
+
104
+ const staging = await mkdtemp(path.join(os.tmpdir(), "remnic-okf-export-"));
105
+ const byCategory: Record<string, number> = {};
106
+ const idToRel = new Map<string, string>();
107
+ for (const memory of included) {
108
+ const rel = toRel(memory.path, opts.memoryDir);
109
+ idToRel.set(memory.frontmatter.id, rel);
110
+ }
111
+ for (const memory of included) {
112
+ const rel = toRel(memory.path, opts.memoryDir);
113
+ const rendered = renderMemory(memory, rel, idToRel);
114
+ writeBundleFile(staging, rel, rendered);
115
+ const category = memory.frontmatter.category;
116
+ byCategory[category] = (byCategory[category] ?? 0) + 1;
117
+ }
118
+
119
+ if (opts.includeProfile) {
120
+ try {
121
+ const profile = await storage.readProfile();
122
+ if (profile) {
123
+ writeBundleFile(
124
+ staging,
125
+ "profile.md",
126
+ renderFrontmatter({
127
+ type: OKF_PROFILE_TYPE,
128
+ title: "User Profile",
129
+ timestamp: new Date(0).toISOString(),
130
+ }) + profile.replace(/^\uFEFF/, ""),
131
+ );
132
+ }
133
+ } catch {
134
+ // Profile is optional even when requested.
135
+ }
136
+ }
137
+
138
+ if (opts.includeLog) {
139
+ const events = await storage.readAllMemoryLifecycleEvents();
140
+ writeBundleFile(staging, "log.md", renderLog(events, idToRel, opts.logMaxEntries ?? DEFAULT_OKF_LOG_MAX_ENTRIES));
141
+ }
142
+
143
+ writeIndexes(staging, included, opts.memoryDir);
144
+ const lint = lintOkfDir(staging);
145
+ const blocking = lint.findings.filter((f) => f.code !== "skipped_encrypted" && f.code !== "reserved_basename");
146
+ if (blocking.length > 0) {
147
+ rmSync(staging, { recursive: true, force: true });
148
+ throw new Error(`OKF export failed lint: ${blocking.map((f) => `${f.file}: ${f.message}`).join("; ")}`);
149
+ }
150
+
151
+ publishBundle(staging, outDir, opts.force === true);
152
+ return {
153
+ exported: included.length,
154
+ excluded,
155
+ byCategory,
156
+ plaintextWarning: true,
157
+ };
158
+ }
159
+
160
+
161
+ function renderMemory(memory: MemoryFile, rel: string, idToRel: Map<string, string>): string {
162
+ const fm = memory.frontmatter;
163
+ const title = firstHeading(memory.content) ?? `${humanize(fm.category)} ${fm.created.slice(0, 10)}`;
164
+ const type = fm.type ?? okfTypeForMemory(fm);
165
+ const fields: Record<string, unknown> = {
166
+ ...fm,
167
+ type,
168
+ title,
169
+ description: normalizeProjectionPreview(memory.content),
170
+ tags: fm.tags ?? [],
171
+ timestamp: fm.updated,
172
+ };
173
+ if (fm.artifactType) fields.resource = rel;
174
+ let body = memory.content.trim();
175
+ const citation = parseOaiMemCitation(body);
176
+ if (citation) {
177
+ const start = body.indexOf("<oai-mem-citation>");
178
+ const end = body.indexOf("</oai-mem-citation>");
179
+ if (start >= 0 && end > start) {
180
+ body = `${body.slice(0, start).trimEnd()}\n\n${body.slice(end + "</oai-mem-citation>".length).trimStart()}`.trim();
181
+ }
182
+ const lines = citation.entries.map((entry, index) => `${index + 1}. [${entry.path}](${entry.path})`);
183
+ body = `${body}\n\n# Citations\n\n${lines.join("\n")}\n`;
184
+ }
185
+ const links = fm.links ?? [];
186
+ if (links.length > 0) {
187
+ body += `\n# Related\n\n${links.map((link) => renderRelated(link, idToRel)).join("\n")}\n`;
188
+ }
189
+ return renderFrontmatter(fields) + body + (body.endsWith("\n") ? "" : "\n");
190
+ }
191
+
192
+ function renderRelated(link: MemoryLink, idToRel: Map<string, string>): string {
193
+ const target = idToRel.get(link.targetId) ?? link.targetId;
194
+ const href = target.startsWith("/") ? target : `/${target}`;
195
+ return `- ${link.linkType}: [${link.targetId}](${href})`;
196
+ }
197
+
198
+ function writeIndexes(root: string, memories: MemoryFile[], memoryDir: string): void {
199
+ const groups = new Map<string, MemoryFile[]>();
200
+ for (const memory of memories) {
201
+ const rel = toRel(memory.path, memoryDir);
202
+ const dir = path.posix.dirname(rel);
203
+ const key = dir === "." ? "" : dir.split("/")[0] ?? "";
204
+ const list = groups.get(key) ?? [];
205
+ list.push(memory);
206
+ groups.set(key, list);
207
+ }
208
+ const sections = [...groups.keys()].sort().map((key) => {
209
+ const heading = key === "" ? "Root" : humanize(key);
210
+ const lines = (groups.get(key) ?? [])
211
+ .sort((a, b) => toRel(a.path, memoryDir).localeCompare(toRel(b.path, memoryDir)))
212
+ .map((memory) => {
213
+ const rel = toRel(memory.path, memoryDir);
214
+ const title = firstHeading(memory.content) ?? memory.frontmatter.id;
215
+ const description = normalizeProjectionPreview(memory.content);
216
+ return `* [${title}](/${rel}) - ${description}`;
217
+ });
218
+ return `## ${heading}\n\n${lines.join("\n")}`;
219
+ });
220
+ writeBundleFile(root, "index.md", `---\nokf_version: "${OKF_EXPORT_VERSION}"\n---\n\n${sections.join("\n\n")}\n`);
221
+ }
222
+
223
+ function renderLog(
224
+ events: Array<{ timestamp?: string; type?: string; action?: string; memoryId?: string }>,
225
+ idToRel: Map<string, string>,
226
+ maxEntries: number,
227
+ ): string {
228
+ const sorted = [...events].sort((a, b) => String(b.timestamp ?? "").localeCompare(String(a.timestamp ?? "")));
229
+ const truncated = sorted.length > maxEntries;
230
+ const kept = sorted.slice(0, maxEntries);
231
+ const byDay = new Map<string, typeof kept>();
232
+ for (const event of kept) {
233
+ const day = String(event.timestamp ?? "").slice(0, 10) || "unknown";
234
+ const list = byDay.get(day) ?? [];
235
+ list.push(event);
236
+ byDay.set(day, list);
237
+ }
238
+ const days = [...byDay.keys()].sort((a, b) => b.localeCompare(a));
239
+ const parts = ["# Log", ""];
240
+ for (const day of days) {
241
+ parts.push(`## ${day}`, "");
242
+ for (const event of byDay.get(day) ?? []) {
243
+ const action = boldAction(event.type ?? event.action ?? "Update");
244
+ const id = event.memoryId;
245
+ const rel = id ? idToRel.get(id) : undefined;
246
+ const target = rel ? `[${id}](/${rel})` : id ?? "";
247
+ parts.push(`- **${action}** ${target}`.trimEnd());
248
+ }
249
+ parts.push("");
250
+ }
251
+ if (truncated) parts.push(OKF_LOG_TRUNCATION_MARKER, "");
252
+ return `${parts.join("\n")}\n`;
253
+ }
254
+
255
+ function boldAction(raw: string): string {
256
+ const lower = raw.toLowerCase();
257
+ if (lower.includes("create") || lower.includes("add")) return "Creation";
258
+ if (lower.includes("deprecat") || lower.includes("delete") || lower.includes("archiv")) return "Deprecation";
259
+ return "Update";
260
+ }
261
+
262
+
263
+ function firstHeading(content: string): string | undefined {
264
+ for (const line of content.split("\n")) {
265
+ const match = /^#\s+(.+)$/.exec(line.trim());
266
+ if (match) return match[1]!.trim();
267
+ }
268
+ return undefined;
269
+ }
270
+
271
+ function humanize(value: string): string {
272
+ return value.replace(/[_-]/g, " ").replace(/\b\w/g, (ch) => ch.toUpperCase());
273
+ }
274
+
275
+
276
+
277
+ function splitCsv(raw: unknown): string[] {
278
+ if (raw === undefined || raw === null || raw === "") return [];
279
+ const parts = Array.isArray(raw) ? raw.map(String) : String(raw).split(",");
280
+ return parts.map((part) => part.trim()).filter((part) => part.length > 0);
281
+ }
282
+
283
+ function toRel(abs: string, root: string): string {
284
+ return path.relative(path.resolve(root), path.resolve(abs)).split(path.sep).join("/");
285
+ }
286
+