@remnic/core 1.1.12 → 1.1.13
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-cli.d.ts +2 -1
- package/dist/access-cli.js +263 -82
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +26 -60
- package/dist/access-http.js +43 -29
- package/dist/access-mcp.d.ts +24 -6
- package/dist/access-mcp.js +35 -28
- package/dist/access-schema.d.ts +9 -6
- package/dist/access-schema.js +7 -5
- package/dist/access-service-DcCDmNYC.d.ts +1542 -0
- package/dist/access-service.d.ts +25 -7
- package/dist/access-service.js +33 -26
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.js +11 -3
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +24 -0
- package/dist/adapters/claude-code.js +9 -0
- package/dist/adapters/codex.d.ts +25 -0
- package/dist/adapters/codex.js +9 -0
- package/dist/adapters/hermes.d.ts +35 -0
- package/dist/adapters/hermes.js +9 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.js +26 -0
- package/dist/adapters/registry.d.ts +20 -0
- package/dist/adapters/registry.js +13 -0
- package/dist/adapters/replit.d.ts +28 -0
- package/dist/adapters/replit.js +9 -0
- package/dist/adapters/types.d.ts +43 -0
- package/dist/adapters/types.js +8 -0
- package/dist/bootstrap.d.ts +20 -5
- package/dist/boxes.d.ts +7 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +5 -3
- package/dist/briefing.js +9 -6
- package/dist/buffer-surprise-report.js +1 -1
- package/dist/buffer.d.ts +18 -4
- package/dist/buffer.js +1 -1
- package/dist/calibration.js +4 -4
- package/dist/capsule-cli.d.ts +4 -4
- package/dist/capsule-cli.js +1 -1
- package/dist/capsule-crypto-5CYAGVC5.js +18 -0
- package/dist/capsule-merge-4MGKE7C5.js +189 -0
- package/dist/causal-behavior.d.ts +8 -28
- package/dist/causal-behavior.js +6 -3
- package/dist/causal-behavior.js.map +1 -1
- package/dist/causal-chain.js +3 -2
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +24 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +3 -3
- package/dist/causal-trajectory.js +1 -1
- package/dist/chunk-25MQ7IHJ.js +427 -0
- package/dist/chunk-25MQ7IHJ.js.map +1 -0
- package/dist/chunk-2F2W355T.js +256 -0
- package/dist/chunk-2F2W355T.js.map +1 -0
- package/dist/chunk-2KI4QFHU.js +228 -0
- package/dist/chunk-2KI4QFHU.js.map +1 -0
- package/dist/chunk-2PRQG7PV.js +86 -0
- package/dist/chunk-2PRQG7PV.js.map +1 -0
- package/dist/chunk-2QR3XXIC.js +2272 -0
- package/dist/chunk-2QR3XXIC.js.map +1 -0
- package/dist/chunk-2WWLHTZY.js +121 -0
- package/dist/chunk-326G7DJK.js +2185 -0
- package/dist/chunk-326G7DJK.js.map +1 -0
- package/dist/chunk-34DQE4KF.js +174 -0
- package/dist/chunk-34DQE4KF.js.map +1 -0
- package/dist/chunk-3APJ5EVB.js +601 -0
- package/dist/chunk-3APJ5EVB.js.map +1 -0
- package/dist/chunk-3HPAPHUK.js +51 -0
- package/dist/chunk-3HPAPHUK.js.map +1 -0
- package/dist/chunk-3JXBXXM2.js +69 -0
- package/dist/chunk-3JXBXXM2.js.map +1 -0
- package/dist/chunk-3KW65B36.js +681 -0
- package/dist/chunk-3KW65B36.js.map +1 -0
- package/dist/chunk-3UXOZBHV.js +20 -0
- package/dist/chunk-3UXOZBHV.js.map +1 -0
- package/dist/chunk-3VAL7ZL2.js +266 -0
- package/dist/chunk-3VAL7ZL2.js.map +1 -0
- package/dist/chunk-3Y4P7RXM.js +31 -0
- package/dist/chunk-3Y4P7RXM.js.map +1 -0
- package/dist/chunk-47VWKCAF.js +273 -0
- package/dist/chunk-47VWKCAF.js.map +1 -0
- package/dist/chunk-4CRG46BG.js +271 -0
- package/dist/chunk-5375UYTQ.js +914 -0
- package/dist/chunk-5375UYTQ.js.map +1 -0
- package/dist/chunk-56K5QLHX.js +506 -0
- package/dist/chunk-56K5QLHX.js.map +1 -0
- package/dist/chunk-5RGLBDQF.js +596 -0
- package/dist/chunk-5RGLBDQF.js.map +1 -0
- package/dist/chunk-5UZXUTVO.js +9 -0
- package/dist/chunk-5UZXUTVO.js.map +1 -0
- package/dist/chunk-65PG43EQ.js +105 -0
- package/dist/chunk-65PG43EQ.js.map +1 -0
- package/dist/chunk-66DHUKLO.js +57 -0
- package/dist/chunk-66DHUKLO.js.map +1 -0
- package/dist/chunk-6FC5EGNV.js +46 -0
- package/dist/chunk-6FC5EGNV.js.map +1 -0
- package/dist/chunk-6H2TESSP.js +62 -0
- package/dist/chunk-6H2TESSP.js.map +1 -0
- package/dist/chunk-6LVVDPJ4.js +32 -0
- package/dist/chunk-6LVVDPJ4.js.map +1 -0
- package/dist/chunk-6RVI47ZR.js +159 -0
- package/dist/chunk-6RVI47ZR.js.map +1 -0
- package/dist/chunk-7AAT6G4Q.js +5117 -0
- package/dist/chunk-7AAT6G4Q.js.map +1 -0
- package/dist/chunk-7DTASS5T.js +29 -0
- package/dist/chunk-7DTASS5T.js.map +1 -0
- package/dist/chunk-7IASACLB.js +596 -0
- package/dist/chunk-7MNMYOFP.js +32 -0
- package/dist/chunk-7MNMYOFP.js.map +1 -0
- package/dist/chunk-7N4KAIGN.js +133 -0
- package/dist/chunk-7N4KAIGN.js.map +1 -0
- package/dist/chunk-7OZ53EXP.js +101 -0
- package/dist/chunk-7OZ53EXP.js.map +1 -0
- package/dist/chunk-7XYTQGCC.js +134 -0
- package/dist/chunk-7XYTQGCC.js.map +1 -0
- package/dist/chunk-A2XUIMJ3.js +341 -0
- package/dist/chunk-A2XUIMJ3.js.map +1 -0
- package/dist/chunk-AGZQD76C.js +201 -0
- package/dist/chunk-AGZQD76C.js.map +1 -0
- package/dist/chunk-APO3DCMU.js +361 -0
- package/dist/chunk-APO3DCMU.js.map +1 -0
- package/dist/chunk-BFBF3XEF.js +283 -0
- package/dist/chunk-BFBF3XEF.js.map +1 -0
- package/dist/chunk-BJ3KMYTB.js +1974 -0
- package/dist/chunk-BJ3KMYTB.js.map +1 -0
- package/dist/chunk-CHEL3SKB.js +6758 -0
- package/dist/chunk-CHEL3SKB.js.map +1 -0
- package/dist/chunk-CQZRLNMV.js +1491 -0
- package/dist/chunk-CQZRLNMV.js.map +1 -0
- package/dist/chunk-D46YSIYX.js +892 -0
- package/dist/chunk-D46YSIYX.js.map +1 -0
- package/dist/chunk-DINWEURR.js +648 -0
- package/dist/chunk-DINWEURR.js.map +1 -0
- package/dist/chunk-DK5LDEQM.js +530 -0
- package/dist/chunk-DK5LDEQM.js.map +1 -0
- package/dist/chunk-DOM4GKSW.js +34 -0
- package/dist/chunk-DOM4GKSW.js.map +1 -0
- package/dist/chunk-EDTHC6UD.js +1075 -0
- package/dist/chunk-EFJ3MQ4V.js +721 -0
- package/dist/chunk-EHRTFRWW.js +89 -0
- package/dist/chunk-EHRTFRWW.js.map +1 -0
- package/dist/chunk-FAJ7FZYM.js +11 -0
- package/dist/chunk-FAJ7FZYM.js.map +1 -0
- package/dist/chunk-FBYESMQ2.js +570 -0
- package/dist/chunk-FDU6HUUL.js +147 -0
- package/dist/chunk-FF4KLI5W.js +99 -0
- package/dist/chunk-FF4KLI5W.js.map +1 -0
- package/dist/chunk-FIT6DMX6.js +310 -0
- package/dist/chunk-FIT6DMX6.js.map +1 -0
- package/dist/chunk-FJ43PRLT.js +272 -0
- package/dist/chunk-FJ43PRLT.js.map +1 -0
- package/dist/chunk-FKFMOY3N.js +32 -0
- package/dist/chunk-FKFMOY3N.js.map +1 -0
- package/dist/chunk-FLTNHQK6.js +262 -0
- package/dist/chunk-FLTNHQK6.js.map +1 -0
- package/dist/chunk-GA454ALV.js +12436 -0
- package/dist/chunk-GA454ALV.js.map +1 -0
- package/dist/chunk-GGKRUQOO.js +228 -0
- package/dist/chunk-GIF42EW3.js +63 -0
- package/dist/chunk-GIF42EW3.js.map +1 -0
- package/dist/chunk-GL6I6MEQ.js +647 -0
- package/dist/chunk-H3ME6L6D.js +709 -0
- package/dist/chunk-H3ME6L6D.js.map +1 -0
- package/dist/chunk-HHLLAQGZ.js +1 -0
- package/dist/chunk-HXXBL2KD.js +2040 -0
- package/dist/chunk-I5V2VDIW.js +219 -0
- package/dist/chunk-I5V2VDIW.js.map +1 -0
- package/dist/chunk-I6K5FBRQ.js +35 -0
- package/dist/chunk-I6K5FBRQ.js.map +1 -0
- package/dist/chunk-ICRIXAP2.js +121 -0
- package/dist/chunk-ICRIXAP2.js.map +1 -0
- package/dist/chunk-J4EB7DNW.js +11 -0
- package/dist/chunk-J4EB7DNW.js.map +1 -0
- package/dist/chunk-JLFA7DQG.js +62 -0
- package/dist/chunk-JLFA7DQG.js.map +1 -0
- package/dist/chunk-KJTKLXTH.js +9 -0
- package/dist/chunk-KJTKLXTH.js.map +1 -0
- package/dist/chunk-KLAO5DGL.js +917 -0
- package/dist/chunk-KLAO5DGL.js.map +1 -0
- package/dist/chunk-KNKUID7G.js +183 -0
- package/dist/chunk-KOSORCJG.js +624 -0
- package/dist/chunk-KOSORCJG.js.map +1 -0
- package/dist/chunk-KUJVMMZQ.js +1262 -0
- package/dist/chunk-KUJVMMZQ.js.map +1 -0
- package/dist/chunk-LCR46JY5.js +123 -0
- package/dist/chunk-LCR46JY5.js.map +1 -0
- package/dist/chunk-LLQ2LLWF.js +148 -0
- package/dist/chunk-LLQ2LLWF.js.map +1 -0
- package/dist/chunk-LPMVBPA3.js +236 -0
- package/dist/chunk-LT3NLYSI.js +50 -0
- package/dist/chunk-LT3NLYSI.js.map +1 -0
- package/dist/chunk-LUDTDZLK.js +287 -0
- package/dist/chunk-LUDTDZLK.js.map +1 -0
- package/dist/chunk-M23FSH32.js +3963 -0
- package/dist/chunk-M23FSH32.js.map +1 -0
- package/dist/chunk-MC26UJIM.js +118 -0
- package/dist/chunk-ME6ESPZU.js +119 -0
- package/dist/chunk-ME6ESPZU.js.map +1 -0
- package/dist/chunk-MGKYQQYF.js +272 -0
- package/dist/chunk-MJFNCJXV.js +66 -0
- package/dist/chunk-MJFNCJXV.js.map +1 -0
- package/dist/chunk-MSWG7JI6.js +237 -0
- package/dist/chunk-MSWG7JI6.js.map +1 -0
- package/dist/chunk-MT25YHYH.js +141 -0
- package/dist/chunk-MT25YHYH.js.map +1 -0
- package/dist/chunk-MT4HVDUZ.js +53 -0
- package/dist/chunk-MY6TPVXW.js +219 -0
- package/dist/chunk-N2D6GXBM.js +267 -0
- package/dist/chunk-N2D6GXBM.js.map +1 -0
- package/dist/chunk-NJ3MJQZX.js +46 -0
- package/dist/chunk-NJ3MJQZX.js.map +1 -0
- package/dist/chunk-NMZY542O.js +335 -0
- package/dist/chunk-NMZY542O.js.map +1 -0
- package/dist/chunk-NNVTUXEB.js +23 -0
- package/dist/chunk-NZL6GGQE.js +375 -0
- package/dist/chunk-NZL6GGQE.js.map +1 -0
- package/dist/chunk-P4NEIHUT.js +108 -0
- package/dist/chunk-P7FMDTKL.js +103 -0
- package/dist/chunk-P7FMDTKL.js.map +1 -0
- package/dist/chunk-PHK3HARR.js +32 -0
- package/dist/chunk-PHK3HARR.js.map +1 -0
- package/dist/chunk-PIRJPV5T.js +98 -0
- package/dist/chunk-PIRJPV5T.js.map +1 -0
- package/dist/chunk-PK7H5L6Y.js +159 -0
- package/dist/chunk-PK7H5L6Y.js.map +1 -0
- package/dist/chunk-PR5FBTFU.js +233 -0
- package/dist/chunk-PR5FBTFU.js.map +1 -0
- package/dist/chunk-PU63GXWS.js +174 -0
- package/dist/chunk-PU63GXWS.js.map +1 -0
- package/dist/chunk-PZIAX57I.js +124 -0
- package/dist/chunk-PZIAX57I.js.map +1 -0
- package/dist/chunk-Q7P4WJDP.js +26 -0
- package/dist/chunk-Q7P4WJDP.js.map +1 -0
- package/dist/chunk-QQUAB63I.js +63 -0
- package/dist/chunk-QQUAB63I.js.map +1 -0
- package/dist/chunk-QRNI5JBH.js +18 -0
- package/dist/chunk-RHY3HH7P.js +601 -0
- package/dist/chunk-RHY3HH7P.js.map +1 -0
- package/dist/chunk-RRF5UOBJ.js +91 -0
- package/dist/chunk-RXDLTSWT.js +124 -0
- package/dist/chunk-RXDLTSWT.js.map +1 -0
- package/dist/chunk-RYED3SPJ.js +42 -0
- package/dist/chunk-RYED3SPJ.js.map +1 -0
- package/dist/chunk-S7KDBTWT.js +106 -0
- package/dist/chunk-S7KDBTWT.js.map +1 -0
- package/dist/chunk-SEDEKFYQ.js +1 -0
- package/dist/chunk-TECVW3JP.js +36 -0
- package/dist/chunk-TECVW3JP.js.map +1 -0
- package/dist/chunk-TFO23QT4.js +88 -0
- package/dist/chunk-TFO23QT4.js.map +1 -0
- package/dist/chunk-TK4UEOSK.js +76 -0
- package/dist/chunk-TK4UEOSK.js.map +1 -0
- package/dist/chunk-TKWGAOLV.js +122 -0
- package/dist/chunk-TKWGAOLV.js.map +1 -0
- package/dist/chunk-TMM4S4IJ.js +597 -0
- package/dist/chunk-TMM4S4IJ.js.map +1 -0
- package/dist/chunk-TMQLARTH.js +188 -0
- package/dist/chunk-TMQLARTH.js.map +1 -0
- package/dist/chunk-TPDBFYEG.js +130 -0
- package/dist/chunk-TPDBFYEG.js.map +1 -0
- package/dist/chunk-TPMQ3G6Z.js +145 -0
- package/dist/chunk-TPMQ3G6Z.js.map +1 -0
- package/dist/chunk-TZOLIGIG.js +61 -0
- package/dist/chunk-TZOLIGIG.js.map +1 -0
- package/dist/chunk-U3PN77QT.js +113 -0
- package/dist/chunk-U3WSW6PZ.js +277 -0
- package/dist/chunk-U4SCL7B7.js +640 -0
- package/dist/chunk-U4SCL7B7.js.map +1 -0
- package/dist/chunk-UWK5OXUJ.js +156 -0
- package/dist/chunk-UWK5OXUJ.js.map +1 -0
- package/dist/chunk-UWVJF25J.js +74 -0
- package/dist/chunk-UXHQAFNA.js +1317 -0
- package/dist/chunk-UXHQAFNA.js.map +1 -0
- package/dist/chunk-V5OCT34X.js +1 -0
- package/dist/chunk-VLXA6PI2.js +304 -0
- package/dist/chunk-VLXA6PI2.js.map +1 -0
- package/dist/chunk-VNO6ZJ35.js +500 -0
- package/dist/chunk-VNO6ZJ35.js.map +1 -0
- package/dist/chunk-VW676BEI.js +827 -0
- package/dist/chunk-VW676BEI.js.map +1 -0
- package/dist/chunk-W3LR522O.js +2296 -0
- package/dist/chunk-W4L6CZKA.js +96 -0
- package/dist/chunk-W4L6CZKA.js.map +1 -0
- package/dist/chunk-W4RVMTHR.js +372 -0
- package/dist/chunk-W4RVMTHR.js.map +1 -0
- package/dist/chunk-WEHSQBFR.js +188 -0
- package/dist/chunk-WEHSQBFR.js.map +1 -0
- package/dist/chunk-WELDCG6C.js +380 -0
- package/dist/chunk-WELDCG6C.js.map +1 -0
- package/dist/chunk-WZYKANL3.js +2800 -0
- package/dist/chunk-WZYKANL3.js.map +1 -0
- package/dist/chunk-XIG5PDM7.js +48 -0
- package/dist/chunk-XJNBEDFE.js +193 -0
- package/dist/chunk-XJNBEDFE.js.map +1 -0
- package/dist/chunk-XVVIG67A.js +291 -0
- package/dist/chunk-XVVIG67A.js.map +1 -0
- package/dist/chunk-XVZ7B3HG.js +135 -0
- package/dist/chunk-YBPYIAA5.js +73 -0
- package/dist/chunk-YBPYIAA5.js.map +1 -0
- package/dist/chunk-Z734BLO3.js +21 -0
- package/dist/chunk-Z734BLO3.js.map +1 -0
- package/dist/chunk-ZKSK55RC.js +269 -0
- package/dist/chunk-ZKSK55RC.js.map +1 -0
- package/dist/chunk-ZTFCYYEZ.js +69 -0
- package/dist/chunk-ZTFCYYEZ.js.map +1 -0
- package/dist/chunk-ZY2MNJR6.js +329 -0
- package/dist/chunk-ZY2MNJR6.js.map +1 -0
- package/dist/cli-D3VpkVwB.d.ts +1136 -0
- package/dist/cli.d.ts +39 -10
- package/dist/cli.js +108 -49
- package/dist/commitment-ledger.js +1 -1
- package/dist/compat/checks.d.ts +5 -0
- package/dist/compat/checks.js +11 -0
- package/dist/compat/checks.js.map +1 -0
- package/dist/compat/types.d.ts +30 -0
- package/dist/compat/types.js +1 -0
- package/dist/compat/types.js.map +1 -0
- package/dist/compounding/engine.d.ts +221 -0
- package/dist/compounding/engine.js +32 -0
- package/dist/compounding/engine.js.map +1 -0
- package/dist/compounding/preference-consolidator.d.ts +92 -0
- package/dist/compounding/preference-consolidator.js +553 -0
- package/dist/compounding/preference-consolidator.js.map +1 -0
- package/dist/config.d.ts +4 -2
- package/dist/config.js +9 -4
- package/dist/conflict-policy-DyJ2wd-h.d.ts +4 -0
- package/dist/connectors/codex-materialize-runner.d.ts +64 -0
- package/dist/connectors/codex-materialize-runner.js +33 -0
- package/dist/connectors/codex-materialize-runner.js.map +1 -0
- package/dist/connectors/codex-materialize.d.ts +195 -0
- package/dist/connectors/codex-materialize.js +38 -0
- package/dist/connectors/codex-materialize.js.map +1 -0
- package/dist/connectors/index.d.ts +444 -0
- package/dist/connectors/index.js +115 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors-cli-CwbyjGR7.d.ts +257 -0
- package/dist/connectors-cli.d.ts +1 -1
- package/dist/consolidation-provenance-check.d.ts +3 -1
- package/dist/consolidation-undo.d.ts +3 -1
- package/dist/contradiction/index.d.ts +258 -0
- package/dist/contradiction/index.js +43 -0
- package/dist/contradiction/index.js.map +1 -0
- package/dist/contradiction-review-ATP4S6IC.js +30 -0
- package/dist/contradiction-review-ATP4S6IC.js.map +1 -0
- package/dist/contradiction-scan-5A4IDZV5.js +13 -0
- package/dist/contradiction-scan-5A4IDZV5.js.map +1 -0
- package/dist/conversation-index/backend.d.ts +97 -0
- package/dist/conversation-index/backend.js +13 -0
- package/dist/conversation-index/backend.js.map +1 -0
- package/dist/conversation-index/chunker.d.ts +16 -0
- package/dist/conversation-index/chunker.js +8 -0
- package/dist/conversation-index/chunker.js.map +1 -0
- package/dist/conversation-index/cleanup.d.ts +11 -0
- package/dist/conversation-index/cleanup.js +9 -0
- package/dist/conversation-index/cleanup.js.map +1 -0
- package/dist/conversation-index/faiss-adapter.d.ts +6 -0
- package/dist/conversation-index/faiss-adapter.js +16 -0
- package/dist/conversation-index/faiss-adapter.js.map +1 -0
- package/dist/conversation-index/indexer.d.ts +23 -0
- package/dist/conversation-index/indexer.js +15 -0
- package/dist/conversation-index/indexer.js.map +1 -0
- package/dist/conversation-index/search.d.ts +6 -0
- package/dist/conversation-index/search.js +11 -0
- package/dist/conversation-index/search.js.map +1 -0
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +163 -0
- package/dist/enrichment/index.js +18 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/entity-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +8 -5
- package/dist/evals.js +1 -1
- package/dist/explicit-capture.d.ts +20 -5
- package/dist/explicit-capture.js +2 -2
- package/dist/extraction-judge-training.js +1 -1
- package/dist/extraction.js +8 -8
- package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
- package/dist/fallback-llm.d.ts +2 -0
- package/dist/fallback-llm.js +4 -4
- package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
- package/dist/index.d.ts +66 -711
- package/dist/index.js +556 -2680
- package/dist/index.js.map +1 -1
- package/dist/lcm/archive.d.ts +89 -0
- package/dist/lcm/archive.js +12 -0
- package/dist/lcm/archive.js.map +1 -0
- package/dist/lcm/dag.d.ts +48 -0
- package/dist/lcm/dag.js +8 -0
- package/dist/lcm/dag.js.map +1 -0
- package/dist/lcm/engine.d.ts +116 -0
- package/dist/lcm/engine.js +20 -0
- package/dist/lcm/engine.js.map +1 -0
- package/dist/lcm/index.d.ts +12 -0
- package/dist/lcm/index.js +44 -0
- package/dist/lcm/index.js.map +1 -0
- package/dist/lcm/queue.d.ts +62 -0
- package/dist/lcm/queue.js +8 -0
- package/dist/lcm/queue.js.map +1 -0
- package/dist/lcm/recall.d.ts +20 -0
- package/dist/lcm/recall.js +8 -0
- package/dist/lcm/recall.js.map +1 -0
- package/dist/lcm/schema.d.ts +16 -0
- package/dist/lcm/schema.js +14 -0
- package/dist/lcm/schema.js.map +1 -0
- package/dist/lcm/summarizer.d.ts +38 -0
- package/dist/lcm/summarizer.js +12 -0
- package/dist/lcm/summarizer.js.map +1 -0
- package/dist/lcm/tools.d.ts +29 -0
- package/dist/lcm/tools.js +8 -0
- package/dist/lcm/tools.js.map +1 -0
- package/dist/live-connectors-runner.js +5 -5
- package/dist/local-llm.js +3 -3
- package/dist/maintenance/archive-observations.d.ts +18 -0
- package/dist/maintenance/archive-observations.js +8 -0
- package/dist/maintenance/archive-observations.js.map +1 -0
- package/dist/maintenance/backup-stamp.d.ts +3 -0
- package/dist/maintenance/backup-stamp.js +8 -0
- package/dist/maintenance/backup-stamp.js.map +1 -0
- package/dist/maintenance/memory-governance-cron.d.ts +85 -0
- package/dist/maintenance/memory-governance-cron.js +22 -0
- package/dist/maintenance/memory-governance-cron.js.map +1 -0
- package/dist/maintenance/memory-governance.d.ts +137 -0
- package/dist/maintenance/memory-governance.js +40 -0
- package/dist/maintenance/memory-governance.js.map +1 -0
- package/dist/maintenance/migrate-observations.d.ts +18 -0
- package/dist/maintenance/migrate-observations.js +9 -0
- package/dist/maintenance/migrate-observations.js.map +1 -0
- package/dist/maintenance/observation-ledger-utils.d.ts +10 -0
- package/dist/maintenance/observation-ledger-utils.js +10 -0
- package/dist/maintenance/observation-ledger-utils.js.map +1 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +15 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js.map +1 -0
- package/dist/maintenance/rebuild-memory-projection.d.ts +77 -0
- package/dist/maintenance/rebuild-memory-projection.js +35 -0
- package/dist/maintenance/rebuild-memory-projection.js.map +1 -0
- package/dist/maintenance/rebuild-observations.d.ts +17 -0
- package/dist/maintenance/rebuild-observations.js +9 -0
- package/dist/maintenance/rebuild-observations.js.map +1 -0
- package/dist/mcp-memory-inspector-app.d.ts +24 -6
- package/dist/memory-projection-store.d.ts +108 -3
- package/dist/memory-projection-store.js +2 -1
- package/dist/memory-worth-outcomes.d.ts +4 -2
- package/dist/migrate/from-engram.d.ts +24 -0
- package/dist/migrate/from-engram.js +12 -0
- package/dist/migrate/from-engram.js.map +1 -0
- package/dist/namespaces/migrate.d.ts +50 -0
- package/dist/namespaces/migrate.js +50 -0
- package/dist/namespaces/migrate.js.map +1 -0
- package/dist/namespaces/principal.d.ts +17 -0
- package/dist/namespaces/principal.js +16 -0
- package/dist/namespaces/principal.js.map +1 -0
- package/dist/namespaces/search.d.ts +46 -0
- package/dist/namespaces/search.js +28 -0
- package/dist/namespaces/search.js.map +1 -0
- package/dist/namespaces/storage.d.ts +32 -0
- package/dist/namespaces/storage.js +28 -0
- package/dist/namespaces/storage.js.map +1 -0
- package/dist/network/tailscale.d.ts +41 -0
- package/dist/network/tailscale.js +9 -0
- package/dist/network/tailscale.js.map +1 -0
- package/dist/network/webdav.d.ts +39 -0
- package/dist/network/webdav.js +10 -0
- package/dist/network/webdav.js.map +1 -0
- package/dist/objective-state-writers.js +2 -2
- package/dist/operator-toolkit.d.ts +4 -2
- package/dist/operator-toolkit.js +32 -14
- package/dist/opik-exporter.js +2 -2
- package/dist/opik-exporter.js.map +1 -1
- package/dist/orchestrator-DuWl9Hwx.d.ts +1244 -0
- package/dist/orchestrator.d.ts +22 -7
- package/dist/orchestrator.js +79 -44
- package/dist/path-MR5JPYOP.js +9 -0
- package/dist/path-MR5JPYOP.js.map +1 -0
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +102 -3
- package/dist/qmd.js +23 -5
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +6 -0
- package/dist/replay/normalizers/chatgpt.js +11 -0
- package/dist/replay/normalizers/chatgpt.js.map +1 -0
- package/dist/replay/normalizers/claude.d.ts +6 -0
- package/dist/replay/normalizers/claude.js +11 -0
- package/dist/replay/normalizers/claude.js.map +1 -0
- package/dist/replay/normalizers/openclaw.d.ts +6 -0
- package/dist/replay/normalizers/openclaw.js +11 -0
- package/dist/replay/normalizers/openclaw.js.map +1 -0
- package/dist/replay/normalizers/shared.d.ts +16 -0
- package/dist/replay/normalizers/shared.js +14 -0
- package/dist/replay/normalizers/shared.js.map +1 -0
- package/dist/replay/runner.d.ts +35 -0
- package/dist/replay/runner.js +16 -0
- package/dist/replay/runner.js.map +1 -0
- package/dist/replay/types.d.ts +57 -0
- package/dist/replay/types.js +19 -0
- package/dist/replay/types.js.map +1 -0
- package/dist/resolution-B7FNQSSP.js +12 -0
- package/dist/resolution-B7FNQSSP.js.map +1 -0
- package/dist/resolve-provider-secret.js +2 -2
- package/dist/resume-bundles.js +8 -6
- package/dist/retrieval-agents.d.ts +1 -1
- package/dist/routing/engine.d.ts +35 -0
- package/dist/routing/engine.js +16 -0
- package/dist/routing/engine.js.map +1 -0
- package/dist/routing/store.d.ts +27 -0
- package/dist/routing/store.js +10 -0
- package/dist/routing/store.js.map +1 -0
- package/dist/runtime/better-sqlite.d.ts +8 -0
- package/dist/runtime/better-sqlite.js +10 -0
- package/dist/runtime/better-sqlite.js.map +1 -0
- package/dist/runtime/child-process.d.ts +32 -0
- package/dist/runtime/child-process.js +10 -0
- package/dist/runtime/child-process.js.map +1 -0
- package/dist/runtime/env.d.ts +5 -0
- package/dist/runtime/env.js +12 -0
- package/dist/runtime/env.js.map +1 -0
- package/dist/schemas.d.ts +22 -22
- package/dist/sdk-compat.js +1 -1
- package/dist/search/document-scanner.d.ts +22 -0
- package/dist/search/document-scanner.js +8 -0
- package/dist/search/document-scanner.js.map +1 -0
- package/dist/search/embed-helper.d.ts +35 -0
- package/dist/search/embed-helper.js +9 -0
- package/dist/search/embed-helper.js.map +1 -0
- package/dist/search/factory.d.ts +32 -0
- package/dist/search/factory.js +29 -0
- package/dist/search/factory.js.map +1 -0
- package/dist/search/index.d.ts +15 -0
- package/dist/search/index.js +50 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/lancedb-backend.d.ts +51 -0
- package/dist/search/lancedb-backend.js +10 -0
- package/dist/search/lancedb-backend.js.map +1 -0
- package/dist/search/meilisearch-backend.d.ts +48 -0
- package/dist/search/meilisearch-backend.js +10 -0
- package/dist/search/meilisearch-backend.js.map +1 -0
- package/dist/search/noop-backend.d.ts +26 -0
- package/dist/search/noop-backend.js +8 -0
- package/dist/search/noop-backend.js.map +1 -0
- package/dist/search/orama-backend.d.ts +53 -0
- package/dist/search/orama-backend.js +10 -0
- package/dist/search/orama-backend.js.map +1 -0
- package/dist/search/port.d.ts +61 -0
- package/dist/search/port.js +1 -0
- package/dist/search/port.js.map +1 -0
- package/dist/search/remote-backend.d.ts +39 -0
- package/dist/search/remote-backend.js +9 -0
- package/dist/search/remote-backend.js.map +1 -0
- package/dist/secure-store/index.d.ts +890 -0
- package/dist/secure-store/index.js +156 -0
- package/dist/secure-store/index.js.map +1 -0
- package/dist/semantic-VwGI14Ok.d.ts +69 -0
- package/dist/semantic-consolidation-4HkHWgeI.d.ts +180 -0
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +13 -6
- package/dist/semantic-rule-promotion.js +8 -5
- package/dist/semantic-rule-verifier.js +8 -5
- package/dist/shared-context/manager.d.ts +131 -0
- package/dist/shared-context/manager.js +15 -0
- package/dist/shared-context/manager.js.map +1 -0
- package/dist/skills-registry.js +13 -1
- package/dist/skills-registry.js.map +1 -1
- package/dist/state-store-VZU2IA53.js +16 -0
- package/dist/state-store-VZU2IA53.js.map +1 -0
- package/dist/storage-paths.d.ts +9 -0
- package/dist/storage-paths.js +20 -0
- package/dist/storage-paths.js.map +1 -0
- package/dist/storage.d.ts +3 -1
- package/dist/storage.js +7 -4
- package/dist/summarizer.d.ts +5 -0
- package/dist/summarizer.js +9 -8
- package/dist/summary-snapshot.js +2 -1
- package/dist/surfaces/dreams.d.ts +16 -0
- package/dist/surfaces/dreams.js +282 -0
- package/dist/surfaces/dreams.js.map +1 -0
- package/dist/surfaces/heartbeat.d.ts +17 -0
- package/dist/surfaces/heartbeat.js +265 -0
- package/dist/surfaces/heartbeat.js.map +1 -0
- package/dist/temporal-supersession.d.ts +3 -1
- package/dist/threading.d.ts +5 -0
- package/dist/threading.js +2 -1
- package/dist/tier-migration.d.ts +4 -2
- package/dist/tokens.js +2 -2
- package/dist/transcript.d.ts +15 -1
- package/dist/transcript.js +2 -1
- package/dist/transfer/autodetect.d.ts +4 -0
- package/dist/transfer/autodetect.js +15 -0
- package/dist/transfer/autodetect.js.map +1 -0
- package/dist/transfer/backup.d.ts +21 -0
- package/dist/transfer/backup.js +17 -0
- package/dist/transfer/backup.js.map +1 -0
- package/dist/transfer/capsule-export.d.ts +113 -0
- package/dist/transfer/capsule-export.js +19 -0
- package/dist/transfer/capsule-export.js.map +1 -0
- package/dist/transfer/capsule-import.d.ts +124 -0
- package/dist/transfer/capsule-import.js +16 -0
- package/dist/transfer/capsule-import.js.map +1 -0
- package/dist/transfer/constants.d.ts +13 -0
- package/dist/transfer/constants.js +12 -0
- package/dist/transfer/constants.js.map +1 -0
- package/dist/transfer/export-json.d.ts +11 -0
- package/dist/transfer/export-json.js +11 -0
- package/dist/transfer/export-json.js.map +1 -0
- package/dist/transfer/export-md.d.ts +10 -0
- package/dist/transfer/export-md.js +13 -0
- package/dist/transfer/export-md.js.map +1 -0
- package/dist/transfer/export-sqlite.d.ts +9 -0
- package/dist/transfer/export-sqlite.js +12 -0
- package/dist/transfer/export-sqlite.js.map +1 -0
- package/dist/transfer/fs-utils.d.ts +61 -0
- package/dist/transfer/fs-utils.js +40 -0
- package/dist/transfer/fs-utils.js.map +1 -0
- package/dist/transfer/import-json.d.ts +16 -0
- package/dist/transfer/import-json.js +13 -0
- package/dist/transfer/import-json.js.map +1 -0
- package/dist/transfer/import-md.d.ts +14 -0
- package/dist/transfer/import-md.js +11 -0
- package/dist/transfer/import-md.js.map +1 -0
- package/dist/transfer/import-sqlite.d.ts +14 -0
- package/dist/transfer/import-sqlite.js +12 -0
- package/dist/transfer/import-sqlite.js.map +1 -0
- package/dist/transfer/sqlite-schema.d.ts +4 -0
- package/dist/transfer/sqlite-schema.js +10 -0
- package/dist/transfer/sqlite-schema.js.map +1 -0
- package/dist/transfer/types.d.ts +916 -0
- package/dist/transfer/types.js +30 -0
- package/dist/transfer/types.js.map +1 -0
- package/dist/types.d.ts +28 -1
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +9 -6
- package/dist/work/board.d.ts +43 -0
- package/dist/work/board.js +14 -0
- package/dist/work/board.js.map +1 -0
- package/dist/work/boundary.d.ts +8 -0
- package/dist/work/boundary.js +14 -0
- package/dist/work/boundary.js.map +1 -0
- package/dist/work/storage.d.ts +39 -0
- package/dist/work/storage.js +11 -0
- package/dist/work/storage.js.map +1 -0
- package/dist/work/types.d.ts +75 -0
- package/dist/work/types.js +1 -0
- package/dist/work/types.js.map +1 -0
- package/package.json +2767 -6
- package/scripts/faiss_index.py +816 -0
- package/scripts/faiss_requirements.txt +3 -0
- package/skills/remnic-entities/SKILL.md +51 -0
- package/skills/remnic-memory-workflow/SKILL.md +61 -0
- package/skills/remnic-recall/SKILL.md +51 -0
- package/skills/remnic-remember/SKILL.md +56 -0
- package/skills/remnic-search/SKILL.md +51 -0
- package/skills/remnic-status/SKILL.md +51 -0
- package/src/abort-error.test.ts +49 -0
- package/src/abort-error.ts +46 -0
- package/src/abstraction-nodes.ts +162 -0
- package/src/access-audit.test.ts +178 -0
- package/src/access-audit.ts +125 -0
- package/src/access-cli.test.ts +439 -0
- package/src/access-cli.ts +438 -0
- package/src/access-http.test.ts +225 -0
- package/src/access-http.ts +1899 -0
- package/src/access-idempotency.ts +232 -0
- package/src/access-mcp.test.ts +568 -0
- package/src/access-mcp.ts +3056 -0
- package/src/access-schema-pi.test.ts +60 -0
- package/src/access-schema.ts +522 -0
- package/src/access-service-namespace.test.ts +123 -0
- package/src/access-service.ts +5629 -0
- package/src/action-confidence.test.ts +206 -0
- package/src/action-confidence.ts +466 -0
- package/src/active-memory-bridge.test.ts +285 -0
- package/src/active-memory-bridge.ts +217 -0
- package/src/active-recall.test.ts +484 -0
- package/src/active-recall.ts +459 -0
- package/src/adapters/claude-code.ts +56 -0
- package/src/adapters/codex.ts +57 -0
- package/src/adapters/hermes.ts +64 -0
- package/src/adapters/index.ts +6 -0
- package/src/adapters/registry.ts +41 -0
- package/src/adapters/replit.ts +55 -0
- package/src/adapters/types.ts +51 -0
- package/src/behavior-learner.ts +144 -0
- package/src/behavior-signals.ts +73 -0
- package/src/binary-lifecycle/backend.ts +117 -0
- package/src/binary-lifecycle/index.ts +35 -0
- package/src/binary-lifecycle/manifest.ts +79 -0
- package/src/binary-lifecycle/pipeline.ts +352 -0
- package/src/binary-lifecycle/scanner.ts +89 -0
- package/src/binary-lifecycle/types.ts +89 -0
- package/src/bootstrap.ts +178 -0
- package/src/boxes.ts +521 -0
- package/src/briefing.test.ts +1535 -0
- package/src/briefing.ts +1382 -0
- package/src/buffer-session.test.ts +443 -0
- package/src/buffer-surprise-report.ts +176 -0
- package/src/buffer-surprise-telemetry.test.ts +606 -0
- package/src/buffer-surprise-trigger.test.ts +766 -0
- package/src/buffer-surprise.test.ts +339 -0
- package/src/buffer-surprise.ts +203 -0
- package/src/buffer.ts +900 -0
- package/src/bulk-import/cli-command.test.ts +204 -0
- package/src/bulk-import/index.ts +34 -0
- package/src/bulk-import/pipeline.test.ts +445 -0
- package/src/bulk-import/pipeline.ts +178 -0
- package/src/bulk-import/registry.test.ts +151 -0
- package/src/bulk-import/registry.ts +72 -0
- package/src/bulk-import/types.test.ts +272 -0
- package/src/bulk-import/types.ts +145 -0
- package/src/calibration.ts +394 -0
- package/src/capsule-cli.test.ts +398 -0
- package/src/capsule-cli.ts +565 -0
- package/src/causal-behavior.ts +308 -0
- package/src/causal-chain.ts +419 -0
- package/src/causal-consolidation.ts +370 -0
- package/src/causal-retrieval.ts +286 -0
- package/src/causal-trajectory-graph.ts +60 -0
- package/src/causal-trajectory.ts +303 -0
- package/src/chunking.ts +220 -0
- package/src/citations.ts +232 -0
- package/src/cli.ts +9403 -0
- package/src/codex-cli-fallback.ts +162 -0
- package/src/codex-thread-key.ts +1 -0
- package/src/coding/access-coding-context.test.ts +197 -0
- package/src/coding/coding-branch-scope.test.ts +281 -0
- package/src/coding/coding-namespace.test.ts +360 -0
- package/src/coding/coding-namespace.ts +412 -0
- package/src/coding/coding-orchestrator.test.ts +249 -0
- package/src/coding/git-context.test.ts +507 -0
- package/src/coding/git-context.ts +336 -0
- package/src/coding/mcp-set-coding-context.test.ts +174 -0
- package/src/coding/review-context.test.ts +316 -0
- package/src/coding/review-context.ts +349 -0
- package/src/coding/wire-coding-context.test.ts +468 -0
- package/src/commitment-ledger.test.ts +78 -0
- package/src/commitment-ledger.ts +337 -0
- package/src/compat/checks.test.ts +206 -0
- package/src/compat/checks.ts +716 -0
- package/src/compat/types.ts +33 -0
- package/src/compounding/engine.ts +1686 -0
- package/src/compounding/preference-consolidator.ts +778 -0
- package/src/compression-optimizer.ts +312 -0
- package/src/config.test.ts +930 -0
- package/src/config.ts +3807 -0
- package/src/connectors/codex/instructions.md +160 -0
- package/src/connectors/codex/resources/namespace-cheatsheet.md +48 -0
- package/src/connectors/codex-marketplace.ts +500 -0
- package/src/connectors/codex-materialize-runner.ts +212 -0
- package/src/connectors/codex-materialize.ts +983 -0
- package/src/connectors/coerce.ts +62 -0
- package/src/connectors/index.test.ts +1570 -0
- package/src/connectors/index.ts +3222 -0
- package/src/connectors/live/framework.ts +164 -0
- package/src/connectors/live/github.test.ts +1218 -0
- package/src/connectors/live/github.ts +1068 -0
- package/src/connectors/live/gmail.test.ts +1706 -0
- package/src/connectors/live/gmail.ts +1293 -0
- package/src/connectors/live/google-drive.test.ts +696 -0
- package/src/connectors/live/google-drive.ts +724 -0
- package/src/connectors/live/index.ts +101 -0
- package/src/connectors/live/live-connectors.test.ts +689 -0
- package/src/connectors/live/notion.test.ts +1109 -0
- package/src/connectors/live/notion.ts +978 -0
- package/src/connectors/live/registry.ts +103 -0
- package/src/connectors/live/state-store.ts +399 -0
- package/src/connectors/live/transient-errors.ts +150 -0
- package/src/connectors/weclone-installer.test.ts +850 -0
- package/src/connectors-cli.ts +513 -0
- package/src/console/state.test.ts +224 -0
- package/src/console/state.ts +514 -0
- package/src/console/trace.test.ts +813 -0
- package/src/console/trace.ts +603 -0
- package/src/console/tui.test.ts +582 -0
- package/src/console/tui.ts +508 -0
- package/src/consolidation-operator.ts +182 -0
- package/src/consolidation-provenance-check.ts +551 -0
- package/src/consolidation-undo.ts +718 -0
- package/src/contradiction/contradiction-judge.test.ts +189 -0
- package/src/contradiction/contradiction-judge.ts +333 -0
- package/src/contradiction/contradiction-review.ts +574 -0
- package/src/contradiction/contradiction-scan.ts +504 -0
- package/src/contradiction/contradiction.test.ts +2230 -0
- package/src/contradiction/index.ts +37 -0
- package/src/contradiction/resolution.ts +383 -0
- package/src/conversation-index/backend.ts +323 -0
- package/src/conversation-index/chunker.ts +47 -0
- package/src/conversation-index/cleanup.ts +53 -0
- package/src/conversation-index/faiss-adapter.ts +384 -0
- package/src/conversation-index/indexer.test.ts +164 -0
- package/src/conversation-index/indexer.ts +192 -0
- package/src/conversation-index/search.ts +37 -0
- package/src/cross-namespace-budget.test.ts +275 -0
- package/src/cross-namespace-budget.ts +365 -0
- package/src/cue-anchors.ts +163 -0
- package/src/curation/index.ts +544 -0
- package/src/dashboard-runtime.ts +337 -0
- package/src/day-summary.ts +122 -0
- package/src/dedup/index.ts +330 -0
- package/src/dedup/semantic.test.ts +1577 -0
- package/src/dedup/semantic.ts +148 -0
- package/src/delinearize.ts +193 -0
- package/src/direct-answer-wiring.test.ts +473 -0
- package/src/direct-answer-wiring.ts +180 -0
- package/src/direct-answer.test.ts +484 -0
- package/src/direct-answer.ts +273 -0
- package/src/embedding-fallback.ts +565 -0
- package/src/enrichment/audit.ts +89 -0
- package/src/enrichment/index.ts +27 -0
- package/src/enrichment/pipeline.ts +197 -0
- package/src/enrichment/provider-registry.ts +85 -0
- package/src/enrichment/types.ts +100 -0
- package/src/enrichment/web-search-provider.ts +63 -0
- package/src/entity-retrieval.ts +774 -0
- package/src/entity-schema.ts +239 -0
- package/src/evals.ts +1312 -0
- package/src/event-order-recall.test.ts +4164 -0
- package/src/event-order-recall.ts +2802 -0
- package/src/evidence-pack.test.ts +89 -0
- package/src/evidence-pack.ts +388 -0
- package/src/explicit-capture.ts +530 -0
- package/src/explicit-cue-recall.test.ts +3019 -0
- package/src/explicit-cue-recall.ts +5545 -0
- package/src/extraction-judge-telemetry.ts +234 -0
- package/src/extraction-judge-training.ts +221 -0
- package/src/extraction-judge.ts +846 -0
- package/src/extraction-timeout.test.ts +265 -0
- package/src/extraction.ts +2719 -0
- package/src/fallback-llm.test.ts +1060 -0
- package/src/fallback-llm.ts +918 -0
- package/src/focused-list-recall.test.ts +734 -0
- package/src/focused-list-recall.ts +1160 -0
- package/src/graph-dashboard-diff.ts +35 -0
- package/src/graph-dashboard-key.ts +5 -0
- package/src/graph-dashboard-parser.ts +104 -0
- package/src/graph-edge-reinforcement.ts +192 -0
- package/src/graph-events.ts +151 -0
- package/src/graph-recall.test.ts +164 -0
- package/src/graph-recall.ts +189 -0
- package/src/graph-retrieval.test.ts +809 -0
- package/src/graph-retrieval.ts +823 -0
- package/src/graph-snapshot.ts +329 -0
- package/src/graph.ts +813 -0
- package/src/harmonic-retrieval.ts +223 -0
- package/src/himem.ts +154 -0
- package/src/hygiene.ts +87 -0
- package/src/identity-continuity.ts +333 -0
- package/src/importance.ts +328 -0
- package/src/importers/base.test.ts +294 -0
- package/src/importers/base.ts +436 -0
- package/src/importers/index.ts +21 -0
- package/src/index.ts +1204 -0
- package/src/intent.ts +154 -0
- package/src/json-extract.ts +85 -0
- package/src/json-store.ts +42 -0
- package/src/lcm/archive.ts +617 -0
- package/src/lcm/dag.ts +199 -0
- package/src/lcm/engine.ts +645 -0
- package/src/lcm/index.ts +7 -0
- package/src/lcm/queue.test.ts +178 -0
- package/src/lcm/queue.ts +200 -0
- package/src/lcm/recall.ts +117 -0
- package/src/lcm/schema.ts +154 -0
- package/src/lcm/summarizer.ts +235 -0
- package/src/lcm/tools.ts +191 -0
- package/src/lcm-engine.test.ts +660 -0
- package/src/legacy-hook-compat.test.ts +20 -0
- package/src/legacy-hook-compat.ts +45 -0
- package/src/lifecycle.ts +289 -0
- package/src/live-connectors-runner.ts +385 -0
- package/src/local-llm-qos.test.ts +303 -0
- package/src/local-llm-thinking.test.ts +292 -0
- package/src/local-llm.ts +1464 -0
- package/src/logger.ts +49 -0
- package/src/maintenance/archive-observations.ts +147 -0
- package/src/maintenance/backup-stamp.ts +3 -0
- package/src/maintenance/dreams-ledger.ts +516 -0
- package/src/maintenance/first-start-migration.ts +362 -0
- package/src/maintenance/forget.test.ts +206 -0
- package/src/maintenance/forget.ts +126 -0
- package/src/maintenance/graph-edge-decay.test.ts +409 -0
- package/src/maintenance/graph-edge-decay.ts +394 -0
- package/src/maintenance/memory-governance-cron.ts +447 -0
- package/src/maintenance/memory-governance.ts +1039 -0
- package/src/maintenance/migrate-observations.ts +216 -0
- package/src/maintenance/observation-ledger-utils.ts +54 -0
- package/src/maintenance/pattern-reinforcement.test.ts +875 -0
- package/src/maintenance/pattern-reinforcement.ts +369 -0
- package/src/maintenance/purge.ts +334 -0
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +78 -0
- package/src/maintenance/rebuild-memory-projection.ts +1234 -0
- package/src/maintenance/rebuild-observations.ts +178 -0
- package/src/maintenance/tier-stats.test.ts +378 -0
- package/src/maintenance/tier-stats.ts +222 -0
- package/src/mcp-memory-inspector-app.ts +421 -0
- package/src/memory-action-policy.ts +80 -0
- package/src/memory-cache.ts +208 -0
- package/src/memory-extension/claude-code-publisher.ts +51 -0
- package/src/memory-extension/codex-publisher.ts +149 -0
- package/src/memory-extension/hermes-publisher.ts +51 -0
- package/src/memory-extension/index.ts +100 -0
- package/src/memory-extension/shared-instructions.ts +133 -0
- package/src/memory-extension/types.ts +86 -0
- package/src/memory-extension-host/host-discovery.ts +276 -0
- package/src/memory-extension-host/index.ts +14 -0
- package/src/memory-extension-host/render-extensions-block.ts +73 -0
- package/src/memory-extension-host/types.ts +21 -0
- package/src/memory-lifecycle-ledger-utils.ts +116 -0
- package/src/memory-projection-format.ts +11 -0
- package/src/memory-projection-store.ts +951 -0
- package/src/memory-provenance.test.ts +196 -0
- package/src/memory-provenance.ts +484 -0
- package/src/memory-worth-bench.test.ts +71 -0
- package/src/memory-worth-bench.ts +265 -0
- package/src/memory-worth-filter.test.ts +209 -0
- package/src/memory-worth-filter.ts +204 -0
- package/src/memory-worth-frontmatter.test.ts +311 -0
- package/src/memory-worth-outcomes.test.ts +316 -0
- package/src/memory-worth-outcomes.ts +286 -0
- package/src/memory-worth.test.ts +317 -0
- package/src/memory-worth.ts +215 -0
- package/src/message-parts/index.ts +806 -0
- package/src/message-parts/message-parts.test.ts +421 -0
- package/src/migrate/from-engram.ts +789 -0
- package/src/model-registry.ts +313 -0
- package/src/models-json.ts +76 -0
- package/src/namespaces/migrate.ts +187 -0
- package/src/namespaces/path.ts +25 -0
- package/src/namespaces/principal.test.ts +195 -0
- package/src/namespaces/principal.ts +86 -0
- package/src/namespaces/search.test.ts +105 -0
- package/src/namespaces/search.ts +233 -0
- package/src/namespaces/storage.ts +74 -0
- package/src/native-knowledge.ts +1823 -0
- package/src/negative.ts +72 -0
- package/src/network/tailscale.ts +179 -0
- package/src/network/webdav.ts +385 -0
- package/src/objective-state-writers.ts +951 -0
- package/src/objective-state.ts +320 -0
- package/src/onboarding/index.ts +529 -0
- package/src/openai-chat-compat.ts +56 -0
- package/src/operator-toolkit.ts +2132 -0
- package/src/opik-exporter.test.ts +72 -0
- package/src/opik-exporter.ts +587 -0
- package/src/orchestrator-extraction-queue.test.ts +197 -0
- package/src/orchestrator-flush.test.ts +1171 -0
- package/src/orchestrator-pattern-reinforcement.test.ts +128 -0
- package/src/orchestrator-source-attribution.test.ts +701 -0
- package/src/orchestrator.ts +16368 -0
- package/src/page-versioning.ts +450 -0
- package/src/patterns-cli.ts +574 -0
- package/src/peers/index.ts +54 -0
- package/src/peers/migrate-from-identity-anchor.test.ts +291 -0
- package/src/peers/migrate-from-identity-anchor.ts +350 -0
- package/src/peers/peers.test.ts +419 -0
- package/src/peers/profile-reasoner.ts +694 -0
- package/src/peers/storage.ts +1350 -0
- package/src/peers/types.ts +138 -0
- package/src/plugin-id.ts +84 -0
- package/src/policy-runtime.ts +209 -0
- package/src/procedural/procedure-miner.ts +150 -0
- package/src/procedural/procedure-recall.ts +93 -0
- package/src/procedural/procedure-stats.ts +213 -0
- package/src/procedural/procedure-types.ts +132 -0
- package/src/procedural/reinforcement-core.test.ts +132 -0
- package/src/procedural/reinforcement-core.ts +73 -0
- package/src/profiling.test.ts +263 -0
- package/src/profiling.ts +435 -0
- package/src/projection/index.ts +398 -0
- package/src/qmd-recall-cache.test.ts +138 -0
- package/src/qmd-recall-cache.ts +111 -0
- package/src/qmd.test.ts +257 -0
- package/src/qmd.ts +2614 -0
- package/src/reasoning-trace-recall.ts +201 -0
- package/src/reasoning-trace-types.ts +235 -0
- package/src/recall-audit-anomaly.test.ts +246 -0
- package/src/recall-audit-anomaly.ts +297 -0
- package/src/recall-audit.test.ts +51 -0
- package/src/recall-audit.ts +72 -0
- package/src/recall-budget-config.test.ts +87 -0
- package/src/recall-disclosure-escalation.test.ts +196 -0
- package/src/recall-disclosure-escalation.ts +158 -0
- package/src/recall-disclosure-shaping.test.ts +146 -0
- package/src/recall-disclosure.test.ts +214 -0
- package/src/recall-explain-renderer.test.ts +140 -0
- package/src/recall-explain-renderer.ts +356 -0
- package/src/recall-mmr.test.ts +808 -0
- package/src/recall-mmr.ts +607 -0
- package/src/recall-qos.test.ts +85 -0
- package/src/recall-qos.ts +82 -0
- package/src/recall-query-policy.ts +221 -0
- package/src/recall-state.test.ts +233 -0
- package/src/recall-state.ts +456 -0
- package/src/recall-tag-filter.ts +143 -0
- package/src/recall-tokenization.ts +35 -0
- package/src/recall-xray-cli.test.ts +118 -0
- package/src/recall-xray-cli.ts +100 -0
- package/src/recall-xray-disclosure-telemetry.test.ts +183 -0
- package/src/recall-xray-renderer.test.ts +539 -0
- package/src/recall-xray-renderer.ts +487 -0
- package/src/recall-xray.test.ts +503 -0
- package/src/recall-xray.ts +621 -0
- package/src/reconstruct.ts +41 -0
- package/src/release-changelog.ts +35 -0
- package/src/relevance.ts +67 -0
- package/src/replay/normalizers/chatgpt.ts +133 -0
- package/src/replay/normalizers/claude.ts +102 -0
- package/src/replay/normalizers/openclaw.ts +119 -0
- package/src/replay/normalizers/shared.ts +69 -0
- package/src/replay/runner.ts +197 -0
- package/src/replay/types.ts +143 -0
- package/src/rerank.test.ts +48 -0
- package/src/rerank.ts +176 -0
- package/src/resolve-auth-token.test.ts +226 -0
- package/src/resolve-auth-token.ts +151 -0
- package/src/resolve-provider-secret.test.ts +187 -0
- package/src/resolve-provider-secret.ts +410 -0
- package/src/response-guidance-recall.test.ts +3952 -0
- package/src/response-guidance-recall.ts +4431 -0
- package/src/resume-bundles.ts +415 -0
- package/src/retrieval-agents.ts +623 -0
- package/src/retrieval-tiers.ts +25 -0
- package/src/retrieval.ts +104 -0
- package/src/review/index.test.ts +201 -0
- package/src/review/index.ts +536 -0
- package/src/routing/engine.ts +162 -0
- package/src/routing/store.ts +321 -0
- package/src/runtime/better-sqlite.test.ts +32 -0
- package/src/runtime/better-sqlite.ts +76 -0
- package/src/runtime/child-process.ts +67 -0
- package/src/runtime/env.ts +48 -0
- package/src/sanitize.ts +58 -0
- package/src/schemas.ts +449 -0
- package/src/sdk-compat.ts +87 -0
- package/src/search/document-scanner.ts +96 -0
- package/src/search/embed-helper.ts +142 -0
- package/src/search/factory.ts +189 -0
- package/src/search/index.ts +10 -0
- package/src/search/lancedb-backend.ts +342 -0
- package/src/search/meilisearch-backend.ts +232 -0
- package/src/search/noop-backend.ts +57 -0
- package/src/search/orama-backend.ts +358 -0
- package/src/search/port.ts +86 -0
- package/src/search/remote-backend.ts +124 -0
- package/src/secure-store/cipher.ts +271 -0
- package/src/secure-store/cli-handlers.ts +355 -0
- package/src/secure-store/cli-renderer.ts +131 -0
- package/src/secure-store/header.ts +373 -0
- package/src/secure-store/index.ts +137 -0
- package/src/secure-store/kdf.ts +263 -0
- package/src/secure-store/keyring.ts +106 -0
- package/src/secure-store/metadata.ts +394 -0
- package/src/secure-store/passphrase-reader.ts +252 -0
- package/src/secure-store/secure-fs.ts +571 -0
- package/src/secure-store/secure-store.test.ts +755 -0
- package/src/semantic-chunking.ts +545 -0
- package/src/semantic-consolidation.test.ts +182 -0
- package/src/semantic-consolidation.ts +432 -0
- package/src/semantic-rule-promotion.ts +183 -0
- package/src/semantic-rule-verifier.ts +160 -0
- package/src/session-integrity.ts +569 -0
- package/src/session-observer-bands.ts +11 -0
- package/src/session-observer-state.ts +346 -0
- package/src/session-toggles.test.ts +96 -0
- package/src/session-toggles.ts +159 -0
- package/src/shared-context/manager.ts +810 -0
- package/src/signal.ts +84 -0
- package/src/skills-registry.test.ts +277 -0
- package/src/skills-registry.ts +120 -0
- package/src/source-attribution-roundtrip.test.ts +215 -0
- package/src/source-attribution.test.ts +1425 -0
- package/src/source-attribution.ts +639 -0
- package/src/spaces/index.ts +627 -0
- package/src/storage-paths.ts +117 -0
- package/src/storage.ts +6657 -0
- package/src/store-contract.ts +55 -0
- package/src/summarizer.ts +844 -0
- package/src/summary-snapshot.test.ts +681 -0
- package/src/summary-snapshot.ts +238 -0
- package/src/surfaces/dreams.test.ts +394 -0
- package/src/surfaces/dreams.ts +346 -0
- package/src/surfaces/heartbeat.test.ts +415 -0
- package/src/surfaces/heartbeat.ts +325 -0
- package/src/sync/index.ts +308 -0
- package/src/targeted-fact-recall.test.ts +1694 -0
- package/src/targeted-fact-recall.ts +2905 -0
- package/src/taxonomy/default-taxonomy.ts +87 -0
- package/src/taxonomy/index.ts +26 -0
- package/src/taxonomy/resolver-doc-generator.ts +57 -0
- package/src/taxonomy/resolver.ts +184 -0
- package/src/taxonomy/taxonomy-loader.ts +186 -0
- package/src/taxonomy/types.ts +48 -0
- package/src/telemetry-transcript.ts +70 -0
- package/src/temporal-index.ts +890 -0
- package/src/temporal-supersession.test.ts +2703 -0
- package/src/temporal-supersession.ts +493 -0
- package/src/temporal-validity.test.ts +448 -0
- package/src/temporal-validity.ts +123 -0
- package/src/threading.ts +395 -0
- package/src/tier-migration.ts +124 -0
- package/src/tier-routing.ts +102 -0
- package/src/tmt.ts +462 -0
- package/src/tokens.test.ts +178 -0
- package/src/tokens.ts +279 -0
- package/src/topics.ts +147 -0
- package/src/training-export/cli-date-validation.test.ts +258 -0
- package/src/training-export/converter.test.ts +452 -0
- package/src/training-export/converter.ts +319 -0
- package/src/training-export/date-parse.ts +117 -0
- package/src/training-export/index.ts +26 -0
- package/src/training-export/registry.test.ts +85 -0
- package/src/training-export/registry.ts +57 -0
- package/src/training-export/types.ts +31 -0
- package/src/transcript.ts +1179 -0
- package/src/transfer/autodetect.ts +30 -0
- package/src/transfer/backup.ts +138 -0
- package/src/transfer/capsule-crypto.ts +485 -0
- package/src/transfer/capsule-encrypt.test.ts +690 -0
- package/src/transfer/capsule-export.ts +543 -0
- package/src/transfer/capsule-fork.ts +375 -0
- package/src/transfer/capsule-import.ts +564 -0
- package/src/transfer/capsule-merge.ts +433 -0
- package/src/transfer/conflict-policy.ts +16 -0
- package/src/transfer/constants.ts +13 -0
- package/src/transfer/exclusions.ts +37 -0
- package/src/transfer/export-json.ts +65 -0
- package/src/transfer/export-md.ts +59 -0
- package/src/transfer/export-sqlite.ts +52 -0
- package/src/transfer/fs-utils.ts +269 -0
- package/src/transfer/import-json.ts +108 -0
- package/src/transfer/import-md.ts +84 -0
- package/src/transfer/import-sqlite.ts +100 -0
- package/src/transfer/integrity.ts +71 -0
- package/src/transfer/sqlite-schema.ts +16 -0
- package/src/transfer/types.ts +297 -0
- package/src/trust-zones.ts +1186 -0
- package/src/types.ts +3074 -0
- package/src/user-model.test.ts +124 -0
- package/src/user-model.ts +162 -0
- package/src/utility-learner.ts +353 -0
- package/src/utility-runtime.ts +88 -0
- package/src/utility-telemetry.ts +215 -0
- package/src/utils/category-dir.ts +44 -0
- package/src/utils/errno.ts +6 -0
- package/src/utils/iso-timestamp.test.ts +37 -0
- package/src/utils/iso-timestamp.ts +164 -0
- package/src/utils/path.ts +26 -0
- package/src/verified-recall.ts +138 -0
- package/src/version-utils.test.ts +10 -0
- package/src/version-utils.ts +9 -0
- package/src/whitespace.ts +10 -0
- package/src/work/board.ts +359 -0
- package/src/work/boundary.ts +107 -0
- package/src/work/storage.ts +436 -0
- package/src/work/types.ts +82 -0
- package/src/work-product-ledger.ts +265 -0
- package/dist/access-service-DDjzFALq.d.ts +0 -2088
- package/dist/capsule-crypto-SJS5VVAP.js +0 -18
- package/dist/capsule-export-7QNCBZOQ.js +0 -17
- package/dist/capsule-import-EPBHD2EN.js +0 -16
- package/dist/capsule-merge-DI7PNQ2H.js +0 -189
- package/dist/chunk-23ZZK64Y.js +0 -26
- package/dist/chunk-23ZZK64Y.js.map +0 -1
- package/dist/chunk-242S3I2A.js +0 -647
- package/dist/chunk-2LGMW3DJ.js +0 -111
- package/dist/chunk-3B6KIRBH.js +0 -5213
- package/dist/chunk-3B6KIRBH.js.map +0 -1
- package/dist/chunk-457A4P3L.js +0 -119
- package/dist/chunk-457A4P3L.js.map +0 -1
- package/dist/chunk-4IS4SXIQ.js +0 -2040
- package/dist/chunk-4YM32CRU.js +0 -721
- package/dist/chunk-6TBWYBJ3.js +0 -236
- package/dist/chunk-74EMIVE4.js +0 -329
- package/dist/chunk-74EMIVE4.js.map +0 -1
- package/dist/chunk-767ODGE6.js +0 -183
- package/dist/chunk-7V22HTMD.js +0 -623
- package/dist/chunk-7V22HTMD.js.map +0 -1
- package/dist/chunk-7ZM3BFKK.js +0 -9705
- package/dist/chunk-7ZM3BFKK.js.map +0 -1
- package/dist/chunk-AQJNPMOA.js +0 -643
- package/dist/chunk-AQJNPMOA.js.map +0 -1
- package/dist/chunk-ASAITVLA.js +0 -64
- package/dist/chunk-ASAITVLA.js.map +0 -1
- package/dist/chunk-BBE34QBJ.js +0 -275
- package/dist/chunk-BBE34QBJ.js.map +0 -1
- package/dist/chunk-BZSQEPRW.js +0 -14710
- package/dist/chunk-BZSQEPRW.js.map +0 -1
- package/dist/chunk-CPKTBRS2.js +0 -891
- package/dist/chunk-CPKTBRS2.js.map +0 -1
- package/dist/chunk-D4GAOFF6.js +0 -562
- package/dist/chunk-D4GAOFF6.js.map +0 -1
- package/dist/chunk-D54LZC5L.js +0 -147
- package/dist/chunk-DF3RVK3X.js +0 -119
- package/dist/chunk-DF3RVK3X.js.map +0 -1
- package/dist/chunk-DZZPC36E.js +0 -1451
- package/dist/chunk-DZZPC36E.js.map +0 -1
- package/dist/chunk-E2UCDP5S.js +0 -570
- package/dist/chunk-E6K4NIEU.js +0 -747
- package/dist/chunk-E6K4NIEU.js.map +0 -1
- package/dist/chunk-EEQLFRUM.js +0 -89
- package/dist/chunk-ETOW6ACV.js +0 -158
- package/dist/chunk-ETOW6ACV.js.map +0 -1
- package/dist/chunk-FMEBPEAO.js +0 -347
- package/dist/chunk-FMEBPEAO.js.map +0 -1
- package/dist/chunk-FQDPCE3I.js +0 -1837
- package/dist/chunk-FQDPCE3I.js.map +0 -1
- package/dist/chunk-FYIYMQ5N.js +0 -221
- package/dist/chunk-FYIYMQ5N.js.map +0 -1
- package/dist/chunk-G2WADRQ3.js +0 -219
- package/dist/chunk-G4SK7DSQ.js +0 -121
- package/dist/chunk-GVPWB7EY.js +0 -390
- package/dist/chunk-GVPWB7EY.js.map +0 -1
- package/dist/chunk-HELQZFZO.js +0 -1075
- package/dist/chunk-HL5LRPNA.js +0 -1914
- package/dist/chunk-HL5LRPNA.js.map +0 -1
- package/dist/chunk-HQZVVSVB.js +0 -147
- package/dist/chunk-HQZVVSVB.js.map +0 -1
- package/dist/chunk-HY3L4WKC.js +0 -2195
- package/dist/chunk-HY3L4WKC.js.map +0 -1
- package/dist/chunk-IB3BFHGN.js +0 -228
- package/dist/chunk-IXEJRKCZ.js +0 -18
- package/dist/chunk-JBMSGZEQ.js +0 -441
- package/dist/chunk-JBMSGZEQ.js.map +0 -1
- package/dist/chunk-JESOB2HO.js +0 -108
- package/dist/chunk-JKDVIE52.js +0 -272
- package/dist/chunk-JRNQ3RNA.js +0 -284
- package/dist/chunk-JRNQ3RNA.js.map +0 -1
- package/dist/chunk-K6WK37A6.js +0 -865
- package/dist/chunk-K6WK37A6.js.map +0 -1
- package/dist/chunk-MARWOCVP.js +0 -48
- package/dist/chunk-MNU6ZBWT.js +0 -4454
- package/dist/chunk-MNU6ZBWT.js.map +0 -1
- package/dist/chunk-N5AKDXAI.js +0 -74
- package/dist/chunk-OA3L7BFR.js +0 -183
- package/dist/chunk-OA3L7BFR.js.map +0 -1
- package/dist/chunk-OR64ZGRZ.js +0 -23
- package/dist/chunk-P77UEOU2.js +0 -1521
- package/dist/chunk-P77UEOU2.js.map +0 -1
- package/dist/chunk-PH4C2U43.js +0 -239
- package/dist/chunk-PH4C2U43.js.map +0 -1
- package/dist/chunk-RVPLBATS.js +0 -1586
- package/dist/chunk-RVPLBATS.js.map +0 -1
- package/dist/chunk-U5JMRGKX.js +0 -340
- package/dist/chunk-U5JMRGKX.js.map +0 -1
- package/dist/chunk-URB2WSKZ.js +0 -350
- package/dist/chunk-URB2WSKZ.js.map +0 -1
- package/dist/chunk-UVMUAWVT.js +0 -596
- package/dist/chunk-WEJG4TB5.js +0 -118
- package/dist/chunk-X7HPGUVG.js +0 -271
- package/dist/chunk-XAMBKFQS.js +0 -2777
- package/dist/chunk-XAMBKFQS.js.map +0 -1
- package/dist/chunk-XJKFSSDW.js +0 -726
- package/dist/chunk-XJKFSSDW.js.map +0 -1
- package/dist/chunk-XMHBH5H6.js +0 -283
- package/dist/chunk-XMHBH5H6.js.map +0 -1
- package/dist/chunk-XMVFHBHT.js +0 -277
- package/dist/chunk-Y3VMVTYX.js +0 -53
- package/dist/chunk-YNB73F22.js +0 -137
- package/dist/chunk-YNB73F22.js.map +0 -1
- package/dist/chunk-Z2E7VW55.js +0 -335
- package/dist/chunk-Z2E7VW55.js.map +0 -1
- package/dist/chunk-ZG7PTKBK.js +0 -2296
- package/dist/chunk-ZNQN6ZTA.js +0 -135
- package/dist/chunk-ZVTKDVVM.js +0 -827
- package/dist/chunk-ZVTKDVVM.js.map +0 -1
- package/dist/cli-BR8KpIU0.d.ts +0 -1259
- package/dist/codex-materialize-CQlLTzke.d.ts +0 -139
- package/dist/connectors-cli-DFGtY2DB.d.ts +0 -257
- package/dist/contradiction-review-5LTTVDQV.js +0 -22
- package/dist/contradiction-scan-QTXAMBUA.js +0 -414
- package/dist/contradiction-scan-QTXAMBUA.js.map +0 -1
- package/dist/engine-35M5BKQ7.js +0 -28
- package/dist/fs-utils-IRVUFB6G.js +0 -30
- package/dist/graph-edge-decay-PWB63GRE.js +0 -207
- package/dist/memory-governance-IMPQZXFC.js +0 -37
- package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
- package/dist/orchestrator-DDMPqU6R.d.ts +0 -1792
- package/dist/path-RMTY5Y5A.js +0 -9
- package/dist/port-B6VEDIkC.d.ts +0 -53
- package/dist/resolution-YGIBORXI.js +0 -101
- package/dist/resolution-YGIBORXI.js.map +0 -1
- package/dist/secure-store-4R2GSO7S.js +0 -156
- package/dist/semantic-consolidation-ByBXb-sf.d.ts +0 -180
- package/dist/state-store-3EH7HYIN.js +0 -16
- package/dist/types-V3FJ26TF.js +0 -30
- /package/dist/{capsule-crypto-SJS5VVAP.js.map → adapters/claude-code.js.map} +0 -0
- /package/dist/{capsule-export-7QNCBZOQ.js.map → adapters/codex.js.map} +0 -0
- /package/dist/{capsule-import-EPBHD2EN.js.map → adapters/hermes.js.map} +0 -0
- /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/index.js.map} +0 -0
- /package/dist/{engine-35M5BKQ7.js.map → adapters/registry.js.map} +0 -0
- /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/replit.js.map} +0 -0
- /package/dist/{memory-governance-IMPQZXFC.js.map → adapters/types.js.map} +0 -0
- /package/dist/{path-RMTY5Y5A.js.map → capsule-crypto-5CYAGVC5.js.map} +0 -0
- /package/dist/{capsule-merge-DI7PNQ2H.js.map → capsule-merge-4MGKE7C5.js.map} +0 -0
- /package/dist/{chunk-G4SK7DSQ.js.map → chunk-2WWLHTZY.js.map} +0 -0
- /package/dist/{chunk-X7HPGUVG.js.map → chunk-4CRG46BG.js.map} +0 -0
- /package/dist/{chunk-UVMUAWVT.js.map → chunk-7IASACLB.js.map} +0 -0
- /package/dist/{chunk-HELQZFZO.js.map → chunk-EDTHC6UD.js.map} +0 -0
- /package/dist/{chunk-4YM32CRU.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
- /package/dist/{chunk-E2UCDP5S.js.map → chunk-FBYESMQ2.js.map} +0 -0
- /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
- /package/dist/{chunk-IB3BFHGN.js.map → chunk-GGKRUQOO.js.map} +0 -0
- /package/dist/{chunk-242S3I2A.js.map → chunk-GL6I6MEQ.js.map} +0 -0
- /package/dist/{secure-store-4R2GSO7S.js.map → chunk-HHLLAQGZ.js.map} +0 -0
- /package/dist/{chunk-4IS4SXIQ.js.map → chunk-HXXBL2KD.js.map} +0 -0
- /package/dist/{chunk-767ODGE6.js.map → chunk-KNKUID7G.js.map} +0 -0
- /package/dist/{chunk-6TBWYBJ3.js.map → chunk-LPMVBPA3.js.map} +0 -0
- /package/dist/{chunk-WEJG4TB5.js.map → chunk-MC26UJIM.js.map} +0 -0
- /package/dist/{chunk-JKDVIE52.js.map → chunk-MGKYQQYF.js.map} +0 -0
- /package/dist/{chunk-Y3VMVTYX.js.map → chunk-MT4HVDUZ.js.map} +0 -0
- /package/dist/{chunk-G2WADRQ3.js.map → chunk-MY6TPVXW.js.map} +0 -0
- /package/dist/{chunk-OR64ZGRZ.js.map → chunk-NNVTUXEB.js.map} +0 -0
- /package/dist/{chunk-JESOB2HO.js.map → chunk-P4NEIHUT.js.map} +0 -0
- /package/dist/{chunk-IXEJRKCZ.js.map → chunk-QRNI5JBH.js.map} +0 -0
- /package/dist/{chunk-EEQLFRUM.js.map → chunk-RRF5UOBJ.js.map} +0 -0
- /package/dist/{state-store-3EH7HYIN.js.map → chunk-SEDEKFYQ.js.map} +0 -0
- /package/dist/{chunk-2LGMW3DJ.js.map → chunk-U3PN77QT.js.map} +0 -0
- /package/dist/{chunk-XMVFHBHT.js.map → chunk-U3WSW6PZ.js.map} +0 -0
- /package/dist/{chunk-N5AKDXAI.js.map → chunk-UWVJF25J.js.map} +0 -0
- /package/dist/{types-V3FJ26TF.js.map → chunk-V5OCT34X.js.map} +0 -0
- /package/dist/{chunk-ZG7PTKBK.js.map → chunk-W3LR522O.js.map} +0 -0
- /package/dist/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
- /package/dist/{chunk-ZNQN6ZTA.js.map → chunk-XVZ7B3HG.js.map} +0 -0
- /package/dist/{graph-edge-decay-PWB63GRE.js.map → graph-edge-decay-5DI5GUNL.js.map} +0 -0
|
@@ -0,0 +1,823 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph-based retrieval types (issue #559, PR 1 of 5).
|
|
3
|
+
*
|
|
4
|
+
* This module defines the forward-looking type contract for Remnic's
|
|
5
|
+
* first-class retrieval graph (GAAMA / GAM inspired). It ships types
|
|
6
|
+
* and a no-op `queryGraph()` stub only — no behavior, no I/O, and
|
|
7
|
+
* no importers inside the codebase yet.
|
|
8
|
+
*
|
|
9
|
+
* Subsequent slices will land:
|
|
10
|
+
* - PR 2: Edge extraction from existing relationship facts + cross-memory
|
|
11
|
+
* entity references during indexing (writes `~/.remnic/graph.json`).
|
|
12
|
+
* - PR 3: Pure `personalizedPageRank()` implementation.
|
|
13
|
+
* - PR 4: Feature-flagged wiring into `retrieval.ts` behind
|
|
14
|
+
* `graphRetrievalEnabled` (default `false`).
|
|
15
|
+
* - PR 5: LoCoMo A/B bench harness + default flip decision.
|
|
16
|
+
*
|
|
17
|
+
* Keeping the node/edge type enums complete from PR 1 avoids type churn
|
|
18
|
+
* when later slices add reflection/concept node synthesis or additional
|
|
19
|
+
* edge semantics.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Node & edge type enums
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Kinds of nodes the retrieval graph can hold.
|
|
28
|
+
*
|
|
29
|
+
* - `memory`: a stored memory file (the primary retrieval target).
|
|
30
|
+
* - `entity`: a named entity referenced by one or more memories.
|
|
31
|
+
* - `episode`: a temporally-bounded interaction or session grouping.
|
|
32
|
+
* - `concept`: an abstract topic / idea (forward-looking; synthesis
|
|
33
|
+
* is out of scope for this issue, but the type is
|
|
34
|
+
* defined here to keep later slices additive).
|
|
35
|
+
* - `reflection`: an LLM-generated summary / meta-memory about other
|
|
36
|
+
* nodes (also forward-looking, same rationale).
|
|
37
|
+
*/
|
|
38
|
+
export type NodeType =
|
|
39
|
+
| "memory"
|
|
40
|
+
| "entity"
|
|
41
|
+
| "episode"
|
|
42
|
+
| "concept"
|
|
43
|
+
| "reflection";
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Kinds of edges the retrieval graph can hold.
|
|
47
|
+
*
|
|
48
|
+
* Edges are directed. `from` → `to` semantics:
|
|
49
|
+
*
|
|
50
|
+
* - `references`: `from` contains an explicit reference to `to`
|
|
51
|
+
* (e.g., a memory referencing another memory).
|
|
52
|
+
* - `supersedes`: `from` supersedes `to` (newer memory replaces older).
|
|
53
|
+
* - `authored-by`: `from` was authored by the entity in `to`.
|
|
54
|
+
* - `mentions`: `from` mentions the entity/concept in `to` without
|
|
55
|
+
* a stronger relationship claim.
|
|
56
|
+
* - `derived-from`: `from` was derived from `to` (reflections,
|
|
57
|
+
* consolidations, summaries).
|
|
58
|
+
* - `temporal-next`: `from` immediately follows `to` in time (episodes).
|
|
59
|
+
* - `related-to`: generic weak relationship fallback for edges that
|
|
60
|
+
* do not fit a stronger type.
|
|
61
|
+
*/
|
|
62
|
+
export type EdgeType =
|
|
63
|
+
| "references"
|
|
64
|
+
| "supersedes"
|
|
65
|
+
| "authored-by"
|
|
66
|
+
| "mentions"
|
|
67
|
+
| "derived-from"
|
|
68
|
+
| "temporal-next"
|
|
69
|
+
| "related-to";
|
|
70
|
+
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Graph element shapes
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A single node in the retrieval graph.
|
|
77
|
+
*
|
|
78
|
+
* `id` is the caller-controlled stable identifier (typically a memory
|
|
79
|
+
* file path, entity slug, or episode id). `weight` is an optional prior
|
|
80
|
+
* importance score used as a starting bias during Personalized PageRank;
|
|
81
|
+
* it is intentionally optional because most nodes default to uniform
|
|
82
|
+
* priors.
|
|
83
|
+
*
|
|
84
|
+
* Named `RemnicGraphNode` (not `GraphNode`) to avoid colliding with the
|
|
85
|
+
* unrelated `GraphEdge` in `graph.ts`, which models Multi-Graph Memory
|
|
86
|
+
* (MAGMA/SYNAPSE) edges and is an incompatible shape.
|
|
87
|
+
*/
|
|
88
|
+
export interface RemnicGraphNode {
|
|
89
|
+
id: string;
|
|
90
|
+
type: NodeType;
|
|
91
|
+
weight?: number;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* A directed edge between two nodes.
|
|
96
|
+
*
|
|
97
|
+
* `weight` is optional; when absent PPR implementations should treat
|
|
98
|
+
* the edge as weight `1`. We keep weight optional rather than defaulting
|
|
99
|
+
* at construction so producers can serialize a minimal edge shape.
|
|
100
|
+
*
|
|
101
|
+
* Named `RemnicGraphEdge` (not `GraphEdge`) to avoid colliding with the
|
|
102
|
+
* unrelated `GraphEdge` in `graph.ts` (Multi-Graph Memory).
|
|
103
|
+
*/
|
|
104
|
+
export interface RemnicGraphEdge {
|
|
105
|
+
from: string;
|
|
106
|
+
to: string;
|
|
107
|
+
type: EdgeType;
|
|
108
|
+
weight?: number;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The retrieval graph itself.
|
|
113
|
+
*
|
|
114
|
+
* Nodes are held in a `Map<string, RemnicGraphNode>` keyed by `id` so
|
|
115
|
+
* PPR lookups are O(1). Edges are kept as a flat array; adjacency
|
|
116
|
+
* indexing is a PR-3 concern (PPR will likely build a transient
|
|
117
|
+
* outgoing-adjacency map on demand).
|
|
118
|
+
*/
|
|
119
|
+
export interface RemnicGraph {
|
|
120
|
+
nodes: Map<string, RemnicGraphNode>;
|
|
121
|
+
edges: RemnicGraphEdge[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Query surface (stub)
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Options for `queryGraph()`.
|
|
130
|
+
*
|
|
131
|
+
* Defaults (applied when undefined):
|
|
132
|
+
* - `damping`: 0.85 (standard PageRank value — higher values make the
|
|
133
|
+
* random walk follow edges longer before teleporting back
|
|
134
|
+
* to the seed distribution).
|
|
135
|
+
* - `iterations`: 20 (power-iteration cap).
|
|
136
|
+
* - `tolerance`: 1e-6 (L1 convergence threshold; iteration stops early
|
|
137
|
+
* when the L1 norm of the delta between successive
|
|
138
|
+
* rank vectors falls below this).
|
|
139
|
+
* - `topK`: unbounded — all nodes with positive score are returned,
|
|
140
|
+
* ordered by descending score.
|
|
141
|
+
*/
|
|
142
|
+
export interface QueryGraphOptions {
|
|
143
|
+
/** Number of top-ranked nodes to return. Defaults to unbounded. */
|
|
144
|
+
topK?: number;
|
|
145
|
+
/**
|
|
146
|
+
* PPR damping factor in (0, 1). The probability of following an outgoing
|
|
147
|
+
* edge at each step (vs. teleporting back to the seed distribution).
|
|
148
|
+
* Defaults to 0.85.
|
|
149
|
+
*/
|
|
150
|
+
damping?: number;
|
|
151
|
+
/** Maximum PPR iterations before falling back to current rank vector. */
|
|
152
|
+
iterations?: number;
|
|
153
|
+
/** L1 convergence threshold. Defaults to 1e-6. */
|
|
154
|
+
tolerance?: number;
|
|
155
|
+
/**
|
|
156
|
+
* Optional per-seed weights. Keys must appear in `seedIds` or (if empty)
|
|
157
|
+
* in the graph. Values must be non-negative. Weights are normalized so
|
|
158
|
+
* they sum to 1 before seeding. If omitted, seed mass is distributed
|
|
159
|
+
* uniformly across `seedIds`.
|
|
160
|
+
*/
|
|
161
|
+
seedWeights?: ReadonlyMap<string, number> | Readonly<Record<string, number>>;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* A scored node returned by `queryGraph()`.
|
|
166
|
+
*/
|
|
167
|
+
export interface RankedGraphNode {
|
|
168
|
+
id: string;
|
|
169
|
+
score: number;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The shape returned by `queryGraph()`.
|
|
174
|
+
*/
|
|
175
|
+
export interface QueryGraphResult {
|
|
176
|
+
rankedNodes: RankedGraphNode[];
|
|
177
|
+
/** Number of power-iteration rounds actually executed. */
|
|
178
|
+
iterations: number;
|
|
179
|
+
/** L1 delta at the last iteration. */
|
|
180
|
+
converged: boolean;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** PPR damping factor default. */
|
|
184
|
+
export const DEFAULT_PPR_DAMPING = 0.85;
|
|
185
|
+
/** Power-iteration cap default. */
|
|
186
|
+
export const DEFAULT_PPR_ITERATIONS = 20;
|
|
187
|
+
/** L1 convergence threshold default. */
|
|
188
|
+
export const DEFAULT_PPR_TOLERANCE = 1e-6;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Normalize a `seedWeights` option (Map or plain object) to a plain Map.
|
|
192
|
+
* Silently drops non-finite / negative / non-numeric values. Returns an
|
|
193
|
+
* empty map if the input is undefined.
|
|
194
|
+
*/
|
|
195
|
+
function normalizeSeedWeights(
|
|
196
|
+
input: QueryGraphOptions["seedWeights"],
|
|
197
|
+
): Map<string, number> {
|
|
198
|
+
const out = new Map<string, number>();
|
|
199
|
+
if (!input) return out;
|
|
200
|
+
const entries: Iterable<[string, unknown]> =
|
|
201
|
+
input instanceof Map
|
|
202
|
+
? input.entries()
|
|
203
|
+
: Object.entries(input as Record<string, unknown>);
|
|
204
|
+
for (const [k, v] of entries) {
|
|
205
|
+
if (typeof k !== "string" || !k) continue;
|
|
206
|
+
if (typeof v !== "number" || !Number.isFinite(v) || v < 0) continue;
|
|
207
|
+
out.set(k, v);
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Build the seed probability vector.
|
|
214
|
+
*
|
|
215
|
+
* Strategy:
|
|
216
|
+
* 1. If the caller supplied `seedWeights`, restrict to keys present in
|
|
217
|
+
* the graph, sum, and normalize.
|
|
218
|
+
* 2. Otherwise, take the subset of `seedIds` present in the graph and
|
|
219
|
+
* assign each an equal 1/n share.
|
|
220
|
+
* 3. If neither produces any in-graph mass, fall back to a uniform
|
|
221
|
+
* distribution over all graph nodes (matches standard PageRank).
|
|
222
|
+
*/
|
|
223
|
+
function buildSeedVector(
|
|
224
|
+
graph: RemnicGraph,
|
|
225
|
+
seedIds: readonly string[],
|
|
226
|
+
options: QueryGraphOptions,
|
|
227
|
+
): Map<string, number> {
|
|
228
|
+
const seed = new Map<string, number>();
|
|
229
|
+
|
|
230
|
+
const explicitWeights = normalizeSeedWeights(options.seedWeights);
|
|
231
|
+
if (explicitWeights.size > 0) {
|
|
232
|
+
// Restrict weight keys to the declared seed set (or, if empty, to
|
|
233
|
+
// graph nodes). Documented contract in `QueryGraphOptions.seedWeights`:
|
|
234
|
+
// keys must appear in `seedIds` — unrelated / stale weight entries
|
|
235
|
+
// must not silently override the requested personalization.
|
|
236
|
+
const allowedKeys =
|
|
237
|
+
seedIds.length > 0
|
|
238
|
+
? new Set(seedIds.filter((id) => typeof id === "string"))
|
|
239
|
+
: null;
|
|
240
|
+
let total = 0;
|
|
241
|
+
for (const [id, w] of explicitWeights) {
|
|
242
|
+
if (!graph.nodes.has(id)) continue;
|
|
243
|
+
if (allowedKeys !== null && !allowedKeys.has(id)) continue;
|
|
244
|
+
seed.set(id, (seed.get(id) ?? 0) + w);
|
|
245
|
+
total += w;
|
|
246
|
+
}
|
|
247
|
+
if (total > 0) {
|
|
248
|
+
for (const [id, v] of seed) seed.set(id, v / total);
|
|
249
|
+
return seed;
|
|
250
|
+
}
|
|
251
|
+
seed.clear();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Deduplicate before computing shares — `["a", "a", "b"]` must behave
|
|
255
|
+
// identically to `["a", "b"]`. Computing `share` against a de-duped set
|
|
256
|
+
// is the only way to guarantee that; renormalizing after the fact is
|
|
257
|
+
// a no-op because the pre-dedup shares already sum to 1.
|
|
258
|
+
const validSeeds = new Set<string>();
|
|
259
|
+
for (const id of seedIds) {
|
|
260
|
+
if (typeof id === "string" && graph.nodes.has(id)) validSeeds.add(id);
|
|
261
|
+
}
|
|
262
|
+
if (validSeeds.size > 0) {
|
|
263
|
+
const share = 1 / validSeeds.size;
|
|
264
|
+
for (const id of validSeeds) seed.set(id, share);
|
|
265
|
+
return seed;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Uniform fallback over all graph nodes.
|
|
269
|
+
if (graph.nodes.size > 0) {
|
|
270
|
+
const share = 1 / graph.nodes.size;
|
|
271
|
+
for (const id of graph.nodes.keys()) seed.set(id, share);
|
|
272
|
+
}
|
|
273
|
+
return seed;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Build an out-adjacency index with summed outgoing edge weights per source.
|
|
278
|
+
*
|
|
279
|
+
* Missing `weight` on an edge defaults to `1`. Edges referencing nodes that
|
|
280
|
+
* are not in `graph.nodes` are skipped (dangling edges cannot propagate
|
|
281
|
+
* mass). The returned `outSum` map lets the PPR loop divide once per source
|
|
282
|
+
* instead of re-summing per iteration.
|
|
283
|
+
*/
|
|
284
|
+
function buildAdjacency(graph: RemnicGraph): {
|
|
285
|
+
outgoing: Map<string, { to: string; weight: number }[]>;
|
|
286
|
+
outSum: Map<string, number>;
|
|
287
|
+
} {
|
|
288
|
+
const outgoing = new Map<string, { to: string; weight: number }[]>();
|
|
289
|
+
const outSum = new Map<string, number>();
|
|
290
|
+
for (const edge of graph.edges) {
|
|
291
|
+
if (!edge || typeof edge.from !== "string" || typeof edge.to !== "string") continue;
|
|
292
|
+
if (!graph.nodes.has(edge.from) || !graph.nodes.has(edge.to)) continue;
|
|
293
|
+
const weight =
|
|
294
|
+
typeof edge.weight === "number" && Number.isFinite(edge.weight) && edge.weight > 0
|
|
295
|
+
? edge.weight
|
|
296
|
+
: 1;
|
|
297
|
+
let bucket = outgoing.get(edge.from);
|
|
298
|
+
if (!bucket) {
|
|
299
|
+
bucket = [];
|
|
300
|
+
outgoing.set(edge.from, bucket);
|
|
301
|
+
}
|
|
302
|
+
bucket.push({ to: edge.to, weight });
|
|
303
|
+
outSum.set(edge.from, (outSum.get(edge.from) ?? 0) + weight);
|
|
304
|
+
}
|
|
305
|
+
return { outgoing, outSum };
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Personalized PageRank via power iteration.
|
|
310
|
+
*
|
|
311
|
+
* Pure function — no I/O. Deterministic given the same graph and options.
|
|
312
|
+
*
|
|
313
|
+
* Algorithm:
|
|
314
|
+
*
|
|
315
|
+
* r_{t+1}(v) = (1 - d) * s(v)
|
|
316
|
+
* + d * Σ_{u → v} r_t(u) * w(u,v) / Σ_w w(u,·)
|
|
317
|
+
* + d * (dangling mass) * s(v)
|
|
318
|
+
*
|
|
319
|
+
* where:
|
|
320
|
+
* - `d` is the damping factor (default 0.85).
|
|
321
|
+
* - `s` is the seed vector (normalized personalization distribution).
|
|
322
|
+
* - dangling mass is the total rank on nodes with no outgoing edges,
|
|
323
|
+
* redistributed over the seed vector so probability mass is conserved.
|
|
324
|
+
*
|
|
325
|
+
* The loop stops early when `|r_{t+1} - r_t|_1 < tolerance` or after
|
|
326
|
+
* `iterations` rounds, whichever comes first.
|
|
327
|
+
*
|
|
328
|
+
* Edge cases:
|
|
329
|
+
* - Empty graph → `{ rankedNodes: [], iterations: 0, converged: true }`.
|
|
330
|
+
* - Seed ids that are not in the graph are silently dropped.
|
|
331
|
+
* - If no in-graph seed mass remains (empty seed or all seeds missing),
|
|
332
|
+
* the uniform distribution over graph nodes is used — matching
|
|
333
|
+
* standard PageRank semantics.
|
|
334
|
+
* - `damping` is clamped to `[0, 1)` (a damping of exactly 1 would make
|
|
335
|
+
* the chain non-ergodic; damping of exactly 0 reduces to the seed
|
|
336
|
+
* distribution).
|
|
337
|
+
* - `topK <= 0` returns an empty ranked list (but the `iterations` and
|
|
338
|
+
* `converged` fields still reflect the actual computation).
|
|
339
|
+
*/
|
|
340
|
+
export function queryGraph(
|
|
341
|
+
graph: RemnicGraph,
|
|
342
|
+
seedIds: readonly string[],
|
|
343
|
+
options: QueryGraphOptions = {},
|
|
344
|
+
): QueryGraphResult {
|
|
345
|
+
const n = graph.nodes.size;
|
|
346
|
+
if (n === 0) {
|
|
347
|
+
return { rankedNodes: [], iterations: 0, converged: true };
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Clamp options.
|
|
351
|
+
let damping = typeof options.damping === "number" ? options.damping : DEFAULT_PPR_DAMPING;
|
|
352
|
+
if (!Number.isFinite(damping) || damping < 0) damping = 0;
|
|
353
|
+
if (damping >= 1) damping = 1 - 1e-9;
|
|
354
|
+
|
|
355
|
+
let maxIter = typeof options.iterations === "number" ? Math.floor(options.iterations) : DEFAULT_PPR_ITERATIONS;
|
|
356
|
+
if (!Number.isFinite(maxIter) || maxIter < 0) maxIter = 0;
|
|
357
|
+
|
|
358
|
+
let tolerance = typeof options.tolerance === "number" ? options.tolerance : DEFAULT_PPR_TOLERANCE;
|
|
359
|
+
if (!Number.isFinite(tolerance) || tolerance < 0) tolerance = 0;
|
|
360
|
+
|
|
361
|
+
const seed = buildSeedVector(graph, seedIds, options);
|
|
362
|
+
|
|
363
|
+
// Apply `RemnicGraphNode.weight` as a starting-rank prior — BUT only
|
|
364
|
+
// when the caller did not supply explicit `seedWeights`. Explicit
|
|
365
|
+
// caller-supplied weights must not be silently re-biased by node
|
|
366
|
+
// priors (would double-count and contradict the documented contract
|
|
367
|
+
// for `seedWeights`). When no explicit weights are given, multiply
|
|
368
|
+
// each seed entry by its node weight (defaulting missing / non-
|
|
369
|
+
// positive / non-finite weights to 1) and renormalize.
|
|
370
|
+
const hasExplicitWeights =
|
|
371
|
+
options.seedWeights !== undefined && options.seedWeights !== null;
|
|
372
|
+
if (!hasExplicitWeights) {
|
|
373
|
+
let priorTotal = 0;
|
|
374
|
+
for (const [id, s] of seed) {
|
|
375
|
+
const node = graph.nodes.get(id);
|
|
376
|
+
const w =
|
|
377
|
+
node !== undefined &&
|
|
378
|
+
typeof node.weight === "number" &&
|
|
379
|
+
Number.isFinite(node.weight) &&
|
|
380
|
+
node.weight > 0
|
|
381
|
+
? node.weight
|
|
382
|
+
: 1;
|
|
383
|
+
const biased = s * w;
|
|
384
|
+
seed.set(id, biased);
|
|
385
|
+
priorTotal += biased;
|
|
386
|
+
}
|
|
387
|
+
if (priorTotal > 0) {
|
|
388
|
+
for (const [id, s] of seed) seed.set(id, s / priorTotal);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
const { outgoing, outSum } = buildAdjacency(graph);
|
|
393
|
+
|
|
394
|
+
// Initialize rank vector = seed.
|
|
395
|
+
let rank = new Map<string, number>();
|
|
396
|
+
for (const id of graph.nodes.keys()) rank.set(id, seed.get(id) ?? 0);
|
|
397
|
+
// If the seed vector is empty (e.g. graph has no nodes matching seeds
|
|
398
|
+
// AND the uniform fallback was somehow empty — shouldn't happen when
|
|
399
|
+
// n > 0, but defensively): return empty ranking.
|
|
400
|
+
let seedTotal = 0;
|
|
401
|
+
for (const v of seed.values()) seedTotal += v;
|
|
402
|
+
if (seedTotal === 0) {
|
|
403
|
+
return { rankedNodes: [], iterations: 0, converged: true };
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
let converged = false;
|
|
407
|
+
let iter = 0;
|
|
408
|
+
for (; iter < maxIter; iter++) {
|
|
409
|
+
const next = new Map<string, number>();
|
|
410
|
+
|
|
411
|
+
// Sum of rank on dangling nodes (no outgoing edges) — redistribute
|
|
412
|
+
// proportional to the seed vector to conserve probability mass.
|
|
413
|
+
let danglingMass = 0;
|
|
414
|
+
for (const [id, r] of rank) {
|
|
415
|
+
if ((outSum.get(id) ?? 0) === 0) danglingMass += r;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Teleport contribution: (1 - d) * s(v) + d * danglingMass * s(v).
|
|
419
|
+
const teleportScale = 1 - damping + damping * danglingMass;
|
|
420
|
+
for (const [id, s] of seed) {
|
|
421
|
+
next.set(id, (next.get(id) ?? 0) + teleportScale * s);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Edge contribution: d * r(u) * w(u,v) / Σ w(u,·).
|
|
425
|
+
for (const [from, edges] of outgoing) {
|
|
426
|
+
const r = rank.get(from) ?? 0;
|
|
427
|
+
if (r === 0) continue;
|
|
428
|
+
const total = outSum.get(from) ?? 0;
|
|
429
|
+
if (total === 0) continue;
|
|
430
|
+
const share = (damping * r) / total;
|
|
431
|
+
for (const { to, weight } of edges) {
|
|
432
|
+
next.set(to, (next.get(to) ?? 0) + share * weight);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Compute L1 delta.
|
|
437
|
+
let delta = 0;
|
|
438
|
+
for (const id of graph.nodes.keys()) {
|
|
439
|
+
delta += Math.abs((next.get(id) ?? 0) - (rank.get(id) ?? 0));
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
rank = next;
|
|
443
|
+
if (delta < tolerance) {
|
|
444
|
+
converged = true;
|
|
445
|
+
iter += 1; // record that this iteration completed
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Rank and trim.
|
|
451
|
+
const ranked: RankedGraphNode[] = [];
|
|
452
|
+
for (const [id, score] of rank) {
|
|
453
|
+
if (score > 0) ranked.push({ id, score });
|
|
454
|
+
}
|
|
455
|
+
// Sort by descending score, ties broken by id for determinism.
|
|
456
|
+
ranked.sort((a, b) => {
|
|
457
|
+
if (b.score !== a.score) return b.score - a.score;
|
|
458
|
+
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
const topK = options.topK;
|
|
462
|
+
let trimmed: RankedGraphNode[];
|
|
463
|
+
if (typeof topK === "number") {
|
|
464
|
+
if (topK <= 0) {
|
|
465
|
+
trimmed = [];
|
|
466
|
+
} else if (topK < ranked.length) {
|
|
467
|
+
trimmed = ranked.slice(0, topK);
|
|
468
|
+
} else {
|
|
469
|
+
trimmed = ranked;
|
|
470
|
+
}
|
|
471
|
+
} else {
|
|
472
|
+
trimmed = ranked;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return { rankedNodes: trimmed, iterations: iter, converged };
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// ---------------------------------------------------------------------------
|
|
479
|
+
// Type guards (useful for defensive construction from untyped JSON)
|
|
480
|
+
// ---------------------------------------------------------------------------
|
|
481
|
+
|
|
482
|
+
const NODE_TYPES: ReadonlySet<NodeType> = new Set<NodeType>([
|
|
483
|
+
"memory",
|
|
484
|
+
"entity",
|
|
485
|
+
"episode",
|
|
486
|
+
"concept",
|
|
487
|
+
"reflection",
|
|
488
|
+
]);
|
|
489
|
+
|
|
490
|
+
const EDGE_TYPES: ReadonlySet<EdgeType> = new Set<EdgeType>([
|
|
491
|
+
"references",
|
|
492
|
+
"supersedes",
|
|
493
|
+
"authored-by",
|
|
494
|
+
"mentions",
|
|
495
|
+
"derived-from",
|
|
496
|
+
"temporal-next",
|
|
497
|
+
"related-to",
|
|
498
|
+
]);
|
|
499
|
+
|
|
500
|
+
/** Returns true iff `value` is a valid `NodeType`. */
|
|
501
|
+
export function isNodeType(value: unknown): value is NodeType {
|
|
502
|
+
return typeof value === "string" && NODE_TYPES.has(value as NodeType);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/** Returns true iff `value` is a valid `EdgeType`. */
|
|
506
|
+
export function isEdgeType(value: unknown): value is EdgeType {
|
|
507
|
+
return typeof value === "string" && EDGE_TYPES.has(value as EdgeType);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// ---------------------------------------------------------------------------
|
|
511
|
+
// Edge extraction (issue #559, PR 2 of 5)
|
|
512
|
+
// ---------------------------------------------------------------------------
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Minimum fields the edge extractor reads from a memory record. Structural
|
|
516
|
+
* typing is used so callers can pass any subset of `MemoryFrontmatter`
|
|
517
|
+
* (including richer loaded memories) without a cast.
|
|
518
|
+
*
|
|
519
|
+
* All reference fields are optional — memories written before earlier slices
|
|
520
|
+
* landed will simply contribute no edges for those dimensions.
|
|
521
|
+
*/
|
|
522
|
+
export interface MemoryEdgeSource {
|
|
523
|
+
/** Stable identifier for the memory (typically the file path). */
|
|
524
|
+
id: string;
|
|
525
|
+
/** Older memory id this memory supersedes (1:1). */
|
|
526
|
+
supersedes?: string;
|
|
527
|
+
/** Parent memory ids this memory was derived from (lineage). */
|
|
528
|
+
lineage?: string[];
|
|
529
|
+
/**
|
|
530
|
+
* Consolidation provenance — `"<memory-id>:<version-number>"` strings.
|
|
531
|
+
* The memory-id portion before the last `:` is used as the edge target.
|
|
532
|
+
*/
|
|
533
|
+
derived_from?: string[];
|
|
534
|
+
/** Primary entity reference on the memory (e.g. `person:Jane Doe`). */
|
|
535
|
+
entityRef?: string;
|
|
536
|
+
/** Additional entity references (used by episodes and ledger records). */
|
|
537
|
+
entityRefs?: string[];
|
|
538
|
+
/** Raw memory body — scanned for inline `[Source: ...]` citation blocks. */
|
|
539
|
+
content?: string;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/** Options controlling edge extraction. */
|
|
543
|
+
export interface ExtractGraphEdgesOptions {
|
|
544
|
+
/**
|
|
545
|
+
* When true, include edges whose `to` endpoint is not present in the
|
|
546
|
+
* provided node index. Defaults to `false` — dangling edges are silently
|
|
547
|
+
* skipped because PPR cannot propagate mass through a missing node.
|
|
548
|
+
*/
|
|
549
|
+
includeDanglingEdges?: boolean;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Regex that matches the `[Source: ...]` citation block emitted by
|
|
554
|
+
* `source-attribution.ts`. Kept local (rather than importing) because the
|
|
555
|
+
* extractor intentionally has no dependency on the citation module's mutable
|
|
556
|
+
* template configuration — it only recognizes the default shape plus minor
|
|
557
|
+
* whitespace / ordering variants.
|
|
558
|
+
*/
|
|
559
|
+
// Non-greedy quantifiers on classes like `[^\]\n]+?` can be polynomial on
|
|
560
|
+
// pathological inputs (CodeQL rule js/polynomial-redos). Using a greedy
|
|
561
|
+
// quantifier with a negated character class that also excludes `[` prevents
|
|
562
|
+
// nested-bracket inputs from forcing catastrophic backtracking, and the `\s*`
|
|
563
|
+
// after `Source:` is bounded by the terminal `]`.
|
|
564
|
+
const CITATION_REGEX = /\[Source:([^\]\n[]+)\]/gi;
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Parse `key=value` pairs out of a citation body. Whitespace-tolerant and
|
|
568
|
+
* case-insensitive: keys are normalized to lowercase so callers can do
|
|
569
|
+
* `fields.agent` without worrying about `[Source: Agent=...]` variants.
|
|
570
|
+
*/
|
|
571
|
+
function parseCitationFields(body: string): Record<string, string> {
|
|
572
|
+
const out: Record<string, string> = {};
|
|
573
|
+
for (const rawPart of body.split(",")) {
|
|
574
|
+
const part = rawPart.trim();
|
|
575
|
+
if (!part) continue;
|
|
576
|
+
const eq = part.indexOf("=");
|
|
577
|
+
if (eq <= 0) continue;
|
|
578
|
+
const key = part.slice(0, eq).trim().toLowerCase();
|
|
579
|
+
const value = part.slice(eq + 1).trim();
|
|
580
|
+
if (key && value) out[key] = value;
|
|
581
|
+
}
|
|
582
|
+
return out;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Strip the trailing `:<version>` from a `derived_from` entry. Returns the
|
|
587
|
+
* original string if no colon is present. We intentionally use `lastIndexOf`
|
|
588
|
+
* because memory ids may themselves contain colons (e.g. entity-prefixed
|
|
589
|
+
* ids), but the version suffix — when present — is always the final
|
|
590
|
+
* `:<digits>` segment.
|
|
591
|
+
*/
|
|
592
|
+
function stripDerivedFromVersion(ref: string): string {
|
|
593
|
+
const colon = ref.lastIndexOf(":");
|
|
594
|
+
if (colon < 0) return ref;
|
|
595
|
+
const tail = ref.slice(colon + 1);
|
|
596
|
+
if (tail.length === 0) return ref.slice(0, colon);
|
|
597
|
+
// Only strip when the tail is purely numeric; otherwise keep the full ref.
|
|
598
|
+
if (/^\d+$/.test(tail)) return ref.slice(0, colon);
|
|
599
|
+
return ref;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Extract retrieval-graph edges from a collection of memories.
|
|
604
|
+
*
|
|
605
|
+
* Pure function — no I/O, no config access, no time-based side effects.
|
|
606
|
+
* Given the same inputs, always produces the same edges in the same order
|
|
607
|
+
* so dedup downstream is deterministic.
|
|
608
|
+
*
|
|
609
|
+
* Source → target semantics by edge type:
|
|
610
|
+
*
|
|
611
|
+
* - `supersedes`: memory → older memory (from `supersedes` field).
|
|
612
|
+
* - `derived-from`: memory → each parent in `lineage` OR `derived_from`.
|
|
613
|
+
* - `mentions`: memory → each entity in `entityRef` / `entityRefs`.
|
|
614
|
+
* - `authored-by`: memory → agent id parsed from inline `[Source: ...]`.
|
|
615
|
+
*
|
|
616
|
+
* `temporal-next`, `references`, `related-to`, and `concept` / `reflection`
|
|
617
|
+
* node synthesis are deferred to later slices — they require either episode
|
|
618
|
+
* sequencing or an abstraction synthesis pass that is out of scope for PR 2.
|
|
619
|
+
*
|
|
620
|
+
* @param memories Memories to scan. Order is preserved; duplicates are
|
|
621
|
+
* not deduped (the caller controls the input set).
|
|
622
|
+
* @param options Extraction knobs. See `ExtractGraphEdgesOptions`.
|
|
623
|
+
* @returns A `{ nodes, edges }` pair. `nodes` contains one
|
|
624
|
+
* `memory` node per input memory plus one `entity` node
|
|
625
|
+
* per distinct entity discovered across all mentions.
|
|
626
|
+
* Edges reference ids in the returned node map unless
|
|
627
|
+
* `includeDanglingEdges` is set.
|
|
628
|
+
*/
|
|
629
|
+
export function extractGraphEdges(
|
|
630
|
+
memories: readonly MemoryEdgeSource[],
|
|
631
|
+
options: ExtractGraphEdgesOptions = {},
|
|
632
|
+
): { nodes: Map<string, RemnicGraphNode>; edges: RemnicGraphEdge[] } {
|
|
633
|
+
const includeDangling = options.includeDanglingEdges === true;
|
|
634
|
+
|
|
635
|
+
const nodes = new Map<string, RemnicGraphNode>();
|
|
636
|
+
const edges: RemnicGraphEdge[] = [];
|
|
637
|
+
// Dedupe within this extraction pass. Key is `${from}\u0000${to}\u0000${type}`
|
|
638
|
+
// — using a NUL separator avoids collisions with ids that contain `|`.
|
|
639
|
+
const seenEdgeKeys = new Set<string>();
|
|
640
|
+
|
|
641
|
+
const addNode = (id: string, type: NodeType) => {
|
|
642
|
+
if (!nodes.has(id)) nodes.set(id, { id, type });
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
const addEdge = (from: string, to: string, type: EdgeType) => {
|
|
646
|
+
if (!from || !to || from === to) return;
|
|
647
|
+
const key = `${from}\u0000${to}\u0000${type}`;
|
|
648
|
+
if (seenEdgeKeys.has(key)) return;
|
|
649
|
+
seenEdgeKeys.add(key);
|
|
650
|
+
edges.push({ from, to, type });
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
// First pass — register every memory as a node so cross-references can
|
|
654
|
+
// resolve regardless of input ordering.
|
|
655
|
+
for (const memory of memories) {
|
|
656
|
+
if (!memory?.id) continue;
|
|
657
|
+
addNode(memory.id, "memory");
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Pre-scan every memory for entity / agent references so the
|
|
661
|
+
// memory-target guard can reject ids that are "claimed" by entity
|
|
662
|
+
// mentions in the same batch — regardless of iteration order.
|
|
663
|
+
// Without this, with `includeDanglingEdges: true`, processing
|
|
664
|
+
// `{supersedes: "shared"}` before `{entityRef: "shared"}` would
|
|
665
|
+
// materialize a memory node for "shared" and then the later entity
|
|
666
|
+
// mention would be silently dropped (and vice versa), producing
|
|
667
|
+
// order-dependent output.
|
|
668
|
+
const entityClaimed = new Set<string>();
|
|
669
|
+
for (const memory of memories) {
|
|
670
|
+
if (!memory?.id) continue;
|
|
671
|
+
// Do not mark the memory's own id as entity-claimed just because it
|
|
672
|
+
// carries an entityRef — the memory node takes precedence over its
|
|
673
|
+
// own mention (which is impossible anyway; the edge would be a
|
|
674
|
+
// self-loop and is dropped).
|
|
675
|
+
if (typeof memory.entityRef === "string" && memory.entityRef) {
|
|
676
|
+
if (memory.entityRef !== memory.id) entityClaimed.add(memory.entityRef);
|
|
677
|
+
}
|
|
678
|
+
if (Array.isArray(memory.entityRefs)) {
|
|
679
|
+
for (const ref of memory.entityRefs) {
|
|
680
|
+
if (typeof ref === "string" && ref && ref !== memory.id) {
|
|
681
|
+
entityClaimed.add(ref);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
if (typeof memory.content === "string" && memory.content.length > 0) {
|
|
686
|
+
CITATION_REGEX.lastIndex = 0;
|
|
687
|
+
let match: RegExpExecArray | null;
|
|
688
|
+
while ((match = CITATION_REGEX.exec(memory.content)) !== null) {
|
|
689
|
+
const body = match[1];
|
|
690
|
+
if (!body) continue;
|
|
691
|
+
const agent = parseCitationFields(body).agent;
|
|
692
|
+
if (!agent) continue;
|
|
693
|
+
const agentId = `agent:${agent}`;
|
|
694
|
+
if (agentId !== memory.id) entityClaimed.add(agentId);
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
// Ids claimed by both roles (memory + entity) stay memory — an
|
|
699
|
+
// explicit memory node with a given id always wins over an entity
|
|
700
|
+
// mention of the same id in a different memory. Drop any memory ids
|
|
701
|
+
// out of `entityClaimed` so the memory-target guard does not reject
|
|
702
|
+
// cross-memory supersedes / lineage references to them.
|
|
703
|
+
for (const memory of memories) {
|
|
704
|
+
if (memory?.id) entityClaimed.delete(memory.id);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// Second pass — walk each memory's relationship fields.
|
|
708
|
+
for (const memory of memories) {
|
|
709
|
+
if (!memory?.id) continue;
|
|
710
|
+
const from = memory.id;
|
|
711
|
+
|
|
712
|
+
// `supersedes`, `lineage`, and `derived_from` edges must point at a
|
|
713
|
+
// memory node specifically — never an entity / episode / concept /
|
|
714
|
+
// reflection node that happens to share an id. The guard applies
|
|
715
|
+
// regardless of `includeDanglingEdges`:
|
|
716
|
+
//
|
|
717
|
+
// - If the target is already registered under a non-memory type,
|
|
718
|
+
// reject the edge (type mismatch).
|
|
719
|
+
// - If the target will be claimed by an entity mention in this
|
|
720
|
+
// batch (pre-scan above), reject the edge.
|
|
721
|
+
// - If the target is not yet known and is not entity-claimed,
|
|
722
|
+
// accept only when `includeDanglingEdges` is `true`. A new
|
|
723
|
+
// memory node is registered for the dangling reference.
|
|
724
|
+
// - If the target is already registered as a memory, accept.
|
|
725
|
+
const canTargetMemory = (id: string): boolean => {
|
|
726
|
+
const existing = nodes.get(id);
|
|
727
|
+
if (existing !== undefined) return existing.type === "memory";
|
|
728
|
+
if (entityClaimed.has(id)) return false;
|
|
729
|
+
return includeDangling;
|
|
730
|
+
};
|
|
731
|
+
|
|
732
|
+
// supersedes: memory → older memory
|
|
733
|
+
if (typeof memory.supersedes === "string" && memory.supersedes) {
|
|
734
|
+
const to = memory.supersedes;
|
|
735
|
+
if (canTargetMemory(to)) {
|
|
736
|
+
if (!nodes.has(to)) addNode(to, "memory");
|
|
737
|
+
addEdge(from, to, "supersedes");
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// lineage: memory → each parent memory
|
|
742
|
+
if (Array.isArray(memory.lineage)) {
|
|
743
|
+
for (const parent of memory.lineage) {
|
|
744
|
+
if (typeof parent !== "string" || !parent) continue;
|
|
745
|
+
if (!canTargetMemory(parent)) continue;
|
|
746
|
+
if (!nodes.has(parent)) addNode(parent, "memory");
|
|
747
|
+
addEdge(from, parent, "derived-from");
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
// derived_from: memory → parent memory (strip `:<version>` suffix)
|
|
752
|
+
if (Array.isArray(memory.derived_from)) {
|
|
753
|
+
for (const raw of memory.derived_from) {
|
|
754
|
+
if (typeof raw !== "string" || !raw) continue;
|
|
755
|
+
const to = stripDerivedFromVersion(raw);
|
|
756
|
+
if (!to) continue;
|
|
757
|
+
if (!canTargetMemory(to)) continue;
|
|
758
|
+
if (!nodes.has(to)) addNode(to, "memory");
|
|
759
|
+
addEdge(from, to, "derived-from");
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
// entityRef / entityRefs: memory → entity. The target must either be
|
|
764
|
+
// absent (we register a new entity node) or already an entity node
|
|
765
|
+
// (no type conflict). If the id is already a memory node, drop the
|
|
766
|
+
// edge rather than mis-typing it — the extractor never mutates an
|
|
767
|
+
// existing node's type.
|
|
768
|
+
const entitySet = new Set<string>();
|
|
769
|
+
if (typeof memory.entityRef === "string" && memory.entityRef) {
|
|
770
|
+
entitySet.add(memory.entityRef);
|
|
771
|
+
}
|
|
772
|
+
if (Array.isArray(memory.entityRefs)) {
|
|
773
|
+
for (const ref of memory.entityRefs) {
|
|
774
|
+
if (typeof ref === "string" && ref) entitySet.add(ref);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
for (const ref of entitySet) {
|
|
778
|
+
const existing = nodes.get(ref);
|
|
779
|
+
if (existing !== undefined && existing.type !== "entity") continue;
|
|
780
|
+
if (!existing) addNode(ref, "entity");
|
|
781
|
+
addEdge(from, ref, "mentions");
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// Inline [Source: agent=..., ...] citations → authored-by edge.
|
|
785
|
+
// Same type-collision guard as the entity block above.
|
|
786
|
+
if (typeof memory.content === "string" && memory.content.length > 0) {
|
|
787
|
+
// Reset the regex's lastIndex on each memory since it is a global regex.
|
|
788
|
+
CITATION_REGEX.lastIndex = 0;
|
|
789
|
+
let match: RegExpExecArray | null;
|
|
790
|
+
while ((match = CITATION_REGEX.exec(memory.content)) !== null) {
|
|
791
|
+
const body = match[1];
|
|
792
|
+
if (!body) continue;
|
|
793
|
+
const fields = parseCitationFields(body);
|
|
794
|
+
const agent = fields.agent;
|
|
795
|
+
if (!agent) continue;
|
|
796
|
+
const agentId = `agent:${agent}`;
|
|
797
|
+
const existing = nodes.get(agentId);
|
|
798
|
+
if (existing !== undefined && existing.type !== "entity") continue;
|
|
799
|
+
if (!existing) addNode(agentId, "entity");
|
|
800
|
+
addEdge(from, agentId, "authored-by");
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
return { nodes, edges };
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Build a `RemnicGraph` from a collection of memories by delegating to
|
|
810
|
+
* `extractGraphEdges()`. Convenience wrapper so callers do not have to
|
|
811
|
+
* re-wrap the `{ nodes, edges }` pair into the `RemnicGraph` interface.
|
|
812
|
+
*
|
|
813
|
+
* Pure function — no I/O. Persisting the graph (e.g. writing
|
|
814
|
+
* `~/.remnic/graph.json`) is left to the caller; that decision belongs with
|
|
815
|
+
* the maintenance / consolidation pass in PR 4, not the extractor.
|
|
816
|
+
*/
|
|
817
|
+
export function buildGraphFromMemories(
|
|
818
|
+
memories: readonly MemoryEdgeSource[],
|
|
819
|
+
options: ExtractGraphEdgesOptions = {},
|
|
820
|
+
): RemnicGraph {
|
|
821
|
+
const { nodes, edges } = extractGraphEdges(memories, options);
|
|
822
|
+
return { nodes, edges };
|
|
823
|
+
}
|