@remnic/core 9.69.32 → 9.69.34

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 (775) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -11
  2. package/dist/access-admin-ops-surface.js +64 -59
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +65 -60
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +64 -59
  7. package/dist/access-cli.js +140 -136
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-coding-context-resolution.js +3 -3
  11. package/dist/access-extraction-force-flush.d.ts +13 -11
  12. package/dist/access-extraction-force-flush.js +64 -59
  13. package/dist/access-health-types.d.ts +2 -1
  14. package/dist/access-http-briefing.d.ts +13 -11
  15. package/dist/access-http-briefing.js +65 -60
  16. package/dist/access-http-lcm-compaction.d.ts +13 -11
  17. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  18. package/dist/access-http-offline-stream.d.ts +13 -11
  19. package/dist/access-http-query.d.ts +3 -2
  20. package/dist/access-http-query.js +66 -61
  21. package/dist/access-http.d.ts +14 -12
  22. package/dist/access-http.js +86 -82
  23. package/dist/access-identity-continuity-surface.d.ts +11 -9
  24. package/dist/access-identity-continuity-surface.js +64 -59
  25. package/dist/access-lcm-surface.d.ts +13 -11
  26. package/dist/access-lcm-surface.js +64 -59
  27. package/dist/access-mcp.d.ts +13 -11
  28. package/dist/access-mcp.js +73 -69
  29. package/dist/access-memory-search-fanout.d.ts +3 -2
  30. package/dist/{access-namespace-preflight-BsvmyENS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -3
  32. package/dist/access-namespace-preflight.js +64 -59
  33. package/dist/access-observe-transcript.d.ts +11 -9
  34. package/dist/access-observe-transcript.js +3 -3
  35. package/dist/access-observe-write-surface.d.ts +15 -13
  36. package/dist/access-observe-write-surface.js +64 -59
  37. package/dist/access-offline-manifest.d.ts +47 -11
  38. package/dist/access-offline-manifest.js +18 -16
  39. package/dist/access-operations-batch.js +67 -63
  40. package/dist/access-operations.d.ts +18 -16
  41. package/dist/access-operations.js +72 -68
  42. package/dist/access-recall-concurrency.d.ts +13 -11
  43. package/dist/access-recall-concurrency.js +64 -59
  44. package/dist/access-recall-response.d.ts +13 -11
  45. package/dist/access-recall-response.js +64 -59
  46. package/dist/access-recall-surface.d.ts +13 -11
  47. package/dist/access-recall-surface.js +64 -59
  48. package/dist/access-schema.d.ts +138 -96
  49. package/dist/access-schema.js +15 -1
  50. package/dist/{access-service-CCpOuS46.d.ts → access-service-WUm2LnXZ.d.ts} +110 -108
  51. package/dist/access-service-helpers.d.ts +13 -11
  52. package/dist/access-service.d.ts +13 -11
  53. package/dist/access-service.js +64 -59
  54. package/dist/access-surface-catalog.d.ts +13 -11
  55. package/dist/access-surface-catalog.js +66 -61
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +2 -2
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +14 -12
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +56 -0
  65. package/dist/activity/digest.js +32 -0
  66. package/dist/adapters/index.d.ts +46 -1
  67. package/dist/adapters/index.js +13 -9
  68. package/dist/adapters/registry.js +3 -3
  69. package/dist/ambient-provenance.d.ts +2 -1
  70. package/dist/artifact-search.d.ts +2 -1
  71. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  72. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  73. package/dist/behavior-learner.d.ts +2 -1
  74. package/dist/behavior-signals.d.ts +2 -1
  75. package/dist/bootstrap.d.ts +11 -9
  76. package/dist/briefing-window.d.ts +3 -2
  77. package/dist/briefing.d.ts +3 -2
  78. package/dist/briefing.js +28 -27
  79. package/dist/buffer-surprise-report.d.ts +2 -1
  80. package/dist/buffer-turn-helpers.d.ts +2 -1
  81. package/dist/buffer.d.ts +3 -2
  82. package/dist/buffer.js +12 -11
  83. package/dist/bulk-import/index.d.ts +4 -3
  84. package/dist/calibration.d.ts +2 -1
  85. package/dist/calibration.js +3 -2
  86. package/dist/calibration.js.map +1 -1
  87. package/dist/capabilities.d.ts +2 -1
  88. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  89. package/dist/{catalog-CDZLyiXL.d.ts → catalog-BaCx29iv.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +2 -1
  91. package/dist/causal-consolidation.d.ts +2 -1
  92. package/dist/causal-consolidation.js +29 -28
  93. package/dist/causal-consolidation.js.map +1 -1
  94. package/dist/causal-trajectory-graph.d.ts +2 -1
  95. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  96. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  97. package/dist/chunk-255PC37A.js.map +1 -0
  98. package/dist/{chunk-IY2FVXM6.js → chunk-2AU4D4HQ.js} +3 -3
  99. package/dist/{chunk-QDY6KYTN.js → chunk-2JCA2PQT.js} +3 -3
  100. package/dist/{chunk-RSVEP77Y.js → chunk-2UZ5ZH6W.js} +3 -3
  101. package/dist/{chunk-XQ2Q43XD.js → chunk-326KUXIR.js} +15 -648
  102. package/dist/chunk-326KUXIR.js.map +1 -0
  103. package/dist/{chunk-NWWXSJX5.js → chunk-34QW2LK2.js} +2 -2
  104. package/dist/{chunk-S7DPKM5W.js → chunk-353C5UNV.js} +1 -1
  105. package/dist/{chunk-GQOMZ3MK.js → chunk-36UBSLFN.js} +2 -2
  106. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  107. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  108. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  109. package/dist/{chunk-7VJXIDOC.js → chunk-4JVQRFZD.js} +9 -9
  110. package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
  111. package/dist/chunk-4MIS4CQW.js.map +1 -0
  112. package/dist/{chunk-WHBVXTUI.js → chunk-4PB2MBY6.js} +9 -9
  113. package/dist/{chunk-TEYN7ZYF.js → chunk-4WCNPQQ5.js} +4 -4
  114. package/dist/{chunk-Z4PCVRTN.js → chunk-5A7ZUOBA.js} +217 -396
  115. package/dist/chunk-5A7ZUOBA.js.map +1 -0
  116. package/dist/chunk-5HYUUFMQ.js +1280 -0
  117. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  118. package/dist/{chunk-RBGREYVJ.js → chunk-5QBDLMGG.js} +2 -2
  119. package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
  120. package/dist/{chunk-LPECRQO4.js → chunk-5THU7NFP.js} +3 -3
  121. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  122. package/dist/chunk-65RENJGB.js.map +1 -0
  123. package/dist/{chunk-LWA7MDVO.js → chunk-6CCRSQWT.js} +2 -2
  124. package/dist/{chunk-TIT2C6WX.js → chunk-6XYC7NM4.js} +2 -2
  125. package/dist/{chunk-FHQSPTPZ.js → chunk-6YAIN5XJ.js} +2 -2
  126. package/dist/{chunk-PV36INNL.js → chunk-757NP436.js} +3 -3
  127. package/dist/{chunk-WJBZMNNS.js → chunk-7CAY3YKP.js} +742 -29
  128. package/dist/chunk-7CAY3YKP.js.map +1 -0
  129. package/dist/{chunk-6H5JYDOM.js → chunk-7J2CGXG3.js} +2 -2
  130. package/dist/{chunk-FBMYGNOC.js → chunk-A2YQL2FF.js} +6 -6
  131. package/dist/chunk-A5UQ52YQ.js +211 -0
  132. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  133. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  134. package/dist/{chunk-MPYD657E.js → chunk-A7WOWDZK.js} +2 -2
  135. package/dist/{chunk-C4OTC6WY.js → chunk-AIKTQVV3.js} +3 -3
  136. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  137. package/dist/{chunk-VP67GZ7T.js → chunk-APFKZVJS.js} +2 -2
  138. package/dist/{chunk-M75RYSHS.js → chunk-AQIRQUCP.js} +2 -2
  139. package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
  140. package/dist/{chunk-PSPABFN2.js → chunk-BD7JTBYP.js} +4 -4
  141. package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
  142. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  143. package/dist/chunk-BRZWWUCJ.js +13 -0
  144. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  145. package/dist/{chunk-MFJBANPX.js → chunk-C2BFTYD7.js} +2 -2
  146. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  147. package/dist/{chunk-Q3O3VKRB.js → chunk-CRUFVJOX.js} +16 -15
  148. package/dist/chunk-CRUFVJOX.js.map +1 -0
  149. package/dist/{chunk-AOCP6JA7.js → chunk-D3IZCN5P.js} +4 -4
  150. package/dist/{chunk-ROKKIMON.js → chunk-EJIEQOPB.js} +5 -5
  151. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  152. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  153. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  154. package/dist/{chunk-ROGRI25A.js → chunk-I3H5LFOI.js} +2 -2
  155. package/dist/{chunk-S65WXHNK.js → chunk-IFFLUCCU.js} +2 -2
  156. package/dist/{chunk-MYMNC6O5.js → chunk-ISYZ5DUI.js} +64 -60
  157. package/dist/{chunk-MYMNC6O5.js.map → chunk-ISYZ5DUI.js.map} +1 -1
  158. package/dist/{chunk-D5LORF7A.js → chunk-JZDH2ZZK.js} +3 -3
  159. package/dist/{chunk-2GPE5UCR.js → chunk-K6IPSW5B.js} +2 -2
  160. package/dist/{chunk-HG6HXVHQ.js → chunk-KDJHLOZP.js} +10 -10
  161. package/dist/{chunk-I27RSQRR.js → chunk-KYGOQV37.js} +2 -2
  162. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  163. package/dist/chunk-L2QLDZJC.js.map +1 -0
  164. package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
  165. package/dist/chunk-LAVJC57X.js.map +1 -0
  166. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  167. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  168. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  169. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  170. package/dist/{chunk-DITMGZOL.js → chunk-MMG5K6XJ.js} +2 -2
  171. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  172. package/dist/{chunk-CZYYJZB6.js → chunk-ND2O2PVN.js} +1014 -1318
  173. package/dist/chunk-ND2O2PVN.js.map +1 -0
  174. package/dist/chunk-NPNSKE76.js +220 -0
  175. package/dist/chunk-NPNSKE76.js.map +1 -0
  176. package/dist/{chunk-MKWKYHXJ.js → chunk-OB3XMWX5.js} +4 -4
  177. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  178. package/dist/{chunk-GTWHVXPA.js → chunk-OZUXKUPD.js} +6 -4
  179. package/dist/{chunk-GTWHVXPA.js.map → chunk-OZUXKUPD.js.map} +1 -1
  180. package/dist/chunk-PCEYGOSL.js +66 -0
  181. package/dist/chunk-PCEYGOSL.js.map +1 -0
  182. package/dist/{chunk-47DEYNMR.js → chunk-PEXW2JCK.js} +2 -2
  183. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  184. package/dist/chunk-PWPIERBM.js.map +1 -0
  185. package/dist/chunk-Q4AUIFUA.js +111 -0
  186. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  187. package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
  188. package/dist/chunk-Q6LCCIZN.js.map +1 -0
  189. package/dist/{chunk-42SDNZCU.js → chunk-QF4J3KMV.js} +19 -19
  190. package/dist/{chunk-SB6PSOP7.js → chunk-QLJ6762U.js} +2 -2
  191. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  192. package/dist/{chunk-PHNAB54Q.js → chunk-RQO3J4MR.js} +2 -2
  193. package/dist/{chunk-5N53UBH2.js → chunk-RR7G2X7C.js} +5 -5
  194. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  195. package/dist/{chunk-GY5WZBA6.js → chunk-S76KRJDG.js} +3 -3
  196. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  197. package/dist/chunk-SHEHQBCG.js.map +1 -0
  198. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  199. package/dist/{chunk-SQJ3SDIW.js → chunk-SZWEDG3H.js} +13 -7
  200. package/dist/chunk-SZWEDG3H.js.map +1 -0
  201. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  202. package/dist/{chunk-QMGXMJ2O.js → chunk-T2YFZ27G.js} +9 -9
  203. package/dist/{chunk-LEPOP46W.js → chunk-TFA6HPOA.js} +4 -4
  204. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  205. package/dist/chunk-TLHNF6GA.js +647 -0
  206. package/dist/chunk-TLHNF6GA.js.map +1 -0
  207. package/dist/{chunk-ZNJSBIP4.js → chunk-TNSCIPBQ.js} +4 -4
  208. package/dist/{chunk-YUMDFDUA.js → chunk-TWYTGIBR.js} +4 -4
  209. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  210. package/dist/chunk-UBG4GAEP.js.map +1 -0
  211. package/dist/{chunk-EZZV7OQL.js → chunk-UEZKN6VR.js} +2 -2
  212. package/dist/{chunk-HY55QQD7.js → chunk-UJX4I26O.js} +2 -2
  213. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  214. package/dist/chunk-VELCIWJZ.js.map +1 -0
  215. package/dist/{chunk-CBCNKKZD.js → chunk-VIZR45AN.js} +2 -2
  216. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  217. package/dist/{chunk-ITPS5DDH.js → chunk-W5BLTZZJ.js} +8 -8
  218. package/dist/chunk-W6IJMWTZ.js +72 -0
  219. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  220. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  221. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  222. package/dist/{chunk-FGGYSN4P.js → chunk-X424T5JQ.js} +2 -2
  223. package/dist/{chunk-NAXDPKVM.js → chunk-XPJNT6PI.js} +4 -4
  224. package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
  225. package/dist/chunk-XQU3CPF2.js.map +1 -0
  226. package/dist/chunk-XW2T4QAW.js +1 -0
  227. package/dist/{chunk-VED2YHUD.js → chunk-YEDVOYL2.js} +2 -2
  228. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  229. package/dist/chunk-YEN4TREG.js.map +1 -0
  230. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  231. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  232. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  233. package/dist/{chunk-565C6ZFO.js → chunk-Z7YDVHDI.js} +2 -2
  234. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  235. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  236. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  237. package/dist/{chunk-GVG3JYBI.js → chunk-ZMKYCFJ7.js} +640 -199
  238. package/dist/chunk-ZMKYCFJ7.js.map +1 -0
  239. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  240. package/dist/{cli-NEEdq5Rt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
  241. package/dist/cli-fallback.d.ts +11 -4
  242. package/dist/cli-fallback.js +5 -1
  243. package/dist/cli.d.ts +15 -13
  244. package/dist/cli.js +110 -106
  245. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  246. package/dist/coding/export-okf-codegraph.js +34 -32
  247. package/dist/coding/export-okf-codegraph.js.map +1 -1
  248. package/dist/coding/pre-action-gate.d.ts +2 -1
  249. package/dist/compat/checks.js +2 -2
  250. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  251. package/dist/compat/codex-cli-fallback.js +5 -1
  252. package/dist/compat/codex-cli-fallback.js.map +1 -1
  253. package/dist/compounding/engine.d.ts +3 -2
  254. package/dist/compounding/engine.js +29 -28
  255. package/dist/compounding/preference-consolidator.d.ts +2 -1
  256. package/dist/compression-optimizer.d.ts +2 -1
  257. package/dist/config.d.ts +2 -1
  258. package/dist/config.js +14 -12
  259. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  260. package/dist/connectors/codex-materialize-runner.js +28 -27
  261. package/dist/connectors/codex-materialize.d.ts +2 -1
  262. package/dist/connectors/index.d.ts +2 -1
  263. package/dist/connectors/index.js +30 -29
  264. package/dist/consolidation-provenance-check.d.ts +3 -2
  265. package/dist/consolidation-undo.d.ts +3 -2
  266. package/dist/contradiction/index.d.ts +4 -3
  267. package/dist/contradiction/index.js +5 -5
  268. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  269. package/dist/converge-config.d.ts +2 -1
  270. package/dist/convergence-refresh.d.ts +3 -2
  271. package/dist/convergence-refresh.js +30 -29
  272. package/dist/conversation-index/backend.d.ts +2 -1
  273. package/dist/conversation-index/backend.js +3 -3
  274. package/dist/conversation-index/chunker.d.ts +2 -1
  275. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  276. package/dist/conversation-index/faiss-adapter.js +2 -2
  277. package/dist/conversation-index/indexer.d.ts +2 -1
  278. package/dist/conversation-index/search.d.ts +2 -1
  279. package/dist/corpus-watermark.d.ts +2 -1
  280. package/dist/corpus-watermark.js +31 -30
  281. package/dist/cross-lingual-recall.d.ts +2 -1
  282. package/dist/day-summary.d.ts +2 -1
  283. package/dist/deep-recall-http-glue.d.ts +13 -11
  284. package/dist/deep-recall-http-glue.js +12 -2
  285. package/dist/deep-recall-mcp-tools.d.ts +13 -11
  286. package/dist/deep-recall-policy-llm.d.ts +2 -1
  287. package/dist/deep-recall-policy-llm.js +4 -3
  288. package/dist/deep-recall-seeds.d.ts +2 -1
  289. package/dist/delinearize.d.ts +2 -1
  290. package/dist/dependency-propagation-config.d.ts +2 -1
  291. package/dist/{dependency-propagation-delivery-CQPCu0o5.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
  292. package/dist/direct-answer-wiring.d.ts +2 -1
  293. package/dist/direct-answer.d.ts +2 -1
  294. package/dist/embedding-fallback.d.ts +2 -1
  295. package/dist/enrichment/index.d.ts +2 -1
  296. package/dist/entity-origin-fields.d.ts +2 -1
  297. package/dist/entity-retrieval.d.ts +3 -2
  298. package/dist/entity-retrieval.js +28 -27
  299. package/dist/entity-schema.d.ts +2 -1
  300. package/dist/episodic-context.d.ts +2 -1
  301. package/dist/eval-trajectory-contracts.d.ts +2 -1
  302. package/dist/eval-trajectory-store.d.ts +2 -1
  303. package/dist/eval-trajectory.d.ts +2 -1
  304. package/dist/explicit-capture.d.ts +11 -9
  305. package/dist/explicit-capture.js +6 -6
  306. package/dist/external-wiki-access.d.ts +13 -11
  307. package/dist/external-wiki-access.js +65 -60
  308. package/dist/external-wiki-collection-registration.d.ts +2 -1
  309. package/dist/external-wiki-collection.d.ts +2 -1
  310. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  311. package/dist/extraction-error-classification.d.ts +2 -1
  312. package/dist/extraction-faithfulness.d.ts +2 -1
  313. package/dist/extraction-faithfulness.js +4 -3
  314. package/dist/extraction-judge-telemetry.d.ts +2 -1
  315. package/dist/extraction-judge-training.d.ts +2 -1
  316. package/dist/extraction-judge.d.ts +2 -1
  317. package/dist/extraction-judge.js +5 -4
  318. package/dist/extraction-liveness.d.ts +2 -1
  319. package/dist/extraction-normalization.d.ts +2 -1
  320. package/dist/extraction-prompt.d.ts +2 -1
  321. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  322. package/dist/extraction-source-grounding.d.ts +2 -1
  323. package/dist/extraction.d.ts +2 -1
  324. package/dist/extraction.js +40 -38
  325. package/dist/fallback-llm.d.ts +2 -1
  326. package/dist/fallback-llm.js +3 -2
  327. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  328. package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
  329. package/dist/graph-append-error.d.ts +2 -1
  330. package/dist/graph-dashboard-diff.d.ts +2 -1
  331. package/dist/graph-dashboard-key.d.ts +2 -1
  332. package/dist/graph-dashboard-parser.d.ts +2 -1
  333. package/dist/graph-edge-reinforcement.d.ts +2 -1
  334. package/dist/graph-jsonl.d.ts +2 -1
  335. package/dist/graph-path-reconstruction.d.ts +2 -1
  336. package/dist/graph-path-scoring.d.ts +2 -1
  337. package/dist/graph-snapshot.d.ts +2 -1
  338. package/dist/graph.d.ts +2 -1
  339. package/dist/harmonic-retrieval.js +2 -2
  340. package/dist/importance.d.ts +2 -1
  341. package/dist/importers/index.d.ts +2 -1
  342. package/dist/importers/test-utils.d.ts +2 -1
  343. package/dist/in-flight-reads.d.ts +2 -1
  344. package/dist/{index-C9VXenR8.d.ts → index-BNluTxBp.d.ts} +2 -2
  345. package/dist/index.d.ts +963 -945
  346. package/dist/index.js +323 -221
  347. package/dist/intent.d.ts +2 -1
  348. package/dist/lcm/engine.d.ts +2 -1
  349. package/dist/lcm/engine.js +2 -2
  350. package/dist/lcm/index.d.ts +2 -1
  351. package/dist/lcm/index.js +7 -7
  352. package/dist/lcm/tools.d.ts +2 -1
  353. package/dist/lifecycle.d.ts +2 -1
  354. package/dist/live-connectors-runner.d.ts +2 -1
  355. package/dist/local-llm.d.ts +4 -1
  356. package/dist/local-llm.js +2 -2
  357. package/dist/local-model-endpoint.d.ts +2 -1
  358. package/dist/location/index.d.ts +4 -3
  359. package/dist/location/index.js +33 -32
  360. package/dist/maintenance/memory-governance.d.ts +2 -1
  361. package/dist/maintenance/memory-governance.js +28 -27
  362. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  363. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -27
  364. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  365. package/dist/maintenance/rebuild-memory-projection.js +29 -28
  366. package/dist/{maintenance-C14sorKa.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
  367. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  368. package/dist/memory-action-policy.d.ts +2 -1
  369. package/dist/memory-cache.d.ts +2 -1
  370. package/dist/memory-controller.d.ts +2 -1
  371. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  372. package/dist/memory-projection-store.d.ts +2 -1
  373. package/dist/memory-provenance.d.ts +2 -1
  374. package/dist/memory-snapshot.d.ts +2 -1
  375. package/dist/memory-subject-cli.d.ts +13 -11
  376. package/dist/memory-subject.d.ts +13 -11
  377. package/dist/memory-worth-outcomes.d.ts +3 -2
  378. package/dist/migrate/from-engram.js +2 -2
  379. package/dist/models-json.d.ts +2 -1
  380. package/dist/namespaces/migrate.d.ts +4 -3
  381. package/dist/namespaces/migrate.js +29 -28
  382. package/dist/namespaces/principal.d.ts +2 -1
  383. package/dist/namespaces/search.d.ts +2 -1
  384. package/dist/namespaces/search.js +11 -11
  385. package/dist/namespaces/storage.d.ts +4 -3
  386. package/dist/namespaces/storage.js +28 -27
  387. package/dist/native-knowledge.d.ts +2 -1
  388. package/dist/network/tailscale.js +2 -2
  389. package/dist/offline-sync-impression-drain.d.ts +2 -1
  390. package/dist/offline-sync-impression-drain.js +6 -6
  391. package/dist/operator-doctor-corpus.d.ts +2 -1
  392. package/dist/operator-doctor-corpus.js +32 -31
  393. package/dist/operator-doctor-replica.d.ts +2 -1
  394. package/dist/operator-toolkit.d.ts +4 -3
  395. package/dist/operator-toolkit.js +48 -46
  396. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  397. package/dist/orchestration/maintenance.d.ts +5 -4
  398. package/dist/orchestration/maintenance.js +47 -42
  399. package/dist/{orchestrator-kqSzGv7e.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
  400. package/dist/orchestrator.d.ts +11 -9
  401. package/dist/orchestrator.js +144 -138
  402. package/dist/patterns-cli.d.ts +2 -1
  403. package/dist/{pipeline-DRUwHb1X.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
  404. package/dist/policy-runtime.d.ts +2 -1
  405. package/dist/proactive-contention.d.ts +2 -1
  406. package/dist/provenance.d.ts +2 -1
  407. package/dist/{public-http-CW3l0g3P.d.ts → public-http-L-IymRBN.d.ts} +1 -1
  408. package/dist/{qmd-BVWlg1YS.d.ts → qmd-Mj508lHA.d.ts} +1 -1
  409. package/dist/qmd-preflight.d.ts +3 -2
  410. package/dist/qmd-recall-cache.d.ts +2 -1
  411. package/dist/qmd.d.ts +3 -2
  412. package/dist/qmd.js +2 -2
  413. package/dist/recall-concurrency-config.d.ts +2 -1
  414. package/dist/recall-disclosure-escalation.d.ts +2 -1
  415. package/dist/recall-explain-renderer.d.ts +2 -1
  416. package/dist/recall-explain-renderer.js +3 -3
  417. package/dist/recall-memory-map.d.ts +2 -1
  418. package/dist/recall-navigate-access.d.ts +2 -1
  419. package/dist/recall-navigate-access.js +2 -2
  420. package/dist/recall-navigate-disclosure.d.ts +2 -1
  421. package/dist/recall-navigate-disclosure.js +1 -1
  422. package/dist/recall-navigate.d.ts +2 -1
  423. package/dist/recall-navigate.js +2 -2
  424. package/dist/recall-planner-llm.d.ts +2 -1
  425. package/dist/recall-planner-llm.js +3 -2
  426. package/dist/recall-planner-llm.js.map +1 -1
  427. package/dist/recall-state-view-admission.d.ts +56 -0
  428. package/dist/recall-state-view-admission.js +39 -0
  429. package/dist/recall-state-view-admission.js.map +1 -0
  430. package/dist/recall-state-view-inject.js +2 -2
  431. package/dist/recall-state-view-render.js +2 -2
  432. package/dist/recall-state-view-widen.d.ts +18 -1
  433. package/dist/recall-state-view-widen.js +2 -2
  434. package/dist/recall-state-view-wire.d.ts +1 -1
  435. package/dist/recall-state-view-wire.js +3 -3
  436. package/dist/recall-state-view.d.ts +1 -0
  437. package/dist/recall-state-view.js +1 -1
  438. package/dist/recall-state.d.ts +2 -1
  439. package/dist/recall-tag-filter.d.ts +2 -1
  440. package/dist/recall-timings.d.ts +2 -1
  441. package/dist/recall-xray-cli.d.ts +2 -1
  442. package/dist/recall-xray-cli.js +4 -4
  443. package/dist/recall-xray-renderer.d.ts +2 -1
  444. package/dist/recall-xray-renderer.js +3 -3
  445. package/dist/recall-xray.d.ts +9 -1
  446. package/dist/recall-xray.js +2 -2
  447. package/dist/reconcile/cursor.d.ts +11 -2
  448. package/dist/reconcile/cursor.js +6 -4
  449. package/dist/reconcile/cursor.js.map +1 -1
  450. package/dist/reconcile/manifest.d.ts +37 -2
  451. package/dist/reconcile/manifest.js +15 -5
  452. package/dist/reconcile/plan.d.ts +2 -1
  453. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  454. package/dist/replay/normalizers/claude.d.ts +2 -1
  455. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  456. package/dist/replay/normalizers/shared.d.ts +2 -1
  457. package/dist/replay/runner.d.ts +2 -1
  458. package/dist/replay/types.d.ts +2 -1
  459. package/dist/replica-divergence.d.ts +2 -1
  460. package/dist/replica-peers-config.d.ts +2 -1
  461. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  462. package/dist/resolution-OHJZG45O.js.map +1 -0
  463. package/dist/resolve-auth-token.d.ts +2 -1
  464. package/dist/resume-bundles.js +15 -13
  465. package/dist/retrieval-agents.d.ts +3 -2
  466. package/dist/retrieval-tiers.d.ts +2 -1
  467. package/dist/routing/engine.d.ts +2 -1
  468. package/dist/routing/store.d.ts +2 -1
  469. package/dist/runtime/child-process.d.ts +1 -1
  470. package/dist/runtime/child-process.js +1 -1
  471. package/dist/salvage-envelope.d.ts +2 -1
  472. package/dist/salvage-envelope.js +2 -2
  473. package/dist/schemas.d.ts +176 -176
  474. package/dist/{scope-profiles-Vl00B1KU.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
  475. package/dist/search/embed-helper.d.ts +2 -1
  476. package/dist/search/factory.d.ts +2 -1
  477. package/dist/search/factory.js +10 -10
  478. package/dist/search/index.d.ts +2 -1
  479. package/dist/search/index.js +14 -14
  480. package/dist/search/lancedb-backend.d.ts +2 -1
  481. package/dist/search/lancedb-backend.js +2 -2
  482. package/dist/search/meilisearch-backend.d.ts +2 -1
  483. package/dist/search/meilisearch-backend.js +2 -2
  484. package/dist/search/noop-backend.d.ts +2 -1
  485. package/dist/search/orama-backend.d.ts +2 -1
  486. package/dist/search/orama-backend.js +2 -2
  487. package/dist/search/port.d.ts +2 -1
  488. package/dist/search/remote-backend.d.ts +2 -1
  489. package/dist/{semantic-consolidation-BC9-GFuT.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
  490. package/dist/semantic-consolidation.d.ts +3 -2
  491. package/dist/semantic-consolidation.js +29 -28
  492. package/dist/semantic-rule-promotion.js +28 -27
  493. package/dist/semantic-rule-verifier.d.ts +2 -1
  494. package/dist/semantic-rule-verifier.js +28 -27
  495. package/dist/{service-BOy6dHfc.d.ts → service-ZQkJ52cz.d.ts} +2 -2
  496. package/dist/session-observer-bands.d.ts +2 -1
  497. package/dist/session-observer-state.d.ts +2 -1
  498. package/dist/shared-context/manager.d.ts +8 -7
  499. package/dist/signal.d.ts +2 -1
  500. package/dist/source-agent-qualifier.d.ts +2 -1
  501. package/dist/source-agent-qualifier.js +38 -36
  502. package/dist/standup/build.js +29 -28
  503. package/dist/{storage-BLJRnFi6.d.ts → storage-CU_hZUgP.d.ts} +67 -6
  504. package/dist/storage.d.ts +4 -3
  505. package/dist/storage.js +27 -26
  506. package/dist/subject-config.d.ts +2 -1
  507. package/dist/subject-config.js +2 -2
  508. package/dist/summarizer.d.ts +2 -1
  509. package/dist/summarizer.js +5 -5
  510. package/dist/summary-snapshot.d.ts +2 -1
  511. package/dist/support-passport/index.d.ts +49 -15
  512. package/dist/support-passport/index.js +72 -63
  513. package/dist/temporal-supersession.d.ts +3 -2
  514. package/dist/temporal-timeline-recall.d.ts +2 -1
  515. package/dist/temporal-validity.d.ts +2 -1
  516. package/dist/threading.d.ts +2 -1
  517. package/dist/tier-migration.d.ts +3 -2
  518. package/dist/tier-routing.d.ts +2 -1
  519. package/dist/tier-routing.js +2 -2
  520. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  521. package/dist/topics.d.ts +2 -1
  522. package/dist/transcript.d.ts +2 -1
  523. package/dist/transfer/capsule-import.js +1 -1
  524. package/dist/transfer/export-okf.d.ts +2 -1
  525. package/dist/transfer/export-okf.js +29 -28
  526. package/dist/transfer/types.d.ts +102 -102
  527. package/dist/trust-score-stage.d.ts +2 -1
  528. package/dist/trust-score.d.ts +2 -1
  529. package/dist/{types-YY-eKKU7.d.ts → types-BGxTvLBO.d.ts} +58 -13
  530. package/dist/types.d.ts +2 -1
  531. package/dist/types.js +1 -1
  532. package/dist/utility-runtime.d.ts +2 -1
  533. package/dist/verified-recall.js +28 -27
  534. package/dist/who-knows-cli.d.ts +13 -11
  535. package/dist/who-knows-cli.js +29 -28
  536. package/dist/who-knows.d.ts +13 -11
  537. package/dist/who-knows.js +28 -27
  538. package/dist/write-envelope.d.ts +4 -2
  539. package/dist/write-envelope.js +3 -1
  540. package/package.json +12 -2
  541. package/src/access-category-alias.test.ts +216 -0
  542. package/src/access-mcp.test.ts +73 -0
  543. package/src/access-mcp.ts +6 -6
  544. package/src/access-observe-write-surface.ts +19 -4
  545. package/src/access-offline-manifest.ts +297 -16
  546. package/src/access-recall-surface.ts +5 -5
  547. package/src/access-schema.ts +76 -7
  548. package/src/access-service.ts +11 -2
  549. package/src/activity/config.test.ts +124 -1
  550. package/src/activity/config.ts +150 -18
  551. package/src/activity/index.ts +3 -0
  552. package/src/activity/journal-extract-storage.test.ts +129 -0
  553. package/src/activity/journal-extract.test.ts +314 -0
  554. package/src/activity/journal-extract.ts +247 -0
  555. package/src/activity/journal-heading.test.ts +24 -1
  556. package/src/activity/journal-heading.ts +36 -0
  557. package/src/activity/journal-read.test.ts +242 -0
  558. package/src/activity/journal-read.ts +183 -0
  559. package/src/activity/journal-source.test.ts +15 -15
  560. package/src/activity/journal-source.ts +21 -14
  561. package/src/activity/journal-state.lock-worker.ts +30 -0
  562. package/src/activity/journal-state.test.ts +144 -0
  563. package/src/activity/journal-state.ts +107 -0
  564. package/src/activity/journal-strip.test.ts +106 -52
  565. package/src/activity/journal-strip.ts +35 -10
  566. package/src/activity/journal-vault-integration.test.ts +230 -0
  567. package/src/activity/journal-vault-provenance.test.ts +9 -7
  568. package/src/activity/journal-vault-provenance.ts +4 -10
  569. package/src/activity/journal-vault-read.test.ts +3 -2
  570. package/src/activity/journal-vault-read.ts +9 -139
  571. package/src/activity/journal.test.ts +74 -23
  572. package/src/activity/runner.test.ts +116 -1
  573. package/src/activity/runner.ts +25 -0
  574. package/src/activity/scheduler.ts +4 -0
  575. package/src/activity/store.test.ts +18 -0
  576. package/src/activity/store.ts +14 -0
  577. package/src/activity/sync-registration.ts +4 -0
  578. package/src/activity/timeline/analysis-metadata.ts +2 -0
  579. package/src/activity/timeline/analysis-provider.ts +140 -0
  580. package/src/activity/timeline/analysis-run.test.ts +419 -0
  581. package/src/activity/timeline/analysis-run.ts +106 -0
  582. package/src/activity/timeline/analysis.ts +66 -37
  583. package/src/activity/timeline/corrections.ts +9 -0
  584. package/src/activity/timeline/index.ts +3 -0
  585. package/src/activity/timeline/query.test.ts +71 -0
  586. package/src/activity/timeline/query.ts +57 -8
  587. package/src/activity/timeline/regenerate.test.ts +505 -0
  588. package/src/activity/timeline/regenerate.ts +373 -0
  589. package/src/activity/types.ts +40 -5
  590. package/src/adapters/grok-opencode.test.ts +146 -0
  591. package/src/adapters/grok.ts +53 -0
  592. package/src/adapters/index.ts +2 -0
  593. package/src/adapters/opencode.ts +52 -0
  594. package/src/adapters/registry.ts +4 -0
  595. package/src/cli-fallback.ts +13 -4
  596. package/src/config.test.ts +3 -1
  597. package/src/config.ts +4 -0
  598. package/src/dedup/merge.test.ts +732 -25
  599. package/src/fallback-llm.test.ts +53 -0
  600. package/src/fallback-llm.ts +12 -0
  601. package/src/index.ts +2 -0
  602. package/src/local-llm.ts +3 -1
  603. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  604. package/src/orchestration/extraction-persist-deps.ts +9 -0
  605. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  606. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  607. package/src/orchestration/extraction-persist.ts +3 -3
  608. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  609. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  610. package/src/orchestration/maintenance.ts +1 -0
  611. package/src/orchestration/orchestrator-helpers.ts +6 -0
  612. package/src/orchestration/recall-entry.ts +16 -0
  613. package/src/orchestration/recall-internal-deps.ts +14 -0
  614. package/src/orchestration/recall-internal.ts +41 -58
  615. package/src/orchestration/recall-result-formatter.ts +11 -1
  616. package/src/orchestration/recall-search-pipeline.ts +121 -11
  617. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  618. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  619. package/src/orchestration/semantic-merge-persist.ts +121 -16
  620. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  621. package/src/orchestrator.ts +7 -35
  622. package/src/providers/codex-subscription.test.ts +666 -0
  623. package/src/providers/codex-subscription.ts +743 -0
  624. package/src/recall-disclosure.test.ts +20 -0
  625. package/src/recall-state-view-admission.ts +114 -0
  626. package/src/recall-state-view-asof.test.ts +176 -0
  627. package/src/recall-state-view-call.test.ts +175 -0
  628. package/src/recall-state-view-config.test.ts +16 -0
  629. package/src/recall-state-view-widen.test.ts +70 -0
  630. package/src/recall-state-view-widen.ts +28 -7
  631. package/src/recall-state-view-wire.ts +3 -1
  632. package/src/recall-state-view-zero-diff.test.ts +20 -11
  633. package/src/recall-state-view.test.ts +142 -0
  634. package/src/recall-state-view.ts +72 -24
  635. package/src/recall-xray-renderer.test.ts +27 -0
  636. package/src/recall-xray-renderer.ts +4 -0
  637. package/src/recall-xray.ts +13 -0
  638. package/src/reconcile/cursor.ts +23 -33
  639. package/src/reconcile/manifest.ts +96 -11
  640. package/src/reconcile-identity-cache.test.ts +378 -0
  641. package/src/runtime/child-process.ts +1 -1
  642. package/src/storage/cas-revision-host.ts +75 -0
  643. package/src/storage/cas-revision-store.test.ts +459 -0
  644. package/src/storage/cas-revision-store.ts +661 -0
  645. package/src/storage/deletion-revision-store.ts +80 -6
  646. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  647. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  648. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  649. package/src/storage-contract/failure-semantics.test.ts +1 -1
  650. package/src/storage-frontmatter-cas.test.ts +698 -1
  651. package/src/storage-replay.test.ts +166 -3
  652. package/src/storage.ts +41 -41
  653. package/src/support-passport/card-projection.ts +82 -33
  654. package/src/temporal-supersession.test.ts +10 -10
  655. package/src/types.ts +7 -7
  656. package/src/write-envelope.ts +1 -1
  657. package/dist/chunk-22FVR2KE.js.map +0 -1
  658. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  659. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  660. package/dist/chunk-4UDQUPT5.js +0 -560
  661. package/dist/chunk-4UDQUPT5.js.map +0 -1
  662. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  663. package/dist/chunk-AU7Q3LSC.js +0 -56
  664. package/dist/chunk-AU7Q3LSC.js.map +0 -1
  665. package/dist/chunk-BLUYQFRH.js.map +0 -1
  666. package/dist/chunk-CZYYJZB6.js.map +0 -1
  667. package/dist/chunk-EEOUMG3J.js.map +0 -1
  668. package/dist/chunk-FDLDOEO6.js.map +0 -1
  669. package/dist/chunk-FYDW33ZB.js +0 -13
  670. package/dist/chunk-GVG3JYBI.js.map +0 -1
  671. package/dist/chunk-H272ZPQ3.js.map +0 -1
  672. package/dist/chunk-HVAEXYPL.js.map +0 -1
  673. package/dist/chunk-JEIXTYVG.js.map +0 -1
  674. package/dist/chunk-LRICZIGN.js +0 -52
  675. package/dist/chunk-LRICZIGN.js.map +0 -1
  676. package/dist/chunk-N7RWREIQ.js.map +0 -1
  677. package/dist/chunk-O75CRYGF.js.map +0 -1
  678. package/dist/chunk-Q3O3VKRB.js.map +0 -1
  679. package/dist/chunk-SEDEKFYQ.js +0 -1
  680. package/dist/chunk-SO7SV523.js.map +0 -1
  681. package/dist/chunk-SQJ3SDIW.js.map +0 -1
  682. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  683. package/dist/chunk-WJBZMNNS.js.map +0 -1
  684. package/dist/chunk-XQ2Q43XD.js.map +0 -1
  685. package/dist/chunk-Z4PCVRTN.js.map +0 -1
  686. package/src/activity/journal-mode.test.ts +0 -32
  687. package/src/activity/journal-mode.ts +0 -20
  688. /package/dist/{chunk-SEDEKFYQ.js.map → activity/digest.js.map} +0 -0
  689. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  690. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  691. /package/dist/{chunk-IY2FVXM6.js.map → chunk-2AU4D4HQ.js.map} +0 -0
  692. /package/dist/{chunk-QDY6KYTN.js.map → chunk-2JCA2PQT.js.map} +0 -0
  693. /package/dist/{chunk-RSVEP77Y.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
  694. /package/dist/{chunk-NWWXSJX5.js.map → chunk-34QW2LK2.js.map} +0 -0
  695. /package/dist/{chunk-S7DPKM5W.js.map → chunk-353C5UNV.js.map} +0 -0
  696. /package/dist/{chunk-GQOMZ3MK.js.map → chunk-36UBSLFN.js.map} +0 -0
  697. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  698. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  699. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  700. /package/dist/{chunk-7VJXIDOC.js.map → chunk-4JVQRFZD.js.map} +0 -0
  701. /package/dist/{chunk-WHBVXTUI.js.map → chunk-4PB2MBY6.js.map} +0 -0
  702. /package/dist/{chunk-TEYN7ZYF.js.map → chunk-4WCNPQQ5.js.map} +0 -0
  703. /package/dist/{chunk-RBGREYVJ.js.map → chunk-5QBDLMGG.js.map} +0 -0
  704. /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
  705. /package/dist/{chunk-LPECRQO4.js.map → chunk-5THU7NFP.js.map} +0 -0
  706. /package/dist/{chunk-LWA7MDVO.js.map → chunk-6CCRSQWT.js.map} +0 -0
  707. /package/dist/{chunk-TIT2C6WX.js.map → chunk-6XYC7NM4.js.map} +0 -0
  708. /package/dist/{chunk-FHQSPTPZ.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  709. /package/dist/{chunk-PV36INNL.js.map → chunk-757NP436.js.map} +0 -0
  710. /package/dist/{chunk-6H5JYDOM.js.map → chunk-7J2CGXG3.js.map} +0 -0
  711. /package/dist/{chunk-FBMYGNOC.js.map → chunk-A2YQL2FF.js.map} +0 -0
  712. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  713. /package/dist/{chunk-MPYD657E.js.map → chunk-A7WOWDZK.js.map} +0 -0
  714. /package/dist/{chunk-C4OTC6WY.js.map → chunk-AIKTQVV3.js.map} +0 -0
  715. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  716. /package/dist/{chunk-VP67GZ7T.js.map → chunk-APFKZVJS.js.map} +0 -0
  717. /package/dist/{chunk-M75RYSHS.js.map → chunk-AQIRQUCP.js.map} +0 -0
  718. /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
  719. /package/dist/{chunk-PSPABFN2.js.map → chunk-BD7JTBYP.js.map} +0 -0
  720. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
  721. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  722. /package/dist/{chunk-MFJBANPX.js.map → chunk-C2BFTYD7.js.map} +0 -0
  723. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  724. /package/dist/{chunk-AOCP6JA7.js.map → chunk-D3IZCN5P.js.map} +0 -0
  725. /package/dist/{chunk-ROKKIMON.js.map → chunk-EJIEQOPB.js.map} +0 -0
  726. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  727. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  728. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  729. /package/dist/{chunk-ROGRI25A.js.map → chunk-I3H5LFOI.js.map} +0 -0
  730. /package/dist/{chunk-S65WXHNK.js.map → chunk-IFFLUCCU.js.map} +0 -0
  731. /package/dist/{chunk-D5LORF7A.js.map → chunk-JZDH2ZZK.js.map} +0 -0
  732. /package/dist/{chunk-2GPE5UCR.js.map → chunk-K6IPSW5B.js.map} +0 -0
  733. /package/dist/{chunk-HG6HXVHQ.js.map → chunk-KDJHLOZP.js.map} +0 -0
  734. /package/dist/{chunk-I27RSQRR.js.map → chunk-KYGOQV37.js.map} +0 -0
  735. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  736. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  737. /package/dist/{chunk-DITMGZOL.js.map → chunk-MMG5K6XJ.js.map} +0 -0
  738. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  739. /package/dist/{chunk-MKWKYHXJ.js.map → chunk-OB3XMWX5.js.map} +0 -0
  740. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  741. /package/dist/{chunk-47DEYNMR.js.map → chunk-PEXW2JCK.js.map} +0 -0
  742. /package/dist/{chunk-42SDNZCU.js.map → chunk-QF4J3KMV.js.map} +0 -0
  743. /package/dist/{chunk-SB6PSOP7.js.map → chunk-QLJ6762U.js.map} +0 -0
  744. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  745. /package/dist/{chunk-PHNAB54Q.js.map → chunk-RQO3J4MR.js.map} +0 -0
  746. /package/dist/{chunk-5N53UBH2.js.map → chunk-RR7G2X7C.js.map} +0 -0
  747. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  748. /package/dist/{chunk-GY5WZBA6.js.map → chunk-S76KRJDG.js.map} +0 -0
  749. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  750. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  751. /package/dist/{chunk-QMGXMJ2O.js.map → chunk-T2YFZ27G.js.map} +0 -0
  752. /package/dist/{chunk-LEPOP46W.js.map → chunk-TFA6HPOA.js.map} +0 -0
  753. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  754. /package/dist/{chunk-ZNJSBIP4.js.map → chunk-TNSCIPBQ.js.map} +0 -0
  755. /package/dist/{chunk-YUMDFDUA.js.map → chunk-TWYTGIBR.js.map} +0 -0
  756. /package/dist/{chunk-EZZV7OQL.js.map → chunk-UEZKN6VR.js.map} +0 -0
  757. /package/dist/{chunk-HY55QQD7.js.map → chunk-UJX4I26O.js.map} +0 -0
  758. /package/dist/{chunk-CBCNKKZD.js.map → chunk-VIZR45AN.js.map} +0 -0
  759. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  760. /package/dist/{chunk-ITPS5DDH.js.map → chunk-W5BLTZZJ.js.map} +0 -0
  761. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  762. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  763. /package/dist/{chunk-FGGYSN4P.js.map → chunk-X424T5JQ.js.map} +0 -0
  764. /package/dist/{chunk-NAXDPKVM.js.map → chunk-XPJNT6PI.js.map} +0 -0
  765. /package/dist/{contradiction-scan-NOYMFG66.js.map → chunk-XW2T4QAW.js.map} +0 -0
  766. /package/dist/{chunk-VED2YHUD.js.map → chunk-YEDVOYL2.js.map} +0 -0
  767. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  768. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  769. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  770. /package/dist/{chunk-565C6ZFO.js.map → chunk-Z7YDVHDI.js.map} +0 -0
  771. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  772. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  773. /package/dist/{resolution-VKATP2HT.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  774. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  775. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/activity/journal-vault-prereq.ts","../src/activity/vault-path.ts","../src/activity/vault-region.ts","../src/activity/timeline/analysis-failure.ts","../src/activity/timeline/analysis-provider.ts","../src/activity/timeline/categories.ts","../src/activity/timeline/analysis.ts","../src/activity/timeline/analysis-metadata.ts","../src/activity/config.ts","../src/activity/journal-heading.ts","../src/activity/journal-source.ts"],"sourcesContent":["/**\n * Vault journal read-back prerequisites (issue #1987).\n *\n * Pure. `journal.source: \"vault\"` requires all three prerequisites; the\n * caller checks `source` first via the journal-source parser and calls this\n * only for vault mode. Reports EVERY unmet prerequisite at once so the user\n * gets one actionable error, not the first hit.\n */\n\nexport const VAULT_JOURNAL_PREREQUISITES = [\n \"vault.enabled\",\n \"vault.dailyNotePath\",\n \"vault.readback.journalSection\",\n] as const;\nexport type VaultJournalPrerequisite = (typeof VAULT_JOURNAL_PREREQUISITES)[number];\n\nexport type VaultJournalPrereqResult =\n | { ok: true }\n | { ok: false; missing: VaultJournalPrerequisite[]; message: string };\n\nexport function checkVaultJournalPrerequisites(input: {\n vaultEnabled?: unknown;\n dailyNotePath?: unknown;\n journalSection?: unknown;\n}): VaultJournalPrereqResult {\n const missing: VaultJournalPrerequisite[] = [];\n if (input.vaultEnabled !== true) missing.push(\"vault.enabled\");\n // Exact values are validated: trim() only detects blankness, never rewrites.\n if (typeof input.dailyNotePath !== \"string\" || input.dailyNotePath.trim().length === 0) {\n missing.push(\"vault.dailyNotePath\");\n }\n if (typeof input.journalSection !== \"string\" || input.journalSection.trim().length === 0) {\n missing.push(\"vault.readback.journalSection\");\n }\n if (missing.length === 0) return { ok: true };\n return {\n ok: false,\n missing,\n message: `vault journal read-back prerequisites unmet: ${missing.join(\", \")}`,\n };\n}\n","/**\n * Vault note path templates (issue #1985).\n *\n * Expands date tokens on a YYYY-MM-DD day. Returns a vault-relative path.\n * Rejects `..` segments, absolute templates, and unknown `{...}` tokens —\n * naming the token and the full valid set (never a silent pass-through).\n */\nimport path from \"node:path\";\n\nimport { assertValidTimezone, isValidActivityDate } from \"./digest.js\";\n\n/** Every token a vault template accepts (English names in v1). */\nexport const VAULT_TEMPLATE_TOKENS = [\n \"{yyyy}\",\n \"{yy}\",\n \"{M}\",\n \"{MM}\",\n \"{d}\",\n \"{dd}\",\n \"{ww}\",\n \"{MMM}\",\n \"{MMMM}\",\n \"{ddd}\",\n \"{dddd}\",\n] as const;\n\nexport type VaultTemplateToken = (typeof VAULT_TEMPLATE_TOKENS)[number];\n\nconst TOKEN_LOOKUP: Record<string, true> = Object.fromEntries(VAULT_TEMPLATE_TOKENS.map((t) => [t, true]));\n\nconst ANY_BRACED_RE = /\\{[^{}]*\\}/g;\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nconst WEEKDAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"] as const;\n\nfunction templateValues(date: string): Record<string, string> {\n const [yyyy, mm, dd] = date.split(\"-\");\n const monthIndex = Number(mm) - 1;\n const weekday = new Date(Date.UTC(Number(yyyy), monthIndex, Number(dd))).getUTCDay();\n return {\n \"{yyyy}\": yyyy,\n \"{yy}\": yyyy.slice(2),\n \"{MM}\": mm,\n \"{dd}\": dd,\n \"{M}\": String(Number(mm)),\n \"{d}\": String(Number(dd)),\n \"{ww}\": isoWeekNumber(date),\n \"{MMM}\": MONTH_NAMES[monthIndex]!.slice(0, 3),\n \"{MMMM}\": MONTH_NAMES[monthIndex]!,\n \"{ddd}\": WEEKDAY_NAMES[weekday]!.slice(0, 3),\n \"{dddd}\": WEEKDAY_NAMES[weekday]!,\n };\n}\n\n/**\n * Expand vault date tokens in any template text (a note path or a note\n * template body). Unknown `{...}` tokens are rejected naming the token and\n * the full valid set; an unreplaced token in a path would silently publish\n * to the wrong file.\n */\nexport function expandVaultTemplateTokens(text: string, date: string): string {\n if (!isValidActivityDate(date)) {\n throw new RangeError(`Invalid vault date \"${date}\"; expected YYYY-MM-DD.`);\n }\n if (typeof text !== \"string\" || text.length === 0) {\n throw new RangeError(\"Vault template must be a non-empty string.\");\n }\n const values = templateValues(date);\n return text.replace(ANY_BRACED_RE, (token) => {\n if (TOKEN_LOOKUP[token] === true) return values[token]!;\n throw new RangeError(\n `Unknown vault template token ${token}; valid tokens are ${VAULT_TEMPLATE_TOKENS.join(\" \")}.`,\n );\n });\n}\n\n/**\n * Validate a vault note path template without resolving it to a date:\n * token allow-list plus the relative/no-`..` shape checks shared with\n * `resolveVaultNotePath`.\n */\nexport function validateVaultNoteTemplate(template: string): void {\n if (typeof template !== \"string\" || template.length === 0) {\n throw new RangeError(\"Vault note path template must be a non-empty relative path.\");\n }\n if (path.posix.isAbsolute(template) || path.win32.isAbsolute(template)) {\n throw new RangeError(\"Vault note path template must be relative; absolute templates are rejected.\");\n }\n if (template.split(/[\\\\/]/).some((segment) => segment === \"..\")) {\n throw new RangeError(\"Vault note path template must not contain `..` segments.\");\n }\n expandVaultTemplateTokens(template, \"2026-01-04\");\n}\n\nexport function resolveVaultNotePath(\n template: string,\n date: string,\n options?: { timezone?: string },\n): string {\n if (!isValidActivityDate(date)) {\n throw new RangeError(`Invalid vault date \"${date}\"; expected YYYY-MM-DD.`);\n }\n if (options?.timezone !== undefined) {\n assertValidTimezone(options.timezone);\n }\n validateVaultNoteTemplate(template);\n\n const expanded = expandVaultTemplateTokens(template, date);\n if (path.posix.isAbsolute(expanded) || path.win32.isAbsolute(expanded)) {\n throw new RangeError(\"Vault note path template must be relative; absolute templates are rejected.\");\n }\n return expanded;\n}\n\nfunction isoWeekNumber(date: string): string {\n const [year, month, day] = date.split(\"-\").map(Number);\n const utc = new Date(Date.UTC(year, month - 1, day));\n const dayNum = utc.getUTCDay() || 7;\n utc.setUTCDate(utc.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(utc.getUTCFullYear(), 0, 1));\n const weekNo = Math.ceil(((utc.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n return String(weekNo).padStart(2, \"0\");\n}\n","/**\n * Validate a managed-region name for vault markers (issue #1985).\n *\n * Empty, whitespace-only, newline, and `-->` names are rejected so they\n * cannot break `<!-- remnic:<name>:start -->` markers. `:` is rejected\n * too: the marker grammar is colon-delimited, so a colon-bearing name\n * makes a marker line ambiguous (`remnic:A:B:start` reads as name `A:B`\n * or as name `A` with a `B:start` suffix) and a publisher that resolved\n * that ambiguity differently from the note's own markers would pair a\n * start with a later end and delete the user bytes in between.\n */\n\nexport type ValidateRegionNameResult =\n | { ok: true; name: string }\n | { ok: false; error: \"invalid_name\" };\n\nexport function validateRegionName(name: string): ValidateRegionNameResult {\n if (typeof name !== \"string\") {\n return { ok: false, error: \"invalid_name\" };\n }\n if (name.includes(\"\\n\") || name.includes(\"\\r\") || name.includes(\"-->\") || name.includes(\":\")) {\n return { ok: false, error: \"invalid_name\" };\n }\n const trimmed = name.trim();\n if (trimmed.length === 0) {\n return { ok: false, error: \"invalid_name\" };\n }\n return { ok: true, name: trimmed };\n}\n","/**\n * Typed failure classification for timeline analysis (issue #2050).\n *\n * Unknown kinds fail closed with a TypeError. Pure: no I/O, no clock, no randomness.\n */\n\nexport const ANALYSIS_FAILURE_KINDS = [\n \"provider_unavailable\",\n \"timeout\",\n \"aborted\",\n \"rate_limited\",\n \"malformed_json\",\n \"invalid_schema\",\n \"partial_output\",\n \"invalid_config\",\n] as const;\nexport type AnalysisFailureKind = (typeof ANALYSIS_FAILURE_KINDS)[number];\n\nexport interface AnalysisFailure {\n kind: AnalysisFailureKind;\n /** True only when retrying the same request could plausibly succeed. */\n retryable: boolean;\n /** True when the deterministic cards must be preserved unchanged. */\n preservesDeterministic: true;\n}\n\nconst RETRYABLE_BY_KIND: Readonly<Record<AnalysisFailureKind, boolean>> = {\n provider_unavailable: true,\n timeout: true,\n rate_limited: true,\n aborted: false,\n malformed_json: false,\n invalid_schema: false,\n partial_output: false,\n invalid_config: false,\n};\n\n/** True when the value is one of the known failure kinds. */\nexport function isAnalysisFailureKind(\n value: unknown,\n): value is AnalysisFailureKind {\n return (\n typeof value === \"string\" &&\n (ANALYSIS_FAILURE_KINDS as readonly string[]).includes(value)\n );\n}\n\n/** Classify a failure kind. Unknown kinds throw; there is no permissive default. */\nexport function classifyAnalysisFailure(kind: string): AnalysisFailure {\n if (!isAnalysisFailureKind(kind)) {\n throw new TypeError(\n `unknown analysis failure kind: ${String(kind)}; allowed kinds: ${ANALYSIS_FAILURE_KINDS.join(\", \")}`,\n );\n }\n return {\n kind,\n retryable: RETRYABLE_BY_KIND[kind],\n preservesDeterministic: true,\n };\n}\n","/**\n * Provider-neutral completion adapter for timeline analysis (issue #2050).\n *\n * Routes the analysis prompt through the existing LLM contracts — the local\n * client (`provider: \"local\"`) or the gateway fallback client pinned to the\n * ONE explicitly configured remote provider/model. An invalid or missing\n * explicit provider surfaces as a typed failure; there is no chain fallback,\n * so a bad config can never silently answer from a different provider.\n *\n * Structural seams (not concrete classes) so hosts and tests inject fakes.\n * Never logs prompt or response content.\n */\nimport type { AnalysisFailureKind } from \"./analysis-failure.js\";\nimport type { TimelineAnalysisComplete } from \"./analysis.js\";\n\n/** Structural slice of LocalLlmClient.chatCompletion (local seam). */\nexport interface TimelineAnalysisLocalLlm {\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\"; content: string }>,\n options: {\n temperature?: number;\n maxTokens?: number;\n responseFormat?: { type: string };\n signal?: AbortSignal;\n operation?: string;\n redactProviderErrors?: boolean;\n model?: string;\n },\n ): Promise<{ content: string } | null>;\n}\n\n/** Structural slice of FallbackLlmClient.chatCompletion (remote seam). */\nexport interface TimelineAnalysisRemoteLlm {\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n options: {\n temperature?: number;\n maxTokens?: number;\n signal?: AbortSignal;\n modelChain?: { primary?: string; fallbacks?: string[] };\n includeDefaultModelFallback?: boolean;\n redactProviderErrors?: boolean;\n },\n ): Promise<{ content: string } | null>;\n}\n\n/** Marker base for provider errors the analysis run classifies by kind. */\nexport class TimelineAnalysisProviderError extends Error {\n override readonly name = \"TimelineAnalysisProviderError\";\n constructor(\n readonly kind: AnalysisFailureKind,\n message: string,\n ) {\n super(message);\n }\n}\n\n/** The provider id that routes to the local LLM client. */\nexport const TIMELINE_ANALYSIS_LOCAL_PROVIDER_ID = \"local\";\n\nconst RATE_LIMIT_MESSAGE = /rate limit|too many requests/i;\n\n/**\n * Map a thrown provider error onto the typed failure kinds. Name- and\n * status-based only: the message is matched, never logged, so provider error\n * text cannot become a log line.\n */\nexport function classifyAnalysisProviderError(error: unknown): AnalysisFailureKind {\n if (error instanceof TimelineAnalysisProviderError) return error.kind;\n if (error instanceof Error) {\n if (error.name === \"AbortError\" || (\"code\" in error && error.code === \"ABORT_ERR\")) {\n return \"aborted\";\n }\n if (error.name === \"TimeoutError\") return \"timeout\";\n const status = \"status\" in error ? error.status : \"statusCode\" in error ? error.statusCode : undefined;\n if (status === 429 || RATE_LIMIT_MESSAGE.test(error.message)) return \"rate_limited\";\n }\n return \"provider_unavailable\";\n}\n\n/**\n * Build the `complete` function `analyzeTimelineCards` calls, from the local\n * and remote client seams. Selection is by the explicit provider id carried\n * on each call: `\"local\"` uses the local client; anything else is a remote\n * provider id pinned as the single-model chain (no default-chain fallback is\n * ever appended).\n */\nexport function timelineAnalysisCompleteFromClients(input: {\n localLlm: TimelineAnalysisLocalLlm | null;\n remoteLlm: TimelineAnalysisRemoteLlm | null;\n}): TimelineAnalysisComplete {\n const { localLlm, remoteLlm } = input;\n return async ({ prompt, provider, model, signal }) => {\n const messages = [{ role: \"user\" as const, content: prompt }];\n if (provider === TIMELINE_ANALYSIS_LOCAL_PROVIDER_ID) {\n if (!localLlm) {\n throw new TimelineAnalysisProviderError(\n \"provider_unavailable\",\n \"timeline analysis local provider is not configured\",\n );\n }\n const result = await localLlm.chatCompletion(messages, {\n temperature: 0,\n maxTokens: 2048,\n signal,\n operation: \"timeline-analysis\",\n redactProviderErrors: true,\n model,\n });\n if (result === null) {\n throw new TimelineAnalysisProviderError(\n \"provider_unavailable\",\n \"timeline analysis local provider returned no completion\",\n );\n }\n return result.content;\n }\n if (!remoteLlm) {\n throw new TimelineAnalysisProviderError(\n \"provider_unavailable\",\n \"timeline analysis remote provider is not configured\",\n );\n }\n const result = await remoteLlm.chatCompletion(messages, {\n temperature: 0,\n maxTokens: 2048,\n signal,\n modelChain: { primary: `${provider}/${model}` },\n includeDefaultModelFallback: false,\n redactProviderErrors: true,\n });\n if (result === null) {\n throw new TimelineAnalysisProviderError(\n \"provider_unavailable\",\n `timeline analysis provider \"${provider}\" is not configured`,\n );\n }\n return result.content;\n };\n}\n","/**\n * Timeline category registry (issue #2049): ordered definitions with stable\n * IDs, names, colors, descriptions, and system/idle flags. Reserved system\n * categories (`system.*`) must always be present; unknown activity stays\n * visible in `system.unknown` rather than being silently reassigned.\n */\n\nimport type { TimelineCategory } from \"./types.js\";\n\nexport const TIMELINE_RESERVED_UNKNOWN = \"system.unknown\";\nexport const TIMELINE_RESERVED_IDLE = \"system.idle\";\nexport const TIMELINE_RESERVED_PAUSE = \"system.pause\";\n\nconst COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;\n\nfunction isTimelineCategoryId(id: string): boolean {\n const parts = id.split(\".\");\n if (parts.length === 0) return false;\n for (const part of parts) {\n if (part.length === 0) return false;\n const first = part.charCodeAt(0);\n if (first < 97 || first > 122) return false;\n for (let i = 1; i < part.length; i += 1) {\n const code = part.charCodeAt(i);\n const ok = (code >= 97 && code <= 122) || (code >= 48 && code <= 57) || code === 45;\n if (!ok) return false;\n }\n }\n return true;\n}\n\n\n/**\n * Default registry. User category orders step by 10 so a corrected registry\n * can insert between without renumbering; system categories sort last.\n */\nexport const DEFAULT_TIMELINE_CATEGORIES: readonly TimelineCategory[] = [\n { id: \"development\", name: \"Development\", color: \"#3b82f6\", description: \"Editors, terminals, IDEs, and code forges.\", order: 10 },\n { id: \"communication\", name: \"Communication\", color: \"#f59e0b\", description: \"Mail, chat, and meetings.\", order: 20 },\n { id: \"browsing\", name: \"Browsing\", color: \"#6366f1\", description: \"Web browsing without a more specific domain match.\", order: 30 },\n { id: \"documents\", name: \"Documents\", color: \"#10b981\", description: \"Writing, notes, and PDFs.\", order: 40 },\n { id: \"design\", name: \"Design & Media\", color: \"#ec4899\", description: \"Design, audio, and video tools.\", order: 50 },\n { id: \"data\", name: \"Data & Analysis\", color: \"#84cc16\", description: \"Spreadsheets, dashboards, and databases.\", order: 60 },\n { id: \"admin\", name: \"Admin\", color: \"#64748b\", description: \"File managers, settings, and system utilities.\", order: 70 },\n { id: \"entertainment\", name: \"Entertainment\", color: \"#ef4444\", description: \"Video, music, and games.\", order: 80 },\n { id: TIMELINE_RESERVED_UNKNOWN, name: \"Uncategorized\", color: \"#9ca3af\", description: \"Activity with no matching classification signal. Kept visible, never silently reassigned.\", order: 990, system: true },\n { id: TIMELINE_RESERVED_IDLE, name: \"Idle\", color: \"#d1d5db\", description: \"Derived gap between cards where no activity was observed.\", order: 991, system: true, idle: true },\n { id: TIMELINE_RESERVED_PAUSE, name: \"Paused\", color: \"#a78bfa\", description: \"User-declared pause interval.\", order: 992, system: true },\n];\n\n/**\n * Validate a registry: unique well-formed ids, non-empty names, hex colors,\n * integer orders, reserved categories present and correctly flagged, and the\n * `system.` namespace reserved. Throws with the offending key path.\n */\nexport function validateTimelineCategories(categories: readonly TimelineCategory[]): void {\n if (!Array.isArray(categories) || categories.length === 0) {\n throw new RangeError(\"timeline categories must be a non-empty array\");\n }\n const seen = new Set<string>();\n for (const category of categories) {\n if (typeof category.id !== \"string\" || !isTimelineCategoryId(category.id)) {\n throw new RangeError(`timeline category id must be dotted kebab-case: ${String(category.id)}`);\n }\n if (seen.has(category.id)) {\n throw new RangeError(`timeline category id must be unique: ${category.id}`);\n }\n seen.add(category.id);\n if (typeof category.name !== \"string\" || category.name.length === 0) {\n throw new RangeError(`timeline category ${category.id}: name must be a non-empty string`);\n }\n if (typeof category.color !== \"string\" || !COLOR_PATTERN.test(category.color)) {\n throw new RangeError(`timeline category ${category.id}: color must be #RRGGBB`);\n }\n if (typeof category.description !== \"string\" || category.description.length === 0) {\n throw new RangeError(`timeline category ${category.id}: description must be a non-empty string`);\n }\n if (!Number.isInteger(category.order)) {\n throw new RangeError(`timeline category ${category.id}: order must be an integer`);\n }\n const isReserved = category.id === TIMELINE_RESERVED_UNKNOWN || category.id === TIMELINE_RESERVED_IDLE || category.id === TIMELINE_RESERVED_PAUSE;\n if (isReserved && category.system !== true) {\n throw new RangeError(`timeline category ${category.id} is reserved and must set system: true`);\n }\n if (!isReserved) {\n if (category.id.startsWith(\"system.\")) {\n throw new RangeError(`timeline category id namespace \"system.\" is reserved: ${category.id}`);\n }\n if (category.system === true || category.idle === true) {\n throw new RangeError(`timeline category ${category.id}: only reserved categories may set system/idle flags`);\n }\n }\n }\n const idle = categories.find((category) => category.id === TIMELINE_RESERVED_IDLE);\n if (idle !== undefined && idle.idle !== true) {\n throw new RangeError(`timeline category ${TIMELINE_RESERVED_IDLE} must set idle: true`);\n }\n for (const reserved of [TIMELINE_RESERVED_UNKNOWN, TIMELINE_RESERVED_IDLE, TIMELINE_RESERVED_PAUSE]) {\n if (!categories.some((category) => category.id === reserved)) {\n throw new RangeError(`timeline categories must include the reserved \"${reserved}\" category`);\n }\n }\n}\n\n/**\n * Deterministic presentation order: by `order`, then by id as the equal-order\n * tie-breaker, so two categories sharing an order never swap between runs.\n */\nexport function sortTimelineCategories(categories: readonly TimelineCategory[]): TimelineCategory[] {\n return [...categories].sort((a, b) => a.order - b.order || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n}\n","/**\n * Optional evidence-bound AI analysis over deterministic timeline cards\n * (issue #2050). Provider calls arrive through the injected `complete`\n * function; hosts build it from the local/remote seams in analysis-provider.js\n * and the parsed `activity.timeline.analysis` config. Failures leave the\n * cards unchanged and carry a typed failure kind. Disabled makes zero\n * provider calls.\n */\nimport { classifyAnalysisFailure, type AnalysisFailure, type AnalysisFailureKind } from \"./analysis-failure.js\";\nimport { classifyAnalysisProviderError } from \"./analysis-provider.js\";\nimport { extractJsonCandidates } from \"../../json-extract.js\";\nimport { log } from \"../../logger.js\";\nimport { DEFAULT_TIMELINE_CATEGORIES } from \"./categories.js\";\nimport type { TimelineCard, TimelineCategory, TimelineCorrection, TimelineEvidenceRange, TimelineObservation } from \"./types.js\";\n\nexport const TIMELINE_ANALYSIS_PROMPT_VERSION = 1;\nexport const TIMELINE_ANALYSIS_BATCH_SIZE = 40;\nexport const TIMELINE_ANALYSIS_BATCH_OVERLAP = 2;\nexport const TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS = 15_000;\n\nexport class TimelineAnalysisConfigError extends Error {\n override readonly name = \"TimelineAnalysisConfigError\";\n readonly code = \"invalid_config\" as const;\n constructor(message: string) {\n super(message);\n }\n}\n\nexport type TimelineAnalysisStatus = \"ok\" | \"disabled\" | \"provider_failed\" | \"invalid_output\";\n\nexport interface TimelineAnalysisCompleteInput {\n prompt: string;\n provider: string;\n model: string;\n signal: AbortSignal;\n}\n\nexport type TimelineAnalysisComplete = (input: TimelineAnalysisCompleteInput) => Promise<string>;\n\nexport interface TimelineAnalysisInput {\n enabled: boolean;\n cards: readonly TimelineCard[];\n observations: readonly TimelineObservation[];\n provider?: string;\n model?: string;\n complete?: TimelineAnalysisComplete;\n timeoutMs?: number;\n date?: string;\n timezone?: string;\n categories?: readonly TimelineCategory[];\n preferences?: readonly string[];\n priorEdits?: readonly TimelineCorrection[];\n signal?: AbortSignal;\n}\n\nexport interface TimelineAnalysisResult {\n status: TimelineAnalysisStatus;\n cards: TimelineCard[];\n provider?: string;\n model?: string;\n promptVersion?: number;\n /** Typed failure detail; present only when status is a failure. */\n failure?: AnalysisFailure;\n}\n\ninterface AnalysisOp {\n cardId: string;\n title?: string;\n summary?: string;\n categoryId?: string;\n confidence?: number;\n uncertainty?: string;\n evidenceRange: TimelineEvidenceRange;\n}\n\nconst INSTRUCTIONS = [\n \"Use only supplied evidence.\",\n \"Preserve chronology.\",\n \"Do not invent people, places, or tasks.\",\n \"Avoid productivity or emotional claims.\",\n \"Merge adjacent activity only when the evidence justifies it.\",\n \"Return strict JSON: {\\\"ops\\\":[...]} with evidenceRange, title, summary, categoryId, confidence, uncertainty.\",\n \"Cite evidence ranges for every op. Empty ops is a valid no-op.\",\n].join(\" \");\n\nfunction fail(\n status: Exclude<TimelineAnalysisStatus, \"ok\" | \"disabled\">,\n cards: readonly TimelineCard[],\n provider: string,\n model: string,\n kind: AnalysisFailureKind,\n): TimelineAnalysisResult {\n log.info(`timeline analysis status=${status} provider=${provider} model=${model} promptVersion=${TIMELINE_ANALYSIS_PROMPT_VERSION}`);\n return {\n status,\n cards: cards as TimelineCard[],\n provider,\n model,\n promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION,\n failure: classifyAnalysisFailure(kind),\n };\n}\n\nfunction requiredToken(value: string | undefined, name: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TimelineAnalysisConfigError(`${name} is required`);\n }\n return value.trim();\n}\n\nfunction evidenceKeyOf(observation: TimelineObservation): string {\n const parsed = Date.parse(observation.capturedAtUtc);\n const instant = Number.isFinite(parsed) ? new Date(parsed).toISOString() : observation.capturedAtUtc;\n return `${observation.machine}|${instant}|${observation.contentHash}`;\n}\n\nfunction sortObservations(observations: readonly TimelineObservation[]): TimelineObservation[] {\n return [...observations].sort((a, b) => {\n const time = Date.parse(a.capturedAtUtc) - Date.parse(b.capturedAtUtc);\n if (time !== 0) return time;\n if (a.contentHash !== b.contentHash) return a.contentHash < b.contentHash ? -1 : 1;\n return a.id - b.id;\n });\n}\n\nfunction batchObservations(observations: readonly TimelineObservation[]): TimelineObservation[][] {\n if (observations.length === 0) return [[]];\n const size = TIMELINE_ANALYSIS_BATCH_SIZE;\n const overlap = TIMELINE_ANALYSIS_BATCH_OVERLAP;\n const step = size - overlap;\n const batches: TimelineObservation[][] = [];\n for (let start = 0; start < observations.length; start += step) {\n batches.push(observations.slice(start, start + size));\n if (start + size >= observations.length) break;\n }\n return batches;\n}\n\nfunction safeObservation(observation: TimelineObservation) {\n return {\n id: observation.id,\n machine: observation.machine,\n capturedAtUtc: observation.capturedAtUtc,\n app: observation.app,\n windowTitle: observation.windowTitle,\n ...(observation.browserUrl ? { browserUrl: observation.browserUrl } : {}),\n contentHash: observation.contentHash,\n };\n}\n\nfunction safeCard(card: TimelineCard) {\n return {\n id: card.id,\n kind: card.kind,\n title: card.title,\n summary: card.summary,\n categoryId: card.categoryId,\n confidence: card.confidence,\n startUtc: card.startUtc,\n endUtc: card.endUtc,\n machine: card.machine,\n evidenceIds: card.evidenceIds,\n evidenceRange: card.evidenceRange,\n ...(card.manualEdit ? { manualEdit: card.manualEdit } : {}),\n };\n}\n\nexport function buildTimelineAnalysisPrompt(input: {\n date?: string;\n timezone?: string;\n cards: readonly TimelineCard[];\n observations: readonly TimelineObservation[];\n categories: readonly TimelineCategory[];\n preferences?: readonly string[];\n priorEdits?: readonly TimelineCorrection[];\n}): string {\n const payload = {\n date: input.date ?? null,\n timezone: input.timezone ?? null,\n categories: input.categories.map((category) => ({ id: category.id, name: category.name })),\n preferences: input.preferences ?? [],\n priorEdits: input.priorEdits ?? [],\n cards: input.cards.map(safeCard),\n observations: input.observations.map(safeObservation),\n };\n return `${INSTRUCTIONS}\\n${JSON.stringify(payload)}`;\n}\n\nasync function callComplete(\n complete: TimelineAnalysisComplete,\n prompt: string,\n provider: string,\n model: string,\n timeoutMs: number,\n parent?: AbortSignal,\n): Promise<string> {\n const { promise: timeoutPromise, reject } = Promise.withResolvers<string>();\n const failOnce = (message: string, name: string) => {\n reject(Object.assign(new Error(message), { name }));\n };\n const timer = setTimeout(() => failOnce(\"timeline analysis timed out\", \"TimeoutError\"), timeoutMs);\n if (parent?.aborted) {\n clearTimeout(timer);\n throw Object.assign(new Error(\"timeline analysis aborted\"), { name: \"AbortError\" });\n }\n const onAbort = () => failOnce(\"timeline analysis aborted\", \"AbortError\");\n parent?.addEventListener(\"abort\", onAbort, { once: true });\n const signal = parent ? AbortSignal.any([parent, AbortSignal.timeout(timeoutMs)]) : AbortSignal.timeout(timeoutMs);\n try {\n return await Promise.race([complete({ prompt, provider, model, signal }), timeoutPromise]);\n } finally {\n clearTimeout(timer);\n parent?.removeEventListener(\"abort\", onAbort);\n }\n}\n\nfunction asOp(value: unknown): AnalysisOp | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n if (!(\"cardId\" in value) || typeof value.cardId !== \"string\" || value.cardId.length === 0) return null;\n if (!(\"evidenceRange\" in value)) return null;\n const range = value.evidenceRange;\n if (!range || typeof range !== \"object\" || Array.isArray(range)) return null;\n if (!(\"firstKey\" in range) || typeof range.firstKey !== \"string\" || range.firstKey.length === 0) return null;\n if (!(\"lastKey\" in range) || typeof range.lastKey !== \"string\" || range.lastKey.length === 0) return null;\n if (\"title\" in value && value.title !== undefined && typeof value.title !== \"string\") return null;\n if (\"summary\" in value && value.summary !== undefined && typeof value.summary !== \"string\") return null;\n if (\"categoryId\" in value && value.categoryId !== undefined && typeof value.categoryId !== \"string\") return null;\n if (\"uncertainty\" in value && value.uncertainty !== undefined && typeof value.uncertainty !== \"string\") return null;\n if (\n \"confidence\" in value &&\n value.confidence !== undefined &&\n (typeof value.confidence !== \"number\" || value.confidence < 0 || value.confidence > 1)\n ) {\n return null;\n }\n return {\n cardId: value.cardId,\n title: \"title\" in value && typeof value.title === \"string\" ? value.title : undefined,\n summary: \"summary\" in value && typeof value.summary === \"string\" ? value.summary : undefined,\n categoryId: \"categoryId\" in value && typeof value.categoryId === \"string\" ? value.categoryId : undefined,\n confidence: \"confidence\" in value && typeof value.confidence === \"number\" ? value.confidence : undefined,\n uncertainty: \"uncertainty\" in value && typeof value.uncertainty === \"string\" ? value.uncertainty : undefined,\n evidenceRange: { firstKey: range.firstKey, lastKey: range.lastKey },\n };\n}\n\ntype ParseOpsResult = { ok: true; ops: AnalysisOp[] } | { ok: false; kind: AnalysisFailureKind };\n\n/**\n * Parse the provider response. An empty/whitespace body is `partial_output`\n * (nothing came back); a body whose JSON candidates never parse is\n * `malformed_json`; parseable JSON in the wrong shape — missing `ops`, or an\n * op that fails validation — is `invalid_schema`.\n */\nfunction parseOps(raw: string): ParseOpsResult {\n if (typeof raw !== \"string\" || raw.trim().length === 0) return { ok: false, kind: \"partial_output\" };\n let sawParsableShape = false;\n for (const candidate of extractJsonCandidates(raw)) {\n try {\n const parsed: unknown = JSON.parse(candidate);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) continue;\n if (!(\"ops\" in parsed) || !Array.isArray(parsed.ops)) {\n sawParsableShape = true;\n continue;\n }\n const out: AnalysisOp[] = [];\n let valid = true;\n for (const item of parsed.ops) {\n const op = asOp(item);\n if (!op) {\n valid = false;\n break;\n }\n out.push(op);\n }\n if (valid) return { ok: true, ops: out };\n sawParsableShape = true;\n } catch {\n continue;\n }\n }\n if (sawParsableShape) return { ok: false, kind: \"invalid_schema\" };\n return { ok: false, kind: \"malformed_json\" };\n}\n\nfunction knownEvidenceKeys(cards: readonly TimelineCard[], observations: readonly TimelineObservation[]): Set<string> {\n const keys = new Set<string>();\n for (const observation of observations) keys.add(evidenceKeyOf(observation));\n for (const card of cards) {\n if (card.evidenceRange) {\n keys.add(card.evidenceRange.firstKey);\n keys.add(card.evidenceRange.lastKey);\n }\n }\n return keys;\n}\n\nfunction applyOps(\n cards: readonly TimelineCard[],\n ops: readonly AnalysisOp[],\n categories: readonly TimelineCategory[],\n evidenceKeys: ReadonlySet<string>,\n): TimelineCard[] | null {\n if (ops.length === 0) return cards as TimelineCard[];\n const byId = new Map(cards.map((card) => [card.id, card]));\n const allowedCategories = new Set(categories.map((category) => category.id));\n const next = new Map<string, TimelineCard>();\n for (const op of ops) {\n const card = byId.get(op.cardId);\n if (!card) return null;\n if (!evidenceKeys.has(op.evidenceRange.firstKey) || !evidenceKeys.has(op.evidenceRange.lastKey)) return null;\n if (op.categoryId !== undefined && !allowedCategories.has(op.categoryId)) return null;\n if (card.manualEdit) continue;\n next.set(card.id, {\n ...card,\n ...(op.title !== undefined ? { title: op.title } : {}),\n ...(op.summary !== undefined ? { summary: op.summary } : {}),\n ...(op.categoryId !== undefined ? { categoryId: op.categoryId } : {}),\n ...(op.confidence !== undefined ? { confidence: op.confidence } : {}),\n });\n }\n if (next.size === 0) return cards as TimelineCard[];\n return cards.map((card) => next.get(card.id) ?? card);\n}\n\n/** Analyze one day of cards. Failures return the input cards unchanged. */\nexport async function analyzeTimelineCards(input: TimelineAnalysisInput): Promise<TimelineAnalysisResult> {\n const cards = input.cards as TimelineCard[];\n if (!input.enabled) {\n return { status: \"disabled\", cards };\n }\n\n const provider = requiredToken(input.provider, \"provider\");\n const model = requiredToken(input.model, \"model\");\n const complete = input.complete;\n if (typeof complete !== \"function\") {\n throw new TimelineAnalysisConfigError(\"complete is required\");\n }\n const timeoutMs = input.timeoutMs ?? TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {\n throw new TimelineAnalysisConfigError(\"timeoutMs must be a positive integer\");\n }\n if (input.cards.length === 0 && input.observations.length === 0) {\n // Caller-side guard, not a provider failure: nothing to analyze and zero\n // calls must be made, so no typed response failure is attached.\n return {\n status: \"invalid_output\",\n cards,\n provider,\n model,\n promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION,\n };\n }\n\n const categories = input.categories ?? DEFAULT_TIMELINE_CATEGORIES;\n const ordered = sortObservations(input.observations);\n const batches = batchObservations(ordered);\n const merged = new Map<string, AnalysisOp>();\n\n try {\n for (const batch of batches) {\n const prompt = buildTimelineAnalysisPrompt({\n date: input.date,\n timezone: input.timezone,\n cards: input.cards,\n observations: batch,\n categories,\n preferences: input.preferences,\n priorEdits: input.priorEdits,\n });\n const raw = await callComplete(complete, prompt, provider, model, timeoutMs, input.signal);\n const parsed = parseOps(raw);\n if (!parsed.ok) return fail(\"invalid_output\", cards, provider, model, parsed.kind);\n for (const op of parsed.ops) merged.set(op.cardId, op);\n }\n } catch (error) {\n return fail(\"provider_failed\", cards, provider, model, classifyAnalysisProviderError(error));\n }\n\n const applied = applyOps(cards, [...merged.values()], categories, knownEvidenceKeys(cards, ordered));\n if (!applied) return fail(\"invalid_output\", cards, provider, model, \"invalid_schema\");\n\n log.info(`timeline analysis status=ok provider=${provider} model=${model} promptVersion=${TIMELINE_ANALYSIS_PROMPT_VERSION}`);\n return {\n status: \"ok\",\n cards: applied,\n provider,\n model,\n promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION,\n };\n}\n","/**\n * Analysis run metadata (issue #2050).\n *\n * Pure builder for the provider/model/prompt-version record attached to\n * stored analysis results and telemetry.\n *\n * The no-content guarantee is enforced by SHAPE, not by length: each field\n * must match an identifier/version syntax, so prose cannot be stored as a\n * \"model name\". A 200-character single-line string is happily prose\n * (\"Summarize this user\\u0027s activity\"), which is why a length cap alone was\n * not the boundary this record needs. Errors never echo a rejected value,\n * so a mis-passed prompt cannot reach logs through the failure path either.\n */\nexport interface AnalysisRunMetadata {\n provider: string;\n model: string;\n promptVersion: string;\n /** Observation ids the run consumed, for evidence tracing. */\n observationCount: number;\n}\n\nexport const ANALYSIS_METADATA_MAX_FIELD_LENGTH = 120;\n/** True when value is an identifier-safe provider/model/promptVersion string. */\nexport const isAnalysisIdentifier = (value: string): boolean => IDENTIFIER.test(value);\n\n/**\n * Identifier syntax for provider and model: letters, digits, and the\n * separators real provider/model slugs use (`openai`, `gpt-5.2`,\n * `anthropic/claude-4_1`, `llama3:8b`). No spaces, so a sentence cannot pass.\n */\nconst IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9._:\\-\\/]*$/;\n\n/**\n * Prompt versions are identifiers or dates (`v3`, `2026-08-01`,\n * `timeline-analysis.v2`), so the same syntax applies.\n */\nconst FIELD_PATTERNS: Readonly<Record<string, RegExp>> = {\n provider: IDENTIFIER,\n model: IDENTIFIER,\n promptVersion: IDENTIFIER,\n};\n\nfunction validateMetadataField(field: string, value: unknown): string {\n // Never interpolate the value itself: an error string is a log line, and a\n // caller that mis-passes prompt text must not have it echoed there.\n if (typeof value !== \"string\") {\n throw new RangeError(\n `analysis run metadata ${field} must be a string; received ${typeof value}`,\n );\n }\n if (value.length === 0) {\n throw new RangeError(`analysis run metadata ${field} must not be empty`);\n }\n if (value.length > ANALYSIS_METADATA_MAX_FIELD_LENGTH) {\n throw new RangeError(\n `analysis run metadata ${field} is too long (max ${ANALYSIS_METADATA_MAX_FIELD_LENGTH} characters)`,\n );\n }\n // Report a line break as a line break even though the pattern would also\n // reject it. U+2028 and U+2029 are line separators too: they break\n // line-oriented log consumers exactly like CR and LF.\n if (/[\\n\\r\\u2028\\u2029]/.test(value)) {\n throw new RangeError(`analysis run metadata ${field} must not contain a line break`);\n }\n const pattern = FIELD_PATTERNS[field];\n if (pattern === undefined) {\n throw new RangeError(`analysis run metadata has no pattern for field ${field}`);\n }\n if (!pattern.test(value)) {\n throw new RangeError(\n `analysis run metadata ${field} must be an identifier (letters, digits, and ._:-/ only)`,\n );\n }\n return value;\n}\n\nexport function buildAnalysisRunMetadata(input: {\n provider: string;\n model: string;\n promptVersion: string;\n observationCount: number;\n}): AnalysisRunMetadata {\n const provider = validateMetadataField(\"provider\", input.provider);\n const model = validateMetadataField(\"model\", input.model);\n const promptVersion = validateMetadataField(\"promptVersion\", input.promptVersion);\n const observationCount = input.observationCount;\n if (\n typeof observationCount !== \"number\" ||\n !Number.isInteger(observationCount) ||\n observationCount < 0\n ) {\n // Report the type only. JSON.stringify would echo mis-passed content into\n // the log, and it throws outright on a bigint or a circular object.\n throw new RangeError(\n `analysis run metadata observationCount must be a non-negative integer; received ${typeof observationCount}`,\n );\n }\n return { provider, model, promptVersion, observationCount };\n}\n","import path from \"node:path\";\n\nimport { coerceBooleanLike, coerceNumber } from \"../connectors/coerce.js\";\nimport { assertValidTimezone } from \"./digest.js\";\nimport { applyLegacyJournalHeading } from \"./journal-heading.js\";\nimport { checkVaultJournalPrerequisites } from \"./journal-vault-prereq.js\";\nimport { resolveJournalSource } from \"./journal-source.js\";\nimport { validateVaultNoteTemplate } from \"./vault-path.js\";\nimport { validateRegionName } from \"./vault-region.js\";\nimport { TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS } from \"./timeline/analysis.js\";\nimport { ANALYSIS_METADATA_MAX_FIELD_LENGTH, isAnalysisIdentifier } from \"./timeline/analysis-metadata.js\";\nimport type {\n ActivityConfig,\n ActivityExtractionMode,\n ActivitySourceConfig,\n ActivityTimelineAnalysisConfig,\n ActivityTimelineConfig,\n ActivityTimelineJournalConfig,\n ActivityTimelineQaConfig,\n ActivityTimelineVaultConfig,\n ActivityTimelineVaultTargetConfig,\n} from \"./types.js\";\nimport type { ImportanceLevel } from \"../types.js\";\n\nconst EXTRACTION_MODES: readonly ActivityExtractionMode[] = [\"off\", \"smart\"];\nconst IMPORTANCE_LEVELS: readonly ImportanceLevel[] = [\"critical\", \"high\", \"normal\", \"low\", \"trivial\"];\nconst LOOPBACK_HOSTS: Record<string, true> = { localhost: true, \"127.0.0.1\": true, \"::1\": true };\n\n/** The inert default: disabled, search-only, no sources, no extraction. */\nexport function defaultActivityConfig(): ActivityConfig {\n return {\n enabled: false,\n timezone: \"UTC\",\n syncDays: 1,\n autoSyncIntervalMinutes: 15,\n sources: [],\n extractionMode: \"off\",\n sourceTrust: 0.6,\n autoApproveTrust: 0.8,\n reviewTrust: 0.5,\n minConfidence: 0.7,\n minImportance: \"normal\",\n maxMemoriesPerDay: 0,\n timeline: {\n enabled: false,\n analysis: parseTimelineAnalysisConfig(undefined),\n journal: { enabled: false, source: \"memoryDir\", extractionMode: \"off\" },\n qa: { enabled: false, maxRangeDays: 31 },\n vault: parseTimelineVaultConfig(undefined),\n },\n };\n}\n\nfunction asRecord(value: unknown, name: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction optionalString(value: unknown, name: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || value.length === 0) throw new TypeError(`${name} must be a non-empty string`);\n return value;\n}\n\nfunction parseUnitInterval(value: unknown, key: string, fallback: number): number {\n if (value === undefined) return fallback;\n const parsed = coerceNumber(value);\n if (parsed === undefined || !Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n throw new RangeError(`activity.${key} must be a number in [0, 1]`);\n }\n return parsed;\n}\n\n/**\n * Parse, protocol-check, and confine an activity source base URL to a local\n * loopback host. Shared with ActivityHttpSourceClient so config-load and client\n * construction reject the exact same shapes with the same prefixed message. The\n * bearer token travels in an Authorization header, so a non-loopback baseUrl\n * would exfiltrate it; the subsystem contract is local capture daemons only.\n */\nexport function validateActivityBaseUrl(baseUrl: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(baseUrl);\n } catch {\n throw new RangeError(`activity source baseUrl must be a valid URL: ${baseUrl}`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new RangeError(\"activity source baseUrl must use HTTP or HTTPS\");\n }\n // URL keeps IPv6 hosts bracketed (e.g. \"[::1]\"); normalize before the lookup.\n const host = parsed.hostname.replace(/^\\[|\\]$/g, \"\");\n if (LOOPBACK_HOSTS[host] !== true && !/^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(host)) {\n throw new RangeError(`activity source baseUrl must target a loopback host (got ${parsed.hostname})`);\n }\n return parsed;\n}\n\nfunction parseSource(value: unknown): ActivitySourceConfig {\n const raw = asRecord(value, \"activity source\");\n const machineLabel = optionalString(raw.machineLabel, \"activity source machineLabel\");\n const baseUrl = optionalString(raw.baseUrl, \"activity source baseUrl\");\n if (machineLabel === undefined || baseUrl === undefined) {\n throw new TypeError(\"activity source requires machineLabel and baseUrl\");\n }\n // Reject whitespace-only labels here so config-load fails loudly rather than\n // parsing clean and then failing on the first sync (the client and pipeline\n // both reject a blank label via trim()).\n if (machineLabel.trim().length === 0) {\n throw new RangeError(\"activity source machineLabel must not be blank\");\n }\n validateActivityBaseUrl(baseUrl);\n const token = optionalString(raw.token, \"activity source token\");\n return { machineLabel, baseUrl, ...(token === undefined ? {} : { token }) };\n}\n\n/**\n * Parse the unified `activity.*` block. `enabled` gates source ingestion (and\n * requires at least one source); `extractionMode` independently gates durable\n * trust-gated memory extraction (default `off`, i.e. search-only).\n */\nexport function parseActivityConfig(raw: unknown): ActivityConfig {\n const defaults = defaultActivityConfig();\n if (raw === undefined || raw === null) {\n return { ...defaults };\n }\n const config = asRecord(raw, \"activity\");\n const enabledValue = coerceBooleanLike(config.enabled, \"activity.enabled\");\n if (config.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.enabled must be a boolean\");\n }\n const timezone = optionalString(config.timezone, \"activity.timezone\") ?? \"UTC\";\n // Validate the IANA zone at parse so a typo fails before any daemon is\n // contacted; otherwise activityDayWindow() throws mid-sync after snapshot\n // pages may already be persisted, and every retry replays the same window.\n assertValidTimezone(timezone);\n const syncDaysValue = coerceNumber(config.syncDays, \"activity.syncDays\");\n if (config.syncDays !== undefined && syncDaysValue === undefined) {\n throw new TypeError(\"activity.syncDays must be a finite number\");\n }\n const syncDays = syncDaysValue ?? 1;\n if (!Number.isInteger(syncDays) || syncDays < 1 || syncDays > 90) {\n throw new RangeError(\"activity.syncDays must be an integer from 1 to 90\");\n }\n const intervalValue = coerceNumber(config.autoSyncIntervalMinutes, \"activity.autoSyncIntervalMinutes\");\n if (config.autoSyncIntervalMinutes !== undefined && intervalValue === undefined) {\n throw new TypeError(\"activity.autoSyncIntervalMinutes must be a finite number\");\n }\n const autoSyncIntervalMinutes = intervalValue ?? 15;\n if (!Number.isInteger(autoSyncIntervalMinutes) || autoSyncIntervalMinutes < 1 || autoSyncIntervalMinutes > 1440) {\n throw new RangeError(\"activity.autoSyncIntervalMinutes must be an integer from 1 to 1440\");\n }\n if (config.sources !== undefined && !Array.isArray(config.sources)) {\n throw new TypeError(\"activity.sources must be an array\");\n }\n const sources = (config.sources ?? []).map(parseSource);\n // Cursors and row dedup are keyed on machineLabel alone; two sources sharing\n // a label would share a cursor and dedup namespace, silently skipping or\n // conflating snapshots. Reject the collision at parse.\n const labels = new Set<string>();\n for (const source of sources) {\n if (labels.has(source.machineLabel)) {\n throw new RangeError(`activity source machineLabel must be unique: ${source.machineLabel}`);\n }\n labels.add(source.machineLabel);\n }\n const enabled = enabledValue ?? false;\n if (enabled && sources.length === 0) throw new RangeError(\"activity.enabled requires at least one source\");\n\n // Extraction gate (independent of `enabled` ingestion). Default `off`.\n // Default only for a missing key; an explicit null/non-string is a malformed\n // enum and must fail rather than silently disabling extraction.\n const extractionMode = config.extractionMode === undefined ? defaults.extractionMode : config.extractionMode;\n if (typeof extractionMode !== \"string\" || !EXTRACTION_MODES.includes(extractionMode as ActivityExtractionMode)) {\n throw new RangeError(`activity.extractionMode must be one of: ${EXTRACTION_MODES.join(\", \")}`);\n }\n const minImportance = config.minImportance === undefined ? defaults.minImportance : config.minImportance;\n if (typeof minImportance !== \"string\" || !IMPORTANCE_LEVELS.includes(minImportance as ImportanceLevel)) {\n throw new RangeError(`activity.minImportance must be one of: ${IMPORTANCE_LEVELS.join(\", \")}`);\n }\n // Default only for a missing key; an explicit null/unparseable value must fail\n // rather than silently uncapping (parity with the enum/unit-interval fields).\n const rawMaxMemoriesPerDay =\n config.maxMemoriesPerDay === undefined ? defaults.maxMemoriesPerDay : config.maxMemoriesPerDay;\n const maxMemoriesPerDay = coerceNumber(rawMaxMemoriesPerDay);\n if (maxMemoriesPerDay === undefined || !Number.isInteger(maxMemoriesPerDay) || maxMemoriesPerDay < 0) {\n throw new RangeError(\"activity.maxMemoriesPerDay must be a non-negative integer\");\n }\n const autoApproveTrust = parseUnitInterval(config.autoApproveTrust, \"autoApproveTrust\", defaults.autoApproveTrust);\n const reviewTrust = parseUnitInterval(config.reviewTrust, \"reviewTrust\", defaults.reviewTrust);\n if (reviewTrust >= autoApproveTrust) {\n throw new RangeError(\n `activity.reviewTrust (${reviewTrust}) must be below autoApproveTrust (${autoApproveTrust})`,\n );\n }\n return {\n enabled,\n timezone,\n syncDays,\n autoSyncIntervalMinutes,\n sources,\n extractionMode: extractionMode as ActivityExtractionMode,\n sourceTrust: parseUnitInterval(config.sourceTrust, \"sourceTrust\", defaults.sourceTrust),\n autoApproveTrust,\n reviewTrust,\n minConfidence: parseUnitInterval(config.minConfidence, \"minConfidence\", defaults.minConfidence),\n minImportance: minImportance as ImportanceLevel,\n maxMemoriesPerDay,\n timeline: parseTimelineConfig(config.timeline),\n };\n}\n\n/**\n * Parse the `activity.timeline.*` block. `enabled` is the master gate for\n * timeline-card derivation (issue #2049); default false. A non-object block\n * is malformed and must fail rather than silently disabling the layer.\n */\nfunction parseTimelineConfig(raw: unknown): ActivityTimelineConfig {\n if (raw === undefined) {\n return {\n enabled: false,\n analysis: parseTimelineAnalysisConfig(undefined),\n journal: { enabled: false, source: \"memoryDir\", extractionMode: \"off\" },\n qa: parseTimelineQaConfig(undefined),\n vault: parseTimelineVaultConfig(undefined),\n };\n }\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline must be an object\");\n }\n const timeline = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(timeline.enabled, \"activity.timeline.enabled\");\n if (timeline.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.enabled must be a boolean\");\n }\n const journal = parseTimelineJournalConfig(timeline.journal);\n let vault = parseTimelineVaultConfig(timeline.vault);\n const journalRaw = timeline.journal;\n const headingRaw =\n typeof journalRaw === \"object\" && journalRaw !== null && !Array.isArray(journalRaw)\n ? (journalRaw as Record<string, unknown>).heading\n : undefined;\n if (headingRaw !== undefined) {\n const aliased = applyLegacyJournalHeading({\n journalSection: vault.readback.journalSection,\n heading: headingRaw,\n });\n process.emitWarning(\n aliased.ignoredLegacyHeading\n ? 'activity.timeline.journal.heading is deprecated and ignored because activity.timeline.vault.readback.journalSection is set; use vault.readback.journalSection.'\n : 'activity.timeline.journal.heading is deprecated; use activity.timeline.vault.readback.journalSection.',\n { type: \"DeprecationWarning\", code: \"REMNIC_DEP_JOURNAL_HEADING\" },\n );\n if (aliased.usedLegacyHeading) {\n vault = { ...vault, readback: { ...vault.readback, journalSection: aliased.journalSection } };\n }\n }\n if (journal.source === \"vault\") {\n // Parse-time prerequisite gate (issue #1987): the error names EVERY\n // missing prerequisite, never just the first (§1/§39).\n const prereq = checkVaultJournalPrerequisites({\n vaultEnabled: vault.enabled,\n dailyNotePath: vault.dailyNotePath,\n journalSection: vault.readback.journalSection,\n });\n if (!prereq.ok) {\n throw new RangeError(\n `activity.timeline.journal.source \"vault\" requires ${prereq.message}`,\n );\n }\n }\n return {\n enabled: enabledValue ?? false,\n analysis: parseTimelineAnalysisConfig(timeline.analysis),\n journal,\n qa: parseTimelineQaConfig(timeline.qa),\n vault,\n };\n}\n\n/**\n * Parse the `activity.timeline.analysis.*` block (issue #2050). Independent\n * gate, default off: disabled means zero provider calls and zero analysis\n * artifacts. Enabling requires an explicit provider and model; every invalid\n * value is rejected at parse time — never silently defaulted or fallen back.\n */\nfunction parseTimelineAnalysisConfig(raw: unknown): ActivityTimelineAnalysisConfig {\n if (raw === undefined) return { enabled: false };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.analysis must be an object\");\n }\n const analysis = raw as Record<string, unknown>;\n const enabled = requireBool(analysis.enabled, \"activity.timeline.analysis.enabled\", false);\n const provider = optionalNonEmptyString(analysis.provider, \"activity.timeline.analysis.provider\")?.trim();\n const model = optionalNonEmptyString(analysis.model, \"activity.timeline.analysis.model\")?.trim();\n for (const [key, value] of [\n [\"provider\", provider],\n [\"model\", model],\n ] as const) {\n if (value === undefined) continue;\n if (key === \"provider\" && value.includes(\"/\")) {\n throw new RangeError(\n \"activity.timeline.analysis.provider must be a single provider segment (no '/')\",\n );\n }\n if (!isAnalysisIdentifier(value)) {\n throw new RangeError(\n `activity.timeline.analysis.${key} must be an identifier (letters, digits, and ._:-/ only)`,\n );\n }\n if (value.length > ANALYSIS_METADATA_MAX_FIELD_LENGTH) {\n throw new RangeError(\n `activity.timeline.analysis.${key} must be at most ${ANALYSIS_METADATA_MAX_FIELD_LENGTH} characters`,\n );\n }\n }\n if (enabled && (provider === undefined || model === undefined)) {\n throw new RangeError(\n \"activity.timeline.analysis.provider and model are required when analysis is enabled\",\n );\n }\n const timeoutMsValue = coerceNumber(analysis.timeoutMs, \"activity.timeline.analysis.timeoutMs\");\n if (analysis.timeoutMs !== undefined && timeoutMsValue === undefined) {\n throw new TypeError(\"activity.timeline.analysis.timeoutMs must be a finite number\");\n }\n const timeoutMs = timeoutMsValue ?? TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(timeoutMs) || timeoutMs < 1_000 || timeoutMs > 120_000) {\n throw new RangeError(\"activity.timeline.analysis.timeoutMs must be an integer from 1000 to 120000\");\n }\n if (analysis.preferences !== undefined) {\n if (!Array.isArray(analysis.preferences)) {\n throw new TypeError(\"activity.timeline.analysis.preferences must be an array of strings\");\n }\n if (analysis.preferences.length > 16) {\n throw new RangeError(\"activity.timeline.analysis.preferences supports at most 16 entries\");\n }\n for (const entry of analysis.preferences) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new TypeError(\"activity.timeline.analysis.preferences entries must be non-empty strings\");\n }\n if (entry.length > 200) {\n throw new RangeError(\"activity.timeline.analysis.preferences entries must be at most 200 characters\");\n }\n }\n }\n const preferences = analysis.preferences as string[] | undefined;\n return {\n enabled,\n ...(provider === undefined ? {} : { provider }),\n ...(model === undefined ? {} : { model }),\n ...(analysis.timeoutMs !== undefined || timeoutMsValue !== undefined ? { timeoutMs } : {}),\n ...(preferences === undefined ? {} : { preferences }),\n };\n}\n\n/**\n * Parse the `activity.timeline.vault.*` block (issue #1985). Default off.\n * Invalid values are rejected at parse time naming the missing or invalid\n * prerequisite — never silently defaulted.\n */\nexport function parseTimelineVaultConfig(raw: unknown): ActivityTimelineVaultConfig {\n if (raw === undefined) return defaultVaultConfig();\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.vault must be an object\");\n }\n const vault = raw as Record<string, unknown>;\n const enabled = requireBool(vault.enabled, \"activity.timeline.vault.enabled\", false);\n const createMissingNotes = requireBool(vault.createMissingNotes, \"activity.timeline.vault.createMissingNotes\", false);\n const autoPublish = requireBool(vault.autoPublish, \"activity.timeline.vault.autoPublish\", true);\n const vaultPath = optionalNonEmptyString(vault.vaultPath, \"activity.timeline.vault.vaultPath\") ?? \"\";\n const dailyNotePath =\n optionalNonEmptyString(vault.dailyNotePath, \"activity.timeline.vault.dailyNotePath\") ?? \"{yyyy}-{MM}-{dd}.md\";\n const weeklyNotePath = optionalNonEmptyString(vault.weeklyNotePath, \"activity.timeline.vault.weeklyNotePath\") ?? \"\";\n const noteTemplate = optionalNonEmptyString(vault.noteTemplate, \"activity.timeline.vault.noteTemplate\") ?? \"\";\n const insertUnderHeading =\n optionalNonEmptyString(vault.insertUnderHeading, \"activity.timeline.vault.insertUnderHeading\") ?? \"\";\n\n if (typeof vault.sectionStrategy !== \"undefined\" && typeof vault.sectionStrategy !== \"string\") {\n throw new TypeError(\"activity.timeline.vault.sectionStrategy must be a string\");\n }\n const sectionStrategy = (vault.sectionStrategy as string | undefined) ?? \"markers\";\n if (sectionStrategy !== \"markers\" && sectionStrategy !== \"heading\") {\n throw new RangeError('activity.timeline.vault.sectionStrategy must be one of \"markers\", \"heading\"');\n }\n\n // The documented `vaultPath` contract: absolute on the host platform, or\n // `~` / `~`-rooted for `expandTildePath`. Everything else — `.`, `vault`,\n // `../notes`, whitespace — is relative and would resolve against whatever\n // directory the daemon or CLI happened to launch from, so an enabled vault\n // rejects it at parse time.\n const tildeRooted = vaultPath === \"~\" || vaultPath.startsWith(\"~/\") || vaultPath.startsWith(\"~\\\\\");\n if (enabled && (vaultPath.trim().length === 0 || (!tildeRooted && !path.isAbsolute(vaultPath)))) {\n throw new RangeError(\n \"activity.timeline.vault.vaultPath must be an absolute or `~`-rooted path when activity.timeline.vault.enabled is true; \" +\n `a relative path resolves against the process working directory (got ${JSON.stringify(vaultPath)})`,\n );\n }\n try {\n validateVaultNoteTemplate(dailyNotePath);\n } catch (err) {\n throw new RangeError(`activity.timeline.vault.dailyNotePath: ${(err as Error).message}`);\n }\n if (weeklyNotePath.length > 0) {\n try {\n validateVaultNoteTemplate(weeklyNotePath);\n } catch (err) {\n throw new RangeError(`activity.timeline.vault.weeklyNotePath: ${(err as Error).message}`);\n }\n }\n if (createMissingNotes) {\n if (noteTemplate.length === 0) {\n throw new RangeError(\n \"activity.timeline.vault.noteTemplate must name a vault-relative template file when activity.timeline.vault.createMissingNotes is true\",\n );\n }\n try {\n validateVaultNoteTemplate(noteTemplate);\n } catch (err) {\n throw new RangeError(`activity.timeline.vault.noteTemplate: ${(err as Error).message}`);\n }\n }\n\n const publish = parseVaultPublishBlock(vault.publish, weeklyNotePath);\n const wikilinksRaw = vault.wikilinks;\n const wikilinks =\n wikilinksRaw === undefined\n ? { places: false, placesFolder: \"Places\" }\n : parseVaultWikilinks(wikilinksRaw);\n const propertiesRaw = vault.properties;\n const properties: ActivityTimelineVaultConfig[\"properties\"] =\n propertiesRaw === undefined ? { mode: \"off\", prefix: \"remnic_\" } : parseVaultProperties(propertiesRaw);\n const readbackRaw = vault.readback;\n if (readbackRaw !== undefined && (typeof readbackRaw !== \"object\" || readbackRaw === null || Array.isArray(readbackRaw))) {\n throw new TypeError(\"activity.timeline.vault.readback must be an object\");\n }\n const readbackJournalSection = optionalNonEmptyString(\n (readbackRaw as Record<string, unknown> | undefined)?.journalSection,\n \"activity.timeline.vault.readback.journalSection\",\n );\n const readback = {\n journalSection: readbackJournalSection ?? \"\",\n };\n\n return {\n enabled,\n vaultPath,\n dailyNotePath,\n weeklyNotePath,\n createMissingNotes,\n noteTemplate,\n sectionStrategy,\n publish,\n insertUnderHeading,\n readback,\n wikilinks,\n properties,\n autoPublish,\n };\n}\n\nfunction defaultVaultConfig(): ActivityTimelineVaultConfig {\n return {\n enabled: false,\n vaultPath: \"\",\n dailyNotePath: \"{yyyy}-{MM}-{dd}.md\",\n weeklyNotePath: \"\",\n createMissingNotes: false,\n noteTemplate: \"\",\n sectionStrategy: \"markers\",\n publish: {\n timeline: { enabled: true, target: \"daily\", section: \"Timeline\" },\n standup: { enabled: false, target: \"daily\", section: \"Standup\" },\n weekly: { enabled: false, target: \"weekly\", section: \"Weekly Review\" },\n locations: { enabled: false, target: \"daily\", section: \"Locations\" },\n },\n insertUnderHeading: \"\",\n wikilinks: { places: false, placesFolder: \"Places\" },\n properties: { mode: \"off\", prefix: \"remnic_\" },\n autoPublish: true,\n readback: { journalSection: \"\" },\n };\n}\n\nfunction requireBool(value: unknown, key: string, fallback: boolean): boolean {\n const coerced = coerceBooleanLike(value, key);\n if (value === undefined) return fallback;\n if (coerced === undefined) {\n throw new TypeError(`${key} must be a boolean`);\n }\n return coerced;\n}\n\nfunction optionalNonEmptyString(value: unknown, key: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") {\n throw new TypeError(`${key} must be a string`);\n }\n return value;\n}\n\nfunction parseVaultPublishBlock(\n raw: unknown,\n weeklyNotePath: string,\n): ActivityTimelineVaultConfig[\"publish\"] {\n const defaults = defaultVaultConfig().publish;\n if (raw === undefined) return defaults;\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.vault.publish must be an object\");\n }\n const block = raw as Record<string, unknown>;\n // Each kind is read at its literal path so the config-contract extractor\n // can attribute publish.<kind>.<leaf> to real parse sites (§40).\n const publish = {\n timeline: parseVaultTarget(block.timeline, \"timeline\", defaults.timeline, weeklyNotePath),\n standup: parseVaultTarget(block.standup, \"standup\", defaults.standup, weeklyNotePath),\n weekly: parseVaultTarget(block.weekly, \"weekly\", defaults.weekly, weeklyNotePath),\n locations: parseVaultTarget(block.locations, \"locations\", defaults.locations, weeklyNotePath),\n };\n for (const targetFile of [\"daily\", \"weekly\"] as const) {\n const sections = ([\"timeline\", \"standup\", \"weekly\", \"locations\"] as const)\n .filter((kind) => publish[kind].target === targetFile && publish[kind].enabled)\n .map((kind) => publish[kind].section);\n const duplicates = sections.filter((section, index) => sections.indexOf(section) !== index);\n if (duplicates.length > 0) {\n throw new RangeError(\n `activity.timeline.vault.publish section names must be unique per target file; duplicate ${targetFile} section(s): ${[...new Set(duplicates)].join(\", \")}`,\n );\n }\n }\n return publish;\n}\n\nfunction parseVaultTarget(\n raw: unknown,\n kind: string,\n fallback: ActivityTimelineVaultTargetConfig,\n weeklyNotePath: string,\n): ActivityTimelineVaultTargetConfig {\n if (raw === undefined) return fallback;\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(`activity.timeline.vault.publish.${kind} must be an object`);\n }\n const entry = raw as Record<string, unknown>;\n const enabled = requireBool(entry.enabled, `activity.timeline.vault.publish.${kind}.enabled`, fallback.enabled);\n const target = entry.target === undefined ? fallback.target : entry.target;\n if (target !== \"daily\" && target !== \"weekly\") {\n throw new RangeError(`activity.timeline.vault.publish.${kind}.target must be one of \"daily\", \"weekly\"`);\n }\n const section = entry.section === undefined ? fallback.section : entry.section;\n if (typeof section !== \"string\" || section.trim().length === 0 || section !== section.trim()) {\n throw new RangeError(`activity.timeline.vault.publish.${kind}.section must be a non-empty trimmed string`);\n }\n // The accepted config domain must equal what the publisher accepts: a name\n // containing `-->` or a line break passes the trimmed-string check above\n // but is rejected downstream by `publishVaultNote`, which would turn an\n // apparently valid config into a runtime failure.\n if (!validateRegionName(section).ok) {\n throw new RangeError(\n `activity.timeline.vault.publish.${kind}.section must not contain a line break or \"-->\"`,\n );\n }\n // The path is required only by an entry that will actually publish to the\n // weekly file; a disabled entry must load the same whether its object is\n // explicit (serialized schema default) or omitted entirely.\n if (enabled && target === \"weekly\" && weeklyNotePath.length === 0) {\n throw new RangeError(\n `activity.timeline.vault.publish.${kind}.target is \"weekly\" but activity.timeline.vault.weeklyNotePath is empty; configure weeklyNotePath first`,\n );\n }\n return { enabled, target, section };\n}\n\nfunction parseVaultWikilinks(raw: unknown): ActivityTimelineVaultConfig[\"wikilinks\"] {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.vault.wikilinks must be an object\");\n }\n const block = raw as Record<string, unknown>;\n const places = requireBool(block.places, \"activity.timeline.vault.wikilinks.places\", false);\n const placesFolder =\n optionalNonEmptyString(block.placesFolder, \"activity.timeline.vault.wikilinks.placesFolder\") ?? \"Places\";\n return { places, placesFolder };\n}\n\nfunction parseVaultProperties(raw: unknown): ActivityTimelineVaultConfig[\"properties\"] {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.vault.properties must be an object\");\n }\n const block = raw as Record<string, unknown>;\n const mode = block.mode === undefined ? \"off\" : block.mode;\n if (mode !== \"off\" && mode !== \"frontmatter\" && mode !== \"dataview-inline\") {\n throw new RangeError(\n 'activity.timeline.vault.properties.mode must be one of \"off\", \"frontmatter\", \"dataview-inline\"',\n );\n }\n const prefix = optionalNonEmptyString(block.prefix, \"activity.timeline.vault.properties.prefix\") ?? \"remnic_\";\n if (prefix.trim().length === 0 || prefix !== prefix.trim()) {\n throw new RangeError(\"activity.timeline.vault.properties.prefix must be non-empty and trimmed\");\n }\n return { mode, prefix };\n}\n\nfunction parseTimelineJournalConfig(raw: unknown): ActivityTimelineJournalConfig {\n if (raw === undefined) return { enabled: false, source: \"memoryDir\", extractionMode: \"off\" };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.journal must be an object\");\n }\n const journal = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(journal.enabled, \"activity.timeline.journal.enabled\");\n if (journal.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.journal.enabled must be a boolean\");\n }\n const source = journal.source === undefined ? \"memoryDir\" : typeof journal.source === \"string\" ? journal.source : \"\";\n const resolved = resolveJournalSource({ source });\n if (!resolved.ok) {\n throw new RangeError('activity.timeline.journal.source must be one of \"memoryDir\", \"vault\"');\n }\n if (resolved.deprecatedAlias === \"file\") {\n process.emitWarning(\n 'activity.timeline.journal.source \"file\" is deprecated; use \"memoryDir\".',\n { type: \"DeprecationWarning\", code: \"REMNIC_DEP_JOURNAL_SOURCE_FILE\" },\n );\n }\n const extractionMode = journal.extractionMode === undefined ? \"off\" : journal.extractionMode;\n if (extractionMode !== \"off\" && extractionMode !== \"review\") {\n throw new RangeError('activity.timeline.journal.extractionMode must be one of \"off\", \"review\"');\n }\n return { enabled: enabledValue ?? false, source: resolved.mode, extractionMode };\n}\n\nfunction parseTimelineQaConfig(raw: unknown): ActivityTimelineQaConfig {\n if (raw === undefined) return { enabled: false, maxRangeDays: 31 };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.qa must be an object\");\n }\n const qa = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(qa.enabled, \"activity.timeline.qa.enabled\");\n if (qa.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.qa.enabled must be a boolean\");\n }\n const maxRangeDaysValue = coerceNumber(qa.maxRangeDays, \"activity.timeline.qa.maxRangeDays\");\n if (qa.maxRangeDays !== undefined && maxRangeDaysValue === undefined) {\n throw new TypeError(\"activity.timeline.qa.maxRangeDays must be an integer from 1 to 366\");\n }\n const maxRangeDays = maxRangeDaysValue ?? 31;\n if (!Number.isInteger(maxRangeDays) || maxRangeDays < 1 || maxRangeDays > 366) {\n throw new RangeError(\"activity.timeline.qa.maxRangeDays must be an integer from 1 to 366\");\n }\n return { enabled: enabledValue ?? false, maxRangeDays };\n}\n\n","/**\n * Normalize a journal section heading (issue #1987 leftover).\n *\n * Trim. Empty is empty_heading. Newline is invalid_heading.\n */\n\nexport type NormalizeJournalHeadingResult =\n | { ok: true; heading: string }\n | { ok: false; error: \"empty_heading\" | \"invalid_heading\" };\n\nexport function normalizeJournalHeading(value: string): NormalizeJournalHeadingResult {\n const heading = value.trim();\n if (heading.length === 0) return { ok: false, error: \"empty_heading\" };\n if (heading.includes(\"\\n\") || heading.includes(\"\\r\")) {\n return { ok: false, error: \"invalid_heading\" };\n }\n return { ok: true, heading };\n}\n\n/**\n * Legacy `activity.timeline.journal.heading` → `vault.readback.journalSection`.\n * The new key wins when both are present; the legacy key is still validated.\n */\nexport function applyLegacyJournalHeading(input: {\n journalSection: string;\n heading: unknown;\n}): { journalSection: string; usedLegacyHeading: boolean; ignoredLegacyHeading: boolean } {\n if (input.heading === undefined) {\n return { journalSection: input.journalSection, usedLegacyHeading: false, ignoredLegacyHeading: false };\n }\n if (typeof input.heading !== \"string\") {\n throw new TypeError(\"activity.timeline.journal.heading must be a string\");\n }\n const normalized = normalizeJournalHeading(input.heading);\n if (!normalized.ok) {\n throw new RangeError(\n normalized.error === \"empty_heading\"\n ? \"activity.timeline.journal.heading must be a non-empty string\"\n : \"activity.timeline.journal.heading must not contain a newline\",\n );\n }\n if (input.journalSection.trim().length > 0) {\n return {\n journalSection: input.journalSection,\n usedLegacyHeading: false,\n ignoredLegacyHeading: true,\n };\n }\n return {\n journalSection: normalized.heading,\n usedLegacyHeading: true,\n ignoredLegacyHeading: false,\n };\n}\n","/**\n * Resolve journal source mode (issue #1987).\n *\n * Pure. `memoryDir` mode reads `<memoryDir>/journal/<date>.md` (#1984\n * behavior, the default); `vault` mode reads the configured section of\n * the vault daily note. The heading is NOT resolved here — vault\n * prerequisites (vault.enabled, dailyNotePath, readback.journalSection)\n * are checked by journal-vault-prereq.ts at config parse time.\n *\n * Legacy `source: \"file\"` is accepted as an alias of `memoryDir` and\n * flagged so config parse can emit a deprecation warning.\n */\n\nexport type JournalSource = \"memoryDir\" | \"vault\";\n\nconst JOURNAL_SOURCES: readonly JournalSource[] = [\"memoryDir\", \"vault\"];\n\nexport type JournalSourceResult =\n | { ok: true; mode: JournalSource; deprecatedAlias?: \"file\" }\n | { ok: false; error: \"unknown_source\" };\n\nexport function resolveJournalSource(input: { source: string }): JournalSourceResult {\n if (input.source === \"file\") {\n return { ok: true, mode: \"memoryDir\", deprecatedAlias: \"file\" };\n }\n if ((JOURNAL_SOURCES as readonly string[]).includes(input.source)) {\n return { ok: true, mode: input.source as JournalSource };\n }\n return { ok: false, error: \"unknown_source\" };\n}\n"],"mappings":"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","names":["result","path","path"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runLocationSync
3
- } from "./chunk-TEYN7ZYF.js";
3
+ } from "./chunk-4WCNPQQ5.js";
4
4
  import {
5
5
  log
6
6
  } from "./chunk-3WCASNQZ.js";
@@ -58,4 +58,4 @@ export {
58
58
  LOCATION_SYNC_DEFAULT_INTERVAL_MS,
59
59
  startLocationAutoSync
60
60
  };
61
- //# sourceMappingURL=chunk-RBGREYVJ.js.map
61
+ //# sourceMappingURL=chunk-5QBDLMGG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RECALL_DISCLOSURE_LEVELS
3
- } from "./chunk-SO7SV523.js";
3
+ } from "./chunk-Q6LCCIZN.js";
4
4
 
5
5
  // src/recall-navigate.ts
6
6
  var RECALL_NAV_LINK_TYPES = [
@@ -48,4 +48,4 @@ export {
48
48
  expandRecallNode,
49
49
  traverseRecallLink
50
50
  };
51
- //# sourceMappingURL=chunk-RKBLRTNT.js.map
51
+ //# sourceMappingURL=chunk-5SDSVX7N.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
3
3
  SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
4
- } from "./chunk-Z4PCVRTN.js";
4
+ } from "./chunk-5A7ZUOBA.js";
5
5
  import {
6
6
  SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
7
- } from "./chunk-EEOUMG3J.js";
7
+ } from "./chunk-PWPIERBM.js";
8
8
 
9
9
  // src/support-passport/model-bridge.ts
10
10
  import { randomUUID } from "crypto";
@@ -343,4 +343,4 @@ export {
343
343
  parseSupportPassportModelJob,
344
344
  SupportPassportModelBridge
345
345
  };
346
- //# sourceMappingURL=chunk-LPECRQO4.js.map
346
+ //# sourceMappingURL=chunk-5THU7NFP.js.map
@@ -6,6 +6,9 @@ var VALID_CODEX_CLI_REASONING_EFFORTS = /* @__PURE__ */ new Set([
6
6
  "xhigh"
7
7
  ]);
8
8
  var processRunner;
9
+ function isCodexCliFallbackRunnerRegistered() {
10
+ return processRunner !== void 0;
11
+ }
9
12
  function setCodexCliFallbackRunnerForProcess(runner) {
10
13
  const previous = processRunner;
11
14
  processRunner = runner;
@@ -77,8 +80,10 @@ var __codexCliFallbackTestHooks = {
77
80
  };
78
81
 
79
82
  export {
83
+ isCodexCliFallbackRunnerRegistered,
80
84
  setCodexCliFallbackRunnerForProcess,
81
85
  callCodexCliFallback,
86
+ normalizeCodexCliTimeoutMs,
82
87
  __codexCliFallbackTestHooks
83
88
  };
84
- //# sourceMappingURL=chunk-N7RWREIQ.js.map
89
+ //# sourceMappingURL=chunk-65RENJGB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-fallback.ts"],"sourcesContent":["import type { CodexCliReasoningEffort } from \"./types.js\";\n\nexport interface CodexCliFallbackMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface CodexCliFallbackConfig {\n apiKey?: string | Record<string, unknown>;\n executable?: unknown;\n codexCliExecutable?: unknown;\n reasoningEffort?: unknown;\n codexCliReasoningEffort?: unknown;\n retryOptions?: {\n timeoutMs?: unknown;\n };\n}\n\nexport interface CodexCliFallbackOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface CodexCliFallbackResult {\n content: string;\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n };\n}\n\nexport interface CodexCliFallbackRequest {\n config: CodexCliFallbackConfig;\n modelId: string;\n messages: CodexCliFallbackMessage[];\n options: CodexCliFallbackOptions;\n}\n\nexport type CodexCliFallbackRunner = (\n request: CodexCliFallbackRequest,\n) => Promise<CodexCliFallbackResult>;\n\nconst VALID_CODEX_CLI_REASONING_EFFORTS = new Set<CodexCliReasoningEffort>([\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n]);\n\nlet processRunner: CodexCliFallbackRunner | undefined;\n\n/**\n * True when a process-local Codex CLI transport is registered. Lets a default\n * runner (codex-subscription) register only when no host/benchmark runner has\n * claimed the seam, so explicit registrations always win.\n */\nexport function isCodexCliFallbackRunnerRegistered(): boolean {\n return processRunner !== undefined;\n}\n\n/**\n * Registers the process-local Codex CLI transport. Core itself stays free of\n * child_process here; hosts and benchmark runtimes opt in, and the\n * codex-subscription module registers a subprocess runner on demand.\n */\nexport function setCodexCliFallbackRunnerForProcess(\n runner: CodexCliFallbackRunner | undefined,\n): () => void {\n const previous = processRunner;\n processRunner = runner;\n return () => {\n processRunner = previous;\n };\n}\n\nexport async function callCodexCliFallback(\n config: CodexCliFallbackConfig,\n modelId: string,\n messages: CodexCliFallbackMessage[],\n options: CodexCliFallbackOptions = {},\n): Promise<CodexCliFallbackResult> {\n if (!processRunner) {\n throw new Error(\n 'codex-cli fallback transport is not registered; install a runner with setCodexCliFallbackRunnerForProcess() before using api: \"codex-cli\"',\n );\n }\n\n return await processRunner({\n config: normalizeCodexCliFallbackConfig(config),\n modelId: normalizeCodexCliModel(modelId),\n messages,\n options: normalizeCodexCliFallbackOptions(options),\n });\n}\n\nfunction normalizeCodexCliFallbackConfig(\n config: CodexCliFallbackConfig,\n): CodexCliFallbackConfig {\n return {\n ...config,\n ...(config.executable !== undefined\n ? { executable: normalizeOptionalString(config.executable, \"codex-cli executable\") }\n : {}),\n ...(config.codexCliExecutable !== undefined\n ? { codexCliExecutable: normalizeOptionalString(config.codexCliExecutable, \"codex-cli executable\") }\n : {}),\n ...(config.reasoningEffort !== undefined\n ? { reasoningEffort: normalizeCodexCliReasoningEffort(config.reasoningEffort) }\n : {}),\n ...(config.codexCliReasoningEffort !== undefined\n ? { codexCliReasoningEffort: normalizeCodexCliReasoningEffort(config.codexCliReasoningEffort) }\n : {}),\n ...(config.retryOptions?.timeoutMs !== undefined\n ? { retryOptions: { timeoutMs: normalizeCodexCliTimeoutMs(config.retryOptions.timeoutMs) } }\n : {}),\n };\n}\n\nfunction normalizeCodexCliFallbackOptions(\n options: CodexCliFallbackOptions,\n): CodexCliFallbackOptions {\n return {\n ...(options.timeoutMs !== undefined\n ? { timeoutMs: normalizeCodexCliTimeoutMs(options.timeoutMs) }\n : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n };\n}\n\nfunction normalizeOptionalString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string`);\n }\n return value.trim();\n}\n\nfunction normalizeCodexCliModel(value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new Error(\"codex-cli model must be a non-empty string\");\n }\n return trimmed;\n}\n\nfunction normalizeCodexCliReasoningEffort(value: unknown): CodexCliReasoningEffort {\n if (typeof value !== \"string\") {\n throw new Error(\"codex-cli reasoningEffort must be one of low, medium, high, xhigh\");\n }\n const normalized = value.trim().toLowerCase();\n if (VALID_CODEX_CLI_REASONING_EFFORTS.has(normalized as CodexCliReasoningEffort)) {\n return normalized as CodexCliReasoningEffort;\n }\n throw new Error(\"codex-cli reasoningEffort must be one of low, medium, high, xhigh\");\n}\n\nexport function normalizeCodexCliTimeoutMs(value: unknown): number {\n const parsed = typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim().length > 0\n ? Number(value)\n : NaN;\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(\"codex-cli timeoutMs must be a positive integer\");\n }\n return parsed;\n}\n\nexport const __codexCliFallbackTestHooks = {\n setRunCodexCliForTest: setCodexCliFallbackRunnerForProcess,\n};\n"],"mappings":";AA2CA,IAAM,oCAAoC,oBAAI,IAA6B;AAAA,EACzE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAI;AAOG,SAAS,qCAA8C;AAC5D,SAAO,kBAAkB;AAC3B;AAOO,SAAS,oCACd,QACY;AACZ,QAAM,WAAW;AACjB,kBAAgB;AAChB,SAAO,MAAM;AACX,oBAAgB;AAAA,EAClB;AACF;AAEA,eAAsB,qBACpB,QACA,SACA,UACA,UAAmC,CAAC,GACH;AACjC,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,cAAc;AAAA,IACzB,QAAQ,gCAAgC,MAAM;AAAA,IAC9C,SAAS,uBAAuB,OAAO;AAAA,IACvC;AAAA,IACA,SAAS,iCAAiC,OAAO;AAAA,EACnD,CAAC;AACH;AAEA,SAAS,gCACP,QACwB;AACxB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,OAAO,eAAe,SACtB,EAAE,YAAY,wBAAwB,OAAO,YAAY,sBAAsB,EAAE,IACjF,CAAC;AAAA,IACL,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,wBAAwB,OAAO,oBAAoB,sBAAsB,EAAE,IACjG,CAAC;AAAA,IACL,GAAI,OAAO,oBAAoB,SAC3B,EAAE,iBAAiB,iCAAiC,OAAO,eAAe,EAAE,IAC5E,CAAC;AAAA,IACL,GAAI,OAAO,4BAA4B,SACnC,EAAE,yBAAyB,iCAAiC,OAAO,uBAAuB,EAAE,IAC5F,CAAC;AAAA,IACL,GAAI,OAAO,cAAc,cAAc,SACnC,EAAE,cAAc,EAAE,WAAW,2BAA2B,OAAO,aAAa,SAAS,EAAE,EAAE,IACzF,CAAC;AAAA,EACP;AACF;AAEA,SAAS,iCACP,SACyB;AACzB,SAAO;AAAA,IACL,GAAI,QAAQ,cAAc,SACtB,EAAE,WAAW,2BAA2B,QAAQ,SAAS,EAAE,IAC3D,CAAC;AAAA,IACL,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,EACrD;AACF;AAEA,SAAS,wBAAwB,OAAgB,OAAuB;AACtE,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAC1D,UAAM,IAAI,MAAM,GAAG,KAAK,6BAA6B;AAAA,EACvD;AACA,SAAO,MAAM,KAAK;AACpB;AAEA,SAAS,uBAAuB,OAAuB;AACrD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,GAAG;AACxB,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,iCAAiC,OAAyC;AACjF,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,kCAAkC,IAAI,UAAqC,GAAG;AAChF,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,mEAAmE;AACrF;AAEO,SAAS,2BAA2B,OAAwB;AACjE,QAAM,SAAS,OAAO,UAAU,WAC5B,QACA,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IACjD,OAAO,KAAK,IACZ;AACN,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AACxE,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAEO,IAAM,8BAA8B;AAAA,EACzC,uBAAuB;AACzB;","names":[]}
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-NHLLKEKK.js";
12
12
  import {
13
13
  parseConfig
14
- } from "./chunk-SQJ3SDIW.js";
14
+ } from "./chunk-SZWEDG3H.js";
15
15
  import {
16
16
  resolveObjectiveStateStoreDir,
17
17
  validateObjectiveStateSnapshot
@@ -268,4 +268,4 @@ export {
268
268
  recordResumeBundle,
269
269
  getResumeBundleStatus
270
270
  };
271
- //# sourceMappingURL=chunk-LWA7MDVO.js.map
271
+ //# sourceMappingURL=chunk-6CCRSQWT.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-Z4PCVRTN.js";
5
+ } from "./chunk-5A7ZUOBA.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-TIT2C6WX.js.map
140
+ //# sourceMappingURL=chunk-6XYC7NM4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSearchBackend
3
- } from "./chunk-7VJXIDOC.js";
3
+ } from "./chunk-4JVQRFZD.js";
4
4
  import {
5
5
  namespaceIdentityToken,
6
6
  normalizeNamespaceIdentity
@@ -470,4 +470,4 @@ export {
470
470
  NamespaceSearchRouter,
471
471
  normalizeQmdResultPath
472
472
  };
473
- //# sourceMappingURL=chunk-FHQSPTPZ.js.map
473
+ //# sourceMappingURL=chunk-6YAIN5XJ.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "./chunk-ROKKIMON.js";
3
+ } from "./chunk-EJIEQOPB.js";
4
4
  import {
5
5
  namespaceCollectionName
6
- } from "./chunk-FHQSPTPZ.js";
6
+ } from "./chunk-6YAIN5XJ.js";
7
7
  import {
8
8
  isSafeRouteNamespace
9
9
  } from "./chunk-PCXDUHQH.js";
@@ -213,4 +213,4 @@ export {
213
213
  verifyNamespaces,
214
214
  runNamespaceMigration
215
215
  };
216
- //# sourceMappingURL=chunk-PV36INNL.js.map
216
+ //# sourceMappingURL=chunk-757NP436.js.map