@remnic/core 9.66.8 → 9.66.10

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 (481) hide show
  1. package/dist/access-admin-ops-surface.d.ts +11 -11
  2. package/dist/access-admin-ops-surface.js +23 -23
  3. package/dist/access-authorization-probe.d.ts +11 -11
  4. package/dist/access-authorization-probe.js +24 -24
  5. package/dist/access-boundary.d.ts +11 -11
  6. package/dist/access-boundary.js +23 -23
  7. package/dist/access-cli.js +98 -97
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +11 -11
  11. package/dist/access-extraction-force-flush.js +23 -23
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +11 -11
  14. package/dist/access-http-lifecycle-flush.d.ts +11 -11
  15. package/dist/access-http-offline-stream.d.ts +11 -11
  16. package/dist/access-http-query.d.ts +2 -2
  17. package/dist/access-http-query.js +25 -25
  18. package/dist/access-http.d.ts +12 -12
  19. package/dist/access-http.js +41 -41
  20. package/dist/access-identity-continuity-surface.d.ts +9 -9
  21. package/dist/access-identity-continuity-surface.js +23 -23
  22. package/dist/access-lcm-surface.d.ts +11 -11
  23. package/dist/access-lcm-surface.js +23 -23
  24. package/dist/access-mcp-output-schemas.js +1 -1
  25. package/dist/access-mcp.d.ts +11 -11
  26. package/dist/access-mcp.js +33 -33
  27. package/dist/access-memory-search-fanout.d.ts +2 -2
  28. package/dist/{access-namespace-preflight-50VIkPhB.d.ts → access-namespace-preflight-S8fhQcCo.d.ts} +1 -1
  29. package/dist/access-namespace-preflight.d.ts +3 -3
  30. package/dist/access-namespace-preflight.js +23 -23
  31. package/dist/access-observe-write-surface.d.ts +11 -11
  32. package/dist/access-observe-write-surface.js +23 -23
  33. package/dist/access-offline-manifest.d.ts +9 -9
  34. package/dist/access-operations-batch.js +26 -26
  35. package/dist/access-operations.d.ts +16 -16
  36. package/dist/access-operations.js +31 -31
  37. package/dist/access-recall-concurrency.d.ts +11 -11
  38. package/dist/access-recall-concurrency.js +23 -23
  39. package/dist/access-recall-response.d.ts +11 -11
  40. package/dist/access-recall-response.js +23 -23
  41. package/dist/access-recall-surface.d.ts +11 -11
  42. package/dist/access-recall-surface.js +23 -23
  43. package/dist/access-schema.d.ts +89 -89
  44. package/dist/access-schema.js +3 -3
  45. package/dist/{access-service-C2tV2-uL.d.ts → access-service-DcfM0Vf0.d.ts} +71 -71
  46. package/dist/access-service-helpers.d.ts +11 -11
  47. package/dist/access-service.d.ts +11 -11
  48. package/dist/access-service.js +23 -23
  49. package/dist/access-surface-catalog.d.ts +11 -11
  50. package/dist/access-surface-catalog.js +25 -25
  51. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  52. package/dist/action-confidence.d.ts +1 -1
  53. package/dist/active-memory-bridge.d.ts +1 -1
  54. package/dist/active-recall.d.ts +1 -1
  55. package/dist/active-recall.js +2 -2
  56. package/dist/adapters/index.js +4 -4
  57. package/dist/adapters/registry.js +2 -2
  58. package/dist/ambient-provenance.d.ts +1 -1
  59. package/dist/artifact-search.d.ts +1 -1
  60. package/dist/behavior-learner.d.ts +1 -1
  61. package/dist/behavior-signals.d.ts +1 -1
  62. package/dist/bootstrap.d.ts +9 -9
  63. package/dist/briefing-window.d.ts +2 -2
  64. package/dist/briefing.d.ts +2 -2
  65. package/dist/briefing.js +10 -10
  66. package/dist/buffer-surprise-report.d.ts +1 -1
  67. package/dist/buffer-turn-helpers.d.ts +1 -1
  68. package/dist/buffer.d.ts +2 -2
  69. package/dist/buffer.js +4 -4
  70. package/dist/bulk-import/index.d.ts +3 -3
  71. package/dist/calibration.d.ts +1 -1
  72. package/dist/capabilities.d.ts +1 -1
  73. package/dist/{catalog-C2jA-gLm.d.ts → catalog-BmBXTtOs.d.ts} +1 -1
  74. package/dist/causal-behavior.d.ts +1 -1
  75. package/dist/causal-consolidation.d.ts +1 -1
  76. package/dist/causal-consolidation.js +11 -11
  77. package/dist/causal-trajectory-graph.d.ts +1 -1
  78. package/dist/{chunk-EKUABFXQ.js → chunk-245QROHZ.js} +6 -6
  79. package/dist/{chunk-UMZUKOJU.js → chunk-2L5FSNPC.js} +16 -11
  80. package/dist/chunk-2L5FSNPC.js.map +1 -0
  81. package/dist/{chunk-KH2LZMD5.js → chunk-2OXBS2LV.js} +2 -2
  82. package/dist/{chunk-K7NUAY36.js → chunk-4PHT7KE2.js} +5 -5
  83. package/dist/{chunk-AZLSFKGU.js → chunk-4PWANX5V.js} +6 -6
  84. package/dist/{chunk-5S6TQ36T.js → chunk-4QKWBVEE.js} +12 -12
  85. package/dist/{chunk-5S6TQ36T.js.map → chunk-4QKWBVEE.js.map} +1 -1
  86. package/dist/{chunk-GO657WPH.js → chunk-52I6AHO6.js} +2 -2
  87. package/dist/{chunk-MBXTGOFR.js → chunk-54BRW3BL.js} +2 -2
  88. package/dist/{chunk-LWI43S46.js → chunk-5E7KXID5.js} +1 -1
  89. package/dist/{chunk-MWLBRFLY.js → chunk-5KVMT25I.js} +2 -2
  90. package/dist/{chunk-KKGWB2LG.js → chunk-7BS5UVXA.js} +3 -3
  91. package/dist/{chunk-O2RJZR6J.js → chunk-7FLINMUE.js} +2 -2
  92. package/dist/{chunk-XORZMKVF.js → chunk-7MOYAT4Y.js} +3 -3
  93. package/dist/{chunk-AVYNKPFS.js → chunk-C6TMLF3A.js} +5 -5
  94. package/dist/{chunk-C24UZSFW.js → chunk-CEH2AFXG.js} +6 -6
  95. package/dist/{chunk-IE7N2YK6.js → chunk-CNZVEU4X.js} +2 -2
  96. package/dist/{chunk-FNK4KIYR.js → chunk-D3AUQXTJ.js} +2 -2
  97. package/dist/{chunk-BDGWA5GK.js → chunk-DJLH3XWM.js} +2 -2
  98. package/dist/{chunk-2V4YPDIX.js → chunk-E2PORO7O.js} +2 -2
  99. package/dist/{chunk-5IYJWCLC.js → chunk-E62M4H4M.js} +2 -2
  100. package/dist/{chunk-NEWY74GS.js → chunk-EG4FHU5C.js} +2 -2
  101. package/dist/{chunk-KMPEBHH5.js → chunk-EMAEDM2J.js} +2 -2
  102. package/dist/{chunk-2YDU4VR7.js → chunk-G3B3LP6A.js} +21 -21
  103. package/dist/{chunk-D6Q5EPOV.js → chunk-HCERYDRI.js} +2 -2
  104. package/dist/{chunk-6BYJQ3L2.js → chunk-HJQZQUPC.js} +11 -11
  105. package/dist/{chunk-S63O62DN.js → chunk-HPGXB56F.js} +2 -2
  106. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  107. package/dist/{chunk-QK375NXZ.js → chunk-ISX7JODR.js} +2 -2
  108. package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
  109. package/dist/{chunk-RI4CMRTZ.js → chunk-JNZSNJ43.js} +2 -2
  110. package/dist/{chunk-IGOINKTD.js → chunk-K4E3Y3ZX.js} +2 -2
  111. package/dist/chunk-K4E3Y3ZX.js.map +1 -0
  112. package/dist/{chunk-GUG4LW4I.js → chunk-KIJCXLW7.js} +2 -2
  113. package/dist/{chunk-XDUQR5R7.js → chunk-KT3ERTF6.js} +2 -2
  114. package/dist/{chunk-2MYBDWUY.js → chunk-KWLDB64F.js} +2 -2
  115. package/dist/{chunk-UOQZOV2J.js → chunk-KWVXCRFZ.js} +225 -55
  116. package/dist/chunk-KWVXCRFZ.js.map +1 -0
  117. package/dist/chunk-LD72P4YS.js +29 -0
  118. package/dist/chunk-LD72P4YS.js.map +1 -0
  119. package/dist/{chunk-UMSTKKMV.js → chunk-LPSTQR26.js} +2 -2
  120. package/dist/{chunk-MFIFCXS3.js → chunk-LTWFU6VJ.js} +2 -2
  121. package/dist/{chunk-X32ALJQB.js → chunk-M2BY5IZL.js} +2 -2
  122. package/dist/{chunk-UJICQ77Y.js → chunk-MK7EJLB4.js} +2 -2
  123. package/dist/{chunk-7X63THIR.js → chunk-NR36NW24.js} +39 -39
  124. package/dist/{chunk-VYIPVLRX.js → chunk-QB66LBXA.js} +2 -2
  125. package/dist/{chunk-RPHCLGQ7.js → chunk-QKTGCL6M.js} +2 -2
  126. package/dist/{chunk-OMA2B7GY.js → chunk-RLEJULGN.js} +2 -2
  127. package/dist/chunk-S47XNAWD.js +202 -0
  128. package/dist/chunk-S47XNAWD.js.map +1 -0
  129. package/dist/{chunk-I2TIUGLC.js → chunk-SQEIPTDV.js} +2 -2
  130. package/dist/{chunk-NEDBOZ7G.js → chunk-TGKLVAML.js} +2 -2
  131. package/dist/{chunk-FY62KW6Q.js → chunk-TS37MXC7.js} +2 -2
  132. package/dist/{chunk-XUKS57W7.js → chunk-TXCLDIXJ.js} +2 -2
  133. package/dist/{chunk-YSYHSZWD.js → chunk-VSQG4AXL.js} +2 -2
  134. package/dist/{chunk-46XR5FNZ.js → chunk-VSWRJQQW.js} +31 -5
  135. package/dist/chunk-VSWRJQQW.js.map +1 -0
  136. package/dist/{chunk-ULTK4NZY.js → chunk-WD424KYT.js} +2 -2
  137. package/dist/{chunk-OERZXNSK.js → chunk-X5SDZMO7.js} +2 -2
  138. package/dist/{chunk-XSPVSEAN.js → chunk-XN33JLRF.js} +3 -3
  139. package/dist/{chunk-6ULLVM2V.js → chunk-Y2ECPAJI.js} +8 -8
  140. package/dist/{chunk-5UP5R37C.js → chunk-Y6KDJQLK.js} +7 -7
  141. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  142. package/dist/{chunk-6ZRLH4VS.js → chunk-YYDOUOYM.js} +3 -3
  143. package/dist/{chunk-XVCYV7WQ.js → chunk-ZIGSNLYI.js} +3 -3
  144. package/dist/{chunk-FI6FT6YX.js → chunk-ZPZLGN4Y.js} +2 -2
  145. package/dist/{chunk-SVATDJNY.js → chunk-ZRQPX2DW.js} +2 -2
  146. package/dist/{cli-CsfFMe6n.d.ts → cli-CFpMhqz5.d.ts} +5 -5
  147. package/dist/cli.d.ts +13 -13
  148. package/dist/cli.js +67 -67
  149. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  150. package/dist/coding/export-okf-codegraph.js +10 -10
  151. package/dist/coding/pre-action-gate.d.ts +1 -1
  152. package/dist/compounding/engine.d.ts +2 -2
  153. package/dist/compounding/engine.js +10 -10
  154. package/dist/compounding/preference-consolidator.d.ts +1 -1
  155. package/dist/compression-optimizer.d.ts +1 -1
  156. package/dist/config.d.ts +1 -1
  157. package/dist/config.js +2 -2
  158. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  159. package/dist/connectors/codex-materialize-runner.js +10 -10
  160. package/dist/connectors/codex-materialize.d.ts +1 -1
  161. package/dist/connectors/index.d.ts +1 -1
  162. package/dist/connectors/index.js +10 -10
  163. package/dist/consolidation-provenance-check.d.ts +2 -2
  164. package/dist/consolidation-undo.d.ts +2 -2
  165. package/dist/contradiction/index.d.ts +3 -3
  166. package/dist/converge-config.d.ts +1 -1
  167. package/dist/convergence-refresh.d.ts +2 -2
  168. package/dist/convergence-refresh.js +12 -12
  169. package/dist/conversation-index/backend.d.ts +1 -1
  170. package/dist/conversation-index/chunker.d.ts +1 -1
  171. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  172. package/dist/conversation-index/indexer.d.ts +1 -1
  173. package/dist/conversation-index/search.d.ts +1 -1
  174. package/dist/corpus-watermark.d.ts +1 -1
  175. package/dist/corpus-watermark.js +12 -12
  176. package/dist/cross-lingual-recall.d.ts +1 -1
  177. package/dist/dashboard-runtime.js +2 -2
  178. package/dist/day-summary.d.ts +1 -1
  179. package/dist/delinearize.d.ts +1 -1
  180. package/dist/dependency-propagation-config.d.ts +1 -1
  181. package/dist/{dependency-propagation-delivery-D4WMbOwA.d.ts → dependency-propagation-delivery-BC3bCEet.d.ts} +1 -1
  182. package/dist/direct-answer-wiring.d.ts +1 -1
  183. package/dist/direct-answer.d.ts +1 -1
  184. package/dist/embedding-fallback.d.ts +1 -1
  185. package/dist/enrichment/index.d.ts +1 -1
  186. package/dist/entity-origin-fields.d.ts +1 -1
  187. package/dist/entity-retrieval.d.ts +2 -2
  188. package/dist/entity-retrieval.js +10 -10
  189. package/dist/entity-schema.d.ts +1 -1
  190. package/dist/episodic-context.d.ts +1 -1
  191. package/dist/eval-trajectory-contracts.d.ts +1 -1
  192. package/dist/eval-trajectory-store.d.ts +1 -1
  193. package/dist/eval-trajectory.d.ts +1 -1
  194. package/dist/explicit-capture.d.ts +9 -9
  195. package/dist/external-wiki-access.d.ts +11 -11
  196. package/dist/external-wiki-access.js +24 -24
  197. package/dist/external-wiki-collection-registration.d.ts +1 -1
  198. package/dist/external-wiki-collection.d.ts +1 -1
  199. package/dist/external-wiki-mcp-tools.d.ts +11 -11
  200. package/dist/extraction-error-classification.d.ts +1 -1
  201. package/dist/extraction-faithfulness.d.ts +1 -1
  202. package/dist/extraction-judge-telemetry.d.ts +1 -1
  203. package/dist/extraction-judge-training.d.ts +1 -1
  204. package/dist/extraction-judge.d.ts +1 -1
  205. package/dist/extraction-liveness.d.ts +1 -1
  206. package/dist/extraction-normalization.d.ts +1 -1
  207. package/dist/extraction-prompt.d.ts +1 -1
  208. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  209. package/dist/extraction-source-grounding.d.ts +1 -1
  210. package/dist/extraction-span-tokens.d.ts +16 -0
  211. package/dist/extraction-span-tokens.js +34 -0
  212. package/dist/extraction-span-tokens.js.map +1 -0
  213. package/dist/extraction.d.ts +1 -1
  214. package/dist/extraction.js +13 -13
  215. package/dist/fallback-llm.d.ts +1 -1
  216. package/dist/graph-dashboard-diff.d.ts +1 -1
  217. package/dist/graph-dashboard-key.d.ts +1 -1
  218. package/dist/graph-dashboard-parser.d.ts +1 -1
  219. package/dist/graph-edge-reinforcement.d.ts +1 -1
  220. package/dist/graph-path-reconstruction.d.ts +1 -1
  221. package/dist/graph-path-scoring.d.ts +1 -1
  222. package/dist/graph-snapshot.d.ts +1 -1
  223. package/dist/graph.d.ts +1 -1
  224. package/dist/harmonic-retrieval.js +1 -1
  225. package/dist/importance.d.ts +1 -1
  226. package/dist/importers/index.d.ts +1 -1
  227. package/dist/in-flight-reads.d.ts +1 -1
  228. package/dist/{index-DuJnzwHv.d.ts → index-D4hS9uxK.d.ts} +2 -2
  229. package/dist/index.d.ts +820 -700
  230. package/dist/index.js +144 -133
  231. package/dist/intent.d.ts +1 -1
  232. package/dist/lcm/engine.d.ts +1 -1
  233. package/dist/lcm/engine.js +5 -4
  234. package/dist/lcm/index.d.ts +1 -1
  235. package/dist/lcm/index.js +13 -12
  236. package/dist/lcm/tools.d.ts +1 -1
  237. package/dist/lifecycle.d.ts +1 -1
  238. package/dist/live-connectors-runner.d.ts +1 -1
  239. package/dist/local-llm.d.ts +1 -1
  240. package/dist/local-model-endpoint.d.ts +1 -1
  241. package/dist/location/index.d.ts +3 -3
  242. package/dist/location/index.js +12 -12
  243. package/dist/maintenance/memory-governance.d.ts +1 -1
  244. package/dist/maintenance/memory-governance.js +10 -10
  245. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  246. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -10
  247. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  248. package/dist/maintenance/rebuild-memory-projection.js +11 -11
  249. package/dist/{maintenance-BBeaeYRR.d.ts → maintenance-BRcc3Hx8.d.ts} +3 -3
  250. package/dist/mcp-memory-inspector-app.d.ts +11 -11
  251. package/dist/memory-action-policy.d.ts +1 -1
  252. package/dist/memory-cache.d.ts +1 -1
  253. package/dist/memory-controller.d.ts +1 -1
  254. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  255. package/dist/memory-projection-store.d.ts +1 -1
  256. package/dist/memory-provenance.d.ts +1 -1
  257. package/dist/memory-snapshot.d.ts +1 -1
  258. package/dist/memory-subject-cli.d.ts +11 -11
  259. package/dist/memory-subject.d.ts +11 -11
  260. package/dist/memory-worth-outcomes.d.ts +2 -2
  261. package/dist/models-json.d.ts +1 -1
  262. package/dist/namespaces/migrate.d.ts +3 -3
  263. package/dist/namespaces/migrate.js +11 -11
  264. package/dist/namespaces/principal.d.ts +1 -1
  265. package/dist/namespaces/search.d.ts +1 -1
  266. package/dist/namespaces/search.js +7 -7
  267. package/dist/namespaces/storage.d.ts +3 -3
  268. package/dist/namespaces/storage.js +10 -10
  269. package/dist/native-binding-hint.d.ts +24 -0
  270. package/dist/native-binding-hint.js +10 -0
  271. package/dist/native-binding-hint.js.map +1 -0
  272. package/dist/native-knowledge.d.ts +1 -1
  273. package/dist/offline-sync-impression-drain.d.ts +1 -1
  274. package/dist/operator-doctor-corpus.d.ts +1 -1
  275. package/dist/operator-doctor-corpus.js +13 -13
  276. package/dist/operator-doctor-replica.d.ts +1 -1
  277. package/dist/operator-toolkit.d.ts +3 -3
  278. package/dist/operator-toolkit.js +20 -20
  279. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  280. package/dist/orchestration/maintenance.d.ts +4 -4
  281. package/dist/orchestration/maintenance.js +19 -19
  282. package/dist/{orchestrator-CaqnwNwM.d.ts → orchestrator-Btq9lzAN.d.ts} +8 -8
  283. package/dist/orchestrator.d.ts +9 -9
  284. package/dist/orchestrator.js +99 -98
  285. package/dist/patterns-cli.d.ts +1 -1
  286. package/dist/{pipeline-CrxVjlJr.d.ts → pipeline-CZoNdFb5.d.ts} +1 -1
  287. package/dist/policy-runtime.d.ts +1 -1
  288. package/dist/proactive-contention.d.ts +1 -1
  289. package/dist/provenance.d.ts +1 -1
  290. package/dist/{public-http-Cwvl4QZr.d.ts → public-http-C9-CHc40.d.ts} +1 -1
  291. package/dist/{qmd-BZgbJm0g.d.ts → qmd-VIjSCKIE.d.ts} +1 -1
  292. package/dist/qmd-preflight.d.ts +2 -2
  293. package/dist/qmd-recall-cache.d.ts +1 -1
  294. package/dist/qmd.d.ts +2 -2
  295. package/dist/qmd.js +4 -4
  296. package/dist/recall-concurrency-config.d.ts +1 -1
  297. package/dist/recall-deep-frontier.d.ts +15 -0
  298. package/dist/recall-deep-frontier.js +29 -0
  299. package/dist/recall-deep-frontier.js.map +1 -0
  300. package/dist/recall-disclosure-escalation.d.ts +1 -1
  301. package/dist/recall-explain-renderer.d.ts +1 -1
  302. package/dist/recall-memory-map.d.ts +1 -1
  303. package/dist/recall-navigate-access.d.ts +1 -1
  304. package/dist/recall-navigate.d.ts +1 -1
  305. package/dist/recall-planner-llm.d.ts +1 -1
  306. package/dist/recall-state.d.ts +1 -1
  307. package/dist/recall-tag-filter.d.ts +1 -1
  308. package/dist/recall-timings.d.ts +1 -1
  309. package/dist/recall-xray-cli.d.ts +1 -1
  310. package/dist/recall-xray-renderer.d.ts +1 -1
  311. package/dist/recall-xray.d.ts +1 -1
  312. package/dist/reconcile/cursor.d.ts +1 -1
  313. package/dist/reconcile/manifest.d.ts +1 -1
  314. package/dist/reconcile/plan.d.ts +1 -1
  315. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  316. package/dist/replay/normalizers/claude.d.ts +1 -1
  317. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  318. package/dist/replay/normalizers/shared.d.ts +1 -1
  319. package/dist/replay/runner.d.ts +1 -1
  320. package/dist/replay/types.d.ts +1 -1
  321. package/dist/replica-divergence.d.ts +1 -1
  322. package/dist/replica-peers-config.d.ts +1 -1
  323. package/dist/resolve-auth-token.d.ts +1 -1
  324. package/dist/resume-bundles.js +3 -3
  325. package/dist/retrieval-agents.d.ts +2 -2
  326. package/dist/retrieval-tiers.d.ts +1 -1
  327. package/dist/routing/engine.d.ts +1 -1
  328. package/dist/routing/store.d.ts +1 -1
  329. package/dist/salvage-envelope.d.ts +1 -1
  330. package/dist/schemas.d.ts +176 -176
  331. package/dist/{scope-profiles-DFaojvoP.d.ts → scope-profiles-DqbxQXIS.d.ts} +1 -1
  332. package/dist/search/embed-helper.d.ts +1 -1
  333. package/dist/search/factory.d.ts +1 -1
  334. package/dist/search/factory.js +6 -6
  335. package/dist/search/index.d.ts +1 -1
  336. package/dist/search/index.js +12 -12
  337. package/dist/search/lancedb-backend.d.ts +1 -1
  338. package/dist/search/meilisearch-backend.d.ts +1 -1
  339. package/dist/search/noop-backend.d.ts +1 -1
  340. package/dist/search/orama-backend.d.ts +1 -1
  341. package/dist/search/port.d.ts +1 -1
  342. package/dist/search/remote-backend.d.ts +1 -1
  343. package/dist/{semantic-consolidation-BiX68wZA.d.ts → semantic-consolidation-DW3rEUoW.d.ts} +1 -1
  344. package/dist/semantic-consolidation.d.ts +2 -2
  345. package/dist/semantic-consolidation.js +11 -11
  346. package/dist/semantic-rule-promotion.js +10 -10
  347. package/dist/semantic-rule-verifier.d.ts +1 -1
  348. package/dist/semantic-rule-verifier.js +10 -10
  349. package/dist/{service-D5h2zZ0M.d.ts → service-B2vJU_Bx.d.ts} +2 -2
  350. package/dist/session-observer-bands.d.ts +1 -1
  351. package/dist/session-observer-state.d.ts +1 -1
  352. package/dist/shared-context/manager.d.ts +7 -7
  353. package/dist/signal.d.ts +1 -1
  354. package/dist/source-agent-qualifier.d.ts +1 -1
  355. package/dist/source-agent-qualifier.js +12 -12
  356. package/dist/standup/build.d.ts +9 -3
  357. package/dist/standup/build.js +99 -7
  358. package/dist/{storage-CtsaojWD.d.ts → storage-6fn7BPmb.d.ts} +1 -1
  359. package/dist/storage.d.ts +2 -2
  360. package/dist/storage.js +9 -9
  361. package/dist/subject-config.d.ts +1 -1
  362. package/dist/summarizer.d.ts +1 -1
  363. package/dist/summary-snapshot.d.ts +1 -1
  364. package/dist/support-passport/index.d.ts +14 -14
  365. package/dist/support-passport/index.js +26 -26
  366. package/dist/temporal-supersession.d.ts +2 -2
  367. package/dist/temporal-timeline-recall.d.ts +1 -1
  368. package/dist/temporal-validity.d.ts +1 -1
  369. package/dist/threading.d.ts +1 -1
  370. package/dist/tier-migration.d.ts +2 -2
  371. package/dist/tier-routing.d.ts +1 -1
  372. package/dist/topics.d.ts +1 -1
  373. package/dist/transcript.d.ts +1 -1
  374. package/dist/transfer/autodetect.js +1 -1
  375. package/dist/transfer/backup.js +1 -1
  376. package/dist/transfer/capsule-export.js +2 -2
  377. package/dist/transfer/export-okf.d.ts +1 -1
  378. package/dist/transfer/export-okf.js +11 -11
  379. package/dist/transfer/types.d.ts +78 -78
  380. package/dist/trust-score-stage.d.ts +1 -1
  381. package/dist/trust-score.d.ts +1 -1
  382. package/dist/{types-CIpfYz1I.d.ts → types-eM7QIcX2.d.ts} +4 -0
  383. package/dist/types.d.ts +1 -1
  384. package/dist/utility-runtime.d.ts +1 -1
  385. package/dist/verified-recall.js +10 -10
  386. package/dist/who-knows-cli.d.ts +11 -11
  387. package/dist/who-knows-cli.js +11 -11
  388. package/dist/who-knows.d.ts +11 -11
  389. package/dist/who-knows.js +10 -10
  390. package/dist/write-envelope.d.ts +1 -1
  391. package/package.json +2 -2
  392. package/scripts/ensure-better-sqlite3.mjs +10 -0
  393. package/src/access-mcp-output-schemas.ts +1 -1
  394. package/src/activity/config.test.ts +1 -1
  395. package/src/activity/config.ts +20 -4
  396. package/src/activity/index.ts +2 -0
  397. package/src/activity/journal.test.ts +40 -0
  398. package/src/activity/privacy-status.test.ts +117 -0
  399. package/src/activity/privacy-status.ts +65 -0
  400. package/src/activity/timeline/index.ts +2 -0
  401. package/src/activity/timeline/recap-window.test.ts +129 -0
  402. package/src/activity/timeline/recap-window.ts +55 -0
  403. package/src/activity/timeline/week-previous.test.ts +119 -0
  404. package/src/activity/timeline/week-previous.ts +83 -0
  405. package/src/activity/types.ts +4 -0
  406. package/src/activity/vault-insert.test.ts +105 -0
  407. package/src/activity/vault-insert.ts +86 -0
  408. package/src/config.test.ts +1 -1
  409. package/src/dedup/index.ts +7 -0
  410. package/src/dedup/merge-decision.test.ts +157 -0
  411. package/src/dedup/merge-decision.ts +78 -0
  412. package/src/extraction-span-tokens.test.ts +69 -0
  413. package/src/extraction-span-tokens.ts +44 -0
  414. package/src/lcm/engine.ts +4 -1
  415. package/src/native-binding-hint.test.ts +38 -0
  416. package/src/native-binding-hint.ts +51 -0
  417. package/src/recall-deep-frontier.test.ts +85 -0
  418. package/src/recall-deep-frontier.ts +39 -0
  419. package/src/standup/build.test.ts +138 -12
  420. package/src/standup/build.ts +172 -23
  421. package/src/standup/http-glue.ts +1 -1
  422. package/dist/chunk-46XR5FNZ.js.map +0 -1
  423. package/dist/chunk-IGOINKTD.js.map +0 -1
  424. package/dist/chunk-UMZUKOJU.js.map +0 -1
  425. package/dist/chunk-UOQZOV2J.js.map +0 -1
  426. package/dist/chunk-VOSWUO3K.js +0 -100
  427. package/dist/chunk-VOSWUO3K.js.map +0 -1
  428. /package/dist/{chunk-EKUABFXQ.js.map → chunk-245QROHZ.js.map} +0 -0
  429. /package/dist/{chunk-KH2LZMD5.js.map → chunk-2OXBS2LV.js.map} +0 -0
  430. /package/dist/{chunk-K7NUAY36.js.map → chunk-4PHT7KE2.js.map} +0 -0
  431. /package/dist/{chunk-AZLSFKGU.js.map → chunk-4PWANX5V.js.map} +0 -0
  432. /package/dist/{chunk-GO657WPH.js.map → chunk-52I6AHO6.js.map} +0 -0
  433. /package/dist/{chunk-MBXTGOFR.js.map → chunk-54BRW3BL.js.map} +0 -0
  434. /package/dist/{chunk-LWI43S46.js.map → chunk-5E7KXID5.js.map} +0 -0
  435. /package/dist/{chunk-MWLBRFLY.js.map → chunk-5KVMT25I.js.map} +0 -0
  436. /package/dist/{chunk-KKGWB2LG.js.map → chunk-7BS5UVXA.js.map} +0 -0
  437. /package/dist/{chunk-O2RJZR6J.js.map → chunk-7FLINMUE.js.map} +0 -0
  438. /package/dist/{chunk-XORZMKVF.js.map → chunk-7MOYAT4Y.js.map} +0 -0
  439. /package/dist/{chunk-AVYNKPFS.js.map → chunk-C6TMLF3A.js.map} +0 -0
  440. /package/dist/{chunk-C24UZSFW.js.map → chunk-CEH2AFXG.js.map} +0 -0
  441. /package/dist/{chunk-IE7N2YK6.js.map → chunk-CNZVEU4X.js.map} +0 -0
  442. /package/dist/{chunk-FNK4KIYR.js.map → chunk-D3AUQXTJ.js.map} +0 -0
  443. /package/dist/{chunk-BDGWA5GK.js.map → chunk-DJLH3XWM.js.map} +0 -0
  444. /package/dist/{chunk-2V4YPDIX.js.map → chunk-E2PORO7O.js.map} +0 -0
  445. /package/dist/{chunk-5IYJWCLC.js.map → chunk-E62M4H4M.js.map} +0 -0
  446. /package/dist/{chunk-NEWY74GS.js.map → chunk-EG4FHU5C.js.map} +0 -0
  447. /package/dist/{chunk-KMPEBHH5.js.map → chunk-EMAEDM2J.js.map} +0 -0
  448. /package/dist/{chunk-2YDU4VR7.js.map → chunk-G3B3LP6A.js.map} +0 -0
  449. /package/dist/{chunk-D6Q5EPOV.js.map → chunk-HCERYDRI.js.map} +0 -0
  450. /package/dist/{chunk-6BYJQ3L2.js.map → chunk-HJQZQUPC.js.map} +0 -0
  451. /package/dist/{chunk-S63O62DN.js.map → chunk-HPGXB56F.js.map} +0 -0
  452. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  453. /package/dist/{chunk-QK375NXZ.js.map → chunk-ISX7JODR.js.map} +0 -0
  454. /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
  455. /package/dist/{chunk-RI4CMRTZ.js.map → chunk-JNZSNJ43.js.map} +0 -0
  456. /package/dist/{chunk-GUG4LW4I.js.map → chunk-KIJCXLW7.js.map} +0 -0
  457. /package/dist/{chunk-XDUQR5R7.js.map → chunk-KT3ERTF6.js.map} +0 -0
  458. /package/dist/{chunk-2MYBDWUY.js.map → chunk-KWLDB64F.js.map} +0 -0
  459. /package/dist/{chunk-UMSTKKMV.js.map → chunk-LPSTQR26.js.map} +0 -0
  460. /package/dist/{chunk-MFIFCXS3.js.map → chunk-LTWFU6VJ.js.map} +0 -0
  461. /package/dist/{chunk-X32ALJQB.js.map → chunk-M2BY5IZL.js.map} +0 -0
  462. /package/dist/{chunk-UJICQ77Y.js.map → chunk-MK7EJLB4.js.map} +0 -0
  463. /package/dist/{chunk-7X63THIR.js.map → chunk-NR36NW24.js.map} +0 -0
  464. /package/dist/{chunk-VYIPVLRX.js.map → chunk-QB66LBXA.js.map} +0 -0
  465. /package/dist/{chunk-RPHCLGQ7.js.map → chunk-QKTGCL6M.js.map} +0 -0
  466. /package/dist/{chunk-OMA2B7GY.js.map → chunk-RLEJULGN.js.map} +0 -0
  467. /package/dist/{chunk-I2TIUGLC.js.map → chunk-SQEIPTDV.js.map} +0 -0
  468. /package/dist/{chunk-NEDBOZ7G.js.map → chunk-TGKLVAML.js.map} +0 -0
  469. /package/dist/{chunk-FY62KW6Q.js.map → chunk-TS37MXC7.js.map} +0 -0
  470. /package/dist/{chunk-XUKS57W7.js.map → chunk-TXCLDIXJ.js.map} +0 -0
  471. /package/dist/{chunk-YSYHSZWD.js.map → chunk-VSQG4AXL.js.map} +0 -0
  472. /package/dist/{chunk-ULTK4NZY.js.map → chunk-WD424KYT.js.map} +0 -0
  473. /package/dist/{chunk-OERZXNSK.js.map → chunk-X5SDZMO7.js.map} +0 -0
  474. /package/dist/{chunk-XSPVSEAN.js.map → chunk-XN33JLRF.js.map} +0 -0
  475. /package/dist/{chunk-6ULLVM2V.js.map → chunk-Y2ECPAJI.js.map} +0 -0
  476. /package/dist/{chunk-5UP5R37C.js.map → chunk-Y6KDJQLK.js.map} +0 -0
  477. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  478. /package/dist/{chunk-6ZRLH4VS.js.map → chunk-YYDOUOYM.js.map} +0 -0
  479. /package/dist/{chunk-XVCYV7WQ.js.map → chunk-ZIGSNLYI.js.map} +0 -0
  480. /package/dist/{chunk-FI6FT6YX.js.map → chunk-ZPZLGN4Y.js.map} +0 -0
  481. /package/dist/{chunk-SVATDJNY.js.map → chunk-ZRQPX2DW.js.map} +0 -0
@@ -1,6 +1,6 @@
1
- export { bA as WHO_KNOWS_AUTHORSHIP_BONUS, bB as WHO_KNOWS_DEFAULT_LIMIT, bC as WHO_KNOWS_MAX_EVIDENCE, bD as WHO_KNOWS_MAX_LIMIT, bE as WHO_KNOWS_MCP_TOOLS, bF as WhoKnowsEntity, bG as WhoKnowsEvidence, bH as WhoKnowsHit, bI as WhoKnowsHttpOutcome, W as WhoKnowsResult, bJ as WhoKnowsStorage, bT as computeWhoKnows, bZ as handleWhoKnowsHttpQuery, c2 as loadWhoKnowsEntities, c9 as tokenizeTopic, ca as validateWhoKnowsInput } from './access-service-C2tV2-uL.js';
2
- import './types-CIpfYz1I.js';
3
- import './orchestrator-CaqnwNwM.js';
1
+ export { bA as WHO_KNOWS_AUTHORSHIP_BONUS, bB as WHO_KNOWS_DEFAULT_LIMIT, bC as WHO_KNOWS_MAX_EVIDENCE, bD as WHO_KNOWS_MAX_LIMIT, bE as WHO_KNOWS_MCP_TOOLS, bF as WhoKnowsEntity, bG as WhoKnowsEvidence, bH as WhoKnowsHit, bI as WhoKnowsHttpOutcome, W as WhoKnowsResult, bJ as WhoKnowsStorage, bT as computeWhoKnows, bZ as handleWhoKnowsHttpQuery, c2 as loadWhoKnowsEntities, c9 as tokenizeTopic, ca as validateWhoKnowsInput } from './access-service-DcfM0Vf0.js';
2
+ import './types-eM7QIcX2.js';
3
+ import './orchestrator-Btq9lzAN.js';
4
4
  import './recall-state.js';
5
5
  import './utils/serialize-mutations.js';
6
6
  import './search/port.js';
@@ -16,7 +16,7 @@ import './active-context-config.js';
16
16
  import './types-continuity.js';
17
17
  import './included-memories.js';
18
18
  import './briefing.js';
19
- import './storage-CtsaojWD.js';
19
+ import './storage-6fn7BPmb.js';
20
20
  import './corpus-read-cancellation.js';
21
21
  import './artifact-search.js';
22
22
  import './active-context-transform.js';
@@ -39,8 +39,8 @@ import './resolve-provider-secret.js';
39
39
  import './transcript.js';
40
40
  import './session-integrity.js';
41
41
  import './summarizer.js';
42
- import './maintenance-BBeaeYRR.js';
43
- import './catalog-C2jA-gLm.js';
42
+ import './maintenance-BRcc3Hx8.js';
43
+ import './catalog-BmBXTtOs.js';
44
44
  import './namespaces/search.js';
45
45
  import './compounding/engine.js';
46
46
  import './shared-context/manager.js';
@@ -50,7 +50,7 @@ import './utility-runtime.js';
50
50
  import './tier-routing.js';
51
51
  import './lifecycle.js';
52
52
  import './orchestration/compression-guideline-coordinator.js';
53
- import './semantic-consolidation-BiX68wZA.js';
53
+ import './semantic-consolidation-DW3rEUoW.js';
54
54
  import './connectors/codex-materialize.js';
55
55
  import './logger.js';
56
56
  import './embedding-fallback.js';
@@ -72,10 +72,10 @@ import './conversation-index/chunker.js';
72
72
  import './conversation-index/backend.js';
73
73
  import './faiss-adapter-BHecI1fF.js';
74
74
  import './runtime/child-process.js';
75
- import './dependency-propagation-delivery-D4WMbOwA.js';
75
+ import './dependency-propagation-delivery-BC3bCEet.js';
76
76
  import './namespaces/storage.js';
77
77
  import './threading.js';
78
- import './scope-profiles-DFaojvoP.js';
78
+ import './scope-profiles-DqbxQXIS.js';
79
79
  import './graph-444E-DrF.js';
80
80
  import './recall-xray.js';
81
81
  import './memory-provenance.js';
@@ -88,7 +88,7 @@ import './negative.js';
88
88
  import './session-observer-state.js';
89
89
  import './semantic-BalR6EXU.js';
90
90
  import './replay/types.js';
91
- import './service-D5h2zZ0M.js';
91
+ import './service-B2vJU_Bx.js';
92
92
  import './extraction-judge.js';
93
93
  import './lcm/engine.js';
94
94
  import './lcm/archive.js';
@@ -110,7 +110,7 @@ import './recall-audit.js';
110
110
  import './types-B1VHaf2w.js';
111
111
  import './transfer/capsule-import.js';
112
112
  import './transfer/types.js';
113
- import './access-namespace-preflight-50VIkPhB.js';
113
+ import './access-namespace-preflight-S8fhQcCo.js';
114
114
  import './access-token-capabilities.js';
115
115
  import 'node:async_hooks';
116
116
  import './recall-explain-renderer.js';
package/dist/who-knows.js CHANGED
@@ -9,19 +9,19 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-VYIPVLRX.js";
13
- import "./chunk-K7NUAY36.js";
12
+ } from "./chunk-QB66LBXA.js";
13
+ import "./chunk-4PHT7KE2.js";
14
14
  import "./chunk-UHVXE24Y.js";
15
15
  import "./chunk-4ZWCQJNM.js";
16
16
  import "./chunk-WVGXCBOC.js";
17
- import "./chunk-OERZXNSK.js";
18
- import "./chunk-6BYJQ3L2.js";
19
- import "./chunk-YQNNHLCG.js";
20
- import "./chunk-6KTXE6A3.js";
21
- import "./chunk-N37X5RU7.js";
17
+ import "./chunk-X5SDZMO7.js";
18
+ import "./chunk-HJQZQUPC.js";
22
19
  import "./chunk-NNBZS3DY.js";
23
20
  import "./chunk-CYEPCZN5.js";
24
21
  import "./chunk-GIC6BASP.js";
22
+ import "./chunk-YQNNHLCG.js";
23
+ import "./chunk-6KTXE6A3.js";
24
+ import "./chunk-N37X5RU7.js";
25
25
  import "./chunk-W7IGLX4G.js";
26
26
  import "./chunk-GUMZC2BO.js";
27
27
  import "./chunk-227UFSEQ.js";
@@ -33,8 +33,8 @@ import "./chunk-XXW32OL7.js";
33
33
  import "./chunk-SCU65EZI.js";
34
34
  import "./chunk-2GF27PGH.js";
35
35
  import "./chunk-S2HLHAZ4.js";
36
- import "./chunk-LDXUBPMO.js";
37
36
  import "./chunk-DM2T26WE.js";
37
+ import "./chunk-LDXUBPMO.js";
38
38
  import "./chunk-XSTNGNJP.js";
39
39
  import "./chunk-AAD2ZS6P.js";
40
40
  import "./chunk-LUDBXTBJ.js";
@@ -49,10 +49,10 @@ import "./chunk-RBOJCG4T.js";
49
49
  import "./chunk-NNZFPYYX.js";
50
50
  import "./chunk-5WITETWU.js";
51
51
  import "./chunk-6CIAGZ6X.js";
52
- import "./chunk-C24UZSFW.js";
52
+ import "./chunk-CEH2AFXG.js";
53
53
  import "./chunk-JXN77SGO.js";
54
- import "./chunk-ZLQ37WJX.js";
55
54
  import "./chunk-IUM3VSHI.js";
55
+ import "./chunk-ZLQ37WJX.js";
56
56
  import "./chunk-WKAXBXVA.js";
57
57
  import "./chunk-BT7NVCML.js";
58
58
  import "./chunk-C64XATK7.js";
@@ -1,4 +1,4 @@
1
- import { y as MemoryCategory, N as MemorySubject } from './types-CIpfYz1I.js';
1
+ import { y as MemoryCategory, N as MemorySubject } from './types-eM7QIcX2.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.66.8",
3
+ "version": "9.66.10",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3217,7 +3217,7 @@
3217
3217
  "core"
3218
3218
  ],
3219
3219
  "peerDependencies": {
3220
- "@remnic/coding-graph": "^9.66.8"
3220
+ "@remnic/coding-graph": "^9.66.10"
3221
3221
  },
3222
3222
  "peerDependenciesMeta": {
3223
3223
  "@remnic/coding-graph": {
@@ -30,6 +30,7 @@ if (!rebuild.ok) {
30
30
  console.error(
31
31
  "[remnic] Install the package dependencies so node-gyp is available locally, then retry installation.",
32
32
  );
33
+ console.error(recoveryHint());
33
34
  process.exit(rebuild.status ?? 1);
34
35
  }
35
36
 
@@ -41,6 +42,7 @@ try {
41
42
  console.error(
42
43
  `[remnic] better-sqlite3 rebuild completed but the binding still does not load: ${errorMessage(error)}`,
43
44
  );
45
+ console.error(recoveryHint());
44
46
  process.exit(1);
45
47
  }
46
48
 
@@ -123,3 +125,11 @@ function clearBetterSqlite3RequireCache(packageDir) {
123
125
  function errorMessage(error) {
124
126
  return error instanceof Error ? error.message : String(error);
125
127
  }
128
+
129
+ function recoveryHint() {
130
+ const nodeMajor = process.versions.node.split(".")[0];
131
+ return (
132
+ `[remnic] Recovery: run \`npm rebuild better-sqlite3 --build-from-source\` with Node ${nodeMajor} ` +
133
+ `(ABI ${process.versions.modules}) — the shipped binding does not match this Node/ABI.`
134
+ );
135
+ }
@@ -82,7 +82,7 @@ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
82
82
  skipped: T_NUMBER,
83
83
  removed: T_ARRAY,
84
84
  }),
85
- standup: objectSchema({ date: T_STRING, yesterday: T_STRING, today: T_STRING, highlights: T_ARRAY, blockers: T_ARRAY, activityGrid: T_STRING, markdown: T_STRING }),
85
+ standup: objectSchema({ date: T_STRING, yesterday: T_STRING, today: T_STRING, highlights: T_ARRAY, priorities: T_ARRAY, blockers: T_ARRAY, activityGrid: T_STRING, markdown: T_STRING }),
86
86
  action_confidence: objectSchema({
87
87
  schemaVersion: T_NUMBER,
88
88
  decision: T_STRING,
@@ -17,7 +17,7 @@ test("parseActivityConfig defaults to an inert, search-only configuration", () =
17
17
  minConfidence: 0.7,
18
18
  minImportance: "normal",
19
19
  maxMemoriesPerDay: 0,
20
- timeline: { enabled: false, journal: { enabled: false }, qa: { enabled: false, maxRangeDays: 31 } },
20
+ timeline: { enabled: false, journal: { enabled: false, source: "file" }, qa: { enabled: false, maxRangeDays: 31 } },
21
21
  });
22
22
  assert.deepEqual(parseActivityConfig(undefined), defaultActivityConfig());
23
23
  });
@@ -1,5 +1,6 @@
1
1
  import { coerceBooleanLike, coerceNumber } from "../connectors/coerce.js";
2
2
  import { assertValidTimezone } from "./digest.js";
3
+ import { resolveJournalSource } from "./journal-source.js";
3
4
  import type { ImportanceLevel } from "../types.js";
4
5
  import type {
5
6
  ActivityConfig,
@@ -29,7 +30,7 @@ export function defaultActivityConfig(): ActivityConfig {
29
30
  minConfidence: 0.7,
30
31
  minImportance: "normal",
31
32
  maxMemoriesPerDay: 0,
32
- timeline: { enabled: false, journal: { enabled: false }, qa: { enabled: false, maxRangeDays: 31 } },
33
+ timeline: { enabled: false, journal: { enabled: false, source: "file" }, qa: { enabled: false, maxRangeDays: 31 } },
33
34
  };
34
35
  }
35
36
 
@@ -200,7 +201,7 @@ export function parseActivityConfig(raw: unknown): ActivityConfig {
200
201
  * is malformed and must fail rather than silently disabling the layer.
201
202
  */
202
203
  function parseTimelineConfig(raw: unknown): ActivityTimelineConfig {
203
- if (raw === undefined) return { enabled: false, journal: { enabled: false }, qa: parseTimelineQaConfig(undefined) };
204
+ if (raw === undefined) return { enabled: false, journal: { enabled: false, source: "file" }, qa: parseTimelineQaConfig(undefined) };
204
205
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
205
206
  throw new TypeError("activity.timeline must be an object");
206
207
  }
@@ -217,7 +218,7 @@ function parseTimelineConfig(raw: unknown): ActivityTimelineConfig {
217
218
  }
218
219
 
219
220
  function parseTimelineJournalConfig(raw: unknown): ActivityTimelineJournalConfig {
220
- if (raw === undefined) return { enabled: false };
221
+ if (raw === undefined) return { enabled: false, source: "file" };
221
222
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
222
223
  throw new TypeError("activity.timeline.journal must be an object");
223
224
  }
@@ -226,7 +227,22 @@ function parseTimelineJournalConfig(raw: unknown): ActivityTimelineJournalConfig
226
227
  if (journal.enabled !== undefined && enabledValue === undefined) {
227
228
  throw new TypeError("activity.timeline.journal.enabled must be a boolean");
228
229
  }
229
- return { enabled: enabledValue ?? false };
230
+ const heading = journal.heading;
231
+ if (heading !== undefined && typeof heading !== "string") {
232
+ throw new TypeError("activity.timeline.journal.heading must be a string");
233
+ }
234
+ const source = journal.source === undefined ? "file" : typeof journal.source === "string" ? journal.source : "";
235
+ const resolved = resolveJournalSource({ source, heading: heading ?? "" });
236
+ if (!resolved.ok) {
237
+ if (resolved.error === "unknown_source") {
238
+ throw new RangeError('activity.timeline.journal.source must be one of "file", "vault"');
239
+ }
240
+ throw new RangeError('activity.timeline.journal.heading must be a non-empty string when source is "vault"');
241
+ }
242
+ if (resolved.mode === "vault") {
243
+ return { enabled: enabledValue ?? false, source: "vault", heading: resolved.heading };
244
+ }
245
+ return { enabled: enabledValue ?? false, source: "file" };
230
246
  }
231
247
 
232
248
  function parseTimelineQaConfig(raw: unknown): ActivityTimelineQaConfig {
@@ -19,9 +19,11 @@ export * from "./journal.js";
19
19
  export * from "./journal-vault-read.js";
20
20
  export * from "./memory-gen.js";
21
21
  export * from "./privacy.js";
22
+ export * from "./privacy-status.js";
22
23
  export * from "./privacy-window.js";
23
24
  export * from "./vault-path.js";
24
25
  export * from "./vault-publish.js";
26
+ export * from "./vault-insert.js";
25
27
  export * from "./vault-frontmatter.js";
26
28
  export * from "./vault-wikilink.js";
27
29
  export * from "./vault-region.js";
@@ -32,6 +32,46 @@ test("activity.timeline.journal.enabled defaults off", () => {
32
32
  );
33
33
  });
34
34
 
35
+ test("activity.timeline.journal source defaults to file with no heading", () => {
36
+ const journal = parseActivityConfig(undefined).timeline.journal;
37
+ assert.equal(journal.source, "file");
38
+ assert.equal(journal.heading, undefined);
39
+ });
40
+
41
+ test("activity.timeline.journal vault mode trims and stores the heading", () => {
42
+ const journal = parseActivityConfig({ timeline: { journal: { enabled: true, source: "vault", heading: " Journal " } } }).timeline.journal;
43
+ assert.deepEqual(journal, { enabled: true, source: "vault", heading: "Journal" });
44
+ });
45
+
46
+ test("activity.timeline.journal vault mode requires a non-empty heading", () => {
47
+ for (const heading of [undefined, "", " "]) {
48
+ assert.throws(
49
+ () => parseActivityConfig({ timeline: { journal: { source: "vault", heading } } }),
50
+ RangeError,
51
+ );
52
+ }
53
+ });
54
+
55
+ test("activity.timeline.journal rejects an unknown source", () => {
56
+ assert.throws(
57
+ () => parseActivityConfig({ timeline: { journal: { source: "memoryDir" } } }),
58
+ /activity\.timeline\.journal\.source must be one of "file", "vault"/,
59
+ );
60
+ });
61
+
62
+ test("activity.timeline.journal rejects a non-string heading", () => {
63
+ assert.throws(
64
+ () => parseActivityConfig({ timeline: { journal: { heading: 5 } } }),
65
+ /activity\.timeline\.journal\.heading must be a string/,
66
+ );
67
+ });
68
+
69
+ test("activity.timeline.journal file mode ignores a provided heading", () => {
70
+ const journal = parseActivityConfig({ timeline: { journal: { source: "file", heading: "Ignored" } } }).timeline.journal;
71
+ assert.deepEqual(journal, { enabled: false, source: "file" });
72
+ assert.equal("heading" in journal, false);
73
+ });
74
+
35
75
  test("seed is a hard no-op without force", () => {
36
76
  withMemoryDir((memoryDir) => {
37
77
  const first = seedJournal({
@@ -0,0 +1,117 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { ACTIVITY_ANALYSIS_STATUSES, buildActivityHealth } from "./privacy-status.js";
5
+
6
+ const base = {
7
+ enabled: true,
8
+ retentionDays: 30,
9
+ sourceRevision: "rev-42",
10
+ lastAnalysisStatus: "ok",
11
+ observationCount: 7,
12
+ cardCount: 3,
13
+ } as const;
14
+
15
+ test("enabled true returns full snapshot with trimmed revision", () => {
16
+ const snapshot = buildActivityHealth({ ...base, sourceRevision: " rev-42 " });
17
+ assert.deepEqual(snapshot, {
18
+ enabled: true,
19
+ retentionDays: 30,
20
+ sourceRevision: "rev-42",
21
+ lastAnalysisStatus: "ok",
22
+ observationCount: 7,
23
+ cardCount: 3,
24
+ });
25
+ });
26
+
27
+ test("snapshot keys equal the documented set", () => {
28
+ const snapshot = buildActivityHealth({ ...base });
29
+ assert.deepEqual(Object.keys(snapshot), [
30
+ "enabled",
31
+ "retentionDays",
32
+ "sourceRevision",
33
+ "lastAnalysisStatus",
34
+ "observationCount",
35
+ "cardCount",
36
+ ]);
37
+ });
38
+
39
+ test("enabled false still returns snapshot with counts as given", () => {
40
+ const snapshot = buildActivityHealth({
41
+ ...base,
42
+ enabled: false,
43
+ observationCount: 9,
44
+ cardCount: 0,
45
+ });
46
+ assert.equal(snapshot.enabled, false);
47
+ assert.equal(snapshot.retentionDays, 30);
48
+ assert.equal(snapshot.observationCount, 9);
49
+ assert.equal(snapshot.cardCount, 0);
50
+ });
51
+
52
+ test("retentionDays 0 (keep forever) is preserved", () => {
53
+ assert.equal(buildActivityHealth({ ...base, retentionDays: 0 }).retentionDays, 0);
54
+ });
55
+
56
+ test("retentionDays must be a non-negative integer", () => {
57
+ assert.throws(
58
+ () => buildActivityHealth({ ...base, retentionDays: -1 }),
59
+ { name: "RangeError", message: /retentionDays/ },
60
+ );
61
+ assert.throws(() => buildActivityHealth({ ...base, retentionDays: 1.5 }), /retentionDays/);
62
+ });
63
+
64
+ test("null or missing sourceRevision maps to null", () => {
65
+ const nulled = buildActivityHealth({ ...base, sourceRevision: null });
66
+ const missing = buildActivityHealth({ ...base, sourceRevision: undefined });
67
+ assert.equal(nulled.sourceRevision, null);
68
+ assert.equal(missing.sourceRevision, null);
69
+ });
70
+
71
+ test("trimmed-blank sourceRevision maps to null", () => {
72
+ const blank = buildActivityHealth({ ...base, sourceRevision: " \t " });
73
+ const empty = buildActivityHealth({ ...base, sourceRevision: "" });
74
+ assert.equal(blank.sourceRevision, null);
75
+ assert.equal(empty.sourceRevision, null);
76
+ });
77
+
78
+ test("missing lastAnalysisStatus defaults to never", () => {
79
+ const missing = buildActivityHealth({ ...base, lastAnalysisStatus: undefined });
80
+ const nulled = buildActivityHealth({ ...base, lastAnalysisStatus: null });
81
+ assert.equal(missing.lastAnalysisStatus, "never");
82
+ assert.equal(nulled.lastAnalysisStatus, "never");
83
+ });
84
+
85
+ test("each allow-list status round-trips", () => {
86
+ for (const status of ACTIVITY_ANALYSIS_STATUSES) {
87
+ const snapshot = buildActivityHealth({ ...base, lastAnalysisStatus: status });
88
+ assert.equal(snapshot.lastAnalysisStatus, status);
89
+ }
90
+ });
91
+
92
+ test("unknown analysis status throws listing the allow-list", () => {
93
+ assert.throws(
94
+ () => buildActivityHealth({ ...base, lastAnalysisStatus: "pending" }),
95
+ (err: unknown) => {
96
+ assert.ok(err instanceof TypeError);
97
+ assert.match(err.message, /analysis status/);
98
+ for (const status of ACTIVITY_ANALYSIS_STATUSES) {
99
+ assert.ok(err.message.includes(status), `message lists ${status}`);
100
+ }
101
+ return true;
102
+ },
103
+ );
104
+ });
105
+
106
+ test("negative or non-integer counts throw", () => {
107
+ assert.throws(
108
+ () => buildActivityHealth({ ...base, observationCount: -1 }),
109
+ { name: "RangeError", message: /count/ },
110
+ );
111
+ assert.throws(
112
+ () => buildActivityHealth({ ...base, cardCount: -2 }),
113
+ { name: "RangeError", message: /count/ },
114
+ );
115
+ assert.throws(() => buildActivityHealth({ ...base, observationCount: 1.5 }), /count/);
116
+ assert.throws(() => buildActivityHealth({ ...base, cardCount: Number.NaN }), /count/);
117
+ });
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Content-free activity health snapshot (issue #2053 slice).
3
+ *
4
+ * Pure status builder. Surfaces report gate state, retention policy, source
5
+ * revision, last analysis outcome, and counts only — never observation or
6
+ * card content, prompts, or media.
7
+ */
8
+
9
+ export const ACTIVITY_ANALYSIS_STATUSES = ["ok", "failed", "skipped", "never"] as const;
10
+ export type ActivityAnalysisStatus = (typeof ACTIVITY_ANALYSIS_STATUSES)[number];
11
+
12
+ export interface ActivityHealthSnapshot {
13
+ enabled: boolean;
14
+ retentionDays: number;
15
+ sourceRevision: string | null;
16
+ lastAnalysisStatus: ActivityAnalysisStatus;
17
+ observationCount: number;
18
+ cardCount: number;
19
+ }
20
+
21
+ const STATUS_ALLOW_LIST = ACTIVITY_ANALYSIS_STATUSES.join(", ");
22
+
23
+ /**
24
+ * Build the health snapshot. Master `enabled: false` still returns a snapshot
25
+ * (surfaces must report the gate); counts stay as given and are never redacted.
26
+ */
27
+ export function buildActivityHealth(input: {
28
+ enabled: boolean;
29
+ retentionDays: number;
30
+ sourceRevision?: string | null;
31
+ lastAnalysisStatus?: string | null;
32
+ observationCount: number;
33
+ cardCount: number;
34
+ }): ActivityHealthSnapshot {
35
+ const { enabled, retentionDays, observationCount, cardCount } = input;
36
+ if (!Number.isInteger(retentionDays) || retentionDays < 0) {
37
+ throw new RangeError("retentionDays must be a non-negative integer");
38
+ }
39
+ if (!Number.isInteger(observationCount) || observationCount < 0) {
40
+ throw new RangeError("invalid count: observationCount must be a non-negative integer");
41
+ }
42
+ if (!Number.isInteger(cardCount) || cardCount < 0) {
43
+ throw new RangeError("invalid count: cardCount must be a non-negative integer");
44
+ }
45
+ const rawRevision = input.sourceRevision;
46
+ const trimmedRevision = typeof rawRevision === "string" ? rawRevision.trim() : "";
47
+ const rawStatus = input.lastAnalysisStatus;
48
+ let lastAnalysisStatus: ActivityAnalysisStatus = "never";
49
+ if (rawStatus !== undefined && rawStatus !== null) {
50
+ if (!(ACTIVITY_ANALYSIS_STATUSES as readonly string[]).includes(rawStatus)) {
51
+ throw new TypeError(
52
+ `unknown analysis status ${JSON.stringify(rawStatus)}; expected one of: ${STATUS_ALLOW_LIST}`,
53
+ );
54
+ }
55
+ lastAnalysisStatus = rawStatus as ActivityAnalysisStatus;
56
+ }
57
+ return {
58
+ enabled,
59
+ retentionDays,
60
+ sourceRevision: trimmedRevision === "" ? null : trimmedRevision,
61
+ lastAnalysisStatus,
62
+ observationCount,
63
+ cardCount,
64
+ };
65
+ }
@@ -14,8 +14,10 @@ export * from "./recap-export.js";
14
14
  export * from "./recap-markdown.js";
15
15
  export * from "./week-export.js";
16
16
  export * from "./week-snapshot.js";
17
+ export * from "./week-previous.js";
17
18
  export * from "./analysis-batch.js";
18
19
  export * from "./analysis-evidence.js";
19
20
  export * from "./analysis-prompt.js";
20
21
  export * from "./analysis-claim.js";
21
22
  export * from "./analysis-order.js";
23
+ export * from "./recap-window.js";
@@ -0,0 +1,129 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+
4
+ import {
5
+ clipCardsToRecapWindow,
6
+ type RecapWindowCard,
7
+ } from "./recap-window.js";
8
+
9
+ const MINUTE = 60_000;
10
+ const DAY_START = Date.UTC(2026, 0, 15); // 2026-01-15T00:00:00Z
11
+ const DAY_END = DAY_START + 24 * 60 * 60_000;
12
+
13
+ const iso = (ms: number): string => new Date(ms).toISOString();
14
+
15
+ const card = (id: string, startMs: number, endMs: number): RecapWindowCard => ({
16
+ id,
17
+ startUtc: iso(startMs),
18
+ endUtc: iso(endMs),
19
+ });
20
+
21
+ describe("clipCardsToRecapWindow", () => {
22
+ it("returns [] for empty input", () => {
23
+ assert.deepEqual(clipCardsToRecapWindow([], DAY_START, DAY_END), []);
24
+ });
25
+
26
+ it("excludes a card ending exactly at windowStart and one starting exactly at windowEnd", () => {
27
+ const before = card("before", DAY_START - 2 * MINUTE, DAY_START);
28
+ const after = card("after", DAY_END, DAY_END + 2 * MINUTE);
29
+ const inside = card("inside", DAY_START, DAY_END);
30
+
31
+ const result = clipCardsToRecapWindow([before, after, inside], DAY_START, DAY_END);
32
+
33
+ assert.deepEqual(
34
+ result.map((c) => c.id),
35
+ ["inside"],
36
+ );
37
+ assert.equal(result[0]?.startMs, DAY_START);
38
+ assert.equal(result[0]?.endMs, DAY_END);
39
+ assert.equal(result[0]?.durationMs, DAY_END - DAY_START);
40
+
41
+ // Each midnight-touching card lands in exactly one adjacent window.
42
+ const windowMs = DAY_END - DAY_START;
43
+ const prevDay = clipCardsToRecapWindow([before], DAY_START - windowMs, DAY_START);
44
+ const nextDay = clipCardsToRecapWindow([after], DAY_END, DAY_END + windowMs);
45
+ assert.equal(prevDay[0]?.id, "before");
46
+ assert.equal(nextDay[0]?.id, "after");
47
+ });
48
+
49
+ it("clips a card straddling the window start", () => {
50
+ const straddle = card("straddle", DAY_START - 30 * MINUTE, DAY_START + 90 * MINUTE);
51
+
52
+ const result = clipCardsToRecapWindow([straddle], DAY_START, DAY_END);
53
+
54
+ assert.equal(result.length, 1);
55
+ assert.equal(result[0]?.startMs, DAY_START);
56
+ assert.equal(result[0]?.endMs, DAY_START + 90 * MINUTE);
57
+ assert.equal(result[0]?.durationMs, 90 * MINUTE);
58
+ });
59
+
60
+ it("clips a card straddling the window end", () => {
61
+ const straddle = card("tail", DAY_END - 5 * MINUTE, DAY_END + 45 * MINUTE);
62
+
63
+ const result = clipCardsToRecapWindow([straddle], DAY_START, DAY_END);
64
+
65
+ assert.equal(result.length, 1);
66
+ assert.equal(result[0]?.endMs, DAY_END);
67
+ assert.equal(result[0]?.durationMs, 5 * MINUTE);
68
+ });
69
+
70
+ it("skips cards with unparseable timestamps without throwing", () => {
71
+ const good = card("good", DAY_START + MINUTE, DAY_START + 10 * MINUTE);
72
+ const bad: RecapWindowCard[] = [
73
+ { id: "bad-start", startUtc: "not-a-date", endUtc: iso(DAY_START + 5 * MINUTE) },
74
+ { id: "bad-end", startUtc: iso(DAY_START), endUtc: "" },
75
+ good,
76
+ ];
77
+
78
+ const result = clipCardsToRecapWindow(bad, DAY_START, DAY_END);
79
+
80
+ assert.deepEqual(
81
+ result.map((c) => c.id),
82
+ ["good"],
83
+ );
84
+ assert.equal(result[0]?.durationMs, 9 * MINUTE);
85
+ });
86
+
87
+ it("throws RangeError on inverted or empty window", () => {
88
+ assert.throws(
89
+ () => clipCardsToRecapWindow([], DAY_END, DAY_START),
90
+ RangeError,
91
+ );
92
+ assert.throws(
93
+ () => clipCardsToRecapWindow([], DAY_START, DAY_START),
94
+ RangeError,
95
+ );
96
+ });
97
+
98
+ it("throws RangeError on non-finite window bounds", () => {
99
+ // NaN and Infinity pass `end <= start`, so without an explicit finite
100
+ // check they would produce NaN timestamps instead of an error.
101
+ for (const [start, end] of [
102
+ [Number.NaN, DAY_END],
103
+ [DAY_START, Number.NaN],
104
+ [Number.POSITIVE_INFINITY, DAY_END],
105
+ [DAY_START, Number.POSITIVE_INFINITY],
106
+ ] as const) {
107
+ assert.throws(() => clipCardsToRecapWindow([], start, end), /finite/);
108
+ }
109
+ });
110
+
111
+ it("sorts by startMs then id, byte-identical across calls", () => {
112
+ const same = DAY_START + 60 * MINUTE;
113
+ const cards: RecapWindowCard[] = [
114
+ card("z-late", DAY_START + 120 * MINUTE, DAY_START + 130 * MINUTE),
115
+ card("b-tie", same, same + 10 * MINUTE),
116
+ card("a-tie", same, same + 10 * MINUTE),
117
+ card("early", DAY_START + 5 * MINUTE, DAY_START + 6 * MINUTE),
118
+ ];
119
+
120
+ const first = clipCardsToRecapWindow(cards, DAY_START, DAY_END);
121
+ const second = clipCardsToRecapWindow(cards, DAY_START, DAY_END);
122
+
123
+ assert.deepEqual(
124
+ first.map((c) => c.id),
125
+ ["early", "a-tie", "b-tie", "z-late"],
126
+ );
127
+ assert.deepEqual(first, second);
128
+ });
129
+ });