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