@remnic/core 9.69.40 → 9.69.42

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 (688) hide show
  1. package/dist/access-admin-ops-surface.d.ts +14 -13
  2. package/dist/access-admin-ops-surface.js +79 -78
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +14 -13
  5. package/dist/access-authorization-probe.js +80 -79
  6. package/dist/access-boundary.d.ts +14 -13
  7. package/dist/access-boundary.js +79 -78
  8. package/dist/access-cli.js +170 -168
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +1 -1
  11. package/dist/access-extraction-force-flush.d.ts +14 -13
  12. package/dist/access-extraction-force-flush.js +79 -78
  13. package/dist/access-health-types.d.ts +1 -1
  14. package/dist/access-http-briefing.d.ts +14 -13
  15. package/dist/access-http-briefing.js +80 -79
  16. package/dist/access-http-lcm-compaction.d.ts +14 -13
  17. package/dist/access-http-lifecycle-flush.d.ts +14 -13
  18. package/dist/access-http-offline-stream.d.ts +14 -13
  19. package/dist/access-http-query.d.ts +2 -2
  20. package/dist/access-http-query.js +81 -80
  21. package/dist/access-http.d.ts +15 -14
  22. package/dist/access-http.js +100 -97
  23. package/dist/access-identity-continuity-surface.d.ts +11 -11
  24. package/dist/access-identity-continuity-surface.js +79 -78
  25. package/dist/access-lcm-surface.d.ts +14 -13
  26. package/dist/access-lcm-surface.js +79 -78
  27. package/dist/access-mcp-shared-context-tools.d.ts +157 -0
  28. package/dist/access-mcp-shared-context-tools.js +8 -0
  29. package/dist/access-mcp.d.ts +14 -13
  30. package/dist/access-mcp.js +91 -88
  31. package/dist/access-memory-search-fanout.d.ts +2 -2
  32. package/dist/{access-namespace-preflight-CKBumJ8W.d.ts → access-namespace-preflight-ShnAJ9uL.d.ts} +1 -1
  33. package/dist/access-namespace-preflight.d.ts +3 -3
  34. package/dist/access-namespace-preflight.js +79 -78
  35. package/dist/access-observe-transcript.d.ts +11 -11
  36. package/dist/access-observe-write-category.d.ts +17 -1
  37. package/dist/access-observe-write-category.js +21 -4
  38. package/dist/access-observe-write-surface.d.ts +14 -13
  39. package/dist/access-observe-write-surface.js +79 -78
  40. package/dist/access-offline-manifest.d.ts +11 -11
  41. package/dist/access-offline-manifest.js +14 -14
  42. package/dist/access-operations-batch.js +84 -82
  43. package/dist/access-operations.d.ts +14 -13
  44. package/dist/access-operations.js +89 -87
  45. package/dist/access-recall-concurrency.d.ts +14 -13
  46. package/dist/access-recall-concurrency.js +79 -78
  47. package/dist/access-recall-response.d.ts +14 -13
  48. package/dist/access-recall-response.js +79 -78
  49. package/dist/access-recall-surface.d.ts +14 -13
  50. package/dist/access-recall-surface.js +79 -78
  51. package/dist/access-schema.d.ts +117 -114
  52. package/dist/access-schema.js +3 -3
  53. package/dist/{access-service-DJ3qogNt.d.ts → access-service-DjG_e2cM.d.ts} +81 -75
  54. package/dist/access-service-helpers.d.ts +14 -13
  55. package/dist/access-service.d.ts +14 -13
  56. package/dist/access-service.js +79 -78
  57. package/dist/access-surface-catalog.d.ts +14 -13
  58. package/dist/access-surface-catalog.js +81 -80
  59. package/dist/access-surface-catalog.js.map +1 -1
  60. package/dist/access-wearables-meetings-surface.d.ts +4 -4
  61. package/dist/action-confidence.d.ts +1 -1
  62. package/dist/active-memory-bridge.d.ts +1 -1
  63. package/dist/active-memory-bridge.js +3 -3
  64. package/dist/active-recall.d.ts +1 -1
  65. package/dist/active-recall.js +10 -10
  66. package/dist/activity/digest.d.ts +1 -1
  67. package/dist/ambient-provenance.d.ts +1 -1
  68. package/dist/artifact-search.d.ts +1 -1
  69. package/dist/{auto-sync-D6BAPIJV.js → auto-sync-QZD4RD6H.js} +14 -10
  70. package/dist/{auto-sync-D6BAPIJV.js.map → auto-sync-QZD4RD6H.js.map} +1 -1
  71. package/dist/background-generation.d.ts +1 -1
  72. package/dist/behavior-learner.d.ts +1 -1
  73. package/dist/behavior-signals.d.ts +1 -1
  74. package/dist/bootstrap.d.ts +11 -11
  75. package/dist/briefing-window.d.ts +2 -2
  76. package/dist/briefing.d.ts +2 -2
  77. package/dist/briefing.js +22 -22
  78. package/dist/buffer-surprise-report.d.ts +1 -1
  79. package/dist/buffer-turn-helpers.d.ts +1 -1
  80. package/dist/buffer.d.ts +2 -2
  81. package/dist/buffer.js +9 -9
  82. package/dist/bulk-import/index.d.ts +3 -3
  83. package/dist/calibration.d.ts +1 -1
  84. package/dist/calibration.js +2 -2
  85. package/dist/capabilities.d.ts +1 -1
  86. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  87. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
  88. package/dist/{catalog-BHXkBVhg.d.ts → catalog-BhuXaQHx.d.ts} +1 -1
  89. package/dist/causal-behavior.d.ts +1 -1
  90. package/dist/causal-consolidation.d.ts +1 -1
  91. package/dist/causal-consolidation.js +25 -25
  92. package/dist/causal-trajectory-graph.d.ts +1 -1
  93. package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
  94. package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
  95. package/dist/{chunk-JAJIMTFB.js → chunk-2PDMIPMP.js} +9 -9
  96. package/dist/{chunk-5LYSEZOF.js → chunk-2UINSKQC.js} +12 -11
  97. package/dist/chunk-2UINSKQC.js.map +1 -0
  98. package/dist/{chunk-6L2II3KS.js → chunk-3D75XIYO.js} +2 -2
  99. package/dist/{chunk-XCPNH2MG.js → chunk-3KJTSCSX.js} +5 -5
  100. package/dist/{chunk-YTZN2UZO.js → chunk-3RLWUW7G.js} +2 -2
  101. package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
  102. package/dist/{chunk-NVVZPBKI.js → chunk-46FVFU7S.js} +2 -2
  103. package/dist/{chunk-JUDT33RX.js → chunk-4AX5OYKC.js} +2 -2
  104. package/dist/{chunk-GSSDHAYH.js → chunk-4IGOLIWM.js} +2 -2
  105. package/dist/{chunk-23HFXQ5J.js → chunk-6EGIQEKC.js} +4 -4
  106. package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
  107. package/dist/{chunk-GO5LOHCD.js → chunk-7L54ARML.js} +2 -2
  108. package/dist/{chunk-TEMKBSV6.js → chunk-7PSRCGWT.js} +3 -3
  109. package/dist/{chunk-ICNJ6J46.js → chunk-AAAFZW3U.js} +2 -2
  110. package/dist/{chunk-K4JKAXMO.js → chunk-AAX22E4K.js} +3 -3
  111. package/dist/{chunk-UZ6JYPJ6.js → chunk-ADARR5KF.js} +232 -171
  112. package/dist/chunk-ADARR5KF.js.map +1 -0
  113. package/dist/{chunk-KY236SP5.js → chunk-AHHFBJX7.js} +3 -3
  114. package/dist/{chunk-TZ44E732.js → chunk-AIVRD66I.js} +2 -2
  115. package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
  116. package/dist/chunk-AJBWVDRV.js.map +1 -0
  117. package/dist/{chunk-YRIFXXMI.js → chunk-AOGICQMH.js} +6 -6
  118. package/dist/{chunk-KOTG3RXE.js → chunk-AUSRUOMQ.js} +2 -2
  119. package/dist/{chunk-C5R73BON.js → chunk-BIANISES.js} +2 -2
  120. package/dist/{chunk-IMBQFHRV.js → chunk-BPXJINHW.js} +8 -8
  121. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  122. package/dist/{chunk-2J3V5QEO.js → chunk-C3QXITIP.js} +4 -4
  123. package/dist/{chunk-2SNCQHJZ.js → chunk-CQ4BTPX6.js} +6 -6
  124. package/dist/{chunk-3QEVOQF5.js → chunk-CTETTVDN.js} +2 -2
  125. package/dist/{chunk-DFVSJFHK.js → chunk-DBB5JPSL.js} +2 -2
  126. package/dist/{chunk-W23JARAQ.js → chunk-DLPMOSNH.js} +2 -2
  127. package/dist/{chunk-BGRTZOJB.js → chunk-DMTSKY4W.js} +8 -8
  128. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  129. package/dist/{chunk-QS5Q5RBV.js → chunk-E4FRR4MA.js} +8 -8
  130. package/dist/{chunk-NETQXOPY.js → chunk-EH3HNCAM.js} +12 -7
  131. package/dist/{chunk-NETQXOPY.js.map → chunk-EH3HNCAM.js.map} +1 -1
  132. package/dist/{chunk-RJQAP333.js → chunk-ETE3SGAH.js} +2 -2
  133. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  134. package/dist/{chunk-RLU2Y5GV.js → chunk-F2FJTOV6.js} +4 -4
  135. package/dist/{chunk-V2ZA4YWE.js → chunk-F5H6YG5P.js} +2 -2
  136. package/dist/{chunk-K75A5XWU.js → chunk-F6PTJLEM.js} +4 -4
  137. package/dist/chunk-F6PTJLEM.js.map +1 -0
  138. package/dist/{chunk-4CMXI55L.js → chunk-FSUFKIFS.js} +2 -2
  139. package/dist/{chunk-ZAEPD4C2.js → chunk-G3NTZZWT.js} +2 -2
  140. package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
  141. package/dist/{chunk-WZYHPAG5.js → chunk-GIM2AGFL.js} +3 -3
  142. package/dist/{chunk-VKWFNPBH.js → chunk-GR76OKET.js} +14 -5
  143. package/dist/{chunk-VKWFNPBH.js.map → chunk-GR76OKET.js.map} +1 -1
  144. package/dist/{chunk-J7FVMLBR.js → chunk-GWEZNCGA.js} +2 -2
  145. package/dist/{chunk-LFVZD5EC.js → chunk-GWNSKQDA.js} +3 -3
  146. package/dist/{chunk-MJC7UKH7.js → chunk-H2N6SLTR.js} +2 -2
  147. package/dist/{chunk-J4WGTN2N.js → chunk-HK44SV6K.js} +4 -4
  148. package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
  149. package/dist/{chunk-IS2IDFJP.js → chunk-HO2P3FAX.js} +22 -22
  150. package/dist/chunk-HO2P3FAX.js.map +1 -0
  151. package/dist/{chunk-VQYWKCDR.js → chunk-HPMCKAET.js} +3 -3
  152. package/dist/{chunk-ROEFLU37.js → chunk-HSJU6JFT.js} +16 -86
  153. package/dist/chunk-HSJU6JFT.js.map +1 -0
  154. package/dist/{chunk-MVG3KXON.js → chunk-I65KB36L.js} +25 -25
  155. package/dist/chunk-IFBSZGW3.js +42 -0
  156. package/dist/chunk-IFBSZGW3.js.map +1 -0
  157. package/dist/{chunk-SFHLQPBF.js → chunk-IUTYNDFS.js} +118 -112
  158. package/dist/chunk-IUTYNDFS.js.map +1 -0
  159. package/dist/{chunk-AEOOGXMQ.js → chunk-J2MGTGKC.js} +4 -4
  160. package/dist/chunk-JATHBCAV.js +94 -0
  161. package/dist/chunk-JATHBCAV.js.map +1 -0
  162. package/dist/{chunk-PKUJNICO.js → chunk-JC2OBYYD.js} +2 -2
  163. package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
  164. package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
  165. package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
  166. package/dist/{chunk-VQWBUPSJ.js → chunk-JMAP6L6Q.js} +2 -2
  167. package/dist/{chunk-7Z54NXVS.js → chunk-K27INAPR.js} +2 -2
  168. package/dist/{chunk-YTK5MVNF.js → chunk-KCKXOS4Y.js} +14 -13
  169. package/dist/chunk-KCKXOS4Y.js.map +1 -0
  170. package/dist/{chunk-7D6SER6A.js → chunk-KJQ4Y2PY.js} +14 -14
  171. package/dist/{chunk-DAZANIYU.js → chunk-L732NBPR.js} +87 -88
  172. package/dist/{chunk-DAZANIYU.js.map → chunk-L732NBPR.js.map} +1 -1
  173. package/dist/{chunk-QPVNK2VE.js → chunk-LCVYO3ON.js} +2 -2
  174. package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
  175. package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
  176. package/dist/{chunk-TO36VPZI.js → chunk-LWF6GOII.js} +2 -2
  177. package/dist/{chunk-62HFZNCJ.js → chunk-N7B6V7SG.js} +13 -12
  178. package/dist/{chunk-62HFZNCJ.js.map → chunk-N7B6V7SG.js.map} +1 -1
  179. package/dist/{chunk-ES5BUPYB.js → chunk-OCWFKD5Q.js} +2 -2
  180. package/dist/{chunk-IOPIGX7Y.js → chunk-OP722LOG.js} +2 -2
  181. package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
  182. package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
  183. package/dist/{chunk-JOP7W24J.js → chunk-PLJ2MQFT.js} +4 -4
  184. package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
  185. package/dist/{chunk-BXIJSPCL.js → chunk-Q62GA5U2.js} +2 -2
  186. package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
  187. package/dist/chunk-QKCXRS5A.js.map +1 -0
  188. package/dist/{chunk-I3H5LFOI.js → chunk-QNJQCLI6.js} +4 -4
  189. package/dist/{chunk-BYQX4IOG.js → chunk-R45VFSEV.js} +2 -2
  190. package/dist/{chunk-XVDZFTN5.js → chunk-RFIJH2OE.js} +5 -5
  191. package/dist/{chunk-K4A6UVPB.js → chunk-RJ7Z7YXK.js} +11 -11
  192. package/dist/{chunk-ZZCR2QYL.js → chunk-RSSLDMFX.js} +2 -2
  193. package/dist/{chunk-ZZCR2QYL.js.map → chunk-RSSLDMFX.js.map} +1 -1
  194. package/dist/{chunk-QE6YVNP5.js → chunk-RTXHUVOD.js} +53 -19
  195. package/dist/chunk-RTXHUVOD.js.map +1 -0
  196. package/dist/{chunk-HJUP3K6L.js → chunk-RXYO6NA6.js} +2 -2
  197. package/dist/{chunk-TBXAY2SS.js → chunk-SGHGCFVV.js} +5 -5
  198. package/dist/{chunk-THTF2W7M.js → chunk-TRTLWUDD.js} +19 -18
  199. package/dist/chunk-TRTLWUDD.js.map +1 -0
  200. package/dist/{chunk-2SKMZUOW.js → chunk-U26LB4WA.js} +7 -7
  201. package/dist/{chunk-6P4REYKL.js → chunk-UDAUULK2.js} +28 -2
  202. package/dist/{chunk-6P4REYKL.js.map → chunk-UDAUULK2.js.map} +1 -1
  203. package/dist/{chunk-KTOXQMW3.js → chunk-UHSOPTNB.js} +14 -4
  204. package/dist/chunk-UHSOPTNB.js.map +1 -0
  205. package/dist/{chunk-VHKXRYQN.js → chunk-VBK6SRNE.js} +2 -2
  206. package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
  207. package/dist/{chunk-Z4GUX2M6.js → chunk-VSN2DMQK.js} +2 -2
  208. package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
  209. package/dist/{chunk-G2XZFGYN.js → chunk-WGZHSQDV.js} +4 -4
  210. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  211. package/dist/{chunk-MDIEES23.js → chunk-WN2OXGGH.js} +1 -1
  212. package/dist/chunk-WN2OXGGH.js.map +1 -0
  213. package/dist/{chunk-LKFVVN7R.js → chunk-WNPRRBOE.js} +2 -2
  214. package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
  215. package/dist/chunk-WUUGE7QC.js.map +1 -0
  216. package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
  217. package/dist/{chunk-RDLPFM7I.js → chunk-XJLTQTAO.js} +2 -2
  218. package/dist/{chunk-ZRMMXWYI.js → chunk-YR5QT4SR.js} +32 -9
  219. package/dist/chunk-YR5QT4SR.js.map +1 -0
  220. package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
  221. package/dist/chunk-Z22M4JCY.js.map +1 -0
  222. package/dist/{chunk-XM46Y66S.js → chunk-ZFU6QNRN.js} +7 -7
  223. package/dist/{chunk-SUEOG2S4.js → chunk-ZGXHTV5Y.js} +2 -2
  224. package/dist/{chunk-ZX3AYNNV.js → chunk-ZOGKZ2XT.js} +3 -2
  225. package/dist/chunk-ZOGKZ2XT.js.map +1 -0
  226. package/dist/{chunk-46Z3VGWF.js → chunk-ZYRAY5FL.js} +3 -3
  227. package/dist/{chunk-3XPN7AVY.js → chunk-ZYSOT6HD.js} +2 -2
  228. package/dist/{cli-BWri5-am.d.ts → cli-Cx9s_VRn.d.ts} +5 -5
  229. package/dist/cli.d.ts +16 -15
  230. package/dist/cli.js +129 -127
  231. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  232. package/dist/coding/export-okf-codegraph.js +22 -22
  233. package/dist/coding/pre-action-gate.d.ts +1 -1
  234. package/dist/compounding/engine.d.ts +2 -2
  235. package/dist/compounding/engine.js +24 -24
  236. package/dist/compounding/preference-consolidator.d.ts +1 -1
  237. package/dist/compression-optimizer.d.ts +1 -1
  238. package/dist/config.d.ts +1 -1
  239. package/dist/config.js +10 -10
  240. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  241. package/dist/connectors/codex-materialize-runner.js +24 -24
  242. package/dist/connectors/codex-materialize.d.ts +1 -1
  243. package/dist/connectors/codex-materialize.js +2 -2
  244. package/dist/connectors/index.d.ts +1 -1
  245. package/dist/connectors/index.js +25 -25
  246. package/dist/consolidation-provenance-check.d.ts +2 -2
  247. package/dist/consolidation-undo.d.ts +2 -2
  248. package/dist/contradiction/index.d.ts +4 -4
  249. package/dist/contradiction/index.js +7 -7
  250. package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
  251. package/dist/converge-config.d.ts +1 -1
  252. package/dist/convergence-refresh.d.ts +2 -2
  253. package/dist/convergence-refresh.js +26 -26
  254. package/dist/conversation-index/backend.d.ts +1 -1
  255. package/dist/conversation-index/chunker.d.ts +1 -1
  256. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  257. package/dist/conversation-index/indexer.d.ts +1 -1
  258. package/dist/conversation-index/search.d.ts +1 -1
  259. package/dist/corpus-watermark.d.ts +1 -1
  260. package/dist/corpus-watermark.js +25 -25
  261. package/dist/cross-lingual-recall.d.ts +1 -1
  262. package/dist/dashboard-runtime.js +2 -2
  263. package/dist/day-summary.d.ts +1 -1
  264. package/dist/deep-recall-config.d.ts +12 -1
  265. package/dist/deep-recall-config.js +5 -3
  266. package/dist/deep-recall-http-glue.d.ts +17 -14
  267. package/dist/deep-recall-http-glue.js +7 -4
  268. package/dist/deep-recall-mcp-tools.d.ts +14 -13
  269. package/dist/deep-recall-policy-llm.d.ts +12 -2
  270. package/dist/deep-recall-policy-llm.js +3 -3
  271. package/dist/deep-recall-seeds.d.ts +4 -1
  272. package/dist/deep-recall-seeds.js +1 -1
  273. package/dist/deep-recall.d.ts +12 -1
  274. package/dist/deep-recall.js +3 -2
  275. package/dist/delinearize.d.ts +1 -1
  276. package/dist/dependency-propagation-config.d.ts +1 -1
  277. package/dist/{dependency-propagation-delivery-ueZlKTQB.d.ts → dependency-propagation-delivery-C2QFQ97b.d.ts} +1 -1
  278. package/dist/direct-answer-wiring.d.ts +1 -1
  279. package/dist/direct-answer.d.ts +1 -1
  280. package/dist/embedding-fallback.d.ts +1 -1
  281. package/dist/enrichment/index.d.ts +1 -1
  282. package/dist/entity-origin-fields.d.ts +1 -1
  283. package/dist/entity-retrieval.d.ts +2 -2
  284. package/dist/entity-retrieval.js +23 -23
  285. package/dist/entity-schema.d.ts +1 -1
  286. package/dist/episodic-context.d.ts +1 -1
  287. package/dist/eval-trajectory-contracts.d.ts +1 -1
  288. package/dist/eval-trajectory-store.d.ts +1 -1
  289. package/dist/eval-trajectory.d.ts +1 -1
  290. package/dist/explicit-capture.d.ts +11 -11
  291. package/dist/explicit-capture.js +6 -6
  292. package/dist/external-wiki-access.d.ts +14 -13
  293. package/dist/external-wiki-access.js +80 -79
  294. package/dist/external-wiki-collection-registration.d.ts +1 -1
  295. package/dist/external-wiki-collection.d.ts +1 -1
  296. package/dist/external-wiki-mcp-tools.d.ts +14 -13
  297. package/dist/extraction-error-classification.d.ts +1 -1
  298. package/dist/extraction-faithfulness.d.ts +2 -2
  299. package/dist/extraction-faithfulness.js +3 -3
  300. package/dist/extraction-judge-telemetry.d.ts +2 -2
  301. package/dist/extraction-judge-training.d.ts +2 -2
  302. package/dist/extraction-judge.d.ts +2 -2
  303. package/dist/extraction-judge.js +3 -3
  304. package/dist/extraction-liveness.d.ts +1 -1
  305. package/dist/extraction-normalization.d.ts +1 -1
  306. package/dist/extraction-prompt.d.ts +1 -1
  307. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  308. package/dist/extraction-source-grounding.d.ts +1 -1
  309. package/dist/extraction-span-config.d.ts +1 -1
  310. package/dist/extraction-span-materialize.d.ts +1 -1
  311. package/dist/extraction.d.ts +2 -2
  312. package/dist/extraction.js +38 -38
  313. package/dist/fallback-llm-codex-subscription.d.ts +15 -5
  314. package/dist/fallback-llm-codex-subscription.js +3 -1
  315. package/dist/fallback-llm.d.ts +1 -1
  316. package/dist/fallback-llm.js +2 -2
  317. package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
  318. package/dist/{generic-recall-paths-CpyVmA88.d.ts → generic-recall-paths-CeKQsQEn.d.ts} +1 -1
  319. package/dist/graph-append-error.d.ts +1 -1
  320. package/dist/graph-dashboard-diff.d.ts +1 -1
  321. package/dist/graph-dashboard-key.d.ts +1 -1
  322. package/dist/graph-dashboard-parser.d.ts +1 -1
  323. package/dist/graph-edge-reinforcement.d.ts +1 -1
  324. package/dist/graph-jsonl.d.ts +1 -1
  325. package/dist/graph-path-reconstruction.d.ts +1 -1
  326. package/dist/graph-path-scoring.d.ts +1 -1
  327. package/dist/graph-snapshot.d.ts +1 -1
  328. package/dist/graph.d.ts +1 -1
  329. package/dist/harmonic-retrieval.js +3 -3
  330. package/dist/importance.d.ts +1 -1
  331. package/dist/importers/index.d.ts +1 -1
  332. package/dist/importers/test-utils.d.ts +1 -1
  333. package/dist/in-flight-reads.d.ts +1 -1
  334. package/dist/{index-BvUA4S7M.d.ts → index-Bau-Wl0H.d.ts} +3 -3
  335. package/dist/index.d.ts +703 -702
  336. package/dist/index.js +331 -327
  337. package/dist/intent.d.ts +1 -1
  338. package/dist/lcm/engine.d.ts +1 -1
  339. package/dist/lcm/engine.js +3 -3
  340. package/dist/lcm/index.d.ts +1 -1
  341. package/dist/lcm/index.js +8 -8
  342. package/dist/lcm/tools.d.ts +1 -1
  343. package/dist/lifecycle.d.ts +1 -1
  344. package/dist/live-connectors-runner.d.ts +1 -1
  345. package/dist/{local-llm-BsJGulur.d.ts → local-llm-Bj-m01Ro.d.ts} +1 -1
  346. package/dist/local-llm-helpers.d.ts +2 -2
  347. package/dist/local-llm.d.ts +2 -2
  348. package/dist/local-llm.js +2 -2
  349. package/dist/local-model-endpoint.d.ts +1 -1
  350. package/dist/location/index.d.ts +6 -209
  351. package/dist/location/index.js +77 -71
  352. package/dist/maintenance/memory-governance.d.ts +1 -1
  353. package/dist/maintenance/memory-governance.js +23 -23
  354. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  355. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
  356. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  357. package/dist/maintenance/rebuild-memory-projection.js +25 -25
  358. package/dist/{maintenance-CYubtIRr.d.ts → maintenance-Ye-y-c7f.d.ts} +7 -6
  359. package/dist/mcp-memory-inspector-app.d.ts +14 -13
  360. package/dist/memory-action-policy.d.ts +1 -1
  361. package/dist/memory-cache.d.ts +1 -1
  362. package/dist/memory-controller.d.ts +1 -1
  363. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  364. package/dist/memory-projection-store.d.ts +1 -1
  365. package/dist/memory-provenance.d.ts +1 -1
  366. package/dist/memory-snapshot.d.ts +1 -1
  367. package/dist/memory-subject-cli.d.ts +14 -13
  368. package/dist/memory-subject.d.ts +14 -13
  369. package/dist/memory-worth-outcomes.d.ts +2 -2
  370. package/dist/models-json.d.ts +1 -1
  371. package/dist/namespaces/migrate.d.ts +3 -3
  372. package/dist/namespaces/migrate.js +23 -23
  373. package/dist/namespaces/principal.d.ts +1 -1
  374. package/dist/namespaces/search.d.ts +1 -1
  375. package/dist/namespaces/search.js +3 -3
  376. package/dist/namespaces/storage.d.ts +3 -3
  377. package/dist/namespaces/storage.js +22 -22
  378. package/dist/native-knowledge.d.ts +1 -1
  379. package/dist/offline-sync-impression-drain.d.ts +1 -1
  380. package/dist/offline-sync-impression-drain.js +5 -5
  381. package/dist/operator-doctor-corpus.d.ts +1 -1
  382. package/dist/operator-doctor-corpus.js +26 -26
  383. package/dist/operator-doctor-replica.d.ts +1 -1
  384. package/dist/operator-toolkit.d.ts +3 -3
  385. package/dist/operator-toolkit.js +44 -44
  386. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  387. package/dist/orchestration/maintenance.d.ts +4 -4
  388. package/dist/orchestration/maintenance.js +39 -39
  389. package/dist/{orchestrator-BWDRJ_0d.d.ts → orchestrator-fFDDYUUV.d.ts} +20 -10
  390. package/dist/orchestrator.d.ts +11 -11
  391. package/dist/orchestrator.js +170 -168
  392. package/dist/patterns-cli.d.ts +1 -1
  393. package/dist/{pipeline-7JMn2yMH.d.ts → pipeline-D_j5n_Ih.d.ts} +1 -1
  394. package/dist/policy-runtime.d.ts +1 -1
  395. package/dist/proactive-contention.d.ts +2 -2
  396. package/dist/provenance.d.ts +1 -1
  397. package/dist/{public-http-CJWs3mo9.d.ts → public-http-CjiSqxUx.d.ts} +1 -1
  398. package/dist/{qmd-CxCH9G9m.d.ts → qmd-CnxVjKrv.d.ts} +1 -1
  399. package/dist/qmd-preflight.d.ts +2 -2
  400. package/dist/qmd-recall-cache.d.ts +1 -1
  401. package/dist/qmd.d.ts +2 -2
  402. package/dist/recall-concurrency-config.d.ts +1 -1
  403. package/dist/recall-disclosure-escalation.d.ts +1 -1
  404. package/dist/recall-explain-renderer.d.ts +1 -1
  405. package/dist/recall-explain-renderer.js +3 -3
  406. package/dist/recall-memory-map.d.ts +1 -1
  407. package/dist/recall-navigate-access.d.ts +1 -1
  408. package/dist/recall-navigate-access.js +2 -2
  409. package/dist/recall-navigate-disclosure.d.ts +1 -1
  410. package/dist/recall-navigate-disclosure.js +1 -1
  411. package/dist/recall-navigate.d.ts +1 -1
  412. package/dist/recall-navigate.js +2 -2
  413. package/dist/recall-planner-llm.d.ts +1 -1
  414. package/dist/recall-planner-llm.js +2 -2
  415. package/dist/recall-state-view-admission.d.ts +2 -2
  416. package/dist/recall-state-view-admission.js +8 -8
  417. package/dist/recall-state-view-anchors.d.ts +1 -1
  418. package/dist/recall-state-view-anchors.js +2 -2
  419. package/dist/recall-state-view-inject.js +2 -2
  420. package/dist/recall-state-view-render.js +2 -2
  421. package/dist/recall-state-view-widen.js +2 -2
  422. package/dist/recall-state-view-wire.js +3 -3
  423. package/dist/recall-state-view.d.ts +9 -1
  424. package/dist/recall-state-view.js +5 -3
  425. package/dist/recall-state.d.ts +1 -1
  426. package/dist/recall-tag-filter.d.ts +1 -1
  427. package/dist/recall-timings.d.ts +1 -1
  428. package/dist/recall-xray-cli.d.ts +1 -1
  429. package/dist/recall-xray-cli.js +4 -4
  430. package/dist/recall-xray-renderer.d.ts +1 -1
  431. package/dist/recall-xray-renderer.js +3 -3
  432. package/dist/recall-xray.d.ts +1 -1
  433. package/dist/recall-xray.js +2 -2
  434. package/dist/reconcile/cursor.d.ts +1 -1
  435. package/dist/reconcile/cursor.js +2 -2
  436. package/dist/reconcile/manifest.d.ts +1 -1
  437. package/dist/reconcile/manifest.js +4 -4
  438. package/dist/reconcile/plan.d.ts +1 -1
  439. package/dist/reconcile/plan.js +2 -2
  440. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  441. package/dist/replay/normalizers/claude.d.ts +1 -1
  442. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  443. package/dist/replay/normalizers/shared.d.ts +1 -1
  444. package/dist/replay/runner.d.ts +1 -1
  445. package/dist/replay/types.d.ts +1 -1
  446. package/dist/replica-divergence.d.ts +1 -1
  447. package/dist/replica-peers-config.d.ts +1 -1
  448. package/dist/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +8 -8
  449. package/dist/resolution-LXFQQ4AE.js.map +1 -0
  450. package/dist/resolve-auth-token.d.ts +1 -1
  451. package/dist/resume-bundles.js +12 -12
  452. package/dist/retrieval-agents.d.ts +2 -2
  453. package/dist/retrieval-tiers.d.ts +1 -1
  454. package/dist/routing/engine.d.ts +1 -1
  455. package/dist/routing/store.d.ts +1 -1
  456. package/dist/salvage-envelope.d.ts +1 -1
  457. package/dist/schemas.d.ts +160 -160
  458. package/dist/{scope-profiles-BGAUqhBR.d.ts → scope-profiles-BajH5zAT.d.ts} +1 -1
  459. package/dist/search/embed-helper.d.ts +1 -1
  460. package/dist/search/factory.d.ts +1 -1
  461. package/dist/search/factory.js +2 -2
  462. package/dist/search/index.d.ts +1 -1
  463. package/dist/search/index.js +4 -4
  464. package/dist/search/lancedb-backend.d.ts +1 -1
  465. package/dist/search/meilisearch-backend.d.ts +1 -1
  466. package/dist/search/noop-backend.d.ts +1 -1
  467. package/dist/search/orama-backend.d.ts +1 -1
  468. package/dist/search/port.d.ts +1 -1
  469. package/dist/search/remote-backend.d.ts +1 -1
  470. package/dist/{semantic-consolidation-CCeRD9pV.d.ts → semantic-consolidation-Bu6d3O7R.d.ts} +1 -1
  471. package/dist/semantic-consolidation.d.ts +2 -2
  472. package/dist/semantic-consolidation.js +25 -25
  473. package/dist/semantic-rule-promotion.js +22 -22
  474. package/dist/semantic-rule-verifier.d.ts +1 -1
  475. package/dist/semantic-rule-verifier.js +22 -22
  476. package/dist/{service-BwpzRduk.d.ts → service-ChFwWtLS.d.ts} +13 -2
  477. package/dist/session-observer-bands.d.ts +1 -1
  478. package/dist/session-observer-state.d.ts +1 -1
  479. package/dist/shared-context/manager.d.ts +7 -7
  480. package/dist/shared-context/manager.js +2 -2
  481. package/dist/shared-context/write-output-controls.d.ts +34 -0
  482. package/dist/shared-context/write-output-controls.js +10 -0
  483. package/dist/shared-context/write-output-controls.js.map +1 -0
  484. package/dist/signal.d.ts +1 -1
  485. package/dist/source-agent-qualifier.d.ts +1 -1
  486. package/dist/source-agent-qualifier.js +33 -33
  487. package/dist/source-attribution.d.ts +23 -1
  488. package/dist/source-attribution.js +13 -3
  489. package/dist/standup/build.js +23 -23
  490. package/dist/{storage-BprAGBG0.d.ts → storage-BDKQdsmB.d.ts} +1 -1
  491. package/dist/storage.d.ts +2 -2
  492. package/dist/storage.js +21 -21
  493. package/dist/subject-config.d.ts +1 -1
  494. package/dist/subject-config.js +2 -2
  495. package/dist/summarizer.d.ts +1 -1
  496. package/dist/summarizer.js +6 -6
  497. package/dist/summary-snapshot.d.ts +1 -1
  498. package/dist/support-passport/index.d.ts +17 -16
  499. package/dist/support-passport/index.js +82 -81
  500. package/dist/tagging-CwK6um2q.d.ts +240 -0
  501. package/dist/temporal-supersession.d.ts +2 -2
  502. package/dist/temporal-timeline-recall.d.ts +1 -1
  503. package/dist/temporal-validity.d.ts +1 -1
  504. package/dist/threading.d.ts +1 -1
  505. package/dist/tier-migration.d.ts +2 -2
  506. package/dist/tier-routing.d.ts +1 -1
  507. package/dist/tier-routing.js +3 -3
  508. package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
  509. package/dist/topics.d.ts +1 -1
  510. package/dist/transcript.d.ts +1 -1
  511. package/dist/transfer/backup.js +2 -2
  512. package/dist/transfer/capsule-export.js +2 -2
  513. package/dist/transfer/capsule-import.js +3 -3
  514. package/dist/transfer/export-okf.d.ts +1 -1
  515. package/dist/transfer/export-okf.js +22 -22
  516. package/dist/transfer/types.d.ts +78 -78
  517. package/dist/trust-score-stage.d.ts +1 -1
  518. package/dist/trust-score.d.ts +1 -1
  519. package/dist/{types-nJV23pa3.d.ts → types-B65IoepH.d.ts} +6 -1
  520. package/dist/types.d.ts +1 -1
  521. package/dist/types.js +1 -1
  522. package/dist/utility-runtime.d.ts +1 -1
  523. package/dist/verified-recall.js +22 -22
  524. package/dist/who-knows-cli.d.ts +14 -13
  525. package/dist/who-knows-cli.js +23 -23
  526. package/dist/who-knows.d.ts +14 -13
  527. package/dist/who-knows.js +22 -22
  528. package/dist/write-envelope.d.ts +1 -1
  529. package/package.json +12 -2
  530. package/src/access-http.test.ts +1 -0
  531. package/src/access-http.ts +1 -1
  532. package/src/access-mcp-shared-context-tools.ts +103 -0
  533. package/src/access-mcp.ts +7 -80
  534. package/src/access-observe-write-category.ts +1 -0
  535. package/src/access-observe-write-surface.ts +3 -3
  536. package/src/access-operations-batch.ts +47 -4
  537. package/src/access-schema.ts +1 -0
  538. package/src/access-service.ts +18 -12
  539. package/src/activity/timeline/regenerate.test.ts +48 -0
  540. package/src/activity/timeline/regenerate.ts +7 -5
  541. package/src/cli/deep-recall-commands.ts +22 -10
  542. package/src/config.ts +5 -0
  543. package/src/dedup/merge.test.ts +283 -0
  544. package/src/deep-recall-boundary.test.ts +66 -0
  545. package/src/deep-recall-cli.test.ts +82 -0
  546. package/src/deep-recall-config.test.ts +56 -0
  547. package/src/deep-recall-config.ts +32 -0
  548. package/src/deep-recall-http-glue.ts +10 -10
  549. package/src/deep-recall-policy-llm.test.ts +242 -0
  550. package/src/deep-recall-policy-llm.ts +37 -7
  551. package/src/deep-recall-seeds.test.ts +53 -0
  552. package/src/deep-recall-seeds.ts +7 -1
  553. package/src/deep-recall-surface.test.ts +93 -0
  554. package/src/deep-recall.test.ts +121 -0
  555. package/src/deep-recall.ts +88 -28
  556. package/src/fallback-llm-codex-subscription.ts +27 -5
  557. package/src/fallback-llm.test.ts +120 -0
  558. package/src/fallback-llm.ts +17 -16
  559. package/src/location/phase5-wiring.test.ts +408 -0
  560. package/src/location/tagging.ts +58 -0
  561. package/src/meetings/config.test.ts +58 -0
  562. package/src/orchestration/extraction-persist.ts +1 -1
  563. package/src/orchestration/orchestrator-helpers.ts +2 -0
  564. package/src/orchestration/recall-entry.ts +15 -1
  565. package/src/orchestration/recall-internal.ts +1 -0
  566. package/src/orchestration/recall-section-coordinator.ts +65 -28
  567. package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
  568. package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
  569. package/src/orchestration/semantic-merge-persist.ts +23 -36
  570. package/src/orchestration/workspace-ops.ts +14 -0
  571. package/src/providers/codex-subscription.test.ts +127 -0
  572. package/src/providers/codex-subscription.ts +1 -1
  573. package/src/recall-state-view-budget.test.ts +424 -0
  574. package/src/recall-state-view.ts +30 -16
  575. package/src/shared-context/envelope-io.ts +25 -0
  576. package/src/shared-context/envelope-wiring.test.ts +4 -2
  577. package/src/shared-context/manager.ts +1 -0
  578. package/src/shared-context/write-output-controls.test.ts +192 -0
  579. package/src/shared-context/write-output-controls.ts +72 -0
  580. package/src/source-attribution.test.ts +39 -0
  581. package/src/source-attribution.ts +72 -0
  582. package/src/types.ts +5 -0
  583. package/src/wearables/pipeline.ts +19 -0
  584. package/src/wearables/service.ts +8 -0
  585. package/dist/chunk-5LYSEZOF.js.map +0 -1
  586. package/dist/chunk-CARRTDKC.js.map +0 -1
  587. package/dist/chunk-CC37E3QM.js.map +0 -1
  588. package/dist/chunk-IS2IDFJP.js.map +0 -1
  589. package/dist/chunk-K75A5XWU.js.map +0 -1
  590. package/dist/chunk-KTOXQMW3.js.map +0 -1
  591. package/dist/chunk-MDIEES23.js.map +0 -1
  592. package/dist/chunk-OEDW4ER7.js.map +0 -1
  593. package/dist/chunk-QE6YVNP5.js.map +0 -1
  594. package/dist/chunk-ROEFLU37.js.map +0 -1
  595. package/dist/chunk-SFHLQPBF.js.map +0 -1
  596. package/dist/chunk-SV4Z2S67.js.map +0 -1
  597. package/dist/chunk-THTF2W7M.js.map +0 -1
  598. package/dist/chunk-UZ6JYPJ6.js.map +0 -1
  599. package/dist/chunk-YTK5MVNF.js.map +0 -1
  600. package/dist/chunk-ZRMMXWYI.js.map +0 -1
  601. package/dist/chunk-ZX3AYNNV.js.map +0 -1
  602. /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
  603. /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  604. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
  605. /package/dist/{chunk-JAJIMTFB.js.map → chunk-2PDMIPMP.js.map} +0 -0
  606. /package/dist/{chunk-6L2II3KS.js.map → chunk-3D75XIYO.js.map} +0 -0
  607. /package/dist/{chunk-XCPNH2MG.js.map → chunk-3KJTSCSX.js.map} +0 -0
  608. /package/dist/{chunk-YTZN2UZO.js.map → chunk-3RLWUW7G.js.map} +0 -0
  609. /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
  610. /package/dist/{chunk-NVVZPBKI.js.map → chunk-46FVFU7S.js.map} +0 -0
  611. /package/dist/{chunk-JUDT33RX.js.map → chunk-4AX5OYKC.js.map} +0 -0
  612. /package/dist/{chunk-GSSDHAYH.js.map → chunk-4IGOLIWM.js.map} +0 -0
  613. /package/dist/{chunk-23HFXQ5J.js.map → chunk-6EGIQEKC.js.map} +0 -0
  614. /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
  615. /package/dist/{chunk-GO5LOHCD.js.map → chunk-7L54ARML.js.map} +0 -0
  616. /package/dist/{chunk-TEMKBSV6.js.map → chunk-7PSRCGWT.js.map} +0 -0
  617. /package/dist/{chunk-ICNJ6J46.js.map → chunk-AAAFZW3U.js.map} +0 -0
  618. /package/dist/{chunk-K4JKAXMO.js.map → chunk-AAX22E4K.js.map} +0 -0
  619. /package/dist/{chunk-KY236SP5.js.map → chunk-AHHFBJX7.js.map} +0 -0
  620. /package/dist/{chunk-TZ44E732.js.map → chunk-AIVRD66I.js.map} +0 -0
  621. /package/dist/{chunk-YRIFXXMI.js.map → chunk-AOGICQMH.js.map} +0 -0
  622. /package/dist/{chunk-KOTG3RXE.js.map → chunk-AUSRUOMQ.js.map} +0 -0
  623. /package/dist/{chunk-C5R73BON.js.map → chunk-BIANISES.js.map} +0 -0
  624. /package/dist/{chunk-IMBQFHRV.js.map → chunk-BPXJINHW.js.map} +0 -0
  625. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  626. /package/dist/{chunk-2J3V5QEO.js.map → chunk-C3QXITIP.js.map} +0 -0
  627. /package/dist/{chunk-2SNCQHJZ.js.map → chunk-CQ4BTPX6.js.map} +0 -0
  628. /package/dist/{chunk-3QEVOQF5.js.map → chunk-CTETTVDN.js.map} +0 -0
  629. /package/dist/{chunk-DFVSJFHK.js.map → chunk-DBB5JPSL.js.map} +0 -0
  630. /package/dist/{chunk-W23JARAQ.js.map → chunk-DLPMOSNH.js.map} +0 -0
  631. /package/dist/{chunk-BGRTZOJB.js.map → chunk-DMTSKY4W.js.map} +0 -0
  632. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  633. /package/dist/{chunk-QS5Q5RBV.js.map → chunk-E4FRR4MA.js.map} +0 -0
  634. /package/dist/{chunk-RJQAP333.js.map → chunk-ETE3SGAH.js.map} +0 -0
  635. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  636. /package/dist/{chunk-RLU2Y5GV.js.map → chunk-F2FJTOV6.js.map} +0 -0
  637. /package/dist/{chunk-V2ZA4YWE.js.map → chunk-F5H6YG5P.js.map} +0 -0
  638. /package/dist/{chunk-4CMXI55L.js.map → chunk-FSUFKIFS.js.map} +0 -0
  639. /package/dist/{chunk-ZAEPD4C2.js.map → chunk-G3NTZZWT.js.map} +0 -0
  640. /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
  641. /package/dist/{chunk-WZYHPAG5.js.map → chunk-GIM2AGFL.js.map} +0 -0
  642. /package/dist/{chunk-J7FVMLBR.js.map → chunk-GWEZNCGA.js.map} +0 -0
  643. /package/dist/{chunk-LFVZD5EC.js.map → chunk-GWNSKQDA.js.map} +0 -0
  644. /package/dist/{chunk-MJC7UKH7.js.map → chunk-H2N6SLTR.js.map} +0 -0
  645. /package/dist/{chunk-J4WGTN2N.js.map → chunk-HK44SV6K.js.map} +0 -0
  646. /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
  647. /package/dist/{chunk-VQYWKCDR.js.map → chunk-HPMCKAET.js.map} +0 -0
  648. /package/dist/{chunk-MVG3KXON.js.map → chunk-I65KB36L.js.map} +0 -0
  649. /package/dist/{chunk-AEOOGXMQ.js.map → chunk-J2MGTGKC.js.map} +0 -0
  650. /package/dist/{chunk-PKUJNICO.js.map → chunk-JC2OBYYD.js.map} +0 -0
  651. /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
  652. /package/dist/{chunk-VQWBUPSJ.js.map → chunk-JMAP6L6Q.js.map} +0 -0
  653. /package/dist/{chunk-7Z54NXVS.js.map → chunk-K27INAPR.js.map} +0 -0
  654. /package/dist/{chunk-7D6SER6A.js.map → chunk-KJQ4Y2PY.js.map} +0 -0
  655. /package/dist/{chunk-QPVNK2VE.js.map → chunk-LCVYO3ON.js.map} +0 -0
  656. /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
  657. /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
  658. /package/dist/{chunk-TO36VPZI.js.map → chunk-LWF6GOII.js.map} +0 -0
  659. /package/dist/{chunk-ES5BUPYB.js.map → chunk-OCWFKD5Q.js.map} +0 -0
  660. /package/dist/{chunk-IOPIGX7Y.js.map → chunk-OP722LOG.js.map} +0 -0
  661. /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
  662. /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
  663. /package/dist/{chunk-JOP7W24J.js.map → chunk-PLJ2MQFT.js.map} +0 -0
  664. /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
  665. /package/dist/{chunk-BXIJSPCL.js.map → chunk-Q62GA5U2.js.map} +0 -0
  666. /package/dist/{chunk-I3H5LFOI.js.map → chunk-QNJQCLI6.js.map} +0 -0
  667. /package/dist/{chunk-BYQX4IOG.js.map → chunk-R45VFSEV.js.map} +0 -0
  668. /package/dist/{chunk-XVDZFTN5.js.map → chunk-RFIJH2OE.js.map} +0 -0
  669. /package/dist/{chunk-K4A6UVPB.js.map → chunk-RJ7Z7YXK.js.map} +0 -0
  670. /package/dist/{chunk-HJUP3K6L.js.map → chunk-RXYO6NA6.js.map} +0 -0
  671. /package/dist/{chunk-TBXAY2SS.js.map → chunk-SGHGCFVV.js.map} +0 -0
  672. /package/dist/{chunk-2SKMZUOW.js.map → chunk-U26LB4WA.js.map} +0 -0
  673. /package/dist/{chunk-VHKXRYQN.js.map → chunk-VBK6SRNE.js.map} +0 -0
  674. /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
  675. /package/dist/{chunk-Z4GUX2M6.js.map → chunk-VSN2DMQK.js.map} +0 -0
  676. /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
  677. /package/dist/{chunk-G2XZFGYN.js.map → chunk-WGZHSQDV.js.map} +0 -0
  678. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  679. /package/dist/{chunk-LKFVVN7R.js.map → chunk-WNPRRBOE.js.map} +0 -0
  680. /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
  681. /package/dist/{chunk-RDLPFM7I.js.map → chunk-XJLTQTAO.js.map} +0 -0
  682. /package/dist/{chunk-XM46Y66S.js.map → chunk-ZFU6QNRN.js.map} +0 -0
  683. /package/dist/{chunk-SUEOG2S4.js.map → chunk-ZGXHTV5Y.js.map} +0 -0
  684. /package/dist/{chunk-46Z3VGWF.js.map → chunk-ZYRAY5FL.js.map} +0 -0
  685. /package/dist/{chunk-3XPN7AVY.js.map → chunk-ZYSOT6HD.js.map} +0 -0
  686. /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  687. /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  688. /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Phase-5 wiring regression (issue #2925): the existing location subsystem
3
+ * feeding wearables, day summaries, and briefings — conservatively.
4
+ *
5
+ * Pins the contract the umbrella issue (#2043) requires:
6
+ * - wearable location fill is missing-only and never overwrites a
7
+ * source-provided value;
8
+ * - conflicting / below-threshold overlaps stay untagged;
9
+ * - absent, disabled, or unrequested location changes NOTHING (the
10
+ * stored transcript body and gathered day summary are byte-identical);
11
+ * - day summaries and briefings expose place names only behind the
12
+ * explicit includeLocation request flag plus both location gates;
13
+ * - labels only — coordinates never reach any phase-5 output.
14
+ */
15
+
16
+ import assert from "node:assert/strict";
17
+ import { mkdtempSync, rmSync } from "node:fs";
18
+ import { tmpdir } from "node:os";
19
+ import * as path from "node:path";
20
+ import { test } from "node:test";
21
+
22
+ import { StorageManager } from "../storage.js";
23
+ import { WorkspaceOpsCoordinator, type WorkspaceOpsDeps } from "../orchestration/workspace-ops.js";
24
+ import type { PluginConfig } from "../types.js";
25
+ import type {
26
+ WearableConversation,
27
+ WearableSourceConnector,
28
+ WearableSourceSettings,
29
+ WearablesConfig,
30
+ } from "../wearables/types.js";
31
+ import { defaultWearableSourceSettings, defaultWearablesConfig } from "../wearables/config.js";
32
+ import { parseDayTranscript } from "../wearables/day-store.js";
33
+ import { syncWearableSource, type WearableSyncDeps } from "../wearables/pipeline.js";
34
+ import { parseLocationConfig } from "./config.js";
35
+ import { saveLocationSyncState } from "./store.js";
36
+ import type { LocationConfig, LocationSegment } from "./types.js";
37
+ import { briefingLocationSection } from "./tagging.js";
38
+
39
+ const NOW = new Date("2026-06-11T03:00:00.000Z");
40
+
41
+ function locationConfig(overrides: Record<string, unknown> = {}): LocationConfig {
42
+ return parseLocationConfig({
43
+ enabled: true,
44
+ timezone: "UTC",
45
+ sources: [{ id: "reitti" }],
46
+ tagging: { enabled: true },
47
+ ...overrides,
48
+ });
49
+ }
50
+
51
+ function segment(
52
+ startUtc: string,
53
+ endUtc: string,
54
+ label: string,
55
+ kind: LocationSegment["place"]["kind"] = "poi",
56
+ ): LocationSegment {
57
+ return {
58
+ startUtc,
59
+ endUtc,
60
+ place: {
61
+ id: `reitti:place:${label.toLowerCase().replace(/\s+/g, "-")}`,
62
+ label,
63
+ kind,
64
+ latitude: 60.1699,
65
+ longitude: 24.9384,
66
+ },
67
+ confidence: 0.9,
68
+ };
69
+ }
70
+
71
+ async function seedLocationDays(memoryDir: string, days: Record<string, LocationSegment[]>) {
72
+ await saveLocationSyncState(memoryDir, {
73
+ version: 1,
74
+ sources: {
75
+ reitti: {
76
+ days: Object.fromEntries(
77
+ Object.entries(days).map(([date, segments]) => [
78
+ date,
79
+ { observationCount: segments.length, segments },
80
+ ]),
81
+ ),
82
+ },
83
+ },
84
+ });
85
+ }
86
+ function wearableSettings(): WearableSourceSettings {
87
+ return { ...defaultWearableSourceSettings(), enabled: true };
88
+ }
89
+
90
+ function wearablesConfig(timezone = "UTC"): WearablesConfig {
91
+ return {
92
+ ...defaultWearablesConfig(),
93
+ enabled: true,
94
+ timezone,
95
+ digestEnabled: false,
96
+ offTheRecordEnabled: false,
97
+ };
98
+ }
99
+
100
+ function conversation(
101
+ id: string,
102
+ startIso: string,
103
+ endIso: string,
104
+ overrides: Partial<WearableConversation> = {},
105
+ ): WearableConversation {
106
+ return {
107
+ id,
108
+ source: "testsource",
109
+ title: `Conversation ${id}`,
110
+ startIso,
111
+ endIso,
112
+ segments: [{ speakerKey: "user", speakerName: "user", isWearer: true, text: "Synthetic wearable text." }],
113
+ ...overrides,
114
+ };
115
+ }
116
+
117
+ function fakeConnector(byDate: Record<string, WearableConversation[]>): WearableSourceConnector {
118
+ return {
119
+ id: "testsource",
120
+ displayName: "Test Source",
121
+ async verifyAuth() {
122
+ return { ok: true };
123
+ },
124
+ async fetchConversations(opts: { date: string }) {
125
+ return { conversations: byDate[opts.date] ?? [], nextCursor: null };
126
+ },
127
+ };
128
+ }
129
+
130
+ function makeSyncDeps(
131
+ memoryDir: string,
132
+ now: Date,
133
+ locationConfigValue?: LocationConfig,
134
+ ): { deps: WearableSyncDeps; written: Array<{ source: string; date: string; serialized: string }> } {
135
+ const written: Array<{ source: string; date: string; serialized: string }> = [];
136
+ const deps: WearableSyncDeps = {
137
+ memoryDir,
138
+ async readDayContentHash() {
139
+ return null;
140
+ },
141
+ writeDayTranscript(source, date, serialized) {
142
+ written.push({ source, date, serialized });
143
+ return Promise.resolve();
144
+ },
145
+ memoryGen: null,
146
+ now: () => now,
147
+ ...(locationConfigValue !== undefined ? { locationConfig: locationConfigValue } : {}),
148
+ };
149
+ return { deps, written };
150
+ }
151
+
152
+ function bodyOf(serialized: string): string {
153
+ const parsed = parseDayTranscript(serialized);
154
+ assert.ok(parsed, "day transcript parses");
155
+ return parsed.body;
156
+ }
157
+
158
+ // ── Wearable fill ───────────────────────────────────────────────────────────
159
+
160
+ test("wearable sync fills only missing conversation locations from a dominant overlap", async () => {
161
+ const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-fill-"));
162
+ try {
163
+ await seedLocationDays(memoryDir, {
164
+ "2026-06-11": [segment("2026-06-11T14:30:00.000Z", "2026-06-11T16:00:00.000Z", "Coffee shop")],
165
+ });
166
+ const { deps, written } = makeSyncDeps(memoryDir, NOW, locationConfig());
167
+ const connector = fakeConnector({
168
+ "2026-06-11": [
169
+ conversation("c-missing", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z"),
170
+ conversation("c-source", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z", {
171
+ location: "Office rooftop",
172
+ }),
173
+ ],
174
+ });
175
+
176
+ await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 1 }, deps);
177
+
178
+ assert.equal(written.length, 1, "day transcript written");
179
+ const body = bodyOf(written[0].serialized);
180
+ assert.ok(body.includes("*Location: Coffee shop*"), "missing location filled from the dominant match");
181
+ const sourceSection = body.slice(body.indexOf("Conversation c-source"));
182
+ assert.ok(sourceSection.includes("*Location: Office rooftop*"), "source-provided location kept");
183
+ assert.ok(!sourceSection.includes("Coffee shop"), "source-provided value not overwritten");
184
+ } finally {
185
+ rmSync(memoryDir, { recursive: true, force: true });
186
+ }
187
+ });
188
+
189
+ test("conflicting and below-threshold overlaps leave wearable locations unfilled", async () => {
190
+ const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-threshold-"));
191
+ try {
192
+ await seedLocationDays(memoryDir, {
193
+ // Two equal-overlap places → ambiguous (conflict).
194
+ "2026-06-11": [
195
+ segment("2026-06-11T15:00:00.000Z", "2026-06-11T15:15:00.000Z", "Diner"),
196
+ segment("2026-06-11T15:15:00.000Z", "2026-06-11T15:30:00.000Z", "Gym"),
197
+ ],
198
+ // A 2-minute overlap only → below the 300s floor.
199
+ "2026-06-12": [segment("2026-06-12T15:28:00.000Z", "2026-06-12T16:30:00.000Z", "Library")],
200
+ });
201
+ const { deps, written } = makeSyncDeps(memoryDir, new Date("2026-06-12T03:00:00.000Z"), locationConfig());
202
+ const connector = fakeConnector({
203
+ "2026-06-11": [conversation("c-ambiguous", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z")],
204
+ "2026-06-12": [conversation("c-short", "2026-06-12T15:00:00.000Z", "2026-06-12T15:30:00.000Z")],
205
+ });
206
+
207
+ await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 2 }, deps);
208
+
209
+ assert.equal(written.length, 2, "both days written");
210
+ const bodies = written.map((entry) => bodyOf(entry.serialized));
211
+ assert.ok(
212
+ !bodies.some((body) => body.includes("*Location:")),
213
+ `no location line written: ${bodies.join("\n---\n")}`,
214
+ );
215
+ } finally {
216
+ rmSync(memoryDir, { recursive: true, force: true });
217
+ }
218
+ });
219
+
220
+ test("wearable sync output is byte-identical without location config or with tagging disabled", async () => {
221
+ const run = async (locationConfigValue?: LocationConfig) => {
222
+ const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-zerodiff-"));
223
+ try {
224
+ if (locationConfigValue) {
225
+ await seedLocationDays(memoryDir, {
226
+ "2026-06-11": [segment("2026-06-11T14:30:00.000Z", "2026-06-11T16:00:00.000Z", "Coffee shop")],
227
+ });
228
+ }
229
+ const { deps, written } = makeSyncDeps(memoryDir, NOW, locationConfigValue);
230
+ const connector = fakeConnector({
231
+ "2026-06-11": [conversation("c1", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z")],
232
+ });
233
+ await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 1 }, deps);
234
+ assert.equal(written.length, 1);
235
+ return bodyOf(written[0].serialized);
236
+ } finally {
237
+ rmSync(memoryDir, { recursive: true, force: true });
238
+ }
239
+ };
240
+
241
+ const baseline = await run(undefined);
242
+ const disabled = await run(locationConfig({ tagging: { enabled: false } }));
243
+ assert.equal(disabled, baseline, "tagging disabled → identical transcript body");
244
+ assert.ok(!baseline.includes("*Location:"), "no location line by default");
245
+ });
246
+
247
+ test("wearable fill resolves the day bucket across a midnight boundary in the location timezone", async () => {
248
+ const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-midnight-"));
249
+ try {
250
+ // America/New_York: conversation 2026-06-30T03:30Z–04:30Z is
251
+ // 23:30–00:30 local, spanning the June-29 / June-30 midnight. The only
252
+ // qualifying segment (00:00–01:00 local) lives on the June-30 bucket —
253
+ // the conversation's END-anchored day, not its start day. The fill must
254
+ // consult both day keys, not just the start day.
255
+ const nyConfig = locationConfig({ timezone: "America/New_York" });
256
+ await seedLocationDays(memoryDir, {
257
+ "2026-06-30": [segment("2026-06-30T04:00:00.000Z", "2026-06-30T05:00:00.000Z", "Late diner")],
258
+ });
259
+ const { deps, written } = makeSyncDeps(memoryDir, new Date("2026-07-01T03:00:00.000Z"), nyConfig);
260
+ const connector = fakeConnector({
261
+ "2026-06-30": [conversation("c-span", "2026-06-30T03:30:00.000Z", "2026-06-30T04:30:00.000Z")],
262
+ });
263
+
264
+ await syncWearableSource(
265
+ connector,
266
+ wearableSettings(),
267
+ wearablesConfig("America/New_York"),
268
+ { date: "2026-06-30" },
269
+ deps,
270
+ );
271
+
272
+ assert.equal(written.length, 1);
273
+ const body = bodyOf(written[0].serialized);
274
+ assert.ok(body.includes("*Location: Late diner*"), `cross-midnight segment matched: ${body}`);
275
+ } finally {
276
+ rmSync(memoryDir, { recursive: true, force: true });
277
+ }
278
+ });
279
+
280
+ // ── Day summary opt-in ──────────────────────────────────────────────────────
281
+
282
+ function opsCoordinator(storage: StorageManager, configOverrides: Partial<PluginConfig>) {
283
+ return new WorkspaceOpsCoordinator({
284
+ config: {
285
+ defaultNamespace: "default",
286
+ daySummaryTimezone: "UTC",
287
+ ...configOverrides,
288
+ } as unknown as PluginConfig,
289
+ storageRouter: {
290
+ storageFor: async () => storage,
291
+ },
292
+ } as unknown as WorkspaceOpsDeps);
293
+ }
294
+
295
+ test("gatherTodayFacts appends location context only when requested and gated", async () => {
296
+ const gather = async (options: { includeLocation?: boolean; location?: LocationConfig }) => {
297
+ const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-summary-"));
298
+ try {
299
+ const storage = new StorageManager(root);
300
+ await storage.writeMemory("fact", "Shipped the location wiring.", { source: "test" });
301
+ if (options.location) {
302
+ const day = new Date().toISOString().slice(0, 10);
303
+ await seedLocationDays(root, {
304
+ [day]: [segment(`${day}T09:00:00.000Z`, `${day}T17:00:00.000Z`, "Office", "work")],
305
+ });
306
+ }
307
+ const coordinator = opsCoordinator(storage, options.location ? { location: options.location } : {});
308
+ return await coordinator.gatherTodayFacts(undefined, {
309
+ now: new Date(),
310
+ timeZone: "UTC",
311
+ ...(options.includeLocation !== undefined ? { includeLocation: options.includeLocation } : {}),
312
+ });
313
+ } finally {
314
+ rmSync(root, { recursive: true, force: true });
315
+ }
316
+ };
317
+
318
+ // Each gather run writes a fresh fact id/timestamp header; normalize it
319
+ // away so byte-comparisons isolate the location delta.
320
+ const normalized = (gathered: string) => gathered.replace(/^\[fact-[^\]]*\] \([^)]*\)/gm, "[fact]");
321
+
322
+ const enabled = locationConfig();
323
+ const baseline = await gather({});
324
+ const withStateNoFlag = await gather({ location: enabled });
325
+ assert.equal(normalized(withStateNoFlag), normalized(baseline), "no request flag → byte-identical gathered summary");
326
+
327
+ const withFlagNoState = await gather({ includeLocation: true });
328
+ assert.equal(normalized(withFlagNoState), normalized(baseline), "flag without location state → byte-identical");
329
+
330
+ const withFlag = await gather({ includeLocation: true, location: enabled });
331
+ assert.ok(withFlag.includes("## Location context"), "opt-in adds the location section");
332
+ assert.ok(withFlag.includes("- Office: 8h 00m"), "labels and durations only");
333
+
334
+ const flagButTaggingOff = await gather({
335
+ includeLocation: true,
336
+ location: locationConfig({ tagging: { enabled: false } }),
337
+ });
338
+ assert.equal(normalized(flagButTaggingOff), normalized(baseline), "flag with tagging disabled → byte-identical");
339
+ });
340
+
341
+ // ── Briefing opt-in ─────────────────────────────────────────────────────────
342
+
343
+ test("briefingLocationSection is opt-in, start-day anchored, and labels-only", async () => {
344
+ const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-briefing-"));
345
+ try {
346
+ const day = new Date().toISOString().slice(0, 10);
347
+ await seedLocationDays(root, {
348
+ [day]: [
349
+ segment(`${day}T08:00:00.000Z`, `${day}T18:00:00.000Z`, "HQ", "work"),
350
+ segment(`${day}T18:00:00.000Z`, `${day}T19:00:00.000Z`, "Commuter rail", "transit"),
351
+ ],
352
+ });
353
+
354
+ const gatedOff = await briefingLocationSection(
355
+ root,
356
+ new Date().toISOString(),
357
+ locationConfig({ tagging: { enabled: false } }),
358
+ );
359
+ assert.equal(gatedOff, null, "tagging disabled → no section");
360
+
361
+ const section = await briefingLocationSection(root, new Date().toISOString(), locationConfig());
362
+ assert.ok(section, "gated on → section rendered");
363
+ assert.ok(section.includes("## Location context"));
364
+ assert.ok(section.includes("- HQ: 10h 00m"), "work place rendered with duration");
365
+ assert.ok(!section.includes("Commuter rail"), "transit-only place excluded");
366
+
367
+ const none = await briefingLocationSection(
368
+ root,
369
+ new Date(Date.now() - 90 * 24 * 3600 * 1000).toISOString(),
370
+ locationConfig(),
371
+ );
372
+ assert.equal(none, null, "window start on a day without segments → no section");
373
+ } finally {
374
+ rmSync(root, { recursive: true, force: true });
375
+ }
376
+ });
377
+
378
+ // ── Privacy ─────────────────────────────────────────────────────────────────
379
+
380
+ test("phase-5 outputs never contain coordinates or raw location records", async () => {
381
+ const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-privacy-"));
382
+ try {
383
+ const day = new Date().toISOString().slice(0, 10);
384
+ // Segment places carry coordinates (as if retainCoordinates had been on
385
+ // at ingestion) — every phase-5 surface must still render labels only.
386
+ await seedLocationDays(root, {
387
+ [day]: [segment(`${day}T08:00:00.000Z`, `${day}T18:00:00.000Z`, "HQ", "work")],
388
+ });
389
+
390
+ const section = await briefingLocationSection(root, new Date().toISOString(), locationConfig());
391
+ assert.ok(section);
392
+ assert.ok(!/\d+\.\d{3,}/.test(section), `no coordinate-like numbers: ${section}`);
393
+ assert.ok(!section.includes("startUtc") && !section.includes("observationCount"), "no raw record fields");
394
+
395
+ const storage = new StorageManager(root);
396
+ await storage.writeMemory("fact", "Privacy probe fact.", { source: "test" });
397
+ const coordinator = opsCoordinator(storage, { location: locationConfig() });
398
+ const gathered = await coordinator.gatherTodayFacts(undefined, {
399
+ now: new Date(),
400
+ timeZone: "UTC",
401
+ includeLocation: true,
402
+ });
403
+ assert.ok(!gathered.includes("60.1699") && !gathered.includes("24.9384"), "no coordinates in day-summary input");
404
+ assert.ok(!gathered.includes("latitude") && !gathered.includes("longitude"), "no coordinate field names");
405
+ } finally {
406
+ rmSync(root, { recursive: true, force: true });
407
+ }
408
+ });
@@ -275,3 +275,61 @@ export async function renderDayLocationContext(
275
275
  });
276
276
  return `## Location context\n\n${lines.join("\n")}`;
277
277
  }
278
+
279
+ /**
280
+ * Location context for a briefing (issue #2925): the place names of the
281
+ * local day containing the briefing window's start, bucketed in the
282
+ * location config's own timezone (the store's bucketing zone). Opt-in and
283
+ * labels-only — the caller decides whether to include it.
284
+ */
285
+ export async function briefingLocationSection(
286
+ memoryDir: string,
287
+ windowStartUtc: string,
288
+ config: LocationConfig,
289
+ ): Promise<string | null> {
290
+ return renderDayLocationContext(
291
+ memoryDir,
292
+ localDayKey(windowStartUtc, config.timezone),
293
+ config,
294
+ );
295
+ }
296
+
297
+ export async function applyBriefingLocationContext<
298
+ T extends { markdown: string; json: Record<string, unknown> },
299
+ >(
300
+ result: T,
301
+ includeLocation: boolean | undefined,
302
+ memoryDir: string,
303
+ windowStartUtc: string,
304
+ location: LocationConfig,
305
+ ): Promise<T> {
306
+ if (includeLocation !== true || !locationTaggingEnabled(location)) return result;
307
+ const section = await briefingLocationSection(memoryDir, windowStartUtc, location);
308
+ if (!section) return result;
309
+ return {
310
+ ...result,
311
+ markdown: `${result.markdown}\n\n${section}\n`,
312
+ json: { ...result.json, locationContext: section },
313
+ };
314
+ }
315
+
316
+ /**
317
+ * Opt-in matched-place-name context (issue #2925), shared by the access
318
+ * request surfaces (day summary and briefing). Absent or false keeps the
319
+ * output byte-identical.
320
+ */
321
+ export interface LocationContextRequestOptions {
322
+ /** Opt-in matched-place-name context appended to the summary or briefing output. */
323
+ includeLocation?: boolean;
324
+ }
325
+
326
+ /**
327
+ * Auto-gather options for the day summary (issue #2925): the caller's
328
+ * timezone plus the strictly-opt-in location flag. Only the literal
329
+ * `true` opts in, matching the transport schemas' boolean contract.
330
+ */
331
+ export function daySummaryAutoOptions(
332
+ request: LocationContextRequestOptions & { timeZone?: string },
333
+ ): { timeZone?: string; includeLocation: boolean } {
334
+ return { timeZone: request.timeZone, includeLocation: request.includeLocation === true };
335
+ }
@@ -2,6 +2,7 @@ import assert from "node:assert/strict";
2
2
  import { test } from "node:test";
3
3
 
4
4
  import { DEFAULT_MEETING_APP_PATTERNS } from "./detect.js";
5
+ import { parseConfig } from "../config.js";
5
6
  import { DEFAULT_MEETINGS_CONFIG, parseMeetingsConfig } from "./config.js";
6
7
 
7
8
  test("absent config is the disabled default with shipped app patterns", () => {
@@ -70,3 +71,60 @@ test("finding 5 — inverted trust thresholds (autoApprove < review) are rejecte
70
71
  // still caught (the override interacts with the default).
71
72
  assert.throws(() => parseMeetingsConfig({ autoApproveTrust: 0.3 }), /must be >= meetings\.reviewTrust/);
72
73
  });
74
+
75
+ test("fully-specified valid config round-trips unchanged through the canonical parser (#2936)", () => {
76
+ const full = {
77
+ enabled: true,
78
+ appPatterns: ["CustomConf App"],
79
+ minOverlapMinutes: 5,
80
+ audioOnlyMinMinutes: 30,
81
+ mergeGapMinutes: 7,
82
+ contextDwellSeconds: 60,
83
+ maxContextChars: 12_000,
84
+ summaryMode: "review",
85
+ sourceTrust: 0.9,
86
+ autoApproveTrust: 0.8,
87
+ reviewTrust: 0.6,
88
+ };
89
+ const cfg = parseMeetingsConfig(full);
90
+ // Every knob must come back exactly as supplied — no re-normalization,
91
+ // no silent defaulting of valid values.
92
+ assert.equal(cfg.enabled, true);
93
+ assert.deepEqual(cfg.appPatterns, [...DEFAULT_MEETING_APP_PATTERNS, "CustomConf App"]);
94
+ assert.equal(cfg.minOverlapMinutes, 5);
95
+ assert.equal(cfg.audioOnlyMinMinutes, 30);
96
+ assert.equal(cfg.mergeGapMinutes, 7);
97
+ assert.equal(cfg.contextDwellSeconds, 60);
98
+ assert.equal(cfg.maxContextChars, 12_000);
99
+ assert.equal(cfg.summaryMode, "review");
100
+ assert.equal(cfg.sourceTrust, 0.9);
101
+ assert.equal(cfg.autoApproveTrust, 0.8);
102
+ assert.equal(cfg.reviewTrust, 0.6);
103
+ });
104
+
105
+ test("parseConfig routes meetings through exactly one canonical path — no silent aliases (#2936)", () => {
106
+ const full = {
107
+ enabled: true,
108
+ minOverlapMinutes: 9,
109
+ summaryMode: "off",
110
+ sourceTrust: 0.5,
111
+ autoApproveTrust: 0.5,
112
+ reviewTrust: 0.5,
113
+ };
114
+
115
+ // The one canonical entrypoint: a top-level `meetings` block.
116
+ const viaRoot = parseConfig({ meetings: full }).meetings;
117
+ assert.deepEqual(viaRoot, parseMeetingsConfig(full));
118
+
119
+ // No legacy-alias shapes feed the meetings block: anything other than the
120
+ // top-level `meetings` key must leave the subsystem at its defaults. A new
121
+ // alias would be a second parsed surface for the same runtime keys and
122
+ // must not land silently (it would also need schema + docs + snapshot
123
+ // updates and would flip this assertion).
124
+ const viaAliasShapes = parseConfig({
125
+ meeting: full,
126
+ desktopCapture: { meetings: full },
127
+ captureCompanions: { meetings: full },
128
+ }).meetings;
129
+ assert.deepEqual(viaAliasShapes, parseMeetingsConfig(undefined));
130
+ });
@@ -2545,7 +2545,7 @@ export class ExtractionPersistCoordinator {
2545
2545
  const semanticMerge = await applySemanticMergeAtPersist(this.deps, {
2546
2546
  storage: targetStorage, content: fact.content, category: writeCategory, sources: fact.sources, sourceConnector: extractionSourceConnector,
2547
2547
  incomingMetadata: { tags: [...fact.tags, ...injectionScreenTags], entityRef: fact.entityRef, structuredAttributes: fact.structuredAttributes, validAt: biTemporal ? biTemporal.validFrom : sourceContext?.validAt, biTemporal: biTemporal !== undefined, importanceScore: importance.score, confidence: fact.confidence, provenanceStrength: fact.provenance, toolScoped: factToolScoped, subject: factSubject, origin, faithfulness: faithfulnessFm, memoryKind }, skip: contradictionDetected || faithfulnessEnforceStatus === "pending_review" || batchBackendUnavailable || novelty.decision === "add",
2548
- incomingLinks: links.length > 0 ? links : undefined, incomingCitedContent: citedFactContent,
2548
+ incomingLinks: links.length > 0 ? links : undefined, incomingCitedContent: citedFactContent, incomingCitationContext: citationContextBase,
2549
2549
  targetHasPromotedCopies: (targetId) => promotedCopyProbe.check(targetStorage, targetId),
2550
2550
  });
2551
2551
  if (semanticMerge.action === "created" && semanticMerge.reason === "backend_unavailable") batchBackendUnavailable = true; // arms the batch short circuit for the remaining facts
@@ -325,6 +325,8 @@ export const DEFAULT_QMD_STARTUP_COLLECTION_CHECK_TIMEOUT_MS = 10_000;
325
325
  export type DaySummaryGatherOptions = {
326
326
  timeZone?: string;
327
327
  now?: Date;
328
+ /** Opt-in location context (issue #2925); false/absent keeps output byte-identical. */
329
+ includeLocation?: boolean;
328
330
  };
329
331
 
330
332
  export function normalizeIanaTimeZone(value: unknown): string | undefined {
@@ -20,7 +20,9 @@ import { ProfilingCollector } from "../profiling.js";
20
20
  import { trustResultFor, type TrustStageResultItem } from "../trust-score-stage.js";
21
21
  import type { RecallResultFormatter } from "./recall-result-formatter.js";
22
22
  import type { IdentityInjectionMode, PluginConfig, QmdSearchResult } from "../types.js";
23
- import { applyRecallStateViews } from "../recall-state-view-wire.js";
23
+ import { stateViewPacketActive } from "../recall-state-view-anchors.js";
24
+ import { resultStateViewKey, stateViewPacketKeys } from "../recall-state-view.js";
25
+ import { applyRecallStateViews } from "../recall-state-view-wire.js";
24
26
 
25
27
  export interface RecallEntryDeps {
26
28
  appendRecallSection(
@@ -300,6 +302,15 @@ export class RecallEntryCoordinator {
300
302
  );
301
303
  if (injectable.length === 0) return;
302
304
 
305
+ // #2928 — packet-atomic final budgeting: under packet semantics (state
306
+ // view active, no historical asOf pin) rows of one supersession packet
307
+ // share their canonical packet root key, so the section coordinator's
308
+ // character/token cap admits or drops the packet as a unit.
309
+ const packetKeys =
310
+ stateViewPacketActive(options.stateViewActive === true, options.asOfMs)
311
+ ? stateViewPacketKeys(injectable)
312
+ : [];
313
+
303
314
  const formatted = this.deps.recallResultFormatter.formatQmdResultEntries(
304
315
  options.title,
305
316
  injectable,
@@ -324,6 +335,9 @@ export class RecallEntryCoordinator {
324
335
  ...(memoryId ? { memoryId } : {}),
325
336
  ...(result.path ? { memoryPath: result.path } : {}),
326
337
  ...(result.namespace ? { memoryNamespace: result.namespace } : {}),
338
+ ...(packetKeys[index] && resultStateViewKey(result)
339
+ ? { packetKey: packetKeys[index] }
340
+ : {}),
327
341
  },
328
342
  );
329
343
  }
@@ -5043,6 +5043,7 @@ export class RecallInternalCoordinator {
5043
5043
  // Build a path → QmdSearchResult index so we can pull per-result
5044
5044
  // explain data (e.g. reinforcementBoost) from the result that
5045
5045
  // boostSearchResults annotated before surfacing to xray.
5046
+ // #1952: label the captured branch through the same inject-seam annotator.
5046
5047
  const xrayResultByPath = indexStateViewAnnotatedResults(
5047
5048
  xrayRecalledResults, retrievalQuery, this.deps.config, stateViewActive, asOfMs,
5048
5049
  );