@remnic/core 9.69.41 → 9.69.43
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 +16 -13
- package/dist/access-admin-ops-surface.js +48 -40
- package/dist/access-authorization-probe.d.ts +16 -13
- package/dist/access-authorization-probe.js +49 -41
- package/dist/access-boundary.d.ts +16 -13
- package/dist/access-boundary.js +48 -40
- package/dist/access-cli.js +115 -105
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +16 -13
- package/dist/access-extraction-force-flush.js +48 -40
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +16 -13
- package/dist/access-http-briefing.js +49 -41
- package/dist/access-http-lcm-compaction.d.ts +16 -13
- package/dist/access-http-lifecycle-flush.d.ts +16 -13
- package/dist/access-http-offline-stream.d.ts +16 -13
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +50 -42
- package/dist/access-http.d.ts +17 -14
- package/dist/access-http.js +70 -60
- package/dist/access-identity-continuity-surface.d.ts +12 -11
- package/dist/access-identity-continuity-surface.js +48 -40
- package/dist/access-lcm-surface.d.ts +16 -13
- package/dist/access-lcm-surface.js +48 -40
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp-shared-context-tools.d.ts +16 -13
- package/dist/access-mcp.d.ts +16 -13
- package/dist/access-mcp.js +60 -51
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-DWsMc9Dh.d.ts → access-namespace-preflight-CE-RrXKu.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +48 -40
- package/dist/access-observe-transcript.d.ts +12 -11
- package/dist/access-observe-write-category.d.ts +18 -1
- package/dist/access-observe-write-category.js +21 -4
- package/dist/access-observe-write-surface.d.ts +16 -13
- package/dist/access-observe-write-surface.js +48 -40
- package/dist/access-offline-manifest.d.ts +12 -11
- package/dist/access-offline-manifest.js +6 -6
- package/dist/access-operations-batch.js +50 -43
- package/dist/access-operations.d.ts +17 -14
- package/dist/access-operations.js +56 -48
- package/dist/access-recall-concurrency.d.ts +16 -13
- package/dist/access-recall-concurrency.js +48 -40
- package/dist/access-recall-response.d.ts +16 -13
- package/dist/access-recall-response.js +48 -40
- package/dist/access-recall-surface.d.ts +16 -13
- package/dist/access-recall-surface.js +48 -40
- package/dist/access-schema.d.ts +5 -1
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-Cisy5YDq.d.ts → access-service-DxTTTg9O.d.ts} +15 -11
- package/dist/access-service-helpers.d.ts +16 -13
- package/dist/access-service.d.ts +16 -13
- package/dist/access-service.js +48 -40
- package/dist/access-surface-catalog.d.ts +16 -13
- package/dist/access-surface-catalog.js +54 -42
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -4
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +9 -7
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -1
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-7PGUFY7U.js → auto-sync-QZD4RD6H.js} +9 -5
- package/dist/{auto-sync-7PGUFY7U.js.map → auto-sync-QZD4RD6H.js.map} +1 -1
- package/dist/background-generation.d.ts +2 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +12 -11
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +13 -13
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +7 -7
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{catalog-wcX1QhtQ.d.ts → catalog-Ya3DDn_T.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +14 -14
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/{chunk-QVSRE355.js → chunk-2AV75BJW.js} +29 -1
- package/dist/chunk-2AV75BJW.js.map +1 -0
- package/dist/{chunk-563X6JJX.js → chunk-2HDLDBJW.js} +2 -2
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-WBQ4ONQJ.js → chunk-2PIC6CEN.js} +2 -2
- package/dist/chunk-2WFOVXVJ.js +95 -0
- package/dist/chunk-2WFOVXVJ.js.map +1 -0
- package/dist/{chunk-54QPOE45.js → chunk-2YIUUXNK.js} +2 -2
- package/dist/{chunk-XRS65T4O.js → chunk-324HBGS4.js} +6 -6
- package/dist/chunk-324HBGS4.js.map +1 -0
- package/dist/{chunk-AKABVXFS.js → chunk-3254BYQV.js} +1 -1
- package/dist/{chunk-XCPNH2MG.js → chunk-3KJTSCSX.js} +5 -5
- package/dist/{chunk-I33QYUAF.js → chunk-3YQ7VLP3.js} +2 -2
- package/dist/{chunk-JMWUPUE6.js → chunk-46FVFU7S.js} +2 -2
- package/dist/{chunk-PFKIOYJH.js → chunk-4WMGRLTV.js} +7 -7
- package/dist/{chunk-KLUC2GSG.js → chunk-5AJZ7EUW.js} +5 -5
- package/dist/chunk-5KVT6G5U.js +31 -0
- package/dist/chunk-5KVT6G5U.js.map +1 -0
- package/dist/{chunk-WN2OXGGH.js → chunk-66YUOI53.js} +1 -1
- package/dist/chunk-66YUOI53.js.map +1 -0
- package/dist/{chunk-Z7NBT6AK.js → chunk-6EGIQEKC.js} +2 -2
- package/dist/{chunk-6MQMYXSQ.js → chunk-7F47R4H4.js} +2 -2
- package/dist/{chunk-YFXAWGMR.js → chunk-7L54ARML.js} +2 -2
- package/dist/{chunk-2EYZ32LH.js → chunk-7RGX7BMF.js} +24 -2
- package/dist/{chunk-2EYZ32LH.js.map → chunk-7RGX7BMF.js.map} +1 -1
- package/dist/{chunk-LVFI5LG7.js → chunk-A7GQBJP5.js} +7 -7
- package/dist/{chunk-EMSYMYXO.js → chunk-AKB44K3D.js} +8 -8
- package/dist/chunk-AS2NOPDM.js +30 -0
- package/dist/chunk-AS2NOPDM.js.map +1 -0
- package/dist/{chunk-3BLHPQHT.js → chunk-BPXJINHW.js} +5 -5
- package/dist/{chunk-D6PY63OM.js → chunk-BZDK5EOD.js} +2 -2
- package/dist/{chunk-2J3V5QEO.js → chunk-C3QXITIP.js} +4 -4
- package/dist/{chunk-PLJ2MQFT.js → chunk-C3YEB7CR.js} +7 -7
- package/dist/{chunk-DM5CU5J7.js → chunk-CRK6F6N3.js} +3 -2
- package/dist/chunk-CRK6F6N3.js.map +1 -0
- package/dist/{chunk-2ZG2LLZT.js → chunk-D7UUB33A.js} +2 -2
- package/dist/{chunk-E3I3NDUP.js → chunk-DABSYX7V.js} +7 -7
- package/dist/{chunk-KJLLPG26.js → chunk-DDGQDNQW.js} +2 -2
- package/dist/{chunk-K5D2XVNN.js → chunk-F2FJTOV6.js} +2 -2
- package/dist/{chunk-EAARGPWI.js → chunk-F3TURDFG.js} +3 -1
- package/dist/chunk-F3TURDFG.js.map +1 -0
- package/dist/{chunk-7ZLC4DTZ.js → chunk-F6PTJLEM.js} +1 -1
- package/dist/chunk-F6PTJLEM.js.map +1 -0
- package/dist/{chunk-P66QH6R6.js → chunk-GKKLI23D.js} +2 -2
- package/dist/{chunk-ICN37XHG.js → chunk-GMU7MAHS.js} +19 -19
- package/dist/{chunk-RQQO3ORQ.js → chunk-GR76OKET.js} +13 -4
- package/dist/{chunk-RQQO3ORQ.js.map → chunk-GR76OKET.js.map} +1 -1
- package/dist/{chunk-PQ42DJNG.js → chunk-H2N6SLTR.js} +2 -2
- package/dist/{chunk-ND7MAIJC.js → chunk-HKQAI6XI.js} +2 -2
- package/dist/{chunk-C3G6MW4W.js → chunk-IB7FDRRC.js} +2 -2
- package/dist/{chunk-WFMQN7JE.js → chunk-IWHNT35B.js} +3 -3
- package/dist/{chunk-W7UV2ZCA.js → chunk-JDL5BYYF.js} +3 -3
- package/dist/{chunk-N6XTC56E.js → chunk-JWBDHA4F.js} +15 -11
- package/dist/chunk-JWBDHA4F.js.map +1 -0
- package/dist/{chunk-5EQT62HH.js → chunk-KDLOKVX7.js} +2 -2
- package/dist/chunk-KIW3OOZE.js +39 -0
- package/dist/chunk-KIW3OOZE.js.map +1 -0
- package/dist/{chunk-GMH5QPUU.js → chunk-KOM36ILJ.js} +19 -15
- package/dist/chunk-KOM36ILJ.js.map +1 -0
- package/dist/{chunk-V62YYBBY.js → chunk-KORQWGUA.js} +2 -2
- package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/{chunk-WZIO3TW6.js → chunk-KY75VZKG.js} +2 -2
- package/dist/{chunk-4IGOLIWM.js → chunk-L63M2PE4.js} +2 -2
- package/dist/{chunk-PGGPRF6J.js → chunk-LD22AAJI.js} +2 -2
- package/dist/{chunk-NYWCFC3K.js → chunk-LT4H7SL5.js} +113 -59
- package/dist/chunk-LT4H7SL5.js.map +1 -0
- package/dist/{chunk-A4OIJYCV.js → chunk-LUAQHDUI.js} +2 -2
- package/dist/chunk-LVTT5AUG.js +79 -0
- package/dist/chunk-LVTT5AUG.js.map +1 -0
- package/dist/{chunk-S4MJTIPG.js → chunk-LXMZM7LM.js} +330 -78
- package/dist/chunk-LXMZM7LM.js.map +1 -0
- package/dist/{chunk-DIXZQTGY.js → chunk-M6FKXOYV.js} +2 -2
- package/dist/{chunk-Z535ADTC.js → chunk-M7H56FOQ.js} +2 -2
- package/dist/{chunk-JSD7Q7LD.js → chunk-MOL7JK4F.js} +2 -2
- package/dist/{chunk-I46BYY7U.js → chunk-NHFXGNGC.js} +92 -71
- package/dist/chunk-NHFXGNGC.js.map +1 -0
- package/dist/{chunk-ZX6NNFSY.js → chunk-OGAKUA7I.js} +2 -2
- package/dist/{chunk-KZJM7R4F.js → chunk-PF7LQ22G.js} +6 -6
- package/dist/{chunk-UZGHKD3T.js → chunk-PPDZSJXB.js} +2 -2
- package/dist/{chunk-AUSRUOMQ.js → chunk-PW4HTWXL.js} +2 -2
- package/dist/{chunk-LE2KZ72G.js → chunk-QCTXQ2HW.js} +2 -2
- package/dist/{chunk-I3H5LFOI.js → chunk-QNJQCLI6.js} +4 -4
- package/dist/{chunk-46RII65S.js → chunk-QUBPZQED.js} +2 -2
- package/dist/chunk-QZ4U67KO.js +98 -0
- package/dist/chunk-QZ4U67KO.js.map +1 -0
- package/dist/{chunk-E4LMQTST.js → chunk-R3H2AXO2.js} +2 -2
- package/dist/{chunk-XVDZFTN5.js → chunk-RFIJH2OE.js} +5 -5
- package/dist/{chunk-BTPCP535.js → chunk-RJ7Z7YXK.js} +5 -5
- package/dist/{chunk-TBXAY2SS.js → chunk-SGHGCFVV.js} +5 -5
- package/dist/{chunk-AIVRD66I.js → chunk-T3F2HWIG.js} +2 -2
- package/dist/chunk-TE6S7KDF.js +47 -0
- package/dist/chunk-TE6S7KDF.js.map +1 -0
- package/dist/{chunk-WPGA4RYI.js → chunk-UCLWIMVW.js} +2 -2
- 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-V2EXYQEQ.js → chunk-VHANUT45.js} +7 -7
- package/dist/{chunk-AFJHNHAM.js → chunk-VJXMFBVR.js} +2 -2
- package/dist/{chunk-FGFC2EFR.js → chunk-VKDXYEA6.js} +3 -3
- package/dist/{chunk-Q62GA5U2.js → chunk-VW5TGNJN.js} +2 -2
- package/dist/{chunk-Q62GA5U2.js.map → chunk-VW5TGNJN.js.map} +1 -1
- package/dist/chunk-VYDGHJIN.js +17 -0
- package/dist/chunk-VYDGHJIN.js.map +1 -0
- package/dist/{chunk-GWNSKQDA.js → chunk-W44T2KHG.js} +3 -3
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-MCMS4VUK.js → chunk-XIJHRQ4A.js} +14 -8
- package/dist/chunk-XIJHRQ4A.js.map +1 -0
- package/dist/{chunk-2HQPE2NM.js → chunk-XOCGC3FJ.js} +2 -2
- package/dist/chunk-YE4JBZO5.js +44 -0
- package/dist/chunk-YE4JBZO5.js.map +1 -0
- package/dist/{chunk-V2TOGJPM.js → chunk-YPB3Y57U.js} +14 -13
- package/dist/chunk-YPB3Y57U.js.map +1 -0
- package/dist/{chunk-ZZEIL3MI.js → chunk-YTV6J4T6.js} +2 -2
- package/dist/{chunk-ZZEIL3MI.js.map → chunk-YTV6J4T6.js.map} +1 -1
- package/dist/{chunk-IYIPXAIJ.js → chunk-ZBSP4BSN.js} +2 -2
- package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
- package/dist/{cli-CUlMlS2N.d.ts → cli-BfCl5kWD.d.ts} +5 -5
- package/dist/cli.d.ts +18 -15
- package/dist/cli.js +94 -84
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +13 -13
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +13 -13
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +9 -7
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +13 -13
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +14 -14
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +5 -4
- package/dist/contradiction/index.js +3 -3
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +16 -16
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +16 -16
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-config.d.ts +11 -1
- package/dist/deep-recall-config.js +6 -3
- package/dist/deep-recall-http-glue.d.ts +16 -13
- package/dist/deep-recall-http-glue.js +5 -5
- package/dist/deep-recall-mcp-tools.d.ts +16 -13
- package/dist/deep-recall-policy-llm.d.ts +3 -2
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-BDDjImQn.d.ts → dependency-propagation-delivery-CggS9BFT.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +13 -13
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +12 -11
- package/dist/explicit-capture.js +3 -3
- package/dist/external-wiki-access.d.ts +16 -13
- package/dist/external-wiki-access.js +49 -41
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +16 -13
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +3 -2
- package/dist/extraction-judge-telemetry.d.ts +3 -2
- package/dist/extraction-judge-training.d.ts +3 -2
- package/dist/extraction-judge.d.ts +3 -2
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-span-config.d.ts +2 -1
- package/dist/extraction-span-materialize.d.ts +2 -1
- package/dist/extraction.d.ts +3 -2
- package/dist/extraction.js +21 -21
- package/dist/fallback-llm-codex-subscription.d.ts +2 -1
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/{generic-recall-paths-CpDzNO_I.d.ts → generic-recall-paths-CoXPSnCw.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-CtmmCJoo.d.ts → index-fdw_oK5a.d.ts} +3 -3
- package/dist/index.d.ts +28 -25
- package/dist/index.js +183 -162
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +11 -11
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/{local-llm-DpXIvm6F.d.ts → local-llm-3-jtw52a.d.ts} +1 -1
- package/dist/local-llm-helpers.d.ts +3 -2
- package/dist/local-llm.d.ts +3 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +7 -209
- package/dist/location/index.js +68 -62
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +13 -13
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +15 -15
- package/dist/{maintenance-CNgoLsoM.d.ts → maintenance-DgeeH0a1.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +18 -15
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +16 -13
- package/dist/memory-subject.d.ts +16 -13
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +14 -14
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +4 -4
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +13 -13
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +5 -5
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +17 -17
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +29 -28
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +26 -26
- package/dist/{orchestrator-DT7ybIFz.d.ts → orchestrator-VXWKdatm.d.ts} +12 -10
- package/dist/orchestrator.d.ts +12 -11
- package/dist/orchestrator.js +115 -105
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-CgBEmHcz.d.ts → pipeline-CwXZBKR5.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +3 -2
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-C8P8fyiO.d.ts → public-http-B55s59aR.d.ts} +1 -1
- package/dist/{qmd-BkY8KpCh.d.ts → qmd-DOLTPIQg.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-budget.js +3 -13
- package/dist/recall-navigate-budget.js.map +1 -1
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +4 -23
- package/dist/recall-navigate-disclosure.js.map +1 -1
- package/dist/recall-navigate-traverse.js +4 -37
- package/dist/recall-navigate-traverse.js.map +1 -1
- package/dist/recall-navigate-window.js +4 -26
- package/dist/recall-navigate-window.js.map +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-config.d.ts +34 -0
- package/dist/recall-navigation-config.js +16 -0
- package/dist/recall-navigation-config.js.map +1 -0
- package/dist/recall-navigation-http-glue.d.ts +171 -0
- package/dist/recall-navigation-http-glue.js +9 -0
- package/dist/recall-navigation-http-glue.js.map +1 -0
- package/dist/recall-navigation-mcp-tools.d.ts +162 -0
- package/dist/recall-navigation-mcp-tools.js +8 -0
- package/dist/recall-navigation-mcp-tools.js.map +1 -0
- package/dist/recall-navigation-operations.d.ts +2 -0
- package/dist/recall-navigation-operations.js +245 -0
- package/dist/recall-navigation-operations.js.map +1 -0
- package/dist/recall-navigation-renderer.d.ts +36 -0
- package/dist/recall-navigation-renderer.js +8 -0
- package/dist/recall-navigation-renderer.js.map +1 -0
- package/dist/recall-navigation.d.ts +121 -0
- package/dist/recall-navigation.js +249 -0
- package/dist/recall-navigation.js.map +1 -0
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-state-view-admission.d.ts +3 -2
- package/dist/recall-state-view-admission.js +4 -4
- package/dist/recall-state-view-anchors.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +3 -2
- 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/plan.d.ts +2 -1
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolution-LXFQQ4AE.js +3 -3
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +10 -8
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/schemas.d.ts +2 -2
- package/dist/{scope-profiles-BBPjZ9jb.d.ts → scope-profiles-C564-hrv.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +3 -3
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +7 -7
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-BPFFVO84.d.ts → semantic-consolidation-g6x-ShY8.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +14 -14
- package/dist/semantic-rule-promotion.js +13 -13
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +13 -13
- package/dist/{service-jKcr6Jvr.d.ts → service-CaCOk0rd.d.ts} +13 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +20 -20
- package/dist/standup/build.js +14 -14
- package/dist/{storage-C-0Ah5OY.d.ts → storage-C9nsZX5Q.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +12 -12
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +19 -16
- package/dist/support-passport/index.js +51 -43
- package/dist/tagging-BA4RFdH3.d.ts +240 -0
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +13 -13
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-cK5LydjL.d.ts → types-Sps-lg5I.d.ts} +3 -2
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +13 -13
- package/dist/who-knows-cli.d.ts +16 -13
- package/dist/who-knows-cli.js +14 -14
- package/dist/who-knows.d.ts +16 -13
- package/dist/who-knows.js +13 -13
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +2 -0
- package/src/access-http.test.ts +1 -0
- package/src/access-http.ts +3 -3
- package/src/access-mcp-output-schemas.ts +30 -0
- package/src/access-mcp.ts +6 -9
- package/src/access-observe-write-category.ts +1 -0
- package/src/access-observe-write-surface.ts +3 -3
- package/src/access-operations-batch.ts +2 -2
- package/src/access-operations.ts +2 -0
- package/src/access-schema.ts +1 -0
- package/src/access-service.ts +17 -28
- package/src/access-surface-catalog.test.ts +30 -2
- package/src/access-surface-catalog.ts +4 -0
- package/src/cli/recall-navigation-commands.ts +85 -0
- package/src/cli.ts +2 -2
- package/src/config.ts +4 -0
- package/src/deep-recall-config.ts +32 -0
- package/src/index.ts +1 -2
- package/src/location/phase5-wiring.test.ts +408 -0
- package/src/location/tagging.ts +58 -0
- package/src/mcp-read-only-tools.ts +2 -0
- package/src/orchestration/orchestrator-helpers.ts +2 -0
- package/src/orchestration/recall-internal.ts +4 -4
- package/src/orchestration/workspace-ops.ts +14 -0
- package/src/recall-navigation-config.test.ts +56 -0
- package/src/recall-navigation-config.ts +107 -0
- package/src/recall-navigation-http-glue.ts +141 -0
- package/src/recall-navigation-mcp-tools.ts +60 -0
- package/src/recall-navigation-operations.ts +111 -0
- package/src/recall-navigation-renderer.ts +49 -0
- package/src/recall-navigation-surface.test.ts +474 -0
- package/src/recall-navigation.test.ts +405 -0
- package/src/recall-navigation.ts +429 -0
- package/src/recall-xray.ts +1 -1
- package/src/types.ts +2 -0
- package/src/wearables/pipeline.ts +19 -0
- package/src/wearables/service.ts +8 -0
- package/dist/chunk-7ZLC4DTZ.js.map +0 -1
- package/dist/chunk-DM5CU5J7.js.map +0 -1
- package/dist/chunk-EAARGPWI.js.map +0 -1
- package/dist/chunk-GMH5QPUU.js.map +0 -1
- package/dist/chunk-I46BYY7U.js.map +0 -1
- package/dist/chunk-MCMS4VUK.js.map +0 -1
- package/dist/chunk-N6XTC56E.js.map +0 -1
- package/dist/chunk-NYWCFC3K.js.map +0 -1
- package/dist/chunk-QVSRE355.js.map +0 -1
- package/dist/chunk-S4MJTIPG.js.map +0 -1
- package/dist/chunk-V2TOGJPM.js.map +0 -1
- package/dist/chunk-WN2OXGGH.js.map +0 -1
- package/dist/chunk-XRS65T4O.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{chunk-563X6JJX.js.map → chunk-2HDLDBJW.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-WBQ4ONQJ.js.map → chunk-2PIC6CEN.js.map} +0 -0
- /package/dist/{chunk-54QPOE45.js.map → chunk-2YIUUXNK.js.map} +0 -0
- /package/dist/{chunk-AKABVXFS.js.map → chunk-3254BYQV.js.map} +0 -0
- /package/dist/{chunk-XCPNH2MG.js.map → chunk-3KJTSCSX.js.map} +0 -0
- /package/dist/{chunk-I33QYUAF.js.map → chunk-3YQ7VLP3.js.map} +0 -0
- /package/dist/{chunk-JMWUPUE6.js.map → chunk-46FVFU7S.js.map} +0 -0
- /package/dist/{chunk-PFKIOYJH.js.map → chunk-4WMGRLTV.js.map} +0 -0
- /package/dist/{chunk-KLUC2GSG.js.map → chunk-5AJZ7EUW.js.map} +0 -0
- /package/dist/{chunk-Z7NBT6AK.js.map → chunk-6EGIQEKC.js.map} +0 -0
- /package/dist/{chunk-6MQMYXSQ.js.map → chunk-7F47R4H4.js.map} +0 -0
- /package/dist/{chunk-YFXAWGMR.js.map → chunk-7L54ARML.js.map} +0 -0
- /package/dist/{chunk-LVFI5LG7.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-EMSYMYXO.js.map → chunk-AKB44K3D.js.map} +0 -0
- /package/dist/{chunk-3BLHPQHT.js.map → chunk-BPXJINHW.js.map} +0 -0
- /package/dist/{chunk-D6PY63OM.js.map → chunk-BZDK5EOD.js.map} +0 -0
- /package/dist/{chunk-2J3V5QEO.js.map → chunk-C3QXITIP.js.map} +0 -0
- /package/dist/{chunk-PLJ2MQFT.js.map → chunk-C3YEB7CR.js.map} +0 -0
- /package/dist/{chunk-2ZG2LLZT.js.map → chunk-D7UUB33A.js.map} +0 -0
- /package/dist/{chunk-E3I3NDUP.js.map → chunk-DABSYX7V.js.map} +0 -0
- /package/dist/{chunk-KJLLPG26.js.map → chunk-DDGQDNQW.js.map} +0 -0
- /package/dist/{chunk-K5D2XVNN.js.map → chunk-F2FJTOV6.js.map} +0 -0
- /package/dist/{chunk-P66QH6R6.js.map → chunk-GKKLI23D.js.map} +0 -0
- /package/dist/{chunk-ICN37XHG.js.map → chunk-GMU7MAHS.js.map} +0 -0
- /package/dist/{chunk-PQ42DJNG.js.map → chunk-H2N6SLTR.js.map} +0 -0
- /package/dist/{chunk-ND7MAIJC.js.map → chunk-HKQAI6XI.js.map} +0 -0
- /package/dist/{chunk-C3G6MW4W.js.map → chunk-IB7FDRRC.js.map} +0 -0
- /package/dist/{chunk-WFMQN7JE.js.map → chunk-IWHNT35B.js.map} +0 -0
- /package/dist/{chunk-W7UV2ZCA.js.map → chunk-JDL5BYYF.js.map} +0 -0
- /package/dist/{chunk-5EQT62HH.js.map → chunk-KDLOKVX7.js.map} +0 -0
- /package/dist/{chunk-V62YYBBY.js.map → chunk-KORQWGUA.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-WZIO3TW6.js.map → chunk-KY75VZKG.js.map} +0 -0
- /package/dist/{chunk-4IGOLIWM.js.map → chunk-L63M2PE4.js.map} +0 -0
- /package/dist/{chunk-PGGPRF6J.js.map → chunk-LD22AAJI.js.map} +0 -0
- /package/dist/{chunk-A4OIJYCV.js.map → chunk-LUAQHDUI.js.map} +0 -0
- /package/dist/{chunk-DIXZQTGY.js.map → chunk-M6FKXOYV.js.map} +0 -0
- /package/dist/{chunk-Z535ADTC.js.map → chunk-M7H56FOQ.js.map} +0 -0
- /package/dist/{chunk-JSD7Q7LD.js.map → chunk-MOL7JK4F.js.map} +0 -0
- /package/dist/{chunk-ZX6NNFSY.js.map → chunk-OGAKUA7I.js.map} +0 -0
- /package/dist/{chunk-KZJM7R4F.js.map → chunk-PF7LQ22G.js.map} +0 -0
- /package/dist/{chunk-UZGHKD3T.js.map → chunk-PPDZSJXB.js.map} +0 -0
- /package/dist/{chunk-AUSRUOMQ.js.map → chunk-PW4HTWXL.js.map} +0 -0
- /package/dist/{chunk-LE2KZ72G.js.map → chunk-QCTXQ2HW.js.map} +0 -0
- /package/dist/{chunk-I3H5LFOI.js.map → chunk-QNJQCLI6.js.map} +0 -0
- /package/dist/{chunk-46RII65S.js.map → chunk-QUBPZQED.js.map} +0 -0
- /package/dist/{chunk-E4LMQTST.js.map → chunk-R3H2AXO2.js.map} +0 -0
- /package/dist/{chunk-XVDZFTN5.js.map → chunk-RFIJH2OE.js.map} +0 -0
- /package/dist/{chunk-BTPCP535.js.map → chunk-RJ7Z7YXK.js.map} +0 -0
- /package/dist/{chunk-TBXAY2SS.js.map → chunk-SGHGCFVV.js.map} +0 -0
- /package/dist/{chunk-AIVRD66I.js.map → chunk-T3F2HWIG.js.map} +0 -0
- /package/dist/{chunk-WPGA4RYI.js.map → chunk-UCLWIMVW.js.map} +0 -0
- /package/dist/{chunk-V2EXYQEQ.js.map → chunk-VHANUT45.js.map} +0 -0
- /package/dist/{chunk-AFJHNHAM.js.map → chunk-VJXMFBVR.js.map} +0 -0
- /package/dist/{chunk-FGFC2EFR.js.map → chunk-VKDXYEA6.js.map} +0 -0
- /package/dist/{chunk-GWNSKQDA.js.map → chunk-W44T2KHG.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-2HQPE2NM.js.map → chunk-XOCGC3FJ.js.map} +0 -0
- /package/dist/{chunk-IYIPXAIJ.js.map → chunk-ZBSP4BSN.js.map} +0 -0
- /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recall navigation (issue #1956) — session-scoped follow-up tools over
|
|
3
|
+
* already-served recall results.
|
|
4
|
+
*
|
|
5
|
+
* Composes existing primitives; owns no new storage and no new link types:
|
|
6
|
+
* - authority: the session's last `windowSnapshots` recall id sets
|
|
7
|
+
* (`RecallHandleHistoryStore`, the same ring `resolveMemoryHandle` reads)
|
|
8
|
+
* - isolation: every read resolves through the caller's resolved readable
|
|
9
|
+
* namespace and ONE storage instance (pattern 30 — no arbitrary-id
|
|
10
|
+
* fishing across namespaces)
|
|
11
|
+
* - disclosure: `planDisclosureStep` enforces strictly-deeper expansion;
|
|
12
|
+
* rendering reuses `shapeMemorySummary` (single formatter, rule 22)
|
|
13
|
+
* - links: frontmatter `links` via `selectTraverseNeighbors`
|
|
14
|
+
* - budget: per-call character cap drawn from the recall character budget,
|
|
15
|
+
* with per-item disclosure/token spend reported through the SAME
|
|
16
|
+
* disclosure accounting X-ray aggregates (`estimateRecallTokens` +
|
|
17
|
+
* `summarizeDisclosureTokens`).
|
|
18
|
+
*
|
|
19
|
+
* Unknown, expired (outside the window), or foreign ids are rejected with a
|
|
20
|
+
* typed error naming the constraint (pattern 39) — never reinterpreted.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { EngramAccessInputError, shapeMemorySummary, type EngramAccessMemorySummary } from "./access-service.js";
|
|
24
|
+
import { parseIdOrHandle, resolveHandle } from "./recall-handles.js";
|
|
25
|
+
import { takeNavigateBudget } from "./recall-navigate-budget.js";
|
|
26
|
+
import { estimateRecallTokens, summarizeDisclosureTokens, type RecallXrayDisclosureSummary } from "./recall-xray.js";
|
|
27
|
+
import { assertIdInNavigationWindow } from "./recall-navigate-window.js";
|
|
28
|
+
import { parseNavigateLinkType } from "./recall-navigate-link.js";
|
|
29
|
+
import { planDisclosureStep } from "./recall-navigate-disclosure.js";
|
|
30
|
+
import { selectTraverseNeighbors, DEFAULT_TRAVERSE_LIMIT, type TraverseNeighbor } from "./recall-navigate-traverse.js";
|
|
31
|
+
import { renderNavigationResult } from "./recall-navigation-renderer.js";
|
|
32
|
+
import type { RecallNavigationConfig } from "./recall-navigation-config.js";
|
|
33
|
+
import type { MemoryFile, RecallDisclosure } from "./types.js";
|
|
34
|
+
|
|
35
|
+
/** Navigation reads touch only these storage members. */
|
|
36
|
+
export type NavigationStorage = Pick<StorageManagerLike, "dir" | "getMemoryById" | "readMemoriesWindow">;
|
|
37
|
+
|
|
38
|
+
/** Structural stand-in so this module does not import StorageManager directly. */
|
|
39
|
+
interface StorageManagerLike {
|
|
40
|
+
dir: string;
|
|
41
|
+
getMemoryById(id: string): Promise<MemoryFile | null>;
|
|
42
|
+
readMemoriesWindow(options?: { maxMemories?: number }): Promise<{ memories: MemoryFile[] }>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Injected seams; the service supplies live wiring, tests supply doubles. */
|
|
46
|
+
export interface RecallNavigationDeps {
|
|
47
|
+
readonly config: RecallNavigationConfig;
|
|
48
|
+
/** Per-call character cap for the assembled response payload. */
|
|
49
|
+
readonly recallBudgetChars: number;
|
|
50
|
+
/** Served-id sets for a session, newest snapshot first. */
|
|
51
|
+
readonly recentServedIds: (sessionKey: string, depth: number) => ReadonlyArray<readonly string[]>;
|
|
52
|
+
readonly resolveReadableNamespace: (namespace: string | undefined, principal?: string) => string;
|
|
53
|
+
readonly getStorage: (namespace: string) => Promise<NavigationStorage>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type NavigationAction = "expand" | "traverse" | "entity_neighbors";
|
|
57
|
+
|
|
58
|
+
export interface RecallNavigationRequest {
|
|
59
|
+
readonly action: NavigationAction;
|
|
60
|
+
/** Memory id (or `[m:xxxx]` handle) served to this session's recent recalls. */
|
|
61
|
+
readonly memoryId: string;
|
|
62
|
+
/** Session whose recall window authorizes the id. Required. */
|
|
63
|
+
readonly sessionKey: string;
|
|
64
|
+
readonly namespace?: string;
|
|
65
|
+
readonly authenticatedPrincipal?: string;
|
|
66
|
+
/** expand: target depth. Must be strictly deeper than the chunk default. */
|
|
67
|
+
readonly disclosure?: RecallDisclosure;
|
|
68
|
+
/** traverse: optional relation filter. */
|
|
69
|
+
readonly relation?: string;
|
|
70
|
+
/** traverse / entity_neighbors: optional result cap. */
|
|
71
|
+
readonly limit?: number;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface NavigationItem {
|
|
75
|
+
readonly memoryId: string;
|
|
76
|
+
readonly path: string;
|
|
77
|
+
readonly disclosure: RecallDisclosure;
|
|
78
|
+
readonly estimatedTokens: number;
|
|
79
|
+
readonly preview: string;
|
|
80
|
+
/** Present when the disclosure level carries full content (expand). */
|
|
81
|
+
readonly content?: string;
|
|
82
|
+
/** Relation edge that produced this neighbor (traverse only). */
|
|
83
|
+
readonly linkType?: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export type RecallNavigationError =
|
|
87
|
+
| "disabled"
|
|
88
|
+
| "not_served"
|
|
89
|
+
| "not_found"
|
|
90
|
+
| "not_deeper"
|
|
91
|
+
| "unknown_level"
|
|
92
|
+
| "unknown_relation"
|
|
93
|
+
| "invalid_limit";
|
|
94
|
+
|
|
95
|
+
export type RecallNavigationResult =
|
|
96
|
+
| {
|
|
97
|
+
ok: true;
|
|
98
|
+
action: NavigationAction;
|
|
99
|
+
memoryId: string;
|
|
100
|
+
namespace: string;
|
|
101
|
+
items: NavigationItem[];
|
|
102
|
+
truncated: boolean;
|
|
103
|
+
budget: { chars: number; used: number };
|
|
104
|
+
disclosureSpend: RecallXrayDisclosureSummary;
|
|
105
|
+
rendered: string;
|
|
106
|
+
}
|
|
107
|
+
| {
|
|
108
|
+
ok: false;
|
|
109
|
+
action: NavigationAction;
|
|
110
|
+
error: RecallNavigationError;
|
|
111
|
+
message: string;
|
|
112
|
+
rendered: string;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
function toNavigationItem(
|
|
116
|
+
summary: EngramAccessMemorySummary,
|
|
117
|
+
extras: { linkType?: string } = {},
|
|
118
|
+
): NavigationItem {
|
|
119
|
+
const item: {
|
|
120
|
+
memoryId: string;
|
|
121
|
+
path: string;
|
|
122
|
+
disclosure: RecallDisclosure;
|
|
123
|
+
estimatedTokens: number;
|
|
124
|
+
preview: string;
|
|
125
|
+
content?: string;
|
|
126
|
+
linkType?: string;
|
|
127
|
+
} = {
|
|
128
|
+
memoryId: summary.id,
|
|
129
|
+
path: summary.path,
|
|
130
|
+
disclosure: summary.disclosure ?? "chunk",
|
|
131
|
+
estimatedTokens: estimateRecallTokens(summary.content ?? summary.preview),
|
|
132
|
+
preview: summary.preview,
|
|
133
|
+
};
|
|
134
|
+
if (summary.content !== undefined) item.content = summary.content;
|
|
135
|
+
if (extras.linkType !== undefined) item.linkType = extras.linkType;
|
|
136
|
+
return item;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Greedy fill against JSON.stringify of the structured result (no rendered). */
|
|
140
|
+
function applyBudget(
|
|
141
|
+
request: RecallNavigationRequest,
|
|
142
|
+
extras: { memoryId: string; namespace: string; items: NavigationItem[]; truncated: boolean; budgetChars: number },
|
|
143
|
+
): { items: NavigationItem[]; truncated: boolean; used: number } {
|
|
144
|
+
const kept: NavigationItem[] = [];
|
|
145
|
+
let truncated = extras.truncated;
|
|
146
|
+
for (const item of extras.items) {
|
|
147
|
+
const candidate = [...kept, item];
|
|
148
|
+
const cost = structuredCost(request, extras, candidate, truncated);
|
|
149
|
+
if (!takeNavigateBudget(extras.budgetChars, cost).ok) {
|
|
150
|
+
if (kept.length === 0) {
|
|
151
|
+
const shrunk = shrinkItemToBudget(request, extras, item);
|
|
152
|
+
if (shrunk !== undefined) {
|
|
153
|
+
return finalizeBudget(request, extras, [shrunk], true);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
truncated = true;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
kept.push(item);
|
|
160
|
+
}
|
|
161
|
+
return finalizeBudget(request, extras, kept, truncated);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function finalizeBudget(
|
|
165
|
+
request: RecallNavigationRequest,
|
|
166
|
+
extras: { memoryId: string; namespace: string; budgetChars: number },
|
|
167
|
+
items: NavigationItem[],
|
|
168
|
+
truncated: boolean,
|
|
169
|
+
): { items: NavigationItem[]; truncated: boolean; used: number } {
|
|
170
|
+
let kept = items;
|
|
171
|
+
let flag = truncated;
|
|
172
|
+
let used = measuredUsed(request, extras, kept, flag);
|
|
173
|
+
while (used > extras.budgetChars && kept.length > 0) {
|
|
174
|
+
kept = kept.slice(0, -1);
|
|
175
|
+
flag = true;
|
|
176
|
+
used = measuredUsed(request, extras, kept, flag);
|
|
177
|
+
}
|
|
178
|
+
return { items: kept, truncated: flag, used };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function structuredBody(
|
|
182
|
+
request: RecallNavigationRequest,
|
|
183
|
+
extras: { memoryId: string; namespace: string; budgetChars: number },
|
|
184
|
+
items: NavigationItem[],
|
|
185
|
+
truncated: boolean,
|
|
186
|
+
used: number,
|
|
187
|
+
) {
|
|
188
|
+
return {
|
|
189
|
+
ok: true as const,
|
|
190
|
+
action: request.action,
|
|
191
|
+
memoryId: extras.memoryId,
|
|
192
|
+
namespace: extras.namespace,
|
|
193
|
+
items,
|
|
194
|
+
truncated,
|
|
195
|
+
budget: { chars: extras.budgetChars, used },
|
|
196
|
+
disclosureSpend: summarizeDisclosureTokens(
|
|
197
|
+
items.map((item) => ({ disclosure: item.disclosure, estimatedTokens: item.estimatedTokens })),
|
|
198
|
+
),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function structuredCost(
|
|
203
|
+
request: RecallNavigationRequest,
|
|
204
|
+
extras: { memoryId: string; namespace: string; budgetChars: number },
|
|
205
|
+
items: NavigationItem[],
|
|
206
|
+
truncated: boolean,
|
|
207
|
+
used = 0,
|
|
208
|
+
): number {
|
|
209
|
+
return JSON.stringify(structuredBody(request, extras, items, truncated, used)).length;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function measuredUsed(
|
|
213
|
+
request: RecallNavigationRequest,
|
|
214
|
+
extras: { memoryId: string; namespace: string; budgetChars: number },
|
|
215
|
+
items: NavigationItem[],
|
|
216
|
+
truncated: boolean,
|
|
217
|
+
): number {
|
|
218
|
+
return structuredCost(request, extras, items, truncated, structuredCost(request, extras, items, truncated));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function shrinkItemToBudget(
|
|
222
|
+
request: RecallNavigationRequest,
|
|
223
|
+
extras: { memoryId: string; namespace: string; budgetChars: number },
|
|
224
|
+
item: NavigationItem,
|
|
225
|
+
): NavigationItem | undefined {
|
|
226
|
+
let preview = item.preview;
|
|
227
|
+
let content = item.content ?? "";
|
|
228
|
+
const hasContent = item.content !== undefined;
|
|
229
|
+
while (preview.length > 0 || content.length > 0) {
|
|
230
|
+
const candidate: NavigationItem = hasContent
|
|
231
|
+
? { ...item, preview, content }
|
|
232
|
+
: { ...item, preview };
|
|
233
|
+
if (takeNavigateBudget(extras.budgetChars, structuredCost(request, extras, [candidate], true)).ok) {
|
|
234
|
+
return candidate;
|
|
235
|
+
}
|
|
236
|
+
if (content.length > 0) content = content.slice(0, Math.max(0, content.length - 16));
|
|
237
|
+
else preview = preview.slice(0, Math.max(0, preview.length - 16));
|
|
238
|
+
}
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function errorResult(
|
|
243
|
+
request: RecallNavigationRequest,
|
|
244
|
+
error: RecallNavigationError,
|
|
245
|
+
message: string,
|
|
246
|
+
): RecallNavigationResult {
|
|
247
|
+
return { ok: false, action: request.action, error, message, rendered: renderNavigationResult({ ok: false, action: request.action, error, message }) };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function successResult(
|
|
251
|
+
request: RecallNavigationRequest,
|
|
252
|
+
extras: { memoryId: string; namespace: string; items: NavigationItem[]; truncated: boolean; budgetChars: number },
|
|
253
|
+
): RecallNavigationResult {
|
|
254
|
+
const budgeted = applyBudget(request, extras);
|
|
255
|
+
const result = structuredBody(request, extras, budgeted.items, budgeted.truncated, budgeted.used);
|
|
256
|
+
return { ...result, rendered: renderNavigationResult(result) };
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function resolveRequestedMemoryId(
|
|
260
|
+
request: RecallNavigationRequest,
|
|
261
|
+
snapshots: ReadonlyArray<readonly string[]>,
|
|
262
|
+
windowSnapshots: number,
|
|
263
|
+
): { ok: true; memoryId: string } | { ok: false } {
|
|
264
|
+
const parsed = parseIdOrHandle(request.memoryId);
|
|
265
|
+
if (!parsed.isHandle) return { ok: true, memoryId: parsed.value };
|
|
266
|
+
const resolved = resolveHandle(
|
|
267
|
+
request.memoryId,
|
|
268
|
+
snapshots.map((memoryIds) => ({ memoryIds })),
|
|
269
|
+
windowSnapshots,
|
|
270
|
+
);
|
|
271
|
+
if (resolved.ok) return { ok: true, memoryId: resolved.memoryId };
|
|
272
|
+
if (resolved.reason === "ambiguous") {
|
|
273
|
+
throw new EngramAccessInputError(
|
|
274
|
+
`Memory handle ${request.memoryId} is ambiguous in session ${request.sessionKey}: ${resolved.candidates.join(", ")}. Cite a unique memory id instead.`,
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
return { ok: false };
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function clampLimit(requested: number | undefined, ceiling: number): number {
|
|
281
|
+
if (requested === undefined) return Math.min(DEFAULT_TRAVERSE_LIMIT, ceiling);
|
|
282
|
+
if (!Number.isInteger(requested) || requested < 1) {
|
|
283
|
+
throw new EngramAccessInputError(
|
|
284
|
+
`memory navigation: limit must be a positive integer; got ${JSON.stringify(requested)}`,
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
return Math.min(requested, ceiling);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Run one navigation step. Throws {@link EngramAccessInputError} for caller
|
|
292
|
+
* faults (missing sessionKey, malformed limit); returns typed errors for
|
|
293
|
+
* domain refusals so MCP/HTTP/CLI render the constraint instead of a stack.
|
|
294
|
+
*/
|
|
295
|
+
export async function runRecallNavigation(
|
|
296
|
+
deps: RecallNavigationDeps,
|
|
297
|
+
request: RecallNavigationRequest,
|
|
298
|
+
): Promise<RecallNavigationResult> {
|
|
299
|
+
if (!deps.config.enabled) {
|
|
300
|
+
return errorResult(request, "disabled", "memory navigation is disabled; set recallNavigation.enabled");
|
|
301
|
+
}
|
|
302
|
+
const sessionKey = request.sessionKey?.trim() ?? "";
|
|
303
|
+
if (sessionKey.length === 0) {
|
|
304
|
+
throw new EngramAccessInputError(
|
|
305
|
+
"memory navigation requires a sessionKey: navigation authority is scoped to the session's recent recalls",
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
if (request.limit !== undefined) {
|
|
309
|
+
// Validate at the seam so every surface reports the same fault.
|
|
310
|
+
clampLimit(request.limit, deps.config.maxNeighbors);
|
|
311
|
+
}
|
|
312
|
+
const windowSnapshots = deps.config.windowSnapshots;
|
|
313
|
+
const servedIds = deps.recentServedIds(sessionKey, windowSnapshots);
|
|
314
|
+
const resolved = resolveRequestedMemoryId(request, servedIds, windowSnapshots);
|
|
315
|
+
if (!resolved.ok) {
|
|
316
|
+
return errorResult(
|
|
317
|
+
request,
|
|
318
|
+
"not_served",
|
|
319
|
+
`memory ${request.memoryId} was not served to session ${sessionKey} within the last ${windowSnapshots} recall snapshots; run recall first`,
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
const authority = assertIdInNavigationWindow({
|
|
323
|
+
snapshots: servedIds.map((ids) => ({ servedIds: ids })),
|
|
324
|
+
memoryId: resolved.memoryId,
|
|
325
|
+
windowSnapshots,
|
|
326
|
+
});
|
|
327
|
+
if (!authority.ok) {
|
|
328
|
+
return errorResult(
|
|
329
|
+
request,
|
|
330
|
+
"not_served",
|
|
331
|
+
`memory ${request.memoryId} was not served to session ${sessionKey} within the last ${windowSnapshots} recall snapshots; run recall first`,
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
const memoryId = authority.memoryId;
|
|
335
|
+
const namespace = deps.resolveReadableNamespace(request.namespace, request.authenticatedPrincipal);
|
|
336
|
+
const storage = await deps.getStorage(namespace);
|
|
337
|
+
const memory = await storage.getMemoryById(memoryId);
|
|
338
|
+
if (!memory) {
|
|
339
|
+
return errorResult(
|
|
340
|
+
request,
|
|
341
|
+
"not_found",
|
|
342
|
+
`memory ${memoryId} was not found in namespace ${namespace}; navigation never crosses the resolved namespace`,
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (request.action === "expand") {
|
|
347
|
+
const target = request.disclosure ?? "raw";
|
|
348
|
+
const step = planDisclosureStep({ from: "chunk", to: target });
|
|
349
|
+
if (!step.ok) {
|
|
350
|
+
const message =
|
|
351
|
+
step.error === "unknown_level"
|
|
352
|
+
? `unknown disclosure level ${JSON.stringify(target)}; valid: chunk, section, raw`
|
|
353
|
+
: `disclosure ${JSON.stringify(target)} is not deeper than the chunk level already served; expansion must go deeper (chunk → section → raw)`;
|
|
354
|
+
return errorResult(request, step.error, message);
|
|
355
|
+
}
|
|
356
|
+
const summary = shapeMemorySummary(memory, storage.dir, target);
|
|
357
|
+
return successResult(request, {
|
|
358
|
+
memoryId,
|
|
359
|
+
namespace,
|
|
360
|
+
items: [toNavigationItem(summary)],
|
|
361
|
+
truncated: false,
|
|
362
|
+
budgetChars: deps.recallBudgetChars,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (request.action === "traverse") {
|
|
367
|
+
if (request.relation !== undefined) {
|
|
368
|
+
const parsedRelation = parseNavigateLinkType(request.relation);
|
|
369
|
+
if (!parsedRelation.ok) {
|
|
370
|
+
return errorResult(
|
|
371
|
+
request,
|
|
372
|
+
"unknown_relation",
|
|
373
|
+
`unknown relation ${JSON.stringify(request.relation)}; valid: supports, contradicts, elaborates, causes, caused_by, supersedes, follows, references, related`,
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
const links: TraverseNeighbor[] = (memory.frontmatter.links ?? []).map((link) => ({
|
|
378
|
+
targetId: link.targetId,
|
|
379
|
+
linkType: link.linkType,
|
|
380
|
+
}));
|
|
381
|
+
const selection = selectTraverseNeighbors({
|
|
382
|
+
links,
|
|
383
|
+
relation: request.relation,
|
|
384
|
+
limit: clampLimit(request.limit, deps.config.maxNeighbors),
|
|
385
|
+
});
|
|
386
|
+
if (!selection.ok) {
|
|
387
|
+
return errorResult(request, selection.error, `traverse refused: ${selection.error}`);
|
|
388
|
+
}
|
|
389
|
+
const items: NavigationItem[] = [];
|
|
390
|
+
for (const neighbor of selection.neighbors) {
|
|
391
|
+
// Neighbors resolve through the SAME namespace storage: a link pointing
|
|
392
|
+
// at a memory in another namespace simply is not found here, so a stale
|
|
393
|
+
// or foreign edge can never leak content across namespaces.
|
|
394
|
+
const neighborMemory = await storage.getMemoryById(neighbor.targetId);
|
|
395
|
+
if (!neighborMemory) continue;
|
|
396
|
+
items.push(toNavigationItem(shapeMemorySummary(neighborMemory, storage.dir, "chunk"), { linkType: neighbor.linkType }));
|
|
397
|
+
}
|
|
398
|
+
return successResult(request, {
|
|
399
|
+
memoryId,
|
|
400
|
+
namespace,
|
|
401
|
+
items,
|
|
402
|
+
truncated: selection.truncated,
|
|
403
|
+
budgetChars: deps.recallBudgetChars,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// entity_neighbors: memories sharing the source memory's entityRef, capped
|
|
408
|
+
// by limit, rendered at chunk depth. No entityRef → no neighbors (empty is
|
|
409
|
+
// an honest answer, not an error).
|
|
410
|
+
const entityRef = memory.frontmatter.entityRef?.trim();
|
|
411
|
+
if (!entityRef) {
|
|
412
|
+
return successResult(request, { memoryId, namespace, items: [], truncated: false, budgetChars: deps.recallBudgetChars });
|
|
413
|
+
}
|
|
414
|
+
const window = await storage.readMemoriesWindow();
|
|
415
|
+
const candidates: NavigationItem[] = [];
|
|
416
|
+
for (const candidate of window.memories) {
|
|
417
|
+
if (candidate.frontmatter.id === memoryId) continue;
|
|
418
|
+
if (candidate.frontmatter.entityRef?.trim() !== entityRef) continue;
|
|
419
|
+
candidates.push(toNavigationItem(shapeMemorySummary(candidate, storage.dir, "chunk")));
|
|
420
|
+
if (candidates.length >= clampLimit(request.limit, deps.config.maxNeighbors)) break;
|
|
421
|
+
}
|
|
422
|
+
return successResult(request, {
|
|
423
|
+
memoryId,
|
|
424
|
+
namespace,
|
|
425
|
+
items: candidates,
|
|
426
|
+
truncated: false,
|
|
427
|
+
budgetChars: deps.recallBudgetChars,
|
|
428
|
+
});
|
|
429
|
+
}
|
package/src/recall-xray.ts
CHANGED
|
@@ -631,7 +631,7 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
|
|
|
631
631
|
* "per-disclosure token spend" line and exposed for tests / surfaces.
|
|
632
632
|
*/
|
|
633
633
|
export function summarizeDisclosureTokens(
|
|
634
|
-
results: ReadonlyArray<RecallXrayResult
|
|
634
|
+
results: ReadonlyArray<Pick<RecallXrayResult, "disclosure" | "estimatedTokens">>,
|
|
635
635
|
): RecallXrayDisclosureSummary {
|
|
636
636
|
const summary: RecallXrayDisclosureSummary = {
|
|
637
637
|
chunk: { count: 0, estimatedTokens: 0 },
|
package/src/types.ts
CHANGED
|
@@ -21,6 +21,7 @@ import type {
|
|
|
21
21
|
RecallDriftAnnotation,
|
|
22
22
|
} from "./preferences/drift-types.js";
|
|
23
23
|
import type { DeepRecallSettings } from "./deep-recall-config.js";
|
|
24
|
+
import type { RecallNavigationSettings } from "./recall-navigation-config.js";
|
|
24
25
|
import type { ProceduralMaintenanceConfig } from "./procedural/maintenance-config.js";
|
|
25
26
|
import type { SkillProjectionConfig } from "./procedural/skill-projection.js";
|
|
26
27
|
import type { ActionGateConfig } from "./coding/action-gate.js";
|
|
@@ -693,6 +694,7 @@ export interface PluginConfig
|
|
|
693
694
|
DriftDetectionSettings,
|
|
694
695
|
ActiveContextConfigFields,
|
|
695
696
|
DeepRecallSettings,
|
|
697
|
+
RecallNavigationSettings,
|
|
696
698
|
LocalLlmConfig {
|
|
697
699
|
openaiApiKey: string | undefined;
|
|
698
700
|
openaiBaseUrl: string | undefined;
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* write for the run has succeeded.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { fillWearableConversationLocations } from "../location/tagging.js";
|
|
18
19
|
import { cleanConversation } from "./cleanup.js";
|
|
19
20
|
import { describeErrorForOperator, WearablesInputError } from "./errors.js";
|
|
20
21
|
import {
|
|
@@ -50,6 +51,7 @@ import {
|
|
|
50
51
|
saveSyncState,
|
|
51
52
|
updateSourceSyncState,
|
|
52
53
|
} from "./sync-state.js";
|
|
54
|
+
import type { LocationConfig } from "../location/types.js";
|
|
53
55
|
import type {
|
|
54
56
|
WearableConversation,
|
|
55
57
|
WearableSourceConnector,
|
|
@@ -122,6 +124,11 @@ export interface WearableSyncDeps {
|
|
|
122
124
|
listSupportMemories?(): Promise<Array<{ id: string; content: string }>>;
|
|
123
125
|
/** Clock injection for tests. */
|
|
124
126
|
now?: () => Date;
|
|
127
|
+
/**
|
|
128
|
+
* Location config for the missing-only conversation location fill
|
|
129
|
+
* (issue #2925). Absent, or location tagging disabled, changes nothing.
|
|
130
|
+
*/
|
|
131
|
+
locationConfig?: LocationConfig;
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
/** Format a Date as YYYY-MM-DD in the given IANA timezone. */
|
|
@@ -382,6 +389,18 @@ export async function syncWearableSource(
|
|
|
382
389
|
summary.redactions += cleaned.redactions;
|
|
383
390
|
summary.correctionsApplied += cleaned.correctionsApplied;
|
|
384
391
|
|
|
392
|
+
// Missing-only location fill (issue #2925): run before the body is
|
|
393
|
+
// composed so a qualifying dominant-overlap place reaches the day
|
|
394
|
+
// transcript and memory headers exactly like a provider-supplied
|
|
395
|
+
// location would. Source-provided values are never overwritten, and
|
|
396
|
+
// the helper no-ops unless both location gates are on.
|
|
397
|
+
if (deps.locationConfig) {
|
|
398
|
+
await fillWearableConversationLocations(cleaned.conversations, {
|
|
399
|
+
memoryDir: deps.memoryDir,
|
|
400
|
+
config: deps.locationConfig,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
|
|
385
404
|
if (fetched.conversations.length === 0) {
|
|
386
405
|
// No provider data at all. A transient provider hiccup can
|
|
387
406
|
// legitimately produce an empty result, so an existing stored
|
package/src/wearables/service.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from "./corrections.js";
|
|
14
14
|
import { describeErrorForOperator, WearablesInputError } from "./errors.js";
|
|
15
15
|
import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
|
|
16
|
+
import type { LocationConfig } from "../location/types.js";
|
|
16
17
|
import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
|
|
17
18
|
import {
|
|
18
19
|
bodyIsEscaped,
|
|
@@ -143,6 +144,12 @@ export interface WearablesServiceDeps {
|
|
|
143
144
|
* fails the sync.
|
|
144
145
|
*/
|
|
145
146
|
onDaysSynced?: (days: readonly string[]) => void | Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Location config for the missing-only conversation location fill
|
|
149
|
+
* (issue #2925). Absent changes nothing; the fill itself stays gated
|
|
150
|
+
* on the location tagging flags.
|
|
151
|
+
*/
|
|
152
|
+
locationConfig?: LocationConfig;
|
|
146
153
|
}
|
|
147
154
|
|
|
148
155
|
export interface WearableTranscriptSearchResult {
|
|
@@ -351,6 +358,7 @@ export class WearablesService {
|
|
|
351
358
|
options,
|
|
352
359
|
{
|
|
353
360
|
memoryDir: storage.dir,
|
|
361
|
+
locationConfig: this.deps.locationConfig,
|
|
354
362
|
readDayContentHash: async (source, date) => {
|
|
355
363
|
const raw = await storage.readWearableDayTranscript(source, date);
|
|
356
364
|
if (raw === null) return null;
|