@remnic/core 9.69.10 → 9.69.11
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 +15 -13
- package/dist/access-admin-ops-surface.js +46 -34
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +47 -35
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +46 -34
- package/dist/access-cli.js +108 -97
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +46 -34
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-lcm-compaction.d.ts +13 -11
- package/dist/access-http-lifecycle-flush.d.ts +13 -11
- package/dist/access-http-offline-stream.d.ts +13 -11
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +48 -36
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +67 -53
- package/dist/access-identity-continuity-surface.d.ts +10 -9
- package/dist/access-identity-continuity-surface.js +46 -34
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +46 -34
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +58 -45
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-S8fhQcCo.d.ts → access-namespace-preflight-Cy0yPsaE.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +46 -34
- package/dist/access-observe-write-surface.d.ts +15 -13
- package/dist/access-observe-write-surface.js +46 -34
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +49 -37
- package/dist/access-operations.d.ts +14 -12
- package/dist/access-operations.js +54 -42
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +46 -34
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +46 -34
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +46 -34
- package/dist/access-schema.d.ts +18 -1
- package/dist/access-schema.js +7 -5
- package/dist/{access-service-DcfM0Vf0.d.ts → access-service-Cqfk3dD1.d.ts} +25 -8
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +46 -34
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +50 -36
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +6 -5
- 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 +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +10 -9
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +13 -13
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{catalog-BmBXTtOs.d.ts → catalog-9X8WpZNO.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +16 -16
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-D5VPIJN3.js → chunk-227WJVPY.js} +2 -2
- package/dist/{chunk-Y3BWCIY2.js → chunk-2EHDPHMD.js} +2 -2
- package/dist/{chunk-2LKW6OO7.js → chunk-2XJDAEAM.js} +2 -2
- package/dist/{chunk-P23JWI3D.js → chunk-3ITTF7YH.js} +52 -52
- package/dist/{chunk-3DT2F5OI.js → chunk-3YKOFCKP.js} +11 -6
- package/dist/chunk-3YKOFCKP.js.map +1 -0
- package/dist/{chunk-NGP2FPB2.js → chunk-4UVDLNHQ.js} +2 -2
- package/dist/{chunk-HXWOVCS6.js → chunk-4WIKMOE3.js} +44 -22
- package/dist/chunk-4WIKMOE3.js.map +1 -0
- package/dist/{chunk-6RPB2TDG.js → chunk-5HO3QBAD.js} +11 -6
- package/dist/chunk-5HO3QBAD.js.map +1 -0
- package/dist/{chunk-AYWPIH4M.js → chunk-5P2KNFJZ.js} +149 -25
- package/dist/chunk-5P2KNFJZ.js.map +1 -0
- package/dist/{chunk-FJMIQTMH.js → chunk-5YQ7RFSO.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-7LCGFUMB.js} +4 -4
- package/dist/{chunk-EESYTBXV.js → chunk-7NCUHD5U.js} +2 -2
- package/dist/{chunk-X574KX52.js → chunk-7ZMU4XQT.js} +2 -2
- package/dist/{chunk-SG3Z67FB.js → chunk-APZXA4WI.js} +2 -2
- package/dist/{chunk-2QSZNTDO.js → chunk-AU7Q3LSC.js} +4 -4
- package/dist/{chunk-VGMRI4J6.js → chunk-B75VCEX5.js} +4 -4
- package/dist/{chunk-D35XLYQ7.js → chunk-BE4Y6GK6.js} +11 -11
- package/dist/{chunk-ELKD5PCD.js → chunk-BEXFNGQ3.js} +3 -3
- package/dist/{chunk-U5SRTYFS.js → chunk-BFDOBESV.js} +2 -2
- package/dist/{chunk-OLT3YTDH.js → chunk-BIJAWZYW.js} +4 -4
- package/dist/{chunk-FU2NYFX6.js → chunk-BO4PWIJY.js} +3 -3
- package/dist/{chunk-JMAG7WZ7.js → chunk-BX6GW4KC.js} +2 -2
- package/dist/chunk-CC37E3QM.js +198 -0
- package/dist/chunk-CC37E3QM.js.map +1 -0
- package/dist/{chunk-J2R275FN.js → chunk-CTCGHNWN.js} +4 -4
- package/dist/{chunk-X5PIDJ3L.js → chunk-DA4ZMCBU.js} +3 -3
- package/dist/{chunk-IVAW3HBF.js → chunk-DH3V7RCQ.js} +21 -13
- package/dist/chunk-DH3V7RCQ.js.map +1 -0
- package/dist/chunk-DXFG2VGN.js +50 -0
- package/dist/chunk-DXFG2VGN.js.map +1 -0
- package/dist/{chunk-4OFKZAJG.js → chunk-EAARGPWI.js} +2 -1
- package/dist/chunk-EAARGPWI.js.map +1 -0
- package/dist/{chunk-H6RSANGQ.js → chunk-ETZ7KKOS.js} +2 -2
- package/dist/{chunk-K4E3Y3ZX.js → chunk-G7VEQEMG.js} +2 -1
- package/dist/chunk-G7VEQEMG.js.map +1 -0
- package/dist/{chunk-XZBXINXZ.js → chunk-GIC6BASP.js} +4 -4
- package/dist/{chunk-SXQZMC7R.js → chunk-GR4C3FHT.js} +2 -2
- package/dist/{chunk-7DYGPGCT.js → chunk-H5IIBGDM.js} +2 -2
- package/dist/{chunk-CNNXMIS6.js → chunk-HFRGCNFY.js} +10 -10
- package/dist/chunk-HRATODNO.js +28 -0
- package/dist/chunk-HRATODNO.js.map +1 -0
- package/dist/{chunk-MAG6M3B6.js → chunk-HTOWFFAI.js} +2 -2
- package/dist/chunk-HUSTM6PU.js +27 -0
- package/dist/chunk-HUSTM6PU.js.map +1 -0
- package/dist/{chunk-FOCMJEHH.js → chunk-I4QAH4SY.js} +3 -3
- package/dist/{chunk-FSGCXGK6.js → chunk-I6DUKBUI.js} +2 -2
- package/dist/{chunk-VI637ILW.js → chunk-IN673LEP.js} +48 -15
- package/dist/chunk-IN673LEP.js.map +1 -0
- package/dist/{chunk-6FUMA6AA.js → chunk-JGXMA6HL.js} +2 -2
- package/dist/{chunk-TA7UZZMW.js → chunk-JHTF22NQ.js} +2 -2
- package/dist/{chunk-DZ3CNJPB.js → chunk-LDOQE34V.js} +2 -2
- package/dist/{chunk-MEW53VQJ.js → chunk-LDWIPYJ6.js} +7 -7
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-KJTSWJZN.js → chunk-LF6SHWVV.js} +2 -2
- package/dist/{chunk-G6OZZX7P.js → chunk-LJAP4KSW.js} +2 -2
- package/dist/{chunk-NV6BTBUI.js → chunk-LJNLLNEM.js} +2 -2
- package/dist/{chunk-FFFZEF6B.js → chunk-LUDXSSTW.js} +2 -2
- package/dist/{chunk-PCH2CVCS.js → chunk-LWBSEYW3.js} +6 -6
- package/dist/chunk-M6RORUO5.js +59 -0
- package/dist/chunk-M6RORUO5.js.map +1 -0
- package/dist/{chunk-FMUJGGKW.js → chunk-M7DGN6JZ.js} +3 -3
- package/dist/{chunk-TZIHB2LP.js → chunk-MNH2GM4O.js} +5 -5
- package/dist/{chunk-RACZB5HT.js → chunk-N37X5RU7.js} +4 -4
- package/dist/{chunk-LK4TOYPU.js → chunk-NF3NMAG7.js} +2 -2
- package/dist/{chunk-QL4U3SJA.js → chunk-NHLEFBE2.js} +11 -3
- package/dist/chunk-NHLEFBE2.js.map +1 -0
- package/dist/chunk-NN5CQTAJ.js +42 -0
- package/dist/chunk-NN5CQTAJ.js.map +1 -0
- package/dist/{chunk-AG46P24C.js → chunk-NNBZS3DY.js} +4 -4
- package/dist/{chunk-LZ2JTO7N.js → chunk-OASGWNYL.js} +2 -2
- package/dist/chunk-OEDW4ER7.js +62 -0
- package/dist/chunk-OEDW4ER7.js.map +1 -0
- package/dist/{chunk-C2JCVZWX.js → chunk-OLBZ2WGG.js} +2 -2
- package/dist/{chunk-Z3SQEEB6.js → chunk-OUKBMQ2O.js} +2 -2
- package/dist/{chunk-XXW32OL7.js → chunk-OYV6RKPM.js} +1 -1
- package/dist/chunk-OYV6RKPM.js.map +1 -0
- package/dist/{chunk-2Z3DG5CQ.js → chunk-P6GKRT2H.js} +1 -1
- package/dist/{chunk-UGA6PZTX.js → chunk-P7LVYPIX.js} +3 -3
- package/dist/{chunk-26JWBSWD.js → chunk-PGCZLHRB.js} +11 -3
- package/dist/chunk-PGCZLHRB.js.map +1 -0
- package/dist/{chunk-VE45LRCE.js → chunk-QRDSXR3V.js} +2 -2
- package/dist/{chunk-KS67VHXA.js → chunk-QUVWFZOU.js} +2 -2
- package/dist/{chunk-AI4QFDPR.js → chunk-R7FXPG4T.js} +2 -2
- package/dist/chunk-RF2SMMPP.js +37 -0
- package/dist/chunk-RF2SMMPP.js.map +1 -0
- package/dist/{chunk-X66BHMAU.js → chunk-RJ57OOCD.js} +2 -2
- package/dist/chunk-S5G2LAL7.js +354 -0
- package/dist/chunk-S5G2LAL7.js.map +1 -0
- package/dist/{chunk-VXMKW7YN.js → chunk-TRLCMLX7.js} +2 -2
- package/dist/{chunk-ELCMVOQT.js → chunk-V3HUBF7T.js} +2 -2
- package/dist/{chunk-KMIAD7JR.js → chunk-VHAKBUBD.js} +2 -2
- package/dist/{chunk-GS5IFIVE.js → chunk-VYD63IFH.js} +3 -3
- package/dist/chunk-VZIAVM72.js +49 -0
- package/dist/chunk-VZIAVM72.js.map +1 -0
- package/dist/chunk-WTWQA7BB.js +28 -0
- package/dist/chunk-WTWQA7BB.js.map +1 -0
- package/dist/{chunk-TBRG2SYY.js → chunk-X4FIZAVQ.js} +94 -52
- package/dist/chunk-X4FIZAVQ.js.map +1 -0
- package/dist/{chunk-WSFPNCRA.js → chunk-XFPHV65N.js} +2 -2
- package/dist/{chunk-JCUG7AXZ.js → chunk-XJJYSX6F.js} +4 -4
- package/dist/{chunk-I6DURYZI.js → chunk-XMIAU4CO.js} +2 -2
- package/dist/{chunk-PJIGYPO5.js → chunk-XQGFIAG7.js} +2 -2
- package/dist/{chunk-B2URC6LJ.js → chunk-YWN3GYI2.js} +2 -2
- package/dist/{chunk-TG6JEJDV.js → chunk-Z33VUMKY.js} +3 -3
- package/dist/{cli-CFpMhqz5.d.ts → cli-Dk-lM_tI.d.ts} +5 -5
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +88 -77
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +13 -13
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +15 -14
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +6 -5
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +13 -13
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +13 -13
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +4 -3
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +15 -15
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +15 -15
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-config.d.ts +32 -0
- package/dist/deep-recall-config.js +12 -0
- package/dist/deep-recall-http-glue.d.ts +170 -0
- package/dist/deep-recall-http-glue.js +31 -0
- package/dist/deep-recall-http-glue.js.map +1 -0
- package/dist/deep-recall-mcp-tools.d.ts +144 -0
- package/dist/deep-recall-mcp-tools.js +8 -0
- package/dist/deep-recall-mcp-tools.js.map +1 -0
- package/dist/deep-recall-policy-llm.d.ts +37 -0
- package/dist/deep-recall-policy-llm.js +19 -0
- package/dist/deep-recall-policy-llm.js.map +1 -0
- package/dist/deep-recall-renderer.d.ts +16 -0
- package/dist/deep-recall-renderer.js +8 -0
- package/dist/deep-recall-renderer.js.map +1 -0
- package/dist/deep-recall-seeds.d.ts +83 -0
- package/dist/deep-recall-seeds.js +8 -0
- package/dist/deep-recall-seeds.js.map +1 -0
- package/dist/deep-recall.d.ts +97 -0
- package/dist/deep-recall.js +13 -0
- package/dist/deep-recall.js.map +1 -0
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-BC3bCEet.d.ts → dependency-propagation-delivery-BZGUecZf.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +13 -13
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +10 -9
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +47 -35
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +13 -11
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +15 -15
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/{graph-edge-decay-DGTBFALQ.js → graph-edge-decay-FXGELBFA.js} +4 -4
- package/dist/graph-edge-decay-FXGELBFA.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +2 -1
- package/dist/graph.js +2 -2
- package/dist/harmonic-construction.js +3 -3
- package/dist/harmonic-retrieval.d.ts +38 -2
- package/dist/harmonic-retrieval.js +12 -3
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-D4hS9uxK.d.ts → index-B4iTvT-w.d.ts} +2 -2
- package/dist/index.d.ts +25 -23
- package/dist/index.js +126 -115
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +15 -15
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +13 -13
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +13 -13
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +14 -14
- package/dist/{maintenance-BRcc3Hx8.d.ts → maintenance-BBpNqEeJ.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +13 -11
- package/dist/memory-subject.d.ts +13 -11
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +14 -14
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +13 -13
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync.js +2 -2
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +16 -16
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +29 -28
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +21 -21
- package/dist/{orchestrator-Btq9lzAN.d.ts → orchestrator-DglY1H0w.d.ts} +8 -8
- package/dist/orchestrator.d.ts +10 -9
- package/dist/orchestrator.js +108 -97
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-CZoNdFb5.d.ts → pipeline-C7qRsy6g.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-C9-CHc40.d.ts → public-http-CPpCsi35.d.ts} +1 -1
- package/dist/{qmd-VIjSCKIE.d.ts → qmd-YRLTa3AE.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-deep-expand-select.js +4 -44
- package/dist/recall-deep-expand-select.js.map +1 -1
- package/dist/recall-deep-frontier.js +4 -23
- package/dist/recall-deep-frontier.js.map +1 -1
- package/dist/recall-deep-rewrite.js +4 -23
- package/dist/recall-deep-rewrite.js.map +1 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -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/plan.d.ts +2 -1
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +7 -6
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/{scope-profiles-DqbxQXIS.d.ts → scope-profiles-BVvqVzJX.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +8 -8
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-DW3rEUoW.d.ts → semantic-consolidation-BzCI6Kuu.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +14 -14
- package/dist/semantic-rule-promotion.js +13 -13
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +13 -13
- package/dist/{service-B2vJU_Bx.d.ts → service-DQ3Gscy5.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +37 -1
- package/dist/shared-context/manager.js +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +13 -13
- package/dist/standup/build.js +13 -13
- package/dist/{storage-6fn7BPmb.d.ts → storage-DmTbQdD0.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +12 -12
- package/dist/subject-config.d.ts +2 -1
- package/dist/summarizer.d.ts +2 -1
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +16 -14
- package/dist/support-passport/index.js +49 -37
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +14 -14
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-eM7QIcX2.d.ts → types-CLRTESSD.d.ts} +3 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +13 -13
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +14 -14
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +13 -13
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +1 -0
- package/src/access-http.ts +5 -5
- package/src/access-mcp-output-schemas.ts +1 -0
- package/src/access-mcp.ts +3 -3
- package/src/access-operations-batch.ts +3 -1
- package/src/access-schema.ts +12 -0
- package/src/access-service.ts +162 -5
- package/src/access-surface-catalog.ts +2 -0
- package/src/cli/deep-recall-commands.ts +60 -0
- package/src/cli.ts +2 -2
- package/src/config.test.ts +19 -0
- package/src/config.ts +7 -0
- package/src/deep-recall-config.ts +83 -0
- package/src/deep-recall-http-glue.ts +75 -0
- package/src/deep-recall-mcp-tools.ts +33 -0
- package/src/deep-recall-policy-llm.ts +65 -0
- package/src/deep-recall-renderer.ts +41 -0
- package/src/deep-recall-seeds.ts +134 -0
- package/src/deep-recall-surface.test.ts +902 -0
- package/src/deep-recall.test.ts +348 -0
- package/src/deep-recall.ts +572 -0
- package/src/harmonic-retrieval.ts +78 -25
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/shared-context/envelope-at.test.ts +23 -0
- package/src/shared-context/envelope-at.ts +12 -6
- package/src/shared-context/envelope-io.ts +184 -0
- package/src/shared-context/envelope-wiring.test.ts +193 -0
- package/src/shared-context/governance.ts +28 -9
- package/src/shared-context/iso-instant.ts +43 -0
- package/src/shared-context/manager.ts +74 -15
- package/src/shared-context/provenance.ts +3 -26
- package/src/shared-context/write-origin.test.ts +145 -0
- package/src/types.ts +3 -1
- package/dist/chunk-26JWBSWD.js.map +0 -1
- package/dist/chunk-3DT2F5OI.js.map +0 -1
- package/dist/chunk-4OFKZAJG.js.map +0 -1
- package/dist/chunk-6RPB2TDG.js.map +0 -1
- package/dist/chunk-AYWPIH4M.js.map +0 -1
- package/dist/chunk-HXWOVCS6.js.map +0 -1
- package/dist/chunk-IVAW3HBF.js.map +0 -1
- package/dist/chunk-K4E3Y3ZX.js.map +0 -1
- package/dist/chunk-QL4U3SJA.js.map +0 -1
- package/dist/chunk-TBRG2SYY.js.map +0 -1
- package/dist/chunk-VI637ILW.js.map +0 -1
- package/dist/chunk-XXW32OL7.js.map +0 -1
- /package/dist/{chunk-D5VPIJN3.js.map → chunk-227WJVPY.js.map} +0 -0
- /package/dist/{chunk-Y3BWCIY2.js.map → chunk-2EHDPHMD.js.map} +0 -0
- /package/dist/{chunk-2LKW6OO7.js.map → chunk-2XJDAEAM.js.map} +0 -0
- /package/dist/{chunk-P23JWI3D.js.map → chunk-3ITTF7YH.js.map} +0 -0
- /package/dist/{chunk-NGP2FPB2.js.map → chunk-4UVDLNHQ.js.map} +0 -0
- /package/dist/{chunk-FJMIQTMH.js.map → chunk-5YQ7RFSO.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-7LCGFUMB.js.map} +0 -0
- /package/dist/{chunk-EESYTBXV.js.map → chunk-7NCUHD5U.js.map} +0 -0
- /package/dist/{chunk-X574KX52.js.map → chunk-7ZMU4XQT.js.map} +0 -0
- /package/dist/{chunk-SG3Z67FB.js.map → chunk-APZXA4WI.js.map} +0 -0
- /package/dist/{chunk-2QSZNTDO.js.map → chunk-AU7Q3LSC.js.map} +0 -0
- /package/dist/{chunk-VGMRI4J6.js.map → chunk-B75VCEX5.js.map} +0 -0
- /package/dist/{chunk-D35XLYQ7.js.map → chunk-BE4Y6GK6.js.map} +0 -0
- /package/dist/{chunk-ELKD5PCD.js.map → chunk-BEXFNGQ3.js.map} +0 -0
- /package/dist/{chunk-U5SRTYFS.js.map → chunk-BFDOBESV.js.map} +0 -0
- /package/dist/{chunk-OLT3YTDH.js.map → chunk-BIJAWZYW.js.map} +0 -0
- /package/dist/{chunk-FU2NYFX6.js.map → chunk-BO4PWIJY.js.map} +0 -0
- /package/dist/{chunk-JMAG7WZ7.js.map → chunk-BX6GW4KC.js.map} +0 -0
- /package/dist/{chunk-J2R275FN.js.map → chunk-CTCGHNWN.js.map} +0 -0
- /package/dist/{chunk-X5PIDJ3L.js.map → chunk-DA4ZMCBU.js.map} +0 -0
- /package/dist/{chunk-H6RSANGQ.js.map → chunk-ETZ7KKOS.js.map} +0 -0
- /package/dist/{chunk-XZBXINXZ.js.map → chunk-GIC6BASP.js.map} +0 -0
- /package/dist/{chunk-SXQZMC7R.js.map → chunk-GR4C3FHT.js.map} +0 -0
- /package/dist/{chunk-7DYGPGCT.js.map → chunk-H5IIBGDM.js.map} +0 -0
- /package/dist/{chunk-CNNXMIS6.js.map → chunk-HFRGCNFY.js.map} +0 -0
- /package/dist/{chunk-MAG6M3B6.js.map → chunk-HTOWFFAI.js.map} +0 -0
- /package/dist/{chunk-FOCMJEHH.js.map → chunk-I4QAH4SY.js.map} +0 -0
- /package/dist/{chunk-FSGCXGK6.js.map → chunk-I6DUKBUI.js.map} +0 -0
- /package/dist/{chunk-6FUMA6AA.js.map → chunk-JGXMA6HL.js.map} +0 -0
- /package/dist/{chunk-TA7UZZMW.js.map → chunk-JHTF22NQ.js.map} +0 -0
- /package/dist/{chunk-DZ3CNJPB.js.map → chunk-LDOQE34V.js.map} +0 -0
- /package/dist/{chunk-MEW53VQJ.js.map → chunk-LDWIPYJ6.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-KJTSWJZN.js.map → chunk-LF6SHWVV.js.map} +0 -0
- /package/dist/{chunk-G6OZZX7P.js.map → chunk-LJAP4KSW.js.map} +0 -0
- /package/dist/{chunk-NV6BTBUI.js.map → chunk-LJNLLNEM.js.map} +0 -0
- /package/dist/{chunk-FFFZEF6B.js.map → chunk-LUDXSSTW.js.map} +0 -0
- /package/dist/{chunk-PCH2CVCS.js.map → chunk-LWBSEYW3.js.map} +0 -0
- /package/dist/{chunk-FMUJGGKW.js.map → chunk-M7DGN6JZ.js.map} +0 -0
- /package/dist/{chunk-TZIHB2LP.js.map → chunk-MNH2GM4O.js.map} +0 -0
- /package/dist/{chunk-RACZB5HT.js.map → chunk-N37X5RU7.js.map} +0 -0
- /package/dist/{chunk-LK4TOYPU.js.map → chunk-NF3NMAG7.js.map} +0 -0
- /package/dist/{chunk-AG46P24C.js.map → chunk-NNBZS3DY.js.map} +0 -0
- /package/dist/{chunk-LZ2JTO7N.js.map → chunk-OASGWNYL.js.map} +0 -0
- /package/dist/{chunk-C2JCVZWX.js.map → chunk-OLBZ2WGG.js.map} +0 -0
- /package/dist/{chunk-Z3SQEEB6.js.map → chunk-OUKBMQ2O.js.map} +0 -0
- /package/dist/{chunk-2Z3DG5CQ.js.map → chunk-P6GKRT2H.js.map} +0 -0
- /package/dist/{chunk-UGA6PZTX.js.map → chunk-P7LVYPIX.js.map} +0 -0
- /package/dist/{chunk-VE45LRCE.js.map → chunk-QRDSXR3V.js.map} +0 -0
- /package/dist/{chunk-KS67VHXA.js.map → chunk-QUVWFZOU.js.map} +0 -0
- /package/dist/{chunk-AI4QFDPR.js.map → chunk-R7FXPG4T.js.map} +0 -0
- /package/dist/{chunk-X66BHMAU.js.map → chunk-RJ57OOCD.js.map} +0 -0
- /package/dist/{chunk-VXMKW7YN.js.map → chunk-TRLCMLX7.js.map} +0 -0
- /package/dist/{chunk-ELCMVOQT.js.map → chunk-V3HUBF7T.js.map} +0 -0
- /package/dist/{chunk-KMIAD7JR.js.map → chunk-VHAKBUBD.js.map} +0 -0
- /package/dist/{chunk-GS5IFIVE.js.map → chunk-VYD63IFH.js.map} +0 -0
- /package/dist/{chunk-WSFPNCRA.js.map → chunk-XFPHV65N.js.map} +0 -0
- /package/dist/{chunk-JCUG7AXZ.js.map → chunk-XJJYSX6F.js.map} +0 -0
- /package/dist/{chunk-I6DURYZI.js.map → chunk-XMIAU4CO.js.map} +0 -0
- /package/dist/{chunk-PJIGYPO5.js.map → chunk-XQGFIAG7.js.map} +0 -0
- /package/dist/{chunk-B2URC6LJ.js.map → chunk-YWN3GYI2.js.map} +0 -0
- /package/dist/{chunk-TG6JEJDV.js.map → chunk-Z33VUMKY.js.map} +0 -0
- /package/dist/{graph-edge-decay-DGTBFALQ.js.map → deep-recall-config.js.map} +0 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep-recall loop regression (issue #2332).
|
|
3
|
+
*
|
|
4
|
+
* The acceptance-criterion scenario: memory A and memory B share a cue
|
|
5
|
+
* anchor, only A matches the query text, and B is retrieved via EXPAND.
|
|
6
|
+
* The graph fixture is written through the REAL store writers
|
|
7
|
+
* (recordAbstractionNode / recordCueAnchor) and read back through the
|
|
8
|
+
* same readers the access service uses — no fabricated store shapes.
|
|
9
|
+
* All paths are synthetic temp dirs; no operator data.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { mkdtemp } from "node:fs/promises";
|
|
13
|
+
import { tmpdir } from "node:os";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import test from "node:test";
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
|
|
18
|
+
import { recordAbstractionNode } from "./abstraction-nodes.js";
|
|
19
|
+
import { recordCueAnchor } from "./cue-anchors.js";
|
|
20
|
+
import { readAbstractionNodes, readCueAnchors } from "./harmonic-retrieval.js";
|
|
21
|
+
import {
|
|
22
|
+
runBudgetedDeepRecall,
|
|
23
|
+
type DeepRecallConfig,
|
|
24
|
+
type DeepRecallDeps,
|
|
25
|
+
type DeepRecallGraphSnapshot,
|
|
26
|
+
type DeepRecallMemoryView,
|
|
27
|
+
} from "./deep-recall.js";
|
|
28
|
+
import { DEEP_RECALL_CONFIG_DEFAULTS } from "./deep-recall-config.js";
|
|
29
|
+
|
|
30
|
+
function makeConfig(overrides: Partial<DeepRecallConfig> = {}): DeepRecallConfig {
|
|
31
|
+
return { ...DEEP_RECALL_CONFIG_DEFAULTS, enabled: true, ...overrides };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function writeAnchorGraphFixture(memoryDir: string): Promise<void> {
|
|
35
|
+
const recordedAt = "2026-08-01T00:00:00.000Z";
|
|
36
|
+
await recordAbstractionNode({
|
|
37
|
+
memoryDir,
|
|
38
|
+
node: {
|
|
39
|
+
schemaVersion: 1,
|
|
40
|
+
nodeId: "node-alpha",
|
|
41
|
+
recordedAt,
|
|
42
|
+
sessionKey: "test-session",
|
|
43
|
+
kind: "topic",
|
|
44
|
+
abstractionLevel: "meso",
|
|
45
|
+
title: "Alpha topic seeded by query",
|
|
46
|
+
summary: "Synthetic alpha summary",
|
|
47
|
+
sourceMemoryIds: ["mem-alpha"],
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
await recordAbstractionNode({
|
|
51
|
+
memoryDir,
|
|
52
|
+
node: {
|
|
53
|
+
schemaVersion: 1,
|
|
54
|
+
nodeId: "node-beta",
|
|
55
|
+
recordedAt,
|
|
56
|
+
sessionKey: "test-session",
|
|
57
|
+
kind: "topic",
|
|
58
|
+
abstractionLevel: "meso",
|
|
59
|
+
title: "Beta topic linked only by anchor",
|
|
60
|
+
summary: "Synthetic beta summary",
|
|
61
|
+
sourceMemoryIds: ["mem-beta"],
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
await recordCueAnchor({
|
|
65
|
+
memoryDir,
|
|
66
|
+
anchor: {
|
|
67
|
+
schemaVersion: 1,
|
|
68
|
+
anchorId: "anchor-shared",
|
|
69
|
+
anchorType: "entity",
|
|
70
|
+
anchorValue: "acme+payments",
|
|
71
|
+
normalizedCue: "acme payments",
|
|
72
|
+
recordedAt,
|
|
73
|
+
sessionKey: "test-session",
|
|
74
|
+
nodeRefs: ["node-alpha", "node-beta"],
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const MEMORY_STORE: DeepRecallMemoryView[] = [
|
|
80
|
+
{ memoryId: "mem-alpha", content: "Alpha holds the payments routing decision.", active: true },
|
|
81
|
+
{ memoryId: "mem-beta", content: "Beta holds the fallback processor contract.", active: true },
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
function makeDeps(options: {
|
|
85
|
+
config?: Partial<DeepRecallConfig>;
|
|
86
|
+
graph?: DeepRecallGraphSnapshot;
|
|
87
|
+
seedHits?: Array<{ memoryId: string; score: number }>;
|
|
88
|
+
script: string[];
|
|
89
|
+
seedThrows?: boolean;
|
|
90
|
+
}): DeepRecallDeps {
|
|
91
|
+
const graph = options.graph ?? { nodes: [], anchors: [] };
|
|
92
|
+
return {
|
|
93
|
+
config: makeConfig(options.config),
|
|
94
|
+
searchSeed: async () => {
|
|
95
|
+
if (options.seedThrows) throw new Error("qmd unavailable");
|
|
96
|
+
return options.seedHits ?? [];
|
|
97
|
+
},
|
|
98
|
+
loadGraph: async () => graph,
|
|
99
|
+
loadMemory: async (memoryId) =>
|
|
100
|
+
MEMORY_STORE.find((memory) => memory.memoryId === memoryId) ?? null,
|
|
101
|
+
callPolicy: async () => options.script.shift() ?? null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
test("deep recall retrieves an anchor-linked memory via EXPAND when only the seed matches the query", async () => {
|
|
106
|
+
const memoryDir = await mkdtemp(path.join(tmpdir(), "remnic-deep-recall-"));
|
|
107
|
+
await writeAnchorGraphFixture(memoryDir);
|
|
108
|
+
const graph: DeepRecallGraphSnapshot = {
|
|
109
|
+
nodes: await readAbstractionNodes({ memoryDir }),
|
|
110
|
+
anchors: await readCueAnchors({ memoryDir }),
|
|
111
|
+
};
|
|
112
|
+
assert.equal(graph.nodes.length, 2, "fixture nodes written and read through the real store");
|
|
113
|
+
assert.equal(graph.anchors.length, 1, "fixture anchor written and read through the real store");
|
|
114
|
+
|
|
115
|
+
const result = await runBudgetedDeepRecall(
|
|
116
|
+
makeDeps({
|
|
117
|
+
graph,
|
|
118
|
+
seedHits: [{ memoryId: "mem-alpha", score: 0.9 }],
|
|
119
|
+
script: [
|
|
120
|
+
JSON.stringify({ action: "EXPAND", expandNodeIds: ["node-beta"], reason: "follow the shared anchor" }),
|
|
121
|
+
JSON.stringify({ action: "STOP", reason: "sufficient" }),
|
|
122
|
+
],
|
|
123
|
+
}),
|
|
124
|
+
"acme payments routing",
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
assert.equal(result.ok, true, "successful invocation is ok even though it is multi-hop");
|
|
128
|
+
const beta = result.entries.find((entry) => entry.memoryId === "mem-beta");
|
|
129
|
+
assert.ok(beta, "anchor-linked mem-beta is retrieved even though it never matched the query text");
|
|
130
|
+
assert.equal(beta?.origin, "expand");
|
|
131
|
+
assert.equal(beta?.viaAnchor, "acme+payments");
|
|
132
|
+
assert.ok(Math.abs((beta?.score ?? 0) - 0.9 * 0.8) < 1e-9, "expansion inherits parent score * 0.8");
|
|
133
|
+
const alpha = result.entries.find((entry) => entry.memoryId === "mem-alpha");
|
|
134
|
+
assert.ok(alpha, "seeded mem-alpha stays in the working set");
|
|
135
|
+
assert.equal(alpha?.origin, "seed");
|
|
136
|
+
assert.equal(result.trace[0]?.action, "EXPAND");
|
|
137
|
+
assert.equal(result.trace[result.trace.length - 1]?.action, "STOP");
|
|
138
|
+
assert.ok(result.trace.every((step) => step.durationMs >= 0), "every trace step records telemetry");
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test("deep recall distinguishes a seed backend failure from an empty store", async () => {
|
|
142
|
+
const failure = await runBudgetedDeepRecall(
|
|
143
|
+
makeDeps({ script: [], seedThrows: true }),
|
|
144
|
+
"anything",
|
|
145
|
+
);
|
|
146
|
+
assert.equal(failure.ok, false, "backend failure is ok:false");
|
|
147
|
+
assert.equal(failure.error, "backend_unavailable");
|
|
148
|
+
|
|
149
|
+
const empty = await runBudgetedDeepRecall(makeDeps({ script: [] }), "anything");
|
|
150
|
+
assert.equal(empty.ok, true, "empty stores are ok:true with empty entries");
|
|
151
|
+
assert.deepEqual(empty.entries, []);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test("deep recall enforces the total timeout on pre-policy work, not only before policy calls", async () => {
|
|
155
|
+
// A seed search that never settles used to block the loop forever: the
|
|
156
|
+
// deadline was merely CHECKED before the first policy call, so the check
|
|
157
|
+
// never ran. The invocation must end inside totalTimeoutMs with the partial
|
|
158
|
+
// (here empty) working set and a BUDGET_EXHAUSTED tail.
|
|
159
|
+
const startedMs = Date.now();
|
|
160
|
+
const result = await runBudgetedDeepRecall(
|
|
161
|
+
{
|
|
162
|
+
config: makeConfig({ totalTimeoutMs: 25 }),
|
|
163
|
+
searchSeed: () => Promise.withResolvers<never>().promise,
|
|
164
|
+
loadGraph: async () => ({ nodes: [], anchors: [] }),
|
|
165
|
+
loadMemory: async () => null,
|
|
166
|
+
callPolicy: async () => {
|
|
167
|
+
throw new Error("the policy must never be called after the deadline expires");
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
"a query whose seed search stalls",
|
|
171
|
+
);
|
|
172
|
+
assert.equal(result.ok, true, "a timeout is partial, not a backend failure");
|
|
173
|
+
assert.deepEqual(result.entries, []);
|
|
174
|
+
assert.equal(result.trace.at(-1)?.action, "BUDGET_EXHAUSTED");
|
|
175
|
+
assert.ok(
|
|
176
|
+
Date.now() - startedMs < 5000,
|
|
177
|
+
"the invocation returns on the deadline instead of awaiting a stalled dependency",
|
|
178
|
+
);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test("deep recall keeps the overall deadline when the per-step timeout is disabled", async () => {
|
|
182
|
+
// stepTimeoutMs: 0 disables only its own axis (§33). A finite totalTimeoutMs
|
|
183
|
+
// must still reach the policy call, otherwise a slow call runs unbounded.
|
|
184
|
+
const budgets: number[] = [];
|
|
185
|
+
const withTotalOnly = await runBudgetedDeepRecall(
|
|
186
|
+
{
|
|
187
|
+
config: makeConfig({ maxSteps: 1, stepTimeoutMs: 0, totalTimeoutMs: 5000 }),
|
|
188
|
+
searchSeed: async () => [],
|
|
189
|
+
loadGraph: async () => ({ nodes: [], anchors: [] }),
|
|
190
|
+
loadMemory: async () => null,
|
|
191
|
+
callPolicy: async (_prompt, timeoutMs) => {
|
|
192
|
+
budgets.push(timeoutMs);
|
|
193
|
+
return JSON.stringify({ action: "STOP", reason: "done" });
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
"a query with only a total budget",
|
|
197
|
+
);
|
|
198
|
+
assert.equal(withTotalOnly.ok, true);
|
|
199
|
+
assert.equal(budgets.length, 1);
|
|
200
|
+
assert.ok(
|
|
201
|
+
(budgets[0] ?? 0) > 0 && (budgets[0] ?? 0) <= 5000,
|
|
202
|
+
`the remaining total budget must reach the policy call, got ${budgets[0]}`,
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
// Both axes disabled is the only "no timeout" case.
|
|
206
|
+
budgets.length = 0;
|
|
207
|
+
await runBudgetedDeepRecall(
|
|
208
|
+
{
|
|
209
|
+
config: makeConfig({ maxSteps: 1, stepTimeoutMs: 0, totalTimeoutMs: 0 }),
|
|
210
|
+
searchSeed: async () => [],
|
|
211
|
+
loadGraph: async () => ({ nodes: [], anchors: [] }),
|
|
212
|
+
loadMemory: async () => null,
|
|
213
|
+
callPolicy: async (_prompt, timeoutMs) => {
|
|
214
|
+
budgets.push(timeoutMs);
|
|
215
|
+
return JSON.stringify({ action: "STOP", reason: "done" });
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
"a query with no budget at all",
|
|
219
|
+
);
|
|
220
|
+
assert.equal(budgets[0], 0, "both axes disabled means no timeout");
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test("deep recall drops a seed whose memory is missing or no longer active", async () => {
|
|
224
|
+
// QMD keeps indexing a memory whose governance status left the ACTIVE set
|
|
225
|
+
// (pending_review, rejected, quarantined, …). `loadMemory` reports
|
|
226
|
+
// `active: false`; hydration used to keep the entry and only overwrite its
|
|
227
|
+
// content, so the final result surfaced memory governance had excluded.
|
|
228
|
+
const loaded: string[] = [];
|
|
229
|
+
const result = await runBudgetedDeepRecall(
|
|
230
|
+
{
|
|
231
|
+
config: makeConfig({ maxSteps: 0 }),
|
|
232
|
+
searchSeed: async () => [
|
|
233
|
+
{ memoryId: "mem-active", score: 0.9 },
|
|
234
|
+
{ memoryId: "mem-quarantined", score: 0.8 },
|
|
235
|
+
{ memoryId: "mem-deleted", score: 0.7 },
|
|
236
|
+
],
|
|
237
|
+
loadGraph: async () => ({ nodes: [], anchors: [] }),
|
|
238
|
+
loadMemory: async (memoryId) => {
|
|
239
|
+
loaded.push(memoryId);
|
|
240
|
+
if (memoryId === "mem-active") {
|
|
241
|
+
return { memoryId, content: "Active payments routing decision.", active: true };
|
|
242
|
+
}
|
|
243
|
+
if (memoryId === "mem-quarantined") {
|
|
244
|
+
return { memoryId, content: "Quarantined content that must never surface.", active: false };
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
},
|
|
248
|
+
callPolicy: async () => {
|
|
249
|
+
throw new Error("maxSteps 0 must not call the policy");
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
"payments routing",
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
assert.equal(result.ok, true, "governance pruning is not a backend failure");
|
|
256
|
+
assert.deepEqual(loaded.sort(), ["mem-active", "mem-deleted", "mem-quarantined"]);
|
|
257
|
+
assert.deepEqual(
|
|
258
|
+
result.entries.map((entry) => entry.memoryId),
|
|
259
|
+
["mem-active"],
|
|
260
|
+
"only the active seed survives hydration",
|
|
261
|
+
);
|
|
262
|
+
assert.ok(
|
|
263
|
+
!JSON.stringify(result.entries).includes("Quarantined content"),
|
|
264
|
+
"excluded content must not reach the caller",
|
|
265
|
+
);
|
|
266
|
+
assert.equal(
|
|
267
|
+
result.trace[0]?.workingSetSize,
|
|
268
|
+
1,
|
|
269
|
+
"the trace reports the pruned working set, not the raw QMD hit count",
|
|
270
|
+
);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
test("deep recall retires an expanded node from the frontier", async () => {
|
|
274
|
+
// EXPAND skips source memories that are inactive or unreadable, so
|
|
275
|
+
// `nodeAddsNothing` never became true for node-beta and the refreshed
|
|
276
|
+
// frontier re-offered it through the same shared anchor: the policy could
|
|
277
|
+
// spend every remaining step re-expanding a node that adds nothing.
|
|
278
|
+
const graph: DeepRecallGraphSnapshot = {
|
|
279
|
+
nodes: [
|
|
280
|
+
{
|
|
281
|
+
schemaVersion: 1,
|
|
282
|
+
nodeId: "node-alpha",
|
|
283
|
+
recordedAt: "2026-08-01T00:00:00.000Z",
|
|
284
|
+
sessionKey: "test-session",
|
|
285
|
+
kind: "topic",
|
|
286
|
+
abstractionLevel: "meso",
|
|
287
|
+
title: "Alpha topic seeded by query",
|
|
288
|
+
summary: "Synthetic alpha summary",
|
|
289
|
+
sourceMemoryIds: ["mem-alpha"],
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
schemaVersion: 1,
|
|
293
|
+
nodeId: "node-beta",
|
|
294
|
+
recordedAt: "2026-08-01T00:00:00.000Z",
|
|
295
|
+
sessionKey: "test-session",
|
|
296
|
+
kind: "topic",
|
|
297
|
+
abstractionLevel: "meso",
|
|
298
|
+
title: "Beta topic whose only source memory is inactive",
|
|
299
|
+
summary: "Synthetic beta summary",
|
|
300
|
+
sourceMemoryIds: ["mem-beta-inactive"],
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
anchors: [
|
|
304
|
+
{
|
|
305
|
+
schemaVersion: 1,
|
|
306
|
+
anchorId: "anchor-shared",
|
|
307
|
+
anchorType: "entity",
|
|
308
|
+
anchorValue: "acme+payments",
|
|
309
|
+
normalizedCue: "acme payments",
|
|
310
|
+
recordedAt: "2026-08-01T00:00:00.000Z",
|
|
311
|
+
sessionKey: "test-session",
|
|
312
|
+
nodeRefs: ["node-alpha", "node-beta"],
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
const expand = JSON.stringify({
|
|
317
|
+
action: "EXPAND",
|
|
318
|
+
expandNodeIds: ["node-beta"],
|
|
319
|
+
reason: "follow the shared anchor",
|
|
320
|
+
});
|
|
321
|
+
const result = await runBudgetedDeepRecall(
|
|
322
|
+
{
|
|
323
|
+
config: makeConfig({ maxSteps: 4 }),
|
|
324
|
+
searchSeed: async () => [{ memoryId: "mem-alpha", score: 0.9 }],
|
|
325
|
+
loadGraph: async () => graph,
|
|
326
|
+
loadMemory: async (memoryId) =>
|
|
327
|
+
memoryId === "mem-alpha"
|
|
328
|
+
? { memoryId, content: "Alpha holds the payments routing decision.", active: true }
|
|
329
|
+
: { memoryId, content: "Beta is quarantined.", active: false },
|
|
330
|
+
callPolicy: async () => expand,
|
|
331
|
+
},
|
|
332
|
+
"acme payments routing",
|
|
333
|
+
);
|
|
334
|
+
|
|
335
|
+
assert.equal(result.ok, true);
|
|
336
|
+
assert.equal(result.trace[0]?.action, "EXPAND", "the first EXPAND is honored");
|
|
337
|
+
assert.equal(
|
|
338
|
+
result.trace[0]?.frontierSize,
|
|
339
|
+
0,
|
|
340
|
+
"an expanded node leaves the frontier even when it contributed nothing",
|
|
341
|
+
);
|
|
342
|
+
assert.equal(
|
|
343
|
+
result.trace[1]?.detail,
|
|
344
|
+
"invalid_policy_output",
|
|
345
|
+
"re-expanding a retired node is refused instead of burning every step",
|
|
346
|
+
);
|
|
347
|
+
assert.equal(result.trace.length, 2, "the loop stops rather than looping on the same node");
|
|
348
|
+
});
|