@remnic/core 9.54.4 → 9.54.5
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 +12 -11
- package/dist/access-admin-ops-surface.js +46 -44
- package/dist/access-authorization-probe.d.ts +12 -11
- package/dist/access-authorization-probe.js +47 -45
- package/dist/access-boundary.d.ts +12 -11
- package/dist/access-boundary.js +46 -44
- package/dist/access-cli.js +92 -90
- 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 +12 -11
- package/dist/access-extraction-force-flush.js +46 -44
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +12 -11
- package/dist/access-http-lifecycle-flush.d.ts +12 -11
- package/dist/access-http-offline-stream.d.ts +12 -11
- package/dist/access-http-query.js +46 -44
- package/dist/access-http.d.ts +12 -11
- package/dist/access-http.js +56 -54
- package/dist/access-identity-continuity-surface.d.ts +9 -9
- package/dist/access-identity-continuity-surface.js +46 -44
- package/dist/access-lcm-surface.d.ts +12 -11
- package/dist/access-lcm-surface.js +46 -44
- package/dist/access-mcp.d.ts +12 -11
- package/dist/access-mcp.js +52 -50
- 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-BdHlGd_T.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +46 -44
- package/dist/access-observe-write-surface.d.ts +12 -11
- package/dist/access-observe-write-surface.js +46 -44
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-offline-manifest.js +12 -10
- package/dist/access-operations-batch.js +48 -46
- package/dist/access-operations.d.ts +15 -14
- package/dist/access-operations.js +51 -49
- package/dist/access-recall-concurrency.d.ts +12 -11
- package/dist/access-recall-concurrency.js +46 -44
- package/dist/access-recall-response.d.ts +12 -11
- package/dist/access-recall-response.js +46 -44
- package/dist/access-recall-surface.d.ts +12 -11
- package/dist/access-recall-surface.js +46 -44
- package/dist/access-schema.d.ts +90 -90
- package/dist/access-schema.js +3 -2
- package/dist/{access-service-CXvbxLK-.d.ts → access-service-DL7X9hrg.d.ts} +7 -7
- package/dist/access-service-helpers.d.ts +12 -11
- package/dist/access-service.d.ts +12 -11
- package/dist/access-service.js +46 -44
- package/dist/access-surface-catalog.d.ts +12 -11
- 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 +13 -1
- package/dist/active-memory-bridge.js +6 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +3 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +9 -9
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +30 -9
- 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/capabilities.d.ts +1 -1
- package/dist/{catalog-BOOxl-I2.d.ts → catalog-B90is4d8.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 +31 -10
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-6LAPLZOS.js → chunk-2DD6ZHOM.js} +8 -3
- package/dist/chunk-2DD6ZHOM.js.map +1 -0
- package/dist/{chunk-47P3RYZP.js → chunk-2INWPC6E.js} +2 -2
- package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
- package/dist/chunk-2LWQSV6A.js.map +1 -0
- package/dist/{chunk-7BZOBA5J.js → chunk-2PNXOQ4P.js} +69 -11
- package/dist/chunk-2PNXOQ4P.js.map +1 -0
- package/dist/{chunk-WOPA3SGI.js → chunk-3OTSVCPK.js} +8 -8
- package/dist/{chunk-PX2LSHYM.js → chunk-3SXLD5T3.js} +3 -3
- package/dist/{chunk-T2JHZWH6.js → chunk-3WGI7F4V.js} +237 -93
- package/dist/chunk-3WGI7F4V.js.map +1 -0
- package/dist/{chunk-C4ZNGVK3.js → chunk-5JKUSBMX.js} +2 -2
- package/dist/{chunk-S75M5ZRK.js → chunk-6LEIWWAF.js} +16 -1
- package/dist/chunk-6LEIWWAF.js.map +1 -0
- package/dist/{chunk-MAXVH44E.js → chunk-6NNNURLK.js} +4 -4
- package/dist/{chunk-LJS7KUPV.js → chunk-6PZGKGAO.js} +2 -2
- package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
- package/dist/{chunk-CYF6WVE7.js → chunk-7HG7MGAP.js} +2688 -496
- package/dist/chunk-7HG7MGAP.js.map +1 -0
- package/dist/{chunk-CGVHPCP2.js → chunk-7Q7JWLQ4.js} +2 -2
- package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
- package/dist/{chunk-JBPKEARU.js → chunk-AU7Q3LSC.js} +4 -4
- package/dist/{chunk-PDDTI7IC.js → chunk-B4T3FQMT.js} +1 -1
- package/dist/{chunk-UU3G6GUP.js → chunk-BIF4SHMD.js} +1 -1
- package/dist/{chunk-UU3G6GUP.js.map → chunk-BIF4SHMD.js.map} +1 -1
- package/dist/{chunk-APPFNGX6.js → chunk-BSXGTDVJ.js} +2 -2
- package/dist/{chunk-4IIFL7GC.js → chunk-CLKBV3Z3.js} +10 -10
- package/dist/{chunk-ZYLC7NFO.js → chunk-CSY44OKU.js} +4 -4
- package/dist/{chunk-HLYR2TQL.js → chunk-CUTFSLSD.js} +2 -2
- package/dist/{chunk-RDJRFDJY.js → chunk-DBY26JJJ.js} +2 -2
- package/dist/{chunk-QWGE2PUH.js → chunk-DDA55IVB.js} +10 -10
- package/dist/{chunk-VMMQDEN5.js → chunk-DN2IDKI5.js} +2 -2
- package/dist/{chunk-2GFK22OZ.js → chunk-DOOWFDWN.js} +2 -2
- package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
- package/dist/{chunk-YGLY6QFV.js → chunk-F2Y6I74C.js} +2 -2
- package/dist/{chunk-UU7TRFNE.js → chunk-FFEBSFVT.js} +2 -2
- package/dist/chunk-HNDIND7P.js +331 -0
- package/dist/chunk-HNDIND7P.js.map +1 -0
- package/dist/{chunk-NIS256NW.js → chunk-JKW663ZN.js} +2 -2
- 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-G2LUMAUF.js → chunk-L7RTUEDG.js} +12 -5
- package/dist/chunk-L7RTUEDG.js.map +1 -0
- package/dist/chunk-LC2BDILZ.js +57 -0
- package/dist/chunk-LC2BDILZ.js.map +1 -0
- package/dist/{chunk-JV5YUBIZ.js → chunk-LC3FD4BV.js} +52 -46
- package/dist/chunk-LC3FD4BV.js.map +1 -0
- package/dist/{chunk-HWRD23DW.js → chunk-LVKYLMSM.js} +3 -3
- package/dist/{chunk-RUMNY5DT.js → chunk-MRGJZ75M.js} +6 -2
- package/dist/chunk-MRGJZ75M.js.map +1 -0
- package/dist/{chunk-ZMYDYNI4.js → chunk-N7CXQ5TA.js} +4 -4
- package/dist/{chunk-3JLPGJ43.js → chunk-NGT35IGQ.js} +5 -5
- package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
- package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
- package/dist/{chunk-WM65LU67.js → chunk-QOQQMVR2.js} +2 -2
- package/dist/{chunk-QHFV6VNU.js → chunk-QPAQSG3F.js} +2 -2
- package/dist/{chunk-UTRO5UJU.js → chunk-QPW3PAIH.js} +5 -1
- package/dist/chunk-QPW3PAIH.js.map +1 -0
- package/dist/{chunk-6R4G7N4S.js → chunk-QQXWFDRD.js} +128 -74
- package/dist/chunk-QQXWFDRD.js.map +1 -0
- package/dist/{chunk-UES4BHA2.js → chunk-QTO6BMQZ.js} +2 -2
- package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
- package/dist/{chunk-QT2FRYI4.js → chunk-RG426DJO.js} +2 -2
- package/dist/{chunk-XUAMCLY4.js → chunk-TKFGFDPJ.js} +17 -13
- package/dist/chunk-TKFGFDPJ.js.map +1 -0
- package/dist/{chunk-VKXWK44Q.js → chunk-TY6MKIWP.js} +3 -3
- package/dist/{chunk-AZM4CCAC.js → chunk-UWJNKGBA.js} +5 -5
- package/dist/{chunk-JDZPNCMA.js → chunk-UYOXFFEY.js} +6 -3
- package/dist/chunk-UYOXFFEY.js.map +1 -0
- package/dist/{chunk-ZPJ4QSGP.js → chunk-VTU5IEKY.js} +2 -2
- package/dist/{chunk-RZ4XGKOJ.js → chunk-VYQ4URQB.js} +8 -8
- package/dist/{chunk-WDBX6VER.js → chunk-VZRFGJCH.js} +5 -5
- package/dist/{chunk-IBKR2TFR.js → chunk-WM5LD6AT.js} +2 -2
- package/dist/{chunk-K4QS7LXU.js → chunk-WZWZRZ2V.js} +2 -2
- package/dist/{chunk-G4T7L557.js → chunk-XKAR4RF6.js} +2 -2
- package/dist/{chunk-DZD576ZU.js → chunk-XSV2YDCJ.js} +2 -2
- package/dist/{chunk-G7Z6EENO.js → chunk-YDWPYDML.js} +4 -4
- package/dist/{chunk-6HPHEFXT.js → chunk-YKZLOPTC.js} +2 -2
- package/dist/{chunk-NH5IR2WM.js → chunk-YR65W7BV.js} +6 -2
- package/dist/chunk-YR65W7BV.js.map +1 -0
- package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
- package/dist/chunk-Z4N7SVVF.js.map +1 -0
- package/dist/{cli-DVUFIa5E.d.ts → cli-jfuZXixq.d.ts} +5 -5
- package/dist/cli.d.ts +14 -13
- package/dist/cli.js +74 -72
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +30 -9
- 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 +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +30 -9
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +29 -9
- 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-KCADHXPE.js +20 -0
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +32 -11
- 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 +21 -20
- 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-CTDuAVJc.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 +30 -9
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -9
- package/dist/explicit-capture.js +6 -4
- package/dist/external-wiki-access.d.ts +12 -11
- package/dist/external-wiki-access.js +47 -45
- 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 +12 -11
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- 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-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 +29 -13
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{first-start-migration-626C5554.js → first-start-migration-LMMZFLKK.js} +13 -5
- package/dist/first-start-migration-LMMZFLKK.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 +1439 -716
- package/dist/index.js +207 -121
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +5 -5
- 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 +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +30 -9
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +30 -9
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +31 -10
- package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-heMZSq7G.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +12 -11
- 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 +20 -19
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +30 -9
- 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 +22 -21
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +34 -32
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +35 -15
- package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-BQQPsSjs.d.ts} +11 -8
- package/dist/orchestrator.d.ts +9 -9
- package/dist/orchestrator.js +93 -91
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DFfmsnGk.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/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
- package/dist/{qmd-eAWObK4M.d.ts → qmd-BF5bcVRs.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-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 +4 -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 +138 -138
- package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-CbUOsE_E.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 +4 -4
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +6 -6
- 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-DAB3xdKM.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +31 -10
- package/dist/semantic-rule-promotion.js +30 -9
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +30 -9
- package/dist/{service-DIrtHHEg.d.ts → service-DGKg2O6r.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +9 -9
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +28 -12
- package/dist/{storage-DqCzXi56.d.ts → storage-CC1jKcWg.d.ts} +46 -13
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +30 -9
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- 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-JDN6HRNT.js} +8 -2
- package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-JDN6HRNT.js.map} +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/types.d.ts +66 -66
- 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-BnQza1y8.d.ts} +2 -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 +30 -9
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/access-http.test.ts +31 -0
- package/src/access-memory-search-fanout.ts +24 -1
- package/src/access-offline-manifest.ts +5 -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 +20 -43
- package/src/active-memory-bridge.test.ts +151 -0
- package/src/active-memory-bridge.ts +87 -11
- package/src/briefing.test.ts +38 -0
- package/src/briefing.ts +3 -3
- package/src/cli.ts +6 -1
- 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/index.ts +3 -0
- 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/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/storage/supersession-audit.ts +7 -1
- package/src/storage/supersession-side-effects.ts +17 -5
- package/src/storage.ts +18 -19
- package/src/support-passport/card-projection.test.ts +129 -0
- package/src/support-passport/card-projection.ts +287 -0
- package/src/support-passport/card-service.test.ts +2462 -0
- package/src/support-passport/card-service.ts +1042 -0
- package/src/support-passport/contracts.test.ts +143 -0
- package/src/support-passport/contracts.ts +136 -0
- package/src/support-passport/errors.ts +24 -0
- package/src/support-passport/grant-contracts.ts +139 -0
- package/src/support-passport/grant-service-cache.test.ts +148 -0
- package/src/support-passport/grant-service-cancellation.test.ts +81 -0
- package/src/support-passport/grant-service.test.ts +2882 -0
- package/src/support-passport/grant-service.ts +364 -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 +902 -0
- package/src/support-passport/index.ts +7 -0
- package/src/support-passport/offline-sync-guard.ts +230 -0
- package/src/support-passport/owner-lock.ts +53 -0
- package/src/support-passport/private-file.ts +371 -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 +1 -1
- package/src/wearables/service.test.ts +13 -0
- package/src/wearables/service.ts +2 -0
- package/dist/chunk-3CSX3ETE.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-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-NH5IR2WM.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-UTRO5UJU.js.map +0 -1
- package/dist/chunk-XUAMCLY4.js.map +0 -1
- package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
- package/dist/first-start-migration-626C5554.js.map +0 -1
- /package/dist/{chunk-47P3RYZP.js.map → chunk-2INWPC6E.js.map} +0 -0
- /package/dist/{chunk-WOPA3SGI.js.map → chunk-3OTSVCPK.js.map} +0 -0
- /package/dist/{chunk-PX2LSHYM.js.map → chunk-3SXLD5T3.js.map} +0 -0
- /package/dist/{chunk-C4ZNGVK3.js.map → chunk-5JKUSBMX.js.map} +0 -0
- /package/dist/{chunk-MAXVH44E.js.map → chunk-6NNNURLK.js.map} +0 -0
- /package/dist/{chunk-LJS7KUPV.js.map → chunk-6PZGKGAO.js.map} +0 -0
- /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
- /package/dist/{chunk-CGVHPCP2.js.map → chunk-7Q7JWLQ4.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-AU7Q3LSC.js.map} +0 -0
- /package/dist/{chunk-PDDTI7IC.js.map → chunk-B4T3FQMT.js.map} +0 -0
- /package/dist/{chunk-APPFNGX6.js.map → chunk-BSXGTDVJ.js.map} +0 -0
- /package/dist/{chunk-4IIFL7GC.js.map → chunk-CLKBV3Z3.js.map} +0 -0
- /package/dist/{chunk-ZYLC7NFO.js.map → chunk-CSY44OKU.js.map} +0 -0
- /package/dist/{chunk-HLYR2TQL.js.map → chunk-CUTFSLSD.js.map} +0 -0
- /package/dist/{chunk-RDJRFDJY.js.map → chunk-DBY26JJJ.js.map} +0 -0
- /package/dist/{chunk-QWGE2PUH.js.map → chunk-DDA55IVB.js.map} +0 -0
- /package/dist/{chunk-VMMQDEN5.js.map → chunk-DN2IDKI5.js.map} +0 -0
- /package/dist/{chunk-2GFK22OZ.js.map → chunk-DOOWFDWN.js.map} +0 -0
- /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
- /package/dist/{chunk-YGLY6QFV.js.map → chunk-F2Y6I74C.js.map} +0 -0
- /package/dist/{chunk-UU7TRFNE.js.map → chunk-FFEBSFVT.js.map} +0 -0
- /package/dist/{chunk-NIS256NW.js.map → chunk-JKW663ZN.js.map} +0 -0
- /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
- /package/dist/{chunk-HWRD23DW.js.map → chunk-LVKYLMSM.js.map} +0 -0
- /package/dist/{chunk-ZMYDYNI4.js.map → chunk-N7CXQ5TA.js.map} +0 -0
- /package/dist/{chunk-3JLPGJ43.js.map → chunk-NGT35IGQ.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-WM65LU67.js.map → chunk-QOQQMVR2.js.map} +0 -0
- /package/dist/{chunk-QHFV6VNU.js.map → chunk-QPAQSG3F.js.map} +0 -0
- /package/dist/{chunk-UES4BHA2.js.map → chunk-QTO6BMQZ.js.map} +0 -0
- /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
- /package/dist/{chunk-QT2FRYI4.js.map → chunk-RG426DJO.js.map} +0 -0
- /package/dist/{chunk-VKXWK44Q.js.map → chunk-TY6MKIWP.js.map} +0 -0
- /package/dist/{chunk-AZM4CCAC.js.map → chunk-UWJNKGBA.js.map} +0 -0
- /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-VTU5IEKY.js.map} +0 -0
- /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-VYQ4URQB.js.map} +0 -0
- /package/dist/{chunk-WDBX6VER.js.map → chunk-VZRFGJCH.js.map} +0 -0
- /package/dist/{chunk-IBKR2TFR.js.map → chunk-WM5LD6AT.js.map} +0 -0
- /package/dist/{chunk-K4QS7LXU.js.map → chunk-WZWZRZ2V.js.map} +0 -0
- /package/dist/{chunk-G4T7L557.js.map → chunk-XKAR4RF6.js.map} +0 -0
- /package/dist/{chunk-DZD576ZU.js.map → chunk-XSV2YDCJ.js.map} +0 -0
- /package/dist/{chunk-G7Z6EENO.js.map → chunk-YDWPYDML.js.map} +0 -0
- /package/dist/{chunk-6HPHEFXT.js.map → chunk-YKZLOPTC.js.map} +0 -0
- /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-KCADHXPE.js.map} +0 -0
- /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
package/src/access-service.ts
CHANGED
|
@@ -110,6 +110,11 @@ import {
|
|
|
110
110
|
memorySearchThroughScope,
|
|
111
111
|
} from "./access-memory-search-fanout.js";
|
|
112
112
|
import { isSearchExcludedPath } from "./orchestration/generic-recall-paths.js";
|
|
113
|
+
import { createSupportPassportPrivateFileExclusion, isSupportPassportPrivateMemory } from "./support-passport/card-projection.js";
|
|
114
|
+
import {
|
|
115
|
+
applySupportPassportOfflineSyncChangeset,
|
|
116
|
+
applySupportPassportOfflineSyncFileContent,
|
|
117
|
+
} from "./support-passport/offline-sync-guard.js";
|
|
113
118
|
import {
|
|
114
119
|
buildQualityScore,
|
|
115
120
|
buildProposedActions,
|
|
@@ -281,9 +286,7 @@ import {
|
|
|
281
286
|
type CapsuleListEntry,
|
|
282
287
|
} from "./capsule-cli.js";
|
|
283
288
|
import {
|
|
284
|
-
applyOfflineSyncFileContentChunk,
|
|
285
289
|
compileOfflineSyncExcludeGlobs,
|
|
286
|
-
applyOfflineSyncChangeset,
|
|
287
290
|
buildOfflineSyncSnapshot,
|
|
288
291
|
buildOfflineSyncSnapshotFromBase,
|
|
289
292
|
buildOfflineSyncSnapshotForPaths,
|
|
@@ -3000,9 +3003,7 @@ export class EngramAccessService {
|
|
|
3000
3003
|
const resolvedNamespace = this.resolveReadableNamespace(namespace, principal);
|
|
3001
3004
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
3002
3005
|
const memory = await storage.getMemoryById(resolvedId);
|
|
3003
|
-
if (!memory) {
|
|
3004
|
-
return { found: false, namespace: resolvedNamespace };
|
|
3005
|
-
}
|
|
3006
|
+
if (!memory || isSupportPassportPrivateMemory(memory)) return { found: false, namespace: resolvedNamespace };
|
|
3006
3007
|
return {
|
|
3007
3008
|
found: true,
|
|
3008
3009
|
namespace: resolvedNamespace,
|
|
@@ -3371,6 +3372,7 @@ export class EngramAccessService {
|
|
|
3371
3372
|
query,
|
|
3372
3373
|
status: statusFilter,
|
|
3373
3374
|
category: categoryFilter,
|
|
3375
|
+
excludePrivateRecords: true,
|
|
3374
3376
|
sort,
|
|
3375
3377
|
limit,
|
|
3376
3378
|
offset,
|
|
@@ -3389,6 +3391,7 @@ export class EngramAccessService {
|
|
|
3389
3391
|
|
|
3390
3392
|
let memories = [...await storage.readAllMemories(), ...await storage.readArchivedMemories()];
|
|
3391
3393
|
memories = memories.filter((memory) => {
|
|
3394
|
+
if (isSupportPassportPrivateMemory(memory)) return false;
|
|
3392
3395
|
const status = inferMemoryStatus(memory.frontmatter, toMemoryPathRel(storage.dir, memory.path)).toLowerCase();
|
|
3393
3396
|
if (statusFilter && status !== statusFilter) return false;
|
|
3394
3397
|
if (categoryFilter && memory.frontmatter.category.toLowerCase() !== categoryFilter) return false;
|
|
@@ -3427,6 +3430,8 @@ export class EngramAccessService {
|
|
|
3427
3430
|
): Promise<EngramAccessTimelineResponse> {
|
|
3428
3431
|
const resolvedNamespace = this.resolveReadableNamespace(namespace, principal);
|
|
3429
3432
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
3433
|
+
const memory = await storage.getMemoryByIdIncludingArchived(memoryId);
|
|
3434
|
+
if (!memory || isSupportPassportPrivateMemory(memory)) return { found: false, namespace: resolvedNamespace, count: 0, timeline: [] };
|
|
3430
3435
|
const timeline = await storage.getMemoryTimeline(memoryId, limit);
|
|
3431
3436
|
return {
|
|
3432
3437
|
found: timeline.length > 0,
|
|
@@ -3918,7 +3923,7 @@ export class EngramAccessService {
|
|
|
3918
3923
|
);
|
|
3919
3924
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
3920
3925
|
const memory = await storage.getMemoryById(memoryId);
|
|
3921
|
-
if (!memory) {
|
|
3926
|
+
if (!memory || isSupportPassportPrivateMemory(memory)) {
|
|
3922
3927
|
throw new EngramAccessInputError(`memory not found: ${memoryId}`);
|
|
3923
3928
|
}
|
|
3924
3929
|
|
|
@@ -4546,8 +4551,6 @@ export class EngramAccessService {
|
|
|
4546
4551
|
);
|
|
4547
4552
|
}
|
|
4548
4553
|
|
|
4549
|
-
// ── Shared Context / Compounding ────────────────────────────────────────
|
|
4550
|
-
|
|
4551
4554
|
async sharedContextWriteOutput(request: {
|
|
4552
4555
|
agentId: string;
|
|
4553
4556
|
title: string;
|
|
@@ -4678,8 +4681,6 @@ export class EngramAccessService {
|
|
|
4678
4681
|
});
|
|
4679
4682
|
}
|
|
4680
4683
|
|
|
4681
|
-
// ── Compression Guidelines ────────────────────────────────────────────
|
|
4682
|
-
|
|
4683
4684
|
async compressionGuidelinesOptimize(request: {
|
|
4684
4685
|
dryRun?: boolean;
|
|
4685
4686
|
eventLimit?: number;
|
|
@@ -4705,7 +4706,6 @@ export class EngramAccessService {
|
|
|
4705
4706
|
expectedGuidelineVersion: request.expectedGuidelineVersion,
|
|
4706
4707
|
});
|
|
4707
4708
|
}
|
|
4708
|
-
// ── Memory search & debug ─────────────────────────────────────────────
|
|
4709
4709
|
|
|
4710
4710
|
async memorySearch(request: {
|
|
4711
4711
|
query: string;
|
|
@@ -4719,6 +4719,7 @@ export class EngramAccessService {
|
|
|
4719
4719
|
return memorySearchThroughScope(
|
|
4720
4720
|
{
|
|
4721
4721
|
namespacesEnabled: resolveNamespaceCapabilities(config).namespaces,
|
|
4722
|
+
memoryCollections: [config.qmdCollection, config.qmdColdCollection ?? "openclaw-engram-cold"],
|
|
4722
4723
|
// `0` is preserved, never coerced: a zero limit is a runtime
|
|
4723
4724
|
// compatibility guarantee (AGENTS.md guardrail 4), and it means the
|
|
4724
4725
|
// same thing here as an explicit `maxResults: 0` from the caller - an
|
|
@@ -4736,9 +4737,8 @@ export class EngramAccessService {
|
|
|
4736
4737
|
{ ...config, requestedCollection: request.collection?.trim() || undefined },
|
|
4737
4738
|
"qmd",
|
|
4738
4739
|
),
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
},
|
|
4740
|
+
filterPrivate: this.orchestrator.filterPrivateSearchResults,
|
|
4741
|
+
authorizeFlatCorpus: (namespace, principal) => void this.resolveReadableNamespace(namespace, principal),
|
|
4742
4742
|
authorizeNamespaces: async (namespace, principal, collection) =>
|
|
4743
4743
|
this.resolveMemorySearchNamespacesForCollection(
|
|
4744
4744
|
collection,
|
|
@@ -5483,6 +5483,7 @@ export class EngramAccessService {
|
|
|
5483
5483
|
signal: options.signal,
|
|
5484
5484
|
userExcludeRegexps: this.offlineSyncUserExcludes,
|
|
5485
5485
|
deletions,
|
|
5486
|
+
excludeFile: createSupportPassportPrivateFileExclusion(storage),
|
|
5486
5487
|
});
|
|
5487
5488
|
return {
|
|
5488
5489
|
namespace: resolvedNamespace,
|
|
@@ -5519,6 +5520,7 @@ export class EngramAccessService {
|
|
|
5519
5520
|
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
5520
5521
|
signal: options.signal,
|
|
5521
5522
|
userExcludeRegexps: this.offlineSyncUserExcludes,
|
|
5523
|
+
excludeFile: createSupportPassportPrivateFileExclusion(storage),
|
|
5522
5524
|
}),
|
|
5523
5525
|
};
|
|
5524
5526
|
}
|
|
@@ -5551,6 +5553,7 @@ export class EngramAccessService {
|
|
|
5551
5553
|
includeTranscripts: options.includeTranscripts !== false,
|
|
5552
5554
|
readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
|
|
5553
5555
|
userExcludeRegexps: this.offlineSyncUserExcludes,
|
|
5556
|
+
excludeFile: createSupportPassportPrivateFileExclusion(storage),
|
|
5554
5557
|
});
|
|
5555
5558
|
return {
|
|
5556
5559
|
namespace: resolvedNamespace,
|
|
@@ -5583,6 +5586,7 @@ export class EngramAccessService {
|
|
|
5583
5586
|
includeTranscripts: options.includeTranscripts !== false,
|
|
5584
5587
|
readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
|
|
5585
5588
|
userExcludeRegexps: this.offlineSyncUserExcludes,
|
|
5589
|
+
excludeFile: createSupportPassportPrivateFileExclusion(storage),
|
|
5586
5590
|
});
|
|
5587
5591
|
return {
|
|
5588
5592
|
namespace: resolvedNamespace,
|
|
@@ -5613,23 +5617,7 @@ export class EngramAccessService {
|
|
|
5613
5617
|
);
|
|
5614
5618
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
5615
5619
|
try {
|
|
5616
|
-
const result = await
|
|
5617
|
-
root: storage.dir,
|
|
5618
|
-
sourceId: options.sourceId,
|
|
5619
|
-
path: options.path,
|
|
5620
|
-
sha256: options.sha256,
|
|
5621
|
-
bytes: options.bytes,
|
|
5622
|
-
mtimeMs: options.mtimeMs,
|
|
5623
|
-
offset: options.offset,
|
|
5624
|
-
baseSha256: options.baseSha256,
|
|
5625
|
-
content: options.content,
|
|
5626
|
-
includeTranscripts: options.includeTranscripts !== false,
|
|
5627
|
-
readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
|
|
5628
|
-
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
5629
|
-
writeFile: async ({ filePath, content }) => storage.writeOfflineSyncFile(filePath, content),
|
|
5630
|
-
writeStagingFile: async ({ filePath, content }) => storage.writeOfflineSyncStagingFile(filePath, content),
|
|
5631
|
-
writeFileChunks: async ({ filePath, chunks }) => storage.writeOfflineSyncFileChunks(filePath, chunks),
|
|
5632
|
-
});
|
|
5620
|
+
const result = await applySupportPassportOfflineSyncFileContent(storage, options);
|
|
5633
5621
|
return {
|
|
5634
5622
|
namespace: resolvedNamespace,
|
|
5635
5623
|
...result,
|
|
@@ -5687,18 +5675,7 @@ export class EngramAccessService {
|
|
|
5687
5675
|
);
|
|
5688
5676
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
5689
5677
|
try {
|
|
5690
|
-
const result = await
|
|
5691
|
-
root: storage.dir,
|
|
5692
|
-
changeset: options.changeset,
|
|
5693
|
-
returnCurrentFiles: options.returnCurrentFiles,
|
|
5694
|
-
readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
|
|
5695
|
-
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
5696
|
-
writeFile: async ({ filePath, content }) => storage.writeOfflineSyncFile(filePath, content),
|
|
5697
|
-
deleteFile: async ({ filePath, mtimeMs }) =>
|
|
5698
|
-
storage.deleteOfflineSyncFile(filePath, mtimeMs ?? null),
|
|
5699
|
-
recordDeletionRevision: async ({ filePath, mtimeMs }) =>
|
|
5700
|
-
storage.recordReplicatedDeletionRevision(filePath, mtimeMs),
|
|
5701
|
-
});
|
|
5678
|
+
const result = await applySupportPassportOfflineSyncChangeset(storage, options);
|
|
5702
5679
|
return {
|
|
5703
5680
|
namespace: resolvedNamespace,
|
|
5704
5681
|
...result,
|
|
@@ -6,9 +6,12 @@ import {
|
|
|
6
6
|
recallForActiveMemory,
|
|
7
7
|
} from "./active-memory-bridge.js";
|
|
8
8
|
|
|
9
|
+
const keepVisibleSearchResults = async <T>(results: T[]): Promise<T[]> => results;
|
|
10
|
+
|
|
9
11
|
test("recallForActiveMemory caps limit, truncates snippets, and strips internal scoring fields", async () => {
|
|
10
12
|
const orchestrator = {
|
|
11
13
|
resolveSelfNamespace: (_sessionKey?: string) => "resolved-namespace",
|
|
14
|
+
filterPrivateSearchResults: keepVisibleSearchResults,
|
|
12
15
|
searchAcrossNamespaces: async (_params: unknown) => [
|
|
13
16
|
{
|
|
14
17
|
id: "mem-1",
|
|
@@ -54,6 +57,9 @@ test("recallForActiveMemory caps limit, truncates snippets, and strips internal
|
|
|
54
57
|
test("recallForActiveMemory truncates snippets without splitting surrogate pairs", async () => {
|
|
55
58
|
const orchestrator = {
|
|
56
59
|
resolveSelfNamespace: () => "resolved-namespace",
|
|
60
|
+
getStorageForNamespace: async () => ({
|
|
61
|
+
getMemoryById: async () => ({ content: "emoji memory", frontmatter: {} } as never),
|
|
62
|
+
}),
|
|
57
63
|
searchAcrossNamespaces: async () => [
|
|
58
64
|
{
|
|
59
65
|
id: "mem-emoji",
|
|
@@ -95,6 +101,7 @@ test("recallForActiveMemory prioritizes an explicit namespace filter over the se
|
|
|
95
101
|
let receivedNamespaces: string[] | undefined;
|
|
96
102
|
const orchestrator = {
|
|
97
103
|
resolveSelfNamespace: () => "session-namespace",
|
|
104
|
+
filterPrivateSearchResults: keepVisibleSearchResults,
|
|
98
105
|
searchAcrossNamespaces: async (params: { namespaces?: string[] }) => {
|
|
99
106
|
receivedNamespaces = params.namespaces;
|
|
100
107
|
return [];
|
|
@@ -165,6 +172,7 @@ test("recallForActiveMemory denies blank session keys when namespaces are enable
|
|
|
165
172
|
test("recallForActiveMemory marks results truncated when the underlying recall exceeds the requested limit", async () => {
|
|
166
173
|
const orchestrator = {
|
|
167
174
|
resolveSelfNamespace: () => "session-namespace",
|
|
175
|
+
filterPrivateSearchResults: keepVisibleSearchResults,
|
|
168
176
|
searchAcrossNamespaces: async () =>
|
|
169
177
|
Array.from({ length: 3 }, (_, index) => ({
|
|
170
178
|
id: `mem-${index + 1}`,
|
|
@@ -187,6 +195,7 @@ test("recallForActiveMemory marks results truncated when the underlying recall e
|
|
|
187
195
|
test("recallForActiveMemory excludes artifact-backed hits before applying the visible result cap", async () => {
|
|
188
196
|
const orchestrator = {
|
|
189
197
|
resolveSelfNamespace: () => "session-namespace",
|
|
198
|
+
filterPrivateSearchResults: keepVisibleSearchResults,
|
|
190
199
|
searchAcrossNamespaces: async () => [
|
|
191
200
|
{
|
|
192
201
|
id: "artifact-1",
|
|
@@ -226,6 +235,128 @@ test("recallForActiveMemory excludes artifact-backed hits before applying the vi
|
|
|
226
235
|
);
|
|
227
236
|
});
|
|
228
237
|
|
|
238
|
+
test("recallForActiveMemory excludes support passport records before applying the visible result cap", async () => {
|
|
239
|
+
const memories = new Map([
|
|
240
|
+
["/tmp/memory/preferences/card.md", {
|
|
241
|
+
content: "Give me time to answer.",
|
|
242
|
+
frontmatter: { tags: ["support-passport-card"] },
|
|
243
|
+
} as never],
|
|
244
|
+
["/tmp/memory/corrections/audit.md", {
|
|
245
|
+
content: "Superseded: Give me time to answer.",
|
|
246
|
+
frontmatter: { tags: ["support-passport-audit"] },
|
|
247
|
+
} as never],
|
|
248
|
+
["/tmp/memory/facts/safe.md", {
|
|
249
|
+
content: "Safe memory.",
|
|
250
|
+
frontmatter: { tags: [] },
|
|
251
|
+
} as never],
|
|
252
|
+
]);
|
|
253
|
+
const orchestrator = {
|
|
254
|
+
resolveSelfNamespace: () => "session-namespace",
|
|
255
|
+
getStorageForNamespace: async () => ({
|
|
256
|
+
readMemoryByPath: async (memoryPath: string) => memories.get(memoryPath) ?? null,
|
|
257
|
+
}),
|
|
258
|
+
filterPrivateSearchResults: async (results: Array<{ path: string }>) =>
|
|
259
|
+
results.filter((result) => !result.path.includes("/preferences/card.md") && !result.path.includes("/corrections/audit.md")),
|
|
260
|
+
searchAcrossNamespaces: async () => [
|
|
261
|
+
{ id: "card", score: 0.99, path: "/tmp/memory/preferences/card.md", snippet: "private card" },
|
|
262
|
+
{ id: "audit", score: 0.98, path: "/tmp/memory/corrections/audit.md", snippet: "private audit" },
|
|
263
|
+
{ id: "safe", score: 0.8, path: "/tmp/memory/facts/safe.md", snippet: "safe memory" },
|
|
264
|
+
],
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const result = await recallForActiveMemory(orchestrator as never, {
|
|
268
|
+
query: "support",
|
|
269
|
+
limit: 2,
|
|
270
|
+
sessionKey: "session-b",
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
|
|
274
|
+
assert.equal(result.truncated, false);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test("recallForActiveMemory pages past private passport records", async () => {
|
|
278
|
+
const corpus = [
|
|
279
|
+
...Array.from({ length: 40 }, (_, index) => ({
|
|
280
|
+
id: `private-${index}`,
|
|
281
|
+
score: 1 - index / 100,
|
|
282
|
+
path: `/tmp/memory/preferences/private-${index}.md`,
|
|
283
|
+
snippet: "private support card",
|
|
284
|
+
})),
|
|
285
|
+
{ id: "safe", score: 0.5, path: "/tmp/memory/facts/safe.md", snippet: "safe memory" },
|
|
286
|
+
];
|
|
287
|
+
const limits: number[] = [];
|
|
288
|
+
const orchestrator = {
|
|
289
|
+
resolveSelfNamespace: () => "session-namespace",
|
|
290
|
+
filterPrivateSearchResults: async (results: Array<{ path: string }>) =>
|
|
291
|
+
results.filter((result) => result.path.endsWith("safe.md")),
|
|
292
|
+
searchAcrossNamespaces: async ({ maxResults }: { maxResults?: number }) => {
|
|
293
|
+
limits.push(maxResults ?? corpus.length);
|
|
294
|
+
return corpus.slice(0, maxResults);
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
const result = await recallForActiveMemory(orchestrator as never, {
|
|
299
|
+
query: "support",
|
|
300
|
+
limit: 1,
|
|
301
|
+
sessionKey: "session-b",
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
|
|
305
|
+
assert.ok(limits.length > 1);
|
|
306
|
+
assert.equal(result.truncated, false);
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
test("recallForActiveMemory resolves collection-prefixed paths through the private-result filter", async () => {
|
|
310
|
+
const calls: Array<{ paths: string[]; namespaces: readonly string[] | undefined }> = [];
|
|
311
|
+
const orchestrator = {
|
|
312
|
+
resolveSelfNamespace: () => "session-namespace",
|
|
313
|
+
getStorageForNamespace: async () => ({
|
|
314
|
+
readMemoryByPath: async () => {
|
|
315
|
+
throw new Error("direct path reads must not decide QMD visibility");
|
|
316
|
+
},
|
|
317
|
+
}),
|
|
318
|
+
filterPrivateSearchResults: async (
|
|
319
|
+
results: Array<{ path: string }>,
|
|
320
|
+
namespaces: readonly string[] | undefined,
|
|
321
|
+
) => {
|
|
322
|
+
calls.push({ paths: results.map((result) => result.path), namespaces });
|
|
323
|
+
return results.filter((result) => result.path.endsWith("safe.md"));
|
|
324
|
+
},
|
|
325
|
+
searchAcrossNamespaces: async () => [
|
|
326
|
+
{ id: "card", score: 0.99, path: "openclaw-engram/preferences/card.md", snippet: "private card" },
|
|
327
|
+
{ id: "safe", score: 0.8, path: "openclaw-engram/facts/safe.md", snippet: "safe memory" },
|
|
328
|
+
],
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
const result = await recallForActiveMemory(orchestrator as never, {
|
|
332
|
+
query: "support",
|
|
333
|
+
sessionKey: "session-b",
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
|
|
337
|
+
assert.deepEqual(calls, [{
|
|
338
|
+
paths: ["openclaw-engram/preferences/card.md", "openclaw-engram/facts/safe.md"],
|
|
339
|
+
namespaces: ["session-namespace"],
|
|
340
|
+
}]);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test("recallForActiveMemory fails closed when candidate storage cannot be resolved", async () => {
|
|
344
|
+
const orchestrator = {
|
|
345
|
+
resolveSelfNamespace: () => "session-namespace",
|
|
346
|
+
searchAcrossNamespaces: async () => [
|
|
347
|
+
{ id: "unresolved-path", path: "openclaw-engram/preferences/card.md", snippet: "private path" },
|
|
348
|
+
{ id: "unresolved-id", snippet: "private id" },
|
|
349
|
+
],
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
const result = await recallForActiveMemory(orchestrator as never, {
|
|
353
|
+
query: "support",
|
|
354
|
+
sessionKey: "session-b",
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
assert.deepEqual(result, { results: [], truncated: false });
|
|
358
|
+
});
|
|
359
|
+
|
|
229
360
|
test("getMemoryForActiveMemory returns not_found instead of throwing", async () => {
|
|
230
361
|
const orchestrator = {
|
|
231
362
|
resolveSelfNamespace: () => "readable-session",
|
|
@@ -238,6 +369,26 @@ test("getMemoryForActiveMemory returns not_found instead of throwing", async ()
|
|
|
238
369
|
assert.deepEqual(result, { error: "not_found" });
|
|
239
370
|
});
|
|
240
371
|
|
|
372
|
+
test("getMemoryForActiveMemory hides support passport records", async () => {
|
|
373
|
+
for (const tag of ["support-passport-card", "support-passport-audit"]) {
|
|
374
|
+
const orchestrator = {
|
|
375
|
+
resolveSelfNamespace: () => "readable-session",
|
|
376
|
+
getStorageForNamespace: async () => ({
|
|
377
|
+
getMemoryById: async () => ({
|
|
378
|
+
content: "owner-controlled content",
|
|
379
|
+
frontmatter: { tags: [tag] },
|
|
380
|
+
} as never),
|
|
381
|
+
}),
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
assert.deepEqual(
|
|
385
|
+
await getMemoryForActiveMemory(orchestrator as never, "private-record"),
|
|
386
|
+
{ error: "not_found" },
|
|
387
|
+
tag,
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
|
|
241
392
|
test("getMemoryForActiveMemory reads via the session-derived namespace storage", async () => {
|
|
242
393
|
let readNamespace: string | undefined;
|
|
243
394
|
const orchestrator = {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { resolveNamespaceCapabilities } from "./capabilities.js";
|
|
2
2
|
import { canReadNamespace, defaultNamespaceForPrincipal, resolvePrincipal } from "./namespaces/principal.js";
|
|
3
|
-
import type { MemoryFile, PluginConfig } from "./types.js";
|
|
3
|
+
import type { MemoryFile, PluginConfig, QmdSearchResult } from "./types.js";
|
|
4
4
|
import { collapseWhitespace, truncateCodePointSafe } from "./whitespace.js";
|
|
5
5
|
import { isHandleToken } from "./recall-handles.js";
|
|
6
|
+
import { isSupportPassportPrivateMemory } from "./support-passport/card-projection.js";
|
|
6
7
|
|
|
7
8
|
export interface ActiveMemoryMetadata {
|
|
8
9
|
type?: "fact" | "preference";
|
|
@@ -42,6 +43,16 @@ interface ActiveMemoryScopedOrchestrator {
|
|
|
42
43
|
config?: PluginConfig;
|
|
43
44
|
resolvePrincipal?: (sessionKey?: string) => string | undefined;
|
|
44
45
|
resolveSelfNamespace?: (sessionKey?: string) => string;
|
|
46
|
+
getStorageForNamespace?: (namespace: string) => Promise<{
|
|
47
|
+
readMemoryByPath?: (path: string) => Promise<MemoryFile | null>;
|
|
48
|
+
getMemoryById?: (id: string) => Promise<MemoryFile | null>;
|
|
49
|
+
}>;
|
|
50
|
+
filterPrivateSearchResults?: (
|
|
51
|
+
results: QmdSearchResult[],
|
|
52
|
+
namespaces?: readonly string[],
|
|
53
|
+
preserveUnresolved?: boolean,
|
|
54
|
+
visibilityCache?: Map<string, boolean>,
|
|
55
|
+
) => Promise<QmdSearchResult[]>;
|
|
45
56
|
}
|
|
46
57
|
|
|
47
58
|
type ActiveMemorySearchCandidate = {
|
|
@@ -57,6 +68,54 @@ function isArtifactPath(value: string | undefined): boolean {
|
|
|
57
68
|
return typeof value === "string" && /(?:^|[\\/])artifacts(?:[\\/]|$)/i.test(value);
|
|
58
69
|
}
|
|
59
70
|
|
|
71
|
+
async function filterVisibleActiveMemoryCandidates(
|
|
72
|
+
orchestrator: ActiveMemoryScopedOrchestrator,
|
|
73
|
+
namespace: string,
|
|
74
|
+
storage: Awaited<ReturnType<NonNullable<ActiveMemoryScopedOrchestrator["getStorageForNamespace"]>>> | undefined,
|
|
75
|
+
candidates: ActiveMemorySearchCandidate[],
|
|
76
|
+
visibilityCache?: Map<string, boolean>,
|
|
77
|
+
): Promise<ActiveMemorySearchCandidate[]> {
|
|
78
|
+
const visible = new Set<ActiveMemorySearchCandidate>();
|
|
79
|
+
const pathCandidates = candidates.filter(
|
|
80
|
+
(candidate) => typeof candidate.path === "string" && !isArtifactPath(candidate.path),
|
|
81
|
+
);
|
|
82
|
+
if (pathCandidates.length > 0 && typeof orchestrator.filterPrivateSearchResults === "function") {
|
|
83
|
+
const qmdCandidates = pathCandidates.map((candidate): QmdSearchResult => ({
|
|
84
|
+
docid: candidate.id ?? candidate.path!,
|
|
85
|
+
path: candidate.path!,
|
|
86
|
+
snippet: candidate.snippet ?? candidate.text ?? "",
|
|
87
|
+
score: typeof candidate.score === "number" ? candidate.score : 0,
|
|
88
|
+
namespace,
|
|
89
|
+
}));
|
|
90
|
+
const filtered = await orchestrator.filterPrivateSearchResults(
|
|
91
|
+
qmdCandidates,
|
|
92
|
+
[namespace],
|
|
93
|
+
false,
|
|
94
|
+
visibilityCache,
|
|
95
|
+
);
|
|
96
|
+
const visibleKeys = new Set(filtered.map((candidate) => `${candidate.docid}\0${candidate.path}`));
|
|
97
|
+
qmdCandidates.forEach((candidate, index) => {
|
|
98
|
+
if (visibleKeys.has(`${candidate.docid}\0${candidate.path}`)) visible.add(pathCandidates[index]!);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const idCandidates = candidates.filter(
|
|
103
|
+
(candidate) => candidate.path === undefined && typeof candidate.id === "string",
|
|
104
|
+
);
|
|
105
|
+
if (storage) {
|
|
106
|
+
const idVisibility = await Promise.all(
|
|
107
|
+
idCandidates.map(async (candidate) => {
|
|
108
|
+
const memory = await storage.getMemoryById?.(candidate.id!);
|
|
109
|
+
return memory !== null && memory !== undefined && !isSupportPassportPrivateMemory(memory);
|
|
110
|
+
}),
|
|
111
|
+
);
|
|
112
|
+
idCandidates.forEach((candidate, index) => {
|
|
113
|
+
if (idVisibility[index]) visible.add(candidate);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return candidates.filter((candidate) => visible.has(candidate));
|
|
117
|
+
}
|
|
118
|
+
|
|
60
119
|
function clampLimit(value: number | undefined): number {
|
|
61
120
|
if (typeof value !== "number" || !Number.isFinite(value)) return 8;
|
|
62
121
|
return Math.max(1, Math.min(50, Math.floor(value)));
|
|
@@ -127,6 +186,8 @@ export async function recallForActiveMemory(
|
|
|
127
186
|
config?: PluginConfig;
|
|
128
187
|
resolvePrincipal?: (sessionKey?: string) => string | undefined;
|
|
129
188
|
resolveSelfNamespace?: (sessionKey?: string) => string;
|
|
189
|
+
getStorageForNamespace?: ActiveMemoryScopedOrchestrator["getStorageForNamespace"];
|
|
190
|
+
filterPrivateSearchResults?: ActiveMemoryScopedOrchestrator["filterPrivateSearchResults"];
|
|
130
191
|
searchAcrossNamespaces: (params: {
|
|
131
192
|
query: string;
|
|
132
193
|
maxResults?: number;
|
|
@@ -137,7 +198,6 @@ export async function recallForActiveMemory(
|
|
|
137
198
|
params: ActiveMemoryRecallParams,
|
|
138
199
|
): Promise<ActiveMemorySearchOutput> {
|
|
139
200
|
const limit = clampLimit(params.limit);
|
|
140
|
-
const requestedResults = Math.min(200, limit + 20);
|
|
141
201
|
const snippetMaxChars =
|
|
142
202
|
typeof params.snippetMaxChars === "number" && Number.isFinite(params.snippetMaxChars)
|
|
143
203
|
? Math.max(1, Math.min(4000, Math.floor(params.snippetMaxChars)))
|
|
@@ -148,13 +208,29 @@ export async function recallForActiveMemory(
|
|
|
148
208
|
typeof params.filters?.namespace === "string" ? params.filters.namespace : undefined,
|
|
149
209
|
);
|
|
150
210
|
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
211
|
+
const storage = await orchestrator.getStorageForNamespace?.(namespace);
|
|
212
|
+
const candidateCap = 25_000;
|
|
213
|
+
let requestedResults = Math.min(candidateCap, limit + 20);
|
|
214
|
+
let raw: ActiveMemorySearchCandidate[] = [];
|
|
215
|
+
let visible: ActiveMemorySearchCandidate[] = [];
|
|
216
|
+
const privateVisibilityCache = new Map<string, boolean>();
|
|
217
|
+
for (;;) {
|
|
218
|
+
raw = await orchestrator.searchAcrossNamespaces({
|
|
219
|
+
query: params.query,
|
|
220
|
+
maxResults: requestedResults,
|
|
221
|
+
namespaces: [namespace],
|
|
222
|
+
mode: "search",
|
|
223
|
+
});
|
|
224
|
+
visible = await filterVisibleActiveMemoryCandidates(
|
|
225
|
+
orchestrator,
|
|
226
|
+
namespace,
|
|
227
|
+
storage,
|
|
228
|
+
raw,
|
|
229
|
+
privateVisibilityCache,
|
|
230
|
+
);
|
|
231
|
+
if (visible.length > limit || raw.length < requestedResults || requestedResults >= candidateCap) break;
|
|
232
|
+
requestedResults = Math.min(candidateCap, requestedResults * 2);
|
|
233
|
+
}
|
|
158
234
|
|
|
159
235
|
return {
|
|
160
236
|
results: visible.slice(0, limit).map((candidate, index) => ({
|
|
@@ -163,7 +239,7 @@ export async function recallForActiveMemory(
|
|
|
163
239
|
text: truncateSnippet(candidate.snippet ?? candidate.text ?? "", snippetMaxChars),
|
|
164
240
|
metadata: pickMetadata(candidate.metadata),
|
|
165
241
|
})),
|
|
166
|
-
truncated: visible.length > limit,
|
|
242
|
+
truncated: visible.length > limit || (raw.length === requestedResults && requestedResults >= candidateCap),
|
|
167
243
|
};
|
|
168
244
|
}
|
|
169
245
|
|
|
@@ -231,7 +307,7 @@ export async function getMemoryForActiveMemory(
|
|
|
231
307
|
}
|
|
232
308
|
}
|
|
233
309
|
const memory = await storage?.getMemoryById?.(resolvedId);
|
|
234
|
-
if (!memory) return { error: "not_found" };
|
|
310
|
+
if (!memory || isSupportPassportPrivateMemory(memory)) return { error: "not_found" };
|
|
235
311
|
return {
|
|
236
312
|
id: resolvedId,
|
|
237
313
|
text: collapseWhitespace(memory.content),
|
package/src/briefing.test.ts
CHANGED
|
@@ -914,6 +914,44 @@ function makeEmptyStorage(): StorageManager {
|
|
|
914
914
|
} as unknown as StorageManager;
|
|
915
915
|
}
|
|
916
916
|
|
|
917
|
+
test("buildBriefing excludes support passport records from generated context", async () => {
|
|
918
|
+
const generatedPrompts: unknown[] = [];
|
|
919
|
+
const privateMemory: MemoryFile = {
|
|
920
|
+
...makeMemory("2026-04-10T12:00:00.000Z"),
|
|
921
|
+
frontmatter: {
|
|
922
|
+
...makeMemory("2026-04-10T12:00:00.000Z").frontmatter,
|
|
923
|
+
tags: ["support-passport-card"],
|
|
924
|
+
},
|
|
925
|
+
content: "Private support statement",
|
|
926
|
+
};
|
|
927
|
+
const publicMemory: MemoryFile = {
|
|
928
|
+
...makeMemory("2026-04-10T13:00:00.000Z"),
|
|
929
|
+
frontmatter: {
|
|
930
|
+
...makeMemory("2026-04-10T13:00:00.000Z").frontmatter,
|
|
931
|
+
id: "public-memory",
|
|
932
|
+
},
|
|
933
|
+
content: "Public project update",
|
|
934
|
+
};
|
|
935
|
+
const storage = {
|
|
936
|
+
readAllMemories: async () => [privateMemory, publicMemory],
|
|
937
|
+
readAllEntityFiles: async () => [],
|
|
938
|
+
} as unknown as StorageManager;
|
|
939
|
+
|
|
940
|
+
const result = await buildBriefing({
|
|
941
|
+
storage,
|
|
942
|
+
window: makeWindow("2026-04-10T00:00:00.000Z", "2026-04-11T00:00:00.000Z"),
|
|
943
|
+
followupGenerator: async (prompt) => {
|
|
944
|
+
generatedPrompts.push(prompt);
|
|
945
|
+
return [];
|
|
946
|
+
},
|
|
947
|
+
now: new Date("2026-04-11T10:00:00.000Z"),
|
|
948
|
+
});
|
|
949
|
+
|
|
950
|
+
assert.equal(result.markdown.includes(privateMemory.content), false);
|
|
951
|
+
assert.equal(JSON.stringify(generatedPrompts).includes(privateMemory.content), false);
|
|
952
|
+
assert.equal(result.markdown.includes(publicMemory.content), true);
|
|
953
|
+
});
|
|
954
|
+
|
|
917
955
|
test("buildBriefing: model-not-found 400 error produces user-friendly followupsUnavailableReason", async () => {
|
|
918
956
|
// Inject a mock generator that throws an error resembling a Responses API
|
|
919
957
|
// 400 "model does not exist" response.
|
package/src/briefing.ts
CHANGED
|
@@ -21,6 +21,7 @@ import path from "node:path";
|
|
|
21
21
|
import { log } from "./logger.js";
|
|
22
22
|
import { extractJsonCandidates } from "./json-extract.js";
|
|
23
23
|
import { drainPassiveCorrectionNotifications } from "./correction/passive-correction-notifications.js";
|
|
24
|
+
import { excludeSupportPassportPrivateMemories } from "./support-passport/card-projection.js";
|
|
24
25
|
import { normalizeEntityName, StorageManager } from "./storage.js";
|
|
25
26
|
import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
|
|
26
27
|
import type {
|
|
@@ -978,9 +979,8 @@ function defaultWindow(now: Date): ParsedBriefingWindow {
|
|
|
978
979
|
|
|
979
980
|
async function safeReadMemories(storage: StorageManager): Promise<MemoryFile[]> {
|
|
980
981
|
try {
|
|
981
|
-
return await storage.readAllMemories();
|
|
982
|
-
} catch (err) {
|
|
983
|
-
log.warn(`briefing: readAllMemories failed: ${err}`);
|
|
982
|
+
return excludeSupportPassportPrivateMemories(await storage.readAllMemories());
|
|
983
|
+
} catch (err) { log.warn(`briefing: readAllMemories failed: ${err}`);
|
|
984
984
|
return [];
|
|
985
985
|
}
|
|
986
986
|
}
|
package/src/cli.ts
CHANGED
|
@@ -236,6 +236,9 @@ import {
|
|
|
236
236
|
import { resolveHomeDir } from "./runtime/env.js";
|
|
237
237
|
import { expandTildePath } from "./utils/path.js";
|
|
238
238
|
import { RECALL_FALLBACK_DIRS } from "./utils/category-dir.js";
|
|
239
|
+
import {
|
|
240
|
+
isSupportPassportPrivateMemory,
|
|
241
|
+
} from "./support-passport/card-projection.js";
|
|
239
242
|
import { assertPathInsideRoot } from "./utils/path-containment.js";
|
|
240
243
|
import { convertMemoriesToRecords } from "./training-export/converter.js";
|
|
241
244
|
import { parseStrictCliDate as parseStrictCliDateShared } from "./training-export/date-parse.js";
|
|
@@ -1066,6 +1069,8 @@ export async function runMemoryTimelineCliCommand(
|
|
|
1066
1069
|
options: MemoryTimelineCliCommandOptions,
|
|
1067
1070
|
) {
|
|
1068
1071
|
const storage = new (await import("./storage.js")).StorageManager(options.memoryDir);
|
|
1072
|
+
const memory = await storage.getMemoryByIdIncludingArchived(options.memoryId);
|
|
1073
|
+
if (!memory || isSupportPassportPrivateMemory(memory)) return [];
|
|
1069
1074
|
return storage.getMemoryTimeline(options.memoryId, options.limit);
|
|
1070
1075
|
}
|
|
1071
1076
|
|
|
@@ -1382,7 +1387,7 @@ export async function runVerifiedRecallSearchCliCommand(options: {
|
|
|
1382
1387
|
}
|
|
1383
1388
|
|
|
1384
1389
|
export function isNormalRetrievalVisibleMemory(memory: MemoryFile): boolean {
|
|
1385
|
-
return memory.frontmatter.status !== "forgotten";
|
|
1390
|
+
return memory.frontmatter.status !== "forgotten" && !isSupportPassportPrivateMemory(memory);
|
|
1386
1391
|
}
|
|
1387
1392
|
|
|
1388
1393
|
export async function filterNormalMemorySearchResults(
|
|
@@ -15,6 +15,7 @@ import { log } from "../logger.js";
|
|
|
15
15
|
import { resolveNamespaceChildRoot } from "../namespaces/path.js";
|
|
16
16
|
import { isSafeRouteNamespace } from "../routing/engine.js";
|
|
17
17
|
import { StorageManager } from "../storage.js";
|
|
18
|
+
import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
|
|
18
19
|
import type { PluginConfig, MemoryFile } from "../types.js";
|
|
19
20
|
import {
|
|
20
21
|
hasCodexMaterializeSentinel,
|
|
@@ -106,6 +107,7 @@ export async function runCodexMaterialize(
|
|
|
106
107
|
const storage = new StorageManager(nsDir);
|
|
107
108
|
memories = await storage.readAllMemories();
|
|
108
109
|
}
|
|
110
|
+
memories = excludeSupportPassportPrivateMemories(memories);
|
|
109
111
|
|
|
110
112
|
// Intentionally NOT catching here: per the JSDoc contract above,
|
|
111
113
|
// schema-validation and I/O errors from `materializeForNamespace` must
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
} from "./contradiction-review.js";
|
|
33
33
|
import type { LocalLlmClient } from "../local-llm.js";
|
|
34
34
|
import type { FallbackLlmClient } from "../fallback-llm.js";
|
|
35
|
+
import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
|
|
35
36
|
|
|
36
37
|
// ── Types ──────────────────────────────────────────────────────────────────────
|
|
37
38
|
|
|
@@ -450,6 +451,7 @@ async function loadEligibleMemories(storage: StorageManager): Promise<MemoryFile
|
|
|
450
451
|
|
|
451
452
|
return all.filter((mem) => {
|
|
452
453
|
const fm = mem.frontmatter;
|
|
454
|
+
if (isSupportPassportPrivateMemory(mem)) return false;
|
|
453
455
|
// Only active memories (rule 53: explicit ACTIVE_STATUSES set)
|
|
454
456
|
const status = (fm.status as MemoryStatus) ?? "active";
|
|
455
457
|
if (!ACTIVE_STATUSES.has(status)) return false;
|