@remnic/core 9.54.4 → 9.54.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +24 -23
- package/dist/access-admin-ops-surface.js +55 -50
- package/dist/access-authorization-probe.d.ts +25 -22
- package/dist/access-authorization-probe.js +58 -51
- package/dist/access-boundary.d.ts +26 -23
- package/dist/access-boundary.js +59 -52
- package/dist/access-cli.js +115 -107
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +19 -18
- package/dist/access-extraction-force-flush.js +55 -50
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +22 -21
- package/dist/access-http-lifecycle-flush.d.ts +22 -21
- package/dist/access-http-offline-stream.d.ts +19 -18
- package/dist/access-http-query.js +55 -50
- package/dist/access-http.d.ts +55 -36
- package/dist/access-http.js +76 -65
- package/dist/access-identity-continuity-surface.d.ts +9 -9
- package/dist/access-identity-continuity-surface.js +55 -50
- package/dist/access-lcm-surface.d.ts +21 -20
- package/dist/access-lcm-surface.js +55 -50
- package/dist/access-mcp.d.ts +22 -21
- package/dist/access-mcp.js +63 -57
- package/dist/access-memory-search-fanout.d.ts +22 -2
- package/dist/access-memory-search-fanout.js +1 -1
- package/dist/{access-namespace-preflight-C7n4tgWC.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +55 -50
- package/dist/access-observe-write-surface.d.ts +22 -21
- package/dist/access-observe-write-surface.js +55 -50
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-offline-manifest.js +12 -10
- package/dist/access-operations-batch.js +57 -52
- package/dist/access-operations.d.ts +23 -22
- package/dist/access-operations.js +61 -55
- package/dist/access-recall-concurrency.d.ts +21 -20
- package/dist/access-recall-concurrency.js +55 -50
- package/dist/access-recall-response.d.ts +19 -18
- package/dist/access-recall-response.js +55 -50
- package/dist/access-recall-surface.d.ts +19 -18
- package/dist/access-recall-surface.js +55 -50
- package/dist/access-schema.d.ts +2 -2
- package/dist/access-schema.js +5 -4
- package/dist/{access-service-CXvbxLK-.d.ts → access-service-DkSdXK4S.d.ts} +1314 -83
- package/dist/access-service-helpers.d.ts +22 -21
- package/dist/access-service.d.ts +31 -30
- package/dist/access-service.js +55 -50
- package/dist/access-surface-catalog.d.ts +22 -21
- package/dist/access-surface-catalog.js +209 -2
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +14 -1
- package/dist/active-memory-bridge.js +6 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +4 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/admin-console/public/what-helps-me/app.js +1594 -0
- package/dist/admin-console/public/what-helps-me/index.html +339 -0
- package/dist/admin-console/public/what-helps-me/model.js +685 -0
- package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +9 -9
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +33 -12
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +3 -3
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-BOOxl-I2.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +34 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-ZYLC7NFO.js → chunk-26ZXBTYN.js} +4 -4
- package/dist/chunk-26ZXBTYN.js.map +1 -0
- package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
- package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
- package/dist/chunk-2LWQSV6A.js.map +1 -0
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/chunk-37DZZFFM.js +502 -0
- package/dist/chunk-37DZZFFM.js.map +1 -0
- package/dist/chunk-3HSRWJTC.js +9 -0
- package/dist/chunk-3HSRWJTC.js.map +1 -0
- package/dist/{chunk-XUAMCLY4.js → chunk-3TIZPSJC.js} +17 -13
- package/dist/chunk-3TIZPSJC.js.map +1 -0
- package/dist/{chunk-PDDTI7IC.js → chunk-43SEBY2M.js} +1 -1
- package/dist/{chunk-HWRD23DW.js → chunk-46SZBVDS.js} +3 -3
- package/dist/{chunk-6HPHEFXT.js → chunk-5FD7JMTX.js} +2 -2
- package/dist/{chunk-7BZOBA5J.js → chunk-5NB726GV.js} +70 -16
- package/dist/chunk-5NB726GV.js.map +1 -0
- package/dist/chunk-62OKGIJA.js +39 -0
- package/dist/chunk-62OKGIJA.js.map +1 -0
- package/dist/{chunk-IBKR2TFR.js → chunk-6CYHUWCO.js} +2 -2
- package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
- package/dist/{chunk-UU3G6GUP.js → chunk-76JJSXK7.js} +1 -1
- package/dist/chunk-76JJSXK7.js.map +1 -0
- package/dist/{chunk-PX2LSHYM.js → chunk-7BD6O7ZV.js} +189 -4
- package/dist/chunk-7BD6O7ZV.js.map +1 -0
- package/dist/chunk-7TBXNYLO.js +346 -0
- package/dist/chunk-7TBXNYLO.js.map +1 -0
- package/dist/{chunk-NH5IR2WM.js → chunk-BRR5EUTF.js} +6 -2
- package/dist/chunk-BRR5EUTF.js.map +1 -0
- package/dist/{chunk-NIS256NW.js → chunk-CIAI24TQ.js} +3 -3
- package/dist/{chunk-T2JHZWH6.js → chunk-D3LBIUWV.js} +11703 -7573
- package/dist/chunk-D3LBIUWV.js.map +1 -0
- package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
- package/dist/{chunk-G7Z6EENO.js → chunk-EKTP7MNS.js} +4 -4
- package/dist/{chunk-S75M5ZRK.js → chunk-F2JRDPON.js} +16 -1
- package/dist/chunk-F2JRDPON.js.map +1 -0
- package/dist/{chunk-RZ4XGKOJ.js → chunk-FFRTNF3L.js} +8 -8
- package/dist/{chunk-VKXWK44Q.js → chunk-FONWBCVY.js} +3 -3
- package/dist/{chunk-DZD576ZU.js → chunk-FPLM2TKD.js} +2 -2
- package/dist/{chunk-ZPJ4QSGP.js → chunk-FTPONF6B.js} +2 -2
- package/dist/{chunk-LJS7KUPV.js → chunk-FWX7W5PM.js} +2 -2
- package/dist/{chunk-UTRO5UJU.js → chunk-G6DFSS6A.js} +5 -1
- package/dist/chunk-G6DFSS6A.js.map +1 -0
- package/dist/{chunk-6LAPLZOS.js → chunk-GJ776BC2.js} +8 -3
- package/dist/chunk-GJ776BC2.js.map +1 -0
- package/dist/{chunk-G4T7L557.js → chunk-GN3WRFJY.js} +6 -6
- package/dist/{chunk-QT2FRYI4.js → chunk-H7NAZ3UB.js} +2 -2
- package/dist/{chunk-APPFNGX6.js → chunk-HBUFQRIM.js} +2 -2
- package/dist/{chunk-UU7TRFNE.js → chunk-HGJ6NJ4E.js} +2 -2
- package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
- package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
- package/dist/{chunk-UES4BHA2.js → chunk-I3MSGFGD.js} +17 -6
- package/dist/chunk-I3MSGFGD.js.map +1 -0
- package/dist/{chunk-C4ZNGVK3.js → chunk-IKP5OYQQ.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
- package/dist/{chunk-RDJRFDJY.js → chunk-IQ4NVWEF.js} +2 -2
- package/dist/{chunk-CGVHPCP2.js → chunk-JYG4OLWH.js} +2 -2
- package/dist/{chunk-WOPA3SGI.js → chunk-K26NWEOC.js} +8 -8
- package/dist/{chunk-K4QS7LXU.js → chunk-K2UGPTYY.js} +485 -44
- package/dist/chunk-K2UGPTYY.js.map +1 -0
- package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
- package/dist/chunk-KFBOPMF6.js.map +1 -0
- package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
- package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
- package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
- package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
- package/dist/chunk-LC2BDILZ.js +57 -0
- package/dist/chunk-LC2BDILZ.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-6R4G7N4S.js → chunk-M4YHAODQ.js} +388 -748
- package/dist/chunk-M4YHAODQ.js.map +1 -0
- package/dist/{chunk-3JLPGJ43.js → chunk-MIH3CJPN.js} +5 -5
- package/dist/{chunk-QHFV6VNU.js → chunk-MK5VEWCR.js} +2 -2
- package/dist/chunk-NISZQW72.js +140 -0
- package/dist/chunk-NISZQW72.js.map +1 -0
- package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
- package/dist/{chunk-G2LUMAUF.js → chunk-OCIP6YMD.js} +12 -5
- package/dist/chunk-OCIP6YMD.js.map +1 -0
- package/dist/{chunk-47P3RYZP.js → chunk-PG4QBPVG.js} +21 -11
- package/dist/chunk-PG4QBPVG.js.map +1 -0
- package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
- package/dist/{chunk-QWGE2PUH.js → chunk-PT54WISF.js} +190 -56
- package/dist/chunk-PT54WISF.js.map +1 -0
- package/dist/{chunk-AZM4CCAC.js → chunk-QZLDRQ4I.js} +8 -8
- package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
- package/dist/{chunk-JDZPNCMA.js → chunk-RUNORG2P.js} +6 -3
- package/dist/chunk-RUNORG2P.js.map +1 -0
- package/dist/{chunk-JV5YUBIZ.js → chunk-RZQ6W2W4.js} +50 -44
- package/dist/chunk-RZQ6W2W4.js.map +1 -0
- package/dist/{chunk-RUMNY5DT.js → chunk-SMNYAMJD.js} +6 -2
- package/dist/chunk-SMNYAMJD.js.map +1 -0
- package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
- package/dist/chunk-TB6CBZ5V.js.map +1 -0
- package/dist/{chunk-VMMQDEN5.js → chunk-TO7ZTWJW.js} +2 -2
- package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
- package/dist/{chunk-HLYR2TQL.js → chunk-UCTS3DDH.js} +2 -2
- package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
- package/dist/{chunk-WM65LU67.js → chunk-UKYS3NU5.js} +2 -2
- package/dist/{chunk-WDBX6VER.js → chunk-UPLZNJKN.js} +5 -5
- package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
- package/dist/chunk-UW5NPZJ2.js.map +1 -0
- package/dist/{chunk-2GFK22OZ.js → chunk-V6ERBR7U.js} +2 -2
- package/dist/{chunk-CYF6WVE7.js → chunk-W5ZKPI34.js} +139 -158
- package/dist/chunk-W5ZKPI34.js.map +1 -0
- package/dist/chunk-XX4HPFFM.js +370 -0
- package/dist/chunk-XX4HPFFM.js.map +1 -0
- package/dist/{chunk-ZMYDYNI4.js → chunk-XZHE2DEN.js} +4 -4
- package/dist/chunk-YXQEKCZM.js +223 -0
- package/dist/chunk-YXQEKCZM.js.map +1 -0
- package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
- package/dist/chunk-Z4N7SVVF.js.map +1 -0
- package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
- package/dist/{chunk-YGLY6QFV.js → chunk-ZRZVLB7O.js} +2 -2
- package/dist/{chunk-4IIFL7GC.js → chunk-ZUKIUXHQ.js} +10 -10
- package/dist/{cli-DVUFIa5E.d.ts → cli-Bze8S0Qs.d.ts} +5 -5
- package/dist/cli.d.ts +22 -21
- package/dist/cli.js +90 -80
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +33 -12
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +4 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +33 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +32 -12
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +3 -1
- package/dist/contradiction-scan-JDTBXRGW.js +20 -0
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +35 -14
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +25 -24
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +33 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -9
- package/dist/explicit-capture.js +7 -4
- package/dist/external-wiki-access.d.ts +22 -21
- package/dist/external-wiki-access.js +56 -51
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +22 -21
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-faithfulness.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +35 -19
- package/dist/fallback-llm.d.ts +14 -1
- package/dist/fallback-llm.js +1 -1
- package/dist/{first-start-migration-626C5554.js → first-start-migration-CRZCZAJN.js} +11 -3
- package/dist/first-start-migration-CRZCZAJN.js.map +1 -0
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +314 -308
- package/dist/index.js +304 -133
- package/dist/inline-script.d.ts +3 -0
- package/dist/inline-script.js +8 -0
- package/dist/inline-script.js.map +1 -0
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +6 -6
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +33 -12
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -12
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +34 -13
- package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +22 -21
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-mutations.js +2 -2
- package/dist/memory-projection-store.d.ts +6 -2
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +24 -23
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +33 -12
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-file-io.d.ts +20 -0
- package/dist/offline-sync-file-io.js +18 -0
- package/dist/offline-sync-file-io.js.map +1 -0
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +5 -5
- package/dist/offline-sync.d.ts +8 -6
- package/dist/offline-sync.js +2 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +26 -25
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +39 -36
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +38 -18
- package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-D85CzDDY.d.ts} +11 -8
- package/dist/orchestrator.d.ts +9 -9
- package/dist/orchestrator.js +117 -109
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/public-http-D-SyWNj6.d.ts +25 -0
- package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
- package/dist/{qmd-eAWObK4M.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-planner-llm.js +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/manifest.js +6 -5
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/reconcile/plan.js +3 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +5 -3
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/schemas.d.ts +38 -38
- package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +6 -6
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +34 -13
- package/dist/semantic-rule-promotion.js +33 -12
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +33 -12
- package/dist/{service-DIrtHHEg.d.ts → service-DT-pJyda.d.ts} +660 -660
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +31 -15
- package/dist/{storage-DqCzXi56.d.ts → storage-qOnaJ1Lw.d.ts} +49 -13
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +33 -12
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +518 -0
- package/dist/support-passport/index.js +357 -0
- package/dist/support-passport/index.js.map +1 -0
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +2 -2
- package/dist/tier-routing.js +7 -1
- package/dist/{tier-stats-2JCZYEF7.js → tier-stats-EXYSKSVN.js} +8 -2
- package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-EXYSKSVN.js.map} +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/types.d.ts +36 -36
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-d_j4vC6N.d.ts → types-ed-SvS2t.d.ts} +8 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -2
- package/dist/verified-recall.js +33 -12
- package/dist/write-envelope.d.ts +1 -1
- package/dist/write-rate-limiter.d.ts +11 -5
- package/dist/write-rate-limiter.js +1 -1
- package/package.json +12 -2
- package/scripts/build-with-heap.mjs +11 -1
- package/src/access-authorization-probe.ts +20 -2
- package/src/access-boundary.ts +32 -0
- package/src/access-http.test.ts +1971 -643
- package/src/access-http.ts +81 -74
- package/src/access-mcp.ts +3 -1
- package/src/access-memory-search-fanout.ts +24 -1
- package/src/access-offline-manifest.ts +5 -0
- package/src/access-operations.ts +2 -0
- package/src/access-service-namespace.test.ts +14 -0
- package/src/access-service-observe-scope.test.ts +2 -0
- package/src/access-service-offline-file-content.test.ts +211 -0
- package/src/access-service.ts +628 -884
- package/src/access-surface-catalog.test.ts +40 -10
- package/src/access-surface-catalog.ts +15 -0
- package/src/active-memory-bridge.test.ts +151 -0
- package/src/active-memory-bridge.ts +95 -21
- package/src/briefing.test.ts +38 -0
- package/src/briefing.ts +3 -3
- package/src/cli.ts +6 -1
- package/src/config.ts +18 -9
- package/src/connectors/codex-materialize-runner.ts +2 -0
- package/src/contradiction/contradiction-scan.ts +2 -0
- package/src/contradiction/contradiction.test.ts +42 -0
- package/src/correction/correction-access-wiring.ts +8 -2
- package/src/correction/correction-storage-integration.test.ts +7 -0
- package/src/explicit-capture.test.ts +24 -0
- package/src/explicit-capture.ts +2 -0
- package/src/fallback-llm.test.ts +54 -0
- package/src/fallback-llm.ts +54 -9
- package/src/index.ts +3 -0
- package/src/inline-script.ts +6 -0
- package/src/local-llm-headers-timeout.test.ts +42 -0
- package/src/local-llm.ts +8 -8
- package/src/maintenance/first-start-migration.ts +2 -1
- package/src/maintenance/memory-governance.test.ts +25 -0
- package/src/maintenance/memory-governance.ts +4 -1
- package/src/maintenance/pattern-reinforcement.test.ts +20 -0
- package/src/maintenance/pattern-reinforcement.ts +2 -1
- package/src/maintenance/rebuild-memory-projection.ts +8 -8
- package/src/mcp-read-only-tools.ts +3 -0
- package/src/memory-projection-store.ts +25 -27
- package/src/offline-sync-file-io.ts +68 -0
- package/src/offline-sync.ts +43 -57
- package/src/orchestration/consolidation-run.ts +5 -4
- package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
- package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
- package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
- package/src/orchestration/qmd-result-resolver.test.ts +215 -14
- package/src/orchestration/qmd-result-resolver.ts +142 -82
- package/src/orchestration/recall-search-pipeline.test.ts +41 -0
- package/src/orchestration/recall-search-pipeline.ts +12 -0
- package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
- package/src/orchestration/tier-migration-coordinator.ts +23 -56
- package/src/orchestration/workspace-ops.test.ts +37 -0
- package/src/orchestration/workspace-ops.ts +5 -29
- package/src/orchestrator.ts +7 -8
- package/src/relay/mission-access.test.ts +11 -11
- package/src/relay/mission-ui.test.ts +3 -1
- package/src/storage/supersession-audit.ts +7 -1
- package/src/storage/supersession-side-effects.ts +17 -5
- package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
- package/src/storage-contract/failure-semantics.test.ts +102 -0
- package/src/storage.ts +18 -19
- package/src/support-passport/access-http-base.ts +143 -0
- package/src/support-passport/access-http.ts +172 -0
- package/src/support-passport/access-operations.ts +272 -0
- package/src/support-passport/access-service-base.test.ts +193 -0
- package/src/support-passport/access-service-base.ts +176 -0
- package/src/support-passport/access-surface.test.ts +283 -0
- package/src/support-passport/access-surface.ts +286 -0
- package/src/support-passport/card-projection.test.ts +137 -0
- package/src/support-passport/card-projection.ts +348 -0
- package/src/support-passport/card-replacement.ts +126 -0
- package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
- package/src/support-passport/card-service.test.ts +2964 -0
- package/src/support-passport/card-service.ts +1184 -0
- package/src/support-passport/card-state.ts +158 -0
- package/src/support-passport/config-model-routing.test.ts +37 -0
- package/src/support-passport/config.test.ts +34 -0
- package/src/support-passport/config.ts +41 -0
- package/src/support-passport/contracts.test.ts +156 -0
- package/src/support-passport/contracts.ts +149 -0
- package/src/support-passport/errors.ts +30 -0
- package/src/support-passport/generated-batch.test.ts +185 -0
- package/src/support-passport/generated-batch.ts +338 -0
- package/src/support-passport/grant-contracts.ts +183 -0
- package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
- package/src/support-passport/grant-service-cache.test.ts +148 -0
- package/src/support-passport/grant-service-cancellation.test.ts +83 -0
- package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
- package/src/support-passport/grant-service.test.ts +3496 -0
- package/src/support-passport/grant-service.ts +513 -0
- package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
- package/src/support-passport/grant-store-order.test.ts +60 -0
- package/src/support-passport/grant-store-path-safety.test.ts +30 -0
- package/src/support-passport/grant-store-recovery.test.ts +448 -0
- package/src/support-passport/grant-store.ts +906 -0
- package/src/support-passport/index.ts +17 -0
- package/src/support-passport/mcp-tools.test.ts +222 -0
- package/src/support-passport/mcp-tools.ts +187 -0
- package/src/support-passport/model-adapter.test.ts +840 -0
- package/src/support-passport/model-adapter.ts +602 -0
- package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
- package/src/support-passport/model-audit.ts +152 -0
- package/src/support-passport/model-bridge.test.ts +456 -0
- package/src/support-passport/model-bridge.ts +439 -0
- package/src/support-passport/model-contracts.ts +124 -0
- package/src/support-passport/model-service.test.ts +1731 -0
- package/src/support-passport/model-service.ts +399 -0
- package/src/support-passport/offline-sync-guard.ts +230 -0
- package/src/support-passport/owner-http.test.ts +671 -0
- package/src/support-passport/owner-lock.ts +70 -0
- package/src/support-passport/private-file.test.ts +99 -0
- package/src/support-passport/private-file.ts +498 -0
- package/src/support-passport/public-http.test.ts +476 -0
- package/src/support-passport/public-http.ts +601 -0
- package/src/support-passport/ui.test.ts +181 -0
- package/src/tier-routing.ts +28 -17
- package/src/training-export/converter.test.ts +24 -0
- package/src/training-export/converter.ts +2 -0
- package/src/types.ts +8 -1
- package/src/wearables/service.test.ts +13 -0
- package/src/wearables/service.ts +2 -0
- package/src/write-rate-limiter.test.ts +30 -6
- package/src/write-rate-limiter.ts +29 -18
- package/dist/chunk-3CSX3ETE.js.map +0 -1
- package/dist/chunk-47P3RYZP.js.map +0 -1
- package/dist/chunk-6LAPLZOS.js.map +0 -1
- package/dist/chunk-6R4G7N4S.js.map +0 -1
- package/dist/chunk-7BZOBA5J.js.map +0 -1
- package/dist/chunk-C23BYTJV.js.map +0 -1
- package/dist/chunk-CYF6WVE7.js.map +0 -1
- package/dist/chunk-G2LUMAUF.js.map +0 -1
- package/dist/chunk-GYPQL6XN.js.map +0 -1
- package/dist/chunk-JDZPNCMA.js.map +0 -1
- package/dist/chunk-JV5YUBIZ.js.map +0 -1
- package/dist/chunk-K4QS7LXU.js.map +0 -1
- package/dist/chunk-L6CQ7WIW.js.map +0 -1
- package/dist/chunk-MKQBXQKU.js.map +0 -1
- package/dist/chunk-NH5IR2WM.js.map +0 -1
- package/dist/chunk-PX2LSHYM.js.map +0 -1
- package/dist/chunk-QWGE2PUH.js.map +0 -1
- package/dist/chunk-RUMNY5DT.js.map +0 -1
- package/dist/chunk-S75M5ZRK.js.map +0 -1
- package/dist/chunk-T2JHZWH6.js.map +0 -1
- package/dist/chunk-UES4BHA2.js.map +0 -1
- package/dist/chunk-UTRO5UJU.js.map +0 -1
- package/dist/chunk-UU3G6GUP.js.map +0 -1
- package/dist/chunk-XUAMCLY4.js.map +0 -1
- package/dist/chunk-ZYLC7NFO.js.map +0 -1
- package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
- package/dist/first-start-migration-626C5554.js.map +0 -1
- /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
- /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-PDDTI7IC.js.map → chunk-43SEBY2M.js.map} +0 -0
- /package/dist/{chunk-HWRD23DW.js.map → chunk-46SZBVDS.js.map} +0 -0
- /package/dist/{chunk-6HPHEFXT.js.map → chunk-5FD7JMTX.js.map} +0 -0
- /package/dist/{chunk-IBKR2TFR.js.map → chunk-6CYHUWCO.js.map} +0 -0
- /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
- /package/dist/{chunk-NIS256NW.js.map → chunk-CIAI24TQ.js.map} +0 -0
- /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
- /package/dist/{chunk-G7Z6EENO.js.map → chunk-EKTP7MNS.js.map} +0 -0
- /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-FFRTNF3L.js.map} +0 -0
- /package/dist/{chunk-VKXWK44Q.js.map → chunk-FONWBCVY.js.map} +0 -0
- /package/dist/{chunk-DZD576ZU.js.map → chunk-FPLM2TKD.js.map} +0 -0
- /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-FTPONF6B.js.map} +0 -0
- /package/dist/{chunk-LJS7KUPV.js.map → chunk-FWX7W5PM.js.map} +0 -0
- /package/dist/{chunk-G4T7L557.js.map → chunk-GN3WRFJY.js.map} +0 -0
- /package/dist/{chunk-QT2FRYI4.js.map → chunk-H7NAZ3UB.js.map} +0 -0
- /package/dist/{chunk-APPFNGX6.js.map → chunk-HBUFQRIM.js.map} +0 -0
- /package/dist/{chunk-UU7TRFNE.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
- /package/dist/{chunk-C4ZNGVK3.js.map → chunk-IKP5OYQQ.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
- /package/dist/{chunk-RDJRFDJY.js.map → chunk-IQ4NVWEF.js.map} +0 -0
- /package/dist/{chunk-CGVHPCP2.js.map → chunk-JYG4OLWH.js.map} +0 -0
- /package/dist/{chunk-WOPA3SGI.js.map → chunk-K26NWEOC.js.map} +0 -0
- /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
- /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-3JLPGJ43.js.map → chunk-MIH3CJPN.js.map} +0 -0
- /package/dist/{chunk-QHFV6VNU.js.map → chunk-MK5VEWCR.js.map} +0 -0
- /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
- /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
- /package/dist/{chunk-AZM4CCAC.js.map → chunk-QZLDRQ4I.js.map} +0 -0
- /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
- /package/dist/{chunk-VMMQDEN5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
- /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
- /package/dist/{chunk-HLYR2TQL.js.map → chunk-UCTS3DDH.js.map} +0 -0
- /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
- /package/dist/{chunk-WM65LU67.js.map → chunk-UKYS3NU5.js.map} +0 -0
- /package/dist/{chunk-WDBX6VER.js.map → chunk-UPLZNJKN.js.map} +0 -0
- /package/dist/{chunk-2GFK22OZ.js.map → chunk-V6ERBR7U.js.map} +0 -0
- /package/dist/{chunk-ZMYDYNI4.js.map → chunk-XZHE2DEN.js.map} +0 -0
- /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{chunk-YGLY6QFV.js.map → chunk-ZRZVLB7O.js.map} +0 -0
- /package/dist/{chunk-4IIFL7GC.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
- /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
- /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/explicit-capture.ts"],"sourcesContent":["import { composeMemoryEnvelope, TAG_LIMITS } from \"./write-envelope.js\";\nimport { resolveNamespaceCapabilities } from \"./capabilities.js\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport type { Orchestrator } from \"./orchestrator.js\";\nimport { log } from \"./logger.js\";\nimport { isSafeRouteNamespace } from \"./routing/engine.js\";\nimport { sanitizeMemoryContent } from \"./sanitize.js\";\nimport type { CaptureMode, MemoryCategory, MemoryLifecycleEvent, PluginConfig } from \"./types.js\";\nimport {\n buildExplicitCaptureDedupKey,\n isTombstoneBlockedCaptureWriteLockBusy,\n normalizeExplicitCaptureContent,\n} from \"./storage/tombstone-blocked-capture-index.js\";\nimport type { StorageManager } from \"./storage.js\";\n\nexport type ExplicitCaptureInput = {\n content: string;\n category?: string;\n confidence?: number;\n namespace?: string;\n tags?: string[];\n entityRef?: string;\n sourceConnector?: string;\n ttl?: string;\n sourceReason?: string;\n};\n\nexport type ValidExplicitCapture = {\n content: string;\n category: MemoryCategory;\n confidence: number;\n namespace?: string;\n tags: string[];\n entityRef?: string;\n sourceConnector?: string;\n expiresAt?: string;\n sourceReason?: string;\n /**\n * When true, `namespace` was already resolved AND authorized by the caller\n * (the access service's `resolveCodingScopedWriteNamespace`, which auth-checks\n * the base and derives a session-owned `project-*` overlay). The persist /\n * queue layer then routes to it directly instead of re-validating against the\n * static policy allow-list — which would otherwise reject legitimately-derived\n * dynamic project namespaces (#1434). Callers that do NOT pre-authorize the\n * namespace must leave this unset so the allow-list guard still applies.\n */\n namespacePreResolved?: boolean;\n};\n\nexport type ExplicitCaptureSource = \"memory_store\" | \"memory_capture\" | \"suggestion_submit\" | \"inline\";\ntype ExplicitCaptureValidationMode = \"legacy_tool\" | \"strict_explicit\";\n\n// Bounded body {0,100000} instead of an unbounded lazy *? so scanning for the\n// closing tag cannot backtrack polynomially on unterminated <memory_note>\n// markup in hostile turn text (CodeQL js/polynomial-redos). 100 000 chars far\n// exceeds any real inline note, so matching is behavior-preserving; the outer\n// \\s* groups were also dropped (body absorbs whitespace; captures are trimmed).\nconst INLINE_NOTE_RE = /<memory_note>([\\s\\S]{0,100000}?)<\\/memory_note>/gi;\nconst INLINE_NOTE_MARKUP_RE = /<memory_note>[\\s\\S]{0,100000}?<\\/memory_note>/i;\nconst INLINE_ALLOWED_CATEGORIES = new Set<MemoryCategory>([\n \"fact\",\n \"preference\",\n \"correction\",\n \"entity\",\n \"decision\",\n \"relationship\",\n \"principle\",\n \"commitment\",\n \"moment\",\n \"skill\",\n \"rule\",\n \"procedure\",\n \"reasoning_trace\",\n]);\n\nconst SECRET_PATTERNS: RegExp[] = [\n /\\bsk-[A-Za-z0-9]{16,}\\b/,\n /\\bAKIA[0-9A-Z]{16}\\b/,\n /\\bBearer\\s+[A-Za-z0-9._-]{16,}\\b/i,\n /\\b(?:api[_-]?key|secret|token|password|passwd)\\s*[:=]\\s*[^\\s]{8,}\\b/i,\n /\\b(?:authorization)\\s*:\\s*[^\\s]{8,}\\b/i,\n];\nconst SECRET_REDACTION_PATTERNS: Array<{ pattern: RegExp; replacement: string }> = [\n { pattern: /\\bsk-[A-Za-z0-9]{16,}\\b/g, replacement: \"[redacted openai key]\" },\n { pattern: /\\bAKIA[0-9A-Z]{16}\\b/g, replacement: \"[redacted aws key]\" },\n { pattern: /\\bBearer\\s+[A-Za-z0-9._-]{16,}\\b/gi, replacement: \"Bearer [redacted token]\" },\n {\n pattern: /\\b(?:api[_-]?key|secret|token|password|passwd)\\s*[:=]\\s*[^\\s]{8,}\\b/gi,\n replacement: \"[redacted credential]\",\n },\n {\n pattern: /\\b(?:authorization)\\s*:\\s*[^\\s]{8,}\\b/gi,\n replacement: \"authorization: [redacted credential]\",\n },\n];\nconst EXPLICIT_CAPTURE_REVIEW_TAGS = [\"explicit-capture\", \"queued-review\"];\n\nfunction explicitCaptureActor(source: ExplicitCaptureSource): string {\n switch (source) {\n case \"inline\":\n return \"inline.memory_note\";\n case \"memory_store\":\n return \"tool.memory_store\";\n case \"suggestion_submit\":\n return \"tool.suggestion_submit\";\n default:\n return \"tool.memory_capture\";\n }\n}\n\nfunction asTrimmed(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction redactSecrets(value: string): string {\n let redacted = value;\n for (const { pattern, replacement } of SECRET_REDACTION_PATTERNS) {\n redacted = redacted.replace(pattern, replacement);\n }\n return redacted;\n}\n\nfunction containsSecretLikeValue(value: string): boolean {\n return SECRET_PATTERNS.some((pattern) => pattern.test(value));\n}\n\nfunction assertNoSecretLikeMetadata(field: string, value: string | undefined): void {\n const trimmed = asTrimmed(value);\n if (trimmed && containsSecretLikeValue(trimmed)) {\n throw new Error(`${field} appears to contain a secret or credential`);\n }\n}\n\nfunction assertNoSecretLikeMetadataList(field: string, values: string[] | undefined): void {\n for (const value of values ?? []) {\n assertNoSecretLikeMetadata(field, value);\n }\n}\n\nfunction sanitizeReviewText(value: string | undefined, fallback: string): string {\n const redacted = redactSecrets(asTrimmed(value) ?? fallback);\n const sanitized = sanitizeMemoryContent(redacted);\n const safe = sanitized.text.trim();\n return safe.length > 0 ? safe : fallback;\n}\n\nfunction sanitizeReviewMetadata(value: string | undefined): string | undefined {\n const trimmed = asTrimmed(value);\n if (!trimmed) return undefined;\n return sanitizeReviewText(trimmed, \"[redacted]\");\n}\n\nfunction sanitizeReviewTags(tags: string[] | undefined): string[] {\n return Array.from(\n new Set(\n (tags ?? [])\n .map((tag) => sanitizeReviewMetadata(tag))\n .filter((tag): tag is string => typeof tag === \"string\" && tag.length > 0)\n )\n );\n}\n\nfunction normalizeExplicitCaptureError(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) return error.message.trim();\n const rendered = String(error).trim();\n return rendered.length > 0 ? rendered : \"explicit capture failed\";\n}\n\nfunction isUnsupportedExplicitCaptureNamespaceError(error: unknown): boolean {\n return normalizeExplicitCaptureError(error).startsWith(\"unsupported namespace:\");\n}\n\nfunction resolveExplicitCaptureReviewNamespace(\n orchestrator: Orchestrator,\n namespace: string | undefined\n): string | undefined {\n const normalized = asTrimmed(namespace);\n if (!normalized) return undefined;\n return resolveExplicitCaptureNamespace(orchestrator, normalized);\n}\n\nfunction resolveExplicitCaptureNamespace(\n orchestrator: Orchestrator,\n namespace: string | undefined\n): string | undefined {\n const normalized = asTrimmed(namespace);\n if (!normalized) return undefined;\n if (!resolveNamespaceCapabilities(orchestrator.config).namespaces) {\n if (normalized !== orchestrator.config.defaultNamespace) {\n throw new Error(`unsupported namespace: ${normalized}`);\n }\n return normalized;\n }\n const allowed = new Set(\n [\n orchestrator.config.defaultNamespace,\n orchestrator.config.sharedNamespace,\n ...orchestrator.config.namespacePolicies.map((policy) => policy.name),\n ]\n .map((value) => value.trim())\n .filter(Boolean)\n );\n if (!allowed.has(normalized)) {\n throw new Error(`unsupported namespace: ${normalized}`);\n }\n return normalized;\n}\n\nfunction parseExplicitCaptureTtl(ttl: string | undefined): string | undefined {\n const raw = asTrimmed(ttl);\n if (!raw) return undefined;\n\n const absoluteMs = Date.parse(raw);\n if (Number.isFinite(absoluteMs)) {\n return new Date(absoluteMs).toISOString();\n }\n\n const relative = raw.match(/^(\\d+)\\s*([mhdw])$/i);\n if (!relative) {\n throw new Error(\"ttl must be an ISO-8601 timestamp or relative duration like 30m, 12h, 7d, or 2w\");\n }\n\n const amount = Number.parseInt(relative[1] ?? \"\", 10);\n const unit = (relative[2] ?? \"\").toLowerCase();\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(\"ttl duration must be a positive integer\");\n }\n\n const multiplier =\n unit === \"m\" ? 60_000 : unit === \"h\" ? 60 * 60_000 : unit === \"d\" ? 24 * 60 * 60_000 : 7 * 24 * 60 * 60_000;\n return new Date(Date.now() + amount * multiplier).toISOString();\n}\n\nfunction parseInlineConfidence(value: string): number {\n const trimmed = value.trim();\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(trimmed)) {\n return Number.NaN;\n }\n const parsed = Number(trimmed);\n return Number.isFinite(parsed) ? parsed : Number.NaN;\n}\n\nfunction parseInlineNote(block: string): ExplicitCaptureInput {\n const lines = block.replace(/\\r/g, \"\").split(\"\\n\");\n const note: Partial<ExplicitCaptureInput> = {};\n let idx = 0;\n\n while (idx < lines.length) {\n const rawLine = lines[idx] ?? \"\";\n const line = rawLine.trim();\n idx += 1;\n if (line.length === 0) continue;\n const colonIdx = line.indexOf(\":\");\n if (colonIdx < 0) continue;\n const key = line.slice(0, colonIdx).trim();\n const value = line.slice(colonIdx + 1).trim();\n\n if (key === \"content\" && value === \"|\") {\n const contentLines: string[] = [];\n while (idx < lines.length) {\n const next = lines[idx] ?? \"\";\n if (next.startsWith(\" \") || next.startsWith(\"\\t\")) {\n contentLines.push(next.replace(/^( |\\t)/, \"\"));\n idx += 1;\n continue;\n }\n if (next.trim().length === 0) {\n contentLines.push(\"\");\n idx += 1;\n continue;\n }\n break;\n }\n note.content = contentLines.join(\"\\n\").trim();\n continue;\n }\n\n switch (key) {\n case \"content\":\n note.content = value;\n break;\n case \"category\":\n note.category = value;\n break;\n case \"confidence\":\n note.confidence = parseInlineConfidence(value);\n break;\n case \"namespace\":\n note.namespace = value;\n break;\n case \"tags\":\n note.tags = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n break;\n case \"entityRef\":\n note.entityRef = value;\n break;\n case \"ttl\":\n note.ttl = value;\n break;\n case \"sourceReason\":\n note.sourceReason = value;\n break;\n default:\n break;\n }\n }\n\n return { content: \"\", ...note };\n}\n\nfunction parseInlineExplicitCaptureCandidates(text: string): ExplicitCaptureInput[] {\n const notes: ExplicitCaptureInput[] = [];\n for (const match of text.matchAll(INLINE_NOTE_RE)) {\n notes.push(parseInlineNote(match[1] ?? \"\"));\n }\n return notes;\n}\n\nexport function parseInlineExplicitCaptureNotes(text: string): ExplicitCaptureInput[] {\n return parseInlineExplicitCaptureCandidates(text).filter((note) => asTrimmed(note.content));\n}\n\nexport function hasInlineExplicitCaptureMarkup(text: string): boolean {\n return INLINE_NOTE_MARKUP_RE.test(text);\n}\n\nexport function stripInlineExplicitCaptureNotes(text: string): string {\n return text.replace(INLINE_NOTE_RE, \"\").trim();\n}\n\nexport function validateExplicitCaptureInput(\n input: ExplicitCaptureInput,\n mode: ExplicitCaptureValidationMode = \"strict_explicit\"\n): ValidExplicitCapture {\n const content = asTrimmed(input.content);\n if (!content) throw new Error(\"content is required\");\n if (mode === \"strict_explicit\") {\n if (content.length < 10) throw new Error(\"content must be at least 10 characters\");\n if (content.length > 4000) throw new Error(\"content must be 4000 characters or fewer\");\n }\n if (/<memory_note>/i.test(content) || /<\\/memory_note>/i.test(content)) {\n throw new Error(\"nested memory_note blocks are not allowed\");\n }\n\n const category = (asTrimmed(input.category) ?? \"fact\") as MemoryCategory;\n if (!INLINE_ALLOWED_CATEGORIES.has(category)) {\n throw new Error(`unsupported category: ${input.category ?? category}`);\n }\n\n const sanitized = sanitizeMemoryContent(content);\n if (!sanitized.clean) {\n throw new Error(\"content failed memory sanitization\");\n }\n for (const pattern of SECRET_PATTERNS) {\n if (pattern.test(content)) {\n throw new Error(\"content appears to contain a secret or credential\");\n }\n }\n assertNoSecretLikeMetadata(\"sourceReason\", input.sourceReason);\n assertNoSecretLikeMetadata(\"entityRef\", input.entityRef);\n assertNoSecretLikeMetadata(\"ttl\", input.ttl);\n assertNoSecretLikeMetadataList(\"tags\", input.tags);\n\n if (input.confidence !== undefined && !Number.isFinite(input.confidence)) {\n throw new Error(\"confidence must be a finite number\");\n }\n const confidence = input.confidence === undefined ? 0.95 : Number(input.confidence);\n if (confidence < 0 || confidence > 1) {\n throw new Error(\"confidence must be between 0 and 1\");\n }\n const requestedNamespace = asTrimmed(input.namespace);\n if (requestedNamespace && !isSafeRouteNamespace(requestedNamespace)) {\n throw new Error(`unsafe namespace: ${requestedNamespace}`);\n }\n const expiresAt = parseExplicitCaptureTtl(input.ttl);\n\n // #2014 review round: enforce the composer's tag contract HERE so a capture\n // that passes validation can never fail later at strict compose time\n // (validated-then-thrown was a broken contract). Same limits as TAG_LIMITS.\n const dedupedTags = Array.from(new Set((input.tags ?? []).map((tag) => tag.trim()).filter(Boolean)));\n if (dedupedTags.length > TAG_LIMITS.maxTags) {\n throw new Error(`too many tags: ${dedupedTags.length} exceeds the ${TAG_LIMITS.maxTags}-tag limit`);\n }\n for (const tag of dedupedTags) {\n if (tag.length > TAG_LIMITS.maxTagLength) {\n throw new Error(`tag exceeds ${TAG_LIMITS.maxTagLength} characters: ${JSON.stringify(tag.slice(0, 40))}…`);\n }\n }\n\n return {\n content,\n category,\n confidence,\n namespace: asTrimmed(input.namespace),\n tags: dedupedTags,\n entityRef: asTrimmed(input.entityRef),\n sourceReason: asTrimmed(input.sourceReason),\n // Trimmed like the other optional metadata (#2017 review round): a\n // whitespace-only connector previously passed validation and then blew\n // up at strict compose time - validated input must always compose.\n sourceConnector: asTrimmed(input.sourceConnector),\n expiresAt,\n };\n}\n\nasync function findDuplicateExplicitCapture(\n orchestrator: Orchestrator,\n resolvedNamespace: string | undefined,\n candidate: ValidExplicitCapture,\n storageOverride?: StorageManager\n): Promise<{ id: string; tombstoneBlocked: boolean } | null> {\n const storage = storageOverride ?? (await orchestrator.getStorage(resolvedNamespace));\n // Tombstone-blocked rows are absent from the active fact hash index. An\n // authoritative miss can therefore skip the corpus scan only after the\n // targeted blocked-row index reports a miss and remains authoritative.\n let authoritativeFactHashMiss = false;\n if (candidate.category === \"fact\" && typeof storage.hasFactContentHash === \"function\") {\n try {\n const hasHash = await storage.hasFactContentHash(candidate.content);\n if (!hasHash) {\n const authoritative =\n typeof storage.isFactContentHashAuthoritative === \"function\"\n ? await storage.isFactContentHashAuthoritative()\n : false;\n authoritativeFactHashMiss = authoritative;\n }\n } catch (err) {\n // Fail open: hash indexes are only an optimization, so fall back to the\n // full corpus scan when either index cannot answer.\n void err;\n }\n }\n if (authoritativeFactHashMiss) {\n const checkBlockedIndex = storage.checkTombstoneBlockedExplicitCapture;\n if (typeof checkBlockedIndex === \"function\") {\n try {\n const result = await checkBlockedIndex.call(\n storage,\n candidate.content,\n candidate.category,\n candidate.sourceConnector\n );\n if (!result.has && result.authoritative) return null;\n } catch (err) {\n // Fail open: an unavailable targeted index must not hide a durable\n // pending-review duplicate.\n void err;\n }\n } else {\n const hasBlockedIndex = storage.hasTombstoneBlockedExplicitCapture;\n if (typeof hasBlockedIndex === \"function\") {\n try {\n const hasBlocked = await hasBlockedIndex.call(\n storage,\n candidate.content,\n candidate.category,\n candidate.sourceConnector\n );\n if (!hasBlocked) {\n const isIndexAuthoritative =\n typeof storage.isTombstoneBlockedExplicitCaptureIndexAuthoritative === \"function\"\n ? await storage.isTombstoneBlockedExplicitCaptureIndexAuthoritative()\n : false;\n if (isIndexAuthoritative) return null;\n }\n } catch (err) {\n // Fail open: an unavailable targeted index must not hide a durable\n // pending-review duplicate.\n void err;\n }\n }\n }\n }\n const hotMemories = await storage.readAllMemories();\n const coldMemories = typeof storage.readAllColdMemories === \"function\" ? await storage.readAllColdMemories() : [];\n const existing = [...hotMemories, ...coldMemories];\n const normalizedCandidate = normalizeExplicitCaptureContent(candidate.content);\n const match = existing.find((memory) => {\n const status = memory.frontmatter.status ?? \"active\";\n if (status !== \"active\" && (status !== \"pending_review\" || !memory.frontmatter.blockedBy)) {\n return false;\n }\n if (memory.frontmatter.category !== candidate.category) return false;\n if (normalizeExplicitCaptureContent(memory.content) !== normalizedCandidate) return false;\n // Connector-aware dedup: same content from different connectors is NOT\n // a duplicate. Operator (undefined) and connector-tagged memories are\n // always distinct. Normalize empty strings to undefined.\n const existingConnector = memory.frontmatter.sourceConnector?.trim() || undefined;\n const newConnector = candidate.sourceConnector?.trim() || undefined;\n if (existingConnector !== newConnector) return false;\n return true;\n });\n return match\n ? {\n id: match.frontmatter.id,\n tombstoneBlocked: match.frontmatter.status === \"pending_review\" && Boolean(match.frontmatter.blockedBy),\n }\n : null;\n}\nasync function persistExplicitCaptureUnlocked(\n orchestrator: Orchestrator,\n candidate: ValidExplicitCapture,\n source: ExplicitCaptureSource,\n resolvedNamespace: string | undefined,\n storage: StorageManager\n): Promise<{ id: string; duplicateOf?: string; tombstoneBlocked?: boolean }> {\n const duplicate = await findDuplicateExplicitCapture(orchestrator, resolvedNamespace, candidate, storage);\n if (duplicate) {\n return duplicate.tombstoneBlocked\n ? { id: duplicate.id, duplicateOf: duplicate.id, tombstoneBlocked: true }\n : { id: duplicate.id, duplicateOf: duplicate.id };\n }\n\n // #1645 (review thread yG-): surface the tombstone block so callers\n // (memory_store tool, access-service HTTP/MCP) can report the capture as\n // queued for review instead of a successfully stored active memory.\n // Sealed-envelope write (issue #1989 PR2).\n const captureEnvelope = composeMemoryEnvelope(\n {\n content: candidate.content,\n category: candidate.category,\n confidence: candidate.confidence,\n tags: candidate.tags,\n ...(candidate.entityRef ? { entityRef: candidate.entityRef } : {}),\n ...(candidate.expiresAt ? { ttl: candidate.expiresAt } : {}),\n ...(candidate.sourceConnector ? { sourceConnector: candidate.sourceConnector } : {}),\n ...(candidate.sourceReason ? { sourceReason: candidate.sourceReason } : {}),\n },\n { source: source === \"inline\" ? \"explicit-inline\" : \"explicit\" }\n );\n const { id, duplicateOf, tombstoneBlocked } = await storage.writeSealedMemory(captureEnvelope);\n if (duplicateOf) return { id, duplicateOf, tombstoneBlocked };\n // #1522: catalog touch handled at the storage chokepoint — the StorageManager's\n // post-write hook records the namespace touch automatically.\n\n const created = new Date().toISOString();\n const event: MemoryLifecycleEvent = {\n eventId: `mle-${randomUUID()}`,\n memoryId: id,\n eventType: tombstoneBlocked ? \"explicit_capture_queued\" : \"explicit_capture_accepted\",\n timestamp: created,\n actor: explicitCaptureActor(source),\n reasonCode: candidate.sourceReason,\n ruleVersion: \"explicit-capture.v1\",\n };\n await storage.appendMemoryLifecycleEvents([event]);\n\n return { id, duplicateOf, tombstoneBlocked };\n}\n\nexport async function persistExplicitCapture(\n orchestrator: Orchestrator,\n candidate: ValidExplicitCapture,\n source: ExplicitCaptureSource\n): Promise<{ id: string; duplicateOf?: string; tombstoneBlocked?: boolean }> {\n const resolvedNamespace = candidate.namespacePreResolved\n ? asTrimmed(candidate.namespace)\n : resolveExplicitCaptureNamespace(orchestrator, candidate.namespace);\n const storage = await orchestrator.getStorage(resolvedNamespace);\n const persist = () => persistExplicitCaptureUnlocked(orchestrator, candidate, source, resolvedNamespace, storage);\n if (typeof storage.withTombstoneBlockedCaptureWriteLock !== \"function\") return await persist();\n const lockIdentity = buildExplicitCaptureDedupKey(candidate.content, candidate.category, candidate.sourceConnector);\n return await storage.withTombstoneBlockedCaptureWriteLock(persist, lockIdentity);\n}\n\nfunction buildExplicitCaptureReviewContent(input: ExplicitCaptureInput, reason: string): string {\n const requestedContent = asTrimmed(input.content);\n const safeContent = sanitizeReviewText(requestedContent, \"[empty explicit capture]\");\n const safeCategory = sanitizeReviewMetadata(input.category);\n const safeNamespace = sanitizeReviewMetadata(input.namespace);\n const safeEntityRef = sanitizeReviewMetadata(input.entityRef);\n const safeTtl = sanitizeReviewMetadata(input.ttl);\n const safeSourceReason = sanitizeReviewMetadata(input.sourceReason);\n const safeTags = sanitizeReviewTags(input.tags);\n const lines = [\"Explicit capture queued for review.\", \"\", `Reason: ${reason}`, \"\", \"Submitted content:\", safeContent];\n const metadata = [\n safeCategory ? `Requested category: ${safeCategory}` : undefined,\n safeNamespace ? `Requested namespace: ${safeNamespace}` : undefined,\n safeEntityRef ? `Requested entityRef: ${safeEntityRef}` : undefined,\n safeTtl ? `Requested ttl: ${safeTtl}` : undefined,\n safeSourceReason ? `Requested sourceReason: ${safeSourceReason}` : undefined,\n safeTags.length > 0 ? `Requested tags: ${safeTags.join(\", \")}` : undefined,\n ].filter((entry): entry is string => typeof entry === \"string\" && entry.length > 0);\n if (metadata.length > 0) {\n lines.push(\"\", ...metadata);\n }\n return lines.join(\"\\n\");\n}\n\nfunction explicitCaptureReviewNamespaces(\n orchestrator: Orchestrator,\n queueNamespace: string | undefined\n): Array<string | undefined> {\n const config = orchestrator.config;\n return [asTrimmed(queueNamespace) ?? asTrimmed(config?.defaultNamespace)];\n}\n\nasync function findQueuedExplicitCaptureDuplicate(\n orchestrator: Orchestrator,\n namespace: string | undefined,\n content: string,\n sourceConnector?: string\n): Promise<string | null> {\n const storages = Array.from(\n new Set(\n await Promise.all(\n explicitCaptureReviewNamespaces(orchestrator, namespace).map((reviewNamespace) =>\n orchestrator.getStorage(reviewNamespace)\n )\n )\n )\n );\n const memorySets = await Promise.all(\n storages.map(async (storage) => {\n const hotMemories = await storage.readAllMemories();\n const coldMemories = typeof storage.readAllColdMemories === \"function\" ? await storage.readAllColdMemories() : [];\n return [...hotMemories, ...coldMemories];\n })\n );\n const existing = memorySets.flat();\n const normalized = normalizeExplicitCaptureContent(content);\n const match = existing.find((memory) => {\n const status = memory.frontmatter.status ?? \"active\";\n if (status !== \"pending_review\") return false;\n if (!(memory.frontmatter.tags ?? []).includes(\"queued-review\")) return false;\n if (normalizeExplicitCaptureContent(memory.content) !== normalized) return false;\n const existingConnector = memory.frontmatter.sourceConnector?.trim() || undefined;\n const newConnector = sourceConnector?.trim() || undefined;\n if (existingConnector !== newConnector) return false;\n return true;\n });\n return match?.frontmatter.id ?? null;\n}\n\nexport type ExplicitCaptureReviewQueueOptions = {\n /** A server-authorized namespace resolved from the authenticated session. */\n resolvedNamespace?: string;\n};\n\nexport async function queueExplicitCaptureForReview(\n orchestrator: Orchestrator,\n input: ExplicitCaptureInput,\n source: ExplicitCaptureSource,\n error: unknown,\n options: ExplicitCaptureReviewQueueOptions = {}\n): Promise<{ id: string; duplicateOf?: string }> {\n const reason = sanitizeReviewText(normalizeExplicitCaptureError(error), \"explicit capture failed\");\n const requestedNamespace = asTrimmed(input.namespace);\n const resolvedNamespace = asTrimmed(options.resolvedNamespace);\n // A caller-pre-authorized namespace (e.g. a session-owned project overlay\n // from the access service) routes directly; otherwise apply the static\n // policy allow-list guard (#1434).\n const queueNamespace =\n resolvedNamespace ??\n ((input as { namespacePreResolved?: boolean }).namespacePreResolved\n ? requestedNamespace\n : resolveExplicitCaptureReviewNamespace(orchestrator, requestedNamespace));\n const content = buildExplicitCaptureReviewContent(input, reason);\n const requestedCategory = asTrimmed(input.category);\n const reviewCategory =\n requestedCategory && INLINE_ALLOWED_CATEGORIES.has(requestedCategory as MemoryCategory)\n ? (requestedCategory as MemoryCategory)\n : \"fact\";\n const requestedTags = sanitizeReviewTags(input.tags);\n const storage = await orchestrator.getStorage(queueNamespace);\n const lockIdentity = buildExplicitCaptureDedupKey(content, reviewCategory, input.sourceConnector);\n const queue = async (): Promise<{ id: string; duplicateOf?: string }> => {\n const duplicateOf = await findQueuedExplicitCaptureDuplicate(\n orchestrator,\n queueNamespace,\n content,\n input.sourceConnector\n );\n if (duplicateOf) {\n return { id: duplicateOf, duplicateOf };\n }\n\n const reviewEnvelope = composeMemoryEnvelope(\n {\n content,\n category: reviewCategory,\n confidence: 0.2,\n tags: Array.from(new Set([...EXPLICIT_CAPTURE_REVIEW_TAGS, ...requestedTags])),\n ...(sanitizeReviewMetadata(input.entityRef) ? { entityRef: sanitizeReviewMetadata(input.entityRef) } : {}),\n ...(input.sourceConnector ? { sourceConnector: input.sourceConnector } : {}),\n },\n { source: source === \"inline\" ? \"explicit-inline-review\" : \"explicit-review\" },\n // The review queue is the FALLBACK for a capture that already failed\n // primary validation — it must never be un-queueable. The tag list is\n // machine-assembled (requested tags + the two fixed review tags), so 49+\n // requested tags would push past the 50-tag limit and strict compose\n // would throw, losing the capture (#2014 review round). Salvage clamps\n // instead; the fixed review tags sort first in the assembly above, so\n // they always survive the clamp.\n { salvage: true }\n );\n const { id } = await storage.writeSealedMemory(reviewEnvelope);\n try {\n const created = await storage.getMemoryById(id);\n if (created) {\n await storage.writeMemoryFrontmatter(\n created,\n {\n status: \"pending_review\",\n updated: new Date().toISOString(),\n },\n {\n actor: explicitCaptureActor(source),\n reasonCode: reason,\n ruleVersion: \"explicit-capture.v1\",\n }\n );\n }\n } finally {\n // Record the catalog write touch (issue #1499, round 5/6 codex P2; NIhUg).\n // A queued review capture writes memory to the namespace's root (the DEFAULT\n // root when undefined), so its `lastWriteAt` must reflect the write once\n // `writeMemory` returns an id. If the later pending-review frontmatter update\n // fails, the memory file is still durable and must not disappear from\n // writtenSince/maintenance scheduling. Guarded optional hook (rule #33).\n // #1522: catalog touch handled at the storage chokepoint.\n }\n const event: MemoryLifecycleEvent = {\n eventId: `mle-${randomUUID()}`,\n memoryId: id,\n eventType: \"explicit_capture_queued\",\n timestamp: new Date().toISOString(),\n actor: explicitCaptureActor(source),\n reasonCode: reason,\n ruleVersion: \"explicit-capture.v1\",\n };\n await storage.appendMemoryLifecycleEvents([event]);\n return { id };\n };\n if (typeof storage.withTombstoneBlockedCaptureWriteLock !== \"function\") return await queue();\n return await storage.withTombstoneBlockedCaptureWriteLock(queue, lockIdentity);\n}\n\nexport function shouldSkipImplicitExtraction(cfg: Pick<PluginConfig, \"captureMode\">): boolean {\n return cfg.captureMode === \"explicit\";\n}\n\nexport function shouldProcessInlineExplicitCapture(cfg: Pick<PluginConfig, \"captureMode\">): boolean {\n return cfg.captureMode !== \"implicit\";\n}\n\nexport interface InlineExplicitCaptureProcessRequest {\n content: string;\n captureMode: CaptureMode;\n dedupeKeys?: readonly string[];\n namespace?: string;\n namespacePreResolved?: boolean;\n reviewNamespace?: string;\n reviewNamespacePreResolved?: boolean;\n sourceConnector?: string;\n}\n\nexport interface InlineExplicitCaptureProcessResult {\n content: string;\n processed: number;\n accepted: number;\n queued: number;\n duplicates: number;\n failed: number;\n}\n\nexport interface InlineExplicitCaptureProcessorOptions {\n sourceConnector?: string;\n maxDedupeKeys?: number;\n}\n\nconst DEFAULT_INLINE_CAPTURE_DEDUPE_KEY_LIMIT = 1024;\n\nexport class InlineExplicitCaptureProcessor {\n private readonly observedKeys = new Set<string>();\n private readonly observedKeyOrder: string[] = [];\n private readonly maxDedupeKeys: number;\n private readonly processingTails = new Map<string, Promise<void>>();\n\n constructor(\n private readonly orchestrator: Orchestrator,\n private readonly options: InlineExplicitCaptureProcessorOptions = {}\n ) {\n const requestedLimit = options.maxDedupeKeys ?? DEFAULT_INLINE_CAPTURE_DEDUPE_KEY_LIMIT;\n this.maxDedupeKeys =\n Number.isFinite(requestedLimit) && requestedLimit > 0\n ? Math.max(1, Math.floor(requestedLimit))\n : DEFAULT_INLINE_CAPTURE_DEDUPE_KEY_LIMIT;\n }\n\n private enqueue<T>(key: string, operation: () => Promise<T>): Promise<T> {\n const previous = this.processingTails.get(key) ?? Promise.resolve();\n let release!: () => void;\n const current = new Promise<void>((resolve) => {\n release = resolve;\n });\n this.processingTails.set(key, current);\n return previous.then(operation).finally(() => {\n if (this.processingTails.get(key) === current) this.processingTails.delete(key);\n release();\n });\n }\n\n private buildDedupeKeys(\n dedupeKeys: readonly string[] | undefined,\n input: ExplicitCaptureInput,\n namespacePreResolved: boolean,\n fallbackReviewNamespace?: string\n ): { replayKeys: string[]; validationFailureKey: string } {\n let fallbackNamespace: string | undefined;\n let effectiveNamespace = asTrimmed(input.namespace);\n if (!namespacePreResolved) {\n try {\n effectiveNamespace = resolveExplicitCaptureNamespace(this.orchestrator, effectiveNamespace);\n } catch {\n fallbackNamespace = asTrimmed(fallbackReviewNamespace) ?? this.orchestrator.config.defaultNamespace;\n effectiveNamespace = fallbackNamespace;\n }\n }\n const requestedNamespace = asTrimmed(input.namespace);\n const namespaceScope =\n fallbackNamespace === undefined\n ? effectiveNamespace ?? this.orchestrator.config.defaultNamespace\n : `${fallbackNamespace}\\u0000requested:${requestedNamespace ?? \"\"}`;\n const sourceConnectorScope = asTrimmed(input.sourceConnector) ?? \"\";\n const deliveryKeys = Array.from(\n new Set((dedupeKeys ?? []).map((key) => asTrimmed(key)).filter((key): key is string => key !== undefined))\n ).sort();\n const noteHash = createHash(\"sha256\")\n .update(\n JSON.stringify({\n content: normalizeExplicitCaptureContent(input.content),\n category: asTrimmed(input.category) ?? \"fact\",\n })\n )\n .digest(\"hex\");\n const validationTags = Array.from(\n new Set((input.tags ?? []).map((tag) => asTrimmed(tag)).filter((tag): tag is string => tag !== undefined))\n ).sort();\n const validationHash = createHash(\"sha256\")\n .update(\n JSON.stringify({\n content: asTrimmed(input.content) ?? \"\",\n category: asTrimmed(input.category) ?? \"fact\",\n confidence:\n input.confidence === undefined\n ? \"default\"\n : Number.isFinite(input.confidence)\n ? input.confidence\n : \"invalid\",\n namespace: asTrimmed(input.namespace),\n tags: validationTags,\n entityRef: asTrimmed(input.entityRef),\n sourceReason: asTrimmed(input.sourceReason),\n ttl: asTrimmed(input.ttl),\n deliveryKeys,\n })\n )\n .digest(\"hex\");\n const identityPrefix = `${namespaceScope}\\u0000${sourceConnectorScope}\\u0000`;\n const fallbackKey = `${identityPrefix}fallback:inline-memory-note:${noteHash}`;\n return {\n replayKeys:\n deliveryKeys.length > 0\n ? deliveryKeys.map((key) => `${identityPrefix}${key}:inline-memory-note:${noteHash}`)\n : [fallbackKey],\n validationFailureKey: `${identityPrefix}validation:inline-memory-note:${validationHash}`,\n };\n }\n\n private isNamespacePolicyAuthorized(namespace: string | undefined): boolean {\n try {\n resolveExplicitCaptureNamespace(this.orchestrator, namespace);\n return true;\n } catch {\n return false;\n }\n }\n\n private resolveReviewFallbackNamespace(\n request: InlineExplicitCaptureProcessRequest,\n input: ExplicitCaptureInput\n ): string | undefined {\n if (request.namespacePreResolved === true || this.isNamespacePolicyAuthorized(input.namespace)) return undefined;\n return request.reviewNamespacePreResolved === true\n ? asTrimmed(request.reviewNamespace)\n : this.orchestrator.config.defaultNamespace;\n }\n\n\n private remember(keys: readonly string[]): void {\n for (const key of keys) {\n if (this.observedKeys.has(key)) continue;\n this.observedKeys.add(key);\n this.observedKeyOrder.push(key);\n }\n while (this.observedKeyOrder.length > this.maxDedupeKeys) {\n const expired = this.observedKeyOrder.shift();\n if (expired) this.observedKeys.delete(expired);\n }\n }\n\n private async processNote(\n request: InlineExplicitCaptureProcessRequest,\n input: ExplicitCaptureInput,\n replayKeys: readonly string[],\n validationFailureKey: string\n ): Promise<Pick<InlineExplicitCaptureProcessResult, \"processed\" | \"accepted\" | \"queued\" | \"duplicates\" | \"failed\">> {\n const serializationKey = replayKeys.at(-1) ?? validationFailureKey;\n return this.enqueue(serializationKey, async () => {\n if (replayKeys.some((key) => this.observedKeys.has(key)) || this.observedKeys.has(validationFailureKey)) {\n return { processed: 0, accepted: 0, queued: 0, duplicates: 1, failed: 0 };\n }\n\n const classifyPersisted = (\n persisted: Awaited<ReturnType<typeof persistExplicitCapture>>\n ): Pick<InlineExplicitCaptureProcessResult, \"processed\" | \"accepted\" | \"queued\" | \"duplicates\" | \"failed\"> => {\n this.remember(replayKeys);\n if (persisted.duplicateOf) {\n return { processed: 1, accepted: 0, queued: 0, duplicates: 1, failed: 0 };\n }\n if (persisted.tombstoneBlocked) {\n this.orchestrator.requestQmdMaintenanceForTool(\"inline.memory_note.review\");\n return { processed: 1, accepted: 0, queued: 1, duplicates: 0, failed: 0 };\n }\n this.orchestrator.requestQmdMaintenanceForTool(\"inline.memory_note\");\n return { processed: 1, accepted: 1, queued: 0, duplicates: 0, failed: 0 };\n };\n const persistCandidate = async (candidate: ValidExplicitCapture) =>\n classifyPersisted(await persistExplicitCapture(this.orchestrator, candidate, \"inline\"));\n\n let validationSucceeded = false;\n let candidate: ValidExplicitCapture | undefined;\n try {\n candidate = validateExplicitCaptureInput(input);\n if (request.namespacePreResolved === true) candidate.namespacePreResolved = true;\n validationSucceeded = true;\n return await persistCandidate(candidate);\n } catch (error) {\n let captureError: unknown = error;\n if (validationSucceeded && candidate && isTombstoneBlockedCaptureWriteLockBusy(error)) {\n try {\n return await persistCandidate(candidate);\n } catch (retryError) {\n if (isTombstoneBlockedCaptureWriteLockBusy(retryError)) {\n log.warn(\n `explicit inline capture deferred after tombstone write lock contention: ${normalizeExplicitCaptureError(retryError)}`\n );\n return { processed: 0, accepted: 0, queued: 0, duplicates: 0, failed: 1 };\n }\n captureError = retryError;\n }\n }\n if (validationSucceeded && !isUnsupportedExplicitCaptureNamespaceError(captureError)) {\n log.warn(`explicit inline capture persistence failed: ${normalizeExplicitCaptureError(captureError)}`);\n return { processed: 0, accepted: 0, queued: 0, duplicates: 0, failed: 1 };\n }\n\n const queueInput = request.namespacePreResolved === true ? { ...input, namespacePreResolved: true } : input;\n const reviewNamespace = this.resolveReviewFallbackNamespace(request, input);\n try {\n const review = await queueExplicitCaptureForReview(\n this.orchestrator,\n queueInput,\n \"inline\",\n captureError,\n reviewNamespace ? { resolvedNamespace: reviewNamespace } : undefined\n );\n this.remember(validationSucceeded ? replayKeys : [validationFailureKey]);\n if (review.duplicateOf) {\n return { processed: 1, accepted: 0, queued: 0, duplicates: 1, failed: 0 };\n }\n this.orchestrator.requestQmdMaintenanceForTool(\"inline.memory_note.review\");\n return { processed: 1, accepted: 0, queued: 1, duplicates: 0, failed: 0 };\n } catch (queueError) {\n log.warn(\n `explicit inline capture rejected: ${normalizeExplicitCaptureError(captureError)}; review queue fallback failed: ${normalizeExplicitCaptureError(queueError)}`\n );\n return { processed: 0, accepted: 0, queued: 0, duplicates: 0, failed: 1 };\n }\n }\n });\n }\n\n async process(request: InlineExplicitCaptureProcessRequest): Promise<InlineExplicitCaptureProcessResult> {\n if (!shouldProcessInlineExplicitCapture({ captureMode: request.captureMode })) {\n return { content: request.content, processed: 0, accepted: 0, queued: 0, duplicates: 0, failed: 0 };\n }\n if (request.namespacePreResolved === true && !asTrimmed(request.namespace)) {\n throw new Error(\"namespacePreResolved requires a resolved namespace\");\n }\n if (request.reviewNamespacePreResolved === true && !asTrimmed(request.reviewNamespace)) {\n throw new Error(\"reviewNamespacePreResolved requires a resolved namespace\");\n }\n\n const notes = parseInlineExplicitCaptureCandidates(request.content);\n const content = hasInlineExplicitCaptureMarkup(request.content)\n ? stripInlineExplicitCaptureNotes(request.content)\n : request.content;\n const sourceConnector = asTrimmed(request.sourceConnector) ?? asTrimmed(this.options.sourceConnector);\n let processed = 0;\n let accepted = 0;\n let queued = 0;\n let duplicates = 0;\n let failed = 0;\n\n for (const note of notes) {\n const input: ExplicitCaptureInput = {\n ...note,\n ...(request.namespace !== undefined ? { namespace: request.namespace } : {}),\n ...(sourceConnector ? { sourceConnector } : {}),\n };\n const { replayKeys, validationFailureKey } = this.buildDedupeKeys(\n request.dedupeKeys,\n input,\n request.namespacePreResolved === true,\n this.resolveReviewFallbackNamespace(request, input)\n );\n const result = await this.processNote(request, input, replayKeys, validationFailureKey);\n processed += result.processed;\n accepted += result.accepted;\n queued += result.queued;\n duplicates += result.duplicates;\n failed += result.failed;\n }\n\n return { content, processed, accepted, queued, duplicates, failed };\n }\n}\n"],"mappings":"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","names":["candidate"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tier-routing.ts"],"sourcesContent":["import type { MemoryFile } from \"./types.js\";\nimport {\n clamp01,\n computeLifecycleValueInputs,\n daysSince,\n type LifecycleSignals,\n} from \"./lifecycle.js\";\n\nexport type MemoryTier = \"hot\" | \"cold\";\n\nexport interface TierRoutingPolicy {\n enabled: boolean;\n demotionMinAgeDays: number;\n demotionValueThreshold: number;\n promotionValueThreshold: number;\n}\n\nexport interface TierTransitionDecision {\n currentTier: MemoryTier;\n nextTier: MemoryTier;\n valueScore: number;\n changed: boolean;\n reason: string;\n}\n\nexport function computeTierValueScore(\n memory: Pick<MemoryFile, \"frontmatter\">,\n now: Date,\n signals?: LifecycleSignals,\n): number {\n const fm = memory.frontmatter;\n const inputs = computeLifecycleValueInputs(memory, now, signals);\n const correctionBoost = fm.category === \"correction\" ? 0.08 : 0;\n const confirmedBoost = fm.verificationState === \"user_confirmed\" ? 0.05 : 0;\n\n const score = (inputs.confidence * 0.24)\n + (inputs.access * 0.26)\n + (inputs.recency * 0.2)\n + (inputs.importance * 0.2)\n + (inputs.feedback * 0.1)\n + correctionBoost\n + confirmedBoost\n - (inputs.disputedPenalty * 0.5);\n\n return clamp01(score);\n}\n\nexport function decideTierTransition(\n memory: Pick<MemoryFile, \"frontmatter\">,\n currentTier: MemoryTier,\n policy: TierRoutingPolicy,\n now: Date,\n signals?: LifecycleSignals,\n): TierTransitionDecision {\n const valueScore = computeTierValueScore(memory, now, signals);\n if (!policy.enabled) {\n return {\n currentTier,\n nextTier: currentTier,\n valueScore,\n changed: false,\n reason: \"tier_migration_disabled\",\n };\n }\n\n if (currentTier === \"hot\") {\n const ageDays = daysSince(memory.frontmatter.updated ?? memory.frontmatter.created, now.getTime());\n if (ageDays >= policy.demotionMinAgeDays && valueScore <= policy.demotionValueThreshold) {\n return {\n currentTier,\n nextTier: \"cold\",\n valueScore,\n changed: true,\n reason: \"value_below_demotion_threshold\",\n };\n }\n return {\n currentTier,\n nextTier: currentTier,\n valueScore,\n changed: false,\n reason: ageDays < policy.demotionMinAgeDays ? \"demotion_min_age_not_met\" : \"value_above_demotion_threshold\",\n };\n }\n\n if (valueScore >= policy.promotionValueThreshold) {\n return {\n currentTier,\n nextTier: \"hot\",\n valueScore,\n changed: true,\n reason: \"value_above_promotion_threshold\",\n };\n }\n return {\n currentTier,\n nextTier: currentTier,\n valueScore,\n changed: false,\n reason: \"value_below_promotion_threshold\",\n };\n}\n"],"mappings":";;;;;;;AAyBO,SAAS,sBACd,QACA,KACA,SACQ;AACR,QAAM,KAAK,OAAO;AAClB,QAAM,SAAS,4BAA4B,QAAQ,KAAK,OAAO;AAC/D,QAAM,kBAAkB,GAAG,aAAa,eAAe,OAAO;AAC9D,QAAM,iBAAiB,GAAG,sBAAsB,mBAAmB,OAAO;AAE1E,QAAM,QAAS,OAAO,aAAa,OAC9B,OAAO,SAAS,OAChB,OAAO,UAAU,MACjB,OAAO,aAAa,MACpB,OAAO,WAAW,MACnB,kBACA,iBACC,OAAO,kBAAkB;AAE9B,SAAO,QAAQ,KAAK;AACtB;AAEO,SAAS,qBACd,QACA,aACA,QACA,KACA,SACwB;AACxB,QAAM,aAAa,sBAAsB,QAAQ,KAAK,OAAO;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,gBAAgB,OAAO;AACzB,UAAM,UAAU,UAAU,OAAO,YAAY,WAAW,OAAO,YAAY,SAAS,IAAI,QAAQ,CAAC;AACjG,QAAI,WAAW,OAAO,sBAAsB,cAAc,OAAO,wBAAwB;AACvF,aAAO;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,QAAQ,UAAU,OAAO,qBAAqB,6BAA6B;AAAA,IAC7E;AAAA,EACF;AAEA,MAAI,cAAc,OAAO,yBAAyB;AAChD,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AACF;","names":[]}
|