@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,1280 @@
1
+ import {
2
+ assertValidTimezone,
3
+ isValidActivityDate
4
+ } from "./chunk-353C5UNV.js";
5
+ import {
6
+ extractJsonCandidates
7
+ } from "./chunk-RGMVMVMF.js";
8
+ import {
9
+ coerceBooleanLike,
10
+ coerceNumber
11
+ } from "./chunk-PQVCH2AE.js";
12
+ import {
13
+ log
14
+ } from "./chunk-3WCASNQZ.js";
15
+
16
+ // src/activity/journal-vault-prereq.ts
17
+ var VAULT_JOURNAL_PREREQUISITES = [
18
+ "vault.enabled",
19
+ "vault.dailyNotePath",
20
+ "vault.readback.journalSection"
21
+ ];
22
+ function checkVaultJournalPrerequisites(input) {
23
+ const missing = [];
24
+ if (input.vaultEnabled !== true) missing.push("vault.enabled");
25
+ if (typeof input.dailyNotePath !== "string" || input.dailyNotePath.trim().length === 0) {
26
+ missing.push("vault.dailyNotePath");
27
+ }
28
+ if (typeof input.journalSection !== "string" || input.journalSection.trim().length === 0) {
29
+ missing.push("vault.readback.journalSection");
30
+ }
31
+ if (missing.length === 0) return { ok: true };
32
+ return {
33
+ ok: false,
34
+ missing,
35
+ message: `vault journal read-back prerequisites unmet: ${missing.join(", ")}`
36
+ };
37
+ }
38
+
39
+ // src/activity/vault-path.ts
40
+ import path from "path";
41
+ var VAULT_TEMPLATE_TOKENS = [
42
+ "{yyyy}",
43
+ "{yy}",
44
+ "{M}",
45
+ "{MM}",
46
+ "{d}",
47
+ "{dd}",
48
+ "{ww}",
49
+ "{MMM}",
50
+ "{MMMM}",
51
+ "{ddd}",
52
+ "{dddd}"
53
+ ];
54
+ var TOKEN_LOOKUP = Object.fromEntries(VAULT_TEMPLATE_TOKENS.map((t) => [t, true]));
55
+ var ANY_BRACED_RE = /\{[^{}]*\}/g;
56
+ var MONTH_NAMES = [
57
+ "January",
58
+ "February",
59
+ "March",
60
+ "April",
61
+ "May",
62
+ "June",
63
+ "July",
64
+ "August",
65
+ "September",
66
+ "October",
67
+ "November",
68
+ "December"
69
+ ];
70
+ var WEEKDAY_NAMES = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
71
+ function templateValues(date) {
72
+ const [yyyy, mm, dd] = date.split("-");
73
+ const monthIndex = Number(mm) - 1;
74
+ const weekday = new Date(Date.UTC(Number(yyyy), monthIndex, Number(dd))).getUTCDay();
75
+ return {
76
+ "{yyyy}": yyyy,
77
+ "{yy}": yyyy.slice(2),
78
+ "{MM}": mm,
79
+ "{dd}": dd,
80
+ "{M}": String(Number(mm)),
81
+ "{d}": String(Number(dd)),
82
+ "{ww}": isoWeekNumber(date),
83
+ "{MMM}": MONTH_NAMES[monthIndex].slice(0, 3),
84
+ "{MMMM}": MONTH_NAMES[monthIndex],
85
+ "{ddd}": WEEKDAY_NAMES[weekday].slice(0, 3),
86
+ "{dddd}": WEEKDAY_NAMES[weekday]
87
+ };
88
+ }
89
+ function expandVaultTemplateTokens(text, date) {
90
+ if (!isValidActivityDate(date)) {
91
+ throw new RangeError(`Invalid vault date "${date}"; expected YYYY-MM-DD.`);
92
+ }
93
+ if (typeof text !== "string" || text.length === 0) {
94
+ throw new RangeError("Vault template must be a non-empty string.");
95
+ }
96
+ const values = templateValues(date);
97
+ return text.replace(ANY_BRACED_RE, (token) => {
98
+ if (TOKEN_LOOKUP[token] === true) return values[token];
99
+ throw new RangeError(
100
+ `Unknown vault template token ${token}; valid tokens are ${VAULT_TEMPLATE_TOKENS.join(" ")}.`
101
+ );
102
+ });
103
+ }
104
+ function validateVaultNoteTemplate(template) {
105
+ if (typeof template !== "string" || template.length === 0) {
106
+ throw new RangeError("Vault note path template must be a non-empty relative path.");
107
+ }
108
+ if (path.posix.isAbsolute(template) || path.win32.isAbsolute(template)) {
109
+ throw new RangeError("Vault note path template must be relative; absolute templates are rejected.");
110
+ }
111
+ if (template.split(/[\\/]/).some((segment) => segment === "..")) {
112
+ throw new RangeError("Vault note path template must not contain `..` segments.");
113
+ }
114
+ expandVaultTemplateTokens(template, "2026-01-04");
115
+ }
116
+ function resolveVaultNotePath(template, date, options) {
117
+ if (!isValidActivityDate(date)) {
118
+ throw new RangeError(`Invalid vault date "${date}"; expected YYYY-MM-DD.`);
119
+ }
120
+ if (options?.timezone !== void 0) {
121
+ assertValidTimezone(options.timezone);
122
+ }
123
+ validateVaultNoteTemplate(template);
124
+ const expanded = expandVaultTemplateTokens(template, date);
125
+ if (path.posix.isAbsolute(expanded) || path.win32.isAbsolute(expanded)) {
126
+ throw new RangeError("Vault note path template must be relative; absolute templates are rejected.");
127
+ }
128
+ return expanded;
129
+ }
130
+ function isoWeekNumber(date) {
131
+ const [year, month, day] = date.split("-").map(Number);
132
+ const utc = new Date(Date.UTC(year, month - 1, day));
133
+ const dayNum = utc.getUTCDay() || 7;
134
+ utc.setUTCDate(utc.getUTCDate() + 4 - dayNum);
135
+ const yearStart = new Date(Date.UTC(utc.getUTCFullYear(), 0, 1));
136
+ const weekNo = Math.ceil(((utc.getTime() - yearStart.getTime()) / 864e5 + 1) / 7);
137
+ return String(weekNo).padStart(2, "0");
138
+ }
139
+
140
+ // src/activity/vault-region.ts
141
+ function validateRegionName(name) {
142
+ if (typeof name !== "string") {
143
+ return { ok: false, error: "invalid_name" };
144
+ }
145
+ if (name.includes("\n") || name.includes("\r") || name.includes("-->") || name.includes(":")) {
146
+ return { ok: false, error: "invalid_name" };
147
+ }
148
+ const trimmed = name.trim();
149
+ if (trimmed.length === 0) {
150
+ return { ok: false, error: "invalid_name" };
151
+ }
152
+ return { ok: true, name: trimmed };
153
+ }
154
+
155
+ // src/activity/timeline/analysis-failure.ts
156
+ var ANALYSIS_FAILURE_KINDS = [
157
+ "provider_unavailable",
158
+ "timeout",
159
+ "aborted",
160
+ "rate_limited",
161
+ "malformed_json",
162
+ "invalid_schema",
163
+ "partial_output",
164
+ "invalid_config"
165
+ ];
166
+ var RETRYABLE_BY_KIND = {
167
+ provider_unavailable: true,
168
+ timeout: true,
169
+ rate_limited: true,
170
+ aborted: false,
171
+ malformed_json: false,
172
+ invalid_schema: false,
173
+ partial_output: false,
174
+ invalid_config: false
175
+ };
176
+ function isAnalysisFailureKind(value) {
177
+ return typeof value === "string" && ANALYSIS_FAILURE_KINDS.includes(value);
178
+ }
179
+ function classifyAnalysisFailure(kind) {
180
+ if (!isAnalysisFailureKind(kind)) {
181
+ throw new TypeError(
182
+ `unknown analysis failure kind: ${String(kind)}; allowed kinds: ${ANALYSIS_FAILURE_KINDS.join(", ")}`
183
+ );
184
+ }
185
+ return {
186
+ kind,
187
+ retryable: RETRYABLE_BY_KIND[kind],
188
+ preservesDeterministic: true
189
+ };
190
+ }
191
+
192
+ // src/activity/timeline/analysis-provider.ts
193
+ var TimelineAnalysisProviderError = class extends Error {
194
+ constructor(kind, message) {
195
+ super(message);
196
+ this.kind = kind;
197
+ }
198
+ kind;
199
+ name = "TimelineAnalysisProviderError";
200
+ };
201
+ var TIMELINE_ANALYSIS_LOCAL_PROVIDER_ID = "local";
202
+ var RATE_LIMIT_MESSAGE = /rate limit|too many requests/i;
203
+ function classifyAnalysisProviderError(error) {
204
+ if (error instanceof TimelineAnalysisProviderError) return error.kind;
205
+ if (error instanceof Error) {
206
+ if (error.name === "AbortError" || "code" in error && error.code === "ABORT_ERR") {
207
+ return "aborted";
208
+ }
209
+ if (error.name === "TimeoutError") return "timeout";
210
+ const status = "status" in error ? error.status : "statusCode" in error ? error.statusCode : void 0;
211
+ if (status === 429 || RATE_LIMIT_MESSAGE.test(error.message)) return "rate_limited";
212
+ }
213
+ return "provider_unavailable";
214
+ }
215
+ function timelineAnalysisCompleteFromClients(input) {
216
+ const { localLlm, remoteLlm } = input;
217
+ return async ({ prompt, provider, model, signal }) => {
218
+ const messages = [{ role: "user", content: prompt }];
219
+ if (provider === TIMELINE_ANALYSIS_LOCAL_PROVIDER_ID) {
220
+ if (!localLlm) {
221
+ throw new TimelineAnalysisProviderError(
222
+ "provider_unavailable",
223
+ "timeline analysis local provider is not configured"
224
+ );
225
+ }
226
+ const result2 = await localLlm.chatCompletion(messages, {
227
+ temperature: 0,
228
+ maxTokens: 2048,
229
+ signal,
230
+ operation: "timeline-analysis",
231
+ redactProviderErrors: true,
232
+ model
233
+ });
234
+ if (result2 === null) {
235
+ throw new TimelineAnalysisProviderError(
236
+ "provider_unavailable",
237
+ "timeline analysis local provider returned no completion"
238
+ );
239
+ }
240
+ return result2.content;
241
+ }
242
+ if (!remoteLlm) {
243
+ throw new TimelineAnalysisProviderError(
244
+ "provider_unavailable",
245
+ "timeline analysis remote provider is not configured"
246
+ );
247
+ }
248
+ const result = await remoteLlm.chatCompletion(messages, {
249
+ temperature: 0,
250
+ maxTokens: 2048,
251
+ signal,
252
+ modelChain: { primary: `${provider}/${model}` },
253
+ includeDefaultModelFallback: false,
254
+ redactProviderErrors: true
255
+ });
256
+ if (result === null) {
257
+ throw new TimelineAnalysisProviderError(
258
+ "provider_unavailable",
259
+ `timeline analysis provider "${provider}" is not configured`
260
+ );
261
+ }
262
+ return result.content;
263
+ };
264
+ }
265
+
266
+ // src/activity/timeline/categories.ts
267
+ var TIMELINE_RESERVED_UNKNOWN = "system.unknown";
268
+ var TIMELINE_RESERVED_IDLE = "system.idle";
269
+ var TIMELINE_RESERVED_PAUSE = "system.pause";
270
+ var COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;
271
+ function isTimelineCategoryId(id) {
272
+ const parts = id.split(".");
273
+ if (parts.length === 0) return false;
274
+ for (const part of parts) {
275
+ if (part.length === 0) return false;
276
+ const first = part.charCodeAt(0);
277
+ if (first < 97 || first > 122) return false;
278
+ for (let i = 1; i < part.length; i += 1) {
279
+ const code = part.charCodeAt(i);
280
+ const ok = code >= 97 && code <= 122 || code >= 48 && code <= 57 || code === 45;
281
+ if (!ok) return false;
282
+ }
283
+ }
284
+ return true;
285
+ }
286
+ var DEFAULT_TIMELINE_CATEGORIES = [
287
+ { id: "development", name: "Development", color: "#3b82f6", description: "Editors, terminals, IDEs, and code forges.", order: 10 },
288
+ { id: "communication", name: "Communication", color: "#f59e0b", description: "Mail, chat, and meetings.", order: 20 },
289
+ { id: "browsing", name: "Browsing", color: "#6366f1", description: "Web browsing without a more specific domain match.", order: 30 },
290
+ { id: "documents", name: "Documents", color: "#10b981", description: "Writing, notes, and PDFs.", order: 40 },
291
+ { id: "design", name: "Design & Media", color: "#ec4899", description: "Design, audio, and video tools.", order: 50 },
292
+ { id: "data", name: "Data & Analysis", color: "#84cc16", description: "Spreadsheets, dashboards, and databases.", order: 60 },
293
+ { id: "admin", name: "Admin", color: "#64748b", description: "File managers, settings, and system utilities.", order: 70 },
294
+ { id: "entertainment", name: "Entertainment", color: "#ef4444", description: "Video, music, and games.", order: 80 },
295
+ { id: TIMELINE_RESERVED_UNKNOWN, name: "Uncategorized", color: "#9ca3af", description: "Activity with no matching classification signal. Kept visible, never silently reassigned.", order: 990, system: true },
296
+ { id: TIMELINE_RESERVED_IDLE, name: "Idle", color: "#d1d5db", description: "Derived gap between cards where no activity was observed.", order: 991, system: true, idle: true },
297
+ { id: TIMELINE_RESERVED_PAUSE, name: "Paused", color: "#a78bfa", description: "User-declared pause interval.", order: 992, system: true }
298
+ ];
299
+ function validateTimelineCategories(categories) {
300
+ if (!Array.isArray(categories) || categories.length === 0) {
301
+ throw new RangeError("timeline categories must be a non-empty array");
302
+ }
303
+ const seen = /* @__PURE__ */ new Set();
304
+ for (const category of categories) {
305
+ if (typeof category.id !== "string" || !isTimelineCategoryId(category.id)) {
306
+ throw new RangeError(`timeline category id must be dotted kebab-case: ${String(category.id)}`);
307
+ }
308
+ if (seen.has(category.id)) {
309
+ throw new RangeError(`timeline category id must be unique: ${category.id}`);
310
+ }
311
+ seen.add(category.id);
312
+ if (typeof category.name !== "string" || category.name.length === 0) {
313
+ throw new RangeError(`timeline category ${category.id}: name must be a non-empty string`);
314
+ }
315
+ if (typeof category.color !== "string" || !COLOR_PATTERN.test(category.color)) {
316
+ throw new RangeError(`timeline category ${category.id}: color must be #RRGGBB`);
317
+ }
318
+ if (typeof category.description !== "string" || category.description.length === 0) {
319
+ throw new RangeError(`timeline category ${category.id}: description must be a non-empty string`);
320
+ }
321
+ if (!Number.isInteger(category.order)) {
322
+ throw new RangeError(`timeline category ${category.id}: order must be an integer`);
323
+ }
324
+ const isReserved = category.id === TIMELINE_RESERVED_UNKNOWN || category.id === TIMELINE_RESERVED_IDLE || category.id === TIMELINE_RESERVED_PAUSE;
325
+ if (isReserved && category.system !== true) {
326
+ throw new RangeError(`timeline category ${category.id} is reserved and must set system: true`);
327
+ }
328
+ if (!isReserved) {
329
+ if (category.id.startsWith("system.")) {
330
+ throw new RangeError(`timeline category id namespace "system." is reserved: ${category.id}`);
331
+ }
332
+ if (category.system === true || category.idle === true) {
333
+ throw new RangeError(`timeline category ${category.id}: only reserved categories may set system/idle flags`);
334
+ }
335
+ }
336
+ }
337
+ const idle = categories.find((category) => category.id === TIMELINE_RESERVED_IDLE);
338
+ if (idle !== void 0 && idle.idle !== true) {
339
+ throw new RangeError(`timeline category ${TIMELINE_RESERVED_IDLE} must set idle: true`);
340
+ }
341
+ for (const reserved of [TIMELINE_RESERVED_UNKNOWN, TIMELINE_RESERVED_IDLE, TIMELINE_RESERVED_PAUSE]) {
342
+ if (!categories.some((category) => category.id === reserved)) {
343
+ throw new RangeError(`timeline categories must include the reserved "${reserved}" category`);
344
+ }
345
+ }
346
+ }
347
+ function sortTimelineCategories(categories) {
348
+ return [...categories].sort((a, b) => a.order - b.order || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
349
+ }
350
+
351
+ // src/activity/timeline/analysis.ts
352
+ var TIMELINE_ANALYSIS_PROMPT_VERSION = 1;
353
+ var TIMELINE_ANALYSIS_BATCH_SIZE = 40;
354
+ var TIMELINE_ANALYSIS_BATCH_OVERLAP = 2;
355
+ var TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS = 15e3;
356
+ var TimelineAnalysisConfigError = class extends Error {
357
+ name = "TimelineAnalysisConfigError";
358
+ code = "invalid_config";
359
+ constructor(message) {
360
+ super(message);
361
+ }
362
+ };
363
+ var INSTRUCTIONS = [
364
+ "Use only supplied evidence.",
365
+ "Preserve chronology.",
366
+ "Do not invent people, places, or tasks.",
367
+ "Avoid productivity or emotional claims.",
368
+ "Merge adjacent activity only when the evidence justifies it.",
369
+ 'Return strict JSON: {"ops":[...]} with evidenceRange, title, summary, categoryId, confidence, uncertainty.',
370
+ "Cite evidence ranges for every op. Empty ops is a valid no-op."
371
+ ].join(" ");
372
+ function fail(status, cards, provider, model, kind) {
373
+ log.info(`timeline analysis status=${status} provider=${provider} model=${model} promptVersion=${TIMELINE_ANALYSIS_PROMPT_VERSION}`);
374
+ return {
375
+ status,
376
+ cards,
377
+ provider,
378
+ model,
379
+ promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION,
380
+ failure: classifyAnalysisFailure(kind)
381
+ };
382
+ }
383
+ function requiredToken(value, name) {
384
+ if (typeof value !== "string" || value.trim().length === 0) {
385
+ throw new TimelineAnalysisConfigError(`${name} is required`);
386
+ }
387
+ return value.trim();
388
+ }
389
+ function evidenceKeyOf(observation) {
390
+ const parsed = Date.parse(observation.capturedAtUtc);
391
+ const instant = Number.isFinite(parsed) ? new Date(parsed).toISOString() : observation.capturedAtUtc;
392
+ return `${observation.machine}|${instant}|${observation.contentHash}`;
393
+ }
394
+ function sortObservations(observations) {
395
+ return [...observations].sort((a, b) => {
396
+ const time = Date.parse(a.capturedAtUtc) - Date.parse(b.capturedAtUtc);
397
+ if (time !== 0) return time;
398
+ if (a.contentHash !== b.contentHash) return a.contentHash < b.contentHash ? -1 : 1;
399
+ return a.id - b.id;
400
+ });
401
+ }
402
+ function batchObservations(observations) {
403
+ if (observations.length === 0) return [[]];
404
+ const size = TIMELINE_ANALYSIS_BATCH_SIZE;
405
+ const overlap = TIMELINE_ANALYSIS_BATCH_OVERLAP;
406
+ const step = size - overlap;
407
+ const batches = [];
408
+ for (let start = 0; start < observations.length; start += step) {
409
+ batches.push(observations.slice(start, start + size));
410
+ if (start + size >= observations.length) break;
411
+ }
412
+ return batches;
413
+ }
414
+ function safeObservation(observation) {
415
+ return {
416
+ id: observation.id,
417
+ machine: observation.machine,
418
+ capturedAtUtc: observation.capturedAtUtc,
419
+ app: observation.app,
420
+ windowTitle: observation.windowTitle,
421
+ ...observation.browserUrl ? { browserUrl: observation.browserUrl } : {},
422
+ contentHash: observation.contentHash
423
+ };
424
+ }
425
+ function safeCard(card) {
426
+ return {
427
+ id: card.id,
428
+ kind: card.kind,
429
+ title: card.title,
430
+ summary: card.summary,
431
+ categoryId: card.categoryId,
432
+ confidence: card.confidence,
433
+ startUtc: card.startUtc,
434
+ endUtc: card.endUtc,
435
+ machine: card.machine,
436
+ evidenceIds: card.evidenceIds,
437
+ evidenceRange: card.evidenceRange,
438
+ ...card.manualEdit ? { manualEdit: card.manualEdit } : {}
439
+ };
440
+ }
441
+ function buildTimelineAnalysisPrompt(input) {
442
+ const payload = {
443
+ date: input.date ?? null,
444
+ timezone: input.timezone ?? null,
445
+ categories: input.categories.map((category) => ({ id: category.id, name: category.name })),
446
+ preferences: input.preferences ?? [],
447
+ priorEdits: input.priorEdits ?? [],
448
+ cards: input.cards.map(safeCard),
449
+ observations: input.observations.map(safeObservation)
450
+ };
451
+ return `${INSTRUCTIONS}
452
+ ${JSON.stringify(payload)}`;
453
+ }
454
+ async function callComplete(complete, prompt, provider, model, timeoutMs, parent) {
455
+ const { promise: timeoutPromise, reject } = Promise.withResolvers();
456
+ const failOnce = (message, name) => {
457
+ reject(Object.assign(new Error(message), { name }));
458
+ };
459
+ const timer = setTimeout(() => failOnce("timeline analysis timed out", "TimeoutError"), timeoutMs);
460
+ if (parent?.aborted) {
461
+ clearTimeout(timer);
462
+ throw Object.assign(new Error("timeline analysis aborted"), { name: "AbortError" });
463
+ }
464
+ const onAbort = () => failOnce("timeline analysis aborted", "AbortError");
465
+ parent?.addEventListener("abort", onAbort, { once: true });
466
+ const signal = parent ? AbortSignal.any([parent, AbortSignal.timeout(timeoutMs)]) : AbortSignal.timeout(timeoutMs);
467
+ try {
468
+ return await Promise.race([complete({ prompt, provider, model, signal }), timeoutPromise]);
469
+ } finally {
470
+ clearTimeout(timer);
471
+ parent?.removeEventListener("abort", onAbort);
472
+ }
473
+ }
474
+ function asOp(value) {
475
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
476
+ if (!("cardId" in value) || typeof value.cardId !== "string" || value.cardId.length === 0) return null;
477
+ if (!("evidenceRange" in value)) return null;
478
+ const range = value.evidenceRange;
479
+ if (!range || typeof range !== "object" || Array.isArray(range)) return null;
480
+ if (!("firstKey" in range) || typeof range.firstKey !== "string" || range.firstKey.length === 0) return null;
481
+ if (!("lastKey" in range) || typeof range.lastKey !== "string" || range.lastKey.length === 0) return null;
482
+ if ("title" in value && value.title !== void 0 && typeof value.title !== "string") return null;
483
+ if ("summary" in value && value.summary !== void 0 && typeof value.summary !== "string") return null;
484
+ if ("categoryId" in value && value.categoryId !== void 0 && typeof value.categoryId !== "string") return null;
485
+ if ("uncertainty" in value && value.uncertainty !== void 0 && typeof value.uncertainty !== "string") return null;
486
+ if ("confidence" in value && value.confidence !== void 0 && (typeof value.confidence !== "number" || value.confidence < 0 || value.confidence > 1)) {
487
+ return null;
488
+ }
489
+ return {
490
+ cardId: value.cardId,
491
+ title: "title" in value && typeof value.title === "string" ? value.title : void 0,
492
+ summary: "summary" in value && typeof value.summary === "string" ? value.summary : void 0,
493
+ categoryId: "categoryId" in value && typeof value.categoryId === "string" ? value.categoryId : void 0,
494
+ confidence: "confidence" in value && typeof value.confidence === "number" ? value.confidence : void 0,
495
+ uncertainty: "uncertainty" in value && typeof value.uncertainty === "string" ? value.uncertainty : void 0,
496
+ evidenceRange: { firstKey: range.firstKey, lastKey: range.lastKey }
497
+ };
498
+ }
499
+ function parseOps(raw) {
500
+ if (typeof raw !== "string" || raw.trim().length === 0) return { ok: false, kind: "partial_output" };
501
+ let sawParsableShape = false;
502
+ for (const candidate of extractJsonCandidates(raw)) {
503
+ try {
504
+ const parsed = JSON.parse(candidate);
505
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) continue;
506
+ if (!("ops" in parsed) || !Array.isArray(parsed.ops)) {
507
+ sawParsableShape = true;
508
+ continue;
509
+ }
510
+ const out = [];
511
+ let valid = true;
512
+ for (const item of parsed.ops) {
513
+ const op = asOp(item);
514
+ if (!op) {
515
+ valid = false;
516
+ break;
517
+ }
518
+ out.push(op);
519
+ }
520
+ if (valid) return { ok: true, ops: out };
521
+ sawParsableShape = true;
522
+ } catch {
523
+ continue;
524
+ }
525
+ }
526
+ if (sawParsableShape) return { ok: false, kind: "invalid_schema" };
527
+ return { ok: false, kind: "malformed_json" };
528
+ }
529
+ function knownEvidenceKeys(cards, observations) {
530
+ const keys = /* @__PURE__ */ new Set();
531
+ for (const observation of observations) keys.add(evidenceKeyOf(observation));
532
+ for (const card of cards) {
533
+ if (card.evidenceRange) {
534
+ keys.add(card.evidenceRange.firstKey);
535
+ keys.add(card.evidenceRange.lastKey);
536
+ }
537
+ }
538
+ return keys;
539
+ }
540
+ function applyOps(cards, ops, categories, evidenceKeys) {
541
+ if (ops.length === 0) return cards;
542
+ const byId = new Map(cards.map((card) => [card.id, card]));
543
+ const allowedCategories = new Set(categories.map((category) => category.id));
544
+ const next = /* @__PURE__ */ new Map();
545
+ for (const op of ops) {
546
+ const card = byId.get(op.cardId);
547
+ if (!card) return null;
548
+ if (!evidenceKeys.has(op.evidenceRange.firstKey) || !evidenceKeys.has(op.evidenceRange.lastKey)) return null;
549
+ if (op.categoryId !== void 0 && !allowedCategories.has(op.categoryId)) return null;
550
+ if (card.manualEdit) continue;
551
+ next.set(card.id, {
552
+ ...card,
553
+ ...op.title !== void 0 ? { title: op.title } : {},
554
+ ...op.summary !== void 0 ? { summary: op.summary } : {},
555
+ ...op.categoryId !== void 0 ? { categoryId: op.categoryId } : {},
556
+ ...op.confidence !== void 0 ? { confidence: op.confidence } : {}
557
+ });
558
+ }
559
+ if (next.size === 0) return cards;
560
+ return cards.map((card) => next.get(card.id) ?? card);
561
+ }
562
+ async function analyzeTimelineCards(input) {
563
+ const cards = input.cards;
564
+ if (!input.enabled) {
565
+ return { status: "disabled", cards };
566
+ }
567
+ const provider = requiredToken(input.provider, "provider");
568
+ const model = requiredToken(input.model, "model");
569
+ const complete = input.complete;
570
+ if (typeof complete !== "function") {
571
+ throw new TimelineAnalysisConfigError("complete is required");
572
+ }
573
+ const timeoutMs = input.timeoutMs ?? TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS;
574
+ if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {
575
+ throw new TimelineAnalysisConfigError("timeoutMs must be a positive integer");
576
+ }
577
+ if (input.cards.length === 0 && input.observations.length === 0) {
578
+ return {
579
+ status: "invalid_output",
580
+ cards,
581
+ provider,
582
+ model,
583
+ promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION
584
+ };
585
+ }
586
+ const categories = input.categories ?? DEFAULT_TIMELINE_CATEGORIES;
587
+ const ordered = sortObservations(input.observations);
588
+ const batches = batchObservations(ordered);
589
+ const merged = /* @__PURE__ */ new Map();
590
+ try {
591
+ for (const batch of batches) {
592
+ const prompt = buildTimelineAnalysisPrompt({
593
+ date: input.date,
594
+ timezone: input.timezone,
595
+ cards: input.cards,
596
+ observations: batch,
597
+ categories,
598
+ preferences: input.preferences,
599
+ priorEdits: input.priorEdits
600
+ });
601
+ const raw = await callComplete(complete, prompt, provider, model, timeoutMs, input.signal);
602
+ const parsed = parseOps(raw);
603
+ if (!parsed.ok) return fail("invalid_output", cards, provider, model, parsed.kind);
604
+ for (const op of parsed.ops) merged.set(op.cardId, op);
605
+ }
606
+ } catch (error) {
607
+ return fail("provider_failed", cards, provider, model, classifyAnalysisProviderError(error));
608
+ }
609
+ const applied = applyOps(cards, [...merged.values()], categories, knownEvidenceKeys(cards, ordered));
610
+ if (!applied) return fail("invalid_output", cards, provider, model, "invalid_schema");
611
+ log.info(`timeline analysis status=ok provider=${provider} model=${model} promptVersion=${TIMELINE_ANALYSIS_PROMPT_VERSION}`);
612
+ return {
613
+ status: "ok",
614
+ cards: applied,
615
+ provider,
616
+ model,
617
+ promptVersion: TIMELINE_ANALYSIS_PROMPT_VERSION
618
+ };
619
+ }
620
+
621
+ // src/activity/timeline/analysis-metadata.ts
622
+ var ANALYSIS_METADATA_MAX_FIELD_LENGTH = 120;
623
+ var isAnalysisIdentifier = (value) => IDENTIFIER.test(value);
624
+ var IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9._:\-\/]*$/;
625
+ var FIELD_PATTERNS = {
626
+ provider: IDENTIFIER,
627
+ model: IDENTIFIER,
628
+ promptVersion: IDENTIFIER
629
+ };
630
+ function validateMetadataField(field, value) {
631
+ if (typeof value !== "string") {
632
+ throw new RangeError(
633
+ `analysis run metadata ${field} must be a string; received ${typeof value}`
634
+ );
635
+ }
636
+ if (value.length === 0) {
637
+ throw new RangeError(`analysis run metadata ${field} must not be empty`);
638
+ }
639
+ if (value.length > ANALYSIS_METADATA_MAX_FIELD_LENGTH) {
640
+ throw new RangeError(
641
+ `analysis run metadata ${field} is too long (max ${ANALYSIS_METADATA_MAX_FIELD_LENGTH} characters)`
642
+ );
643
+ }
644
+ if (/[\n\r\u2028\u2029]/.test(value)) {
645
+ throw new RangeError(`analysis run metadata ${field} must not contain a line break`);
646
+ }
647
+ const pattern = FIELD_PATTERNS[field];
648
+ if (pattern === void 0) {
649
+ throw new RangeError(`analysis run metadata has no pattern for field ${field}`);
650
+ }
651
+ if (!pattern.test(value)) {
652
+ throw new RangeError(
653
+ `analysis run metadata ${field} must be an identifier (letters, digits, and ._:-/ only)`
654
+ );
655
+ }
656
+ return value;
657
+ }
658
+ function buildAnalysisRunMetadata(input) {
659
+ const provider = validateMetadataField("provider", input.provider);
660
+ const model = validateMetadataField("model", input.model);
661
+ const promptVersion = validateMetadataField("promptVersion", input.promptVersion);
662
+ const observationCount = input.observationCount;
663
+ if (typeof observationCount !== "number" || !Number.isInteger(observationCount) || observationCount < 0) {
664
+ throw new RangeError(
665
+ `analysis run metadata observationCount must be a non-negative integer; received ${typeof observationCount}`
666
+ );
667
+ }
668
+ return { provider, model, promptVersion, observationCount };
669
+ }
670
+
671
+ // src/activity/config.ts
672
+ import path2 from "path";
673
+
674
+ // src/activity/journal-heading.ts
675
+ function normalizeJournalHeading(value) {
676
+ const heading = value.trim();
677
+ if (heading.length === 0) return { ok: false, error: "empty_heading" };
678
+ if (heading.includes("\n") || heading.includes("\r")) {
679
+ return { ok: false, error: "invalid_heading" };
680
+ }
681
+ return { ok: true, heading };
682
+ }
683
+ function applyLegacyJournalHeading(input) {
684
+ if (input.heading === void 0) {
685
+ return { journalSection: input.journalSection, usedLegacyHeading: false, ignoredLegacyHeading: false };
686
+ }
687
+ if (typeof input.heading !== "string") {
688
+ throw new TypeError("activity.timeline.journal.heading must be a string");
689
+ }
690
+ const normalized = normalizeJournalHeading(input.heading);
691
+ if (!normalized.ok) {
692
+ throw new RangeError(
693
+ normalized.error === "empty_heading" ? "activity.timeline.journal.heading must be a non-empty string" : "activity.timeline.journal.heading must not contain a newline"
694
+ );
695
+ }
696
+ if (input.journalSection.trim().length > 0) {
697
+ return {
698
+ journalSection: input.journalSection,
699
+ usedLegacyHeading: false,
700
+ ignoredLegacyHeading: true
701
+ };
702
+ }
703
+ return {
704
+ journalSection: normalized.heading,
705
+ usedLegacyHeading: true,
706
+ ignoredLegacyHeading: false
707
+ };
708
+ }
709
+
710
+ // src/activity/journal-source.ts
711
+ var JOURNAL_SOURCES = ["memoryDir", "vault"];
712
+ function resolveJournalSource(input) {
713
+ if (input.source === "file") {
714
+ return { ok: true, mode: "memoryDir", deprecatedAlias: "file" };
715
+ }
716
+ if (JOURNAL_SOURCES.includes(input.source)) {
717
+ return { ok: true, mode: input.source };
718
+ }
719
+ return { ok: false, error: "unknown_source" };
720
+ }
721
+
722
+ // src/activity/config.ts
723
+ var EXTRACTION_MODES = ["off", "smart"];
724
+ var IMPORTANCE_LEVELS = ["critical", "high", "normal", "low", "trivial"];
725
+ var LOOPBACK_HOSTS = { localhost: true, "127.0.0.1": true, "::1": true };
726
+ function defaultActivityConfig() {
727
+ return {
728
+ enabled: false,
729
+ timezone: "UTC",
730
+ syncDays: 1,
731
+ autoSyncIntervalMinutes: 15,
732
+ sources: [],
733
+ extractionMode: "off",
734
+ sourceTrust: 0.6,
735
+ autoApproveTrust: 0.8,
736
+ reviewTrust: 0.5,
737
+ minConfidence: 0.7,
738
+ minImportance: "normal",
739
+ maxMemoriesPerDay: 0,
740
+ timeline: {
741
+ enabled: false,
742
+ analysis: parseTimelineAnalysisConfig(void 0),
743
+ journal: { enabled: false, source: "memoryDir", extractionMode: "off" },
744
+ qa: { enabled: false, maxRangeDays: 31 },
745
+ vault: parseTimelineVaultConfig(void 0)
746
+ }
747
+ };
748
+ }
749
+ function asRecord(value, name) {
750
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
751
+ throw new TypeError(`${name} must be an object`);
752
+ }
753
+ return value;
754
+ }
755
+ function optionalString(value, name) {
756
+ if (value === void 0) return void 0;
757
+ if (typeof value !== "string" || value.length === 0) throw new TypeError(`${name} must be a non-empty string`);
758
+ return value;
759
+ }
760
+ function parseUnitInterval(value, key, fallback) {
761
+ if (value === void 0) return fallback;
762
+ const parsed = coerceNumber(value);
763
+ if (parsed === void 0 || !Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
764
+ throw new RangeError(`activity.${key} must be a number in [0, 1]`);
765
+ }
766
+ return parsed;
767
+ }
768
+ function validateActivityBaseUrl(baseUrl) {
769
+ let parsed;
770
+ try {
771
+ parsed = new URL(baseUrl);
772
+ } catch {
773
+ throw new RangeError(`activity source baseUrl must be a valid URL: ${baseUrl}`);
774
+ }
775
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
776
+ throw new RangeError("activity source baseUrl must use HTTP or HTTPS");
777
+ }
778
+ const host = parsed.hostname.replace(/^\[|\]$/g, "");
779
+ if (LOOPBACK_HOSTS[host] !== true && !/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(host)) {
780
+ throw new RangeError(`activity source baseUrl must target a loopback host (got ${parsed.hostname})`);
781
+ }
782
+ return parsed;
783
+ }
784
+ function parseSource(value) {
785
+ const raw = asRecord(value, "activity source");
786
+ const machineLabel = optionalString(raw.machineLabel, "activity source machineLabel");
787
+ const baseUrl = optionalString(raw.baseUrl, "activity source baseUrl");
788
+ if (machineLabel === void 0 || baseUrl === void 0) {
789
+ throw new TypeError("activity source requires machineLabel and baseUrl");
790
+ }
791
+ if (machineLabel.trim().length === 0) {
792
+ throw new RangeError("activity source machineLabel must not be blank");
793
+ }
794
+ validateActivityBaseUrl(baseUrl);
795
+ const token = optionalString(raw.token, "activity source token");
796
+ return { machineLabel, baseUrl, ...token === void 0 ? {} : { token } };
797
+ }
798
+ function parseActivityConfig(raw) {
799
+ const defaults = defaultActivityConfig();
800
+ if (raw === void 0 || raw === null) {
801
+ return { ...defaults };
802
+ }
803
+ const config = asRecord(raw, "activity");
804
+ const enabledValue = coerceBooleanLike(config.enabled, "activity.enabled");
805
+ if (config.enabled !== void 0 && enabledValue === void 0) {
806
+ throw new TypeError("activity.enabled must be a boolean");
807
+ }
808
+ const timezone = optionalString(config.timezone, "activity.timezone") ?? "UTC";
809
+ assertValidTimezone(timezone);
810
+ const syncDaysValue = coerceNumber(config.syncDays, "activity.syncDays");
811
+ if (config.syncDays !== void 0 && syncDaysValue === void 0) {
812
+ throw new TypeError("activity.syncDays must be a finite number");
813
+ }
814
+ const syncDays = syncDaysValue ?? 1;
815
+ if (!Number.isInteger(syncDays) || syncDays < 1 || syncDays > 90) {
816
+ throw new RangeError("activity.syncDays must be an integer from 1 to 90");
817
+ }
818
+ const intervalValue = coerceNumber(config.autoSyncIntervalMinutes, "activity.autoSyncIntervalMinutes");
819
+ if (config.autoSyncIntervalMinutes !== void 0 && intervalValue === void 0) {
820
+ throw new TypeError("activity.autoSyncIntervalMinutes must be a finite number");
821
+ }
822
+ const autoSyncIntervalMinutes = intervalValue ?? 15;
823
+ if (!Number.isInteger(autoSyncIntervalMinutes) || autoSyncIntervalMinutes < 1 || autoSyncIntervalMinutes > 1440) {
824
+ throw new RangeError("activity.autoSyncIntervalMinutes must be an integer from 1 to 1440");
825
+ }
826
+ if (config.sources !== void 0 && !Array.isArray(config.sources)) {
827
+ throw new TypeError("activity.sources must be an array");
828
+ }
829
+ const sources = (config.sources ?? []).map(parseSource);
830
+ const labels = /* @__PURE__ */ new Set();
831
+ for (const source of sources) {
832
+ if (labels.has(source.machineLabel)) {
833
+ throw new RangeError(`activity source machineLabel must be unique: ${source.machineLabel}`);
834
+ }
835
+ labels.add(source.machineLabel);
836
+ }
837
+ const enabled = enabledValue ?? false;
838
+ if (enabled && sources.length === 0) throw new RangeError("activity.enabled requires at least one source");
839
+ const extractionMode = config.extractionMode === void 0 ? defaults.extractionMode : config.extractionMode;
840
+ if (typeof extractionMode !== "string" || !EXTRACTION_MODES.includes(extractionMode)) {
841
+ throw new RangeError(`activity.extractionMode must be one of: ${EXTRACTION_MODES.join(", ")}`);
842
+ }
843
+ const minImportance = config.minImportance === void 0 ? defaults.minImportance : config.minImportance;
844
+ if (typeof minImportance !== "string" || !IMPORTANCE_LEVELS.includes(minImportance)) {
845
+ throw new RangeError(`activity.minImportance must be one of: ${IMPORTANCE_LEVELS.join(", ")}`);
846
+ }
847
+ const rawMaxMemoriesPerDay = config.maxMemoriesPerDay === void 0 ? defaults.maxMemoriesPerDay : config.maxMemoriesPerDay;
848
+ const maxMemoriesPerDay = coerceNumber(rawMaxMemoriesPerDay);
849
+ if (maxMemoriesPerDay === void 0 || !Number.isInteger(maxMemoriesPerDay) || maxMemoriesPerDay < 0) {
850
+ throw new RangeError("activity.maxMemoriesPerDay must be a non-negative integer");
851
+ }
852
+ const autoApproveTrust = parseUnitInterval(config.autoApproveTrust, "autoApproveTrust", defaults.autoApproveTrust);
853
+ const reviewTrust = parseUnitInterval(config.reviewTrust, "reviewTrust", defaults.reviewTrust);
854
+ if (reviewTrust >= autoApproveTrust) {
855
+ throw new RangeError(
856
+ `activity.reviewTrust (${reviewTrust}) must be below autoApproveTrust (${autoApproveTrust})`
857
+ );
858
+ }
859
+ return {
860
+ enabled,
861
+ timezone,
862
+ syncDays,
863
+ autoSyncIntervalMinutes,
864
+ sources,
865
+ extractionMode,
866
+ sourceTrust: parseUnitInterval(config.sourceTrust, "sourceTrust", defaults.sourceTrust),
867
+ autoApproveTrust,
868
+ reviewTrust,
869
+ minConfidence: parseUnitInterval(config.minConfidence, "minConfidence", defaults.minConfidence),
870
+ minImportance,
871
+ maxMemoriesPerDay,
872
+ timeline: parseTimelineConfig(config.timeline)
873
+ };
874
+ }
875
+ function parseTimelineConfig(raw) {
876
+ if (raw === void 0) {
877
+ return {
878
+ enabled: false,
879
+ analysis: parseTimelineAnalysisConfig(void 0),
880
+ journal: { enabled: false, source: "memoryDir", extractionMode: "off" },
881
+ qa: parseTimelineQaConfig(void 0),
882
+ vault: parseTimelineVaultConfig(void 0)
883
+ };
884
+ }
885
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
886
+ throw new TypeError("activity.timeline must be an object");
887
+ }
888
+ const timeline = raw;
889
+ const enabledValue = coerceBooleanLike(timeline.enabled, "activity.timeline.enabled");
890
+ if (timeline.enabled !== void 0 && enabledValue === void 0) {
891
+ throw new TypeError("activity.timeline.enabled must be a boolean");
892
+ }
893
+ const journal = parseTimelineJournalConfig(timeline.journal);
894
+ let vault = parseTimelineVaultConfig(timeline.vault);
895
+ const journalRaw = timeline.journal;
896
+ const headingRaw = typeof journalRaw === "object" && journalRaw !== null && !Array.isArray(journalRaw) ? journalRaw.heading : void 0;
897
+ if (headingRaw !== void 0) {
898
+ const aliased = applyLegacyJournalHeading({
899
+ journalSection: vault.readback.journalSection,
900
+ heading: headingRaw
901
+ });
902
+ process.emitWarning(
903
+ aliased.ignoredLegacyHeading ? "activity.timeline.journal.heading is deprecated and ignored because activity.timeline.vault.readback.journalSection is set; use vault.readback.journalSection." : "activity.timeline.journal.heading is deprecated; use activity.timeline.vault.readback.journalSection.",
904
+ { type: "DeprecationWarning", code: "REMNIC_DEP_JOURNAL_HEADING" }
905
+ );
906
+ if (aliased.usedLegacyHeading) {
907
+ vault = { ...vault, readback: { ...vault.readback, journalSection: aliased.journalSection } };
908
+ }
909
+ }
910
+ if (journal.source === "vault") {
911
+ const prereq = checkVaultJournalPrerequisites({
912
+ vaultEnabled: vault.enabled,
913
+ dailyNotePath: vault.dailyNotePath,
914
+ journalSection: vault.readback.journalSection
915
+ });
916
+ if (!prereq.ok) {
917
+ throw new RangeError(
918
+ `activity.timeline.journal.source "vault" requires ${prereq.message}`
919
+ );
920
+ }
921
+ }
922
+ return {
923
+ enabled: enabledValue ?? false,
924
+ analysis: parseTimelineAnalysisConfig(timeline.analysis),
925
+ journal,
926
+ qa: parseTimelineQaConfig(timeline.qa),
927
+ vault
928
+ };
929
+ }
930
+ function parseTimelineAnalysisConfig(raw) {
931
+ if (raw === void 0) return { enabled: false };
932
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
933
+ throw new TypeError("activity.timeline.analysis must be an object");
934
+ }
935
+ const analysis = raw;
936
+ const enabled = requireBool(analysis.enabled, "activity.timeline.analysis.enabled", false);
937
+ const provider = optionalNonEmptyString(analysis.provider, "activity.timeline.analysis.provider")?.trim();
938
+ const model = optionalNonEmptyString(analysis.model, "activity.timeline.analysis.model")?.trim();
939
+ for (const [key, value] of [
940
+ ["provider", provider],
941
+ ["model", model]
942
+ ]) {
943
+ if (value === void 0) continue;
944
+ if (key === "provider" && value.includes("/")) {
945
+ throw new RangeError(
946
+ "activity.timeline.analysis.provider must be a single provider segment (no '/')"
947
+ );
948
+ }
949
+ if (!isAnalysisIdentifier(value)) {
950
+ throw new RangeError(
951
+ `activity.timeline.analysis.${key} must be an identifier (letters, digits, and ._:-/ only)`
952
+ );
953
+ }
954
+ if (value.length > ANALYSIS_METADATA_MAX_FIELD_LENGTH) {
955
+ throw new RangeError(
956
+ `activity.timeline.analysis.${key} must be at most ${ANALYSIS_METADATA_MAX_FIELD_LENGTH} characters`
957
+ );
958
+ }
959
+ }
960
+ if (enabled && (provider === void 0 || model === void 0)) {
961
+ throw new RangeError(
962
+ "activity.timeline.analysis.provider and model are required when analysis is enabled"
963
+ );
964
+ }
965
+ const timeoutMsValue = coerceNumber(analysis.timeoutMs, "activity.timeline.analysis.timeoutMs");
966
+ if (analysis.timeoutMs !== void 0 && timeoutMsValue === void 0) {
967
+ throw new TypeError("activity.timeline.analysis.timeoutMs must be a finite number");
968
+ }
969
+ const timeoutMs = timeoutMsValue ?? TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS;
970
+ if (!Number.isInteger(timeoutMs) || timeoutMs < 1e3 || timeoutMs > 12e4) {
971
+ throw new RangeError("activity.timeline.analysis.timeoutMs must be an integer from 1000 to 120000");
972
+ }
973
+ if (analysis.preferences !== void 0) {
974
+ if (!Array.isArray(analysis.preferences)) {
975
+ throw new TypeError("activity.timeline.analysis.preferences must be an array of strings");
976
+ }
977
+ if (analysis.preferences.length > 16) {
978
+ throw new RangeError("activity.timeline.analysis.preferences supports at most 16 entries");
979
+ }
980
+ for (const entry of analysis.preferences) {
981
+ if (typeof entry !== "string" || entry.trim().length === 0) {
982
+ throw new TypeError("activity.timeline.analysis.preferences entries must be non-empty strings");
983
+ }
984
+ if (entry.length > 200) {
985
+ throw new RangeError("activity.timeline.analysis.preferences entries must be at most 200 characters");
986
+ }
987
+ }
988
+ }
989
+ const preferences = analysis.preferences;
990
+ return {
991
+ enabled,
992
+ ...provider === void 0 ? {} : { provider },
993
+ ...model === void 0 ? {} : { model },
994
+ ...analysis.timeoutMs !== void 0 || timeoutMsValue !== void 0 ? { timeoutMs } : {},
995
+ ...preferences === void 0 ? {} : { preferences }
996
+ };
997
+ }
998
+ function parseTimelineVaultConfig(raw) {
999
+ if (raw === void 0) return defaultVaultConfig();
1000
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1001
+ throw new TypeError("activity.timeline.vault must be an object");
1002
+ }
1003
+ const vault = raw;
1004
+ const enabled = requireBool(vault.enabled, "activity.timeline.vault.enabled", false);
1005
+ const createMissingNotes = requireBool(vault.createMissingNotes, "activity.timeline.vault.createMissingNotes", false);
1006
+ const autoPublish = requireBool(vault.autoPublish, "activity.timeline.vault.autoPublish", true);
1007
+ const vaultPath = optionalNonEmptyString(vault.vaultPath, "activity.timeline.vault.vaultPath") ?? "";
1008
+ const dailyNotePath = optionalNonEmptyString(vault.dailyNotePath, "activity.timeline.vault.dailyNotePath") ?? "{yyyy}-{MM}-{dd}.md";
1009
+ const weeklyNotePath = optionalNonEmptyString(vault.weeklyNotePath, "activity.timeline.vault.weeklyNotePath") ?? "";
1010
+ const noteTemplate = optionalNonEmptyString(vault.noteTemplate, "activity.timeline.vault.noteTemplate") ?? "";
1011
+ const insertUnderHeading = optionalNonEmptyString(vault.insertUnderHeading, "activity.timeline.vault.insertUnderHeading") ?? "";
1012
+ if (typeof vault.sectionStrategy !== "undefined" && typeof vault.sectionStrategy !== "string") {
1013
+ throw new TypeError("activity.timeline.vault.sectionStrategy must be a string");
1014
+ }
1015
+ const sectionStrategy = vault.sectionStrategy ?? "markers";
1016
+ if (sectionStrategy !== "markers" && sectionStrategy !== "heading") {
1017
+ throw new RangeError('activity.timeline.vault.sectionStrategy must be one of "markers", "heading"');
1018
+ }
1019
+ const tildeRooted = vaultPath === "~" || vaultPath.startsWith("~/") || vaultPath.startsWith("~\\");
1020
+ if (enabled && (vaultPath.trim().length === 0 || !tildeRooted && !path2.isAbsolute(vaultPath))) {
1021
+ throw new RangeError(
1022
+ `activity.timeline.vault.vaultPath must be an absolute or \`~\`-rooted path when activity.timeline.vault.enabled is true; a relative path resolves against the process working directory (got ${JSON.stringify(vaultPath)})`
1023
+ );
1024
+ }
1025
+ try {
1026
+ validateVaultNoteTemplate(dailyNotePath);
1027
+ } catch (err) {
1028
+ throw new RangeError(`activity.timeline.vault.dailyNotePath: ${err.message}`);
1029
+ }
1030
+ if (weeklyNotePath.length > 0) {
1031
+ try {
1032
+ validateVaultNoteTemplate(weeklyNotePath);
1033
+ } catch (err) {
1034
+ throw new RangeError(`activity.timeline.vault.weeklyNotePath: ${err.message}`);
1035
+ }
1036
+ }
1037
+ if (createMissingNotes) {
1038
+ if (noteTemplate.length === 0) {
1039
+ throw new RangeError(
1040
+ "activity.timeline.vault.noteTemplate must name a vault-relative template file when activity.timeline.vault.createMissingNotes is true"
1041
+ );
1042
+ }
1043
+ try {
1044
+ validateVaultNoteTemplate(noteTemplate);
1045
+ } catch (err) {
1046
+ throw new RangeError(`activity.timeline.vault.noteTemplate: ${err.message}`);
1047
+ }
1048
+ }
1049
+ const publish = parseVaultPublishBlock(vault.publish, weeklyNotePath);
1050
+ const wikilinksRaw = vault.wikilinks;
1051
+ const wikilinks = wikilinksRaw === void 0 ? { places: false, placesFolder: "Places" } : parseVaultWikilinks(wikilinksRaw);
1052
+ const propertiesRaw = vault.properties;
1053
+ const properties = propertiesRaw === void 0 ? { mode: "off", prefix: "remnic_" } : parseVaultProperties(propertiesRaw);
1054
+ const readbackRaw = vault.readback;
1055
+ if (readbackRaw !== void 0 && (typeof readbackRaw !== "object" || readbackRaw === null || Array.isArray(readbackRaw))) {
1056
+ throw new TypeError("activity.timeline.vault.readback must be an object");
1057
+ }
1058
+ const readbackJournalSection = optionalNonEmptyString(
1059
+ readbackRaw?.journalSection,
1060
+ "activity.timeline.vault.readback.journalSection"
1061
+ );
1062
+ const readback = {
1063
+ journalSection: readbackJournalSection ?? ""
1064
+ };
1065
+ return {
1066
+ enabled,
1067
+ vaultPath,
1068
+ dailyNotePath,
1069
+ weeklyNotePath,
1070
+ createMissingNotes,
1071
+ noteTemplate,
1072
+ sectionStrategy,
1073
+ publish,
1074
+ insertUnderHeading,
1075
+ readback,
1076
+ wikilinks,
1077
+ properties,
1078
+ autoPublish
1079
+ };
1080
+ }
1081
+ function defaultVaultConfig() {
1082
+ return {
1083
+ enabled: false,
1084
+ vaultPath: "",
1085
+ dailyNotePath: "{yyyy}-{MM}-{dd}.md",
1086
+ weeklyNotePath: "",
1087
+ createMissingNotes: false,
1088
+ noteTemplate: "",
1089
+ sectionStrategy: "markers",
1090
+ publish: {
1091
+ timeline: { enabled: true, target: "daily", section: "Timeline" },
1092
+ standup: { enabled: false, target: "daily", section: "Standup" },
1093
+ weekly: { enabled: false, target: "weekly", section: "Weekly Review" },
1094
+ locations: { enabled: false, target: "daily", section: "Locations" }
1095
+ },
1096
+ insertUnderHeading: "",
1097
+ wikilinks: { places: false, placesFolder: "Places" },
1098
+ properties: { mode: "off", prefix: "remnic_" },
1099
+ autoPublish: true,
1100
+ readback: { journalSection: "" }
1101
+ };
1102
+ }
1103
+ function requireBool(value, key, fallback) {
1104
+ const coerced = coerceBooleanLike(value, key);
1105
+ if (value === void 0) return fallback;
1106
+ if (coerced === void 0) {
1107
+ throw new TypeError(`${key} must be a boolean`);
1108
+ }
1109
+ return coerced;
1110
+ }
1111
+ function optionalNonEmptyString(value, key) {
1112
+ if (value === void 0) return void 0;
1113
+ if (typeof value !== "string") {
1114
+ throw new TypeError(`${key} must be a string`);
1115
+ }
1116
+ return value;
1117
+ }
1118
+ function parseVaultPublishBlock(raw, weeklyNotePath) {
1119
+ const defaults = defaultVaultConfig().publish;
1120
+ if (raw === void 0) return defaults;
1121
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1122
+ throw new TypeError("activity.timeline.vault.publish must be an object");
1123
+ }
1124
+ const block = raw;
1125
+ const publish = {
1126
+ timeline: parseVaultTarget(block.timeline, "timeline", defaults.timeline, weeklyNotePath),
1127
+ standup: parseVaultTarget(block.standup, "standup", defaults.standup, weeklyNotePath),
1128
+ weekly: parseVaultTarget(block.weekly, "weekly", defaults.weekly, weeklyNotePath),
1129
+ locations: parseVaultTarget(block.locations, "locations", defaults.locations, weeklyNotePath)
1130
+ };
1131
+ for (const targetFile of ["daily", "weekly"]) {
1132
+ const sections = ["timeline", "standup", "weekly", "locations"].filter((kind) => publish[kind].target === targetFile && publish[kind].enabled).map((kind) => publish[kind].section);
1133
+ const duplicates = sections.filter((section, index) => sections.indexOf(section) !== index);
1134
+ if (duplicates.length > 0) {
1135
+ throw new RangeError(
1136
+ `activity.timeline.vault.publish section names must be unique per target file; duplicate ${targetFile} section(s): ${[...new Set(duplicates)].join(", ")}`
1137
+ );
1138
+ }
1139
+ }
1140
+ return publish;
1141
+ }
1142
+ function parseVaultTarget(raw, kind, fallback, weeklyNotePath) {
1143
+ if (raw === void 0) return fallback;
1144
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1145
+ throw new TypeError(`activity.timeline.vault.publish.${kind} must be an object`);
1146
+ }
1147
+ const entry = raw;
1148
+ const enabled = requireBool(entry.enabled, `activity.timeline.vault.publish.${kind}.enabled`, fallback.enabled);
1149
+ const target = entry.target === void 0 ? fallback.target : entry.target;
1150
+ if (target !== "daily" && target !== "weekly") {
1151
+ throw new RangeError(`activity.timeline.vault.publish.${kind}.target must be one of "daily", "weekly"`);
1152
+ }
1153
+ const section = entry.section === void 0 ? fallback.section : entry.section;
1154
+ if (typeof section !== "string" || section.trim().length === 0 || section !== section.trim()) {
1155
+ throw new RangeError(`activity.timeline.vault.publish.${kind}.section must be a non-empty trimmed string`);
1156
+ }
1157
+ if (!validateRegionName(section).ok) {
1158
+ throw new RangeError(
1159
+ `activity.timeline.vault.publish.${kind}.section must not contain a line break or "-->"`
1160
+ );
1161
+ }
1162
+ if (enabled && target === "weekly" && weeklyNotePath.length === 0) {
1163
+ throw new RangeError(
1164
+ `activity.timeline.vault.publish.${kind}.target is "weekly" but activity.timeline.vault.weeklyNotePath is empty; configure weeklyNotePath first`
1165
+ );
1166
+ }
1167
+ return { enabled, target, section };
1168
+ }
1169
+ function parseVaultWikilinks(raw) {
1170
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1171
+ throw new TypeError("activity.timeline.vault.wikilinks must be an object");
1172
+ }
1173
+ const block = raw;
1174
+ const places = requireBool(block.places, "activity.timeline.vault.wikilinks.places", false);
1175
+ const placesFolder = optionalNonEmptyString(block.placesFolder, "activity.timeline.vault.wikilinks.placesFolder") ?? "Places";
1176
+ return { places, placesFolder };
1177
+ }
1178
+ function parseVaultProperties(raw) {
1179
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1180
+ throw new TypeError("activity.timeline.vault.properties must be an object");
1181
+ }
1182
+ const block = raw;
1183
+ const mode = block.mode === void 0 ? "off" : block.mode;
1184
+ if (mode !== "off" && mode !== "frontmatter" && mode !== "dataview-inline") {
1185
+ throw new RangeError(
1186
+ 'activity.timeline.vault.properties.mode must be one of "off", "frontmatter", "dataview-inline"'
1187
+ );
1188
+ }
1189
+ const prefix = optionalNonEmptyString(block.prefix, "activity.timeline.vault.properties.prefix") ?? "remnic_";
1190
+ if (prefix.trim().length === 0 || prefix !== prefix.trim()) {
1191
+ throw new RangeError("activity.timeline.vault.properties.prefix must be non-empty and trimmed");
1192
+ }
1193
+ return { mode, prefix };
1194
+ }
1195
+ function parseTimelineJournalConfig(raw) {
1196
+ if (raw === void 0) return { enabled: false, source: "memoryDir", extractionMode: "off" };
1197
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1198
+ throw new TypeError("activity.timeline.journal must be an object");
1199
+ }
1200
+ const journal = raw;
1201
+ const enabledValue = coerceBooleanLike(journal.enabled, "activity.timeline.journal.enabled");
1202
+ if (journal.enabled !== void 0 && enabledValue === void 0) {
1203
+ throw new TypeError("activity.timeline.journal.enabled must be a boolean");
1204
+ }
1205
+ const source = journal.source === void 0 ? "memoryDir" : typeof journal.source === "string" ? journal.source : "";
1206
+ const resolved = resolveJournalSource({ source });
1207
+ if (!resolved.ok) {
1208
+ throw new RangeError('activity.timeline.journal.source must be one of "memoryDir", "vault"');
1209
+ }
1210
+ if (resolved.deprecatedAlias === "file") {
1211
+ process.emitWarning(
1212
+ 'activity.timeline.journal.source "file" is deprecated; use "memoryDir".',
1213
+ { type: "DeprecationWarning", code: "REMNIC_DEP_JOURNAL_SOURCE_FILE" }
1214
+ );
1215
+ }
1216
+ const extractionMode = journal.extractionMode === void 0 ? "off" : journal.extractionMode;
1217
+ if (extractionMode !== "off" && extractionMode !== "review") {
1218
+ throw new RangeError('activity.timeline.journal.extractionMode must be one of "off", "review"');
1219
+ }
1220
+ return { enabled: enabledValue ?? false, source: resolved.mode, extractionMode };
1221
+ }
1222
+ function parseTimelineQaConfig(raw) {
1223
+ if (raw === void 0) return { enabled: false, maxRangeDays: 31 };
1224
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
1225
+ throw new TypeError("activity.timeline.qa must be an object");
1226
+ }
1227
+ const qa = raw;
1228
+ const enabledValue = coerceBooleanLike(qa.enabled, "activity.timeline.qa.enabled");
1229
+ if (qa.enabled !== void 0 && enabledValue === void 0) {
1230
+ throw new TypeError("activity.timeline.qa.enabled must be a boolean");
1231
+ }
1232
+ const maxRangeDaysValue = coerceNumber(qa.maxRangeDays, "activity.timeline.qa.maxRangeDays");
1233
+ if (qa.maxRangeDays !== void 0 && maxRangeDaysValue === void 0) {
1234
+ throw new TypeError("activity.timeline.qa.maxRangeDays must be an integer from 1 to 366");
1235
+ }
1236
+ const maxRangeDays = maxRangeDaysValue ?? 31;
1237
+ if (!Number.isInteger(maxRangeDays) || maxRangeDays < 1 || maxRangeDays > 366) {
1238
+ throw new RangeError("activity.timeline.qa.maxRangeDays must be an integer from 1 to 366");
1239
+ }
1240
+ return { enabled: enabledValue ?? false, maxRangeDays };
1241
+ }
1242
+
1243
+ export {
1244
+ VAULT_JOURNAL_PREREQUISITES,
1245
+ checkVaultJournalPrerequisites,
1246
+ resolveJournalSource,
1247
+ VAULT_TEMPLATE_TOKENS,
1248
+ expandVaultTemplateTokens,
1249
+ validateVaultNoteTemplate,
1250
+ resolveVaultNotePath,
1251
+ validateRegionName,
1252
+ ANALYSIS_FAILURE_KINDS,
1253
+ isAnalysisFailureKind,
1254
+ classifyAnalysisFailure,
1255
+ TimelineAnalysisProviderError,
1256
+ TIMELINE_ANALYSIS_LOCAL_PROVIDER_ID,
1257
+ classifyAnalysisProviderError,
1258
+ timelineAnalysisCompleteFromClients,
1259
+ TIMELINE_RESERVED_UNKNOWN,
1260
+ TIMELINE_RESERVED_IDLE,
1261
+ TIMELINE_RESERVED_PAUSE,
1262
+ DEFAULT_TIMELINE_CATEGORIES,
1263
+ validateTimelineCategories,
1264
+ sortTimelineCategories,
1265
+ TIMELINE_ANALYSIS_PROMPT_VERSION,
1266
+ TIMELINE_ANALYSIS_BATCH_SIZE,
1267
+ TIMELINE_ANALYSIS_BATCH_OVERLAP,
1268
+ TIMELINE_ANALYSIS_DEFAULT_TIMEOUT_MS,
1269
+ TimelineAnalysisConfigError,
1270
+ buildTimelineAnalysisPrompt,
1271
+ analyzeTimelineCards,
1272
+ ANALYSIS_METADATA_MAX_FIELD_LENGTH,
1273
+ isAnalysisIdentifier,
1274
+ buildAnalysisRunMetadata,
1275
+ defaultActivityConfig,
1276
+ validateActivityBaseUrl,
1277
+ parseActivityConfig,
1278
+ parseTimelineVaultConfig
1279
+ };
1280
+ //# sourceMappingURL=chunk-5HYUUFMQ.js.map