@remnic/core 9.21.0 → 9.22.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 (422) hide show
  1. package/dist/access-admin-ops-surface.d.ts +32 -12
  2. package/dist/access-admin-ops-surface.js +44 -43
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-boundary.d.ts +13 -10
  5. package/dist/access-boundary.js +44 -43
  6. package/dist/access-cli.js +125 -122
  7. package/dist/access-cli.js.map +1 -1
  8. package/dist/access-http.d.ts +16 -9
  9. package/dist/access-http.js +56 -54
  10. package/dist/access-identity-continuity-surface.d.ts +9 -7
  11. package/dist/access-identity-continuity-surface.js +44 -43
  12. package/dist/access-lcm-surface.d.ts +12 -9
  13. package/dist/access-lcm-surface.js +44 -43
  14. package/dist/access-mcp-admin-tools.d.ts +18 -0
  15. package/dist/access-mcp-admin-tools.js +10 -0
  16. package/dist/access-mcp-admin-tools.js.map +1 -0
  17. package/dist/access-mcp-output-schemas.js +1 -1
  18. package/dist/access-mcp.d.ts +22 -10
  19. package/dist/access-mcp.js +52 -50
  20. package/dist/access-memory-search-fanout.d.ts +2 -2
  21. package/dist/{access-namespace-preflight-tmwQgCT6.d.ts → access-namespace-preflight-CmErR03h.d.ts} +1 -1
  22. package/dist/access-namespace-preflight.d.ts +3 -3
  23. package/dist/access-namespace-preflight.js +44 -43
  24. package/dist/access-observe-write-surface.d.ts +12 -9
  25. package/dist/access-observe-write-surface.js +44 -43
  26. package/dist/access-operations-batch.js +46 -45
  27. package/dist/access-operations.d.ts +16 -13
  28. package/dist/access-operations.js +48 -47
  29. package/dist/access-recall-concurrency.d.ts +12 -9
  30. package/dist/access-recall-concurrency.js +44 -43
  31. package/dist/access-recall-response.d.ts +12 -9
  32. package/dist/access-recall-response.js +44 -43
  33. package/dist/access-recall-surface.d.ts +14 -11
  34. package/dist/access-recall-surface.js +44 -43
  35. package/dist/access-schema.d.ts +76 -76
  36. package/dist/{access-service-BqUii7LY.d.ts → access-service-CKEROeFP.d.ts} +32 -11
  37. package/dist/access-service.d.ts +13 -10
  38. package/dist/access-service.js +46 -45
  39. package/dist/access-surface-catalog.d.ts +12 -9
  40. package/dist/access-surface-catalog.js +7 -0
  41. package/dist/access-surface-catalog.js.map +1 -1
  42. package/dist/access-wearables-meetings-surface.d.ts +78 -0
  43. package/dist/access-wearables-meetings-surface.js +22 -0
  44. package/dist/access-wearables-meetings-surface.js.map +1 -0
  45. package/dist/action-confidence.d.ts +1 -1
  46. package/dist/active-memory-bridge.d.ts +1 -1
  47. package/dist/active-recall.d.ts +1 -1
  48. package/dist/active-recall.js +7 -7
  49. package/dist/adapters/index.js +4 -4
  50. package/dist/adapters/registry.js +2 -2
  51. package/dist/{auto-sync-UPTUVE4X.js → auto-sync-5OE5QOZB.js} +4 -4
  52. package/dist/behavior-learner.d.ts +1 -1
  53. package/dist/behavior-signals.d.ts +1 -1
  54. package/dist/bootstrap.d.ts +9 -7
  55. package/dist/briefing.d.ts +2 -2
  56. package/dist/briefing.js +11 -11
  57. package/dist/buffer-surprise-report.d.ts +1 -1
  58. package/dist/buffer.d.ts +2 -2
  59. package/dist/bulk-import/index.d.ts +3 -3
  60. package/dist/calibration.d.ts +1 -1
  61. package/dist/capabilities.d.ts +1 -1
  62. package/dist/{catalog-iWvWz61I.d.ts → catalog-BFTVo2Ez.d.ts} +1 -1
  63. package/dist/causal-behavior.d.ts +1 -1
  64. package/dist/causal-behavior.js +2 -2
  65. package/dist/causal-chain.js +2 -2
  66. package/dist/causal-consolidation.d.ts +1 -1
  67. package/dist/causal-consolidation.js +15 -15
  68. package/dist/causal-retrieval.js +2 -2
  69. package/dist/causal-trajectory-graph.d.ts +1 -1
  70. package/dist/causal-trajectory.js +1 -1
  71. package/dist/{chunk-Z54EM5YZ.js → chunk-2PHX3I5C.js} +10 -10
  72. package/dist/{chunk-JFDEYXF7.js → chunk-3NAHZQU3.js} +2 -2
  73. package/dist/{chunk-MJYYXODM.js → chunk-3UOSVTFR.js} +8 -8
  74. package/dist/{chunk-HPOY2PHQ.js → chunk-3ZW6ZQO6.js} +6 -6
  75. package/dist/{chunk-UV72DEZD.js → chunk-4B77XSG5.js} +5 -5
  76. package/dist/chunk-56BSXSHC.js +158 -0
  77. package/dist/chunk-56BSXSHC.js.map +1 -0
  78. package/dist/{chunk-IC2TCZJ2.js → chunk-57QKLRBV.js} +3 -1
  79. package/dist/chunk-57QKLRBV.js.map +1 -0
  80. package/dist/{chunk-LMHDFOVV.js → chunk-5CPI2QWG.js} +3 -3
  81. package/dist/{chunk-3ZUY2VQF.js → chunk-5FZQ74K5.js} +2 -2
  82. package/dist/{chunk-B7C3TF5H.js → chunk-6TWXQ4E2.js} +5 -5
  83. package/dist/{chunk-JN3IUA2Q.js → chunk-7I7AYIUQ.js} +3 -3
  84. package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
  85. package/dist/{chunk-MONWCSVL.js → chunk-7RAJ3GXO.js} +2 -1
  86. package/dist/chunk-7RAJ3GXO.js.map +1 -0
  87. package/dist/{chunk-SQEDDWAM.js → chunk-A2RFKL3V.js} +5 -34
  88. package/dist/chunk-A2RFKL3V.js.map +1 -0
  89. package/dist/{chunk-5JQLAQUZ.js → chunk-ATEAL5EI.js} +6 -6
  90. package/dist/{chunk-4PYLBXX6.js → chunk-AYAROCWD.js} +2 -2
  91. package/dist/chunk-BLDBT6HZ.js +39 -0
  92. package/dist/chunk-BLDBT6HZ.js.map +1 -0
  93. package/dist/{chunk-EXU5IQ3S.js → chunk-CUUY5CC4.js} +6 -6
  94. package/dist/{chunk-X5QS5C2O.js → chunk-E3ZMFFQZ.js} +2 -2
  95. package/dist/{chunk-JWMYVQAM.js → chunk-ES5IHQ6M.js} +2 -2
  96. package/dist/{chunk-HJEEAO4O.js → chunk-G2NSSQES.js} +2 -2
  97. package/dist/{chunk-QO2KODU6.js → chunk-GD3QOBMB.js} +2 -2
  98. package/dist/{chunk-62QM5MKY.js → chunk-IIXLB5E7.js} +118 -62
  99. package/dist/chunk-IIXLB5E7.js.map +1 -0
  100. package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
  101. package/dist/{chunk-Q3FWRDCP.js → chunk-JNIJBXVK.js} +2 -2
  102. package/dist/{chunk-EILX7SQR.js → chunk-JVGUY2AU.js} +27 -16
  103. package/dist/chunk-JVGUY2AU.js.map +1 -0
  104. package/dist/{chunk-N7EVMKP6.js → chunk-KNRG6ZGJ.js} +11 -11
  105. package/dist/{chunk-GEUDRENF.js → chunk-MMTG3SCJ.js} +2 -2
  106. package/dist/{chunk-WZFAPHIK.js → chunk-MU7ZHSZE.js} +2 -2
  107. package/dist/{chunk-W4FBGYGK.js → chunk-NRV4Y3PM.js} +1 -1
  108. package/dist/{chunk-TCZWBJBO.js → chunk-OUW4PAY4.js} +199 -256
  109. package/dist/chunk-OUW4PAY4.js.map +1 -0
  110. package/dist/{chunk-275ENJDK.js → chunk-P2BLHUL2.js} +2 -2
  111. package/dist/{chunk-LRGSLV7M.js → chunk-PYHOAXTI.js} +4 -4
  112. package/dist/{chunk-V5TSUGRB.js → chunk-QCKQEBIY.js} +17 -9
  113. package/dist/chunk-QCKQEBIY.js.map +1 -0
  114. package/dist/{chunk-EZKKHVFY.js → chunk-QE63OHLB.js} +2 -2
  115. package/dist/{chunk-ONHRRJZM.js → chunk-QJAQNXWI.js} +6 -6
  116. package/dist/{chunk-KHRKEELC.js → chunk-ROUL7RZU.js} +395 -69
  117. package/dist/chunk-ROUL7RZU.js.map +1 -0
  118. package/dist/{chunk-AT3TDN6O.js → chunk-RT4TSR2C.js} +8953 -8645
  119. package/dist/chunk-RT4TSR2C.js.map +1 -0
  120. package/dist/{chunk-6NZ7U4R4.js → chunk-SCOT5DTA.js} +1 -1
  121. package/dist/chunk-SCOT5DTA.js.map +1 -0
  122. package/dist/{chunk-LI4ZOFHW.js → chunk-SVZGA2MK.js} +2 -2
  123. package/dist/chunk-SYOIVK7K.js +63 -0
  124. package/dist/chunk-SYOIVK7K.js.map +1 -0
  125. package/dist/{chunk-5RUE3GHQ.js → chunk-TWCOYET2.js} +17 -1
  126. package/dist/chunk-TWCOYET2.js.map +1 -0
  127. package/dist/{chunk-5IXPWEQB.js → chunk-WS32QRLO.js} +113 -48
  128. package/dist/chunk-WS32QRLO.js.map +1 -0
  129. package/dist/{chunk-53WDAG7X.js → chunk-WWZ35GWW.js} +5 -5
  130. package/dist/{chunk-4F6AANKS.js → chunk-XWPFZX6S.js} +507 -143
  131. package/dist/chunk-XWPFZX6S.js.map +1 -0
  132. package/dist/{chunk-SB4OKS6C.js → chunk-ZN4UZWMT.js} +2 -2
  133. package/dist/{chunk-7M6APKJL.js → chunk-ZYU7ZFLT.js} +2 -2
  134. package/dist/{cli-DPEhq0Cp.d.ts → cli-BrwT9YMD.d.ts} +5 -5
  135. package/dist/cli.d.ts +14 -11
  136. package/dist/cli.js +86 -84
  137. package/dist/compounding/engine.d.ts +2 -2
  138. package/dist/compounding/engine.js +11 -11
  139. package/dist/compounding/preference-consolidator.d.ts +1 -1
  140. package/dist/compression-optimizer.d.ts +1 -1
  141. package/dist/config.d.ts +1 -1
  142. package/dist/config.js +4 -4
  143. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  144. package/dist/connectors/codex-materialize-runner.js +11 -11
  145. package/dist/connectors/codex-materialize.d.ts +1 -1
  146. package/dist/connectors/index.d.ts +1 -1
  147. package/dist/connectors/index.js +12 -12
  148. package/dist/consolidation-provenance-check.d.ts +2 -2
  149. package/dist/consolidation-undo.d.ts +2 -2
  150. package/dist/contradiction/index.d.ts +2 -2
  151. package/dist/contradiction/index.js +1 -1
  152. package/dist/conversation-index/backend.d.ts +1 -1
  153. package/dist/conversation-index/chunker.d.ts +1 -1
  154. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  155. package/dist/conversation-index/indexer.d.ts +1 -1
  156. package/dist/conversation-index/search.d.ts +1 -1
  157. package/dist/day-summary.d.ts +1 -1
  158. package/dist/delinearize.d.ts +1 -1
  159. package/dist/direct-answer-wiring.d.ts +1 -1
  160. package/dist/direct-answer.d.ts +1 -1
  161. package/dist/embedding-fallback.d.ts +1 -1
  162. package/dist/enrichment/index.d.ts +1 -1
  163. package/dist/entity-retrieval.d.ts +2 -2
  164. package/dist/entity-retrieval.js +11 -11
  165. package/dist/entity-schema.d.ts +1 -1
  166. package/dist/explicit-capture.d.ts +9 -7
  167. package/dist/explicit-capture.js +1 -1
  168. package/dist/extraction-error-classification.d.ts +22 -0
  169. package/dist/extraction-error-classification.js +11 -0
  170. package/dist/extraction-error-classification.js.map +1 -0
  171. package/dist/extraction-faithfulness.d.ts +1 -1
  172. package/dist/extraction-judge-telemetry.d.ts +1 -1
  173. package/dist/extraction-judge-training.d.ts +1 -1
  174. package/dist/extraction-judge.d.ts +1 -1
  175. package/dist/extraction.d.ts +3 -17
  176. package/dist/extraction.js +5 -3
  177. package/dist/fallback-llm.d.ts +1 -1
  178. package/dist/{first-start-migration-LEXL3XYL.js → first-start-migration-BKNGOFED.js} +4 -4
  179. package/dist/graph-dashboard-diff.d.ts +1 -1
  180. package/dist/graph-dashboard-key.d.ts +1 -1
  181. package/dist/graph-dashboard-parser.d.ts +1 -1
  182. package/dist/graph-edge-reinforcement.d.ts +1 -1
  183. package/dist/graph-snapshot.d.ts +1 -1
  184. package/dist/graph.d.ts +1 -1
  185. package/dist/importance.d.ts +1 -1
  186. package/dist/importers/index.d.ts +1 -1
  187. package/dist/in-flight-reads.d.ts +1 -1
  188. package/dist/index.d.ts +713 -923
  189. package/dist/index.js +249 -212
  190. package/dist/intent.d.ts +1 -1
  191. package/dist/lcm/engine.d.ts +1 -1
  192. package/dist/lcm/engine.js +4 -4
  193. package/dist/lcm/index.d.ts +1 -1
  194. package/dist/lcm/index.js +13 -13
  195. package/dist/lcm/tools.d.ts +1 -1
  196. package/dist/lifecycle.d.ts +1 -1
  197. package/dist/live-connectors-runner.d.ts +1 -1
  198. package/dist/local-llm.d.ts +1 -1
  199. package/dist/local-model-endpoint.d.ts +1 -1
  200. package/dist/maintenance/memory-governance.d.ts +1 -1
  201. package/dist/maintenance/memory-governance.js +12 -12
  202. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  203. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -11
  204. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  205. package/dist/maintenance/rebuild-memory-projection.js +13 -13
  206. package/dist/maintenance-C98njYb8.d.ts +366 -0
  207. package/dist/mcp-memory-inspector-app.d.ts +12 -9
  208. package/dist/mcp-read-only-tools.js +1 -1
  209. package/dist/memory-action-policy.d.ts +1 -1
  210. package/dist/memory-cache.d.ts +1 -1
  211. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  212. package/dist/memory-projection-store.d.ts +1 -1
  213. package/dist/memory-provenance.d.ts +1 -1
  214. package/dist/memory-worth-outcomes.d.ts +2 -2
  215. package/dist/models-json.d.ts +1 -1
  216. package/dist/namespaces/migrate.d.ts +3 -3
  217. package/dist/namespaces/migrate.js +19 -19
  218. package/dist/namespaces/principal.d.ts +1 -1
  219. package/dist/namespaces/search.d.ts +1 -1
  220. package/dist/namespaces/search.js +7 -7
  221. package/dist/namespaces/storage.d.ts +3 -3
  222. package/dist/namespaces/storage.js +11 -11
  223. package/dist/native-knowledge.d.ts +1 -1
  224. package/dist/offline-sync-impression-drain.d.ts +1 -1
  225. package/dist/offline-sync-impression-drain.js +1 -1
  226. package/dist/operator-toolkit.d.ts +2 -2
  227. package/dist/operator-toolkit.js +28 -28
  228. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  229. package/dist/orchestration/maintenance.d.ts +6 -223
  230. package/dist/orchestration/maintenance.js +19 -19
  231. package/dist/{orchestrator-DB93S48I.d.ts → orchestrator-C9ZVppNh.d.ts} +12 -481
  232. package/dist/orchestrator.d.ts +10 -8
  233. package/dist/orchestrator.js +122 -119
  234. package/dist/patterns-cli.d.ts +1 -1
  235. package/dist/{pipeline-DmGc-H66.d.ts → pipeline-id_-sqYm.d.ts} +1 -1
  236. package/dist/policy-runtime.d.ts +1 -1
  237. package/dist/proactive-contention.d.ts +1 -1
  238. package/dist/provenance.d.ts +1 -1
  239. package/dist/{qmd-cJT0crkF.d.ts → qmd-R6XaQOZK.d.ts} +1 -1
  240. package/dist/qmd-preflight.d.ts +2 -2
  241. package/dist/qmd-recall-cache.d.ts +1 -1
  242. package/dist/qmd.d.ts +2 -2
  243. package/dist/qmd.js +4 -4
  244. package/dist/recall-concurrency-config.d.ts +1 -1
  245. package/dist/recall-disclosure-escalation.d.ts +1 -1
  246. package/dist/recall-explain-renderer.d.ts +1 -1
  247. package/dist/recall-explain-renderer.js +3 -3
  248. package/dist/recall-memory-map.d.ts +1 -1
  249. package/dist/recall-planner-llm.d.ts +1 -1
  250. package/dist/recall-state.d.ts +1 -1
  251. package/dist/recall-tag-filter.d.ts +1 -1
  252. package/dist/recall-timings.d.ts +1 -1
  253. package/dist/recall-xray-cli.d.ts +1 -1
  254. package/dist/recall-xray-cli.js +4 -4
  255. package/dist/recall-xray-renderer.d.ts +1 -1
  256. package/dist/recall-xray-renderer.js +3 -3
  257. package/dist/recall-xray.d.ts +1 -1
  258. package/dist/recall-xray.js +2 -2
  259. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  260. package/dist/replay/normalizers/claude.d.ts +1 -1
  261. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  262. package/dist/replay/normalizers/shared.d.ts +1 -1
  263. package/dist/replay/runner.d.ts +1 -1
  264. package/dist/replay/types.d.ts +1 -1
  265. package/dist/resolution-3K27T4VO.js +1 -1
  266. package/dist/resolve-auth-token.d.ts +1 -1
  267. package/dist/resume-bundles.js +6 -6
  268. package/dist/retrieval-agents.d.ts +2 -2
  269. package/dist/retrieval-tiers.d.ts +1 -1
  270. package/dist/routing/engine.d.ts +1 -1
  271. package/dist/routing/store.d.ts +1 -1
  272. package/dist/salvage-envelope.d.ts +1 -1
  273. package/dist/salvage-envelope.js +1 -1
  274. package/dist/schemas.d.ts +76 -76
  275. package/dist/{scope-profiles-KG2nODX7.d.ts → scope-profiles-EhyuAKkd.d.ts} +1 -1
  276. package/dist/search/embed-helper.d.ts +1 -1
  277. package/dist/search/factory.d.ts +1 -1
  278. package/dist/search/factory.js +6 -6
  279. package/dist/search/index.d.ts +1 -1
  280. package/dist/search/index.js +12 -12
  281. package/dist/search/lancedb-backend.d.ts +1 -1
  282. package/dist/search/meilisearch-backend.d.ts +1 -1
  283. package/dist/search/noop-backend.d.ts +1 -1
  284. package/dist/search/orama-backend.d.ts +1 -1
  285. package/dist/search/port.d.ts +1 -1
  286. package/dist/search/remote-backend.d.ts +1 -1
  287. package/dist/{semantic-consolidation-BaZlg0D8.d.ts → semantic-consolidation-B2xo26UQ.d.ts} +1 -1
  288. package/dist/semantic-consolidation.d.ts +2 -2
  289. package/dist/semantic-consolidation.js +13 -13
  290. package/dist/semantic-rule-promotion.js +11 -11
  291. package/dist/semantic-rule-verifier.d.ts +1 -1
  292. package/dist/semantic-rule-verifier.js +12 -12
  293. package/dist/service-DgFWlZ-r.d.ts +835 -0
  294. package/dist/session-observer-bands.d.ts +1 -1
  295. package/dist/session-observer-state.d.ts +1 -1
  296. package/dist/shared-context/manager.d.ts +9 -9
  297. package/dist/signal.d.ts +1 -1
  298. package/dist/{storage-BKhHHnRo.d.ts → storage-XGawwqXE.d.ts} +131 -2
  299. package/dist/storage.d.ts +2 -2
  300. package/dist/storage.js +10 -10
  301. package/dist/summarizer.d.ts +1 -1
  302. package/dist/summary-snapshot.d.ts +1 -1
  303. package/dist/temporal-supersession.d.ts +2 -2
  304. package/dist/temporal-timeline-recall.d.ts +1 -1
  305. package/dist/temporal-validity.d.ts +1 -1
  306. package/dist/threading.d.ts +1 -1
  307. package/dist/tier-migration.d.ts +2 -2
  308. package/dist/tier-routing.d.ts +1 -1
  309. package/dist/topics.d.ts +1 -1
  310. package/dist/transcript.d.ts +1 -1
  311. package/dist/transfer/import-sqlite.js +2 -2
  312. package/dist/transfer/types.d.ts +66 -66
  313. package/dist/trust-score-stage.d.ts +1 -1
  314. package/dist/trust-score.d.ts +1 -1
  315. package/dist/{types-GBQZuT7l.d.ts → types-Bbs0qz6b.d.ts} +2 -3
  316. package/dist/types.d.ts +1 -1
  317. package/dist/types.js +1 -1
  318. package/dist/utility-runtime.d.ts +1 -1
  319. package/dist/verified-recall.js +12 -12
  320. package/dist/write-envelope.d.ts +1 -1
  321. package/dist/write-envelope.js +1 -1
  322. package/package.json +2 -2
  323. package/src/access-admin-ops-surface.ts +47 -0
  324. package/src/access-boundary.ts +4 -0
  325. package/src/access-http.test.ts +63 -0
  326. package/src/access-http.ts +27 -37
  327. package/src/access-mcp-admin-tools.ts +171 -0
  328. package/src/access-mcp-output-schemas.ts +16 -0
  329. package/src/access-mcp.ts +10 -262
  330. package/src/access-operations-batch.ts +11 -5
  331. package/src/access-service.ts +59 -46
  332. package/src/access-surface-catalog.ts +7 -0
  333. package/src/access-wearables-meetings-surface.ts +139 -0
  334. package/src/activity/digest.ts +1 -1
  335. package/src/activity/runner.test.ts +37 -0
  336. package/src/activity/runner.ts +12 -0
  337. package/src/activity/scheduler.test.ts +1 -0
  338. package/src/activity/sync-registration.ts +13 -0
  339. package/src/cli/meetings-commands.ts +70 -0
  340. package/src/cli.ts +7 -6
  341. package/src/extraction-error-classification.ts +52 -0
  342. package/src/extraction.ts +2 -50
  343. package/src/mcp-read-only-tools.ts +2 -0
  344. package/src/meetings/build-memory.test.ts +364 -0
  345. package/src/meetings/build-scheduler.test.ts +55 -0
  346. package/src/meetings/build-scheduler.ts +96 -0
  347. package/src/meetings/day-source.test.ts +275 -0
  348. package/src/meetings/day-source.ts +352 -0
  349. package/src/meetings/http-glue.ts +126 -0
  350. package/src/meetings/index.ts +5 -4
  351. package/src/meetings/manual-sync-flush.test.ts +72 -0
  352. package/src/meetings/mcp-tools.ts +65 -0
  353. package/src/meetings/memory-gen.test.ts +498 -0
  354. package/src/meetings/memory-gen.ts +549 -0
  355. package/src/meetings/memory-generator.ts +5 -0
  356. package/src/meetings/namespace-isolation.test.ts +159 -0
  357. package/src/meetings/service.test.ts +195 -0
  358. package/src/meetings/service.ts +157 -0
  359. package/src/meetings/summary-extractor.test.ts +287 -0
  360. package/src/meetings/summary-extractor.ts +264 -0
  361. package/src/orchestration/maintenance.ts +8 -0
  362. package/src/orchestration/orchestrator-init.ts +6 -1
  363. package/src/orchestration/workspace-ops.ts +172 -8
  364. package/src/orchestrator.ts +12 -13
  365. package/src/storage.ts +21 -0
  366. package/src/testing/subjects/meetings-namespace-harness.ts +159 -0
  367. package/src/testing/subjects/meetings-namespace.test.ts +93 -0
  368. package/src/types.ts +1 -2
  369. package/src/wearables/cli.ts +2 -1
  370. package/src/wearables/index.ts +1 -0
  371. package/src/wearables/mcp-tools.ts +143 -0
  372. package/src/wearables/registry.test.ts +11 -0
  373. package/src/wearables/registry.ts +13 -0
  374. package/src/wearables/service.test.ts +62 -1
  375. package/src/wearables/service.ts +30 -2
  376. package/src/wearables/transcript-search-namespace-isolation.test.ts +98 -0
  377. package/dist/chunk-4F6AANKS.js.map +0 -1
  378. package/dist/chunk-5IXPWEQB.js.map +0 -1
  379. package/dist/chunk-5RUE3GHQ.js.map +0 -1
  380. package/dist/chunk-62QM5MKY.js.map +0 -1
  381. package/dist/chunk-6NZ7U4R4.js.map +0 -1
  382. package/dist/chunk-AT3TDN6O.js.map +0 -1
  383. package/dist/chunk-EILX7SQR.js.map +0 -1
  384. package/dist/chunk-IC2TCZJ2.js.map +0 -1
  385. package/dist/chunk-KHRKEELC.js.map +0 -1
  386. package/dist/chunk-MONWCSVL.js.map +0 -1
  387. package/dist/chunk-SQEDDWAM.js.map +0 -1
  388. package/dist/chunk-TCZWBJBO.js.map +0 -1
  389. package/dist/chunk-V5TSUGRB.js.map +0 -1
  390. /package/dist/{auto-sync-UPTUVE4X.js.map → auto-sync-5OE5QOZB.js.map} +0 -0
  391. /package/dist/{chunk-Z54EM5YZ.js.map → chunk-2PHX3I5C.js.map} +0 -0
  392. /package/dist/{chunk-JFDEYXF7.js.map → chunk-3NAHZQU3.js.map} +0 -0
  393. /package/dist/{chunk-MJYYXODM.js.map → chunk-3UOSVTFR.js.map} +0 -0
  394. /package/dist/{chunk-HPOY2PHQ.js.map → chunk-3ZW6ZQO6.js.map} +0 -0
  395. /package/dist/{chunk-UV72DEZD.js.map → chunk-4B77XSG5.js.map} +0 -0
  396. /package/dist/{chunk-LMHDFOVV.js.map → chunk-5CPI2QWG.js.map} +0 -0
  397. /package/dist/{chunk-3ZUY2VQF.js.map → chunk-5FZQ74K5.js.map} +0 -0
  398. /package/dist/{chunk-B7C3TF5H.js.map → chunk-6TWXQ4E2.js.map} +0 -0
  399. /package/dist/{chunk-JN3IUA2Q.js.map → chunk-7I7AYIUQ.js.map} +0 -0
  400. /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
  401. /package/dist/{chunk-5JQLAQUZ.js.map → chunk-ATEAL5EI.js.map} +0 -0
  402. /package/dist/{chunk-4PYLBXX6.js.map → chunk-AYAROCWD.js.map} +0 -0
  403. /package/dist/{chunk-EXU5IQ3S.js.map → chunk-CUUY5CC4.js.map} +0 -0
  404. /package/dist/{chunk-X5QS5C2O.js.map → chunk-E3ZMFFQZ.js.map} +0 -0
  405. /package/dist/{chunk-JWMYVQAM.js.map → chunk-ES5IHQ6M.js.map} +0 -0
  406. /package/dist/{chunk-HJEEAO4O.js.map → chunk-G2NSSQES.js.map} +0 -0
  407. /package/dist/{chunk-QO2KODU6.js.map → chunk-GD3QOBMB.js.map} +0 -0
  408. /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
  409. /package/dist/{chunk-Q3FWRDCP.js.map → chunk-JNIJBXVK.js.map} +0 -0
  410. /package/dist/{chunk-N7EVMKP6.js.map → chunk-KNRG6ZGJ.js.map} +0 -0
  411. /package/dist/{chunk-GEUDRENF.js.map → chunk-MMTG3SCJ.js.map} +0 -0
  412. /package/dist/{chunk-WZFAPHIK.js.map → chunk-MU7ZHSZE.js.map} +0 -0
  413. /package/dist/{chunk-W4FBGYGK.js.map → chunk-NRV4Y3PM.js.map} +0 -0
  414. /package/dist/{chunk-275ENJDK.js.map → chunk-P2BLHUL2.js.map} +0 -0
  415. /package/dist/{chunk-LRGSLV7M.js.map → chunk-PYHOAXTI.js.map} +0 -0
  416. /package/dist/{chunk-EZKKHVFY.js.map → chunk-QE63OHLB.js.map} +0 -0
  417. /package/dist/{chunk-ONHRRJZM.js.map → chunk-QJAQNXWI.js.map} +0 -0
  418. /package/dist/{chunk-LI4ZOFHW.js.map → chunk-SVZGA2MK.js.map} +0 -0
  419. /package/dist/{chunk-53WDAG7X.js.map → chunk-WWZ35GWW.js.map} +0 -0
  420. /package/dist/{chunk-SB4OKS6C.js.map → chunk-ZN4UZWMT.js.map} +0 -0
  421. /package/dist/{chunk-7M6APKJL.js.map → chunk-ZYU7ZFLT.js.map} +0 -0
  422. /package/dist/{first-start-migration-LEXL3XYL.js.map → first-start-migration-BKNGOFED.js.map} +0 -0
@@ -0,0 +1,835 @@
1
+ import { n as BufferTurn, J as ExtractionResult, ah as ImportanceScore, x as MemoryStatus, aN as WearableConversation, aO as WearableSourceSettings, aP as WearableNativeMemory, aQ as WearableMemoryMode, aR as WearableSourceConnector, aS as WearablesConfig, aT as WearableSyncSummary, aU as WearableSourceStatus, aV as WearableDayTranscript, ay as FusedWearableConversation, aW as WearableCorrectionRule, aX as MeetingBuildInput, aY as MeetingsConfig, aD as FusedMeeting, aB as MeetingRecord, aZ as MeetingsDetectionInput, a_ as FusionConversationInput, a$ as MeetingActivitySnapshot, b0 as DetectedMeeting } from './types-Bbs0qz6b.js';
2
+ import { M as MemoryWriteResult, F as FusionArtifactStore, a as MeetingRecordStore, b as MeetingRecordSummary } from './storage-XGawwqXE.js';
3
+ import { SealedMemoryEnvelope } from './write-envelope.js';
4
+ import { JudgeCandidate, JudgeBatchResult } from './extraction-judge.js';
5
+
6
+ /**
7
+ * Wearable speaker registry — maps provider diarization labels to
8
+ * human names, persistently, per source.
9
+ *
10
+ * Providers expose speakers differently (Limitless: names + a "user"
11
+ * marker; Bee: opaque labels like "0"/"1"; Omi: "SPEAKER_00" + is_user
12
+ * + optional person ids). The registry stores operator-confirmed
13
+ * mappings keyed `<sourceId>:<speakerKey>` in
14
+ * `state/wearables/speakers.json`, plus the wearer's display name.
15
+ *
16
+ * Resolution precedence (most-authoritative first):
17
+ * 1. registry override for `<sourceId>:<speakerKey>`
18
+ * 2. provider-identified wearer -> selfName
19
+ * 3. provider-supplied speaker name
20
+ * 4. the raw speaker key, prefixed "Speaker" when it is bare digits
21
+ */
22
+ interface SpeakerOverride {
23
+ name: string;
24
+ /** Mark this speaker as the wearer (their words become "you"). */
25
+ isSelf?: boolean;
26
+ updatedAt: string;
27
+ }
28
+ interface SpeakerRegistry {
29
+ version: 1;
30
+ /** Display name used for the wearer across all sources. */
31
+ selfName: string;
32
+ /** Overrides keyed `<sourceId>:<speakerKey>`. */
33
+ speakers: Record<string, SpeakerOverride>;
34
+ }
35
+ declare const DEFAULT_SELF_NAME = "Me";
36
+ declare function emptySpeakerRegistry(): SpeakerRegistry;
37
+ declare function speakersFilePath(memoryDir: string): string;
38
+ declare function loadSpeakerRegistry(memoryDir: string): Promise<SpeakerRegistry>;
39
+ declare function saveSpeakerRegistry(memoryDir: string, registry: SpeakerRegistry): Promise<void>;
40
+ declare function speakerRegistryKey(sourceId: string, speakerKey: string): string;
41
+ interface ResolvedSpeaker {
42
+ /** Display label used in transcripts, e.g. "Jane" or "Me (you)". */
43
+ label: string;
44
+ /** Whether this speaker is the wearer. */
45
+ isSelf: boolean;
46
+ }
47
+ declare function resolveSpeaker(sourceId: string, segment: {
48
+ speakerKey: string;
49
+ speakerName?: string;
50
+ isWearer?: boolean;
51
+ }, registry: SpeakerRegistry): ResolvedSpeaker;
52
+ /**
53
+ * Distinct speaker labels for a set of segments, in first-appearance
54
+ * order — used for day-transcript frontmatter.
55
+ */
56
+ declare function distinctSpeakerLabels(sourceId: string, segments: Array<{
57
+ speakerKey: string;
58
+ speakerName?: string;
59
+ isWearer?: boolean;
60
+ }>, registry: SpeakerRegistry): string[];
61
+
62
+ interface CorroborationContext {
63
+ /**
64
+ * Same-day transcript bodies from OTHER sources, keyed by source id.
65
+ * Pre-tokenized once per sync (day bodies are large).
66
+ */
67
+ otherSourceDayTokens: Map<string, Set<string>>;
68
+ /** Existing active memories: id + content. */
69
+ existingMemories: Array<{
70
+ id: string;
71
+ content: string;
72
+ }>;
73
+ }
74
+
75
+ /**
76
+ * Wearable memory generation — trust-gated extraction from cleaned day
77
+ * transcripts.
78
+ *
79
+ * Wearable ASR quality varies wildly between providers and rooms, so
80
+ * unlike live-session extraction this path is gated per source:
81
+ *
82
+ * - memoryMode "off" -> never runs
83
+ * - memoryMode "review" -> candidates land with status
84
+ * "pending_review" (operator approves via
85
+ * the existing review-queue surfaces)
86
+ * - memoryMode "auto" -> candidates that pass every gate land
87
+ * active
88
+ *
89
+ * Deterministic gates (applied in order, all modes except "off"):
90
+ * 1. category gate — procedure / reasoning_trace candidates are
91
+ * skipped (they need richer persistence than
92
+ * this path provides)
93
+ * 2. confidence floor — `minConfidence`
94
+ * 3. importance floor — local `scoreImportance` >= `minImportance`
95
+ * 4. dedup — storage content-hash index + intra-run set
96
+ * 5. day cap — top `maxMemoriesPerDay` by importance score
97
+ * (0 disables the cap)
98
+ *
99
+ * The extraction engine itself is injected so this module stays free of
100
+ * LLM-client construction; callers hand in `orchestrator`-owned or
101
+ * standalone engines alike.
102
+ */
103
+
104
+ declare function memoryStatusForMode(mode: WearableMemoryMode): Extract<MemoryStatus, "active" | "pending_review">;
105
+ /** Narrow writer interface satisfied by `StorageManager`. */
106
+ interface WearableMemoryWriter {
107
+ /**
108
+ * Sealed-envelope write entry point (issue #1989 PR4): cross-cutting
109
+ * fields ride the composed envelope; per-write extras stay explicit.
110
+ */
111
+ writeSealedMemory(envelope: SealedMemoryEnvelope, extras: {
112
+ importance?: ImportanceScore;
113
+ contentHashSource?: string;
114
+ status?: MemoryStatus;
115
+ memoryKind?: "episode" | "note" | "box" | "dream" | "procedural";
116
+ }): Promise<MemoryWriteResult>;
117
+ hasFactContentHash(content: string): Promise<boolean>;
118
+ /**
119
+ * Locate an earlier wearable write of the same content (any status).
120
+ * Optional: enables in-place promotion when re-scoring with stronger
121
+ * evidence.
122
+ */
123
+ findWearableMemoryByContent?(content: string): Promise<{
124
+ id: string;
125
+ status: MemoryStatus | undefined;
126
+ } | null>;
127
+ /**
128
+ * Promote a pending_review wearable memory to active, merging trust
129
+ * evidence. Returns false when missing or no longer pending.
130
+ */
131
+ promoteWearableMemory?(id: string, attributeUpdates: Record<string, string>, confidence?: number): Promise<boolean>;
132
+ /**
133
+ * Demote a pending_review wearable memory to rejected on an explicit
134
+ * judge-reject re-verdict. Returns false when missing or no longer
135
+ * pending. Active rows are never auto-demoted.
136
+ */
137
+ demoteWearableMemory?(id: string, attributeUpdates: Record<string, string>): Promise<boolean>;
138
+ }
139
+ interface WearableMemoryGenDeps {
140
+ extract(turns: BufferTurn[]): Promise<ExtractionResult>;
141
+ writer: WearableMemoryWriter;
142
+ /**
143
+ * LLM-as-judge batch evaluation (the existing extraction judge).
144
+ * Absent when no judge is wired (degraded smart mode: trust scoring
145
+ * runs on confidence x sourceTrust + corroboration alone).
146
+ */
147
+ judgeFacts?(candidates: JudgeCandidate[]): Promise<JudgeBatchResult>;
148
+ /**
149
+ * Corroboration evidence for smart mode: other sources' same-day
150
+ * transcript tokens + existing active memories. Absent disables
151
+ * corroboration boosts.
152
+ */
153
+ corroboration?: CorroborationContext;
154
+ }
155
+ interface WearableMemoryGenResult {
156
+ created: number;
157
+ /**
158
+ * Writes the #1579 tombstone chokepoint downgraded to pending_review (no
159
+ * active copy). Surfaced distinctly from `created` so sync summaries and
160
+ * callers don't count blocked content as successfully created (#1645).
161
+ */
162
+ tombstoneBlocked: number;
163
+ /** Earlier borderline writes promoted to active by new evidence. */
164
+ promoted: number;
165
+ /** Earlier pending writes retired by a fresh judge-reject verdict. */
166
+ demoted: number;
167
+ skipped: number;
168
+ skippedByReason: Record<string, number>;
169
+ /** Non-fatal problems (e.g. the extraction engine erroring). */
170
+ warnings: string[];
171
+ /**
172
+ * True when every conversation was extracted (the pass may still
173
+ * carry degraded-mode warnings, e.g. judge unavailable). False only
174
+ * when extraction itself aborted mid-day — the signal callers use to
175
+ * re-run the pass on the next sync. A degraded-but-complete pass
176
+ * must NOT re-run forever: its facts are already written and dedup
177
+ * would suppress improvements anyway.
178
+ */
179
+ completed: boolean;
180
+ }
181
+ declare const WEARABLE_SOURCE_PREFIX = "wearable";
182
+ declare function wearableSourceLabel(sourceId: string): string;
183
+ declare function wearableDayTag(date: string): string;
184
+ /**
185
+ * Render a cleaned conversation into extraction-ready turns. Each turn
186
+ * carries a labeled multi-speaker transcript block; the wearer is
187
+ * marked "(you)" so first-person facts attribute correctly.
188
+ */
189
+ declare function buildExtractionTurns(sourceId: string, date: string, conversation: WearableConversation, registry: SpeakerRegistry): BufferTurn[];
190
+ /**
191
+ * Run extraction + gates over a day's conversations and persist the
192
+ * survivors. Returns counts for the sync summary.
193
+ */
194
+ declare function generateWearableMemories(sourceId: string, date: string, conversations: WearableConversation[], settings: WearableSourceSettings, registry: SpeakerRegistry, deps: WearableMemoryGenDeps): Promise<WearableMemoryGenResult>;
195
+ /**
196
+ * Write one compact daily-digest memory summarizing the day's recorded
197
+ * conversations. Deterministic (no LLM): titles, time ranges, speaker
198
+ * counts. Gated by `wearables.digestEnabled`.
199
+ */
200
+ declare function writeDailyDigestMemory(sourceId: string, date: string, conversations: WearableConversation[], settings: WearableSourceSettings, registry: SpeakerRegistry, writer: WearableMemoryWriter): Promise<boolean>;
201
+ declare function importNativeMemories(sourceId: string, memories: WearableNativeMemory[], alreadyImportedIds: ReadonlySet<string>, settings: WearableSourceSettings, deps: WearableMemoryGenDeps): Promise<{
202
+ imported: number;
203
+ tombstoneBlocked: number;
204
+ importedIds: string[];
205
+ warnings: string[];
206
+ }>;
207
+
208
+ /**
209
+ * Wearable sync pipeline — pull → clean → label → correct → store →
210
+ * (optionally) remember, for one source.
211
+ *
212
+ * Stage order per conversation is deliberate:
213
+ * 1. off-the-record elision (before anything can persist the span)
214
+ * 2. cleanup (merging first lets redaction see numbers
215
+ * that ASR split across segments)
216
+ * 3. redaction (built-in + user patterns)
217
+ * 4. corrections (user-specific word fixes)
218
+ *
219
+ * Day files are rebuilt idempotently; the per-day body hash recorded in
220
+ * sync state lets unchanged days skip both the rewrite and the
221
+ * (expensive) memory extraction. Sync state advances only after every
222
+ * write for the run has succeeded.
223
+ */
224
+
225
+ interface WearableSyncOptions {
226
+ /** Sync exactly this day (YYYY-MM-DD). Overrides `days`. */
227
+ date?: string;
228
+ /** Lookback window in days ending today (default 2, max 90). */
229
+ days?: number;
230
+ /** Re-run memory extraction even for unchanged days. */
231
+ forceMemories?: boolean;
232
+ signal?: AbortSignal;
233
+ }
234
+ interface WearableSyncDeps {
235
+ /** Memory dir for state files (speakers, corrections, sync ledger). */
236
+ memoryDir: string;
237
+ /** Read the stored content hash for a day file, if present. */
238
+ readDayContentHash(sourceId: string, date: string): Promise<string | null>;
239
+ /** Persist a serialized day-transcript file (atomic). */
240
+ writeDayTranscript(sourceId: string, date: string, serialized: string): Promise<void>;
241
+ /**
242
+ * Optional hook fired once after the sync wrote ANYTHING the search
243
+ * index should see: day transcripts, created memories, in-place
244
+ * promotions, or native imports. (A cross-source invalidation can
245
+ * promote memories on a run with zero transcript writes — the index
246
+ * must still refresh.)
247
+ */
248
+ afterWrites?(): Promise<void>;
249
+ /**
250
+ * Memory-generation dependencies, or null when no extraction engine
251
+ * is available in this context (transcripts still sync; memory
252
+ * creation is skipped with a warning when the mode wanted it).
253
+ */
254
+ memoryGen: WearableMemoryGenDeps | null;
255
+ /**
256
+ * Same-day transcript bodies from OTHER sources, for cross-device
257
+ * corroboration in smart mode. Absent disables the boost.
258
+ */
259
+ readOtherSourceDayBodies?(date: string, excludeSource: string): Promise<Map<string, string>>;
260
+ /**
261
+ * Existing memories usable as support evidence: status "active" or
262
+ * "pending_review" (explicit allow-list — a borderline fact observed
263
+ * again on a later day is repetition signal, and the +0.10 boost is
264
+ * how it earns promotion). Rejected/quarantined/superseded/archived/
265
+ * forgotten rows are never support evidence.
266
+ */
267
+ listSupportMemories?(): Promise<Array<{
268
+ id: string;
269
+ content: string;
270
+ }>>;
271
+ /** Clock injection for tests. */
272
+ now?: () => Date;
273
+ }
274
+ /** Format a Date as YYYY-MM-DD in the given IANA timezone. */
275
+ declare function dateInTimezone(date: Date, timezone: string): string;
276
+ /** Resolve the list of days to sync, oldest first. */
277
+ declare function resolveSyncDates(options: WearableSyncOptions, timezone: string, now: Date): string[];
278
+ /** Sync one source. */
279
+ declare function syncWearableSource(connector: WearableSourceConnector, settings: WearableSourceSettings, config: WearablesConfig, options: WearableSyncOptions, deps: WearableSyncDeps): Promise<WearableSyncSummary>;
280
+ declare function defaultTimezone(): string;
281
+
282
+ /**
283
+ * WearablesService — the single implementation behind every wearables
284
+ * access surface (CLI, MCP tools, HTTP routes). Surfaces stay thin and
285
+ * delegate here; formatting differences live with the surface, behavior
286
+ * lives here (same renderer-sharing rule as recall explain/xray).
287
+ */
288
+
289
+ /** Storage capabilities the service needs (satisfied by StorageManager). */
290
+ interface WearableStorageIo {
291
+ readonly dir: string;
292
+ writeWearableDayTranscript(sourceId: string, date: string, serialized: string): Promise<void>;
293
+ readWearableDayTranscript(sourceId: string, date: string): Promise<string | null>;
294
+ listWearableTranscriptDays(sourceId?: string): Promise<Array<{
295
+ source: string;
296
+ date: string;
297
+ }>>;
298
+ fusionArtifactStore(): FusionArtifactStore;
299
+ readAllMemories(): Promise<Array<{
300
+ path: string;
301
+ frontmatter: {
302
+ id: string;
303
+ source: string;
304
+ created: string;
305
+ tags: string[];
306
+ status?: string;
307
+ /** Archival timestamp — rows with this set are not support. */
308
+ archivedAt?: string;
309
+ structuredAttributes?: Record<string, string>;
310
+ };
311
+ content: string;
312
+ }>>;
313
+ writeSealedMemory: WearableMemoryGenDeps["writer"]["writeSealedMemory"];
314
+ hasFactContentHash(content: string): Promise<boolean>;
315
+ findWearableMemoryByContent(content: string): Promise<{
316
+ id: string;
317
+ status: string | undefined;
318
+ } | null>;
319
+ promoteWearableMemory(id: string, attributeUpdates: Record<string, string>, confidence?: number): Promise<boolean>;
320
+ demoteWearableMemory(id: string, attributeUpdates: Record<string, string>): Promise<boolean>;
321
+ }
322
+ interface WearableSearchBackend {
323
+ /** Full-text search over the memory dir; null when unavailable. */
324
+ search(query: string, maxResults: number): Promise<Array<{
325
+ path: string;
326
+ score: number;
327
+ preview: string;
328
+ }> | null>;
329
+ }
330
+ interface WearablesServiceDeps {
331
+ config: WearablesConfig;
332
+ getStorage(): Promise<WearableStorageIo>;
333
+ /** Extraction hook; null when no engine is available. */
334
+ extract: WearableMemoryGenDeps["extract"] | null;
335
+ /**
336
+ * LLM-as-judge hook for smart memoryMode (the orchestrator wires the
337
+ * existing extraction judge here). Absent degrades smart mode to
338
+ * confidence x sourceTrust + corroboration scoring.
339
+ */
340
+ judgeFacts?: WearableMemoryGenDeps["judgeFacts"];
341
+ /** Search backend (QMD); null disables indexed search. */
342
+ searchBackend: WearableSearchBackend | null;
343
+ /** Fired after transcript writes so the search index refreshes. */
344
+ reindexSearch?: () => Promise<void>;
345
+ /**
346
+ * Meeting tail-step (issue #1900): fired once after a sync with the union of
347
+ * days it touched, so a dependent subsystem (meeting building) can rebuild the
348
+ * affected day(s). Wired for EVERY sync path — auto-sync AND manual
349
+ * HTTP/MCP/CLI backfill — because they all share this one service. Optional;
350
+ * omitted by hosts that do not build meetings. The hook self-gates and never
351
+ * fails the sync.
352
+ */
353
+ onDaysSynced?: (days: readonly string[]) => void | Promise<void>;
354
+ }
355
+ interface WearableTranscriptSearchResult {
356
+ source: string;
357
+ date: string;
358
+ score: number;
359
+ snippet: string;
360
+ /** "indexed" (QMD) or "scan" (substring fallback). */
361
+ backend: "indexed" | "scan";
362
+ }
363
+ interface WearableMemorySearchResult {
364
+ id: string;
365
+ source: string;
366
+ date?: string;
367
+ conversationId?: string;
368
+ status?: string;
369
+ content: string;
370
+ created: string;
371
+ }
372
+ interface WearableDayTranscriptView {
373
+ source: string;
374
+ date: string;
375
+ meta: WearableDayTranscript["meta"] | null;
376
+ body: string;
377
+ /** Other sources that also recorded during this day (overlap hint). */
378
+ overlapsWith: string[];
379
+ }
380
+ declare class WearablesService {
381
+ private readonly deps;
382
+ constructor(deps: WearablesServiceDeps);
383
+ get enabled(): boolean;
384
+ private assertEnabled;
385
+ private timezone;
386
+ private enabledSources;
387
+ /** Status for every configured source (and connector availability). */
388
+ status(): Promise<{
389
+ enabled: boolean;
390
+ timezone: string;
391
+ sources: WearableSourceStatus[];
392
+ connectorsInstalled: string[];
393
+ }>;
394
+ /** Run a sync for one source or all enabled sources. */
395
+ sync(options: WearableSyncOptions & {
396
+ source?: string;
397
+ }): Promise<WearableSyncSummary[]>;
398
+ /** Verify connectivity/credentials for one source. */
399
+ checkAuth(sourceId: string): Promise<{
400
+ ok: boolean;
401
+ detail?: string;
402
+ }>;
403
+ /**
404
+ * Full transcript(s) for a day. Without `source`, returns every
405
+ * source that recorded that day, annotated with overlap hints.
406
+ */
407
+ dayTranscript(date: string, sourceId?: string): Promise<WearableDayTranscriptView[]>;
408
+ /** List days that have stored transcripts. */
409
+ listDays(sourceId?: string): Promise<Array<{
410
+ source: string;
411
+ date: string;
412
+ }>>;
413
+ /**
414
+ * Fuse all enabled sources' stored transcripts for one day into a
415
+ * derived `FusedWearableConversation[]` artifact. Deterministic and
416
+ * idempotent: unchanged inputs and fusion config produce a stable
417
+ * content hash and the derived file is left untouched on re-run. Requires
418
+ * `wearables.fusion.enabled`; otherwise it throws. Raw per-source
419
+ * transcripts are never modified.
420
+ */
421
+ fuseDay(date: string): Promise<{
422
+ date: string;
423
+ sources: string[];
424
+ conversationCount: number;
425
+ contentHash: string;
426
+ written: boolean;
427
+ skipped?: {
428
+ reason: string;
429
+ };
430
+ }>;
431
+ /**
432
+ * List fused conversations for a date (the fusion listing surface).
433
+ * Returns the persisted derived artifact's conversations, or an empty
434
+ * array when no fused artifact has been written for that day. When a
435
+ * file EXISTS but its body is corrupt (parseOk:false), throws
436
+ * WearablesInputError so the caller can distinguish a broken artifact
437
+ * from a day that was never fused — never silently returns an empty
438
+ * list that looks identical to "no artifact" (issue #1849).
439
+ */
440
+ fusedConversations(date: string): Promise<FusedWearableConversation[]>;
441
+ /** List dates with stored fused artifacts, newest first. */
442
+ listFusedDays(): Promise<string[]>;
443
+ /**
444
+ * Search stored transcripts. Uses the indexed backend when available
445
+ * and falls back to a bounded substring scan otherwise — the two
446
+ * paths are distinguishable in the result (`backend`) so callers can
447
+ * tell "no hits" from "weaker search ran".
448
+ */
449
+ searchTranscripts(query: string, options?: {
450
+ source?: string;
451
+ from?: string;
452
+ to?: string;
453
+ limit?: number;
454
+ }): Promise<WearableTranscriptSearchResult[]>;
455
+ /**
456
+ * Memories created from wearable transcripts, filterable by source
457
+ * and/or day. Includes pending_review candidates — the whole point of
458
+ * review mode is seeing what's queued.
459
+ */
460
+ transcriptMemories(options?: {
461
+ source?: string;
462
+ date?: string;
463
+ limit?: number;
464
+ }): Promise<WearableMemorySearchResult[]>;
465
+ listSpeakers(): Promise<SpeakerRegistry>;
466
+ setSpeaker(sourceId: string, speakerKey: string, name: string, opts?: {
467
+ isSelf?: boolean;
468
+ }): Promise<SpeakerRegistry>;
469
+ setSelfName(name: string): Promise<SpeakerRegistry>;
470
+ removeSpeaker(sourceId: string, speakerKey: string): Promise<SpeakerRegistry>;
471
+ listCorrections(): Promise<{
472
+ fromConfig: WearableCorrectionRule[];
473
+ fromState: WearableCorrectionRule[];
474
+ stateFilePath: string;
475
+ }>;
476
+ addCorrection(rule: WearableCorrectionRule): Promise<void>;
477
+ removeCorrection(index: number): Promise<WearableCorrectionRule>;
478
+ }
479
+ /** Map an indexed-search hit path back to (source, date), or null. */
480
+ declare function locateTranscriptPath(hitPath: string): {
481
+ source: string;
482
+ date: string;
483
+ } | null;
484
+
485
+ /**
486
+ * Meeting fusion (issue #1900, Phase 4 slice 2).
487
+ *
488
+ * For a detected meeting window `[startUtc, endUtc)` (half-open, AGENTS.md §23),
489
+ * fuse the concurrent signals into a screen-aware `FusedMeeting`:
490
+ *
491
+ * 1. Transcript — clip every wearable source's segments to the window and run
492
+ * them through the SHARED wearables reconciliation (`fuseCluster`). Higher-
493
+ * `sourceTrust` text wins overlapping regions and the out-voted sources are
494
+ * recorded per segment; this module never re-implements alignment/dedup —
495
+ * the repo rule is "extend the shared fusion module, never fork it".
496
+ * 2. Screen context — other-app foreground dwell within the window, kept only
497
+ * when it lasts `contextDwellSeconds`, plus deduped on-screen text excerpts
498
+ * capped at `maxContextChars`.
499
+ * 3. Attendees — distinct non-wearer speaker labels from the fused transcript
500
+ * (already resolved through the wearables speaker registry upstream).
501
+ *
502
+ * Pure and deterministic: same inputs ⇒ same `FusedMeeting`.
503
+ */
504
+
505
+ /** Per-run tuning that mirrors the wearables fusion knobs. */
506
+ interface MeetingFusionOptions {
507
+ /** Per-source trust priors handed to reconciliation. */
508
+ sourceTrust?: Record<string, number>;
509
+ /** Max drift (ms) for two segments to align across sources. */
510
+ windowToleranceMs?: number;
511
+ }
512
+ /** Fuse one detected meeting's transcript + screen context into a FusedMeeting. */
513
+ declare function fuseMeeting(input: MeetingBuildInput, config: MeetingsConfig, options?: MeetingFusionOptions): FusedMeeting;
514
+
515
+ /**
516
+ * Meeting memory-generation SEAM (issue #1900 — engine/memory decouple).
517
+ *
518
+ * Engine-layer boundary between the deterministic meeting builder and the
519
+ * memory-generation layer. `MeetingsBuilder` (detect/fuse/store/build) depends
520
+ * ONLY on `MeetingMemoryGenerator` declared here — never on `memory-gen.ts` — so
521
+ * the deterministic engine carries zero dependency on episode/fact generation
522
+ * and ships in its own scope-budgeted PR. The concrete generator lives in
523
+ * `memory-gen.ts` behind `createMeetingMemoryGenerator`, which implements this
524
+ * interface by driving the existing episode/fact/retract logic.
525
+ */
526
+
527
+ /**
528
+ * Narrow writer interface satisfied by `StorageManager` — the same sealed
529
+ * write entry point the wearables generator uses, so meeting memories inherit
530
+ * encrypted-at-rest + atomic write + dedup without this module knowing the key.
531
+ */
532
+ interface MeetingMemoryWriter {
533
+ writeSealedMemory(envelope: SealedMemoryEnvelope, extras: {
534
+ importance?: ImportanceScore;
535
+ contentHashSource?: string;
536
+ status?: MemoryStatus;
537
+ memoryKind?: "episode" | "note" | "box" | "dream" | "procedural";
538
+ }): Promise<MemoryWriteResult>;
539
+ /**
540
+ * True when an active/pending memory whose frontmatter `source` equals
541
+ * `source` already carries this exact content. Meeting memories are episodes
542
+ * (`moment`) and decisions/commitments (`decision`/`commitment`) — categories
543
+ * the storage fact-hash index does NOT cover — so idempotency is a
544
+ * source-scoped content scan, mirroring the wearables writer, NOT
545
+ * `hasFactContentHash` (fact-only; always false here → duplicates on rebuild).
546
+ */
547
+ hasMemoryFromSource(source: string, content: string): Promise<boolean>;
548
+ /**
549
+ * Retire (invalidate) every memory whose frontmatter `source` equals `source`.
550
+ * Returns the count retired. Used to reconcile away a removed meeting's
551
+ * episode/summary memories so recall never surfaces a meeting `show` can't load.
552
+ */
553
+ retireMemoriesFromSource(source: string): Promise<number>;
554
+ }
555
+ /** Result of generating episode memories for a day's meetings. */
556
+ interface MeetingEpisodeGenResult {
557
+ /** Episodes newly written. */
558
+ written: number;
559
+ /** Episodes skipped because an identical one already existed. */
560
+ skipped: number;
561
+ }
562
+ /** Day-level aggregate of the trust-gated summary/fact layer across records. */
563
+ interface MeetingsDayFactGenResult {
564
+ /** True when the LLM extractor ran for at least one record. */
565
+ llmInvoked: boolean;
566
+ /** Facts written active. */
567
+ active: number;
568
+ /** Facts queued for review (pending_review). */
569
+ review: number;
570
+ /** Candidates/summaries dropped below the trust bar or judge-rejected. */
571
+ dropped: number;
572
+ /** Candidates/summaries skipped because an identical memory already existed. */
573
+ skipped: number;
574
+ /** Count of records whose summary memory was written. */
575
+ summariesWritten: number;
576
+ /** Facts the #1579 tombstone chokepoint downgraded to pending_review (no
577
+ * active copy). Surfaced distinctly from `active`/`review` so callers never
578
+ * count a blocked write as a successfully written active/review fact (#1645).
579
+ * Optional so the seam's canned outcomes stay valid when unset. */
580
+ tombstoneBlocked?: number;
581
+ }
582
+ /**
583
+ * Outcome the memory generator returns to the builder after a day's records are
584
+ * built and persisted. Counts feed the day-build summary; `reindexNeeded` folds
585
+ * the "reindex when new episodes/facts were written even if no record changed"
586
+ * rule so the builder never reaches into the memory layer to decide it.
587
+ */
588
+ interface MeetingMemoryOutcome {
589
+ /** Episode-memory counts, present only when records were built. */
590
+ episodes?: MeetingEpisodeGenResult;
591
+ /** Trust-gated summary/fact counts, present only when summary deps ran. */
592
+ facts?: MeetingsDayFactGenResult;
593
+ /** True when newly written memories require an isolated reindex. */
594
+ reindexNeeded: boolean;
595
+ /** Non-fatal warnings raised while generating memories. */
596
+ warnings: readonly string[];
597
+ }
598
+ /**
599
+ * Seam the deterministic builder depends on. Invoked once per day build after
600
+ * the record-store writes with, for the day:
601
+ * - `built` — every record composed this build (new, updated, unchanged).
602
+ * - `removedIds` — stale ids the rebuild reconciled away (retract memories).
603
+ * - `unchangedIds`— built ids whose stored `contentHash` was IDENTICAL this
604
+ * build (nothing rewritten). The generator SKIPS all
605
+ * episode/summary/fact work for these: an idempotent rebuild
606
+ * must not re-invoke the LLM or duplicate memories.
607
+ * - `updatedIds` — built ids that existed before AND were rewritten this build
608
+ * (same id, changed `contentHash`). The generator REFRESHES
609
+ * them: retract the stale episode/summary memories for that
610
+ * source, then regenerate from the new record.
611
+ * Ids not in `unchangedIds` or `updatedIds` are newly built — generated fresh
612
+ * with no retract. The three id sets are disjoint subsets of `built`. The
613
+ * implementation reports the counts + reindex signal the builder folds into its
614
+ * day summary.
615
+ */
616
+ interface MeetingMemoryGenerator {
617
+ onRecordsBuilt(input: {
618
+ built: readonly MeetingRecord[];
619
+ removedIds: readonly string[];
620
+ unchangedIds: readonly string[];
621
+ updatedIds: readonly string[];
622
+ }): Promise<MeetingMemoryOutcome>;
623
+ }
624
+
625
+ /**
626
+ * Meeting building orchestration (issue #1900, Phase 4 slice 2).
627
+ *
628
+ * Ties the pure pieces together: detect the day's meetings, fuse each window's
629
+ * transcript + screen context, and compose idempotent records. Day data is
630
+ * supplied through an injected source so fixtures (and the later activity/
631
+ * wearables wiring) share one code path — no hidden IO here.
632
+ *
633
+ * Gated on `meetings.enabled`: a disabled subsystem builds nothing on every
634
+ * surface (degradation-matrix row). Degrades within an enabled build too — a
635
+ * window with no audio yields an empty transcript, and no activity yields a
636
+ * record with no screen-context section — because `fuseMeeting` handles both.
637
+ */
638
+
639
+ /** All of a day's already-loaded signals a build needs. */
640
+ interface MeetingDayData {
641
+ /** App spans + audio windows for the day (fed to the detector). */
642
+ detection: MeetingsDetectionInput;
643
+ /** Fusion conversation inputs across all wearable sources for the day. */
644
+ conversations: FusionConversationInput[];
645
+ /** Screen-activity snapshots for the day. */
646
+ activity?: MeetingActivitySnapshot[];
647
+ }
648
+ /** Supplies a day's signals. Backed by fixtures in tests; by the activity +
649
+ * wearables stores in the wiring slice. */
650
+ interface MeetingsDaySource {
651
+ loadDayData(date: string): Promise<MeetingDayData> | MeetingDayData;
652
+ }
653
+ declare function buildMeetingRecordsForDay(data: MeetingDayData, config: MeetingsConfig, options?: MeetingFusionOptions,
654
+ /** Map a detected meeting to the id its record should carry. Defaults to the
655
+ * detector's start-anchored id; the builder overrides this to preserve an
656
+ * existing overlapping record's id across shifted-start resyncs. */
657
+ resolveMeetingId?: (meeting: DetectedMeeting) => string): MeetingRecord[];
658
+ /** Per-meeting outcome of a day build. */
659
+ interface MeetingBuildOutcome {
660
+ id: string;
661
+ startUtc: string;
662
+ endUtc: string;
663
+ detectionSource: string;
664
+ sources: string[];
665
+ attendees: string[];
666
+ snapshotCount: number;
667
+ /** False when the record's contentHash was unchanged (nothing rewritten). */
668
+ written: boolean;
669
+ }
670
+ /** Result of building one day's meetings. */
671
+ interface MeetingsDayBuildSummary {
672
+ date: string;
673
+ /** False when `meetings.enabled` is off (zero behavior). */
674
+ enabled: boolean;
675
+ meetings: MeetingBuildOutcome[];
676
+ /** Records written (new or changed). */
677
+ built: number;
678
+ /** Records skipped (unchanged contentHash). */
679
+ skipped: number;
680
+ /** Ids of stale same-day records deleted because they no longer detect. */
681
+ removed: string[];
682
+ /**
683
+ * Set when the optional reindex hook rejected AFTER records were already
684
+ * persisted. The store mutation still succeeded — the build is reported as
685
+ * successful with this generic warning, and the next scheduled index catches
686
+ * up. Deliberately does NOT embed the raw error text: this string is printed
687
+ * to the CLI's stdout, and internal error detail is logged separately.
688
+ */
689
+ reindexWarning?: string;
690
+ /**
691
+ * Set when the injected `memoryGenerator` rejected AFTER records were already
692
+ * persisted, OR when a successful generation returned non-fatal warnings. Like
693
+ * `reindexWarning`, the record writes still succeeded, so the build is reported
694
+ * successful with this warning; on rejection the next build (or scheduled
695
+ * maintenance) regenerates the missing memories. Carries no raw exception text —
696
+ * only the generic rejection message or the generator's own warning strings.
697
+ */
698
+ memoryWarning?: string;
699
+ /**
700
+ * Deterministic episode-memory counts, present only when a `memoryGenerator`
701
+ * was injected. One recall-anchor episode is written per built record (idempotent).
702
+ */
703
+ episodes?: MeetingEpisodeGenResult;
704
+ /**
705
+ * Trust-gated summary/fact counts (decisions, commitments, questions, and the
706
+ * synthesized summary), present only when a `memoryGenerator` with summary deps
707
+ * ran and `summaryMode !== "off"`. Aggregated across the day's records.
708
+ */
709
+ facts?: MeetingsDayFactGenResult;
710
+ }
711
+ /** Optional side effects the builder fires after a day build. */
712
+ interface MeetingsBuilderHooks {
713
+ /**
714
+ * Invoked once per build when records changed (`built > 0 || removed > 0`).
715
+ * Meeting records live inside the QMD collection root for full-text search,
716
+ * so a host that wants them discoverable immediately (rather than at the next
717
+ * scheduled reindex) supplies a reindex here. No-op when omitted — records are
718
+ * still picked up by the next index update.
719
+ */
720
+ reindex?(summary: MeetingsDayBuildSummary): void | Promise<void>;
721
+ }
722
+ /** Orchestrates a store-backed build of a day's meetings. */
723
+ declare class MeetingsBuilder {
724
+ private readonly opts;
725
+ constructor(opts: {
726
+ source: MeetingsDaySource;
727
+ store: MeetingRecordStore;
728
+ config: MeetingsConfig;
729
+ fusionOptions?: MeetingFusionOptions;
730
+ hooks?: MeetingsBuilderHooks;
731
+ /**
732
+ * When present, the memory-generation layer runs after the record-store
733
+ * writes: deterministic recall-anchor episodes per built record, the
734
+ * trust-gated summary/facts layer, and retract-on-removal — all behind the
735
+ * `MeetingMemoryGenerator` seam (issue #1900). Omitted → pure
736
+ * detect+fuse+store with no memory writes. The engine depends only on this
737
+ * interface, never on the memory-gen module.
738
+ */
739
+ memoryGenerator?: MeetingMemoryGenerator;
740
+ });
741
+ buildDay(date: string): Promise<MeetingsDayBuildSummary>;
742
+ /**
743
+ * Pick the existing same-day record whose window best overlaps `meeting` and
744
+ * reuse its id — but ONLY when adoption is safe: the windows substantially
745
+ * coincide (overlap covers a majority of the shorter window), OR a corroborating
746
+ * identity signal (same app, same title, or a shared transcript source) is
747
+ * BACKED by a non-marginal overlap (>= a quarter of the shorter window). Coarse
748
+ * identity signals alone never license adoption across a thin sliver of overlap,
749
+ * or two genuinely different back-to-back same-app meetings would overwrite each
750
+ * other's record and `show <old-id>` would point at the wrong meeting. Candidate
751
+ * selection is deterministic (max overlap, then earliest start, then id).
752
+ * Returns the detector's fresh id when nothing qualifies.
753
+ */
754
+ private adoptExistingId;
755
+ }
756
+
757
+ /**
758
+ * Meetings service (issue #1900) — the orchestrator-owned facade every meeting
759
+ * surface (CLI, MCP tools, HTTP routes) shares, so behavior + validation never
760
+ * fork across hosts (the same rule the wearables service follows). It owns the
761
+ * record store, the store-backed builder, and the debounced post-sync build
762
+ * scheduler.
763
+ *
764
+ * `meetings.enabled` is honored at every entrypoint: `meetingsList`/`meetingsGet`
765
+ * short-circuit to an empty/absent result when disabled, `meetingsBuild`
766
+ * delegates to the builder (which already reports `enabled: false` and writes
767
+ * nothing), and the tail-step `requestBuild` is a no-op. Caller-correctable
768
+ * faults (bad dates/ids) throw `MeetingsInputError`, which the transports map to
769
+ * 400-class responses; the CLI reuses the store + builder directly through the
770
+ * shared `runMeetingsCliCommand` runner.
771
+ */
772
+
773
+ /** One day's stored meeting summaries in a list result. */
774
+ interface MeetingsListDay {
775
+ date: string;
776
+ meetings: MeetingRecordSummary[];
777
+ }
778
+ /** Structured result of a meetings list query (all days, or one day). */
779
+ interface MeetingsListResult {
780
+ /** False when `meetings.enabled` is off (zero behavior). */
781
+ enabled: boolean;
782
+ days: MeetingsListDay[];
783
+ }
784
+ /** Structured result of fetching one stored meeting record. */
785
+ interface MeetingsGetResult {
786
+ /** False when `meetings.enabled` is off (zero behavior). */
787
+ enabled: boolean;
788
+ found: boolean;
789
+ id: string;
790
+ /** Raw persisted markdown, or null when disabled/absent. */
791
+ record: string | null;
792
+ }
793
+ interface MeetingsServiceDeps {
794
+ config: MeetingsConfig;
795
+ store: MeetingRecordStore;
796
+ builder: MeetingsBuilder;
797
+ /** Trailing-edge coalescing window for post-sync rebuilds (ms). */
798
+ buildDebounceMs: number;
799
+ /** Observe a tail-step build failure (logging); never called on success. */
800
+ onBuildError?(date: string, err: unknown): void;
801
+ }
802
+ declare class MeetingsService {
803
+ readonly store: MeetingRecordStore;
804
+ readonly builder: MeetingsBuilder;
805
+ readonly config: MeetingsConfig;
806
+ private readonly scheduler;
807
+ constructor(deps: MeetingsServiceDeps);
808
+ /** List stored meetings for one day, or across all days when no date given. */
809
+ meetingsList(date?: string): Promise<MeetingsListResult>;
810
+ /** Fetch one stored meeting record's raw markdown by id. */
811
+ meetingsGet(id: string): Promise<MeetingsGetResult>;
812
+ /** Detect + fuse + store the day's meetings. Gated inside the builder. */
813
+ meetingsBuild(date: string): Promise<MeetingsDayBuildSummary>;
814
+ /**
815
+ * Tail-step after a sync touched a day: schedule a debounced (re)build. A
816
+ * no-op when the subsystem is disabled, so a sync of other signals never
817
+ * spins up meeting building behind the master gate.
818
+ */
819
+ requestBuild(date: string): void;
820
+ /**
821
+ * Activity tail-step (issue #1900): schedule a debounced (re)build for every
822
+ * local day the sync touched. The tick's own local day (from `ranAtIso`, in
823
+ * the activity timezone) is always eligible; `touchedDates` adds any OTHER
824
+ * days a rolling/backfill sync changed, so a change to yesterday's activity
825
+ * rebuilds yesterday's meetings rather than only today's. No-op when disabled,
826
+ * so a sync of other signals never spins up meeting building behind the gate.
827
+ */
828
+ requestBuildForActivitySync(ranAtIso: string, timezone: string, touchedDates?: readonly string[]): void;
829
+ /** Force any pending debounced builds to run now (teardown/tests). */
830
+ flushBuilds(): Promise<void>;
831
+ /** Cancel armed build timers (orchestrator teardown). */
832
+ dispose(): void;
833
+ }
834
+
835
+ export { wearableSourceLabel as $, type WearableSyncOptions as A, type WearableTranscriptSearchResult as B, type WearablesServiceDeps as C, DEFAULT_SELF_NAME as D, buildExtractionTurns as E, buildMeetingRecordsForDay as F, dateInTimezone as G, defaultTimezone as H, distinctSpeakerLabels as I, emptySpeakerRegistry as J, fuseMeeting as K, generateWearableMemories as L, MeetingsService as M, importNativeMemories as N, loadSpeakerRegistry as O, locateTranscriptPath as P, memoryStatusForMode as Q, type ResolvedSpeaker as R, type SpeakerRegistry as S, resolveSpeaker as T, resolveSyncDates as U, saveSpeakerRegistry as V, WearablesService as W, speakerRegistryKey as X, speakersFilePath as Y, syncWearableSource as Z, wearableDayTag as _, type MeetingsDayBuildSummary as a, writeDailyDigestMemory as a0, type MeetingsGetResult as b, type MeetingsListResult as c, type MeetingMemoryWriter as d, type MeetingMemoryGenerator as e, type MeetingEpisodeGenResult as f, MeetingsBuilder as g, type MeetingsDaySource as h, type MeetingDayData as i, type MeetingBuildOutcome as j, type MeetingFusionOptions as k, type MeetingMemoryOutcome as l, type MeetingsBuilderHooks as m, type MeetingsDayFactGenResult as n, type MeetingsListDay as o, type MeetingsServiceDeps as p, type SpeakerOverride as q, WEARABLE_SOURCE_PREFIX as r, type WearableDayTranscriptView as s, type WearableMemoryGenDeps as t, type WearableMemoryGenResult as u, type WearableMemorySearchResult as v, type WearableMemoryWriter as w, type WearableSearchBackend as x, type WearableStorageIo as y, type WearableSyncDeps as z };