@remnic/core 9.54.4 → 9.54.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +24 -23
- package/dist/access-admin-ops-surface.js +55 -50
- package/dist/access-authorization-probe.d.ts +25 -22
- package/dist/access-authorization-probe.js +58 -51
- package/dist/access-boundary.d.ts +26 -23
- package/dist/access-boundary.js +59 -52
- package/dist/access-cli.js +115 -107
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +19 -18
- package/dist/access-extraction-force-flush.js +55 -50
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +22 -21
- package/dist/access-http-lifecycle-flush.d.ts +22 -21
- package/dist/access-http-offline-stream.d.ts +19 -18
- package/dist/access-http-query.js +55 -50
- package/dist/access-http.d.ts +55 -36
- package/dist/access-http.js +76 -65
- package/dist/access-identity-continuity-surface.d.ts +9 -9
- package/dist/access-identity-continuity-surface.js +55 -50
- package/dist/access-lcm-surface.d.ts +21 -20
- package/dist/access-lcm-surface.js +55 -50
- package/dist/access-mcp.d.ts +22 -21
- package/dist/access-mcp.js +63 -57
- package/dist/access-memory-search-fanout.d.ts +22 -2
- package/dist/access-memory-search-fanout.js +1 -1
- package/dist/{access-namespace-preflight-C7n4tgWC.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +55 -50
- package/dist/access-observe-write-surface.d.ts +22 -21
- package/dist/access-observe-write-surface.js +55 -50
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-offline-manifest.js +12 -10
- package/dist/access-operations-batch.js +57 -52
- package/dist/access-operations.d.ts +23 -22
- package/dist/access-operations.js +61 -55
- package/dist/access-recall-concurrency.d.ts +21 -20
- package/dist/access-recall-concurrency.js +55 -50
- package/dist/access-recall-response.d.ts +19 -18
- package/dist/access-recall-response.js +55 -50
- package/dist/access-recall-surface.d.ts +19 -18
- package/dist/access-recall-surface.js +55 -50
- package/dist/access-schema.d.ts +2 -2
- package/dist/access-schema.js +5 -4
- package/dist/{access-service-CXvbxLK-.d.ts → access-service-DkSdXK4S.d.ts} +1314 -83
- package/dist/access-service-helpers.d.ts +22 -21
- package/dist/access-service.d.ts +31 -30
- package/dist/access-service.js +55 -50
- package/dist/access-surface-catalog.d.ts +22 -21
- package/dist/access-surface-catalog.js +209 -2
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +14 -1
- package/dist/active-memory-bridge.js +6 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +4 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/admin-console/public/what-helps-me/app.js +1594 -0
- package/dist/admin-console/public/what-helps-me/index.html +339 -0
- package/dist/admin-console/public/what-helps-me/model.js +685 -0
- package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +9 -9
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +33 -12
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +3 -3
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-BOOxl-I2.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +34 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-ZYLC7NFO.js → chunk-26ZXBTYN.js} +4 -4
- package/dist/chunk-26ZXBTYN.js.map +1 -0
- package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
- package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
- package/dist/chunk-2LWQSV6A.js.map +1 -0
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/chunk-37DZZFFM.js +502 -0
- package/dist/chunk-37DZZFFM.js.map +1 -0
- package/dist/chunk-3HSRWJTC.js +9 -0
- package/dist/chunk-3HSRWJTC.js.map +1 -0
- package/dist/{chunk-XUAMCLY4.js → chunk-3TIZPSJC.js} +17 -13
- package/dist/chunk-3TIZPSJC.js.map +1 -0
- package/dist/{chunk-PDDTI7IC.js → chunk-43SEBY2M.js} +1 -1
- package/dist/{chunk-HWRD23DW.js → chunk-46SZBVDS.js} +3 -3
- package/dist/{chunk-6HPHEFXT.js → chunk-5FD7JMTX.js} +2 -2
- package/dist/{chunk-7BZOBA5J.js → chunk-5NB726GV.js} +70 -16
- package/dist/chunk-5NB726GV.js.map +1 -0
- package/dist/chunk-62OKGIJA.js +39 -0
- package/dist/chunk-62OKGIJA.js.map +1 -0
- package/dist/{chunk-IBKR2TFR.js → chunk-6CYHUWCO.js} +2 -2
- package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
- package/dist/{chunk-UU3G6GUP.js → chunk-76JJSXK7.js} +1 -1
- package/dist/chunk-76JJSXK7.js.map +1 -0
- package/dist/{chunk-PX2LSHYM.js → chunk-7BD6O7ZV.js} +189 -4
- package/dist/chunk-7BD6O7ZV.js.map +1 -0
- package/dist/chunk-7TBXNYLO.js +346 -0
- package/dist/chunk-7TBXNYLO.js.map +1 -0
- package/dist/{chunk-NH5IR2WM.js → chunk-BRR5EUTF.js} +6 -2
- package/dist/chunk-BRR5EUTF.js.map +1 -0
- package/dist/{chunk-NIS256NW.js → chunk-CIAI24TQ.js} +3 -3
- package/dist/{chunk-T2JHZWH6.js → chunk-D3LBIUWV.js} +11703 -7573
- package/dist/chunk-D3LBIUWV.js.map +1 -0
- package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
- package/dist/{chunk-G7Z6EENO.js → chunk-EKTP7MNS.js} +4 -4
- package/dist/{chunk-S75M5ZRK.js → chunk-F2JRDPON.js} +16 -1
- package/dist/chunk-F2JRDPON.js.map +1 -0
- package/dist/{chunk-RZ4XGKOJ.js → chunk-FFRTNF3L.js} +8 -8
- package/dist/{chunk-VKXWK44Q.js → chunk-FONWBCVY.js} +3 -3
- package/dist/{chunk-DZD576ZU.js → chunk-FPLM2TKD.js} +2 -2
- package/dist/{chunk-ZPJ4QSGP.js → chunk-FTPONF6B.js} +2 -2
- package/dist/{chunk-LJS7KUPV.js → chunk-FWX7W5PM.js} +2 -2
- package/dist/{chunk-UTRO5UJU.js → chunk-G6DFSS6A.js} +5 -1
- package/dist/chunk-G6DFSS6A.js.map +1 -0
- package/dist/{chunk-6LAPLZOS.js → chunk-GJ776BC2.js} +8 -3
- package/dist/chunk-GJ776BC2.js.map +1 -0
- package/dist/{chunk-G4T7L557.js → chunk-GN3WRFJY.js} +6 -6
- package/dist/{chunk-QT2FRYI4.js → chunk-H7NAZ3UB.js} +2 -2
- package/dist/{chunk-APPFNGX6.js → chunk-HBUFQRIM.js} +2 -2
- package/dist/{chunk-UU7TRFNE.js → chunk-HGJ6NJ4E.js} +2 -2
- package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
- package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
- package/dist/{chunk-UES4BHA2.js → chunk-I3MSGFGD.js} +17 -6
- package/dist/chunk-I3MSGFGD.js.map +1 -0
- package/dist/{chunk-C4ZNGVK3.js → chunk-IKP5OYQQ.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
- package/dist/{chunk-RDJRFDJY.js → chunk-IQ4NVWEF.js} +2 -2
- package/dist/{chunk-CGVHPCP2.js → chunk-JYG4OLWH.js} +2 -2
- package/dist/{chunk-WOPA3SGI.js → chunk-K26NWEOC.js} +8 -8
- package/dist/{chunk-K4QS7LXU.js → chunk-K2UGPTYY.js} +485 -44
- package/dist/chunk-K2UGPTYY.js.map +1 -0
- package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
- package/dist/chunk-KFBOPMF6.js.map +1 -0
- package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
- package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
- package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
- package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
- package/dist/chunk-LC2BDILZ.js +57 -0
- package/dist/chunk-LC2BDILZ.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-6R4G7N4S.js → chunk-M4YHAODQ.js} +388 -748
- package/dist/chunk-M4YHAODQ.js.map +1 -0
- package/dist/{chunk-3JLPGJ43.js → chunk-MIH3CJPN.js} +5 -5
- package/dist/{chunk-QHFV6VNU.js → chunk-MK5VEWCR.js} +2 -2
- package/dist/chunk-NISZQW72.js +140 -0
- package/dist/chunk-NISZQW72.js.map +1 -0
- package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
- package/dist/{chunk-G2LUMAUF.js → chunk-OCIP6YMD.js} +12 -5
- package/dist/chunk-OCIP6YMD.js.map +1 -0
- package/dist/{chunk-47P3RYZP.js → chunk-PG4QBPVG.js} +21 -11
- package/dist/chunk-PG4QBPVG.js.map +1 -0
- package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
- package/dist/{chunk-QWGE2PUH.js → chunk-PT54WISF.js} +190 -56
- package/dist/chunk-PT54WISF.js.map +1 -0
- package/dist/{chunk-AZM4CCAC.js → chunk-QZLDRQ4I.js} +8 -8
- package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
- package/dist/{chunk-JDZPNCMA.js → chunk-RUNORG2P.js} +6 -3
- package/dist/chunk-RUNORG2P.js.map +1 -0
- package/dist/{chunk-JV5YUBIZ.js → chunk-RZQ6W2W4.js} +50 -44
- package/dist/chunk-RZQ6W2W4.js.map +1 -0
- package/dist/{chunk-RUMNY5DT.js → chunk-SMNYAMJD.js} +6 -2
- package/dist/chunk-SMNYAMJD.js.map +1 -0
- package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
- package/dist/chunk-TB6CBZ5V.js.map +1 -0
- package/dist/{chunk-VMMQDEN5.js → chunk-TO7ZTWJW.js} +2 -2
- package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
- package/dist/{chunk-HLYR2TQL.js → chunk-UCTS3DDH.js} +2 -2
- package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
- package/dist/{chunk-WM65LU67.js → chunk-UKYS3NU5.js} +2 -2
- package/dist/{chunk-WDBX6VER.js → chunk-UPLZNJKN.js} +5 -5
- package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
- package/dist/chunk-UW5NPZJ2.js.map +1 -0
- package/dist/{chunk-2GFK22OZ.js → chunk-V6ERBR7U.js} +2 -2
- package/dist/{chunk-CYF6WVE7.js → chunk-W5ZKPI34.js} +139 -158
- package/dist/chunk-W5ZKPI34.js.map +1 -0
- package/dist/chunk-XX4HPFFM.js +370 -0
- package/dist/chunk-XX4HPFFM.js.map +1 -0
- package/dist/{chunk-ZMYDYNI4.js → chunk-XZHE2DEN.js} +4 -4
- package/dist/chunk-YXQEKCZM.js +223 -0
- package/dist/chunk-YXQEKCZM.js.map +1 -0
- package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
- package/dist/chunk-Z4N7SVVF.js.map +1 -0
- package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
- package/dist/{chunk-YGLY6QFV.js → chunk-ZRZVLB7O.js} +2 -2
- package/dist/{chunk-4IIFL7GC.js → chunk-ZUKIUXHQ.js} +10 -10
- package/dist/{cli-DVUFIa5E.d.ts → cli-Bze8S0Qs.d.ts} +5 -5
- package/dist/cli.d.ts +22 -21
- package/dist/cli.js +90 -80
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +33 -12
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +4 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +33 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +32 -12
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +3 -1
- package/dist/contradiction-scan-JDTBXRGW.js +20 -0
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +35 -14
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +25 -24
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +33 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -9
- package/dist/explicit-capture.js +7 -4
- package/dist/external-wiki-access.d.ts +22 -21
- package/dist/external-wiki-access.js +56 -51
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +22 -21
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-faithfulness.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +35 -19
- package/dist/fallback-llm.d.ts +14 -1
- package/dist/fallback-llm.js +1 -1
- package/dist/{first-start-migration-626C5554.js → first-start-migration-CRZCZAJN.js} +11 -3
- package/dist/first-start-migration-CRZCZAJN.js.map +1 -0
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +314 -308
- package/dist/index.js +304 -133
- package/dist/inline-script.d.ts +3 -0
- package/dist/inline-script.js +8 -0
- package/dist/inline-script.js.map +1 -0
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +6 -6
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +33 -12
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -12
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +34 -13
- package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +22 -21
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-mutations.js +2 -2
- package/dist/memory-projection-store.d.ts +6 -2
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +24 -23
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +33 -12
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-file-io.d.ts +20 -0
- package/dist/offline-sync-file-io.js +18 -0
- package/dist/offline-sync-file-io.js.map +1 -0
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +5 -5
- package/dist/offline-sync.d.ts +8 -6
- package/dist/offline-sync.js +2 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +26 -25
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +39 -36
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +38 -18
- package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-D85CzDDY.d.ts} +11 -8
- package/dist/orchestrator.d.ts +9 -9
- package/dist/orchestrator.js +117 -109
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/public-http-D-SyWNj6.d.ts +25 -0
- package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
- package/dist/{qmd-eAWObK4M.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-planner-llm.js +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/manifest.js +6 -5
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/reconcile/plan.js +3 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +5 -3
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/schemas.d.ts +38 -38
- package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +6 -6
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +34 -13
- package/dist/semantic-rule-promotion.js +33 -12
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +33 -12
- package/dist/{service-DIrtHHEg.d.ts → service-DT-pJyda.d.ts} +660 -660
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +31 -15
- package/dist/{storage-DqCzXi56.d.ts → storage-qOnaJ1Lw.d.ts} +49 -13
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +33 -12
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +518 -0
- package/dist/support-passport/index.js +357 -0
- package/dist/support-passport/index.js.map +1 -0
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +2 -2
- package/dist/tier-routing.js +7 -1
- package/dist/{tier-stats-2JCZYEF7.js → tier-stats-EXYSKSVN.js} +8 -2
- package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-EXYSKSVN.js.map} +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/types.d.ts +36 -36
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-d_j4vC6N.d.ts → types-ed-SvS2t.d.ts} +8 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -2
- package/dist/verified-recall.js +33 -12
- package/dist/write-envelope.d.ts +1 -1
- package/dist/write-rate-limiter.d.ts +11 -5
- package/dist/write-rate-limiter.js +1 -1
- package/package.json +12 -2
- package/scripts/build-with-heap.mjs +11 -1
- package/src/access-authorization-probe.ts +20 -2
- package/src/access-boundary.ts +32 -0
- package/src/access-http.test.ts +1971 -643
- package/src/access-http.ts +81 -74
- package/src/access-mcp.ts +3 -1
- package/src/access-memory-search-fanout.ts +24 -1
- package/src/access-offline-manifest.ts +5 -0
- package/src/access-operations.ts +2 -0
- package/src/access-service-namespace.test.ts +14 -0
- package/src/access-service-observe-scope.test.ts +2 -0
- package/src/access-service-offline-file-content.test.ts +211 -0
- package/src/access-service.ts +628 -884
- package/src/access-surface-catalog.test.ts +40 -10
- package/src/access-surface-catalog.ts +15 -0
- package/src/active-memory-bridge.test.ts +151 -0
- package/src/active-memory-bridge.ts +95 -21
- package/src/briefing.test.ts +38 -0
- package/src/briefing.ts +3 -3
- package/src/cli.ts +6 -1
- package/src/config.ts +18 -9
- package/src/connectors/codex-materialize-runner.ts +2 -0
- package/src/contradiction/contradiction-scan.ts +2 -0
- package/src/contradiction/contradiction.test.ts +42 -0
- package/src/correction/correction-access-wiring.ts +8 -2
- package/src/correction/correction-storage-integration.test.ts +7 -0
- package/src/explicit-capture.test.ts +24 -0
- package/src/explicit-capture.ts +2 -0
- package/src/fallback-llm.test.ts +54 -0
- package/src/fallback-llm.ts +54 -9
- package/src/index.ts +3 -0
- package/src/inline-script.ts +6 -0
- package/src/local-llm-headers-timeout.test.ts +42 -0
- package/src/local-llm.ts +8 -8
- package/src/maintenance/first-start-migration.ts +2 -1
- package/src/maintenance/memory-governance.test.ts +25 -0
- package/src/maintenance/memory-governance.ts +4 -1
- package/src/maintenance/pattern-reinforcement.test.ts +20 -0
- package/src/maintenance/pattern-reinforcement.ts +2 -1
- package/src/maintenance/rebuild-memory-projection.ts +8 -8
- package/src/mcp-read-only-tools.ts +3 -0
- package/src/memory-projection-store.ts +25 -27
- package/src/offline-sync-file-io.ts +68 -0
- package/src/offline-sync.ts +43 -57
- package/src/orchestration/consolidation-run.ts +5 -4
- package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
- package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
- package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
- package/src/orchestration/qmd-result-resolver.test.ts +215 -14
- package/src/orchestration/qmd-result-resolver.ts +142 -82
- package/src/orchestration/recall-search-pipeline.test.ts +41 -0
- package/src/orchestration/recall-search-pipeline.ts +12 -0
- package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
- package/src/orchestration/tier-migration-coordinator.ts +23 -56
- package/src/orchestration/workspace-ops.test.ts +37 -0
- package/src/orchestration/workspace-ops.ts +5 -29
- package/src/orchestrator.ts +7 -8
- package/src/relay/mission-access.test.ts +11 -11
- package/src/relay/mission-ui.test.ts +3 -1
- package/src/storage/supersession-audit.ts +7 -1
- package/src/storage/supersession-side-effects.ts +17 -5
- package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
- package/src/storage-contract/failure-semantics.test.ts +102 -0
- package/src/storage.ts +18 -19
- package/src/support-passport/access-http-base.ts +143 -0
- package/src/support-passport/access-http.ts +172 -0
- package/src/support-passport/access-operations.ts +272 -0
- package/src/support-passport/access-service-base.test.ts +193 -0
- package/src/support-passport/access-service-base.ts +176 -0
- package/src/support-passport/access-surface.test.ts +283 -0
- package/src/support-passport/access-surface.ts +286 -0
- package/src/support-passport/card-projection.test.ts +137 -0
- package/src/support-passport/card-projection.ts +348 -0
- package/src/support-passport/card-replacement.ts +126 -0
- package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
- package/src/support-passport/card-service.test.ts +2964 -0
- package/src/support-passport/card-service.ts +1184 -0
- package/src/support-passport/card-state.ts +158 -0
- package/src/support-passport/config-model-routing.test.ts +37 -0
- package/src/support-passport/config.test.ts +34 -0
- package/src/support-passport/config.ts +41 -0
- package/src/support-passport/contracts.test.ts +156 -0
- package/src/support-passport/contracts.ts +149 -0
- package/src/support-passport/errors.ts +30 -0
- package/src/support-passport/generated-batch.test.ts +185 -0
- package/src/support-passport/generated-batch.ts +338 -0
- package/src/support-passport/grant-contracts.ts +183 -0
- package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
- package/src/support-passport/grant-service-cache.test.ts +148 -0
- package/src/support-passport/grant-service-cancellation.test.ts +83 -0
- package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
- package/src/support-passport/grant-service.test.ts +3496 -0
- package/src/support-passport/grant-service.ts +513 -0
- package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
- package/src/support-passport/grant-store-order.test.ts +60 -0
- package/src/support-passport/grant-store-path-safety.test.ts +30 -0
- package/src/support-passport/grant-store-recovery.test.ts +448 -0
- package/src/support-passport/grant-store.ts +906 -0
- package/src/support-passport/index.ts +17 -0
- package/src/support-passport/mcp-tools.test.ts +222 -0
- package/src/support-passport/mcp-tools.ts +187 -0
- package/src/support-passport/model-adapter.test.ts +840 -0
- package/src/support-passport/model-adapter.ts +602 -0
- package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
- package/src/support-passport/model-audit.ts +152 -0
- package/src/support-passport/model-bridge.test.ts +456 -0
- package/src/support-passport/model-bridge.ts +439 -0
- package/src/support-passport/model-contracts.ts +124 -0
- package/src/support-passport/model-service.test.ts +1731 -0
- package/src/support-passport/model-service.ts +399 -0
- package/src/support-passport/offline-sync-guard.ts +230 -0
- package/src/support-passport/owner-http.test.ts +671 -0
- package/src/support-passport/owner-lock.ts +70 -0
- package/src/support-passport/private-file.test.ts +99 -0
- package/src/support-passport/private-file.ts +498 -0
- package/src/support-passport/public-http.test.ts +476 -0
- package/src/support-passport/public-http.ts +601 -0
- package/src/support-passport/ui.test.ts +181 -0
- package/src/tier-routing.ts +28 -17
- package/src/training-export/converter.test.ts +24 -0
- package/src/training-export/converter.ts +2 -0
- package/src/types.ts +8 -1
- package/src/wearables/service.test.ts +13 -0
- package/src/wearables/service.ts +2 -0
- package/src/write-rate-limiter.test.ts +30 -6
- package/src/write-rate-limiter.ts +29 -18
- package/dist/chunk-3CSX3ETE.js.map +0 -1
- package/dist/chunk-47P3RYZP.js.map +0 -1
- package/dist/chunk-6LAPLZOS.js.map +0 -1
- package/dist/chunk-6R4G7N4S.js.map +0 -1
- package/dist/chunk-7BZOBA5J.js.map +0 -1
- package/dist/chunk-C23BYTJV.js.map +0 -1
- package/dist/chunk-CYF6WVE7.js.map +0 -1
- package/dist/chunk-G2LUMAUF.js.map +0 -1
- package/dist/chunk-GYPQL6XN.js.map +0 -1
- package/dist/chunk-JDZPNCMA.js.map +0 -1
- package/dist/chunk-JV5YUBIZ.js.map +0 -1
- package/dist/chunk-K4QS7LXU.js.map +0 -1
- package/dist/chunk-L6CQ7WIW.js.map +0 -1
- package/dist/chunk-MKQBXQKU.js.map +0 -1
- package/dist/chunk-NH5IR2WM.js.map +0 -1
- package/dist/chunk-PX2LSHYM.js.map +0 -1
- package/dist/chunk-QWGE2PUH.js.map +0 -1
- package/dist/chunk-RUMNY5DT.js.map +0 -1
- package/dist/chunk-S75M5ZRK.js.map +0 -1
- package/dist/chunk-T2JHZWH6.js.map +0 -1
- package/dist/chunk-UES4BHA2.js.map +0 -1
- package/dist/chunk-UTRO5UJU.js.map +0 -1
- package/dist/chunk-UU3G6GUP.js.map +0 -1
- package/dist/chunk-XUAMCLY4.js.map +0 -1
- package/dist/chunk-ZYLC7NFO.js.map +0 -1
- package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
- package/dist/first-start-migration-626C5554.js.map +0 -1
- /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
- /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-PDDTI7IC.js.map → chunk-43SEBY2M.js.map} +0 -0
- /package/dist/{chunk-HWRD23DW.js.map → chunk-46SZBVDS.js.map} +0 -0
- /package/dist/{chunk-6HPHEFXT.js.map → chunk-5FD7JMTX.js.map} +0 -0
- /package/dist/{chunk-IBKR2TFR.js.map → chunk-6CYHUWCO.js.map} +0 -0
- /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
- /package/dist/{chunk-NIS256NW.js.map → chunk-CIAI24TQ.js.map} +0 -0
- /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
- /package/dist/{chunk-G7Z6EENO.js.map → chunk-EKTP7MNS.js.map} +0 -0
- /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-FFRTNF3L.js.map} +0 -0
- /package/dist/{chunk-VKXWK44Q.js.map → chunk-FONWBCVY.js.map} +0 -0
- /package/dist/{chunk-DZD576ZU.js.map → chunk-FPLM2TKD.js.map} +0 -0
- /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-FTPONF6B.js.map} +0 -0
- /package/dist/{chunk-LJS7KUPV.js.map → chunk-FWX7W5PM.js.map} +0 -0
- /package/dist/{chunk-G4T7L557.js.map → chunk-GN3WRFJY.js.map} +0 -0
- /package/dist/{chunk-QT2FRYI4.js.map → chunk-H7NAZ3UB.js.map} +0 -0
- /package/dist/{chunk-APPFNGX6.js.map → chunk-HBUFQRIM.js.map} +0 -0
- /package/dist/{chunk-UU7TRFNE.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
- /package/dist/{chunk-C4ZNGVK3.js.map → chunk-IKP5OYQQ.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
- /package/dist/{chunk-RDJRFDJY.js.map → chunk-IQ4NVWEF.js.map} +0 -0
- /package/dist/{chunk-CGVHPCP2.js.map → chunk-JYG4OLWH.js.map} +0 -0
- /package/dist/{chunk-WOPA3SGI.js.map → chunk-K26NWEOC.js.map} +0 -0
- /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
- /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-3JLPGJ43.js.map → chunk-MIH3CJPN.js.map} +0 -0
- /package/dist/{chunk-QHFV6VNU.js.map → chunk-MK5VEWCR.js.map} +0 -0
- /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
- /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
- /package/dist/{chunk-AZM4CCAC.js.map → chunk-QZLDRQ4I.js.map} +0 -0
- /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
- /package/dist/{chunk-VMMQDEN5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
- /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
- /package/dist/{chunk-HLYR2TQL.js.map → chunk-UCTS3DDH.js.map} +0 -0
- /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
- /package/dist/{chunk-WM65LU67.js.map → chunk-UKYS3NU5.js.map} +0 -0
- /package/dist/{chunk-WDBX6VER.js.map → chunk-UPLZNJKN.js.map} +0 -0
- /package/dist/{chunk-2GFK22OZ.js.map → chunk-V6ERBR7U.js.map} +0 -0
- /package/dist/{chunk-ZMYDYNI4.js.map → chunk-XZHE2DEN.js.map} +0 -0
- /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{chunk-YGLY6QFV.js.map → chunk-ZRZVLB7O.js.map} +0 -0
- /package/dist/{chunk-4IIFL7GC.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
- /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
- /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
|
@@ -7,6 +7,7 @@ import { RECALL_FALLBACK_DIRS } from "../utils/category-dir.js";
|
|
|
7
7
|
import { bumpMemoryCorpusVersionForDir } from "../memory-corpus-version.js";
|
|
8
8
|
import { assertPathInsideRoot } from "../utils/path-containment.js";
|
|
9
9
|
import { requestEntityCanonicalIdReconcile } from "../storage/entity-canonical-id-references.js";
|
|
10
|
+
import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
|
|
10
11
|
|
|
11
12
|
export type MemoryGovernanceMode = "shadow" | "apply";
|
|
12
13
|
export type MemoryGovernanceReasonCode =
|
|
@@ -830,7 +831,9 @@ export async function runMemoryGovernance(
|
|
|
830
831
|
updatedAfter,
|
|
831
832
|
})
|
|
832
833
|
: undefined;
|
|
833
|
-
const memories =
|
|
834
|
+
const memories = excludeSupportPassportPrivateMemories(
|
|
835
|
+
memoryWindow?.memories ?? await storage.readAllMemories(),
|
|
836
|
+
);
|
|
834
837
|
const reviewQueue = await buildReviewQueue(options.memoryDir, storage, memories, now, {
|
|
835
838
|
malformedCandidateFiles: memoryWindow?.filePaths,
|
|
836
839
|
});
|
|
@@ -328,6 +328,26 @@ test("runPatternReinforcement: skips out-of-scope categories", async () => {
|
|
|
328
328
|
assert.equal(writes.length, 0);
|
|
329
329
|
});
|
|
330
330
|
|
|
331
|
+
test("runPatternReinforcement: excludes support-passport private records", async () => {
|
|
332
|
+
const content = "Give me advance notice before plans change.";
|
|
333
|
+
const passport = makeMemory({
|
|
334
|
+
id: "passport-card",
|
|
335
|
+
content,
|
|
336
|
+
tags: ["support-passport-card"],
|
|
337
|
+
});
|
|
338
|
+
const publicPreference = makeMemory({ id: "public-preference", content });
|
|
339
|
+
const { stub, writes } = makeStorageStub([passport, publicPreference]);
|
|
340
|
+
|
|
341
|
+
const result = await runPatternReinforcement(stub, {
|
|
342
|
+
categories: ["preference"],
|
|
343
|
+
minCount: 2,
|
|
344
|
+
now: frozenNow,
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
assert.equal(result.clustersFound, 0);
|
|
348
|
+
assert.deepEqual(writes, []);
|
|
349
|
+
});
|
|
350
|
+
|
|
331
351
|
test("runPatternReinforcement: counts both active and already-superseded members; only writes to active duplicates", async () => {
|
|
332
352
|
const dupContent = "mixed status cluster";
|
|
333
353
|
const memories = [
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
import { clusterByKey } from "../procedural/reinforcement-core.js";
|
|
36
36
|
import { buildRetiredFactTombstoneInputs, type TombstoneReason, type TombstoneCreatedBy } from "../lifecycle/tombstones.js";
|
|
37
37
|
import { supersessionKeysForFact } from "../temporal-supersession.js";
|
|
38
|
+
import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
|
|
38
39
|
import type {
|
|
39
40
|
MemoryFile,
|
|
40
41
|
MemoryFrontmatter,
|
|
@@ -225,7 +226,7 @@ export async function runPatternReinforcement(
|
|
|
225
226
|
return emptyResult();
|
|
226
227
|
}
|
|
227
228
|
|
|
228
|
-
const memories = await storage.readAllMemories();
|
|
229
|
+
const memories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
229
230
|
|
|
230
231
|
// Cluster across BOTH active and already-superseded memories so a
|
|
231
232
|
// canonical that has previously absorbed duplicates still gets
|
|
@@ -44,6 +44,7 @@ import {
|
|
|
44
44
|
} from "../memory-projection-format.js";
|
|
45
45
|
import { openBetterSqlite3 } from "../runtime/better-sqlite.js";
|
|
46
46
|
import { commitPreparedFileAtomically } from "./atomic-file.js";
|
|
47
|
+
import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
|
|
47
48
|
|
|
48
49
|
export interface RebuildMemoryProjectionOptions {
|
|
49
50
|
memoryDir: string;
|
|
@@ -204,6 +205,7 @@ function toCurrentStateRow(memoryDir: string, memory: MemoryFile): MemoryProject
|
|
|
204
205
|
lastAccessed: memory.frontmatter.lastAccessed,
|
|
205
206
|
tags: normalizeProjectionTags(memory.frontmatter.tags),
|
|
206
207
|
preview: normalizeProjectionPreview(memory.content),
|
|
208
|
+
privateRecord: isSupportPassportPrivateMemory(memory),
|
|
207
209
|
};
|
|
208
210
|
}
|
|
209
211
|
|
|
@@ -406,6 +408,7 @@ function serializeCurrentStateRow(row: MemoryProjectionCurrentState): string {
|
|
|
406
408
|
lastAccessed: row.lastAccessed ?? null,
|
|
407
409
|
tags: row.tags ?? [],
|
|
408
410
|
preview: row.preview ?? "",
|
|
411
|
+
privateRecord: row.privateRecord === true,
|
|
409
412
|
});
|
|
410
413
|
}
|
|
411
414
|
|
|
@@ -691,8 +694,7 @@ function readProjectedCurrentRows(
|
|
|
691
694
|
memory_kind,
|
|
692
695
|
access_count,
|
|
693
696
|
last_accessed,
|
|
694
|
-
${selectExpressions.tagsJson},
|
|
695
|
-
${selectExpressions.previewText}
|
|
697
|
+
${selectExpressions.tagsJson}, ${selectExpressions.previewText}, ${selectExpressions.privateRecord}
|
|
696
698
|
FROM memory_current
|
|
697
699
|
`).all() as Array<Record<string, unknown>>;
|
|
698
700
|
|
|
@@ -788,9 +790,8 @@ function writeProjectionDb(
|
|
|
788
790
|
memory_kind,
|
|
789
791
|
access_count,
|
|
790
792
|
last_accessed,
|
|
791
|
-
tags_json,
|
|
792
|
-
|
|
793
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
793
|
+
tags_json, preview_text, private_record
|
|
794
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
794
795
|
`);
|
|
795
796
|
|
|
796
797
|
const insertTimeline = db.prepare(`
|
|
@@ -899,9 +900,8 @@ function writeProjectionDb(
|
|
|
899
900
|
row.confidenceTier,
|
|
900
901
|
row.memoryKind ?? null,
|
|
901
902
|
row.accessCount ?? null,
|
|
902
|
-
row.lastAccessed ?? null,
|
|
903
|
-
|
|
904
|
-
row.preview ?? "",
|
|
903
|
+
row.lastAccessed ?? null, JSON.stringify(row.tags ?? []), row.preview ?? "",
|
|
904
|
+
row.privateRecord === true ? 1 : 0,
|
|
905
905
|
);
|
|
906
906
|
}
|
|
907
907
|
|
|
@@ -61,4 +61,7 @@ export const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {
|
|
|
61
61
|
codegraph_get_snippet: true,
|
|
62
62
|
codegraph_get_architecture: true,
|
|
63
63
|
codegraph_search_code: true,
|
|
64
|
+
support_passport_memory_preview: true,
|
|
65
|
+
support_passport_cards_list: true,
|
|
66
|
+
support_passport_grants_list: true,
|
|
64
67
|
};
|
|
@@ -20,12 +20,11 @@ import {
|
|
|
20
20
|
type BetterSqlite3Database,
|
|
21
21
|
} from "./runtime/better-sqlite.js";
|
|
22
22
|
|
|
23
|
-
export const MEMORY_PROJECTION_SCHEMA_VERSION =
|
|
23
|
+
export const MEMORY_PROJECTION_SCHEMA_VERSION = 4;
|
|
24
24
|
|
|
25
25
|
export interface ProjectedMemoryBrowseOptions {
|
|
26
|
-
query?: string;
|
|
27
|
-
|
|
28
|
-
category?: string;
|
|
26
|
+
query?: string; status?: string; category?: string;
|
|
27
|
+
excludeTags?: readonly string[]; excludePrivateRecords?: boolean;
|
|
29
28
|
sort?: "updated_desc" | "updated_asc" | "created_desc" | "created_asc";
|
|
30
29
|
limit: number;
|
|
31
30
|
offset: number;
|
|
@@ -154,15 +153,15 @@ function migrateProjectionSchemaIfNeeded(memoryDir: string): void {
|
|
|
154
153
|
}
|
|
155
154
|
|
|
156
155
|
export function memoryCurrentSelectExpressions(db: BetterSqlite3Database): {
|
|
157
|
-
tagsJson: string;
|
|
158
|
-
|
|
159
|
-
hasPathValid: boolean;
|
|
156
|
+
tagsJson: string; previewText: string; hasPathValid: boolean;
|
|
157
|
+
privateRecord: string; hasPrivateRecord: boolean;
|
|
160
158
|
} {
|
|
161
159
|
const columns = listTableColumns(db, "memory_current");
|
|
162
160
|
return {
|
|
163
161
|
tagsJson: columns.has("tags_json") ? "tags_json" : `'[]' AS tags_json`,
|
|
164
|
-
previewText: columns.has("preview_text") ? "preview_text" : `'' AS preview_text`,
|
|
165
|
-
|
|
162
|
+
previewText: columns.has("preview_text") ? "preview_text" : `'' AS preview_text`, hasPathValid: columns.has("path_valid"),
|
|
163
|
+
privateRecord: columns.has("private_record") ? "private_record" : "0 AS private_record",
|
|
164
|
+
hasPrivateRecord: columns.has("private_record"),
|
|
166
165
|
};
|
|
167
166
|
}
|
|
168
167
|
|
|
@@ -192,7 +191,8 @@ export function initializeMemoryProjectionDb(db: BetterSqlite3Database): void {
|
|
|
192
191
|
access_count INTEGER,
|
|
193
192
|
last_accessed TEXT,
|
|
194
193
|
tags_json TEXT NOT NULL DEFAULT '[]',
|
|
195
|
-
preview_text TEXT NOT NULL DEFAULT ''
|
|
194
|
+
preview_text TEXT NOT NULL DEFAULT '',
|
|
195
|
+
private_record INTEGER NOT NULL DEFAULT 0 CHECK (private_record IN (0, 1))
|
|
196
196
|
);
|
|
197
197
|
|
|
198
198
|
CREATE INDEX IF NOT EXISTS idx_memory_current_status
|
|
@@ -428,6 +428,7 @@ const REQUIRED_MEMORY_CURRENT_COLUMNS = [
|
|
|
428
428
|
"created_at",
|
|
429
429
|
"updated_at",
|
|
430
430
|
"entity_ref",
|
|
431
|
+
"private_record",
|
|
431
432
|
] as const;
|
|
432
433
|
|
|
433
434
|
function assertProjectionSchemaReadable(db: BetterSqlite3Database): void {
|
|
@@ -698,6 +699,7 @@ export function parseCurrentRow(
|
|
|
698
699
|
lastAccessed: typeof row.last_accessed === "string" ? row.last_accessed : undefined,
|
|
699
700
|
tags: parseStringArray(row.tags_json),
|
|
700
701
|
preview: typeof row.preview_text === "string" ? row.preview_text : "",
|
|
702
|
+
privateRecord: row.private_record === 1,
|
|
701
703
|
};
|
|
702
704
|
}
|
|
703
705
|
|
|
@@ -760,7 +762,8 @@ export function readProjectedMemoryState(
|
|
|
760
762
|
access_count,
|
|
761
763
|
last_accessed,
|
|
762
764
|
${currentSelect.tagsJson},
|
|
763
|
-
${currentSelect.previewText}
|
|
765
|
+
${currentSelect.previewText},
|
|
766
|
+
${currentSelect.privateRecord}
|
|
764
767
|
FROM memory_current
|
|
765
768
|
WHERE memory_id = ?
|
|
766
769
|
`,
|
|
@@ -820,38 +823,33 @@ export function readProjectedMemoryBrowse(
|
|
|
820
823
|
): ProjectedMemoryBrowsePage | null {
|
|
821
824
|
return withProjectionReadonly(memoryDir, (db) => {
|
|
822
825
|
const normalizedQuery = options.query?.trim().toLowerCase() ?? "";
|
|
823
|
-
|
|
824
826
|
const currentSelect = memoryCurrentSelectExpressions(db);
|
|
827
|
+
if ((options.excludeTags?.length ?? 0) > 0 && currentSelect.tagsJson.startsWith("'[]'"))
|
|
828
|
+
throw new Error("tag exclusions require tags_json");
|
|
829
|
+
if (options.excludePrivateRecords && !currentSelect.hasPrivateRecord)
|
|
830
|
+
throw new Error("private-record exclusions require private_record");
|
|
825
831
|
const whereClauses: string[] = [];
|
|
826
832
|
const params: unknown[] = [];
|
|
827
|
-
|
|
828
|
-
if (options.
|
|
829
|
-
|
|
830
|
-
|
|
833
|
+
if (options.status) { whereClauses.push("status = ?"); params.push(options.status); }
|
|
834
|
+
if (options.category) { whereClauses.push("category = ?"); params.push(options.category); }
|
|
835
|
+
for (const tag of options.excludeTags ?? []) {
|
|
836
|
+
whereClauses.push("NOT EXISTS (SELECT 1 FROM json_each(memory_current.tags_json) WHERE value = ?)");
|
|
837
|
+
params.push(tag);
|
|
831
838
|
}
|
|
832
|
-
if (options.
|
|
833
|
-
whereClauses.push("category = ?");
|
|
834
|
-
params.push(options.category);
|
|
835
|
-
}
|
|
836
|
-
const sort = options.sort ?? "updated_desc";
|
|
839
|
+
if (options.excludePrivateRecords) whereClauses.push("private_record = 0");
|
|
837
840
|
const orderBySql = (() => {
|
|
838
|
-
switch (sort) {
|
|
841
|
+
switch (options.sort ?? "updated_desc") {
|
|
839
842
|
case "updated_asc":
|
|
840
843
|
return "updated_at ASC, created_at ASC, memory_id ASC";
|
|
841
844
|
case "created_desc":
|
|
842
845
|
return "created_at DESC, updated_at DESC, memory_id ASC";
|
|
843
846
|
case "created_asc":
|
|
844
847
|
return "created_at ASC, updated_at ASC, memory_id ASC";
|
|
845
|
-
case "updated_desc":
|
|
846
848
|
default:
|
|
847
849
|
return "updated_at DESC, created_at DESC, memory_id ASC";
|
|
848
850
|
}
|
|
849
851
|
})();
|
|
850
|
-
const whereSql = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
|
|
851
|
-
|
|
852
852
|
if (normalizedQuery) {
|
|
853
|
-
// Full-content search still examines every eligible row so totals and
|
|
854
|
-
// matches stay exact, but iteration keeps memory use proportional to the page.
|
|
855
853
|
const queryWhereClauses = currentSelect.hasPathValid
|
|
856
854
|
? [...whereClauses, ...projectedBrowsePathSqlClauses(), "path_valid = 1"]
|
|
857
855
|
: whereClauses;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReadStream } from "node:fs";
|
|
3
|
+
import { open } from "node:fs/promises";
|
|
4
|
+
import { MAGIC_HEADER_SIZE, isEncryptedFile } from "./secure-store/secure-fs.js";
|
|
5
|
+
|
|
6
|
+
export interface OfflineSyncFileTarget {
|
|
7
|
+
root: string;
|
|
8
|
+
path: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type OfflineSyncExcludeFile = (target: OfflineSyncFileTarget) => boolean | Promise<boolean>;
|
|
13
|
+
|
|
14
|
+
function throwIfAborted(signal: AbortSignal | undefined): void {
|
|
15
|
+
if (signal?.aborted) throw new Error("offline sync request aborted");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function shouldExcludeOfflineSyncFile(
|
|
19
|
+
excludeFile: OfflineSyncExcludeFile | undefined,
|
|
20
|
+
target: OfflineSyncFileTarget
|
|
21
|
+
): Promise<boolean> {
|
|
22
|
+
return excludeFile ? await excludeFile(target) : false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function sha256OfflineSyncFile(
|
|
26
|
+
filePath: string,
|
|
27
|
+
signal?: AbortSignal
|
|
28
|
+
): Promise<{ sha256: string; bytes: number }> {
|
|
29
|
+
const hash = createHash("sha256");
|
|
30
|
+
let bytes = 0;
|
|
31
|
+
for await (const chunk of createReadStream(filePath)) {
|
|
32
|
+
throwIfAborted(signal);
|
|
33
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
34
|
+
hash.update(buffer);
|
|
35
|
+
bytes += buffer.length;
|
|
36
|
+
}
|
|
37
|
+
throwIfAborted(signal);
|
|
38
|
+
return { sha256: hash.digest("hex"), bytes };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function isEncryptedOfflineSyncFile(filePath: string): Promise<boolean> {
|
|
42
|
+
const handle = await open(filePath, "r");
|
|
43
|
+
try {
|
|
44
|
+
const header = Buffer.alloc(MAGIC_HEADER_SIZE);
|
|
45
|
+
const { bytesRead } = await handle.read(header, 0, header.length, 0);
|
|
46
|
+
return bytesRead >= MAGIC_HEADER_SIZE && isEncryptedFile(header);
|
|
47
|
+
} finally {
|
|
48
|
+
await handle.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function readPlainOfflineSyncFileChunk(options: {
|
|
53
|
+
filePath: string;
|
|
54
|
+
offset: number;
|
|
55
|
+
length: number;
|
|
56
|
+
bytes: number;
|
|
57
|
+
}): Promise<Buffer> {
|
|
58
|
+
const chunkBytes = Math.min(options.length, options.bytes - options.offset);
|
|
59
|
+
const chunk = Buffer.alloc(chunkBytes);
|
|
60
|
+
if (chunkBytes === 0) return chunk;
|
|
61
|
+
const handle = await open(options.filePath, "r");
|
|
62
|
+
try {
|
|
63
|
+
const { bytesRead } = await handle.read(chunk, 0, chunk.length, options.offset);
|
|
64
|
+
return bytesRead === chunk.length ? chunk : chunk.subarray(0, bytesRead);
|
|
65
|
+
} finally {
|
|
66
|
+
await handle.close();
|
|
67
|
+
}
|
|
68
|
+
}
|
package/src/offline-sync.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
-
import { createReadStream } from "node:fs";
|
|
3
2
|
import {
|
|
4
3
|
lstat,
|
|
5
4
|
mkdir,
|
|
@@ -17,7 +16,6 @@ import path from "node:path";
|
|
|
17
16
|
import {
|
|
18
17
|
DEFAULT_TRANSFER_EXCLUDE_DIRS,
|
|
19
18
|
} from "./transfer/exclusions.js";
|
|
20
|
-
import { isEncryptedFile, MAGIC_HEADER_SIZE } from "./secure-store/secure-fs.js";
|
|
21
19
|
import {
|
|
22
20
|
prepareSafeArchiveRoot,
|
|
23
21
|
resolveSafeArchiveTarget,
|
|
@@ -27,6 +25,16 @@ import {
|
|
|
27
25
|
} from "./transfer/fs-utils.js";
|
|
28
26
|
import { parseFlexibleIsoTimestamp } from "./utils/iso-timestamp.js";
|
|
29
27
|
import { DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS } from "./offline-sync-exclude-globs.js";
|
|
28
|
+
import {
|
|
29
|
+
isEncryptedOfflineSyncFile,
|
|
30
|
+
readPlainOfflineSyncFileChunk,
|
|
31
|
+
sha256OfflineSyncFile,
|
|
32
|
+
shouldExcludeOfflineSyncFile,
|
|
33
|
+
type OfflineSyncExcludeFile,
|
|
34
|
+
type OfflineSyncFileTarget,
|
|
35
|
+
} from "./offline-sync-file-io.js";
|
|
36
|
+
|
|
37
|
+
export type { OfflineSyncExcludeFile, OfflineSyncFileTarget } from "./offline-sync-file-io.js";
|
|
30
38
|
|
|
31
39
|
export const OFFLINE_SYNC_SNAPSHOT_FORMAT = "remnic.offline-sync.snapshot.v1";
|
|
32
40
|
export const OFFLINE_SYNC_CHANGESET_FORMAT = "remnic.offline-sync.changeset.v1";
|
|
@@ -141,12 +149,6 @@ export interface OfflineSyncChangesetSummary {
|
|
|
141
149
|
total: number;
|
|
142
150
|
}
|
|
143
151
|
|
|
144
|
-
export interface OfflineSyncFileTarget {
|
|
145
|
-
root: string;
|
|
146
|
-
path: string;
|
|
147
|
-
filePath: string;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
152
|
export interface OfflineSyncFileDeleteTarget extends OfflineSyncFileTarget {
|
|
151
153
|
mtimeMs?: number;
|
|
152
154
|
}
|
|
@@ -826,7 +828,7 @@ async function readOfflineSyncFileRecord(
|
|
|
826
828
|
digest = sha256Buffer(content);
|
|
827
829
|
content = null;
|
|
828
830
|
} else {
|
|
829
|
-
digest = await
|
|
831
|
+
digest = await sha256OfflineSyncFile(options.filePath, options.signal);
|
|
830
832
|
}
|
|
831
833
|
throwIfOfflineSyncAborted(options.signal);
|
|
832
834
|
const st = await stat(options.filePath);
|
|
@@ -839,57 +841,13 @@ async function readOfflineSyncFileRecord(
|
|
|
839
841
|
};
|
|
840
842
|
}
|
|
841
843
|
|
|
842
|
-
async function sha256File(filePath: string, signal?: AbortSignal): Promise<OfflineSyncFileDigest> {
|
|
843
|
-
const hash = createHash("sha256");
|
|
844
|
-
let bytes = 0;
|
|
845
|
-
for await (const chunk of createReadStream(filePath)) {
|
|
846
|
-
throwIfOfflineSyncAborted(signal);
|
|
847
|
-
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
848
|
-
hash.update(buffer);
|
|
849
|
-
bytes += buffer.length;
|
|
850
|
-
}
|
|
851
|
-
throwIfOfflineSyncAborted(signal);
|
|
852
|
-
return {
|
|
853
|
-
sha256: hash.digest("hex"),
|
|
854
|
-
bytes,
|
|
855
|
-
};
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
async function fileIsSecureStoreEncrypted(filePath: string): Promise<boolean> {
|
|
859
|
-
const handle = await open(filePath, "r");
|
|
860
|
-
try {
|
|
861
|
-
const header = Buffer.alloc(MAGIC_HEADER_SIZE);
|
|
862
|
-
const { bytesRead } = await handle.read(header, 0, header.length, 0);
|
|
863
|
-
return bytesRead >= MAGIC_HEADER_SIZE && isEncryptedFile(header);
|
|
864
|
-
} finally {
|
|
865
|
-
await handle.close();
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
async function readPlainFileContentChunk(options: {
|
|
870
|
-
filePath: string;
|
|
871
|
-
offset: number;
|
|
872
|
-
length: number;
|
|
873
|
-
bytes: number;
|
|
874
|
-
}): Promise<Buffer> {
|
|
875
|
-
const chunkBytes = Math.min(options.length, options.bytes - options.offset);
|
|
876
|
-
const chunk = Buffer.alloc(chunkBytes);
|
|
877
|
-
if (chunkBytes === 0) return chunk;
|
|
878
|
-
const handle = await open(options.filePath, "r");
|
|
879
|
-
try {
|
|
880
|
-
const { bytesRead } = await handle.read(chunk, 0, chunk.length, options.offset);
|
|
881
|
-
return bytesRead === chunk.length ? chunk : chunk.subarray(0, bytesRead);
|
|
882
|
-
} finally {
|
|
883
|
-
await handle.close();
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
|
|
887
844
|
export async function* iterateOfflineSyncSnapshotFileRecords(options: {
|
|
888
845
|
root: string;
|
|
889
846
|
includeContent?: boolean;
|
|
890
847
|
includeTranscripts?: boolean;
|
|
891
848
|
readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
|
|
892
849
|
readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
|
|
850
|
+
excludeFile?: OfflineSyncExcludeFile;
|
|
893
851
|
userExcludeRegexps?: readonly RegExp[];
|
|
894
852
|
/**
|
|
895
853
|
* When false, enumeration uses only the legacy structural excludes —
|
|
@@ -924,6 +882,11 @@ export async function* iterateOfflineSyncSnapshotFileRecords(options: {
|
|
|
924
882
|
continue;
|
|
925
883
|
}
|
|
926
884
|
if (!entry.isFile()) continue;
|
|
885
|
+
if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
|
|
886
|
+
root: root.abs,
|
|
887
|
+
path: relPosix,
|
|
888
|
+
filePath: abs,
|
|
889
|
+
})) continue;
|
|
927
890
|
yield await readOfflineSyncFileRecord({
|
|
928
891
|
root,
|
|
929
892
|
relPath: relPosix,
|
|
@@ -948,6 +911,7 @@ export async function buildOfflineSyncSnapshot(options: {
|
|
|
948
911
|
now?: Date;
|
|
949
912
|
readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
|
|
950
913
|
readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
|
|
914
|
+
excludeFile?: OfflineSyncExcludeFile;
|
|
951
915
|
userExcludeRegexps?: readonly RegExp[];
|
|
952
916
|
/**
|
|
953
917
|
* When false, enumeration uses only the legacy structural excludes —
|
|
@@ -995,6 +959,7 @@ export async function buildOfflineSyncSnapshotFromBase(options: {
|
|
|
995
959
|
now?: Date;
|
|
996
960
|
readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
|
|
997
961
|
readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
|
|
962
|
+
excludeFile?: OfflineSyncExcludeFile;
|
|
998
963
|
userExcludeRegexps?: readonly RegExp[];
|
|
999
964
|
/**
|
|
1000
965
|
* When false, enumeration uses only the legacy structural excludes —
|
|
@@ -1039,6 +1004,11 @@ export async function buildOfflineSyncSnapshotFromBase(options: {
|
|
|
1039
1004
|
continue;
|
|
1040
1005
|
}
|
|
1041
1006
|
if (!entry.isFile()) continue;
|
|
1007
|
+
if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
|
|
1008
|
+
root: root.abs,
|
|
1009
|
+
path: relPosix,
|
|
1010
|
+
filePath: abs,
|
|
1011
|
+
})) continue;
|
|
1042
1012
|
const st = await stat(abs);
|
|
1043
1013
|
const baseEntry = base.get(relPosix);
|
|
1044
1014
|
if (
|
|
@@ -1094,6 +1064,7 @@ export async function buildOfflineSyncSnapshotForPaths(options: {
|
|
|
1094
1064
|
now?: Date;
|
|
1095
1065
|
readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
|
|
1096
1066
|
readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
|
|
1067
|
+
excludeFile?: OfflineSyncExcludeFile;
|
|
1097
1068
|
userExcludeRegexps?: readonly RegExp[];
|
|
1098
1069
|
/**
|
|
1099
1070
|
* When false, enumeration uses only the legacy structural excludes —
|
|
@@ -1130,6 +1101,13 @@ export async function buildOfflineSyncSnapshotForPaths(options: {
|
|
|
1130
1101
|
throw error;
|
|
1131
1102
|
});
|
|
1132
1103
|
if (!st || st.isSymbolicLink() || !st.isFile()) continue;
|
|
1104
|
+
if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
|
|
1105
|
+
root: root.abs,
|
|
1106
|
+
path: relPath,
|
|
1107
|
+
filePath,
|
|
1108
|
+
})) {
|
|
1109
|
+
throw new Error(`offline sync snapshot path is excluded: ${relPath}`);
|
|
1110
|
+
}
|
|
1133
1111
|
files.push(await readOfflineSyncFileRecord({
|
|
1134
1112
|
root,
|
|
1135
1113
|
relPath,
|
|
@@ -1169,6 +1147,7 @@ export async function readOfflineSyncFileContentChunk(options: {
|
|
|
1169
1147
|
length?: number;
|
|
1170
1148
|
includeTranscripts?: boolean;
|
|
1171
1149
|
readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
|
|
1150
|
+
excludeFile?: OfflineSyncExcludeFile;
|
|
1172
1151
|
userExcludeRegexps?: readonly RegExp[];
|
|
1173
1152
|
/**
|
|
1174
1153
|
* When false, enumeration uses only the legacy structural excludes —
|
|
@@ -1209,12 +1188,19 @@ export async function readOfflineSyncFileContentChunk(options: {
|
|
|
1209
1188
|
if (!st || st.isSymbolicLink() || !st.isFile()) {
|
|
1210
1189
|
throw new Error(`offline sync file content path not found: ${relPath}`);
|
|
1211
1190
|
}
|
|
1212
|
-
|
|
1191
|
+
if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
|
|
1192
|
+
root: root.abs,
|
|
1193
|
+
path: relPath,
|
|
1194
|
+
filePath,
|
|
1195
|
+
})) {
|
|
1196
|
+
throw new Error(`offline sync file content path is excluded: ${relPath}`);
|
|
1197
|
+
}
|
|
1198
|
+
const encrypted = await isEncryptedOfflineSyncFile(filePath);
|
|
1213
1199
|
if (!encrypted) {
|
|
1214
1200
|
if (offset > st.size) {
|
|
1215
1201
|
throw new Error(`offset must be <= file size for ${relPath}`);
|
|
1216
1202
|
}
|
|
1217
|
-
const chunk = await
|
|
1203
|
+
const chunk = await readPlainOfflineSyncFileChunk({
|
|
1218
1204
|
filePath,
|
|
1219
1205
|
offset,
|
|
1220
1206
|
length: requestedLength,
|
|
@@ -2017,7 +2003,7 @@ async function readLocalFileState(options: {
|
|
|
2017
2003
|
const content = await options.readFile({ root: options.rootAbs, path: options.relPath, filePath });
|
|
2018
2004
|
digest = sha256Buffer(content);
|
|
2019
2005
|
} else {
|
|
2020
|
-
digest = await
|
|
2006
|
+
digest = await sha256OfflineSyncFile(filePath, options.signal);
|
|
2021
2007
|
}
|
|
2022
2008
|
throwIfOfflineSyncAborted(options.signal);
|
|
2023
2009
|
return {
|
|
@@ -67,6 +67,7 @@ import type {
|
|
|
67
67
|
PluginConfig,
|
|
68
68
|
RecallSectionConfig,
|
|
69
69
|
} from "../types.js";
|
|
70
|
+
import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
|
|
70
71
|
|
|
71
72
|
/** Dependencies injected by the orchestrator. Stable references or live
|
|
72
73
|
* accessors — lazy getters for mutable fields tests reassign
|
|
@@ -449,7 +450,7 @@ export class ConsolidationRunCoordinator {
|
|
|
449
450
|
}
|
|
450
451
|
await this.pruneHarmonicStores(storage);
|
|
451
452
|
|
|
452
|
-
let allMemories = await storage.readAllMemories();
|
|
453
|
+
let allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
453
454
|
if (allMemories.length < 5) {
|
|
454
455
|
return { memoriesProcessed: allMemories.length, merged, invalidated };
|
|
455
456
|
}
|
|
@@ -801,7 +802,7 @@ export class ConsolidationRunCoordinator {
|
|
|
801
802
|
// mutations for the catalog touch below (codex NThSW).
|
|
802
803
|
const tierMigration = await this.deps.tierMigrationCoordinator.runCycle(storage, "maintenance");
|
|
803
804
|
if (tierMigration.migrated > 0) memoryItemMutated = true;
|
|
804
|
-
allMemories = await storage.readAllMemories();
|
|
805
|
+
allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
805
806
|
|
|
806
807
|
// Fact archival pass (v6.0) — move old, low-importance, rarely-accessed facts to archive/
|
|
807
808
|
if (resolveRecallEnhancementCapabilities(config).factArchival) {
|
|
@@ -823,7 +824,7 @@ export class ConsolidationRunCoordinator {
|
|
|
823
824
|
} catch (err) {
|
|
824
825
|
log.warn(`deep-sleep maintenance pass failed (ignored): ${err}`);
|
|
825
826
|
try {
|
|
826
|
-
allMemories = await storage.readAllMemories();
|
|
827
|
+
allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
827
828
|
} catch (readErr) {
|
|
828
829
|
log.warn(`deep-sleep maintenance recovery read failed: ${readErr}`);
|
|
829
830
|
throw err;
|
|
@@ -862,7 +863,7 @@ export class ConsolidationRunCoordinator {
|
|
|
862
863
|
const semResult = await this.deps.semanticConsolidationCoordinator.runSemanticConsolidation();
|
|
863
864
|
let remItemsProcessed = allMemories.length;
|
|
864
865
|
try {
|
|
865
|
-
allMemories = await storage.readAllMemories();
|
|
866
|
+
allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
866
867
|
remItemsProcessed = allMemories.length;
|
|
867
868
|
} catch (err) {
|
|
868
869
|
log.warn(
|
|
@@ -43,6 +43,7 @@ import type {
|
|
|
43
43
|
DependencyPropagationDeliveryPort,
|
|
44
44
|
DependencyPropagationPreparationToken,
|
|
45
45
|
} from "./dependency-propagation-delivery.js";
|
|
46
|
+
import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
|
|
46
47
|
|
|
47
48
|
/** Result type of {@link ContradictionLinkingCoordinator.checkForContradiction}. */
|
|
48
49
|
export interface ContradictionResult {
|
|
@@ -170,6 +171,7 @@ export class ContradictionLinkingCoordinator {
|
|
|
170
171
|
const resultStorage = await this.storageForNamespace(resultNamespace);
|
|
171
172
|
const existingMemory = await resultStorage.getMemoryById(memoryId);
|
|
172
173
|
if (!existingMemory) continue;
|
|
174
|
+
if (isSupportPassportPrivateMemory(existingMemory)) continue;
|
|
173
175
|
if (inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active") continue;
|
|
174
176
|
const verification = await this.getExtraction().verifyContradiction(
|
|
175
177
|
{ content, category },
|
|
@@ -231,6 +233,9 @@ export class ContradictionLinkingCoordinator {
|
|
|
231
233
|
]);
|
|
232
234
|
anchorSnapshot = mergeMemorySnapshots(hot, cold, resultStorage.dir);
|
|
233
235
|
}
|
|
236
|
+
anchorSnapshot = anchorSnapshot?.filter(
|
|
237
|
+
(memory) => !isSupportPassportPrivateMemory(memory),
|
|
238
|
+
);
|
|
234
239
|
const anchorMemoryById = anchorSnapshot
|
|
235
240
|
? new Map(anchorSnapshot.map((memory) => [memory.frontmatter.id, memory]))
|
|
236
241
|
: undefined;
|
|
@@ -264,6 +269,7 @@ export class ContradictionLinkingCoordinator {
|
|
|
264
269
|
anchorMemoryById?.get(memoryId) ?? (await resultStorage.getMemoryById(memoryId));
|
|
265
270
|
if (
|
|
266
271
|
!existingMemory ||
|
|
272
|
+
isSupportPassportPrivateMemory(existingMemory) ||
|
|
267
273
|
inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
|
|
268
274
|
) continue;
|
|
269
275
|
hits.push({
|
|
@@ -290,6 +296,7 @@ export class ContradictionLinkingCoordinator {
|
|
|
290
296
|
anchorMemoryById?.get(candidate.id) ?? (await resultStorage.getMemoryById(candidate.id));
|
|
291
297
|
if (
|
|
292
298
|
!existingMemory ||
|
|
299
|
+
isSupportPassportPrivateMemory(existingMemory) ||
|
|
293
300
|
inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
|
|
294
301
|
) continue;
|
|
295
302
|
const verification = await this.getExtraction().verifyContradiction(
|