@remnic/core 9.69.40 → 9.69.42
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 +14 -13
- package/dist/access-admin-ops-surface.js +79 -78
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -13
- package/dist/access-authorization-probe.js +80 -79
- package/dist/access-boundary.d.ts +14 -13
- package/dist/access-boundary.js +79 -78
- package/dist/access-cli.js +170 -168
- 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 +14 -13
- package/dist/access-extraction-force-flush.js +79 -78
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-briefing.d.ts +14 -13
- package/dist/access-http-briefing.js +80 -79
- package/dist/access-http-lcm-compaction.d.ts +14 -13
- package/dist/access-http-lifecycle-flush.d.ts +14 -13
- package/dist/access-http-offline-stream.d.ts +14 -13
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +81 -80
- package/dist/access-http.d.ts +15 -14
- package/dist/access-http.js +100 -97
- package/dist/access-identity-continuity-surface.d.ts +11 -11
- package/dist/access-identity-continuity-surface.js +79 -78
- package/dist/access-lcm-surface.d.ts +14 -13
- package/dist/access-lcm-surface.js +79 -78
- package/dist/access-mcp-shared-context-tools.d.ts +157 -0
- package/dist/access-mcp-shared-context-tools.js +8 -0
- package/dist/access-mcp.d.ts +14 -13
- package/dist/access-mcp.js +91 -88
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-CKBumJ8W.d.ts → access-namespace-preflight-ShnAJ9uL.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +79 -78
- package/dist/access-observe-transcript.d.ts +11 -11
- package/dist/access-observe-write-category.d.ts +17 -1
- package/dist/access-observe-write-category.js +21 -4
- package/dist/access-observe-write-surface.d.ts +14 -13
- package/dist/access-observe-write-surface.js +79 -78
- package/dist/access-offline-manifest.d.ts +11 -11
- package/dist/access-offline-manifest.js +14 -14
- package/dist/access-operations-batch.js +84 -82
- package/dist/access-operations.d.ts +14 -13
- package/dist/access-operations.js +89 -87
- package/dist/access-recall-concurrency.d.ts +14 -13
- package/dist/access-recall-concurrency.js +79 -78
- package/dist/access-recall-response.d.ts +14 -13
- package/dist/access-recall-response.js +79 -78
- package/dist/access-recall-surface.d.ts +14 -13
- package/dist/access-recall-surface.js +79 -78
- package/dist/access-schema.d.ts +117 -114
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-DJ3qogNt.d.ts → access-service-DjG_e2cM.d.ts} +81 -75
- package/dist/access-service-helpers.d.ts +14 -13
- package/dist/access-service.d.ts +14 -13
- package/dist/access-service.js +79 -78
- package/dist/access-surface-catalog.d.ts +14 -13
- package/dist/access-surface-catalog.js +81 -80
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -4
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +10 -10
- package/dist/activity/digest.d.ts +1 -1
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-D6BAPIJV.js → auto-sync-QZD4RD6H.js} +14 -10
- package/dist/{auto-sync-D6BAPIJV.js.map → auto-sync-QZD4RD6H.js.map} +1 -1
- package/dist/background-generation.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +11 -11
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +22 -22
- 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 +9 -9
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +2 -2
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
- package/dist/{catalog-BHXkBVhg.d.ts → catalog-BhuXaQHx.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 +25 -25
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
- package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
- package/dist/{chunk-JAJIMTFB.js → chunk-2PDMIPMP.js} +9 -9
- package/dist/{chunk-5LYSEZOF.js → chunk-2UINSKQC.js} +12 -11
- package/dist/chunk-2UINSKQC.js.map +1 -0
- package/dist/{chunk-6L2II3KS.js → chunk-3D75XIYO.js} +2 -2
- package/dist/{chunk-XCPNH2MG.js → chunk-3KJTSCSX.js} +5 -5
- package/dist/{chunk-YTZN2UZO.js → chunk-3RLWUW7G.js} +2 -2
- package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-NVVZPBKI.js → chunk-46FVFU7S.js} +2 -2
- package/dist/{chunk-JUDT33RX.js → chunk-4AX5OYKC.js} +2 -2
- package/dist/{chunk-GSSDHAYH.js → chunk-4IGOLIWM.js} +2 -2
- package/dist/{chunk-23HFXQ5J.js → chunk-6EGIQEKC.js} +4 -4
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-GO5LOHCD.js → chunk-7L54ARML.js} +2 -2
- package/dist/{chunk-TEMKBSV6.js → chunk-7PSRCGWT.js} +3 -3
- package/dist/{chunk-ICNJ6J46.js → chunk-AAAFZW3U.js} +2 -2
- package/dist/{chunk-K4JKAXMO.js → chunk-AAX22E4K.js} +3 -3
- package/dist/{chunk-UZ6JYPJ6.js → chunk-ADARR5KF.js} +232 -171
- package/dist/chunk-ADARR5KF.js.map +1 -0
- package/dist/{chunk-KY236SP5.js → chunk-AHHFBJX7.js} +3 -3
- package/dist/{chunk-TZ44E732.js → chunk-AIVRD66I.js} +2 -2
- package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
- package/dist/chunk-AJBWVDRV.js.map +1 -0
- package/dist/{chunk-YRIFXXMI.js → chunk-AOGICQMH.js} +6 -6
- package/dist/{chunk-KOTG3RXE.js → chunk-AUSRUOMQ.js} +2 -2
- package/dist/{chunk-C5R73BON.js → chunk-BIANISES.js} +2 -2
- package/dist/{chunk-IMBQFHRV.js → chunk-BPXJINHW.js} +8 -8
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-2J3V5QEO.js → chunk-C3QXITIP.js} +4 -4
- package/dist/{chunk-2SNCQHJZ.js → chunk-CQ4BTPX6.js} +6 -6
- package/dist/{chunk-3QEVOQF5.js → chunk-CTETTVDN.js} +2 -2
- package/dist/{chunk-DFVSJFHK.js → chunk-DBB5JPSL.js} +2 -2
- package/dist/{chunk-W23JARAQ.js → chunk-DLPMOSNH.js} +2 -2
- package/dist/{chunk-BGRTZOJB.js → chunk-DMTSKY4W.js} +8 -8
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-QS5Q5RBV.js → chunk-E4FRR4MA.js} +8 -8
- package/dist/{chunk-NETQXOPY.js → chunk-EH3HNCAM.js} +12 -7
- package/dist/{chunk-NETQXOPY.js.map → chunk-EH3HNCAM.js.map} +1 -1
- package/dist/{chunk-RJQAP333.js → chunk-ETE3SGAH.js} +2 -2
- package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
- package/dist/{chunk-RLU2Y5GV.js → chunk-F2FJTOV6.js} +4 -4
- package/dist/{chunk-V2ZA4YWE.js → chunk-F5H6YG5P.js} +2 -2
- package/dist/{chunk-K75A5XWU.js → chunk-F6PTJLEM.js} +4 -4
- package/dist/chunk-F6PTJLEM.js.map +1 -0
- package/dist/{chunk-4CMXI55L.js → chunk-FSUFKIFS.js} +2 -2
- package/dist/{chunk-ZAEPD4C2.js → chunk-G3NTZZWT.js} +2 -2
- package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-WZYHPAG5.js → chunk-GIM2AGFL.js} +3 -3
- package/dist/{chunk-VKWFNPBH.js → chunk-GR76OKET.js} +14 -5
- package/dist/{chunk-VKWFNPBH.js.map → chunk-GR76OKET.js.map} +1 -1
- package/dist/{chunk-J7FVMLBR.js → chunk-GWEZNCGA.js} +2 -2
- package/dist/{chunk-LFVZD5EC.js → chunk-GWNSKQDA.js} +3 -3
- package/dist/{chunk-MJC7UKH7.js → chunk-H2N6SLTR.js} +2 -2
- package/dist/{chunk-J4WGTN2N.js → chunk-HK44SV6K.js} +4 -4
- package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
- package/dist/{chunk-IS2IDFJP.js → chunk-HO2P3FAX.js} +22 -22
- package/dist/chunk-HO2P3FAX.js.map +1 -0
- package/dist/{chunk-VQYWKCDR.js → chunk-HPMCKAET.js} +3 -3
- package/dist/{chunk-ROEFLU37.js → chunk-HSJU6JFT.js} +16 -86
- package/dist/chunk-HSJU6JFT.js.map +1 -0
- package/dist/{chunk-MVG3KXON.js → chunk-I65KB36L.js} +25 -25
- package/dist/chunk-IFBSZGW3.js +42 -0
- package/dist/chunk-IFBSZGW3.js.map +1 -0
- package/dist/{chunk-SFHLQPBF.js → chunk-IUTYNDFS.js} +118 -112
- package/dist/chunk-IUTYNDFS.js.map +1 -0
- package/dist/{chunk-AEOOGXMQ.js → chunk-J2MGTGKC.js} +4 -4
- package/dist/chunk-JATHBCAV.js +94 -0
- package/dist/chunk-JATHBCAV.js.map +1 -0
- package/dist/{chunk-PKUJNICO.js → chunk-JC2OBYYD.js} +2 -2
- package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
- package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
- package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
- package/dist/{chunk-VQWBUPSJ.js → chunk-JMAP6L6Q.js} +2 -2
- package/dist/{chunk-7Z54NXVS.js → chunk-K27INAPR.js} +2 -2
- package/dist/{chunk-YTK5MVNF.js → chunk-KCKXOS4Y.js} +14 -13
- package/dist/chunk-KCKXOS4Y.js.map +1 -0
- package/dist/{chunk-7D6SER6A.js → chunk-KJQ4Y2PY.js} +14 -14
- package/dist/{chunk-DAZANIYU.js → chunk-L732NBPR.js} +87 -88
- package/dist/{chunk-DAZANIYU.js.map → chunk-L732NBPR.js.map} +1 -1
- package/dist/{chunk-QPVNK2VE.js → chunk-LCVYO3ON.js} +2 -2
- package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
- package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
- package/dist/{chunk-TO36VPZI.js → chunk-LWF6GOII.js} +2 -2
- package/dist/{chunk-62HFZNCJ.js → chunk-N7B6V7SG.js} +13 -12
- package/dist/{chunk-62HFZNCJ.js.map → chunk-N7B6V7SG.js.map} +1 -1
- package/dist/{chunk-ES5BUPYB.js → chunk-OCWFKD5Q.js} +2 -2
- package/dist/{chunk-IOPIGX7Y.js → chunk-OP722LOG.js} +2 -2
- package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
- package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
- package/dist/{chunk-JOP7W24J.js → chunk-PLJ2MQFT.js} +4 -4
- package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
- package/dist/{chunk-BXIJSPCL.js → chunk-Q62GA5U2.js} +2 -2
- package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
- package/dist/chunk-QKCXRS5A.js.map +1 -0
- package/dist/{chunk-I3H5LFOI.js → chunk-QNJQCLI6.js} +4 -4
- package/dist/{chunk-BYQX4IOG.js → chunk-R45VFSEV.js} +2 -2
- package/dist/{chunk-XVDZFTN5.js → chunk-RFIJH2OE.js} +5 -5
- package/dist/{chunk-K4A6UVPB.js → chunk-RJ7Z7YXK.js} +11 -11
- package/dist/{chunk-ZZCR2QYL.js → chunk-RSSLDMFX.js} +2 -2
- package/dist/{chunk-ZZCR2QYL.js.map → chunk-RSSLDMFX.js.map} +1 -1
- package/dist/{chunk-QE6YVNP5.js → chunk-RTXHUVOD.js} +53 -19
- package/dist/chunk-RTXHUVOD.js.map +1 -0
- package/dist/{chunk-HJUP3K6L.js → chunk-RXYO6NA6.js} +2 -2
- package/dist/{chunk-TBXAY2SS.js → chunk-SGHGCFVV.js} +5 -5
- package/dist/{chunk-THTF2W7M.js → chunk-TRTLWUDD.js} +19 -18
- package/dist/chunk-TRTLWUDD.js.map +1 -0
- package/dist/{chunk-2SKMZUOW.js → chunk-U26LB4WA.js} +7 -7
- package/dist/{chunk-6P4REYKL.js → chunk-UDAUULK2.js} +28 -2
- package/dist/{chunk-6P4REYKL.js.map → chunk-UDAUULK2.js.map} +1 -1
- package/dist/{chunk-KTOXQMW3.js → chunk-UHSOPTNB.js} +14 -4
- package/dist/chunk-UHSOPTNB.js.map +1 -0
- package/dist/{chunk-VHKXRYQN.js → chunk-VBK6SRNE.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-Z4GUX2M6.js → chunk-VSN2DMQK.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
- package/dist/{chunk-G2XZFGYN.js → chunk-WGZHSQDV.js} +4 -4
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-MDIEES23.js → chunk-WN2OXGGH.js} +1 -1
- package/dist/chunk-WN2OXGGH.js.map +1 -0
- package/dist/{chunk-LKFVVN7R.js → chunk-WNPRRBOE.js} +2 -2
- package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
- package/dist/chunk-WUUGE7QC.js.map +1 -0
- package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-RDLPFM7I.js → chunk-XJLTQTAO.js} +2 -2
- package/dist/{chunk-ZRMMXWYI.js → chunk-YR5QT4SR.js} +32 -9
- package/dist/chunk-YR5QT4SR.js.map +1 -0
- package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
- package/dist/chunk-Z22M4JCY.js.map +1 -0
- package/dist/{chunk-XM46Y66S.js → chunk-ZFU6QNRN.js} +7 -7
- package/dist/{chunk-SUEOG2S4.js → chunk-ZGXHTV5Y.js} +2 -2
- package/dist/{chunk-ZX3AYNNV.js → chunk-ZOGKZ2XT.js} +3 -2
- package/dist/chunk-ZOGKZ2XT.js.map +1 -0
- package/dist/{chunk-46Z3VGWF.js → chunk-ZYRAY5FL.js} +3 -3
- package/dist/{chunk-3XPN7AVY.js → chunk-ZYSOT6HD.js} +2 -2
- package/dist/{cli-BWri5-am.d.ts → cli-Cx9s_VRn.d.ts} +5 -5
- package/dist/cli.d.ts +16 -15
- package/dist/cli.js +129 -127
- package/dist/coding/export-okf-codegraph.d.ts +1 -1
- package/dist/coding/export-okf-codegraph.js +22 -22
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +24 -24
- 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 +10 -10
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +24 -24
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/codex-materialize.js +2 -2
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +25 -25
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +4 -4
- package/dist/contradiction/index.js +7 -7
- package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +26 -26
- package/dist/conversation-index/backend.d.ts +1 -1
- 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 -25
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/deep-recall-config.d.ts +12 -1
- package/dist/deep-recall-config.js +5 -3
- package/dist/deep-recall-http-glue.d.ts +17 -14
- package/dist/deep-recall-http-glue.js +7 -4
- package/dist/deep-recall-mcp-tools.d.ts +14 -13
- package/dist/deep-recall-policy-llm.d.ts +12 -2
- package/dist/deep-recall-policy-llm.js +3 -3
- package/dist/deep-recall-seeds.d.ts +4 -1
- package/dist/deep-recall-seeds.js +1 -1
- package/dist/deep-recall.d.ts +12 -1
- package/dist/deep-recall.js +3 -2
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-ueZlKTQB.d.ts → dependency-propagation-delivery-C2QFQ97b.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-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +23 -23
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/eval-trajectory-contracts.d.ts +1 -1
- package/dist/eval-trajectory-store.d.ts +1 -1
- package/dist/eval-trajectory.d.ts +1 -1
- package/dist/explicit-capture.d.ts +11 -11
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -13
- package/dist/external-wiki-access.js +80 -79
- 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 +14 -13
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +2 -2
- package/dist/extraction-faithfulness.js +3 -3
- package/dist/extraction-judge-telemetry.d.ts +2 -2
- package/dist/extraction-judge-training.d.ts +2 -2
- package/dist/extraction-judge.d.ts +2 -2
- package/dist/extraction-judge.js +3 -3
- 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-span-config.d.ts +1 -1
- package/dist/extraction-span-materialize.d.ts +1 -1
- package/dist/extraction.d.ts +2 -2
- package/dist/extraction.js +38 -38
- package/dist/fallback-llm-codex-subscription.d.ts +15 -5
- package/dist/fallback-llm-codex-subscription.js +3 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/fallback-llm.js +2 -2
- package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
- package/dist/{generic-recall-paths-CpyVmA88.d.ts → generic-recall-paths-CeKQsQEn.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +1 -1
- 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-jsonl.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 +3 -3
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/importers/test-utils.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-BvUA4S7M.d.ts → index-Bau-Wl0H.d.ts} +3 -3
- package/dist/index.d.ts +703 -702
- package/dist/index.js +331 -327
- 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 +8 -8
- 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-BsJGulur.d.ts → local-llm-Bj-m01Ro.d.ts} +1 -1
- package/dist/local-llm-helpers.d.ts +2 -2
- package/dist/local-llm.d.ts +2 -2
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/location/index.d.ts +6 -209
- package/dist/location/index.js +77 -71
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +23 -23
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +25 -25
- package/dist/{maintenance-CYubtIRr.d.ts → maintenance-Ye-y-c7f.d.ts} +7 -6
- package/dist/mcp-memory-inspector-app.d.ts +14 -13
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-controller.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +14 -13
- package/dist/memory-subject.d.ts +14 -13
- 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 +23 -23
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +3 -3
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +22 -22
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +5 -5
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +26 -26
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +44 -44
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +39 -39
- package/dist/{orchestrator-BWDRJ_0d.d.ts → orchestrator-fFDDYUUV.d.ts} +20 -10
- package/dist/orchestrator.d.ts +11 -11
- package/dist/orchestrator.js +170 -168
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-7JMn2yMH.d.ts → pipeline-D_j5n_Ih.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +1 -1
- package/dist/{public-http-CJWs3mo9.d.ts → public-http-CjiSqxUx.d.ts} +1 -1
- package/dist/{qmd-CxCH9G9m.d.ts → qmd-CnxVjKrv.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-navigate-access.d.ts +1 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +1 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +1 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-planner-llm.js +2 -2
- package/dist/recall-state-view-admission.d.ts +2 -2
- package/dist/recall-state-view-admission.js +8 -8
- package/dist/recall-state-view-anchors.d.ts +1 -1
- package/dist/recall-state-view-anchors.js +2 -2
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +9 -1
- package/dist/recall-state-view.js +5 -3
- 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 +1 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/reconcile/plan.js +2 -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/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +8 -8
- package/dist/resolution-LXFQQ4AE.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +12 -12
- 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 +160 -160
- package/dist/{scope-profiles-BGAUqhBR.d.ts → scope-profiles-BajH5zAT.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 +2 -2
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +4 -4
- 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-CCeRD9pV.d.ts → semantic-consolidation-Bu6d3O7R.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +25 -25
- package/dist/semantic-rule-promotion.js +22 -22
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +22 -22
- package/dist/{service-BwpzRduk.d.ts → service-ChFwWtLS.d.ts} +13 -2
- 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 +7 -7
- package/dist/shared-context/manager.js +2 -2
- package/dist/shared-context/write-output-controls.d.ts +34 -0
- package/dist/shared-context/write-output-controls.js +10 -0
- package/dist/shared-context/write-output-controls.js.map +1 -0
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +33 -33
- package/dist/source-attribution.d.ts +23 -1
- package/dist/source-attribution.js +13 -3
- package/dist/standup/build.js +23 -23
- package/dist/{storage-BprAGBG0.d.ts → storage-BDKQdsmB.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +21 -21
- package/dist/subject-config.d.ts +1 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +6 -6
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +17 -16
- package/dist/support-passport/index.js +82 -81
- package/dist/tagging-CwK6um2q.d.ts +240 -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 +1 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +3 -3
- package/dist/transfer/export-okf.d.ts +1 -1
- package/dist/transfer/export-okf.js +22 -22
- package/dist/transfer/types.d.ts +78 -78
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-nJV23pa3.d.ts → types-B65IoepH.d.ts} +6 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +22 -22
- package/dist/who-knows-cli.d.ts +14 -13
- package/dist/who-knows-cli.js +23 -23
- package/dist/who-knows.d.ts +14 -13
- package/dist/who-knows.js +22 -22
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +12 -2
- package/src/access-http.test.ts +1 -0
- package/src/access-http.ts +1 -1
- package/src/access-mcp-shared-context-tools.ts +103 -0
- package/src/access-mcp.ts +7 -80
- package/src/access-observe-write-category.ts +1 -0
- package/src/access-observe-write-surface.ts +3 -3
- package/src/access-operations-batch.ts +47 -4
- package/src/access-schema.ts +1 -0
- package/src/access-service.ts +18 -12
- package/src/activity/timeline/regenerate.test.ts +48 -0
- package/src/activity/timeline/regenerate.ts +7 -5
- package/src/cli/deep-recall-commands.ts +22 -10
- package/src/config.ts +5 -0
- package/src/dedup/merge.test.ts +283 -0
- package/src/deep-recall-boundary.test.ts +66 -0
- package/src/deep-recall-cli.test.ts +82 -0
- package/src/deep-recall-config.test.ts +56 -0
- package/src/deep-recall-config.ts +32 -0
- package/src/deep-recall-http-glue.ts +10 -10
- package/src/deep-recall-policy-llm.test.ts +242 -0
- package/src/deep-recall-policy-llm.ts +37 -7
- package/src/deep-recall-seeds.test.ts +53 -0
- package/src/deep-recall-seeds.ts +7 -1
- package/src/deep-recall-surface.test.ts +93 -0
- package/src/deep-recall.test.ts +121 -0
- package/src/deep-recall.ts +88 -28
- package/src/fallback-llm-codex-subscription.ts +27 -5
- package/src/fallback-llm.test.ts +120 -0
- package/src/fallback-llm.ts +17 -16
- package/src/location/phase5-wiring.test.ts +408 -0
- package/src/location/tagging.ts +58 -0
- package/src/meetings/config.test.ts +58 -0
- package/src/orchestration/extraction-persist.ts +1 -1
- package/src/orchestration/orchestrator-helpers.ts +2 -0
- package/src/orchestration/recall-entry.ts +15 -1
- package/src/orchestration/recall-internal.ts +1 -0
- package/src/orchestration/recall-section-coordinator.ts +65 -28
- package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
- package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
- package/src/orchestration/semantic-merge-persist.ts +23 -36
- package/src/orchestration/workspace-ops.ts +14 -0
- package/src/providers/codex-subscription.test.ts +127 -0
- package/src/providers/codex-subscription.ts +1 -1
- package/src/recall-state-view-budget.test.ts +424 -0
- package/src/recall-state-view.ts +30 -16
- package/src/shared-context/envelope-io.ts +25 -0
- package/src/shared-context/envelope-wiring.test.ts +4 -2
- package/src/shared-context/manager.ts +1 -0
- package/src/shared-context/write-output-controls.test.ts +192 -0
- package/src/shared-context/write-output-controls.ts +72 -0
- package/src/source-attribution.test.ts +39 -0
- package/src/source-attribution.ts +72 -0
- package/src/types.ts +5 -0
- package/src/wearables/pipeline.ts +19 -0
- package/src/wearables/service.ts +8 -0
- package/dist/chunk-5LYSEZOF.js.map +0 -1
- package/dist/chunk-CARRTDKC.js.map +0 -1
- package/dist/chunk-CC37E3QM.js.map +0 -1
- package/dist/chunk-IS2IDFJP.js.map +0 -1
- package/dist/chunk-K75A5XWU.js.map +0 -1
- package/dist/chunk-KTOXQMW3.js.map +0 -1
- package/dist/chunk-MDIEES23.js.map +0 -1
- package/dist/chunk-OEDW4ER7.js.map +0 -1
- package/dist/chunk-QE6YVNP5.js.map +0 -1
- package/dist/chunk-ROEFLU37.js.map +0 -1
- package/dist/chunk-SFHLQPBF.js.map +0 -1
- package/dist/chunk-SV4Z2S67.js.map +0 -1
- package/dist/chunk-THTF2W7M.js.map +0 -1
- package/dist/chunk-UZ6JYPJ6.js.map +0 -1
- package/dist/chunk-YTK5MVNF.js.map +0 -1
- package/dist/chunk-ZRMMXWYI.js.map +0 -1
- package/dist/chunk-ZX3AYNNV.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
- /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
- /package/dist/{chunk-JAJIMTFB.js.map → chunk-2PDMIPMP.js.map} +0 -0
- /package/dist/{chunk-6L2II3KS.js.map → chunk-3D75XIYO.js.map} +0 -0
- /package/dist/{chunk-XCPNH2MG.js.map → chunk-3KJTSCSX.js.map} +0 -0
- /package/dist/{chunk-YTZN2UZO.js.map → chunk-3RLWUW7G.js.map} +0 -0
- /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-NVVZPBKI.js.map → chunk-46FVFU7S.js.map} +0 -0
- /package/dist/{chunk-JUDT33RX.js.map → chunk-4AX5OYKC.js.map} +0 -0
- /package/dist/{chunk-GSSDHAYH.js.map → chunk-4IGOLIWM.js.map} +0 -0
- /package/dist/{chunk-23HFXQ5J.js.map → chunk-6EGIQEKC.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-GO5LOHCD.js.map → chunk-7L54ARML.js.map} +0 -0
- /package/dist/{chunk-TEMKBSV6.js.map → chunk-7PSRCGWT.js.map} +0 -0
- /package/dist/{chunk-ICNJ6J46.js.map → chunk-AAAFZW3U.js.map} +0 -0
- /package/dist/{chunk-K4JKAXMO.js.map → chunk-AAX22E4K.js.map} +0 -0
- /package/dist/{chunk-KY236SP5.js.map → chunk-AHHFBJX7.js.map} +0 -0
- /package/dist/{chunk-TZ44E732.js.map → chunk-AIVRD66I.js.map} +0 -0
- /package/dist/{chunk-YRIFXXMI.js.map → chunk-AOGICQMH.js.map} +0 -0
- /package/dist/{chunk-KOTG3RXE.js.map → chunk-AUSRUOMQ.js.map} +0 -0
- /package/dist/{chunk-C5R73BON.js.map → chunk-BIANISES.js.map} +0 -0
- /package/dist/{chunk-IMBQFHRV.js.map → chunk-BPXJINHW.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-2J3V5QEO.js.map → chunk-C3QXITIP.js.map} +0 -0
- /package/dist/{chunk-2SNCQHJZ.js.map → chunk-CQ4BTPX6.js.map} +0 -0
- /package/dist/{chunk-3QEVOQF5.js.map → chunk-CTETTVDN.js.map} +0 -0
- /package/dist/{chunk-DFVSJFHK.js.map → chunk-DBB5JPSL.js.map} +0 -0
- /package/dist/{chunk-W23JARAQ.js.map → chunk-DLPMOSNH.js.map} +0 -0
- /package/dist/{chunk-BGRTZOJB.js.map → chunk-DMTSKY4W.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-QS5Q5RBV.js.map → chunk-E4FRR4MA.js.map} +0 -0
- /package/dist/{chunk-RJQAP333.js.map → chunk-ETE3SGAH.js.map} +0 -0
- /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
- /package/dist/{chunk-RLU2Y5GV.js.map → chunk-F2FJTOV6.js.map} +0 -0
- /package/dist/{chunk-V2ZA4YWE.js.map → chunk-F5H6YG5P.js.map} +0 -0
- /package/dist/{chunk-4CMXI55L.js.map → chunk-FSUFKIFS.js.map} +0 -0
- /package/dist/{chunk-ZAEPD4C2.js.map → chunk-G3NTZZWT.js.map} +0 -0
- /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-WZYHPAG5.js.map → chunk-GIM2AGFL.js.map} +0 -0
- /package/dist/{chunk-J7FVMLBR.js.map → chunk-GWEZNCGA.js.map} +0 -0
- /package/dist/{chunk-LFVZD5EC.js.map → chunk-GWNSKQDA.js.map} +0 -0
- /package/dist/{chunk-MJC7UKH7.js.map → chunk-H2N6SLTR.js.map} +0 -0
- /package/dist/{chunk-J4WGTN2N.js.map → chunk-HK44SV6K.js.map} +0 -0
- /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
- /package/dist/{chunk-VQYWKCDR.js.map → chunk-HPMCKAET.js.map} +0 -0
- /package/dist/{chunk-MVG3KXON.js.map → chunk-I65KB36L.js.map} +0 -0
- /package/dist/{chunk-AEOOGXMQ.js.map → chunk-J2MGTGKC.js.map} +0 -0
- /package/dist/{chunk-PKUJNICO.js.map → chunk-JC2OBYYD.js.map} +0 -0
- /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
- /package/dist/{chunk-VQWBUPSJ.js.map → chunk-JMAP6L6Q.js.map} +0 -0
- /package/dist/{chunk-7Z54NXVS.js.map → chunk-K27INAPR.js.map} +0 -0
- /package/dist/{chunk-7D6SER6A.js.map → chunk-KJQ4Y2PY.js.map} +0 -0
- /package/dist/{chunk-QPVNK2VE.js.map → chunk-LCVYO3ON.js.map} +0 -0
- /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
- /package/dist/{chunk-TO36VPZI.js.map → chunk-LWF6GOII.js.map} +0 -0
- /package/dist/{chunk-ES5BUPYB.js.map → chunk-OCWFKD5Q.js.map} +0 -0
- /package/dist/{chunk-IOPIGX7Y.js.map → chunk-OP722LOG.js.map} +0 -0
- /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
- /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
- /package/dist/{chunk-JOP7W24J.js.map → chunk-PLJ2MQFT.js.map} +0 -0
- /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
- /package/dist/{chunk-BXIJSPCL.js.map → chunk-Q62GA5U2.js.map} +0 -0
- /package/dist/{chunk-I3H5LFOI.js.map → chunk-QNJQCLI6.js.map} +0 -0
- /package/dist/{chunk-BYQX4IOG.js.map → chunk-R45VFSEV.js.map} +0 -0
- /package/dist/{chunk-XVDZFTN5.js.map → chunk-RFIJH2OE.js.map} +0 -0
- /package/dist/{chunk-K4A6UVPB.js.map → chunk-RJ7Z7YXK.js.map} +0 -0
- /package/dist/{chunk-HJUP3K6L.js.map → chunk-RXYO6NA6.js.map} +0 -0
- /package/dist/{chunk-TBXAY2SS.js.map → chunk-SGHGCFVV.js.map} +0 -0
- /package/dist/{chunk-2SKMZUOW.js.map → chunk-U26LB4WA.js.map} +0 -0
- /package/dist/{chunk-VHKXRYQN.js.map → chunk-VBK6SRNE.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-Z4GUX2M6.js.map → chunk-VSN2DMQK.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-G2XZFGYN.js.map → chunk-WGZHSQDV.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-LKFVVN7R.js.map → chunk-WNPRRBOE.js.map} +0 -0
- /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-RDLPFM7I.js.map → chunk-XJLTQTAO.js.map} +0 -0
- /package/dist/{chunk-XM46Y66S.js.map → chunk-ZFU6QNRN.js.map} +0 -0
- /package/dist/{chunk-SUEOG2S4.js.map → chunk-ZGXHTV5Y.js.map} +0 -0
- /package/dist/{chunk-46Z3VGWF.js.map → chunk-ZYRAY5FL.js.map} +0 -0
- /package/dist/{chunk-3XPN7AVY.js.map → chunk-ZYSOT6HD.js.map} +0 -0
- /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase-5 wiring regression (issue #2925): the existing location subsystem
|
|
3
|
+
* feeding wearables, day summaries, and briefings — conservatively.
|
|
4
|
+
*
|
|
5
|
+
* Pins the contract the umbrella issue (#2043) requires:
|
|
6
|
+
* - wearable location fill is missing-only and never overwrites a
|
|
7
|
+
* source-provided value;
|
|
8
|
+
* - conflicting / below-threshold overlaps stay untagged;
|
|
9
|
+
* - absent, disabled, or unrequested location changes NOTHING (the
|
|
10
|
+
* stored transcript body and gathered day summary are byte-identical);
|
|
11
|
+
* - day summaries and briefings expose place names only behind the
|
|
12
|
+
* explicit includeLocation request flag plus both location gates;
|
|
13
|
+
* - labels only — coordinates never reach any phase-5 output.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
18
|
+
import { tmpdir } from "node:os";
|
|
19
|
+
import * as path from "node:path";
|
|
20
|
+
import { test } from "node:test";
|
|
21
|
+
|
|
22
|
+
import { StorageManager } from "../storage.js";
|
|
23
|
+
import { WorkspaceOpsCoordinator, type WorkspaceOpsDeps } from "../orchestration/workspace-ops.js";
|
|
24
|
+
import type { PluginConfig } from "../types.js";
|
|
25
|
+
import type {
|
|
26
|
+
WearableConversation,
|
|
27
|
+
WearableSourceConnector,
|
|
28
|
+
WearableSourceSettings,
|
|
29
|
+
WearablesConfig,
|
|
30
|
+
} from "../wearables/types.js";
|
|
31
|
+
import { defaultWearableSourceSettings, defaultWearablesConfig } from "../wearables/config.js";
|
|
32
|
+
import { parseDayTranscript } from "../wearables/day-store.js";
|
|
33
|
+
import { syncWearableSource, type WearableSyncDeps } from "../wearables/pipeline.js";
|
|
34
|
+
import { parseLocationConfig } from "./config.js";
|
|
35
|
+
import { saveLocationSyncState } from "./store.js";
|
|
36
|
+
import type { LocationConfig, LocationSegment } from "./types.js";
|
|
37
|
+
import { briefingLocationSection } from "./tagging.js";
|
|
38
|
+
|
|
39
|
+
const NOW = new Date("2026-06-11T03:00:00.000Z");
|
|
40
|
+
|
|
41
|
+
function locationConfig(overrides: Record<string, unknown> = {}): LocationConfig {
|
|
42
|
+
return parseLocationConfig({
|
|
43
|
+
enabled: true,
|
|
44
|
+
timezone: "UTC",
|
|
45
|
+
sources: [{ id: "reitti" }],
|
|
46
|
+
tagging: { enabled: true },
|
|
47
|
+
...overrides,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function segment(
|
|
52
|
+
startUtc: string,
|
|
53
|
+
endUtc: string,
|
|
54
|
+
label: string,
|
|
55
|
+
kind: LocationSegment["place"]["kind"] = "poi",
|
|
56
|
+
): LocationSegment {
|
|
57
|
+
return {
|
|
58
|
+
startUtc,
|
|
59
|
+
endUtc,
|
|
60
|
+
place: {
|
|
61
|
+
id: `reitti:place:${label.toLowerCase().replace(/\s+/g, "-")}`,
|
|
62
|
+
label,
|
|
63
|
+
kind,
|
|
64
|
+
latitude: 60.1699,
|
|
65
|
+
longitude: 24.9384,
|
|
66
|
+
},
|
|
67
|
+
confidence: 0.9,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function seedLocationDays(memoryDir: string, days: Record<string, LocationSegment[]>) {
|
|
72
|
+
await saveLocationSyncState(memoryDir, {
|
|
73
|
+
version: 1,
|
|
74
|
+
sources: {
|
|
75
|
+
reitti: {
|
|
76
|
+
days: Object.fromEntries(
|
|
77
|
+
Object.entries(days).map(([date, segments]) => [
|
|
78
|
+
date,
|
|
79
|
+
{ observationCount: segments.length, segments },
|
|
80
|
+
]),
|
|
81
|
+
),
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function wearableSettings(): WearableSourceSettings {
|
|
87
|
+
return { ...defaultWearableSourceSettings(), enabled: true };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function wearablesConfig(timezone = "UTC"): WearablesConfig {
|
|
91
|
+
return {
|
|
92
|
+
...defaultWearablesConfig(),
|
|
93
|
+
enabled: true,
|
|
94
|
+
timezone,
|
|
95
|
+
digestEnabled: false,
|
|
96
|
+
offTheRecordEnabled: false,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function conversation(
|
|
101
|
+
id: string,
|
|
102
|
+
startIso: string,
|
|
103
|
+
endIso: string,
|
|
104
|
+
overrides: Partial<WearableConversation> = {},
|
|
105
|
+
): WearableConversation {
|
|
106
|
+
return {
|
|
107
|
+
id,
|
|
108
|
+
source: "testsource",
|
|
109
|
+
title: `Conversation ${id}`,
|
|
110
|
+
startIso,
|
|
111
|
+
endIso,
|
|
112
|
+
segments: [{ speakerKey: "user", speakerName: "user", isWearer: true, text: "Synthetic wearable text." }],
|
|
113
|
+
...overrides,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function fakeConnector(byDate: Record<string, WearableConversation[]>): WearableSourceConnector {
|
|
118
|
+
return {
|
|
119
|
+
id: "testsource",
|
|
120
|
+
displayName: "Test Source",
|
|
121
|
+
async verifyAuth() {
|
|
122
|
+
return { ok: true };
|
|
123
|
+
},
|
|
124
|
+
async fetchConversations(opts: { date: string }) {
|
|
125
|
+
return { conversations: byDate[opts.date] ?? [], nextCursor: null };
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function makeSyncDeps(
|
|
131
|
+
memoryDir: string,
|
|
132
|
+
now: Date,
|
|
133
|
+
locationConfigValue?: LocationConfig,
|
|
134
|
+
): { deps: WearableSyncDeps; written: Array<{ source: string; date: string; serialized: string }> } {
|
|
135
|
+
const written: Array<{ source: string; date: string; serialized: string }> = [];
|
|
136
|
+
const deps: WearableSyncDeps = {
|
|
137
|
+
memoryDir,
|
|
138
|
+
async readDayContentHash() {
|
|
139
|
+
return null;
|
|
140
|
+
},
|
|
141
|
+
writeDayTranscript(source, date, serialized) {
|
|
142
|
+
written.push({ source, date, serialized });
|
|
143
|
+
return Promise.resolve();
|
|
144
|
+
},
|
|
145
|
+
memoryGen: null,
|
|
146
|
+
now: () => now,
|
|
147
|
+
...(locationConfigValue !== undefined ? { locationConfig: locationConfigValue } : {}),
|
|
148
|
+
};
|
|
149
|
+
return { deps, written };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function bodyOf(serialized: string): string {
|
|
153
|
+
const parsed = parseDayTranscript(serialized);
|
|
154
|
+
assert.ok(parsed, "day transcript parses");
|
|
155
|
+
return parsed.body;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// ── Wearable fill ───────────────────────────────────────────────────────────
|
|
159
|
+
|
|
160
|
+
test("wearable sync fills only missing conversation locations from a dominant overlap", async () => {
|
|
161
|
+
const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-fill-"));
|
|
162
|
+
try {
|
|
163
|
+
await seedLocationDays(memoryDir, {
|
|
164
|
+
"2026-06-11": [segment("2026-06-11T14:30:00.000Z", "2026-06-11T16:00:00.000Z", "Coffee shop")],
|
|
165
|
+
});
|
|
166
|
+
const { deps, written } = makeSyncDeps(memoryDir, NOW, locationConfig());
|
|
167
|
+
const connector = fakeConnector({
|
|
168
|
+
"2026-06-11": [
|
|
169
|
+
conversation("c-missing", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z"),
|
|
170
|
+
conversation("c-source", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z", {
|
|
171
|
+
location: "Office rooftop",
|
|
172
|
+
}),
|
|
173
|
+
],
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 1 }, deps);
|
|
177
|
+
|
|
178
|
+
assert.equal(written.length, 1, "day transcript written");
|
|
179
|
+
const body = bodyOf(written[0].serialized);
|
|
180
|
+
assert.ok(body.includes("*Location: Coffee shop*"), "missing location filled from the dominant match");
|
|
181
|
+
const sourceSection = body.slice(body.indexOf("Conversation c-source"));
|
|
182
|
+
assert.ok(sourceSection.includes("*Location: Office rooftop*"), "source-provided location kept");
|
|
183
|
+
assert.ok(!sourceSection.includes("Coffee shop"), "source-provided value not overwritten");
|
|
184
|
+
} finally {
|
|
185
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("conflicting and below-threshold overlaps leave wearable locations unfilled", async () => {
|
|
190
|
+
const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-threshold-"));
|
|
191
|
+
try {
|
|
192
|
+
await seedLocationDays(memoryDir, {
|
|
193
|
+
// Two equal-overlap places → ambiguous (conflict).
|
|
194
|
+
"2026-06-11": [
|
|
195
|
+
segment("2026-06-11T15:00:00.000Z", "2026-06-11T15:15:00.000Z", "Diner"),
|
|
196
|
+
segment("2026-06-11T15:15:00.000Z", "2026-06-11T15:30:00.000Z", "Gym"),
|
|
197
|
+
],
|
|
198
|
+
// A 2-minute overlap only → below the 300s floor.
|
|
199
|
+
"2026-06-12": [segment("2026-06-12T15:28:00.000Z", "2026-06-12T16:30:00.000Z", "Library")],
|
|
200
|
+
});
|
|
201
|
+
const { deps, written } = makeSyncDeps(memoryDir, new Date("2026-06-12T03:00:00.000Z"), locationConfig());
|
|
202
|
+
const connector = fakeConnector({
|
|
203
|
+
"2026-06-11": [conversation("c-ambiguous", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z")],
|
|
204
|
+
"2026-06-12": [conversation("c-short", "2026-06-12T15:00:00.000Z", "2026-06-12T15:30:00.000Z")],
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 2 }, deps);
|
|
208
|
+
|
|
209
|
+
assert.equal(written.length, 2, "both days written");
|
|
210
|
+
const bodies = written.map((entry) => bodyOf(entry.serialized));
|
|
211
|
+
assert.ok(
|
|
212
|
+
!bodies.some((body) => body.includes("*Location:")),
|
|
213
|
+
`no location line written: ${bodies.join("\n---\n")}`,
|
|
214
|
+
);
|
|
215
|
+
} finally {
|
|
216
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
test("wearable sync output is byte-identical without location config or with tagging disabled", async () => {
|
|
221
|
+
const run = async (locationConfigValue?: LocationConfig) => {
|
|
222
|
+
const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-zerodiff-"));
|
|
223
|
+
try {
|
|
224
|
+
if (locationConfigValue) {
|
|
225
|
+
await seedLocationDays(memoryDir, {
|
|
226
|
+
"2026-06-11": [segment("2026-06-11T14:30:00.000Z", "2026-06-11T16:00:00.000Z", "Coffee shop")],
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const { deps, written } = makeSyncDeps(memoryDir, NOW, locationConfigValue);
|
|
230
|
+
const connector = fakeConnector({
|
|
231
|
+
"2026-06-11": [conversation("c1", "2026-06-11T15:00:00.000Z", "2026-06-11T15:30:00.000Z")],
|
|
232
|
+
});
|
|
233
|
+
await syncWearableSource(connector, wearableSettings(), wearablesConfig(), { days: 1 }, deps);
|
|
234
|
+
assert.equal(written.length, 1);
|
|
235
|
+
return bodyOf(written[0].serialized);
|
|
236
|
+
} finally {
|
|
237
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
const baseline = await run(undefined);
|
|
242
|
+
const disabled = await run(locationConfig({ tagging: { enabled: false } }));
|
|
243
|
+
assert.equal(disabled, baseline, "tagging disabled → identical transcript body");
|
|
244
|
+
assert.ok(!baseline.includes("*Location:"), "no location line by default");
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test("wearable fill resolves the day bucket across a midnight boundary in the location timezone", async () => {
|
|
248
|
+
const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-phase5-midnight-"));
|
|
249
|
+
try {
|
|
250
|
+
// America/New_York: conversation 2026-06-30T03:30Z–04:30Z is
|
|
251
|
+
// 23:30–00:30 local, spanning the June-29 / June-30 midnight. The only
|
|
252
|
+
// qualifying segment (00:00–01:00 local) lives on the June-30 bucket —
|
|
253
|
+
// the conversation's END-anchored day, not its start day. The fill must
|
|
254
|
+
// consult both day keys, not just the start day.
|
|
255
|
+
const nyConfig = locationConfig({ timezone: "America/New_York" });
|
|
256
|
+
await seedLocationDays(memoryDir, {
|
|
257
|
+
"2026-06-30": [segment("2026-06-30T04:00:00.000Z", "2026-06-30T05:00:00.000Z", "Late diner")],
|
|
258
|
+
});
|
|
259
|
+
const { deps, written } = makeSyncDeps(memoryDir, new Date("2026-07-01T03:00:00.000Z"), nyConfig);
|
|
260
|
+
const connector = fakeConnector({
|
|
261
|
+
"2026-06-30": [conversation("c-span", "2026-06-30T03:30:00.000Z", "2026-06-30T04:30:00.000Z")],
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
await syncWearableSource(
|
|
265
|
+
connector,
|
|
266
|
+
wearableSettings(),
|
|
267
|
+
wearablesConfig("America/New_York"),
|
|
268
|
+
{ date: "2026-06-30" },
|
|
269
|
+
deps,
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
assert.equal(written.length, 1);
|
|
273
|
+
const body = bodyOf(written[0].serialized);
|
|
274
|
+
assert.ok(body.includes("*Location: Late diner*"), `cross-midnight segment matched: ${body}`);
|
|
275
|
+
} finally {
|
|
276
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// ── Day summary opt-in ──────────────────────────────────────────────────────
|
|
281
|
+
|
|
282
|
+
function opsCoordinator(storage: StorageManager, configOverrides: Partial<PluginConfig>) {
|
|
283
|
+
return new WorkspaceOpsCoordinator({
|
|
284
|
+
config: {
|
|
285
|
+
defaultNamespace: "default",
|
|
286
|
+
daySummaryTimezone: "UTC",
|
|
287
|
+
...configOverrides,
|
|
288
|
+
} as unknown as PluginConfig,
|
|
289
|
+
storageRouter: {
|
|
290
|
+
storageFor: async () => storage,
|
|
291
|
+
},
|
|
292
|
+
} as unknown as WorkspaceOpsDeps);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
test("gatherTodayFacts appends location context only when requested and gated", async () => {
|
|
296
|
+
const gather = async (options: { includeLocation?: boolean; location?: LocationConfig }) => {
|
|
297
|
+
const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-summary-"));
|
|
298
|
+
try {
|
|
299
|
+
const storage = new StorageManager(root);
|
|
300
|
+
await storage.writeMemory("fact", "Shipped the location wiring.", { source: "test" });
|
|
301
|
+
if (options.location) {
|
|
302
|
+
const day = new Date().toISOString().slice(0, 10);
|
|
303
|
+
await seedLocationDays(root, {
|
|
304
|
+
[day]: [segment(`${day}T09:00:00.000Z`, `${day}T17:00:00.000Z`, "Office", "work")],
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
const coordinator = opsCoordinator(storage, options.location ? { location: options.location } : {});
|
|
308
|
+
return await coordinator.gatherTodayFacts(undefined, {
|
|
309
|
+
now: new Date(),
|
|
310
|
+
timeZone: "UTC",
|
|
311
|
+
...(options.includeLocation !== undefined ? { includeLocation: options.includeLocation } : {}),
|
|
312
|
+
});
|
|
313
|
+
} finally {
|
|
314
|
+
rmSync(root, { recursive: true, force: true });
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
// Each gather run writes a fresh fact id/timestamp header; normalize it
|
|
319
|
+
// away so byte-comparisons isolate the location delta.
|
|
320
|
+
const normalized = (gathered: string) => gathered.replace(/^\[fact-[^\]]*\] \([^)]*\)/gm, "[fact]");
|
|
321
|
+
|
|
322
|
+
const enabled = locationConfig();
|
|
323
|
+
const baseline = await gather({});
|
|
324
|
+
const withStateNoFlag = await gather({ location: enabled });
|
|
325
|
+
assert.equal(normalized(withStateNoFlag), normalized(baseline), "no request flag → byte-identical gathered summary");
|
|
326
|
+
|
|
327
|
+
const withFlagNoState = await gather({ includeLocation: true });
|
|
328
|
+
assert.equal(normalized(withFlagNoState), normalized(baseline), "flag without location state → byte-identical");
|
|
329
|
+
|
|
330
|
+
const withFlag = await gather({ includeLocation: true, location: enabled });
|
|
331
|
+
assert.ok(withFlag.includes("## Location context"), "opt-in adds the location section");
|
|
332
|
+
assert.ok(withFlag.includes("- Office: 8h 00m"), "labels and durations only");
|
|
333
|
+
|
|
334
|
+
const flagButTaggingOff = await gather({
|
|
335
|
+
includeLocation: true,
|
|
336
|
+
location: locationConfig({ tagging: { enabled: false } }),
|
|
337
|
+
});
|
|
338
|
+
assert.equal(normalized(flagButTaggingOff), normalized(baseline), "flag with tagging disabled → byte-identical");
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// ── Briefing opt-in ─────────────────────────────────────────────────────────
|
|
342
|
+
|
|
343
|
+
test("briefingLocationSection is opt-in, start-day anchored, and labels-only", async () => {
|
|
344
|
+
const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-briefing-"));
|
|
345
|
+
try {
|
|
346
|
+
const day = new Date().toISOString().slice(0, 10);
|
|
347
|
+
await seedLocationDays(root, {
|
|
348
|
+
[day]: [
|
|
349
|
+
segment(`${day}T08:00:00.000Z`, `${day}T18:00:00.000Z`, "HQ", "work"),
|
|
350
|
+
segment(`${day}T18:00:00.000Z`, `${day}T19:00:00.000Z`, "Commuter rail", "transit"),
|
|
351
|
+
],
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
const gatedOff = await briefingLocationSection(
|
|
355
|
+
root,
|
|
356
|
+
new Date().toISOString(),
|
|
357
|
+
locationConfig({ tagging: { enabled: false } }),
|
|
358
|
+
);
|
|
359
|
+
assert.equal(gatedOff, null, "tagging disabled → no section");
|
|
360
|
+
|
|
361
|
+
const section = await briefingLocationSection(root, new Date().toISOString(), locationConfig());
|
|
362
|
+
assert.ok(section, "gated on → section rendered");
|
|
363
|
+
assert.ok(section.includes("## Location context"));
|
|
364
|
+
assert.ok(section.includes("- HQ: 10h 00m"), "work place rendered with duration");
|
|
365
|
+
assert.ok(!section.includes("Commuter rail"), "transit-only place excluded");
|
|
366
|
+
|
|
367
|
+
const none = await briefingLocationSection(
|
|
368
|
+
root,
|
|
369
|
+
new Date(Date.now() - 90 * 24 * 3600 * 1000).toISOString(),
|
|
370
|
+
locationConfig(),
|
|
371
|
+
);
|
|
372
|
+
assert.equal(none, null, "window start on a day without segments → no section");
|
|
373
|
+
} finally {
|
|
374
|
+
rmSync(root, { recursive: true, force: true });
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
// ── Privacy ─────────────────────────────────────────────────────────────────
|
|
379
|
+
|
|
380
|
+
test("phase-5 outputs never contain coordinates or raw location records", async () => {
|
|
381
|
+
const root = mkdtempSync(path.join(tmpdir(), "remnic-phase5-privacy-"));
|
|
382
|
+
try {
|
|
383
|
+
const day = new Date().toISOString().slice(0, 10);
|
|
384
|
+
// Segment places carry coordinates (as if retainCoordinates had been on
|
|
385
|
+
// at ingestion) — every phase-5 surface must still render labels only.
|
|
386
|
+
await seedLocationDays(root, {
|
|
387
|
+
[day]: [segment(`${day}T08:00:00.000Z`, `${day}T18:00:00.000Z`, "HQ", "work")],
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
const section = await briefingLocationSection(root, new Date().toISOString(), locationConfig());
|
|
391
|
+
assert.ok(section);
|
|
392
|
+
assert.ok(!/\d+\.\d{3,}/.test(section), `no coordinate-like numbers: ${section}`);
|
|
393
|
+
assert.ok(!section.includes("startUtc") && !section.includes("observationCount"), "no raw record fields");
|
|
394
|
+
|
|
395
|
+
const storage = new StorageManager(root);
|
|
396
|
+
await storage.writeMemory("fact", "Privacy probe fact.", { source: "test" });
|
|
397
|
+
const coordinator = opsCoordinator(storage, { location: locationConfig() });
|
|
398
|
+
const gathered = await coordinator.gatherTodayFacts(undefined, {
|
|
399
|
+
now: new Date(),
|
|
400
|
+
timeZone: "UTC",
|
|
401
|
+
includeLocation: true,
|
|
402
|
+
});
|
|
403
|
+
assert.ok(!gathered.includes("60.1699") && !gathered.includes("24.9384"), "no coordinates in day-summary input");
|
|
404
|
+
assert.ok(!gathered.includes("latitude") && !gathered.includes("longitude"), "no coordinate field names");
|
|
405
|
+
} finally {
|
|
406
|
+
rmSync(root, { recursive: true, force: true });
|
|
407
|
+
}
|
|
408
|
+
});
|
package/src/location/tagging.ts
CHANGED
|
@@ -275,3 +275,61 @@ export async function renderDayLocationContext(
|
|
|
275
275
|
});
|
|
276
276
|
return `## Location context\n\n${lines.join("\n")}`;
|
|
277
277
|
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Location context for a briefing (issue #2925): the place names of the
|
|
281
|
+
* local day containing the briefing window's start, bucketed in the
|
|
282
|
+
* location config's own timezone (the store's bucketing zone). Opt-in and
|
|
283
|
+
* labels-only — the caller decides whether to include it.
|
|
284
|
+
*/
|
|
285
|
+
export async function briefingLocationSection(
|
|
286
|
+
memoryDir: string,
|
|
287
|
+
windowStartUtc: string,
|
|
288
|
+
config: LocationConfig,
|
|
289
|
+
): Promise<string | null> {
|
|
290
|
+
return renderDayLocationContext(
|
|
291
|
+
memoryDir,
|
|
292
|
+
localDayKey(windowStartUtc, config.timezone),
|
|
293
|
+
config,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export async function applyBriefingLocationContext<
|
|
298
|
+
T extends { markdown: string; json: Record<string, unknown> },
|
|
299
|
+
>(
|
|
300
|
+
result: T,
|
|
301
|
+
includeLocation: boolean | undefined,
|
|
302
|
+
memoryDir: string,
|
|
303
|
+
windowStartUtc: string,
|
|
304
|
+
location: LocationConfig,
|
|
305
|
+
): Promise<T> {
|
|
306
|
+
if (includeLocation !== true || !locationTaggingEnabled(location)) return result;
|
|
307
|
+
const section = await briefingLocationSection(memoryDir, windowStartUtc, location);
|
|
308
|
+
if (!section) return result;
|
|
309
|
+
return {
|
|
310
|
+
...result,
|
|
311
|
+
markdown: `${result.markdown}\n\n${section}\n`,
|
|
312
|
+
json: { ...result.json, locationContext: section },
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Opt-in matched-place-name context (issue #2925), shared by the access
|
|
318
|
+
* request surfaces (day summary and briefing). Absent or false keeps the
|
|
319
|
+
* output byte-identical.
|
|
320
|
+
*/
|
|
321
|
+
export interface LocationContextRequestOptions {
|
|
322
|
+
/** Opt-in matched-place-name context appended to the summary or briefing output. */
|
|
323
|
+
includeLocation?: boolean;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Auto-gather options for the day summary (issue #2925): the caller's
|
|
328
|
+
* timezone plus the strictly-opt-in location flag. Only the literal
|
|
329
|
+
* `true` opts in, matching the transport schemas' boolean contract.
|
|
330
|
+
*/
|
|
331
|
+
export function daySummaryAutoOptions(
|
|
332
|
+
request: LocationContextRequestOptions & { timeZone?: string },
|
|
333
|
+
): { timeZone?: string; includeLocation: boolean } {
|
|
334
|
+
return { timeZone: request.timeZone, includeLocation: request.includeLocation === true };
|
|
335
|
+
}
|
|
@@ -2,6 +2,7 @@ import assert from "node:assert/strict";
|
|
|
2
2
|
import { test } from "node:test";
|
|
3
3
|
|
|
4
4
|
import { DEFAULT_MEETING_APP_PATTERNS } from "./detect.js";
|
|
5
|
+
import { parseConfig } from "../config.js";
|
|
5
6
|
import { DEFAULT_MEETINGS_CONFIG, parseMeetingsConfig } from "./config.js";
|
|
6
7
|
|
|
7
8
|
test("absent config is the disabled default with shipped app patterns", () => {
|
|
@@ -70,3 +71,60 @@ test("finding 5 — inverted trust thresholds (autoApprove < review) are rejecte
|
|
|
70
71
|
// still caught (the override interacts with the default).
|
|
71
72
|
assert.throws(() => parseMeetingsConfig({ autoApproveTrust: 0.3 }), /must be >= meetings\.reviewTrust/);
|
|
72
73
|
});
|
|
74
|
+
|
|
75
|
+
test("fully-specified valid config round-trips unchanged through the canonical parser (#2936)", () => {
|
|
76
|
+
const full = {
|
|
77
|
+
enabled: true,
|
|
78
|
+
appPatterns: ["CustomConf App"],
|
|
79
|
+
minOverlapMinutes: 5,
|
|
80
|
+
audioOnlyMinMinutes: 30,
|
|
81
|
+
mergeGapMinutes: 7,
|
|
82
|
+
contextDwellSeconds: 60,
|
|
83
|
+
maxContextChars: 12_000,
|
|
84
|
+
summaryMode: "review",
|
|
85
|
+
sourceTrust: 0.9,
|
|
86
|
+
autoApproveTrust: 0.8,
|
|
87
|
+
reviewTrust: 0.6,
|
|
88
|
+
};
|
|
89
|
+
const cfg = parseMeetingsConfig(full);
|
|
90
|
+
// Every knob must come back exactly as supplied — no re-normalization,
|
|
91
|
+
// no silent defaulting of valid values.
|
|
92
|
+
assert.equal(cfg.enabled, true);
|
|
93
|
+
assert.deepEqual(cfg.appPatterns, [...DEFAULT_MEETING_APP_PATTERNS, "CustomConf App"]);
|
|
94
|
+
assert.equal(cfg.minOverlapMinutes, 5);
|
|
95
|
+
assert.equal(cfg.audioOnlyMinMinutes, 30);
|
|
96
|
+
assert.equal(cfg.mergeGapMinutes, 7);
|
|
97
|
+
assert.equal(cfg.contextDwellSeconds, 60);
|
|
98
|
+
assert.equal(cfg.maxContextChars, 12_000);
|
|
99
|
+
assert.equal(cfg.summaryMode, "review");
|
|
100
|
+
assert.equal(cfg.sourceTrust, 0.9);
|
|
101
|
+
assert.equal(cfg.autoApproveTrust, 0.8);
|
|
102
|
+
assert.equal(cfg.reviewTrust, 0.6);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test("parseConfig routes meetings through exactly one canonical path — no silent aliases (#2936)", () => {
|
|
106
|
+
const full = {
|
|
107
|
+
enabled: true,
|
|
108
|
+
minOverlapMinutes: 9,
|
|
109
|
+
summaryMode: "off",
|
|
110
|
+
sourceTrust: 0.5,
|
|
111
|
+
autoApproveTrust: 0.5,
|
|
112
|
+
reviewTrust: 0.5,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// The one canonical entrypoint: a top-level `meetings` block.
|
|
116
|
+
const viaRoot = parseConfig({ meetings: full }).meetings;
|
|
117
|
+
assert.deepEqual(viaRoot, parseMeetingsConfig(full));
|
|
118
|
+
|
|
119
|
+
// No legacy-alias shapes feed the meetings block: anything other than the
|
|
120
|
+
// top-level `meetings` key must leave the subsystem at its defaults. A new
|
|
121
|
+
// alias would be a second parsed surface for the same runtime keys and
|
|
122
|
+
// must not land silently (it would also need schema + docs + snapshot
|
|
123
|
+
// updates and would flip this assertion).
|
|
124
|
+
const viaAliasShapes = parseConfig({
|
|
125
|
+
meeting: full,
|
|
126
|
+
desktopCapture: { meetings: full },
|
|
127
|
+
captureCompanions: { meetings: full },
|
|
128
|
+
}).meetings;
|
|
129
|
+
assert.deepEqual(viaAliasShapes, parseMeetingsConfig(undefined));
|
|
130
|
+
});
|
|
@@ -2545,7 +2545,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2545
2545
|
const semanticMerge = await applySemanticMergeAtPersist(this.deps, {
|
|
2546
2546
|
storage: targetStorage, content: fact.content, category: writeCategory, sources: fact.sources, sourceConnector: extractionSourceConnector,
|
|
2547
2547
|
incomingMetadata: { tags: [...fact.tags, ...injectionScreenTags], entityRef: fact.entityRef, structuredAttributes: fact.structuredAttributes, validAt: biTemporal ? biTemporal.validFrom : sourceContext?.validAt, biTemporal: biTemporal !== undefined, importanceScore: importance.score, confidence: fact.confidence, provenanceStrength: fact.provenance, toolScoped: factToolScoped, subject: factSubject, origin, faithfulness: faithfulnessFm, memoryKind }, skip: contradictionDetected || faithfulnessEnforceStatus === "pending_review" || batchBackendUnavailable || novelty.decision === "add",
|
|
2548
|
-
incomingLinks: links.length > 0 ? links : undefined, incomingCitedContent: citedFactContent,
|
|
2548
|
+
incomingLinks: links.length > 0 ? links : undefined, incomingCitedContent: citedFactContent, incomingCitationContext: citationContextBase,
|
|
2549
2549
|
targetHasPromotedCopies: (targetId) => promotedCopyProbe.check(targetStorage, targetId),
|
|
2550
2550
|
});
|
|
2551
2551
|
if (semanticMerge.action === "created" && semanticMerge.reason === "backend_unavailable") batchBackendUnavailable = true; // arms the batch short circuit for the remaining facts
|
|
@@ -325,6 +325,8 @@ export const DEFAULT_QMD_STARTUP_COLLECTION_CHECK_TIMEOUT_MS = 10_000;
|
|
|
325
325
|
export type DaySummaryGatherOptions = {
|
|
326
326
|
timeZone?: string;
|
|
327
327
|
now?: Date;
|
|
328
|
+
/** Opt-in location context (issue #2925); false/absent keeps output byte-identical. */
|
|
329
|
+
includeLocation?: boolean;
|
|
328
330
|
};
|
|
329
331
|
|
|
330
332
|
export function normalizeIanaTimeZone(value: unknown): string | undefined {
|
|
@@ -20,7 +20,9 @@ import { ProfilingCollector } from "../profiling.js";
|
|
|
20
20
|
import { trustResultFor, type TrustStageResultItem } from "../trust-score-stage.js";
|
|
21
21
|
import type { RecallResultFormatter } from "./recall-result-formatter.js";
|
|
22
22
|
import type { IdentityInjectionMode, PluginConfig, QmdSearchResult } from "../types.js";
|
|
23
|
-
import {
|
|
23
|
+
import { stateViewPacketActive } from "../recall-state-view-anchors.js";
|
|
24
|
+
import { resultStateViewKey, stateViewPacketKeys } from "../recall-state-view.js";
|
|
25
|
+
import { applyRecallStateViews } from "../recall-state-view-wire.js";
|
|
24
26
|
|
|
25
27
|
export interface RecallEntryDeps {
|
|
26
28
|
appendRecallSection(
|
|
@@ -300,6 +302,15 @@ export class RecallEntryCoordinator {
|
|
|
300
302
|
);
|
|
301
303
|
if (injectable.length === 0) return;
|
|
302
304
|
|
|
305
|
+
// #2928 — packet-atomic final budgeting: under packet semantics (state
|
|
306
|
+
// view active, no historical asOf pin) rows of one supersession packet
|
|
307
|
+
// share their canonical packet root key, so the section coordinator's
|
|
308
|
+
// character/token cap admits or drops the packet as a unit.
|
|
309
|
+
const packetKeys =
|
|
310
|
+
stateViewPacketActive(options.stateViewActive === true, options.asOfMs)
|
|
311
|
+
? stateViewPacketKeys(injectable)
|
|
312
|
+
: [];
|
|
313
|
+
|
|
303
314
|
const formatted = this.deps.recallResultFormatter.formatQmdResultEntries(
|
|
304
315
|
options.title,
|
|
305
316
|
injectable,
|
|
@@ -324,6 +335,9 @@ export class RecallEntryCoordinator {
|
|
|
324
335
|
...(memoryId ? { memoryId } : {}),
|
|
325
336
|
...(result.path ? { memoryPath: result.path } : {}),
|
|
326
337
|
...(result.namespace ? { memoryNamespace: result.namespace } : {}),
|
|
338
|
+
...(packetKeys[index] && resultStateViewKey(result)
|
|
339
|
+
? { packetKey: packetKeys[index] }
|
|
340
|
+
: {}),
|
|
327
341
|
},
|
|
328
342
|
);
|
|
329
343
|
}
|
|
@@ -5043,6 +5043,7 @@ export class RecallInternalCoordinator {
|
|
|
5043
5043
|
// Build a path → QmdSearchResult index so we can pull per-result
|
|
5044
5044
|
// explain data (e.g. reinforcementBoost) from the result that
|
|
5045
5045
|
// boostSearchResults annotated before surfacing to xray.
|
|
5046
|
+
// #1952: label the captured branch through the same inject-seam annotator.
|
|
5046
5047
|
const xrayResultByPath = indexStateViewAnnotatedResults(
|
|
5047
5048
|
xrayRecalledResults, retrievalQuery, this.deps.config, stateViewActive, asOfMs,
|
|
5048
5049
|
);
|