@remnic/core 9.65.7 → 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 (713) hide show
  1. package/dist/access-admin-ops-surface.d.ts +15 -14
  2. package/dist/access-admin-ops-surface.js +65 -62
  3. package/dist/access-authorization-probe.d.ts +15 -14
  4. package/dist/access-authorization-probe.js +66 -63
  5. package/dist/access-boundary.d.ts +15 -14
  6. package/dist/access-boundary.js +65 -62
  7. package/dist/access-citation-namespace.js +3 -3
  8. package/dist/access-cli.js +182 -174
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +2 -2
  11. package/dist/access-coding-context-resolution.js +2 -2
  12. package/dist/access-extraction-force-flush.d.ts +15 -14
  13. package/dist/access-extraction-force-flush.js +65 -62
  14. package/dist/access-health-types.d.ts +2 -2
  15. package/dist/access-http-lcm-compaction.d.ts +15 -14
  16. package/dist/access-http-lifecycle-flush.d.ts +15 -14
  17. package/dist/access-http-offline-stream.d.ts +15 -14
  18. package/dist/access-http-query.d.ts +3 -3
  19. package/dist/access-http-query.js +67 -64
  20. package/dist/access-http.d.ts +16 -15
  21. package/dist/access-http.js +87 -84
  22. package/dist/access-identity-continuity-surface.d.ts +13 -12
  23. package/dist/access-identity-continuity-surface.js +65 -62
  24. package/dist/access-lcm-surface.d.ts +15 -14
  25. package/dist/access-lcm-surface.js +65 -62
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp.d.ts +15 -14
  28. package/dist/access-mcp.js +77 -74
  29. package/dist/access-memory-search-fanout.d.ts +3 -3
  30. package/dist/{access-namespace-preflight-8VYKmRX0.d.ts → access-namespace-preflight-CLWUoMyW.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -4
  32. package/dist/access-namespace-preflight.js +65 -62
  33. package/dist/access-observe-write-surface.d.ts +15 -14
  34. package/dist/access-observe-write-surface.js +65 -62
  35. package/dist/access-offline-manifest.d.ts +13 -12
  36. package/dist/access-offline-manifest.js +16 -16
  37. package/dist/access-operations-batch.js +69 -66
  38. package/dist/access-operations.d.ts +16 -15
  39. package/dist/access-operations.js +74 -71
  40. package/dist/access-recall-concurrency.d.ts +15 -14
  41. package/dist/access-recall-concurrency.js +65 -62
  42. package/dist/access-recall-response.d.ts +15 -14
  43. package/dist/access-recall-response.js +65 -62
  44. package/dist/access-recall-surface.d.ts +15 -14
  45. package/dist/access-recall-surface.js +65 -62
  46. package/dist/access-schema.js +7 -7
  47. package/dist/{access-service-Crk__Git.d.ts → access-service-CEUE1Isj.d.ts} +14 -14
  48. package/dist/access-service-helpers.d.ts +15 -14
  49. package/dist/access-service.d.ts +15 -14
  50. package/dist/access-service.js +65 -62
  51. package/dist/access-surface-catalog.d.ts +15 -14
  52. package/dist/access-surface-catalog.js +69 -64
  53. package/dist/access-surface-catalog.js.map +1 -1
  54. package/dist/access-wearables-meetings-surface.d.ts +6 -4
  55. package/dist/action-confidence.d.ts +2 -2
  56. package/dist/active-context-config.d.ts +27 -0
  57. package/dist/active-context-config.js +14 -0
  58. package/dist/active-context-transform.d.ts +267 -0
  59. package/dist/active-context-transform.js +31 -0
  60. package/dist/active-memory-bridge.d.ts +2 -2
  61. package/dist/active-memory-bridge.js +2 -2
  62. package/dist/active-recall.d.ts +2 -2
  63. package/dist/active-recall.js +17 -16
  64. package/dist/active-recall.js.map +1 -1
  65. package/dist/adapters/index.js +7 -7
  66. package/dist/adapters/registry.js +3 -3
  67. package/dist/ambient-provenance.d.ts +2 -2
  68. package/dist/artifact-search.d.ts +2 -2
  69. package/dist/{auto-sync-XVMLL2RH.js → auto-sync-Q6Q2FVSC.js} +10 -10
  70. package/dist/behavior-learner.d.ts +2 -2
  71. package/dist/behavior-signals.d.ts +2 -2
  72. package/dist/bootstrap.d.ts +13 -12
  73. package/dist/briefing-window.d.ts +5 -3
  74. package/dist/briefing.d.ts +5 -3
  75. package/dist/briefing.js +33 -33
  76. package/dist/buffer-surprise-report.d.ts +2 -2
  77. package/dist/buffer-turn-helpers.d.ts +2 -2
  78. package/dist/buffer.d.ts +5 -3
  79. package/dist/buffer.js +24 -8
  80. package/dist/bulk-import/index.d.ts +4 -4
  81. package/dist/calibration.d.ts +2 -2
  82. package/dist/calibration.js +1 -1
  83. package/dist/capabilities.d.ts +2 -2
  84. package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
  85. package/dist/{catalog-DybwVNW3.d.ts → catalog-D1HgugTA.d.ts} +1 -1
  86. package/dist/causal-behavior.d.ts +4 -4
  87. package/dist/causal-consolidation.d.ts +2 -2
  88. package/dist/causal-consolidation.js +34 -34
  89. package/dist/causal-trajectory-graph.d.ts +2 -2
  90. package/dist/{chunk-CFGU52XJ.js → chunk-23CVL7HS.js} +2 -2
  91. package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
  92. package/dist/{chunk-6CPUQ5D6.js → chunk-2LBAFHOQ.js} +15 -15
  93. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  94. package/dist/{chunk-IP4ZNT4U.js → chunk-33MFRY25.js} +2 -2
  95. package/dist/{chunk-VFYRYFLL.js → chunk-3TSU662L.js} +3 -3
  96. package/dist/chunk-43HUVDTD.js +114 -0
  97. package/dist/chunk-43HUVDTD.js.map +1 -0
  98. package/dist/{chunk-VXVZ2GM3.js → chunk-4FHRZD5T.js} +2 -2
  99. package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
  100. package/dist/chunk-4OFKZAJG.js.map +1 -0
  101. package/dist/{chunk-5VPQSRQO.js → chunk-4STAANV7.js} +3 -3
  102. package/dist/{chunk-46WM6JX2.js → chunk-4ZWCQJNM.js} +5 -5
  103. package/dist/{chunk-LLQCM2U2.js → chunk-56IV4J5W.js} +617 -167
  104. package/dist/chunk-56IV4J5W.js.map +1 -0
  105. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  106. package/dist/{chunk-YKWFK7XA.js → chunk-6CEGSTBD.js} +7 -7
  107. package/dist/{chunk-I7EX6KSH.js → chunk-6QDXA26G.js} +264 -210
  108. package/dist/chunk-6QDXA26G.js.map +1 -0
  109. package/dist/{chunk-GEPACVWN.js → chunk-6RUHELWR.js} +3 -3
  110. package/dist/{chunk-ZAOHJDKH.js → chunk-72OIT7KS.js} +4 -4
  111. package/dist/{chunk-KQAFEZQX.js → chunk-7LCGFUMB.js} +4 -4
  112. package/dist/{chunk-7TCGNUVP.js → chunk-7UTDHQZ5.js} +3 -3
  113. package/dist/{chunk-5HK3CJAR.js → chunk-7XOG75AU.js} +3 -3
  114. package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
  115. package/dist/chunk-AJTG3CP7.js.map +1 -0
  116. package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
  117. package/dist/chunk-AL3UYZ5N.js.map +1 -0
  118. package/dist/chunk-B32WYRXX.js +77 -0
  119. package/dist/chunk-B32WYRXX.js.map +1 -0
  120. package/dist/{chunk-C24UZSFW.js → chunk-CEH2AFXG.js} +6 -6
  121. package/dist/{chunk-YOXVZJFM.js → chunk-CFVTRUR3.js} +2 -2
  122. package/dist/{chunk-ACOC27BB.js → chunk-CN4VKV3S.js} +2 -2
  123. package/dist/{chunk-PMVPCZJZ.js → chunk-CTCGHNWN.js} +6 -6
  124. package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
  125. package/dist/{chunk-T42L3S6A.js → chunk-DDX6KIXF.js} +2 -2
  126. package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
  127. package/dist/{chunk-WTOZBZNN.js → chunk-DMEHOEC7.js} +6 -6
  128. package/dist/{chunk-OPPBTPUU.js → chunk-DUAJKRR2.js} +4 -4
  129. package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
  130. package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
  131. package/dist/{chunk-SVVIASVX.js → chunk-EFQCDJZ2.js} +7 -7
  132. package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
  133. package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
  134. package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
  135. package/dist/{chunk-Z4U3UN56.js → chunk-EZSCW4EM.js} +6 -6
  136. package/dist/{chunk-F6QHHRWP.js → chunk-FESUGFIL.js} +3 -3
  137. package/dist/{chunk-S3K2CIK5.js → chunk-FKKGCGYL.js} +3 -3
  138. package/dist/{chunk-BWGCOLEL.js → chunk-FTTJRVB7.js} +2 -2
  139. package/dist/{chunk-JAQXUGLN.js → chunk-FYWLSFFS.js} +2 -2
  140. package/dist/{chunk-BJTHRFFC.js → chunk-GEJKYA7D.js} +77 -36
  141. package/dist/chunk-GEJKYA7D.js.map +1 -0
  142. package/dist/chunk-GSKINLAK.js +267 -0
  143. package/dist/chunk-GSKINLAK.js.map +1 -0
  144. package/dist/{chunk-OPGL46PX.js → chunk-GX6FTSYH.js} +2 -2
  145. package/dist/{chunk-A32YEQAM.js → chunk-H7VDIF2V.js} +2 -2
  146. package/dist/{chunk-PDDSFELN.js → chunk-HJXA6ZM7.js} +2 -2
  147. package/dist/{chunk-RGCF4XNH.js → chunk-HNPE66LB.js} +8 -8
  148. package/dist/{chunk-SEA6M7SS.js → chunk-I5VB44ZK.js} +2 -2
  149. package/dist/{chunk-SDEPLF7V.js → chunk-IBJ6U753.js} +2 -2
  150. package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
  151. package/dist/{chunk-RQE4TITU.js → chunk-IHGMRDEE.js} +431 -1834
  152. package/dist/chunk-IHGMRDEE.js.map +1 -0
  153. package/dist/{chunk-3RI5Y7KU.js → chunk-IVIAHQBR.js} +2 -2
  154. package/dist/{chunk-7WR462EM.js → chunk-J3OND5QT.js} +4 -4
  155. package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
  156. package/dist/chunk-JALOAKSZ.js.map +1 -0
  157. package/dist/{chunk-T3JQTCCO.js → chunk-JI7U6AS3.js} +4 -4
  158. package/dist/{chunk-DVYRD4HY.js → chunk-JRRQ747T.js} +36 -7
  159. package/dist/chunk-JRRQ747T.js.map +1 -0
  160. package/dist/{chunk-I32NKXE2.js → chunk-JTWZKNUH.js} +5 -5
  161. package/dist/chunk-K66OY4EI.js +202 -0
  162. package/dist/chunk-K66OY4EI.js.map +1 -0
  163. package/dist/{chunk-XAB6STPO.js → chunk-KODXCHXJ.js} +17 -3
  164. package/dist/chunk-KODXCHXJ.js.map +1 -0
  165. package/dist/{chunk-ZPUIRTIZ.js → chunk-KOLJJN5G.js} +12 -75
  166. package/dist/chunk-KOLJJN5G.js.map +1 -0
  167. package/dist/{chunk-FMQ4MOQO.js → chunk-KXIXO76C.js} +32 -19
  168. package/dist/chunk-KXIXO76C.js.map +1 -0
  169. package/dist/{chunk-VKCAHCBI.js → chunk-L4X4PJYK.js} +2 -2
  170. package/dist/chunk-LB7WCZHY.js +553 -0
  171. package/dist/chunk-LB7WCZHY.js.map +1 -0
  172. package/dist/{chunk-W4BMEGQA.js → chunk-LUDBXTBJ.js} +8 -8
  173. package/dist/{chunk-I4343FIA.js → chunk-MAH64N55.js} +28 -10
  174. package/dist/chunk-MAH64N55.js.map +1 -0
  175. package/dist/{chunk-RIAM7DND.js → chunk-ME35HVDJ.js} +2 -2
  176. package/dist/{chunk-H63EDPFJ.js → chunk-MI2OTWV5.js} +15 -2
  177. package/dist/{chunk-H63EDPFJ.js.map → chunk-MI2OTWV5.js.map} +1 -1
  178. package/dist/{chunk-LBFFNDFM.js → chunk-MINHJ55X.js} +1 -1
  179. package/dist/chunk-MINHJ55X.js.map +1 -0
  180. package/dist/{chunk-NG3MBQV4.js → chunk-MJRGVXPQ.js} +2 -2
  181. package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
  182. package/dist/{chunk-7F27PCSN.js → chunk-MN5NOOI7.js} +2 -2
  183. package/dist/{chunk-JCWY73FK.js → chunk-N4F7ZSSG.js} +2 -2
  184. package/dist/{chunk-TR7DGXGI.js → chunk-NACLNNFQ.js} +5 -5
  185. package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
  186. package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
  187. package/dist/{chunk-MFOSZUIT.js → chunk-NPIBN2VL.js} +2 -2
  188. package/dist/{chunk-IY7UXD3J.js → chunk-O57GM3FR.js} +2 -2
  189. package/dist/{chunk-I2HTKOOP.js → chunk-O7ERGZDA.js} +5 -5
  190. package/dist/{chunk-GTSVEEP3.js → chunk-OAJMQKQR.js} +3 -3
  191. package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
  192. package/dist/{chunk-D4QVPP3G.js → chunk-PEBH5DCK.js} +18 -11
  193. package/dist/chunk-PEBH5DCK.js.map +1 -0
  194. package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
  195. package/dist/{chunk-EOHKUWXW.js → chunk-QCRJMU5V.js} +2 -2
  196. package/dist/chunk-QJCWK2A7.js +1466 -0
  197. package/dist/chunk-QJCWK2A7.js.map +1 -0
  198. package/dist/{chunk-THG4GYIE.js → chunk-RDGKVH6T.js} +11 -7
  199. package/dist/{chunk-THG4GYIE.js.map → chunk-RDGKVH6T.js.map} +1 -1
  200. package/dist/{chunk-5DH6PG4B.js → chunk-RZ3IZIJG.js} +3 -3
  201. package/dist/{chunk-AAXJNINV.js → chunk-SN4JXNLL.js} +2 -2
  202. package/dist/chunk-TB2MJRI6.js +866 -0
  203. package/dist/chunk-TB2MJRI6.js.map +1 -0
  204. package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
  205. package/dist/chunk-TEZ2HTC7.js.map +1 -0
  206. package/dist/{chunk-SVSRPG6M.js → chunk-TNGH4ZYI.js} +2 -2
  207. package/dist/{chunk-HZNYJN77.js → chunk-TNXNECAN.js} +6 -6
  208. package/dist/{chunk-JOEJG4SD.js → chunk-TVW4C7PV.js} +5 -5
  209. package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
  210. package/dist/{chunk-R2MZCYA6.js → chunk-UNUMFURP.js} +3 -3
  211. package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
  212. package/dist/chunk-UYA36DQ7.js.map +1 -0
  213. package/dist/{chunk-AFR6AIM4.js → chunk-VCKWULAK.js} +112 -87
  214. package/dist/chunk-VCKWULAK.js.map +1 -0
  215. package/dist/chunk-VOSWUO3K.js +100 -0
  216. package/dist/chunk-VOSWUO3K.js.map +1 -0
  217. package/dist/{chunk-YRVAKONL.js → chunk-VQ4AMTGZ.js} +1 -1
  218. package/dist/{chunk-3BCULS4U.js → chunk-VQNRICAQ.js} +145 -507
  219. package/dist/chunk-VQNRICAQ.js.map +1 -0
  220. package/dist/{chunk-RAIUTAZZ.js → chunk-WKAXBXVA.js} +2 -2
  221. package/dist/{chunk-ZIJDI4CP.js → chunk-WKJFIMVN.js} +2 -2
  222. package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
  223. package/dist/{chunk-7BEPVIH3.js → chunk-X5YYSAZX.js} +4 -4
  224. package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
  225. package/dist/{chunk-F635GAL7.js → chunk-XKNHFDTT.js} +33 -13
  226. package/dist/chunk-XKNHFDTT.js.map +1 -0
  227. package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
  228. package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
  229. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  230. package/dist/{chunk-ANJXPFRS.js → chunk-YXFCALVT.js} +14 -14
  231. package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
  232. package/dist/{chunk-5HERQ5FX.js → chunk-Z3YEGSR4.js} +10 -10
  233. package/dist/{chunk-YWSQD2IB.js → chunk-ZJPM7GZ3.js} +2 -2
  234. package/dist/{chunk-5S4LQOPE.js → chunk-ZW4VXELZ.js} +2 -2
  235. package/dist/{cli-B322UMvB.d.ts → cli-BEkm2MEf.d.ts} +5 -5
  236. package/dist/cli.d.ts +17 -16
  237. package/dist/cli.js +126 -120
  238. package/dist/coding/export-okf-codegraph.d.ts +56 -0
  239. package/dist/coding/export-okf-codegraph.js +526 -0
  240. package/dist/coding/export-okf-codegraph.js.map +1 -0
  241. package/dist/coding/pre-action-gate.d.ts +2 -2
  242. package/dist/compounding/engine.d.ts +5 -3
  243. package/dist/compounding/engine.js +34 -34
  244. package/dist/compounding/preference-consolidator.d.ts +4 -4
  245. package/dist/compression-optimizer.d.ts +2 -2
  246. package/dist/config-security.js +2 -2
  247. package/dist/config.d.ts +2 -2
  248. package/dist/config.js +17 -16
  249. package/dist/connectors/codex-materialize-runner.d.ts +2 -2
  250. package/dist/connectors/codex-materialize-runner.js +33 -33
  251. package/dist/connectors/codex-materialize.d.ts +2 -2
  252. package/dist/connectors/index.d.ts +2 -2
  253. package/dist/connectors/index.js +33 -33
  254. package/dist/consolidation-provenance-check.d.ts +5 -3
  255. package/dist/consolidation-provenance-check.js +5 -5
  256. package/dist/consolidation-undo.d.ts +5 -3
  257. package/dist/consolidation-undo.js +3 -3
  258. package/dist/context-summary.d.ts +43 -0
  259. package/dist/context-summary.js +14 -0
  260. package/dist/context-summary.js.map +1 -0
  261. package/dist/contradiction/index.d.ts +6 -4
  262. package/dist/contradiction/index.js +10 -10
  263. package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
  264. package/dist/contradiction-scan-NOYMFG66.js.map +1 -0
  265. package/dist/converge-config.d.ts +2 -2
  266. package/dist/convergence-refresh.d.ts +5 -3
  267. package/dist/convergence-refresh.js +36 -36
  268. package/dist/conversation-index/backend.d.ts +2 -2
  269. package/dist/conversation-index/chunker.d.ts +2 -2
  270. package/dist/conversation-index/faiss-adapter.d.ts +2 -2
  271. package/dist/conversation-index/indexer.d.ts +2 -2
  272. package/dist/conversation-index/search.d.ts +2 -2
  273. package/dist/corpus-watermark.d.ts +2 -2
  274. package/dist/corpus-watermark.js +35 -35
  275. package/dist/cross-lingual-recall.d.ts +2 -2
  276. package/dist/dashboard-runtime.js +2 -2
  277. package/dist/day-summary.d.ts +2 -2
  278. package/dist/delinearize.d.ts +2 -2
  279. package/dist/dependency-propagation-config.d.ts +2 -2
  280. package/dist/{dependency-propagation-delivery-BGcNairQ.d.ts → dependency-propagation-delivery-BCpeo14F.d.ts} +1 -1
  281. package/dist/direct-answer-wiring.d.ts +2 -2
  282. package/dist/direct-answer.d.ts +2 -2
  283. package/dist/embedding-fallback.d.ts +2 -2
  284. package/dist/enrichment/index.d.ts +2 -2
  285. package/dist/entity-origin-fields.d.ts +2 -2
  286. package/dist/entity-retrieval.d.ts +5 -3
  287. package/dist/entity-retrieval.js +34 -34
  288. package/dist/entity-schema.d.ts +2 -2
  289. package/dist/episodic-context.d.ts +2 -2
  290. package/dist/eval-trajectory-contracts.d.ts +2 -2
  291. package/dist/eval-trajectory-store.d.ts +2 -2
  292. package/dist/eval-trajectory.d.ts +2 -2
  293. package/dist/event-order-recall.js +3 -3
  294. package/dist/explicit-capture.d.ts +13 -12
  295. package/dist/explicit-capture.js +12 -12
  296. package/dist/external-wiki-access.d.ts +15 -14
  297. package/dist/external-wiki-access.js +66 -63
  298. package/dist/external-wiki-collection-registration.d.ts +2 -2
  299. package/dist/external-wiki-collection.d.ts +2 -2
  300. package/dist/external-wiki-mcp-tools.d.ts +15 -14
  301. package/dist/extraction-error-classification.d.ts +2 -2
  302. package/dist/extraction-faithfulness.d.ts +2 -2
  303. package/dist/extraction-faithfulness.js +2 -2
  304. package/dist/extraction-judge-telemetry.d.ts +2 -2
  305. package/dist/extraction-judge-training.d.ts +2 -2
  306. package/dist/extraction-judge.d.ts +2 -2
  307. package/dist/extraction-judge.js +2 -2
  308. package/dist/extraction-liveness.d.ts +2 -2
  309. package/dist/extraction-normalization.d.ts +2 -2
  310. package/dist/extraction-prompt.d.ts +2 -2
  311. package/dist/extraction-source-grounding-rules.d.ts +2 -2
  312. package/dist/extraction-source-grounding.d.ts +2 -2
  313. package/dist/extraction.d.ts +2 -2
  314. package/dist/extraction.js +47 -44
  315. package/dist/fallback-llm.d.ts +8 -2
  316. package/dist/fallback-llm.js +1 -1
  317. package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
  318. package/dist/{forget-SZ2BXDGF.js → forget-2AE4MDK3.js} +3 -3
  319. package/dist/graph-dashboard-diff.d.ts +2 -2
  320. package/dist/graph-dashboard-key.d.ts +2 -2
  321. package/dist/graph-dashboard-parser.d.ts +2 -2
  322. package/dist/graph-edge-reinforcement.d.ts +2 -2
  323. package/dist/graph-path-reconstruction.d.ts +2 -2
  324. package/dist/graph-path-scoring.d.ts +2 -2
  325. package/dist/graph-snapshot.d.ts +2 -2
  326. package/dist/graph.d.ts +2 -2
  327. package/dist/harmonic-retrieval.js +1 -1
  328. package/dist/importance.d.ts +2 -2
  329. package/dist/importers/index.d.ts +2 -2
  330. package/dist/in-flight-reads.d.ts +2 -2
  331. package/dist/{index-By2QUAMh.d.ts → index-D_pyMUaP.d.ts} +2 -2
  332. package/dist/index.d.ts +261 -30
  333. package/dist/index.js +321 -257
  334. package/dist/intent.d.ts +2 -2
  335. package/dist/lcm/engine.d.ts +3 -3
  336. package/dist/lcm/engine.js +5 -4
  337. package/dist/lcm/index.d.ts +4 -3
  338. package/dist/lcm/index.js +12 -11
  339. package/dist/lcm/summarizer.d.ts +4 -6
  340. package/dist/lcm/summarizer.js +2 -1
  341. package/dist/lcm/tools.d.ts +4 -4
  342. package/dist/lifecycle.d.ts +2 -2
  343. package/dist/live-connectors-runner.d.ts +2 -2
  344. package/dist/local-llm.d.ts +2 -2
  345. package/dist/local-model-endpoint.d.ts +2 -2
  346. package/dist/location/index.d.ts +315 -6
  347. package/dist/location/index.js +151 -19
  348. package/dist/maintenance/memory-governance.d.ts +2 -2
  349. package/dist/maintenance/memory-governance.js +34 -34
  350. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +5 -3
  351. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -33
  352. package/dist/maintenance/rebuild-memory-projection.d.ts +5 -3
  353. package/dist/maintenance/rebuild-memory-projection.js +35 -35
  354. package/dist/{maintenance-Dm2McrIx.d.ts → maintenance-DDUX9d6D.d.ts} +3 -3
  355. package/dist/mcp-memory-inspector-app.d.ts +15 -14
  356. package/dist/mcp-read-only-tools.js +1 -1
  357. package/dist/memory-action-policy.d.ts +18 -3
  358. package/dist/memory-action-policy.js +3 -1
  359. package/dist/memory-cache.d.ts +2 -2
  360. package/dist/memory-controller.d.ts +2 -2
  361. package/dist/memory-controller.js +2 -2
  362. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -2
  363. package/dist/memory-projection-mutations.js +3 -3
  364. package/dist/memory-projection-store.d.ts +2 -2
  365. package/dist/memory-projection-store.js +1 -1
  366. package/dist/memory-provenance.d.ts +2 -2
  367. package/dist/memory-snapshot.d.ts +2 -2
  368. package/dist/memory-subject-cli.d.ts +15 -14
  369. package/dist/memory-subject.d.ts +15 -14
  370. package/dist/memory-subject.js +5 -5
  371. package/dist/memory-worth-outcomes.d.ts +5 -3
  372. package/dist/models-json.d.ts +2 -2
  373. package/dist/namespaces/migrate.d.ts +6 -4
  374. package/dist/namespaces/migrate.js +34 -34
  375. package/dist/namespaces/principal.d.ts +2 -2
  376. package/dist/namespaces/search.d.ts +2 -2
  377. package/dist/namespaces/search.js +8 -8
  378. package/dist/namespaces/storage.d.ts +6 -4
  379. package/dist/namespaces/storage.js +33 -33
  380. package/dist/native-knowledge.d.ts +2 -2
  381. package/dist/offline-sync-file-io.js +3 -3
  382. package/dist/offline-sync-impression-drain.d.ts +2 -2
  383. package/dist/offline-sync-impression-drain.js +9 -9
  384. package/dist/offline-sync.js +4 -4
  385. package/dist/operator-doctor-corpus.d.ts +2 -2
  386. package/dist/operator-doctor-corpus.js +36 -36
  387. package/dist/operator-doctor-replica.d.ts +2 -2
  388. package/dist/operator-toolkit.d.ts +6 -4
  389. package/dist/operator-toolkit.js +56 -55
  390. package/dist/orchestration/compression-guideline-coordinator.d.ts +5 -3
  391. package/dist/orchestration/maintenance.d.ts +7 -5
  392. package/dist/orchestration/maintenance.js +48 -47
  393. package/dist/{orchestrator-Co1DyfuP.d.ts → orchestrator-3F4jihCo.d.ts} +8 -8
  394. package/dist/orchestrator.d.ts +13 -12
  395. package/dist/orchestrator.js +182 -174
  396. package/dist/page-versioning.js +3 -3
  397. package/dist/patterns-cli.d.ts +2 -2
  398. package/dist/{pipeline-DotMnb6y.d.ts → pipeline-CB1dj6Uh.d.ts} +1 -1
  399. package/dist/policy-runtime.d.ts +2 -2
  400. package/dist/proactive-contention.d.ts +2 -2
  401. package/dist/provenance.d.ts +2 -2
  402. package/dist/{public-http-PJRtnSi-.d.ts → public-http-34-JIAGQ.d.ts} +1 -1
  403. package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
  404. package/dist/{qmd-BP0n11fR.d.ts → qmd-edLLZXc5.d.ts} +1 -1
  405. package/dist/qmd-preflight.d.ts +3 -3
  406. package/dist/qmd-recall-cache.d.ts +2 -2
  407. package/dist/qmd.d.ts +3 -3
  408. package/dist/qmd.js +4 -4
  409. package/dist/recall-concurrency-config.d.ts +2 -2
  410. package/dist/recall-disclosure-escalation.d.ts +2 -2
  411. package/dist/recall-explain-renderer.d.ts +2 -2
  412. package/dist/recall-explain-renderer.js +3 -3
  413. package/dist/recall-memory-map.d.ts +2 -2
  414. package/dist/recall-planner-llm.d.ts +2 -2
  415. package/dist/recall-planner-llm.js +1 -1
  416. package/dist/recall-state.d.ts +2 -2
  417. package/dist/recall-tag-filter.d.ts +2 -2
  418. package/dist/recall-timings.d.ts +2 -2
  419. package/dist/recall-xray-cli.d.ts +2 -2
  420. package/dist/recall-xray-cli.js +4 -4
  421. package/dist/recall-xray-renderer.d.ts +2 -2
  422. package/dist/recall-xray-renderer.js +3 -3
  423. package/dist/recall-xray.d.ts +2 -2
  424. package/dist/recall-xray.js +2 -2
  425. package/dist/reconcile/cursor.d.ts +2 -2
  426. package/dist/reconcile/manifest.d.ts +2 -2
  427. package/dist/reconcile/manifest.js +5 -5
  428. package/dist/reconcile/plan.d.ts +2 -2
  429. package/dist/replay/normalizers/chatgpt.d.ts +2 -2
  430. package/dist/replay/normalizers/claude.d.ts +2 -2
  431. package/dist/replay/normalizers/openclaw.d.ts +2 -2
  432. package/dist/replay/normalizers/shared.d.ts +2 -2
  433. package/dist/replay/runner.d.ts +2 -2
  434. package/dist/replay/types.d.ts +2 -2
  435. package/dist/replica-divergence.d.ts +2 -2
  436. package/dist/replica-peers-config.d.ts +2 -2
  437. package/dist/{resolution-4552BNRV.js → resolution-4DLI3IOR.js} +11 -11
  438. package/dist/resolution-4DLI3IOR.js.map +1 -0
  439. package/dist/resolve-auth-token.d.ts +2 -2
  440. package/dist/resume-bundles.js +18 -17
  441. package/dist/retrieval-agents.d.ts +3 -3
  442. package/dist/retrieval-tiers.d.ts +2 -2
  443. package/dist/routing/engine.d.ts +2 -2
  444. package/dist/routing/store.d.ts +2 -2
  445. package/dist/salvage-envelope.d.ts +2 -2
  446. package/dist/salvage-envelope.js +7 -7
  447. package/dist/schemas.d.ts +572 -107
  448. package/dist/schemas.js +3 -1
  449. package/dist/{scope-profiles-6ChZKTy-.d.ts → scope-profiles-BF2lu81V.d.ts} +1 -1
  450. package/dist/search/document-scanner.js +1 -1
  451. package/dist/search/embed-helper.d.ts +2 -2
  452. package/dist/search/factory.d.ts +2 -2
  453. package/dist/search/factory.js +7 -7
  454. package/dist/search/index.d.ts +2 -2
  455. package/dist/search/index.js +13 -13
  456. package/dist/search/lancedb-backend.d.ts +2 -2
  457. package/dist/search/lancedb-backend.js +1 -1
  458. package/dist/search/meilisearch-backend.d.ts +2 -2
  459. package/dist/search/meilisearch-backend.js +1 -1
  460. package/dist/search/noop-backend.d.ts +2 -2
  461. package/dist/search/orama-backend.d.ts +2 -2
  462. package/dist/search/orama-backend.js +1 -1
  463. package/dist/search/port.d.ts +2 -2
  464. package/dist/search/remote-backend.d.ts +2 -2
  465. package/dist/secure-store/index.js +3 -3
  466. package/dist/{semantic-consolidation-DziYcW5J.d.ts → semantic-consolidation-5OuWXBRt.d.ts} +1 -1
  467. package/dist/semantic-consolidation.d.ts +3 -3
  468. package/dist/semantic-consolidation.js +37 -37
  469. package/dist/semantic-rule-promotion.js +33 -33
  470. package/dist/semantic-rule-verifier.d.ts +2 -2
  471. package/dist/semantic-rule-verifier.js +33 -33
  472. package/dist/{service-C7rIBuK_.d.ts → service-CrqEhLXD.d.ts} +2 -2
  473. package/dist/session-observer-bands.d.ts +2 -2
  474. package/dist/session-observer-state.d.ts +2 -2
  475. package/dist/shared-context/manager.d.ts +2 -2
  476. package/dist/signal.d.ts +2 -2
  477. package/dist/source-agent-qualifier.d.ts +2 -2
  478. package/dist/source-agent-qualifier.js +42 -39
  479. package/dist/standup/build.d.ts +16 -0
  480. package/dist/standup/build.js +17 -0
  481. package/dist/standup/build.js.map +1 -0
  482. package/dist/{storage-B1hEx8Xg.d.ts → storage-BQn-xnxm.d.ts} +4 -1
  483. package/dist/storage.d.ts +5 -3
  484. package/dist/storage.js +32 -32
  485. package/dist/subject-config.d.ts +2 -2
  486. package/dist/subject-config.js +6 -6
  487. package/dist/summarizer.d.ts +2 -2
  488. package/dist/summarizer.js +2 -2
  489. package/dist/summary-snapshot.d.ts +2 -2
  490. package/dist/support-passport/index.d.ts +20 -19
  491. package/dist/support-passport/index.js +68 -65
  492. package/dist/temporal-supersession.d.ts +3 -3
  493. package/dist/temporal-timeline-recall.d.ts +2 -2
  494. package/dist/temporal-validity.d.ts +2 -2
  495. package/dist/threading.d.ts +2 -2
  496. package/dist/tier-migration.d.ts +5 -3
  497. package/dist/tier-routing.d.ts +2 -2
  498. package/dist/tier-routing.js +2 -2
  499. package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
  500. package/dist/topics.d.ts +2 -2
  501. package/dist/transcript.d.ts +2 -2
  502. package/dist/transfer/capsule-export.js +2 -2
  503. package/dist/transfer/capsule-import.js +5 -5
  504. package/dist/transfer/export-okf.d.ts +39 -0
  505. package/dist/transfer/export-okf.js +112 -0
  506. package/dist/transfer/export-okf.js.map +1 -0
  507. package/dist/transfer/types.d.ts +12 -12
  508. package/dist/trust-score-stage.d.ts +2 -2
  509. package/dist/trust-score.d.ts +2 -2
  510. package/dist/{types-BHDNxGTT.d.ts → types-BRpcNjHZ.d.ts} +119 -3
  511. package/dist/types.d.ts +2 -2
  512. package/dist/types.js +1 -1
  513. package/dist/utility-runtime.d.ts +2 -2
  514. package/dist/verified-recall.js +33 -33
  515. package/dist/who-knows-cli.d.ts +15 -14
  516. package/dist/who-knows-cli.js +34 -34
  517. package/dist/who-knows.d.ts +15 -14
  518. package/dist/who-knows.js +33 -33
  519. package/dist/write-envelope.d.ts +2 -2
  520. package/dist/write-envelope.js +6 -6
  521. package/package.json +54 -3
  522. package/src/access-admin-ops-surface.ts +6 -1
  523. package/src/access-boundary.ts +1 -0
  524. package/src/access-http.ts +3 -1
  525. package/src/access-mcp-output-schemas.ts +1 -0
  526. package/src/access-mcp.ts +3 -3
  527. package/src/access-operations.ts +1 -0
  528. package/src/access-service-offline-file-content.test.ts +63 -0
  529. package/src/access-surface-catalog.ts +2 -0
  530. package/src/active-context-config.ts +98 -0
  531. package/src/active-context-transform.test.ts +533 -0
  532. package/src/active-context-transform.ts +981 -0
  533. package/src/activity/config.test.ts +1 -0
  534. package/src/activity/config.ts +21 -1
  535. package/src/activity/index.ts +1 -0
  536. package/src/activity/timeline/build.ts +279 -0
  537. package/src/activity/timeline/categories.ts +111 -0
  538. package/src/activity/timeline/classify.ts +110 -0
  539. package/src/activity/timeline/corrections.ts +145 -0
  540. package/src/activity/timeline/index.ts +6 -0
  541. package/src/activity/timeline/timeline.test.ts +277 -0
  542. package/src/activity/timeline/types.ts +106 -0
  543. package/src/activity/types.ts +6 -0
  544. package/src/cli/okf-commands.ts +45 -0
  545. package/src/cli.ts +2 -2
  546. package/src/coding/export-okf-codegraph.test.ts +381 -0
  547. package/src/coding/export-okf-codegraph.ts +565 -0
  548. package/src/config.test.ts +1 -0
  549. package/src/config.ts +3 -5
  550. package/src/context-summary.ts +182 -0
  551. package/src/extraction-prompt-safety.test.ts +14 -2
  552. package/src/extraction.ts +21 -1
  553. package/src/fallback-llm.test.ts +134 -0
  554. package/src/fallback-llm.ts +77 -5
  555. package/src/index.ts +4 -11
  556. package/src/lcm/summarizer.ts +14 -93
  557. package/src/location/access-operations.ts +17 -8
  558. package/src/location/backfill.ts +137 -0
  559. package/src/location/config.test.ts +3 -0
  560. package/src/location/config.ts +46 -2
  561. package/src/location/http-glue.ts +1 -1
  562. package/src/location/index.ts +3 -0
  563. package/src/location/intervals.ts +1 -0
  564. package/src/location/matching.test.ts +65 -0
  565. package/src/location/matching.ts +354 -0
  566. package/src/location/mcp-tools.ts +2 -1
  567. package/src/location/surfaces.test.ts +15 -2
  568. package/src/location/surfaces.ts +95 -18
  569. package/src/location/tagging.test.ts +119 -0
  570. package/src/location/tagging.ts +277 -0
  571. package/src/location/types.ts +23 -1
  572. package/src/mcp-read-only-tools.ts +1 -0
  573. package/src/memory-action-policy.ts +28 -0
  574. package/src/memory-projection-store.ts +3 -1
  575. package/src/okf/cli.ts +18 -5
  576. package/src/okf/config.ts +5 -0
  577. package/src/okf/index-files.test.ts +60 -0
  578. package/src/okf/index-files.ts +114 -0
  579. package/src/okf/render.ts +133 -0
  580. package/src/okf/type-mapping.test.ts +3 -0
  581. package/src/okf/type-mapping.ts +2 -0
  582. package/src/orchestration/extraction-run.ts +2 -1
  583. package/src/orchestration/generic-recall-paths.ts +4 -3
  584. package/src/schemas.ts +17 -1
  585. package/src/standup/access-operations.ts +14 -0
  586. package/src/standup/build.test.ts +34 -0
  587. package/src/standup/build.ts +115 -0
  588. package/src/standup/http-glue.ts +15 -0
  589. package/src/standup/mcp-tools.ts +16 -0
  590. package/src/storage/context-transform-ledger.ts +39 -0
  591. package/src/storage/secure-line-reader.ts +50 -1
  592. package/src/storage.ts +4 -1
  593. package/src/support-passport/card-projection.ts +1 -0
  594. package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
  595. package/src/support-passport/card-service.test.ts +75 -1
  596. package/src/support-passport/card-service.ts +6 -3
  597. package/src/support-passport/card-state.ts +5 -1
  598. package/src/support-passport/offline-sync-guard.ts +14 -1
  599. package/src/transfer/export-okf.test.ts +164 -0
  600. package/src/transfer/export-okf.ts +286 -0
  601. package/src/types.ts +2 -3
  602. package/dist/chunk-2LWQSV6A.js.map +0 -1
  603. package/dist/chunk-3BCULS4U.js.map +0 -1
  604. package/dist/chunk-7BDZTALN.js.map +0 -1
  605. package/dist/chunk-7PHI6GUI.js.map +0 -1
  606. package/dist/chunk-AFR6AIM4.js.map +0 -1
  607. package/dist/chunk-AX7UXCHJ.js.map +0 -1
  608. package/dist/chunk-BJTHRFFC.js.map +0 -1
  609. package/dist/chunk-D4QVPP3G.js.map +0 -1
  610. package/dist/chunk-DVYRD4HY.js.map +0 -1
  611. package/dist/chunk-F635GAL7.js.map +0 -1
  612. package/dist/chunk-FMQ4MOQO.js.map +0 -1
  613. package/dist/chunk-FP7YTTVO.js.map +0 -1
  614. package/dist/chunk-I4343FIA.js.map +0 -1
  615. package/dist/chunk-I7EX6KSH.js.map +0 -1
  616. package/dist/chunk-LBFFNDFM.js.map +0 -1
  617. package/dist/chunk-LLQCM2U2.js.map +0 -1
  618. package/dist/chunk-RQE4TITU.js.map +0 -1
  619. package/dist/chunk-UW5NPZJ2.js.map +0 -1
  620. package/dist/chunk-XAB6STPO.js.map +0 -1
  621. package/dist/chunk-ZPUIRTIZ.js.map +0 -1
  622. package/dist/types-CM86alG1.d.ts +0 -89
  623. /package/dist/{contradiction-scan-AKUWPX5N.js.map → active-context-config.js.map} +0 -0
  624. /package/dist/{resolution-4552BNRV.js.map → active-context-transform.js.map} +0 -0
  625. /package/dist/{auto-sync-XVMLL2RH.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
  626. /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
  627. /package/dist/{chunk-CFGU52XJ.js.map → chunk-23CVL7HS.js.map} +0 -0
  628. /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
  629. /package/dist/{chunk-6CPUQ5D6.js.map → chunk-2LBAFHOQ.js.map} +0 -0
  630. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  631. /package/dist/{chunk-IP4ZNT4U.js.map → chunk-33MFRY25.js.map} +0 -0
  632. /package/dist/{chunk-VFYRYFLL.js.map → chunk-3TSU662L.js.map} +0 -0
  633. /package/dist/{chunk-VXVZ2GM3.js.map → chunk-4FHRZD5T.js.map} +0 -0
  634. /package/dist/{chunk-5VPQSRQO.js.map → chunk-4STAANV7.js.map} +0 -0
  635. /package/dist/{chunk-46WM6JX2.js.map → chunk-4ZWCQJNM.js.map} +0 -0
  636. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  637. /package/dist/{chunk-YKWFK7XA.js.map → chunk-6CEGSTBD.js.map} +0 -0
  638. /package/dist/{chunk-GEPACVWN.js.map → chunk-6RUHELWR.js.map} +0 -0
  639. /package/dist/{chunk-ZAOHJDKH.js.map → chunk-72OIT7KS.js.map} +0 -0
  640. /package/dist/{chunk-KQAFEZQX.js.map → chunk-7LCGFUMB.js.map} +0 -0
  641. /package/dist/{chunk-7TCGNUVP.js.map → chunk-7UTDHQZ5.js.map} +0 -0
  642. /package/dist/{chunk-5HK3CJAR.js.map → chunk-7XOG75AU.js.map} +0 -0
  643. /package/dist/{chunk-C24UZSFW.js.map → chunk-CEH2AFXG.js.map} +0 -0
  644. /package/dist/{chunk-YOXVZJFM.js.map → chunk-CFVTRUR3.js.map} +0 -0
  645. /package/dist/{chunk-ACOC27BB.js.map → chunk-CN4VKV3S.js.map} +0 -0
  646. /package/dist/{chunk-PMVPCZJZ.js.map → chunk-CTCGHNWN.js.map} +0 -0
  647. /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
  648. /package/dist/{chunk-T42L3S6A.js.map → chunk-DDX6KIXF.js.map} +0 -0
  649. /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
  650. /package/dist/{chunk-WTOZBZNN.js.map → chunk-DMEHOEC7.js.map} +0 -0
  651. /package/dist/{chunk-OPPBTPUU.js.map → chunk-DUAJKRR2.js.map} +0 -0
  652. /package/dist/{chunk-SVVIASVX.js.map → chunk-EFQCDJZ2.js.map} +0 -0
  653. /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
  654. /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
  655. /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
  656. /package/dist/{chunk-Z4U3UN56.js.map → chunk-EZSCW4EM.js.map} +0 -0
  657. /package/dist/{chunk-F6QHHRWP.js.map → chunk-FESUGFIL.js.map} +0 -0
  658. /package/dist/{chunk-S3K2CIK5.js.map → chunk-FKKGCGYL.js.map} +0 -0
  659. /package/dist/{chunk-BWGCOLEL.js.map → chunk-FTTJRVB7.js.map} +0 -0
  660. /package/dist/{chunk-JAQXUGLN.js.map → chunk-FYWLSFFS.js.map} +0 -0
  661. /package/dist/{chunk-OPGL46PX.js.map → chunk-GX6FTSYH.js.map} +0 -0
  662. /package/dist/{chunk-A32YEQAM.js.map → chunk-H7VDIF2V.js.map} +0 -0
  663. /package/dist/{chunk-PDDSFELN.js.map → chunk-HJXA6ZM7.js.map} +0 -0
  664. /package/dist/{chunk-RGCF4XNH.js.map → chunk-HNPE66LB.js.map} +0 -0
  665. /package/dist/{chunk-SEA6M7SS.js.map → chunk-I5VB44ZK.js.map} +0 -0
  666. /package/dist/{chunk-SDEPLF7V.js.map → chunk-IBJ6U753.js.map} +0 -0
  667. /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
  668. /package/dist/{chunk-3RI5Y7KU.js.map → chunk-IVIAHQBR.js.map} +0 -0
  669. /package/dist/{chunk-7WR462EM.js.map → chunk-J3OND5QT.js.map} +0 -0
  670. /package/dist/{chunk-T3JQTCCO.js.map → chunk-JI7U6AS3.js.map} +0 -0
  671. /package/dist/{chunk-I32NKXE2.js.map → chunk-JTWZKNUH.js.map} +0 -0
  672. /package/dist/{chunk-VKCAHCBI.js.map → chunk-L4X4PJYK.js.map} +0 -0
  673. /package/dist/{chunk-W4BMEGQA.js.map → chunk-LUDBXTBJ.js.map} +0 -0
  674. /package/dist/{chunk-RIAM7DND.js.map → chunk-ME35HVDJ.js.map} +0 -0
  675. /package/dist/{chunk-NG3MBQV4.js.map → chunk-MJRGVXPQ.js.map} +0 -0
  676. /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
  677. /package/dist/{chunk-7F27PCSN.js.map → chunk-MN5NOOI7.js.map} +0 -0
  678. /package/dist/{chunk-JCWY73FK.js.map → chunk-N4F7ZSSG.js.map} +0 -0
  679. /package/dist/{chunk-TR7DGXGI.js.map → chunk-NACLNNFQ.js.map} +0 -0
  680. /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
  681. /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
  682. /package/dist/{chunk-MFOSZUIT.js.map → chunk-NPIBN2VL.js.map} +0 -0
  683. /package/dist/{chunk-IY7UXD3J.js.map → chunk-O57GM3FR.js.map} +0 -0
  684. /package/dist/{chunk-I2HTKOOP.js.map → chunk-O7ERGZDA.js.map} +0 -0
  685. /package/dist/{chunk-GTSVEEP3.js.map → chunk-OAJMQKQR.js.map} +0 -0
  686. /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
  687. /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
  688. /package/dist/{chunk-EOHKUWXW.js.map → chunk-QCRJMU5V.js.map} +0 -0
  689. /package/dist/{chunk-5DH6PG4B.js.map → chunk-RZ3IZIJG.js.map} +0 -0
  690. /package/dist/{chunk-AAXJNINV.js.map → chunk-SN4JXNLL.js.map} +0 -0
  691. /package/dist/{chunk-SVSRPG6M.js.map → chunk-TNGH4ZYI.js.map} +0 -0
  692. /package/dist/{chunk-HZNYJN77.js.map → chunk-TNXNECAN.js.map} +0 -0
  693. /package/dist/{chunk-JOEJG4SD.js.map → chunk-TVW4C7PV.js.map} +0 -0
  694. /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
  695. /package/dist/{chunk-R2MZCYA6.js.map → chunk-UNUMFURP.js.map} +0 -0
  696. /package/dist/{chunk-YRVAKONL.js.map → chunk-VQ4AMTGZ.js.map} +0 -0
  697. /package/dist/{chunk-RAIUTAZZ.js.map → chunk-WKAXBXVA.js.map} +0 -0
  698. /package/dist/{chunk-ZIJDI4CP.js.map → chunk-WKJFIMVN.js.map} +0 -0
  699. /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
  700. /package/dist/{chunk-7BEPVIH3.js.map → chunk-X5YYSAZX.js.map} +0 -0
  701. /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
  702. /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
  703. /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
  704. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  705. /package/dist/{chunk-ANJXPFRS.js.map → chunk-YXFCALVT.js.map} +0 -0
  706. /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
  707. /package/dist/{chunk-5HERQ5FX.js.map → chunk-Z3YEGSR4.js.map} +0 -0
  708. /package/dist/{chunk-YWSQD2IB.js.map → chunk-ZJPM7GZ3.js.map} +0 -0
  709. /package/dist/{chunk-5S4LQOPE.js.map → chunk-ZW4VXELZ.js.map} +0 -0
  710. /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
  711. /package/dist/{forget-SZ2BXDGF.js.map → forget-2AE4MDK3.js.map} +0 -0
  712. /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
  713. /package/dist/{tier-stats-4B5IJ3NE.js.map → tier-stats-2TOW3QNL.js.map} +0 -0
@@ -0,0 +1,114 @@
1
+ import { readdirSync, readFileSync, statSync, unlinkSync } from "node:fs";
2
+ import path from "node:path";
3
+
4
+ import { writeFileAtomically } from "../maintenance/atomic-file.js";
5
+ import { normalizeProjectionPreview } from "../memory-projection-format.js";
6
+ import { OKF_RESERVED_BASENAMES } from "./type-mapping.js";
7
+
8
+ export const OKF_INDEX_MARKER = "<!-- remnic-okf-index -->";
9
+
10
+ const INDEXED_ROOTS = ["entities", "facts", "corrections", "summaries"] as const;
11
+
12
+ export interface OkfIndexReport {
13
+ written: string[];
14
+ removed: string[];
15
+ }
16
+
17
+ export async function runOkfIndexMaintenance(
18
+ memoryDir: string,
19
+ enabled: boolean,
20
+ ): Promise<OkfIndexReport> {
21
+ const written: string[] = [];
22
+ const removed: string[] = [];
23
+ const dirs = collectIndexDirs(memoryDir);
24
+ for (const dir of dirs) {
25
+ const indexPath = path.join(dir, "index.md");
26
+ if (!enabled) {
27
+ if (isGeneratedIndex(indexPath)) {
28
+ unlinkSync(indexPath);
29
+ removed.push(indexPath);
30
+ }
31
+ continue;
32
+ }
33
+ const next = renderIndex(dir);
34
+ if (next === null) continue;
35
+ if (isUnchangedGenerated(indexPath, next)) continue;
36
+ await writeFileAtomically(indexPath, next);
37
+ written.push(indexPath);
38
+ }
39
+ return { written, removed };
40
+ }
41
+
42
+ function collectIndexDirs(memoryDir: string): string[] {
43
+ const dirs = [memoryDir];
44
+ for (const root of INDEXED_ROOTS) {
45
+ const full = path.join(memoryDir, root);
46
+ if (!isDir(full)) continue;
47
+ dirs.push(full);
48
+ if (root === "facts") {
49
+ for (const entry of safeList(full)) {
50
+ const child = path.join(full, entry);
51
+ if (isDir(child) && /^\d{4}-\d{2}-\d{2}$/.test(entry)) dirs.push(child);
52
+ }
53
+ }
54
+ }
55
+ return dirs;
56
+ }
57
+
58
+ function renderIndex(dir: string): string | null {
59
+ const entries = safeList(dir)
60
+ .filter((name) => name.endsWith(".md") && OKF_RESERVED_BASENAMES[name] !== true)
61
+ .sort((a, b) => a.localeCompare(b));
62
+ if (entries.length === 0) return null;
63
+ const lines = [OKF_INDEX_MARKER, "", `# ${path.basename(dir)}`, ""];
64
+ for (const name of entries) {
65
+ const preview = previewFile(path.join(dir, name));
66
+ lines.push(`* [${titleFrom(name, preview)}](${name}) - ${preview}`);
67
+ }
68
+ lines.push("");
69
+ return lines.join("\n");
70
+ }
71
+
72
+ function previewFile(filePath: string): string {
73
+ try {
74
+ return normalizeProjectionPreview(readFileSync(filePath, "utf8"), 120);
75
+ } catch {
76
+ return "";
77
+ }
78
+ }
79
+
80
+ function titleFrom(name: string, preview: string): string {
81
+ return preview.split(" ").slice(0, 8).join(" ") || name.replace(/\.md$/, "");
82
+ }
83
+
84
+ function isGeneratedIndex(filePath: string): boolean {
85
+ try {
86
+ return readFileSync(filePath, "utf8").includes(OKF_INDEX_MARKER);
87
+ } catch {
88
+ return false;
89
+ }
90
+ }
91
+
92
+ function isUnchangedGenerated(filePath: string, next: string): boolean {
93
+ try {
94
+ return readFileSync(filePath, "utf8") === next;
95
+ } catch {
96
+ return false;
97
+ }
98
+ }
99
+
100
+ function isDir(dir: string): boolean {
101
+ try {
102
+ return statSync(dir).isDirectory();
103
+ } catch {
104
+ return false;
105
+ }
106
+ }
107
+
108
+ function safeList(dir: string): string[] {
109
+ try {
110
+ return readdirSync(dir);
111
+ } catch {
112
+ return [];
113
+ }
114
+ }
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Shared OKF bundle-rendering helpers (issues #1948 + #1950).
3
+ *
4
+ * One source of truth for the mechanics every OKF bundle exporter uses:
5
+ * deterministic frontmatter rendering, staging-directory file writes, the
6
+ * symlink-guarded atomic publish, and the bundle version stamp. The memory
7
+ * exporter (transfer/export-okf.ts) and the codegraph exporter
8
+ * (coding/export-okf-codegraph.ts) both consume this module so their
9
+ * bundles are byte-compatible in convention (rule 38 — deterministic
10
+ * rendering discipline; rule 9 — stable seam over shared mechanics).
11
+ */
12
+ import { lstatSync, mkdirSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
13
+ import path from "node:path";
14
+
15
+ /** OKF spec version emitted in every bundle root index. */
16
+ export const OKF_EXPORT_VERSION = "0.1";
17
+
18
+ /**
19
+ * Render a YAML frontmatter block from a flat field map.
20
+ *
21
+ * Key order: the canonical OKF keys first (`type`, `title`, `description`,
22
+ * `tags`, `timestamp`), everything else alphabetical — one deterministic
23
+ * layout so identical inputs always render byte-identical files. A key set
24
+ * to `undefined` is omitted; callers must not pass a key twice.
25
+ */
26
+ export function renderFrontmatter(fields: Record<string, unknown>): string {
27
+ const keys = Object.keys(fields).sort((a, b) => {
28
+ const order = ["type", "title", "description", "tags", "timestamp"];
29
+ const ai = order.indexOf(a);
30
+ const bi = order.indexOf(b);
31
+ if (ai >= 0 || bi >= 0) return (ai < 0 ? 99 : ai) - (bi < 0 ? 99 : bi);
32
+ return a.localeCompare(b);
33
+ });
34
+ const lines = keys.flatMap((key) => yamlLine(key, fields[key]));
35
+ return `---\n${lines.join("\n")}\n---\n\n`;
36
+ }
37
+
38
+ function yamlLine(key: string, value: unknown): string[] {
39
+ if (value === undefined) return [];
40
+ if (Array.isArray(value)) {
41
+ if (value.length === 0) return [`${key}: []`];
42
+ if (value.every((item) => typeof item !== "object" || item === null)) {
43
+ return [`${key}:`, ...value.map((item) => ` - ${yamlScalar(item)}`)];
44
+ }
45
+ return [`${key}: ${JSON.stringify(value)}`];
46
+ }
47
+ if (typeof value === "object" && value !== null) return [`${key}: ${JSON.stringify(value)}`];
48
+ return [`${key}: ${yamlScalar(value)}`];
49
+ }
50
+
51
+ function yamlScalar(value: unknown): string {
52
+ if (typeof value === "string") {
53
+ if (value === "" || /[:#\n]/.test(value) || value !== value.trim()) return JSON.stringify(value);
54
+ return value;
55
+ }
56
+ return String(value);
57
+ }
58
+
59
+ /**
60
+ * Write one file into a bundle staging tree. `rel` is a POSIX-style
61
+ * bundle-relative path; parent directories are created as needed.
62
+ */
63
+ export function writeBundleFile(root: string, rel: string, content: string): void {
64
+ const dest = path.join(root, ...rel.split("/"));
65
+ mkdirSync(path.dirname(dest), { recursive: true });
66
+ writeFileSync(dest, content, "utf8");
67
+ }
68
+
69
+ /**
70
+ * Publish a staged bundle: refuse a non-empty target without `--force`,
71
+ * swap via rename so the target is never observed half-written, and keep a
72
+ * restorable backup when replacing an existing tree.
73
+ */
74
+ export function publishBundle(staging: string, outDir: string, force: boolean): void {
75
+ let exists = false;
76
+ try {
77
+ const stat = lstatSync(outDir);
78
+ if (stat.isSymbolicLink()) throw new Error(`--out must not be a symlink: ${outDir}`);
79
+ exists = true;
80
+ const entries = readdirSync(outDir).filter((name) => name !== "." && name !== "..");
81
+ if (entries.length > 0 && !force) {
82
+ rmSync(staging, { recursive: true, force: true });
83
+ throw new Error(`--out ${outDir} is not empty; pass --force to replace it`);
84
+ }
85
+ } catch (err) {
86
+ if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
87
+ }
88
+ mkdirSync(path.dirname(outDir), { recursive: true });
89
+ if (exists && force) {
90
+ const backup = `${outDir}.okf-prev`;
91
+ try {
92
+ renameSync(outDir, backup);
93
+ } catch {
94
+ rmSync(staging, { recursive: true, force: true });
95
+ throw new Error(`cannot replace --out ${outDir}`);
96
+ }
97
+ try {
98
+ renameSync(staging, outDir);
99
+ rmSync(backup, { recursive: true, force: true });
100
+ } catch (err) {
101
+ try {
102
+ renameSync(backup, outDir);
103
+ } catch {
104
+ // Keep backup if restore fails.
105
+ }
106
+ throw err;
107
+ }
108
+ return;
109
+ }
110
+ renameSync(staging, outDir);
111
+ }
112
+
113
+ /**
114
+ * Reject a --out path with a symlink anywhere in its component chain
115
+ * (pattern 42 + hermes-shim precedent): a symlinked component could aim
116
+ * the atomic rename outside the operator's chosen directory.
117
+ */
118
+ export function rejectSymlinkPath(target: string): void {
119
+ let current = path.resolve(target);
120
+ while (true) {
121
+ try {
122
+ if (lstatSync(current).isSymbolicLink()) {
123
+ throw new Error(`--out path component is a symlink: ${current}`);
124
+ }
125
+ } catch (err) {
126
+ if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
127
+ }
128
+ const parent = path.dirname(current);
129
+ if (parent === current) break;
130
+ current = parent;
131
+ }
132
+ }
133
+
@@ -49,6 +49,7 @@ test("parseOkfConfig treats false as a real disable", () => {
49
49
  assert.deepEqual(parseOkfConfig({ conformanceEnabled: false, sweepEnabled: "false" }), {
50
50
  conformanceEnabled: false,
51
51
  sweepEnabled: false,
52
+ indexFilesEnabled: false,
52
53
  });
53
54
  assert.throws(() => parseOkfConfig("nope"), /okf must be an object/);
54
55
  });
@@ -164,6 +165,7 @@ test("runOkfCliCommand handles help and rejects unexpected tokens", async () =>
164
165
  memoryDir: "/tmp",
165
166
  conformanceEnabled: true,
166
167
  sweepEnabled: false,
168
+ indexFilesEnabled: false,
167
169
  });
168
170
  assert.equal(code, 0);
169
171
  assert.match(chunks.join(""), /usage: remnic okf/);
@@ -176,6 +178,7 @@ test("runOkfCliCommand handles help and rejects unexpected tokens", async () =>
176
178
  memoryDir: "/tmp",
177
179
  conformanceEnabled: true,
178
180
  sweepEnabled: false,
181
+ indexFilesEnabled: false,
179
182
  });
180
183
  assert.equal(code, 1);
181
184
  assert.match(errChunks.join(""), new RegExp(`unexpected argument '${token}'`));
@@ -57,6 +57,8 @@ export function okfTypeForEntityKind(kind: string | undefined): string {
57
57
  export const OKF_PROFILE_TYPE = "Profile";
58
58
  export const OKF_QUESTION_TYPE = "Question";
59
59
  export const OKF_DECISION_RECORD_TYPE = "Decision Record";
60
+ export const OKF_ARCHITECTURE_CARD_TYPE = "Architecture Card";
61
+ export const OKF_CODE_MODULE_TYPE = "Code Module";
60
62
 
61
63
  /**
62
64
  * OKF §6/§7 reserve `index.md` and `log.md` for bundle-level files with a
@@ -40,6 +40,7 @@ import {
40
40
  type MemoryLifecycleCapabilitySet,
41
41
  } from "../capabilities.js";
42
42
  import { parseFlexibleIsoTimestamp } from "../utils/iso-timestamp.js";
43
+ import { tagPersistedMemories } from "../location/tagging.js";
43
44
  import { log } from "../logger.js";
44
45
  import type { PluginConfig, BufferTurn, ExtractionResult, MetaState, ExtractionFailureClass } from "../types.js";
45
46
  import type { TierMigrationCycleSummary } from "../recall-state.js";
@@ -62,7 +63,6 @@ export class ExtractionDeadlineError extends Error {
62
63
  }
63
64
  }
64
65
 
65
-
66
66
  /** Dependencies injected by the orchestrator. All stable references or
67
67
  * live accessors — lazy getters for anything tests reassign
68
68
  * post-construction (buffer, extraction, storageRouter, threading). */
@@ -1090,6 +1090,7 @@ export class ExtractionRunCoordinator {
1090
1090
  log.warn("runExtraction: durable-commit callback failed", error);
1091
1091
  }
1092
1092
  const runPostPersistBestEffort = runExtractionPostPersistBestEffort.bind(null, runDeadlineAware);
1093
+ await tagPersistedMemories(storage, persistedIds, this.config);
1093
1094
  const postPersist = await runExtractionPostPersist({
1094
1095
  result,
1095
1096
  storage,
@@ -9,6 +9,8 @@ import {
9
9
  isLocationDayPath,
10
10
  isMeetingRecordPath,
11
11
  } from "./orchestrator-helpers.js";
12
+ import { OKF_RESERVED_BASENAMES } from "../okf/type-mapping.js";
13
+
12
14
 
13
15
  export interface GenericRecallPathPolicy {
14
16
  readonly memoryDir?: string;
@@ -230,9 +232,8 @@ export function isGenericRecallExcludedPath(
230
232
  ): boolean {
231
233
  return (
232
234
  isSearchExcludedPath(filePath, policy, source) ||
233
- // Recall-only: archived memories are cold, but an explicit search is one
234
- // of the surfaces they remain reachable through.
235
- isTopLevelArchivePath(filePath, policy, source)
235
+ isTopLevelArchivePath(filePath, policy, source) ||
236
+ OKF_RESERVED_BASENAMES[path.basename(filePath)] === true
236
237
  );
237
238
  }
238
239
 
package/src/schemas.ts CHANGED
@@ -181,7 +181,7 @@ export const ExtractedFactSchema = z.object({
181
181
  .optional()
182
182
  .nullable()
183
183
  .describe(
184
- 'For category "reasoning_trace" only: a stored solution chain with ordered steps, a final answer, and an optional observed outcome. Require at least two steps.',
184
+ 'For category "reasoning_trace" only: a stored solution chain with ordered steps, a final answer, and an optional observed outcome. Require at least two steps. IMPORTANT: must include a non-empty finalAnswer (or final_answer) — the JSON Schema sent to providers cannot enforce this constraint.',
185
185
  ),
186
186
  eventTime: z
187
187
  .string()
@@ -350,6 +350,22 @@ export const ExtractionResultSchema = z.object({
350
350
  ),
351
351
  });
352
352
 
353
+ /**
354
+ * Provider-facing extraction contract. Keep this free of transforms/refinements:
355
+ * JSON Schema generators cannot faithfully represent salvageArray's ZodEffects.
356
+ * ExtractionResultSchema remains the authoritative tolerant parser after the
357
+ * provider returns.
358
+ */
359
+ export const ExtractionProviderOutputSchema = z.object({
360
+ facts: z.array(ExtractedFactSchema),
361
+ profileUpdates: z.array(z.string()),
362
+ entities: z.array(EntityMentionSchema),
363
+ questions: z.array(ExtractedQuestionSchema),
364
+ identityReflection: z.string().optional().nullable(),
365
+ episodeTitle: z.string().optional().nullable(),
366
+ relationships: z.array(ExtractedRelationshipSchema).optional().nullable(),
367
+ });
368
+
353
369
  export const ConsolidationItemSchema = z.object({
354
370
  existingId: z
355
371
  .string()
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineOperation } from "../access-boundary.js";
4
+ import { buildStandup, parseStandupDate } from "./build.js";
5
+
6
+ defineOperation({
7
+ name: "standup",
8
+ description: "Deterministic yesterday/today/blockers standup brief.",
9
+ fleetWide: true,
10
+ schema: z.object({ date: z.string().optional() }).strict(),
11
+ handler: async (input, ctx) => ({
12
+ result: buildStandup(ctx.service.memoryDir, parseStandupDate(input.date)),
13
+ }),
14
+ });
@@ -0,0 +1,34 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+
7
+ import { buildStandup, parseStandupDate, previousDate } from "./build.js";
8
+
9
+ test("parseStandupDate rejects garbage and defaults to UTC today", () => {
10
+ assert.equal(parseStandupDate(undefined, new Date("2026-08-18T12:00:00Z")), "2026-08-18");
11
+ assert.throws(() => parseStandupDate("nope"), /YYYY-MM-DD/);
12
+ assert.equal(previousDate("2026-08-18"), "2026-08-17");
13
+ });
14
+
15
+ test("buildStandup is deterministic and marks missing days", async () => {
16
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-standup-"));
17
+ try {
18
+ await mkdir(path.join(memoryDir, "activity"), { recursive: true });
19
+ await writeFile(
20
+ path.join(memoryDir, "activity", "2026-08-18.md"),
21
+ "---\ndate: 2026-08-18\n---\n# Today\n- shipped standup\n- blocker: waiting on review\n",
22
+ "utf8",
23
+ );
24
+ const a = buildStandup(memoryDir, "2026-08-18");
25
+ const b = buildStandup(memoryDir, "2026-08-18");
26
+ assert.equal(a.markdown, b.markdown);
27
+ assert.equal(a.yesterday, "2026-08-17");
28
+ assert.match(a.markdown, /blocker: waiting on review/);
29
+ assert.match(a.activityGrid, /yesterday \| \./);
30
+ assert.match(a.activityGrid, /today \| x/);
31
+ } finally {
32
+ await rm(memoryDir, { recursive: true, force: true });
33
+ }
34
+ });
@@ -0,0 +1,115 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+
4
+ import { activityDigestPath, isValidActivityDate } from "../activity/digest.js";
5
+
6
+ export interface StandupBrief {
7
+ date: string;
8
+ yesterday: string;
9
+ today: string;
10
+ highlights: string[];
11
+ blockers: string[];
12
+ activityGrid: string;
13
+ markdown: string;
14
+ }
15
+
16
+ export function parseStandupDate(raw: unknown, now = new Date()): string {
17
+ if (raw === undefined || raw === null || raw === "") {
18
+ return now.toISOString().slice(0, 10);
19
+ }
20
+ const value = String(raw);
21
+ if (!isValidActivityDate(value)) {
22
+ throw new Error(`invalid --date ${value}; expected YYYY-MM-DD`);
23
+ }
24
+ return value;
25
+ }
26
+
27
+ export function previousDate(date: string): string {
28
+ const ms = Date.parse(`${date}T00:00:00Z`);
29
+ return new Date(ms - 86_400_000).toISOString().slice(0, 10);
30
+ }
31
+
32
+ export function buildStandup(memoryDir: string, date: string): StandupBrief {
33
+ const yesterday = previousDate(date);
34
+ const todayBody = readOptional(activityDigestPath(memoryDir, date));
35
+ const yesterdayBody = readOptional(activityDigestPath(memoryDir, yesterday));
36
+ const highlights = extractHighlights(todayBody);
37
+ const blockers = extractBlockers(todayBody);
38
+ const activityGrid = renderGrid(yesterdayBody, todayBody);
39
+ const markdown = [
40
+ `# Standup ${date}`,
41
+ "",
42
+ `## Yesterday (${yesterday})`,
43
+ yesterdayBody ? firstLines(yesterdayBody, 8) : "_No activity digest._",
44
+ "",
45
+ `## Today (${date})`,
46
+ todayBody ? firstLines(todayBody, 8) : "_No activity digest._",
47
+ "",
48
+ "## Highlights",
49
+ ...(highlights.length > 0 ? highlights.map((line) => `- ${line}`) : ["- _None._"]),
50
+ "",
51
+ "## Blockers",
52
+ ...(blockers.length > 0 ? blockers.map((line) => `- ${line}`) : ["- _None._"]),
53
+ "",
54
+ "## Activity grid",
55
+ "",
56
+ activityGrid,
57
+ "",
58
+ ].join("\n");
59
+ return {
60
+ date,
61
+ yesterday,
62
+ today: date,
63
+ highlights,
64
+ blockers,
65
+ activityGrid,
66
+ markdown,
67
+ };
68
+ }
69
+
70
+ function readOptional(filePath: string): string | null {
71
+ try {
72
+ return readFileSync(filePath, "utf8");
73
+ } catch {
74
+ return null;
75
+ }
76
+ }
77
+
78
+ function firstLines(body: string, n: number): string {
79
+ return body.split("\n").filter((line) => !line.startsWith("---")).slice(0, n).join("\n").trim() || "_Empty digest._";
80
+ }
81
+
82
+ function extractHighlights(body: string | null): string[] {
83
+ if (!body) return [];
84
+ return body
85
+ .split("\n")
86
+ .map((line) => line.replace(/^[-*]\s+/, "").trim())
87
+ .filter((line) => line.length > 0 && !line.startsWith("#") && !line.startsWith("---"))
88
+ .slice(0, 5);
89
+ }
90
+
91
+ function extractBlockers(body: string | null): string[] {
92
+ if (!body) return [];
93
+ return body
94
+ .split("\n")
95
+ .map((line) => line.trim())
96
+ .filter((line) => /blocker|blocked|stuck|waiting/i.test(line))
97
+ .slice(0, 5);
98
+ }
99
+
100
+ function renderGrid(yesterday: string | null, today: string | null): string {
101
+ const y = yesterday ? "x" : ".";
102
+ const t = today ? "x" : ".";
103
+ return ["| day | digest |", "|---|---|", `| yesterday | ${y} |`, `| today | ${t} |`].join("\n");
104
+ }
105
+
106
+ export function standupHelp(): string {
107
+ return `Usage: remnic standup [--date YYYY-MM-DD]
108
+
109
+ Deterministic yesterday/today/blockers brief plus an activity grid.
110
+ `;
111
+ }
112
+
113
+ export function standupMemoryDirPlaceholder(memoryDir: string): string {
114
+ return path.resolve(memoryDir);
115
+ }
@@ -0,0 +1,15 @@
1
+ import type { ServerResponse } from "node:http";
2
+ import { getOperation } from "../access-boundary.js";
3
+ import type { EngramAccessService } from "../access-service.js";
4
+
5
+ export async function respondStandup(
6
+ date: string | null,
7
+ res: ServerResponse,
8
+ respondJson: (res: ServerResponse, status: number, payload: unknown) => void,
9
+ service: EngramAccessService,
10
+ ): Promise<void> {
11
+ const op = getOperation("standup");
12
+ if (!op) throw new Error("access-boundary: operation not registered: standup");
13
+ const output = (await op.run({ ...(date ? { date } : {}) }, { service })) as { result: unknown };
14
+ respondJson(res, 200, output.result);
15
+ }
@@ -0,0 +1,16 @@
1
+ import type { McpTool } from "../access-mcp.js";
2
+
3
+ export const STANDUP_MCP_TOOLS: McpTool[] = [
4
+ {
5
+ name: "engram.standup",
6
+ description:
7
+ "Deterministic standup brief: yesterday highlights, today priorities, blockers, and an activity grid. Pass date as YYYY-MM-DD; default is today UTC.",
8
+ inputSchema: {
9
+ type: "object",
10
+ properties: {
11
+ date: { type: "string", description: "Standup day (YYYY-MM-DD). Defaults to today UTC." },
12
+ },
13
+ additionalProperties: false,
14
+ },
15
+ },
16
+ ];
@@ -0,0 +1,39 @@
1
+ import type { ContextTransformTelemetryRecord } from "../active-context-transform.js";
2
+ import { readContextTransformRecordRowsFromLines, readMaybeEncryptedLines } from "./secure-line-reader.js";
3
+
4
+ export interface ContextTransformLedgerHost {
5
+ memoryActionsPath: string;
6
+ ensureDirectories(): Promise<void>;
7
+ appendStorageSecureFile(path: string, payload: string): Promise<void>;
8
+ readStorageSecureFile(path: string): Promise<string>;
9
+ }
10
+
11
+ export async function appendContextTransformRecords(
12
+ host: ContextTransformLedgerHost,
13
+ records: ContextTransformTelemetryRecord[],
14
+ ): Promise<number> {
15
+ if (records.length === 0) return 0;
16
+ await host.ensureDirectories();
17
+ await host.appendStorageSecureFile(
18
+ host.memoryActionsPath,
19
+ records.map((record) => `${JSON.stringify(record)}\n`).join(""),
20
+ );
21
+ return records.length;
22
+ }
23
+
24
+ export async function readContextTransformRecords(
25
+ host: ContextTransformLedgerHost,
26
+ limit = 200,
27
+ ): Promise<ContextTransformTelemetryRecord[]> {
28
+ const cappedLimit = Math.max(0, Math.floor(limit));
29
+ if (cappedLimit === 0 || Number.isNaN(cappedLimit)) return [];
30
+ try {
31
+ const rows = await readContextTransformRecordRowsFromLines(
32
+ readMaybeEncryptedLines(host.memoryActionsPath, () => host.readStorageSecureFile(host.memoryActionsPath)),
33
+ cappedLimit,
34
+ );
35
+ return rows.map((row) => row.record);
36
+ } catch {
37
+ return [];
38
+ }
39
+ }
@@ -3,6 +3,7 @@ import { lstat, open } from "node:fs/promises";
3
3
  import { createInterface } from "node:readline";
4
4
 
5
5
  import { isEncryptedFile, MAGIC_HEADER_SIZE } from "../secure-store/secure-fs.js";
6
+ import type { ContextTransformTelemetryRecord } from "../active-context-transform.js";
6
7
  import type { MemoryActionEvent, MemoryLifecycleEvent } from "../types.js";
7
8
 
8
9
  /**
@@ -89,7 +90,11 @@ export async function readMemoryActionEventRowsFromLines(
89
90
  const line = row.trim();
90
91
  if (!line) continue;
91
92
  try {
92
- const parsed = JSON.parse(line) as Partial<MemoryActionEvent>;
93
+ const parsed = JSON.parse(line) as Partial<MemoryActionEvent> & { recordKind?: unknown };
94
+ // Ledger discriminated union (#2347): any row carrying a `recordKind`
95
+ // belongs to another record family (e.g. context_transform) and must
96
+ // be ignored here — the legacy parser stays strict for its own kind.
97
+ if (parsed.recordKind !== undefined) continue;
93
98
  const outcome = parsed.outcome === "applied" || parsed.outcome === "skipped" || parsed.outcome === "failed"
94
99
  ? parsed.outcome
95
100
  : null;
@@ -116,6 +121,50 @@ export async function readMemoryActionEventRowsFromLines(
116
121
  return writeIndex === 0 ? out : [...out.slice(writeIndex), ...out.slice(0, writeIndex)];
117
122
  }
118
123
 
124
+ /**
125
+ * Tail read for context-transform telemetry rows (#2347). Selects ONLY
126
+ * records discriminated by `recordKind: "context_transform"` — the sibling
127
+ * of `readMemoryActionEventRowsFromLines`, with the same O(limit) ring
128
+ * buffer and line-number semantics. Malformed rows are skipped fail-open;
129
+ * legacy action rows are never returned here.
130
+ */
131
+ export async function readContextTransformRecordRowsFromLines(
132
+ lines: AsyncIterable<string>,
133
+ limit: number,
134
+ ): Promise<Array<{ line: number; record: ContextTransformTelemetryRecord }>> {
135
+ const out: Array<{ line: number; record: ContextTransformTelemetryRecord }> = [];
136
+ let writeIndex = 0;
137
+ let lineNumber = 0;
138
+ for await (const row of lines) {
139
+ lineNumber += 1;
140
+ const line = row.trim();
141
+ if (!line) continue;
142
+ try {
143
+ const parsed = JSON.parse(line) as Partial<ContextTransformTelemetryRecord>;
144
+ if (
145
+ parsed.recordKind === "context_transform" &&
146
+ typeof parsed.timestamp === "string" &&
147
+ typeof parsed.actionId === "string" &&
148
+ typeof parsed.planHash === "string"
149
+ ) {
150
+ const entry = {
151
+ line: lineNumber,
152
+ record: parsed as ContextTransformTelemetryRecord,
153
+ };
154
+ if (out.length < limit) {
155
+ out.push(entry);
156
+ } else {
157
+ out[writeIndex] = entry;
158
+ writeIndex = (writeIndex + 1) % limit;
159
+ }
160
+ }
161
+ } catch {
162
+ // Ignore malformed rows (fail-open).
163
+ }
164
+ }
165
+ return writeIndex === 0 ? out : [...out.slice(writeIndex), ...out.slice(0, writeIndex)];
166
+ }
167
+
119
168
  /**
120
169
  * Validate that a parsed row carries every required lifecycle-event field.
121
170
  * Shared by the tail reader and the per-memory reader so both apply the EXACT