@remnic/core 9.66.0 → 9.66.1

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 (482) hide show
  1. package/dist/access-admin-ops-surface.d.ts +11 -11
  2. package/dist/access-admin-ops-surface.js +22 -22
  3. package/dist/access-authorization-probe.d.ts +11 -11
  4. package/dist/access-authorization-probe.js +23 -23
  5. package/dist/access-boundary.d.ts +11 -11
  6. package/dist/access-boundary.js +22 -22
  7. package/dist/access-cli.js +86 -84
  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 +22 -22
  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 +24 -24
  18. package/dist/access-http.d.ts +12 -12
  19. package/dist/access-http.js +39 -39
  20. package/dist/access-identity-continuity-surface.d.ts +9 -9
  21. package/dist/access-identity-continuity-surface.js +22 -22
  22. package/dist/access-lcm-surface.d.ts +11 -11
  23. package/dist/access-lcm-surface.js +22 -22
  24. package/dist/access-mcp.d.ts +11 -11
  25. package/dist/access-mcp.js +29 -29
  26. package/dist/access-memory-search-fanout.d.ts +2 -2
  27. package/dist/{access-namespace-preflight-CLWUoMyW.d.ts → access-namespace-preflight-50VIkPhB.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +22 -22
  30. package/dist/access-observe-write-surface.d.ts +11 -11
  31. package/dist/access-observe-write-surface.js +22 -22
  32. package/dist/access-offline-manifest.d.ts +9 -9
  33. package/dist/access-operations-batch.js +24 -24
  34. package/dist/access-operations.d.ts +16 -16
  35. package/dist/access-operations.js +28 -28
  36. package/dist/access-recall-concurrency.d.ts +11 -11
  37. package/dist/access-recall-concurrency.js +22 -22
  38. package/dist/access-recall-response.d.ts +11 -11
  39. package/dist/access-recall-response.js +22 -22
  40. package/dist/access-recall-surface.d.ts +11 -11
  41. package/dist/access-recall-surface.js +22 -22
  42. package/dist/access-schema.d.ts +89 -89
  43. package/dist/access-schema.js +3 -3
  44. package/dist/{access-service-CEUE1Isj.d.ts → access-service-C2tV2-uL.d.ts} +65 -65
  45. package/dist/access-service-helpers.d.ts +11 -11
  46. package/dist/access-service.d.ts +11 -11
  47. package/dist/access-service.js +22 -22
  48. package/dist/access-surface-catalog.d.ts +11 -11
  49. package/dist/access-surface-catalog.js +24 -24
  50. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  51. package/dist/action-confidence.d.ts +1 -1
  52. package/dist/active-memory-bridge.d.ts +1 -1
  53. package/dist/active-recall.d.ts +1 -1
  54. package/dist/active-recall.js +2 -2
  55. package/dist/adapters/index.js +7 -7
  56. package/dist/adapters/registry.js +3 -3
  57. package/dist/ambient-provenance.d.ts +1 -1
  58. package/dist/artifact-search.d.ts +1 -1
  59. package/dist/behavior-learner.d.ts +1 -1
  60. package/dist/behavior-signals.d.ts +1 -1
  61. package/dist/bootstrap.d.ts +9 -9
  62. package/dist/briefing-window.d.ts +2 -2
  63. package/dist/briefing.d.ts +2 -2
  64. package/dist/briefing.js +9 -9
  65. package/dist/buffer-surprise-report.d.ts +1 -1
  66. package/dist/buffer-turn-helpers.d.ts +1 -1
  67. package/dist/buffer.d.ts +2 -2
  68. package/dist/bulk-import/index.d.ts +3 -3
  69. package/dist/calibration.d.ts +1 -1
  70. package/dist/capabilities.d.ts +1 -1
  71. package/dist/{catalog-D1HgugTA.d.ts → catalog-C2jA-gLm.d.ts} +1 -1
  72. package/dist/causal-behavior.d.ts +1 -1
  73. package/dist/causal-consolidation.d.ts +1 -1
  74. package/dist/causal-consolidation.js +10 -10
  75. package/dist/causal-trajectory-graph.d.ts +1 -1
  76. package/dist/{chunk-J3OND5QT.js → chunk-2FA7U5XY.js} +2 -2
  77. package/dist/{chunk-GEJKYA7D.js → chunk-2ITZ74A6.js} +9 -9
  78. package/dist/{chunk-2LBAFHOQ.js → chunk-2X6BGKQL.js} +8 -8
  79. package/dist/{chunk-KODXCHXJ.js → chunk-46XR5FNZ.js} +39 -3
  80. package/dist/chunk-46XR5FNZ.js.map +1 -0
  81. package/dist/{chunk-4STAANV7.js → chunk-4XLTUR6R.js} +3 -3
  82. package/dist/{chunk-FTTJRVB7.js → chunk-65JOGLIS.js} +2 -2
  83. package/dist/{chunk-FESUGFIL.js → chunk-7UOXCCCI.js} +2 -2
  84. package/dist/{chunk-PEBH5DCK.js → chunk-AF5H7TKI.js} +100 -18
  85. package/dist/chunk-AF5H7TKI.js.map +1 -0
  86. package/dist/{chunk-6CEGSTBD.js → chunk-B4AOWRYF.js} +4 -4
  87. package/dist/{chunk-FYWLSFFS.js → chunk-C5IUOBCN.js} +2 -2
  88. package/dist/{chunk-FKKGCGYL.js → chunk-CHGG74CY.js} +2 -2
  89. package/dist/{chunk-H7VDIF2V.js → chunk-CX4OLNIH.js} +2 -2
  90. package/dist/{chunk-Z3YEGSR4.js → chunk-D3UXGE5D.js} +10 -10
  91. package/dist/{chunk-7XOG75AU.js → chunk-D6Q5EPOV.js} +2 -2
  92. package/dist/{chunk-MJRGVXPQ.js → chunk-EH65UV2Z.js} +2 -2
  93. package/dist/{chunk-VQ4AMTGZ.js → chunk-EWKVYCFP.js} +1 -1
  94. package/dist/{chunk-23CVL7HS.js → chunk-FFUMTH27.js} +2 -2
  95. package/dist/{chunk-GX6FTSYH.js → chunk-GAJK3DQ5.js} +2 -2
  96. package/dist/{chunk-O57GM3FR.js → chunk-GBEOUCBB.js} +2 -2
  97. package/dist/{chunk-DMEHOEC7.js → chunk-H2IRSXZN.js} +3 -3
  98. package/dist/{chunk-CFVTRUR3.js → chunk-H6RSANGQ.js} +2 -2
  99. package/dist/chunk-HVAEXYPL.js +98 -0
  100. package/dist/chunk-HVAEXYPL.js.map +1 -0
  101. package/dist/{chunk-OAJMQKQR.js → chunk-IGZCAHFL.js} +2 -2
  102. package/dist/{chunk-CN4VKV3S.js → chunk-INUBU6I5.js} +2 -2
  103. package/dist/{chunk-CTCGHNWN.js → chunk-J2R275FN.js} +4 -4
  104. package/dist/{chunk-2QSZNTDO.js → chunk-JBPKEARU.js} +7 -7
  105. package/dist/{chunk-VQNRICAQ.js → chunk-JKTV3JNX.js} +3 -3
  106. package/dist/{chunk-33MFRY25.js → chunk-KI64TTBL.js} +2 -2
  107. package/dist/{chunk-VCKWULAK.js → chunk-KJXCD7VR.js} +5 -5
  108. package/dist/{chunk-7LCGFUMB.js → chunk-KQAFEZQX.js} +4 -4
  109. package/dist/{chunk-GSKINLAK.js → chunk-LJABGXC4.js} +3 -3
  110. package/dist/{chunk-NPIBN2VL.js → chunk-LK4TOYPU.js} +2 -2
  111. package/dist/{chunk-EZSCW4EM.js → chunk-LYUUA6QB.js} +2 -2
  112. package/dist/{chunk-I5VB44ZK.js → chunk-M5ERTI4I.js} +2 -2
  113. package/dist/{chunk-IHGMRDEE.js → chunk-MUEGIKKY.js} +227 -144
  114. package/dist/chunk-MUEGIKKY.js.map +1 -0
  115. package/dist/{chunk-QCRJMU5V.js → chunk-NFP4KPTA.js} +2 -2
  116. package/dist/{chunk-YXFCALVT.js → chunk-NSTNGMSS.js} +8 -8
  117. package/dist/{chunk-L4X4PJYK.js → chunk-NUF7VSEX.js} +2 -2
  118. package/dist/{chunk-IVIAHQBR.js → chunk-OJUEUQDJ.js} +2 -2
  119. package/dist/{chunk-ZW4VXELZ.js → chunk-OMX6TKXH.js} +2 -2
  120. package/dist/{chunk-EFQCDJZ2.js → chunk-QBNE55VA.js} +2 -2
  121. package/dist/{chunk-6QDXA26G.js → chunk-RPIS5FQ7.js} +47 -47
  122. package/dist/{chunk-HJXA6ZM7.js → chunk-S4CDUXQY.js} +2 -2
  123. package/dist/{chunk-72OIT7KS.js → chunk-S4Z2OBTX.js} +3 -3
  124. package/dist/{chunk-4FHRZD5T.js → chunk-SZMYGDSM.js} +2 -2
  125. package/dist/{chunk-MAH64N55.js → chunk-TBCDF556.js} +4 -4
  126. package/dist/{chunk-56IV4J5W.js → chunk-TCF4MU7L.js} +443 -58
  127. package/dist/chunk-TCF4MU7L.js.map +1 -0
  128. package/dist/{chunk-K66OY4EI.js → chunk-TCQRIIIN.js} +2 -2
  129. package/dist/{chunk-KXIXO76C.js → chunk-U65VJSCJ.js} +14 -14
  130. package/dist/{chunk-HNPE66LB.js → chunk-U6NGKS32.js} +7 -7
  131. package/dist/{chunk-WKJFIMVN.js → chunk-UW4RYPWC.js} +2 -2
  132. package/dist/{chunk-MN5NOOI7.js → chunk-VG4SSPAW.js} +2 -2
  133. package/dist/chunk-WFCWP4XU.js +17 -0
  134. package/dist/chunk-WFCWP4XU.js.map +1 -0
  135. package/dist/{chunk-UNUMFURP.js → chunk-X5PIDJ3L.js} +3 -3
  136. package/dist/{chunk-RZ3IZIJG.js → chunk-XOHYGIWF.js} +2 -2
  137. package/dist/{chunk-MINHJ55X.js → chunk-XXW32OL7.js} +1 -1
  138. package/dist/{chunk-MINHJ55X.js.map → chunk-XXW32OL7.js.map} +1 -1
  139. package/dist/{chunk-6RUHELWR.js → chunk-YWPLOJ7T.js} +2 -2
  140. package/dist/{chunk-ZJPM7GZ3.js → chunk-ZPS724LT.js} +2 -2
  141. package/dist/{chunk-7UTDHQZ5.js → chunk-ZZZWEDF4.js} +2 -2
  142. package/dist/{cli-BEkm2MEf.d.ts → cli-CsfFMe6n.d.ts} +5 -5
  143. package/dist/cli.d.ts +13 -13
  144. package/dist/cli.js +63 -63
  145. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  146. package/dist/coding/export-okf-codegraph.js +9 -9
  147. package/dist/coding/pre-action-gate.d.ts +1 -1
  148. package/dist/compounding/engine.d.ts +2 -2
  149. package/dist/compounding/engine.js +9 -9
  150. package/dist/compounding/preference-consolidator.d.ts +1 -1
  151. package/dist/compression-optimizer.d.ts +1 -1
  152. package/dist/config.d.ts +1 -1
  153. package/dist/config.js +2 -2
  154. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  155. package/dist/connectors/codex-materialize-runner.js +9 -9
  156. package/dist/connectors/codex-materialize.d.ts +1 -1
  157. package/dist/connectors/index.d.ts +1 -1
  158. package/dist/connectors/index.js +9 -9
  159. package/dist/consolidation-provenance-check.d.ts +2 -2
  160. package/dist/consolidation-undo.d.ts +2 -2
  161. package/dist/contradiction/index.d.ts +3 -3
  162. package/dist/converge-config.d.ts +1 -1
  163. package/dist/convergence-refresh.d.ts +2 -2
  164. package/dist/convergence-refresh.js +11 -11
  165. package/dist/conversation-index/backend.d.ts +1 -1
  166. package/dist/conversation-index/chunker.d.ts +1 -1
  167. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  168. package/dist/conversation-index/indexer.d.ts +1 -1
  169. package/dist/conversation-index/search.d.ts +1 -1
  170. package/dist/corpus-watermark.d.ts +1 -1
  171. package/dist/corpus-watermark.js +11 -11
  172. package/dist/cross-lingual-recall.d.ts +1 -1
  173. package/dist/day-summary.d.ts +1 -1
  174. package/dist/delinearize.d.ts +1 -1
  175. package/dist/dependency-propagation-config.d.ts +1 -1
  176. package/dist/{dependency-propagation-delivery-BCpeo14F.d.ts → dependency-propagation-delivery-D4WMbOwA.d.ts} +1 -1
  177. package/dist/direct-answer-wiring.d.ts +1 -1
  178. package/dist/direct-answer.d.ts +1 -1
  179. package/dist/embedding-fallback.d.ts +1 -1
  180. package/dist/enrichment/index.d.ts +1 -1
  181. package/dist/entity-origin-fields.d.ts +1 -1
  182. package/dist/entity-retrieval.d.ts +2 -2
  183. package/dist/entity-retrieval.js +9 -9
  184. package/dist/entity-schema.d.ts +1 -1
  185. package/dist/episodic-context.d.ts +1 -1
  186. package/dist/eval-trajectory-contracts.d.ts +1 -1
  187. package/dist/eval-trajectory-store.d.ts +1 -1
  188. package/dist/eval-trajectory.d.ts +1 -1
  189. package/dist/explicit-capture.d.ts +9 -9
  190. package/dist/external-wiki-access.d.ts +11 -11
  191. package/dist/external-wiki-access.js +23 -23
  192. package/dist/external-wiki-collection-registration.d.ts +1 -1
  193. package/dist/external-wiki-collection.d.ts +1 -1
  194. package/dist/external-wiki-mcp-tools.d.ts +11 -11
  195. package/dist/extraction-error-classification.d.ts +1 -1
  196. package/dist/extraction-faithfulness.d.ts +1 -1
  197. package/dist/extraction-judge-telemetry.d.ts +1 -1
  198. package/dist/extraction-judge-training.d.ts +1 -1
  199. package/dist/extraction-judge.d.ts +1 -1
  200. package/dist/extraction-liveness.d.ts +1 -1
  201. package/dist/extraction-normalization.d.ts +1 -1
  202. package/dist/extraction-prompt.d.ts +1 -1
  203. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  204. package/dist/extraction-source-grounding.d.ts +1 -1
  205. package/dist/extraction.d.ts +1 -1
  206. package/dist/extraction.js +9 -9
  207. package/dist/fallback-llm.d.ts +1 -1
  208. package/dist/graph-dashboard-diff.d.ts +1 -1
  209. package/dist/graph-dashboard-key.d.ts +1 -1
  210. package/dist/graph-dashboard-parser.d.ts +1 -1
  211. package/dist/graph-edge-reinforcement.d.ts +1 -1
  212. package/dist/graph-path-reconstruction.d.ts +1 -1
  213. package/dist/graph-path-scoring.d.ts +1 -1
  214. package/dist/graph-snapshot.d.ts +1 -1
  215. package/dist/graph.d.ts +1 -1
  216. package/dist/harmonic-retrieval.js +1 -1
  217. package/dist/importance.d.ts +1 -1
  218. package/dist/importers/index.d.ts +1 -1
  219. package/dist/in-flight-reads.d.ts +1 -1
  220. package/dist/{index-D_pyMUaP.d.ts → index-DuJnzwHv.d.ts} +2 -2
  221. package/dist/index.d.ts +807 -698
  222. package/dist/index.js +130 -102
  223. package/dist/intent.d.ts +1 -1
  224. package/dist/lcm/engine.d.ts +1 -1
  225. package/dist/lcm/engine.js +4 -4
  226. package/dist/lcm/index.d.ts +1 -1
  227. package/dist/lcm/index.js +10 -10
  228. package/dist/lcm/tools.d.ts +1 -1
  229. package/dist/lifecycle.d.ts +1 -1
  230. package/dist/live-connectors-runner.d.ts +1 -1
  231. package/dist/local-llm.d.ts +1 -1
  232. package/dist/local-model-endpoint.d.ts +1 -1
  233. package/dist/location/index.d.ts +3 -3
  234. package/dist/location/index.js +11 -11
  235. package/dist/maintenance/memory-governance.d.ts +1 -1
  236. package/dist/maintenance/memory-governance.js +9 -9
  237. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  238. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +9 -9
  239. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  240. package/dist/maintenance/rebuild-memory-projection.js +10 -10
  241. package/dist/{maintenance-DDUX9d6D.d.ts → maintenance-BBeaeYRR.d.ts} +3 -3
  242. package/dist/mcp-memory-inspector-app.d.ts +11 -11
  243. package/dist/memory-action-policy.d.ts +1 -1
  244. package/dist/memory-cache.d.ts +1 -1
  245. package/dist/memory-controller.d.ts +1 -1
  246. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  247. package/dist/memory-projection-store.d.ts +1 -1
  248. package/dist/memory-provenance.d.ts +1 -1
  249. package/dist/memory-snapshot.d.ts +1 -1
  250. package/dist/memory-subject-cli.d.ts +11 -11
  251. package/dist/memory-subject.d.ts +11 -11
  252. package/dist/memory-worth-outcomes.d.ts +2 -2
  253. package/dist/models-json.d.ts +1 -1
  254. package/dist/namespaces/migrate.d.ts +3 -3
  255. package/dist/namespaces/migrate.js +10 -10
  256. package/dist/namespaces/principal.d.ts +1 -1
  257. package/dist/namespaces/search.d.ts +1 -1
  258. package/dist/namespaces/search.js +5 -5
  259. package/dist/namespaces/storage.d.ts +3 -3
  260. package/dist/namespaces/storage.js +9 -9
  261. package/dist/native-knowledge.d.ts +1 -1
  262. package/dist/offline-sync-impression-drain.d.ts +1 -1
  263. package/dist/operator-doctor-corpus.d.ts +1 -1
  264. package/dist/operator-doctor-corpus.js +12 -12
  265. package/dist/operator-doctor-replica.d.ts +1 -1
  266. package/dist/operator-toolkit.d.ts +3 -3
  267. package/dist/operator-toolkit.js +19 -19
  268. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  269. package/dist/orchestration/maintenance.d.ts +4 -4
  270. package/dist/orchestration/maintenance.js +18 -18
  271. package/dist/{orchestrator-3F4jihCo.d.ts → orchestrator-CaqnwNwM.d.ts} +8 -8
  272. package/dist/orchestrator.d.ts +9 -9
  273. package/dist/orchestrator.js +86 -84
  274. package/dist/patterns-cli.d.ts +1 -1
  275. package/dist/{pipeline-CB1dj6Uh.d.ts → pipeline-CrxVjlJr.d.ts} +1 -1
  276. package/dist/policy-runtime.d.ts +1 -1
  277. package/dist/proactive-contention.d.ts +1 -1
  278. package/dist/provenance.d.ts +1 -1
  279. package/dist/{public-http-34-JIAGQ.d.ts → public-http-Cwvl4QZr.d.ts} +1 -1
  280. package/dist/{qmd-edLLZXc5.d.ts → qmd-BZgbJm0g.d.ts} +1 -1
  281. package/dist/qmd-preflight.d.ts +2 -2
  282. package/dist/qmd-recall-cache.d.ts +1 -1
  283. package/dist/qmd.d.ts +2 -2
  284. package/dist/recall-concurrency-config.d.ts +1 -1
  285. package/dist/recall-deep.d.ts +37 -0
  286. package/dist/recall-deep.js +81 -0
  287. package/dist/recall-deep.js.map +1 -0
  288. package/dist/recall-disclosure-escalation.d.ts +1 -1
  289. package/dist/recall-explain-renderer.d.ts +1 -1
  290. package/dist/recall-explain-renderer.js +3 -3
  291. package/dist/recall-memory-map.d.ts +1 -1
  292. package/dist/recall-navigate.d.ts +70 -0
  293. package/dist/recall-navigate.js +51 -0
  294. package/dist/recall-navigate.js.map +1 -0
  295. package/dist/recall-planner-llm.d.ts +1 -1
  296. package/dist/recall-state-view-wire.d.ts +14 -0
  297. package/dist/recall-state-view-wire.js +11 -0
  298. package/dist/recall-state-view-wire.js.map +1 -0
  299. package/dist/recall-state-view.d.ts +25 -0
  300. package/dist/recall-state-view.js +22 -0
  301. package/dist/recall-state-view.js.map +1 -0
  302. package/dist/recall-state.d.ts +1 -1
  303. package/dist/recall-tag-filter.d.ts +1 -1
  304. package/dist/recall-timings.d.ts +1 -1
  305. package/dist/recall-xray-cli.d.ts +1 -1
  306. package/dist/recall-xray-cli.js +4 -4
  307. package/dist/recall-xray-renderer.d.ts +1 -1
  308. package/dist/recall-xray-renderer.js +3 -3
  309. package/dist/recall-xray.d.ts +1 -1
  310. package/dist/recall-xray.js +2 -2
  311. package/dist/reconcile/cursor.d.ts +1 -1
  312. package/dist/reconcile/manifest.d.ts +1 -1
  313. package/dist/reconcile/plan.d.ts +1 -1
  314. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  315. package/dist/replay/normalizers/claude.d.ts +1 -1
  316. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  317. package/dist/replay/normalizers/shared.d.ts +1 -1
  318. package/dist/replay/runner.d.ts +1 -1
  319. package/dist/replay/types.d.ts +1 -1
  320. package/dist/replica-divergence.d.ts +1 -1
  321. package/dist/replica-peers-config.d.ts +1 -1
  322. package/dist/resolve-auth-token.d.ts +1 -1
  323. package/dist/resume-bundles.js +3 -3
  324. package/dist/retrieval-agents.d.ts +2 -2
  325. package/dist/retrieval-tiers.d.ts +1 -1
  326. package/dist/routing/engine.d.ts +1 -1
  327. package/dist/routing/store.d.ts +1 -1
  328. package/dist/salvage-envelope.d.ts +1 -1
  329. package/dist/schemas.d.ts +152 -152
  330. package/dist/{scope-profiles-BF2lu81V.d.ts → scope-profiles-DFaojvoP.d.ts} +1 -1
  331. package/dist/search/embed-helper.d.ts +1 -1
  332. package/dist/search/factory.d.ts +1 -1
  333. package/dist/search/factory.js +4 -4
  334. package/dist/search/index.d.ts +1 -1
  335. package/dist/search/index.js +10 -10
  336. package/dist/search/lancedb-backend.d.ts +1 -1
  337. package/dist/search/meilisearch-backend.d.ts +1 -1
  338. package/dist/search/noop-backend.d.ts +1 -1
  339. package/dist/search/orama-backend.d.ts +1 -1
  340. package/dist/search/port.d.ts +1 -1
  341. package/dist/search/remote-backend.d.ts +1 -1
  342. package/dist/{semantic-consolidation-5OuWXBRt.d.ts → semantic-consolidation-BiX68wZA.d.ts} +1 -1
  343. package/dist/semantic-consolidation.d.ts +2 -2
  344. package/dist/semantic-consolidation.js +10 -10
  345. package/dist/semantic-rule-promotion.js +9 -9
  346. package/dist/semantic-rule-verifier.d.ts +1 -1
  347. package/dist/semantic-rule-verifier.js +9 -9
  348. package/dist/{service-CrqEhLXD.d.ts → service-D5h2zZ0M.d.ts} +2 -2
  349. package/dist/session-observer-bands.d.ts +1 -1
  350. package/dist/session-observer-state.d.ts +1 -1
  351. package/dist/shared-context/manager.d.ts +7 -7
  352. package/dist/signal.d.ts +1 -1
  353. package/dist/source-agent-qualifier.d.ts +1 -1
  354. package/dist/source-agent-qualifier.js +9 -9
  355. package/dist/{storage-BQn-xnxm.d.ts → storage-CtsaojWD.d.ts} +1 -1
  356. package/dist/storage.d.ts +2 -2
  357. package/dist/storage.js +8 -8
  358. package/dist/subject-config.d.ts +1 -1
  359. package/dist/summarizer.d.ts +1 -1
  360. package/dist/summary-snapshot.d.ts +1 -1
  361. package/dist/support-passport/index.d.ts +14 -14
  362. package/dist/support-passport/index.js +25 -25
  363. package/dist/temporal-supersession.d.ts +2 -2
  364. package/dist/temporal-timeline-recall.d.ts +1 -1
  365. package/dist/temporal-validity.d.ts +1 -1
  366. package/dist/threading.d.ts +1 -1
  367. package/dist/tier-migration.d.ts +2 -2
  368. package/dist/tier-routing.d.ts +1 -1
  369. package/dist/topics.d.ts +1 -1
  370. package/dist/transcript.d.ts +1 -1
  371. package/dist/transfer/capsule-export.js +2 -2
  372. package/dist/transfer/capsule-import.js +2 -2
  373. package/dist/transfer/export-okf.d.ts +1 -1
  374. package/dist/transfer/export-okf.js +10 -10
  375. package/dist/transfer/types.d.ts +78 -78
  376. package/dist/trust-score-stage.d.ts +1 -1
  377. package/dist/trust-score.d.ts +1 -1
  378. package/dist/{types-BRpcNjHZ.d.ts → types-CIpfYz1I.d.ts} +16 -11
  379. package/dist/types.d.ts +1 -1
  380. package/dist/types.js +1 -1
  381. package/dist/utility-runtime.d.ts +1 -1
  382. package/dist/verified-recall.js +9 -9
  383. package/dist/who-knows-cli.d.ts +11 -11
  384. package/dist/who-knows-cli.js +10 -10
  385. package/dist/who-knows.d.ts +11 -11
  386. package/dist/who-knows.js +9 -9
  387. package/dist/write-envelope.d.ts +1 -1
  388. package/package.json +2 -2
  389. package/src/activity/config.test.ts +1 -1
  390. package/src/activity/config.ts +48 -3
  391. package/src/activity/index.ts +2 -0
  392. package/src/activity/journal.test.ts +97 -0
  393. package/src/activity/journal.ts +113 -0
  394. package/src/activity/privacy.test.ts +53 -0
  395. package/src/activity/privacy.ts +80 -0
  396. package/src/activity/timeline/index.ts +2 -0
  397. package/src/activity/timeline/journal-recap.test.ts +113 -0
  398. package/src/activity/timeline/journal-recap.ts +130 -0
  399. package/src/activity/timeline/query.test.ts +198 -0
  400. package/src/activity/timeline/query.ts +313 -0
  401. package/src/activity/timeline/weekly.test.ts +215 -0
  402. package/src/activity/timeline/weekly.ts +234 -0
  403. package/src/activity/types.ts +14 -0
  404. package/src/activity/vault-publish.test.ts +166 -0
  405. package/src/activity/vault-publish.ts +101 -0
  406. package/src/config.test.ts +1 -1
  407. package/src/config.ts +2 -22
  408. package/src/dedup/merge-on-write.test.ts +91 -0
  409. package/src/dedup/merge-on-write.ts +75 -0
  410. package/src/dedup/novelty-gate.test.ts +143 -0
  411. package/src/dedup/novelty-gate.ts +163 -0
  412. package/src/location/recall-exclusion.test.ts +1 -0
  413. package/src/orchestration/extraction-persist.ts +22 -23
  414. package/src/orchestration/generic-recall-paths.ts +11 -0
  415. package/src/orchestration/recall-entry.ts +8 -3
  416. package/src/recall-deep.test.ts +72 -0
  417. package/src/recall-deep.ts +113 -0
  418. package/src/recall-navigate.test.ts +84 -0
  419. package/src/recall-navigate.ts +100 -0
  420. package/src/recall-state-view-wire.test.ts +35 -0
  421. package/src/recall-state-view-wire.ts +28 -0
  422. package/src/recall-state-view.test.ts +131 -0
  423. package/src/recall-state-view.ts +138 -0
  424. package/src/shared-context/governance.test.ts +53 -0
  425. package/src/shared-context/governance.ts +86 -0
  426. package/src/types.ts +3 -10
  427. package/dist/chunk-56IV4J5W.js.map +0 -1
  428. package/dist/chunk-IHGMRDEE.js.map +0 -1
  429. package/dist/chunk-KODXCHXJ.js.map +0 -1
  430. package/dist/chunk-PEBH5DCK.js.map +0 -1
  431. /package/dist/{chunk-J3OND5QT.js.map → chunk-2FA7U5XY.js.map} +0 -0
  432. /package/dist/{chunk-GEJKYA7D.js.map → chunk-2ITZ74A6.js.map} +0 -0
  433. /package/dist/{chunk-2LBAFHOQ.js.map → chunk-2X6BGKQL.js.map} +0 -0
  434. /package/dist/{chunk-4STAANV7.js.map → chunk-4XLTUR6R.js.map} +0 -0
  435. /package/dist/{chunk-FTTJRVB7.js.map → chunk-65JOGLIS.js.map} +0 -0
  436. /package/dist/{chunk-FESUGFIL.js.map → chunk-7UOXCCCI.js.map} +0 -0
  437. /package/dist/{chunk-6CEGSTBD.js.map → chunk-B4AOWRYF.js.map} +0 -0
  438. /package/dist/{chunk-FYWLSFFS.js.map → chunk-C5IUOBCN.js.map} +0 -0
  439. /package/dist/{chunk-FKKGCGYL.js.map → chunk-CHGG74CY.js.map} +0 -0
  440. /package/dist/{chunk-H7VDIF2V.js.map → chunk-CX4OLNIH.js.map} +0 -0
  441. /package/dist/{chunk-Z3YEGSR4.js.map → chunk-D3UXGE5D.js.map} +0 -0
  442. /package/dist/{chunk-7XOG75AU.js.map → chunk-D6Q5EPOV.js.map} +0 -0
  443. /package/dist/{chunk-MJRGVXPQ.js.map → chunk-EH65UV2Z.js.map} +0 -0
  444. /package/dist/{chunk-VQ4AMTGZ.js.map → chunk-EWKVYCFP.js.map} +0 -0
  445. /package/dist/{chunk-23CVL7HS.js.map → chunk-FFUMTH27.js.map} +0 -0
  446. /package/dist/{chunk-GX6FTSYH.js.map → chunk-GAJK3DQ5.js.map} +0 -0
  447. /package/dist/{chunk-O57GM3FR.js.map → chunk-GBEOUCBB.js.map} +0 -0
  448. /package/dist/{chunk-DMEHOEC7.js.map → chunk-H2IRSXZN.js.map} +0 -0
  449. /package/dist/{chunk-CFVTRUR3.js.map → chunk-H6RSANGQ.js.map} +0 -0
  450. /package/dist/{chunk-OAJMQKQR.js.map → chunk-IGZCAHFL.js.map} +0 -0
  451. /package/dist/{chunk-CN4VKV3S.js.map → chunk-INUBU6I5.js.map} +0 -0
  452. /package/dist/{chunk-CTCGHNWN.js.map → chunk-J2R275FN.js.map} +0 -0
  453. /package/dist/{chunk-2QSZNTDO.js.map → chunk-JBPKEARU.js.map} +0 -0
  454. /package/dist/{chunk-VQNRICAQ.js.map → chunk-JKTV3JNX.js.map} +0 -0
  455. /package/dist/{chunk-33MFRY25.js.map → chunk-KI64TTBL.js.map} +0 -0
  456. /package/dist/{chunk-VCKWULAK.js.map → chunk-KJXCD7VR.js.map} +0 -0
  457. /package/dist/{chunk-7LCGFUMB.js.map → chunk-KQAFEZQX.js.map} +0 -0
  458. /package/dist/{chunk-GSKINLAK.js.map → chunk-LJABGXC4.js.map} +0 -0
  459. /package/dist/{chunk-NPIBN2VL.js.map → chunk-LK4TOYPU.js.map} +0 -0
  460. /package/dist/{chunk-EZSCW4EM.js.map → chunk-LYUUA6QB.js.map} +0 -0
  461. /package/dist/{chunk-I5VB44ZK.js.map → chunk-M5ERTI4I.js.map} +0 -0
  462. /package/dist/{chunk-QCRJMU5V.js.map → chunk-NFP4KPTA.js.map} +0 -0
  463. /package/dist/{chunk-YXFCALVT.js.map → chunk-NSTNGMSS.js.map} +0 -0
  464. /package/dist/{chunk-L4X4PJYK.js.map → chunk-NUF7VSEX.js.map} +0 -0
  465. /package/dist/{chunk-IVIAHQBR.js.map → chunk-OJUEUQDJ.js.map} +0 -0
  466. /package/dist/{chunk-ZW4VXELZ.js.map → chunk-OMX6TKXH.js.map} +0 -0
  467. /package/dist/{chunk-EFQCDJZ2.js.map → chunk-QBNE55VA.js.map} +0 -0
  468. /package/dist/{chunk-6QDXA26G.js.map → chunk-RPIS5FQ7.js.map} +0 -0
  469. /package/dist/{chunk-HJXA6ZM7.js.map → chunk-S4CDUXQY.js.map} +0 -0
  470. /package/dist/{chunk-72OIT7KS.js.map → chunk-S4Z2OBTX.js.map} +0 -0
  471. /package/dist/{chunk-4FHRZD5T.js.map → chunk-SZMYGDSM.js.map} +0 -0
  472. /package/dist/{chunk-MAH64N55.js.map → chunk-TBCDF556.js.map} +0 -0
  473. /package/dist/{chunk-K66OY4EI.js.map → chunk-TCQRIIIN.js.map} +0 -0
  474. /package/dist/{chunk-KXIXO76C.js.map → chunk-U65VJSCJ.js.map} +0 -0
  475. /package/dist/{chunk-HNPE66LB.js.map → chunk-U6NGKS32.js.map} +0 -0
  476. /package/dist/{chunk-WKJFIMVN.js.map → chunk-UW4RYPWC.js.map} +0 -0
  477. /package/dist/{chunk-MN5NOOI7.js.map → chunk-VG4SSPAW.js.map} +0 -0
  478. /package/dist/{chunk-UNUMFURP.js.map → chunk-X5PIDJ3L.js.map} +0 -0
  479. /package/dist/{chunk-RZ3IZIJG.js.map → chunk-XOHYGIWF.js.map} +0 -0
  480. /package/dist/{chunk-6RUHELWR.js.map → chunk-YWPLOJ7T.js.map} +0 -0
  481. /package/dist/{chunk-ZJPM7GZ3.js.map → chunk-ZPS724LT.js.map} +0 -0
  482. /package/dist/{chunk-7UTDHQZ5.js.map → chunk-ZZZWEDF4.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { a as GraphEdge } from './graph-444E-DrF.js';
2
2
  import { CausalTrajectoryRecord } from './causal-trajectory.js';
3
3
  import './capabilities.js';
4
- import './types-BRpcNjHZ.js';
4
+ import './types-CIpfYz1I.js';
5
5
  import './message-parts/index.js';
6
6
  import './bounded-jsonl-state.js';
7
7
  import './operator-doctor-types.js';
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-GEJKYA7D.js";
6
+ } from "./chunk-2ITZ74A6.js";
7
7
  import {
8
8
  copyExistingFileToBackup,
9
9
  writeFileAtomically
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-J3OND5QT.js.map
263
+ //# sourceMappingURL=chunk-2FA7U5XY.js.map
@@ -1,3 +1,9 @@
1
+ import {
2
+ TombstoneStore,
3
+ applyTombstoneResurrectionGate,
4
+ buildRetiredFactTombstoneInputs,
5
+ collectRetiredMemoriesForRebuild
6
+ } from "./chunk-4ZWCQJNM.js";
1
7
  import {
2
8
  WEARABLES_DIR_NAME,
3
9
  escapeSegmentText,
@@ -9,22 +15,16 @@ import {
9
15
  unescapeSegmentText,
10
16
  unescapeSpeakerLabel
11
17
  } from "./chunk-UHVXE24Y.js";
12
- import {
13
- TombstoneStore,
14
- applyTombstoneResurrectionGate,
15
- buildRetiredFactTombstoneInputs,
16
- collectRetiredMemoriesForRebuild
17
- } from "./chunk-4ZWCQJNM.js";
18
18
  import {
19
19
  normalizeQmdResultPath
20
- } from "./chunk-FYWLSFFS.js";
20
+ } from "./chunk-C5IUOBCN.js";
21
21
  import {
22
22
  withholdToolScopedFromSharedNamespace
23
23
  } from "./chunk-S2V7RUCL.js";
24
24
  import {
25
25
  SPECULATIVE_TTL_DAYS,
26
26
  confidenceTier
27
- } from "./chunk-MINHJ55X.js";
27
+ } from "./chunk-XXW32OL7.js";
28
28
  import {
29
29
  normalizeProjectionPreview,
30
30
  normalizeProjectionTags
@@ -11374,4 +11374,4 @@ export {
11374
11374
  isValidBufferSurpriseEvent,
11375
11375
  StorageManager3 as StorageManager
11376
11376
  };
11377
- //# sourceMappingURL=chunk-GEJKYA7D.js.map
11377
+ //# sourceMappingURL=chunk-2ITZ74A6.js.map
@@ -3,7 +3,7 @@ import {
3
3
  readNamespaceMaintenanceLastRanStatuses,
4
4
  readNamespaceMaintenanceStatuses,
5
5
  runNamespaceMaintenancePlan
6
- } from "./chunk-72OIT7KS.js";
6
+ } from "./chunk-S4Z2OBTX.js";
7
7
  import {
8
8
  analyzeSessionIntegrity,
9
9
  applySessionRepair,
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-CMTINOFS.js";
15
15
  import {
16
16
  summarizeCorpusAndReplica
17
- } from "./chunk-MJRGVXPQ.js";
17
+ } from "./chunk-EH65UV2Z.js";
18
18
  import {
19
19
  readJudgeVerdictStats
20
20
  } from "./chunk-OZKOPQCM.js";
@@ -38,23 +38,23 @@ import {
38
38
  } from "./chunk-YBPYIAA5.js";
39
39
  import {
40
40
  parseConfig
41
- } from "./chunk-PEBH5DCK.js";
41
+ } from "./chunk-AF5H7TKI.js";
42
42
  import {
43
43
  readAggregateExtractionWatermark
44
- } from "./chunk-ZW4VXELZ.js";
44
+ } from "./chunk-OMX6TKXH.js";
45
45
  import {
46
46
  listNamespaces
47
- } from "./chunk-4STAANV7.js";
47
+ } from "./chunk-4XLTUR6R.js";
48
48
  import {
49
49
  listMemoryGovernanceRuns,
50
50
  readMemoryGovernanceRunArtifact
51
- } from "./chunk-EFQCDJZ2.js";
51
+ } from "./chunk-QBNE55VA.js";
52
52
  import {
53
53
  analyzeGraphHealth
54
54
  } from "./chunk-YMOPYG3K.js";
55
55
  import {
56
56
  StorageManager
57
- } from "./chunk-GEJKYA7D.js";
57
+ } from "./chunk-2ITZ74A6.js";
58
58
  import {
59
59
  lintWorkspaceFiles
60
60
  } from "./chunk-DM2T26WE.js";
@@ -1683,4 +1683,4 @@ export {
1683
1683
  runBenchmarkRecall,
1684
1684
  runOperatorRepair
1685
1685
  };
1686
- //# sourceMappingURL=chunk-2LBAFHOQ.js.map
1686
+ //# sourceMappingURL=chunk-2X6BGKQL.js.map
@@ -24,7 +24,7 @@ function defaultActivityConfig() {
24
24
  minConfidence: 0.7,
25
25
  minImportance: "normal",
26
26
  maxMemoriesPerDay: 0,
27
- timeline: { enabled: false }
27
+ timeline: { enabled: false, journal: { enabled: false }, qa: { enabled: false, maxRangeDays: 31 } }
28
28
  };
29
29
  }
30
30
  function asRecord(value, name) {
@@ -154,7 +154,7 @@ function parseActivityConfig(raw) {
154
154
  };
155
155
  }
156
156
  function parseTimelineConfig(raw) {
157
- if (raw === void 0) return { enabled: false };
157
+ if (raw === void 0) return { enabled: false, journal: { enabled: false }, qa: parseTimelineQaConfig(void 0) };
158
158
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
159
159
  throw new TypeError("activity.timeline must be an object");
160
160
  }
@@ -163,12 +163,48 @@ function parseTimelineConfig(raw) {
163
163
  if (timeline.enabled !== void 0 && enabledValue === void 0) {
164
164
  throw new TypeError("activity.timeline.enabled must be a boolean");
165
165
  }
166
+ return {
167
+ enabled: enabledValue ?? false,
168
+ journal: parseTimelineJournalConfig(timeline.journal),
169
+ qa: parseTimelineQaConfig(timeline.qa)
170
+ };
171
+ }
172
+ function parseTimelineJournalConfig(raw) {
173
+ if (raw === void 0) return { enabled: false };
174
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
175
+ throw new TypeError("activity.timeline.journal must be an object");
176
+ }
177
+ const journal = raw;
178
+ const enabledValue = coerceBooleanLike(journal.enabled, "activity.timeline.journal.enabled");
179
+ if (journal.enabled !== void 0 && enabledValue === void 0) {
180
+ throw new TypeError("activity.timeline.journal.enabled must be a boolean");
181
+ }
166
182
  return { enabled: enabledValue ?? false };
167
183
  }
184
+ function parseTimelineQaConfig(raw) {
185
+ if (raw === void 0) return { enabled: false, maxRangeDays: 31 };
186
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
187
+ throw new TypeError("activity.timeline.qa must be an object");
188
+ }
189
+ const qa = raw;
190
+ const enabledValue = coerceBooleanLike(qa.enabled, "activity.timeline.qa.enabled");
191
+ if (qa.enabled !== void 0 && enabledValue === void 0) {
192
+ throw new TypeError("activity.timeline.qa.enabled must be a boolean");
193
+ }
194
+ const maxRangeDaysValue = coerceNumber(qa.maxRangeDays, "activity.timeline.qa.maxRangeDays");
195
+ if (qa.maxRangeDays !== void 0 && maxRangeDaysValue === void 0) {
196
+ throw new TypeError("activity.timeline.qa.maxRangeDays must be an integer from 1 to 366");
197
+ }
198
+ const maxRangeDays = maxRangeDaysValue ?? 31;
199
+ if (!Number.isInteger(maxRangeDays) || maxRangeDays < 1 || maxRangeDays > 366) {
200
+ throw new RangeError("activity.timeline.qa.maxRangeDays must be an integer from 1 to 366");
201
+ }
202
+ return { enabled: enabledValue ?? false, maxRangeDays };
203
+ }
168
204
 
169
205
  export {
170
206
  defaultActivityConfig,
171
207
  validateActivityBaseUrl,
172
208
  parseActivityConfig
173
209
  };
174
- //# sourceMappingURL=chunk-KODXCHXJ.js.map
210
+ //# sourceMappingURL=chunk-46XR5FNZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/activity/config.ts"],"sourcesContent":["import { coerceBooleanLike, coerceNumber } from \"../connectors/coerce.js\";\nimport { assertValidTimezone } from \"./digest.js\";\nimport type { ImportanceLevel } from \"../types.js\";\nimport type {\n ActivityConfig,\n ActivityExtractionMode,\n ActivitySourceConfig,\n ActivityTimelineConfig,\n ActivityTimelineJournalConfig,\n ActivityTimelineQaConfig,\n} from \"./types.js\";\n\nconst EXTRACTION_MODES: readonly ActivityExtractionMode[] = [\"off\", \"smart\"];\nconst IMPORTANCE_LEVELS: readonly ImportanceLevel[] = [\"critical\", \"high\", \"normal\", \"low\", \"trivial\"];\nconst LOOPBACK_HOSTS: Record<string, true> = { localhost: true, \"127.0.0.1\": true, \"::1\": true };\n\n/** The inert default: disabled, search-only, no sources, no extraction. */\nexport function defaultActivityConfig(): ActivityConfig {\n return {\n enabled: false,\n timezone: \"UTC\",\n syncDays: 1,\n autoSyncIntervalMinutes: 15,\n sources: [],\n extractionMode: \"off\",\n sourceTrust: 0.6,\n autoApproveTrust: 0.8,\n reviewTrust: 0.5,\n minConfidence: 0.7,\n minImportance: \"normal\",\n maxMemoriesPerDay: 0,\n timeline: { enabled: false, journal: { enabled: false }, qa: { enabled: false, maxRangeDays: 31 } },\n };\n}\n\nfunction asRecord(value: unknown, name: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction optionalString(value: unknown, name: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || value.length === 0) throw new TypeError(`${name} must be a non-empty string`);\n return value;\n}\n\nfunction parseUnitInterval(value: unknown, key: string, fallback: number): number {\n if (value === undefined) return fallback;\n const parsed = coerceNumber(value);\n if (parsed === undefined || !Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n throw new RangeError(`activity.${key} must be a number in [0, 1]`);\n }\n return parsed;\n}\n\n/**\n * Parse, protocol-check, and confine an activity source base URL to a local\n * loopback host. Shared with ActivityHttpSourceClient so config-load and client\n * construction reject the exact same shapes with the same prefixed message. The\n * bearer token travels in an Authorization header, so a non-loopback baseUrl\n * would exfiltrate it; the subsystem contract is local capture daemons only.\n */\nexport function validateActivityBaseUrl(baseUrl: string): URL {\n let parsed: URL;\n try {\n parsed = new URL(baseUrl);\n } catch {\n throw new RangeError(`activity source baseUrl must be a valid URL: ${baseUrl}`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new RangeError(\"activity source baseUrl must use HTTP or HTTPS\");\n }\n // URL keeps IPv6 hosts bracketed (e.g. \"[::1]\"); normalize before the lookup.\n const host = parsed.hostname.replace(/^\\[|\\]$/g, \"\");\n if (LOOPBACK_HOSTS[host] !== true && !/^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(host)) {\n throw new RangeError(`activity source baseUrl must target a loopback host (got ${parsed.hostname})`);\n }\n return parsed;\n}\n\nfunction parseSource(value: unknown): ActivitySourceConfig {\n const raw = asRecord(value, \"activity source\");\n const machineLabel = optionalString(raw.machineLabel, \"activity source machineLabel\");\n const baseUrl = optionalString(raw.baseUrl, \"activity source baseUrl\");\n if (machineLabel === undefined || baseUrl === undefined) {\n throw new TypeError(\"activity source requires machineLabel and baseUrl\");\n }\n // Reject whitespace-only labels here so config-load fails loudly rather than\n // parsing clean and then failing on the first sync (the client and pipeline\n // both reject a blank label via trim()).\n if (machineLabel.trim().length === 0) {\n throw new RangeError(\"activity source machineLabel must not be blank\");\n }\n validateActivityBaseUrl(baseUrl);\n const token = optionalString(raw.token, \"activity source token\");\n return { machineLabel, baseUrl, ...(token === undefined ? {} : { token }) };\n}\n\n/**\n * Parse the unified `activity.*` block. `enabled` gates source ingestion (and\n * requires at least one source); `extractionMode` independently gates durable\n * trust-gated memory extraction (default `off`, i.e. search-only).\n */\nexport function parseActivityConfig(raw: unknown): ActivityConfig {\n const defaults = defaultActivityConfig();\n if (raw === undefined || raw === null) {\n return { ...defaults };\n }\n const config = asRecord(raw, \"activity\");\n const enabledValue = coerceBooleanLike(config.enabled, \"activity.enabled\");\n if (config.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.enabled must be a boolean\");\n }\n const timezone = optionalString(config.timezone, \"activity.timezone\") ?? \"UTC\";\n // Validate the IANA zone at parse so a typo fails before any daemon is\n // contacted; otherwise activityDayWindow() throws mid-sync after snapshot\n // pages may already be persisted, and every retry replays the same window.\n assertValidTimezone(timezone);\n const syncDaysValue = coerceNumber(config.syncDays, \"activity.syncDays\");\n if (config.syncDays !== undefined && syncDaysValue === undefined) {\n throw new TypeError(\"activity.syncDays must be a finite number\");\n }\n const syncDays = syncDaysValue ?? 1;\n if (!Number.isInteger(syncDays) || syncDays < 1 || syncDays > 90) {\n throw new RangeError(\"activity.syncDays must be an integer from 1 to 90\");\n }\n const intervalValue = coerceNumber(config.autoSyncIntervalMinutes, \"activity.autoSyncIntervalMinutes\");\n if (config.autoSyncIntervalMinutes !== undefined && intervalValue === undefined) {\n throw new TypeError(\"activity.autoSyncIntervalMinutes must be a finite number\");\n }\n const autoSyncIntervalMinutes = intervalValue ?? 15;\n if (!Number.isInteger(autoSyncIntervalMinutes) || autoSyncIntervalMinutes < 1 || autoSyncIntervalMinutes > 1440) {\n throw new RangeError(\"activity.autoSyncIntervalMinutes must be an integer from 1 to 1440\");\n }\n if (config.sources !== undefined && !Array.isArray(config.sources)) {\n throw new TypeError(\"activity.sources must be an array\");\n }\n const sources = (config.sources ?? []).map(parseSource);\n // Cursors and row dedup are keyed on machineLabel alone; two sources sharing\n // a label would share a cursor and dedup namespace, silently skipping or\n // conflating snapshots. Reject the collision at parse.\n const labels = new Set<string>();\n for (const source of sources) {\n if (labels.has(source.machineLabel)) {\n throw new RangeError(`activity source machineLabel must be unique: ${source.machineLabel}`);\n }\n labels.add(source.machineLabel);\n }\n const enabled = enabledValue ?? false;\n if (enabled && sources.length === 0) throw new RangeError(\"activity.enabled requires at least one source\");\n\n // Extraction gate (independent of `enabled` ingestion). Default `off`.\n // Default only for a missing key; an explicit null/non-string is a malformed\n // enum and must fail rather than silently disabling extraction.\n const extractionMode = config.extractionMode === undefined ? defaults.extractionMode : config.extractionMode;\n if (typeof extractionMode !== \"string\" || !EXTRACTION_MODES.includes(extractionMode as ActivityExtractionMode)) {\n throw new RangeError(`activity.extractionMode must be one of: ${EXTRACTION_MODES.join(\", \")}`);\n }\n const minImportance = config.minImportance === undefined ? defaults.minImportance : config.minImportance;\n if (typeof minImportance !== \"string\" || !IMPORTANCE_LEVELS.includes(minImportance as ImportanceLevel)) {\n throw new RangeError(`activity.minImportance must be one of: ${IMPORTANCE_LEVELS.join(\", \")}`);\n }\n // Default only for a missing key; an explicit null/unparseable value must fail\n // rather than silently uncapping (parity with the enum/unit-interval fields).\n const rawMaxMemoriesPerDay =\n config.maxMemoriesPerDay === undefined ? defaults.maxMemoriesPerDay : config.maxMemoriesPerDay;\n const maxMemoriesPerDay = coerceNumber(rawMaxMemoriesPerDay);\n if (maxMemoriesPerDay === undefined || !Number.isInteger(maxMemoriesPerDay) || maxMemoriesPerDay < 0) {\n throw new RangeError(\"activity.maxMemoriesPerDay must be a non-negative integer\");\n }\n const autoApproveTrust = parseUnitInterval(config.autoApproveTrust, \"autoApproveTrust\", defaults.autoApproveTrust);\n const reviewTrust = parseUnitInterval(config.reviewTrust, \"reviewTrust\", defaults.reviewTrust);\n if (reviewTrust >= autoApproveTrust) {\n throw new RangeError(\n `activity.reviewTrust (${reviewTrust}) must be below autoApproveTrust (${autoApproveTrust})`,\n );\n }\n return {\n enabled,\n timezone,\n syncDays,\n autoSyncIntervalMinutes,\n sources,\n extractionMode: extractionMode as ActivityExtractionMode,\n sourceTrust: parseUnitInterval(config.sourceTrust, \"sourceTrust\", defaults.sourceTrust),\n autoApproveTrust,\n reviewTrust,\n minConfidence: parseUnitInterval(config.minConfidence, \"minConfidence\", defaults.minConfidence),\n minImportance: minImportance as ImportanceLevel,\n maxMemoriesPerDay,\n timeline: parseTimelineConfig(config.timeline),\n };\n}\n\n/**\n * Parse the `activity.timeline.*` block. `enabled` is the master gate for\n * timeline-card derivation (issue #2049); default false. A non-object block\n * is malformed and must fail rather than silently disabling the layer.\n */\nfunction parseTimelineConfig(raw: unknown): ActivityTimelineConfig {\n if (raw === undefined) return { enabled: false, journal: { enabled: false }, qa: parseTimelineQaConfig(undefined) };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline must be an object\");\n }\n const timeline = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(timeline.enabled, \"activity.timeline.enabled\");\n if (timeline.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.enabled must be a boolean\");\n }\n return {\n enabled: enabledValue ?? false,\n journal: parseTimelineJournalConfig(timeline.journal),\n qa: parseTimelineQaConfig(timeline.qa),\n };\n}\n\nfunction parseTimelineJournalConfig(raw: unknown): ActivityTimelineJournalConfig {\n if (raw === undefined) return { enabled: false };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.journal must be an object\");\n }\n const journal = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(journal.enabled, \"activity.timeline.journal.enabled\");\n if (journal.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.journal.enabled must be a boolean\");\n }\n return { enabled: enabledValue ?? false };\n}\n\nfunction parseTimelineQaConfig(raw: unknown): ActivityTimelineQaConfig {\n if (raw === undefined) return { enabled: false, maxRangeDays: 31 };\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"activity.timeline.qa must be an object\");\n }\n const qa = raw as Record<string, unknown>;\n const enabledValue = coerceBooleanLike(qa.enabled, \"activity.timeline.qa.enabled\");\n if (qa.enabled !== undefined && enabledValue === undefined) {\n throw new TypeError(\"activity.timeline.qa.enabled must be a boolean\");\n }\n const maxRangeDaysValue = coerceNumber(qa.maxRangeDays, \"activity.timeline.qa.maxRangeDays\");\n if (qa.maxRangeDays !== undefined && maxRangeDaysValue === undefined) {\n throw new TypeError(\"activity.timeline.qa.maxRangeDays must be an integer from 1 to 366\");\n }\n const maxRangeDays = maxRangeDaysValue ?? 31;\n if (!Number.isInteger(maxRangeDays) || maxRangeDays < 1 || maxRangeDays > 366) {\n throw new RangeError(\"activity.timeline.qa.maxRangeDays must be an integer from 1 to 366\");\n }\n return { enabled: enabledValue ?? false, maxRangeDays };\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "./chunk-HJXA6ZM7.js";
3
+ } from "./chunk-S4CDUXQY.js";
4
4
  import {
5
5
  namespaceCollectionName
6
- } from "./chunk-FYWLSFFS.js";
6
+ } from "./chunk-C5IUOBCN.js";
7
7
  import {
8
8
  isSafeRouteNamespace
9
9
  } from "./chunk-PCXDUHQH.js";
@@ -213,4 +213,4 @@ export {
213
213
  verifyNamespaces,
214
214
  runNamespaceMigration
215
215
  };
216
- //# sourceMappingURL=chunk-4STAANV7.js.map
216
+ //# sourceMappingURL=chunk-4XLTUR6R.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runLocationSync
3
- } from "./chunk-VQNRICAQ.js";
3
+ } from "./chunk-JKTV3JNX.js";
4
4
  import {
5
5
  log
6
6
  } from "./chunk-3WCASNQZ.js";
@@ -58,4 +58,4 @@ export {
58
58
  LOCATION_SYNC_DEFAULT_INTERVAL_MS,
59
59
  startLocationAutoSync
60
60
  };
61
- //# sourceMappingURL=chunk-FTTJRVB7.js.map
61
+ //# sourceMappingURL=chunk-65JOGLIS.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-GEJKYA7D.js";
3
+ } from "./chunk-2ITZ74A6.js";
4
4
  import {
5
5
  normalizeEntityName
6
6
  } from "./chunk-YXZG5TVN.js";
@@ -957,4 +957,4 @@ export {
957
957
  resolveBriefingSaveDir,
958
958
  briefingFilename
959
959
  };
960
- //# sourceMappingURL=chunk-FESUGFIL.js.map
960
+ //# sourceMappingURL=chunk-7UOXCCCI.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-62OKGIJA.js";
8
8
  import {
9
9
  parseActivityConfig
10
- } from "./chunk-KODXCHXJ.js";
10
+ } from "./chunk-46XR5FNZ.js";
11
11
  import {
12
12
  parseLocationConfig
13
13
  } from "./chunk-TEZ2HTC7.js";
@@ -259,6 +259,101 @@ function parseDriftDetectionConfig(raw) {
259
259
  };
260
260
  }
261
261
 
262
+ // src/dedup/novelty-gate.ts
263
+ var DEFAULT_NOVELTY_ADD_THRESHOLD = 0.55;
264
+ var DEFAULT_NOVELTY_NOOP_THRESHOLD = 0.15;
265
+ var DEFAULT_NOVELTY_K = 5;
266
+ function clamp01(value, fallback) {
267
+ return value !== void 0 && Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : fallback;
268
+ }
269
+ function cosine(a, b) {
270
+ if (a.length === 0 || a.length !== b.length) return 0;
271
+ let dot = 0;
272
+ let magA = 0;
273
+ let magB = 0;
274
+ for (let i = 0; i < a.length; i++) {
275
+ dot += a[i] * b[i];
276
+ magA += a[i] * a[i];
277
+ magB += b[i] * b[i];
278
+ }
279
+ const denom = Math.sqrt(magA) * Math.sqrt(magB);
280
+ if (denom === 0) return 0;
281
+ const raw = dot / denom;
282
+ if (!Number.isFinite(raw)) return 0;
283
+ if (raw < 0) return 0;
284
+ if (raw > 1) return 1;
285
+ return raw;
286
+ }
287
+ function parseWritePathDedupConfig(cfg) {
288
+ const rawCandidates = coerceNumber(cfg.semanticDedupCandidates, "semanticDedupCandidates");
289
+ let semanticDedupCandidates = 5;
290
+ if (rawCandidates !== void 0 && rawCandidates >= 0) {
291
+ const n = Math.floor(rawCandidates);
292
+ semanticDedupCandidates = rawCandidates > 0 && n === 0 ? 1 : n;
293
+ }
294
+ return {
295
+ semanticDedupEnabled: coerceBooleanLike(cfg.semanticDedupEnabled, "semanticDedupEnabled") !== false,
296
+ semanticDedupThreshold: clamp01(
297
+ coerceNumber(cfg.semanticDedupThreshold, "semanticDedupThreshold"),
298
+ 0.92
299
+ ),
300
+ semanticDedupCandidates,
301
+ noveltyGateEnabled: coerceBooleanLike(cfg.noveltyGateEnabled, "noveltyGateEnabled") === true,
302
+ noveltyAddThreshold: clamp01(
303
+ coerceNumber(cfg.noveltyAddThreshold, "noveltyAddThreshold"),
304
+ DEFAULT_NOVELTY_ADD_THRESHOLD
305
+ ),
306
+ noveltyNoopThreshold: clamp01(
307
+ coerceNumber(cfg.noveltyNoopThreshold, "noveltyNoopThreshold"),
308
+ DEFAULT_NOVELTY_NOOP_THRESHOLD
309
+ )
310
+ };
311
+ }
312
+ function embeddingsFromCosineHits(hits, opts = {}) {
313
+ const candidateConnector = opts.candidateConnector?.trim() || void 0;
314
+ const scoped = candidateConnector ? hits.filter((hit) => (hit.sourceConnector?.trim() || void 0) === candidateConnector) : hits;
315
+ return {
316
+ embedding: [1, 0],
317
+ neighborhood: scoped.map((hit) => {
318
+ const s = Number.isFinite(hit.score) ? Math.min(1, Math.max(-1, hit.score)) : 0;
319
+ return { id: hit.id, embedding: [s, Math.sqrt(Math.max(0, 1 - s * s))] };
320
+ })
321
+ };
322
+ }
323
+ function scoreNovelty(embedding, neighborhood, thresholds = {}) {
324
+ const addThreshold = clamp01(thresholds.addThreshold ?? DEFAULT_NOVELTY_ADD_THRESHOLD, DEFAULT_NOVELTY_ADD_THRESHOLD);
325
+ const noopThreshold = clamp01(thresholds.noopThreshold ?? DEFAULT_NOVELTY_NOOP_THRESHOLD, DEFAULT_NOVELTY_NOOP_THRESHOLD);
326
+ const k = thresholds.k !== void 0 && Number.isFinite(thresholds.k) && thresholds.k > 0 ? Math.floor(thresholds.k) : DEFAULT_NOVELTY_K;
327
+ if (neighborhood.length === 0) {
328
+ return { score: 1, decision: "add" };
329
+ }
330
+ const ranked = neighborhood.map((neighbor) => ({
331
+ id: neighbor.id,
332
+ cosine: cosine(embedding, neighbor.embedding)
333
+ })).sort((a, b) => b.cosine - a.cosine);
334
+ const nearest = ranked.slice(0, Math.max(1, k));
335
+ const density = nearest.reduce((sum, row) => sum + row.cosine, 0) / nearest.length;
336
+ const score = 1 - density;
337
+ const neighborId = ranked[0]?.id;
338
+ if (score >= addThreshold) return { score, decision: "add", neighborId };
339
+ if (score <= noopThreshold) return { score, decision: "noop", neighborId };
340
+ return { score, decision: "uncertain", neighborId };
341
+ }
342
+ async function applyNoveltyGate(opts) {
343
+ if (!opts.enabled) {
344
+ return { score: 0, decision: "uncertain" };
345
+ }
346
+ try {
347
+ const { embedding, neighborhood } = await opts.lookup();
348
+ return scoreNovelty(embedding, neighborhood, {
349
+ addThreshold: opts.addThreshold,
350
+ noopThreshold: opts.noopThreshold
351
+ });
352
+ } catch {
353
+ return { score: 0, decision: "uncertain" };
354
+ }
355
+ }
356
+
262
357
  // src/wearables/config.ts
263
358
  var KNOWN_WEARABLE_SOURCE_IDS = ["limitless", "bee", "omi"];
264
359
  var MEMORY_MODES = ["off", "review", "auto", "smart"];
@@ -3570,22 +3665,7 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
3570
3665
  qmdExplainEnabled: cfg.qmdExplainEnabled === true,
3571
3666
  // v6.0 Fact deduplication & archival
3572
3667
  factDeduplicationEnabled: cfg.factDeduplicationEnabled !== false,
3573
- // Issue #373 — write-time semantic similarity guard
3574
- semanticDedupEnabled: cfg.semanticDedupEnabled !== false,
3575
- // Guard against NaN / Infinity — Number.isFinite rejects both and falls
3576
- // back to the documented default so the semantic dedup guard cannot be
3577
- // silently disabled by a malformed config value.
3578
- semanticDedupThreshold: typeof cfg.semanticDedupThreshold === "number" && Number.isFinite(cfg.semanticDedupThreshold) ? Math.min(1, Math.max(0, cfg.semanticDedupThreshold)) : 0.92,
3579
- // Zero is a valid "disable candidate lookup" signal and must be preserved.
3580
- // Only negative or non-finite values fall back to the default of 5.
3581
- // Fractional values in (0, 1) floor to 0, which would silently disable
3582
- // semantic dedup despite a clearly non-zero operator intent — clamp to 1.
3583
- semanticDedupCandidates: (() => {
3584
- const raw2 = cfg.semanticDedupCandidates;
3585
- if (typeof raw2 !== "number" || !Number.isFinite(raw2) || raw2 < 0) return 5;
3586
- const n = Math.floor(raw2);
3587
- return raw2 > 0 && n === 0 ? 1 : n;
3588
- })(),
3668
+ ...parseWritePathDedupConfig(cfg),
3589
3669
  factArchivalEnabled: cfg.factArchivalEnabled === true,
3590
3670
  factArchivalAgeDays: typeof cfg.factArchivalAgeDays === "number" ? cfg.factArchivalAgeDays : 90,
3591
3671
  factArchivalMaxImportance: typeof cfg.factArchivalMaxImportance === "number" ? cfg.factArchivalMaxImportance : 0.3,
@@ -4426,6 +4506,8 @@ function parseTrustScoreWeights(value) {
4426
4506
  export {
4427
4507
  DRIFT_DETECTION_DEFAULTS,
4428
4508
  parseDriftDetectionConfig,
4509
+ embeddingsFromCosineHits,
4510
+ applyNoveltyGate,
4429
4511
  KNOWN_WEARABLE_SOURCE_IDS,
4430
4512
  defaultWearableCleanupSettings,
4431
4513
  defaultWearableSourceSettings,
@@ -4452,4 +4534,4 @@ export {
4452
4534
  VALID_MEMORY_CATEGORIES,
4453
4535
  parseConfig
4454
4536
  };
4455
- //# sourceMappingURL=chunk-PEBH5DCK.js.map
4537
+ //# sourceMappingURL=chunk-AF5H7TKI.js.map