@remnic/core 1.1.12 → 1.1.14
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 +258 -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,694 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Peer profile reasoner — issue #679 PR 2/5.
|
|
3
|
+
*
|
|
4
|
+
* Pure async function that, for each peer:
|
|
5
|
+
*
|
|
6
|
+
* 1. Reads recent interaction-log entries via `readPeerInteractionLog`.
|
|
7
|
+
* 2. Calls an injected LLM client (same chat shape as
|
|
8
|
+
* `FallbackLlmClient.chatCompletion`) to derive 0..N profile-field
|
|
9
|
+
* proposals with provenance `{observedAt, signal, sourceSessionId,
|
|
10
|
+
* note}`.
|
|
11
|
+
* 3. Merges the proposals into the peer's existing `PeerProfile`,
|
|
12
|
+
* appending provenance entries (never replacing existing
|
|
13
|
+
* provenance — the reasoner is additive by design so the operator
|
|
14
|
+
* retains the full audit trail).
|
|
15
|
+
* 4. Writes via `writePeerProfile`.
|
|
16
|
+
*
|
|
17
|
+
* Gating is handled in two layers:
|
|
18
|
+
*
|
|
19
|
+
* - The orchestrator wires the call behind the
|
|
20
|
+
* `peerProfileReasonerEnabled` config flag (default `false` —
|
|
21
|
+
* opt-in per Gotcha #30/#48). The reasoner ALSO short-circuits
|
|
22
|
+
* when `options.enabled !== true`, so direct callers can't
|
|
23
|
+
* accidentally bypass the flag.
|
|
24
|
+
* - Per-peer, the `peerProfileReasonerMinInteractions` threshold
|
|
25
|
+
* skips peers whose log has fewer entries since the last reasoner
|
|
26
|
+
* run than required.
|
|
27
|
+
*
|
|
28
|
+
* The reasoner is intentionally storage-agnostic — it accepts an LLM
|
|
29
|
+
* client by interface (`PeerProfileReasonerLlm`) so tests can mock the
|
|
30
|
+
* call and the orchestrator can inject either the gateway client or
|
|
31
|
+
* a fast local model. No direct OpenAI imports here.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import {
|
|
35
|
+
appendInteractionLog,
|
|
36
|
+
listPeers,
|
|
37
|
+
readPeerInteractionLog,
|
|
38
|
+
readPeerProfile,
|
|
39
|
+
writePeerProfile,
|
|
40
|
+
} from "./storage.js";
|
|
41
|
+
import type {
|
|
42
|
+
Peer,
|
|
43
|
+
PeerInteractionLogEntry,
|
|
44
|
+
PeerProfile,
|
|
45
|
+
PeerProfileFieldProvenance,
|
|
46
|
+
} from "./types.js";
|
|
47
|
+
import { PEER_ID_PATTERN } from "./types.js";
|
|
48
|
+
|
|
49
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
50
|
+
// Types
|
|
51
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Minimal chat-completion contract the reasoner depends on. Matches
|
|
55
|
+
* `FallbackLlmClient.chatCompletion` so the orchestrator can pass it
|
|
56
|
+
* through directly. Tests inject a mock that returns canned strings.
|
|
57
|
+
*
|
|
58
|
+
* Returning `null` means the LLM is unavailable / failed — the
|
|
59
|
+
* reasoner treats that as "no proposals for this peer" rather than an
|
|
60
|
+
* error so a flaky LLM never aborts the whole pass.
|
|
61
|
+
*/
|
|
62
|
+
export interface PeerProfileReasonerLlm {
|
|
63
|
+
chatCompletion(
|
|
64
|
+
messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
|
|
65
|
+
options?: { temperature?: number; maxTokens?: number; timeoutMs?: number },
|
|
66
|
+
): Promise<{ content: string } | null>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* One LLM-proposed profile-field update.
|
|
71
|
+
*
|
|
72
|
+
* `value` is the new markdown string to set under `field`. The
|
|
73
|
+
* provenance entry the LLM emits travels alongside it; the reasoner
|
|
74
|
+
* does NOT trust the LLM's `observedAt` — it always overwrites with
|
|
75
|
+
* the run's `now` timestamp so provenance can never claim future or
|
|
76
|
+
* past observation timestamps the operator didn't witness.
|
|
77
|
+
*/
|
|
78
|
+
export interface PeerProfileReasonerProposal {
|
|
79
|
+
/** Stable section key, e.g. "communication_style". */
|
|
80
|
+
readonly field: string;
|
|
81
|
+
/** Markdown value to set under that key. */
|
|
82
|
+
readonly value: string;
|
|
83
|
+
/**
|
|
84
|
+
* Short label for the signal that justified the inference,
|
|
85
|
+
* e.g. "explicit_preference", "tool_pattern", "topic_recurrence".
|
|
86
|
+
*/
|
|
87
|
+
readonly signal: string;
|
|
88
|
+
/** Optional free-form note explaining the inference. */
|
|
89
|
+
readonly note?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Originating session id, when the LLM can attribute the inference
|
|
92
|
+
* to a specific log line. Reasoner clamps this to a value that
|
|
93
|
+
* actually appeared in the log window so the LLM can't hallucinate.
|
|
94
|
+
*/
|
|
95
|
+
readonly sourceSessionId?: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface PeerProfileReasonerOptions {
|
|
99
|
+
/** Memory directory containing the peers/ subtree. */
|
|
100
|
+
readonly memoryDir: string;
|
|
101
|
+
/**
|
|
102
|
+
* Master gate. When `false` (the default the orchestrator passes
|
|
103
|
+
* when the config flag is off), the reasoner is a no-op and
|
|
104
|
+
* returns an empty result. Direct callers must explicitly pass
|
|
105
|
+
* `true` so the gate can never be defaulted ON by accident
|
|
106
|
+
* (Gotcha #48 — least-privileged default).
|
|
107
|
+
*/
|
|
108
|
+
readonly enabled: boolean;
|
|
109
|
+
/** Injected LLM client. Required when `enabled === true`. */
|
|
110
|
+
readonly llm?: PeerProfileReasonerLlm;
|
|
111
|
+
/** Model name to log for telemetry; not used to dispatch. */
|
|
112
|
+
readonly model?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Minimum new interaction-log entries since last reasoner run
|
|
115
|
+
* before this peer is processed. Peers below the threshold are
|
|
116
|
+
* skipped with `reason: "below_min_interactions"`.
|
|
117
|
+
*/
|
|
118
|
+
readonly minInteractions: number;
|
|
119
|
+
/**
|
|
120
|
+
* Hard cap on profile fields the reasoner will accept across all
|
|
121
|
+
* peers in a single run. Tracked in insertion order: once the cap
|
|
122
|
+
* is reached, subsequent proposals are dropped with
|
|
123
|
+
* `dropped_due_to_cap` in the per-peer result. Use to bound LLM
|
|
124
|
+
* cost and reviewer load per pass.
|
|
125
|
+
*/
|
|
126
|
+
readonly maxFieldsPerRun: number;
|
|
127
|
+
/**
|
|
128
|
+
* Optional restriction to specific peer ids. When omitted, the
|
|
129
|
+
* reasoner enumerates the entire peer registry via `listPeers`.
|
|
130
|
+
*/
|
|
131
|
+
readonly peerIds?: ReadonlyArray<string>;
|
|
132
|
+
/**
|
|
133
|
+
* Maximum number of recent log entries to feed the LLM per peer.
|
|
134
|
+
* Defaults to 50. Bounded so a runaway log can't blow the prompt.
|
|
135
|
+
*/
|
|
136
|
+
readonly maxLogEntriesPerPeer?: number;
|
|
137
|
+
/**
|
|
138
|
+
* Reasoner run timestamp. Defaults to `new Date()` at call time.
|
|
139
|
+
* Tests inject a deterministic clock; the orchestrator passes
|
|
140
|
+
* `new Date()` so provenance entries reflect actual wall time.
|
|
141
|
+
*/
|
|
142
|
+
readonly now?: Date;
|
|
143
|
+
/**
|
|
144
|
+
* Optional logger; defaults to a no-op so the reasoner stays
|
|
145
|
+
* silent in unit tests. The orchestrator wires its `log` here so
|
|
146
|
+
* runs surface in the gateway log under the
|
|
147
|
+
* `[peer-profile-reasoner]` prefix.
|
|
148
|
+
*/
|
|
149
|
+
readonly log?: {
|
|
150
|
+
debug?: (msg: string) => void;
|
|
151
|
+
info?: (msg: string) => void;
|
|
152
|
+
warn?: (msg: string) => void;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Whether to append a `peer_profile_reasoner_run` entry to the
|
|
156
|
+
* peer's interaction log when the reasoner emits at least one
|
|
157
|
+
* field for that peer. Defaults to `true`. Disable in tests that
|
|
158
|
+
* want to assert the log was untouched.
|
|
159
|
+
*/
|
|
160
|
+
readonly appendRunMarkerToLog?: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Optional abort signal. The reasoner checks between peers and
|
|
163
|
+
* returns the partial result if cancelled mid-run.
|
|
164
|
+
*/
|
|
165
|
+
readonly signal?: AbortSignal;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export interface PeerProfileReasonerPeerResult {
|
|
169
|
+
readonly peerId: string;
|
|
170
|
+
readonly status:
|
|
171
|
+
| "processed"
|
|
172
|
+
| "skipped_below_min_interactions"
|
|
173
|
+
| "skipped_no_log"
|
|
174
|
+
| "skipped_disabled"
|
|
175
|
+
| "skipped_no_llm"
|
|
176
|
+
| "skipped_llm_unavailable"
|
|
177
|
+
| "skipped_invalid_proposal"
|
|
178
|
+
| "skipped_cap_reached"
|
|
179
|
+
| "skipped_aborted"
|
|
180
|
+
| "error";
|
|
181
|
+
/** Number of fields actually applied to the peer's profile. */
|
|
182
|
+
readonly fieldsApplied: number;
|
|
183
|
+
/** Number of proposals dropped because the per-run cap was hit. */
|
|
184
|
+
readonly droppedDueToCap: number;
|
|
185
|
+
/** Set of field keys applied; useful for tests and telemetry. */
|
|
186
|
+
readonly fields: ReadonlyArray<string>;
|
|
187
|
+
/** Error message, when `status === "error"`. */
|
|
188
|
+
readonly error?: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export interface PeerProfileReasonerResult {
|
|
192
|
+
readonly peersConsidered: number;
|
|
193
|
+
readonly peersProcessed: number;
|
|
194
|
+
readonly fieldsApplied: number;
|
|
195
|
+
readonly perPeer: ReadonlyArray<PeerProfileReasonerPeerResult>;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
199
|
+
// Prompt + parser (pure, exported for tests)
|
|
200
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Build the user-facing reasoner prompt. The system message carries
|
|
204
|
+
* the strict-JSON instruction; this function emits the user message
|
|
205
|
+
* with the peer context and the recent log slice.
|
|
206
|
+
*
|
|
207
|
+
* The prompt is intentionally schema-prescriptive — sibling modules
|
|
208
|
+
* (`semantic-consolidation.ts`, `extraction-judge.ts`) demonstrated
|
|
209
|
+
* that letting the LLM improvise field names produces unstable
|
|
210
|
+
* profiles across runs.
|
|
211
|
+
*/
|
|
212
|
+
export function buildPeerProfileReasonerPrompt(input: {
|
|
213
|
+
peer: Peer;
|
|
214
|
+
existingProfile: PeerProfile | null;
|
|
215
|
+
log: ReadonlyArray<PeerInteractionLogEntry>;
|
|
216
|
+
maxFields: number;
|
|
217
|
+
}): string {
|
|
218
|
+
const existingFields = input.existingProfile
|
|
219
|
+
? Object.keys(input.existingProfile.fields)
|
|
220
|
+
: [];
|
|
221
|
+
const logBlock = input.log
|
|
222
|
+
.map((e) => {
|
|
223
|
+
const session = e.sessionId ? ` session=${e.sessionId}` : "";
|
|
224
|
+
return `- [${e.timestamp}] (${e.kind})${session} ${e.summary}`;
|
|
225
|
+
})
|
|
226
|
+
.join("\n");
|
|
227
|
+
return [
|
|
228
|
+
`You are an async peer-profile reasoner. Your job is to read recent interaction-log entries for one peer and propose 0..${input.maxFields} profile-field updates.`,
|
|
229
|
+
"",
|
|
230
|
+
`Peer:`,
|
|
231
|
+
` id: ${input.peer.id}`,
|
|
232
|
+
` kind: ${input.peer.kind}`,
|
|
233
|
+
` displayName: ${input.peer.displayName}`,
|
|
234
|
+
"",
|
|
235
|
+
`Existing profile field keys (preserve names when proposing updates that refine an existing field): ${existingFields.length > 0 ? existingFields.join(", ") : "(none yet)"}`,
|
|
236
|
+
"",
|
|
237
|
+
`Recent interaction log (oldest first):`,
|
|
238
|
+
logBlock.length > 0 ? logBlock : "(no entries)",
|
|
239
|
+
"",
|
|
240
|
+
`Output a single JSON object: {"proposals": [{"field": "<stable_key>", "value": "<markdown>", "signal": "<short_label>", "note": "<optional>", "sourceSessionId": "<optional>"}]}.`,
|
|
241
|
+
"",
|
|
242
|
+
`Rules:`,
|
|
243
|
+
`1. Only propose fields supported by evidence in the log. Do not invent.`,
|
|
244
|
+
`2. Keys are short snake_case (e.g. "communication_style", "tool_patterns").`,
|
|
245
|
+
`3. value is markdown. signal is a short label like "explicit_preference" or "topic_recurrence".`,
|
|
246
|
+
`4. Omit fields you can't justify. Empty proposals array is valid.`,
|
|
247
|
+
`5. Output JSON ONLY — no prose before or after.`,
|
|
248
|
+
].join("\n");
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Parse the LLM response. Tolerates a fenced code block wrapper.
|
|
253
|
+
* Returns an empty array on any malformed payload — the contract is
|
|
254
|
+
* that flaky LLM output silently produces zero proposals rather than
|
|
255
|
+
* surfacing an error to the caller.
|
|
256
|
+
*
|
|
257
|
+
* Exported so unit tests can verify parser behavior without spinning
|
|
258
|
+
* up the full reasoner.
|
|
259
|
+
*/
|
|
260
|
+
export function parsePeerProfileReasonerResponse(
|
|
261
|
+
raw: string,
|
|
262
|
+
): PeerProfileReasonerProposal[] {
|
|
263
|
+
if (typeof raw !== "string" || raw.trim() === "") return [];
|
|
264
|
+
const trimmed = raw.trim();
|
|
265
|
+
const fenced = /^```(?:json)?\s*([\s\S]*?)```\s*$/u.exec(trimmed);
|
|
266
|
+
const payload = fenced ? fenced[1].trim() : trimmed;
|
|
267
|
+
let parsed: unknown;
|
|
268
|
+
try {
|
|
269
|
+
parsed = JSON.parse(payload);
|
|
270
|
+
} catch {
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
273
|
+
// Gotcha #18: JSON.parse('null') succeeds. Reject non-objects.
|
|
274
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
const obj = parsed as { proposals?: unknown };
|
|
278
|
+
if (!Array.isArray(obj.proposals)) return [];
|
|
279
|
+
const out: PeerProfileReasonerProposal[] = [];
|
|
280
|
+
// Gotcha — drop prototype-pollution keys at the field-name layer.
|
|
281
|
+
const RESERVED_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
282
|
+
for (const item of obj.proposals) {
|
|
283
|
+
if (typeof item !== "object" || item === null || Array.isArray(item)) continue;
|
|
284
|
+
const r = item as Record<string, unknown>;
|
|
285
|
+
if (typeof r.field !== "string" || r.field.trim() === "") continue;
|
|
286
|
+
if (RESERVED_KEYS.has(r.field)) continue;
|
|
287
|
+
if (typeof r.value !== "string" || r.value.trim() === "") continue;
|
|
288
|
+
if (typeof r.signal !== "string" || r.signal.trim() === "") continue;
|
|
289
|
+
const proposal: PeerProfileReasonerProposal = {
|
|
290
|
+
field: r.field,
|
|
291
|
+
value: r.value,
|
|
292
|
+
signal: r.signal,
|
|
293
|
+
...(typeof r.note === "string" && r.note.length > 0 ? { note: r.note } : {}),
|
|
294
|
+
...(typeof r.sourceSessionId === "string" && r.sourceSessionId.length > 0
|
|
295
|
+
? { sourceSessionId: r.sourceSessionId }
|
|
296
|
+
: {}),
|
|
297
|
+
};
|
|
298
|
+
out.push(proposal);
|
|
299
|
+
}
|
|
300
|
+
return out;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
304
|
+
// Reasoner core
|
|
305
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
306
|
+
|
|
307
|
+
const SYSTEM_MESSAGE =
|
|
308
|
+
'You are a peer-profile reasoner. Output ONLY a JSON object of the form {"proposals":[{"field":"...","value":"...","signal":"...","note":"...","sourceSessionId":"..."}]}. No prose, no fenced code block, no commentary.';
|
|
309
|
+
|
|
310
|
+
const RUN_MARKER_KIND = "peer_profile_reasoner_run";
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Find the most recent reasoner-run marker timestamp in the log.
|
|
314
|
+
* Used to count "interactions since last run" so the threshold
|
|
315
|
+
* gate doesn't keep firing on the same dormant log forever.
|
|
316
|
+
*/
|
|
317
|
+
function lastRunTimestamp(
|
|
318
|
+
log: ReadonlyArray<PeerInteractionLogEntry>,
|
|
319
|
+
): string | undefined {
|
|
320
|
+
let latest: string | undefined;
|
|
321
|
+
for (const entry of log) {
|
|
322
|
+
if (entry.kind !== RUN_MARKER_KIND) continue;
|
|
323
|
+
if (latest === undefined || entry.timestamp > latest) {
|
|
324
|
+
latest = entry.timestamp;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return latest;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function noopLogger(): NonNullable<PeerProfileReasonerOptions["log"]> {
|
|
331
|
+
return { debug: () => {}, info: () => {}, warn: () => {} };
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Run the reasoner across all (or the requested subset of) peers.
|
|
336
|
+
*
|
|
337
|
+
* Always returns a `PeerProfileReasonerResult` — never throws to the
|
|
338
|
+
* caller — so the orchestrator can wire it as a best-effort
|
|
339
|
+
* post-consolidation hook (Gotcha #13).
|
|
340
|
+
*/
|
|
341
|
+
export async function runPeerProfileReasoner(
|
|
342
|
+
options: PeerProfileReasonerOptions,
|
|
343
|
+
): Promise<PeerProfileReasonerResult> {
|
|
344
|
+
const log = {
|
|
345
|
+
debug: options.log?.debug ?? noopLogger().debug!,
|
|
346
|
+
info: options.log?.info ?? noopLogger().info!,
|
|
347
|
+
warn: options.log?.warn ?? noopLogger().warn!,
|
|
348
|
+
};
|
|
349
|
+
const result: {
|
|
350
|
+
peersConsidered: number;
|
|
351
|
+
peersProcessed: number;
|
|
352
|
+
fieldsApplied: number;
|
|
353
|
+
perPeer: PeerProfileReasonerPeerResult[];
|
|
354
|
+
} = {
|
|
355
|
+
peersConsidered: 0,
|
|
356
|
+
peersProcessed: 0,
|
|
357
|
+
fieldsApplied: 0,
|
|
358
|
+
perPeer: [],
|
|
359
|
+
};
|
|
360
|
+
// Disabled flag is the master gate. Defaults to false in callers'
|
|
361
|
+
// config; we additionally require strict `=== true` here so a
|
|
362
|
+
// stray "true" string doesn't silently flip the flag (Gotcha #36).
|
|
363
|
+
if (options.enabled !== true) {
|
|
364
|
+
log.debug("[peer-profile-reasoner] disabled — no-op");
|
|
365
|
+
return result;
|
|
366
|
+
}
|
|
367
|
+
if (!options.llm) {
|
|
368
|
+
log.warn("[peer-profile-reasoner] no LLM client supplied — skipping run");
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
const minInteractions = Number.isFinite(options.minInteractions)
|
|
372
|
+
? Math.max(0, Math.floor(options.minInteractions))
|
|
373
|
+
: 0;
|
|
374
|
+
const maxFields = Number.isFinite(options.maxFieldsPerRun)
|
|
375
|
+
? Math.max(0, Math.floor(options.maxFieldsPerRun))
|
|
376
|
+
: 0;
|
|
377
|
+
if (maxFields === 0) {
|
|
378
|
+
log.debug("[peer-profile-reasoner] maxFieldsPerRun=0 — no-op");
|
|
379
|
+
return result;
|
|
380
|
+
}
|
|
381
|
+
const maxLogPerPeer = Number.isFinite(options.maxLogEntriesPerPeer ?? NaN)
|
|
382
|
+
? Math.max(1, Math.floor(options.maxLogEntriesPerPeer as number))
|
|
383
|
+
: 50;
|
|
384
|
+
const now = options.now ?? new Date();
|
|
385
|
+
const nowIso = now.toISOString();
|
|
386
|
+
|
|
387
|
+
let peers: Peer[];
|
|
388
|
+
try {
|
|
389
|
+
if (options.peerIds && options.peerIds.length > 0) {
|
|
390
|
+
// Filter the explicit list against on-disk peers so we never
|
|
391
|
+
// act on an id the operator typed but didn't register.
|
|
392
|
+
const all = await listPeers(options.memoryDir);
|
|
393
|
+
const wanted = new Set(
|
|
394
|
+
options.peerIds.filter(
|
|
395
|
+
(id) => typeof id === "string" && PEER_ID_PATTERN.test(id),
|
|
396
|
+
),
|
|
397
|
+
);
|
|
398
|
+
peers = all.filter((p) => wanted.has(p.id));
|
|
399
|
+
} else {
|
|
400
|
+
peers = await listPeers(options.memoryDir);
|
|
401
|
+
}
|
|
402
|
+
} catch (err) {
|
|
403
|
+
log.warn(
|
|
404
|
+
`[peer-profile-reasoner] listPeers failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
405
|
+
);
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
result.peersConsidered = peers.length;
|
|
409
|
+
let fieldsAppliedTotal = 0;
|
|
410
|
+
|
|
411
|
+
for (const peer of peers) {
|
|
412
|
+
if (options.signal?.aborted) {
|
|
413
|
+
result.perPeer.push({
|
|
414
|
+
peerId: peer.id,
|
|
415
|
+
status: "skipped_aborted",
|
|
416
|
+
fieldsApplied: 0,
|
|
417
|
+
droppedDueToCap: 0,
|
|
418
|
+
fields: [],
|
|
419
|
+
});
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
try {
|
|
423
|
+
// Codex P2 review on PR #736: the min-interactions threshold
|
|
424
|
+
// must reflect the FULL log of new activity, not the
|
|
425
|
+
// `maxLogPerPeer`-truncated slice. Otherwise a peer with a
|
|
426
|
+
// genuinely active conversation history can be permanently
|
|
427
|
+
// marked `skipped_below_min_interactions` whenever
|
|
428
|
+
// `peerProfileReasonerMinInteractions > maxLogEntriesPerPeer`,
|
|
429
|
+
// because the slice will never include enough new entries.
|
|
430
|
+
// Read the full log first to compute the gate, then truncate
|
|
431
|
+
// for prompt construction below.
|
|
432
|
+
const fullLog = await readPeerInteractionLog(
|
|
433
|
+
options.memoryDir,
|
|
434
|
+
peer.id,
|
|
435
|
+
);
|
|
436
|
+
if (fullLog.length === 0) {
|
|
437
|
+
result.perPeer.push({
|
|
438
|
+
peerId: peer.id,
|
|
439
|
+
status: "skipped_no_log",
|
|
440
|
+
fieldsApplied: 0,
|
|
441
|
+
droppedDueToCap: 0,
|
|
442
|
+
fields: [],
|
|
443
|
+
});
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
// Count interactions since the last reasoner-run marker, so
|
|
447
|
+
// dormant peers don't trigger another LLM call until enough
|
|
448
|
+
// new signal accumulates. Run markers themselves don't count.
|
|
449
|
+
const lastRun = lastRunTimestamp(fullLog);
|
|
450
|
+
const sinceLastRunFull = lastRun
|
|
451
|
+
? fullLog.filter(
|
|
452
|
+
(e) => e.timestamp > lastRun && e.kind !== RUN_MARKER_KIND,
|
|
453
|
+
)
|
|
454
|
+
: fullLog.filter((e) => e.kind !== RUN_MARKER_KIND);
|
|
455
|
+
if (sinceLastRunFull.length < minInteractions) {
|
|
456
|
+
result.perPeer.push({
|
|
457
|
+
peerId: peer.id,
|
|
458
|
+
status: "skipped_below_min_interactions",
|
|
459
|
+
fieldsApplied: 0,
|
|
460
|
+
droppedDueToCap: 0,
|
|
461
|
+
fields: [],
|
|
462
|
+
});
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
// Truncate ONLY for prompt construction so the LLM context
|
|
466
|
+
// stays bounded. Use the most recent `maxLogPerPeer` entries
|
|
467
|
+
// from the full since-last-run set so the prompt prefers fresh
|
|
468
|
+
// signal over older entries.
|
|
469
|
+
const sinceLastRun =
|
|
470
|
+
sinceLastRunFull.length > maxLogPerPeer
|
|
471
|
+
? sinceLastRunFull.slice(sinceLastRunFull.length - maxLogPerPeer)
|
|
472
|
+
: sinceLastRunFull;
|
|
473
|
+
|
|
474
|
+
const existingProfile = await readPeerProfile(options.memoryDir, peer.id);
|
|
475
|
+
|
|
476
|
+
const remainingBudget = maxFields - fieldsAppliedTotal;
|
|
477
|
+
if (remainingBudget <= 0) {
|
|
478
|
+
result.perPeer.push({
|
|
479
|
+
peerId: peer.id,
|
|
480
|
+
status: "skipped_cap_reached",
|
|
481
|
+
fieldsApplied: 0,
|
|
482
|
+
droppedDueToCap: 0,
|
|
483
|
+
fields: [],
|
|
484
|
+
});
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const prompt = buildPeerProfileReasonerPrompt({
|
|
489
|
+
peer,
|
|
490
|
+
existingProfile,
|
|
491
|
+
log: sinceLastRun,
|
|
492
|
+
maxFields: remainingBudget,
|
|
493
|
+
});
|
|
494
|
+
const messages = [
|
|
495
|
+
{ role: "system" as const, content: SYSTEM_MESSAGE },
|
|
496
|
+
{ role: "user" as const, content: prompt },
|
|
497
|
+
];
|
|
498
|
+
let response: { content: string } | null;
|
|
499
|
+
try {
|
|
500
|
+
response = await options.llm.chatCompletion(messages, {
|
|
501
|
+
temperature: 0.2,
|
|
502
|
+
maxTokens: 1500,
|
|
503
|
+
});
|
|
504
|
+
} catch (err) {
|
|
505
|
+
log.warn(
|
|
506
|
+
`[peer-profile-reasoner] LLM call failed for "${peer.id}": ${err instanceof Error ? err.message : String(err)}`,
|
|
507
|
+
);
|
|
508
|
+
result.perPeer.push({
|
|
509
|
+
peerId: peer.id,
|
|
510
|
+
status: "skipped_llm_unavailable",
|
|
511
|
+
fieldsApplied: 0,
|
|
512
|
+
droppedDueToCap: 0,
|
|
513
|
+
fields: [],
|
|
514
|
+
});
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
if (!response || typeof response.content !== "string") {
|
|
518
|
+
result.perPeer.push({
|
|
519
|
+
peerId: peer.id,
|
|
520
|
+
status: "skipped_llm_unavailable",
|
|
521
|
+
fieldsApplied: 0,
|
|
522
|
+
droppedDueToCap: 0,
|
|
523
|
+
fields: [],
|
|
524
|
+
});
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
const proposals = parsePeerProfileReasonerResponse(response.content);
|
|
529
|
+
if (proposals.length === 0) {
|
|
530
|
+
result.perPeer.push({
|
|
531
|
+
peerId: peer.id,
|
|
532
|
+
status: "processed",
|
|
533
|
+
fieldsApplied: 0,
|
|
534
|
+
droppedDueToCap: 0,
|
|
535
|
+
fields: [],
|
|
536
|
+
});
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Build the merged profile. We never replace existing
|
|
541
|
+
// provenance entries — provenance is append-only so the
|
|
542
|
+
// operator retains a full audit trail.
|
|
543
|
+
const sessionIdsInWindow = new Set(
|
|
544
|
+
sinceLastRun
|
|
545
|
+
.map((e) => e.sessionId)
|
|
546
|
+
.filter((s): s is string => typeof s === "string" && s.length > 0),
|
|
547
|
+
);
|
|
548
|
+
const baseFields: Record<string, string> = existingProfile
|
|
549
|
+
? { ...existingProfile.fields }
|
|
550
|
+
: {};
|
|
551
|
+
const baseProvenance: Record<string, PeerProfileFieldProvenance[]> = {};
|
|
552
|
+
if (existingProfile) {
|
|
553
|
+
for (const [k, list] of Object.entries(existingProfile.provenance)) {
|
|
554
|
+
baseProvenance[k] = [...list];
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// Codex P1 review on PR #736: the global `fieldsAppliedTotal`
|
|
559
|
+
// counter must NOT be incremented until the profile write
|
|
560
|
+
// actually succeeds. Otherwise a transient I/O error here
|
|
561
|
+
// poisons the per-run cap for every subsequent peer — they get
|
|
562
|
+
// marked `skipped_cap_reached` for fields that were never
|
|
563
|
+
// persisted. Track the candidate count locally and only
|
|
564
|
+
// commit it to the run-wide budget after `writePeerProfile`
|
|
565
|
+
// returns successfully (Gotcha #25 — don't destroy old state
|
|
566
|
+
// before confirming new state succeeds).
|
|
567
|
+
const appliedFieldsForPeer: string[] = [];
|
|
568
|
+
let droppedDueToCap = 0;
|
|
569
|
+
let invalidProposalSeen = false;
|
|
570
|
+
for (const proposal of proposals) {
|
|
571
|
+
// Use a candidate-budget projection so we never propose more
|
|
572
|
+
// than the run-wide cap allows even before we know the write
|
|
573
|
+
// will succeed.
|
|
574
|
+
const candidateBudget =
|
|
575
|
+
maxFields - fieldsAppliedTotal - appliedFieldsForPeer.length;
|
|
576
|
+
if (candidateBudget <= 0) {
|
|
577
|
+
droppedDueToCap += 1;
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
// Final defensive guard against prototype keys (parser
|
|
581
|
+
// already drops them, but be redundant for safety).
|
|
582
|
+
if (
|
|
583
|
+
proposal.field === "__proto__" ||
|
|
584
|
+
proposal.field === "constructor" ||
|
|
585
|
+
proposal.field === "prototype"
|
|
586
|
+
) {
|
|
587
|
+
invalidProposalSeen = true;
|
|
588
|
+
continue;
|
|
589
|
+
}
|
|
590
|
+
// Sanity-check field key matches a conservative pattern so a
|
|
591
|
+
// hostile LLM can't sneak path-traversal-shaped keys through
|
|
592
|
+
// for downstream consumers.
|
|
593
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_]{0,63}$/.test(proposal.field)) {
|
|
594
|
+
invalidProposalSeen = true;
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
baseFields[proposal.field] = proposal.value;
|
|
598
|
+
const sourceSessionId =
|
|
599
|
+
proposal.sourceSessionId &&
|
|
600
|
+
sessionIdsInWindow.has(proposal.sourceSessionId)
|
|
601
|
+
? proposal.sourceSessionId
|
|
602
|
+
: undefined;
|
|
603
|
+
const provEntry: PeerProfileFieldProvenance = {
|
|
604
|
+
observedAt: nowIso,
|
|
605
|
+
signal: proposal.signal,
|
|
606
|
+
...(sourceSessionId ? { sourceSessionId } : {}),
|
|
607
|
+
...(proposal.note && proposal.note.length > 0
|
|
608
|
+
? { note: proposal.note }
|
|
609
|
+
: {}),
|
|
610
|
+
};
|
|
611
|
+
const list = baseProvenance[proposal.field] ?? [];
|
|
612
|
+
list.push(provEntry);
|
|
613
|
+
baseProvenance[proposal.field] = list;
|
|
614
|
+
appliedFieldsForPeer.push(proposal.field);
|
|
615
|
+
// NOTE: fieldsAppliedTotal is NOT incremented here — see the
|
|
616
|
+
// P1 comment above. We commit the budget after the write
|
|
617
|
+
// succeeds.
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
if (appliedFieldsForPeer.length === 0) {
|
|
621
|
+
result.perPeer.push({
|
|
622
|
+
peerId: peer.id,
|
|
623
|
+
status: invalidProposalSeen
|
|
624
|
+
? "skipped_invalid_proposal"
|
|
625
|
+
: droppedDueToCap > 0
|
|
626
|
+
? "skipped_cap_reached"
|
|
627
|
+
: "processed",
|
|
628
|
+
fieldsApplied: 0,
|
|
629
|
+
droppedDueToCap,
|
|
630
|
+
fields: [],
|
|
631
|
+
});
|
|
632
|
+
continue;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
const merged: PeerProfile = {
|
|
636
|
+
peerId: peer.id,
|
|
637
|
+
updatedAt: nowIso,
|
|
638
|
+
fields: baseFields,
|
|
639
|
+
provenance: baseProvenance,
|
|
640
|
+
};
|
|
641
|
+
await writePeerProfile(options.memoryDir, merged);
|
|
642
|
+
// Write succeeded — NOW commit the budget. A throw above
|
|
643
|
+
// bubbles to the outer catch, where the peer is recorded as
|
|
644
|
+
// `error` and the global cap remains intact for subsequent
|
|
645
|
+
// peers (Codex P1 fix on PR #736).
|
|
646
|
+
fieldsAppliedTotal += appliedFieldsForPeer.length;
|
|
647
|
+
|
|
648
|
+
// Append a run marker so the next reasoner pass can compute
|
|
649
|
+
// "interactions since last run" without a dedicated state
|
|
650
|
+
// file. The marker is best-effort — a write failure here
|
|
651
|
+
// logs but does not roll back the profile (the operator
|
|
652
|
+
// would prefer a slightly noisy threshold over a lost
|
|
653
|
+
// profile update).
|
|
654
|
+
const wantsMarker = options.appendRunMarkerToLog ?? true;
|
|
655
|
+
if (wantsMarker) {
|
|
656
|
+
try {
|
|
657
|
+
await appendInteractionLog(options.memoryDir, peer.id, {
|
|
658
|
+
timestamp: nowIso,
|
|
659
|
+
kind: RUN_MARKER_KIND,
|
|
660
|
+
summary: `applied ${appliedFieldsForPeer.length} field(s) via ${options.model ?? "unknown-model"}`,
|
|
661
|
+
});
|
|
662
|
+
} catch (err) {
|
|
663
|
+
log.warn(
|
|
664
|
+
`[peer-profile-reasoner] run-marker append failed for "${peer.id}": ${err instanceof Error ? err.message : String(err)}`,
|
|
665
|
+
);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
result.perPeer.push({
|
|
670
|
+
peerId: peer.id,
|
|
671
|
+
status: "processed",
|
|
672
|
+
fieldsApplied: appliedFieldsForPeer.length,
|
|
673
|
+
droppedDueToCap,
|
|
674
|
+
fields: appliedFieldsForPeer,
|
|
675
|
+
});
|
|
676
|
+
result.peersProcessed += 1;
|
|
677
|
+
result.fieldsApplied = fieldsAppliedTotal;
|
|
678
|
+
} catch (err) {
|
|
679
|
+
log.warn(
|
|
680
|
+
`[peer-profile-reasoner] error processing peer "${peer.id}": ${err instanceof Error ? err.message : String(err)}`,
|
|
681
|
+
);
|
|
682
|
+
result.perPeer.push({
|
|
683
|
+
peerId: peer.id,
|
|
684
|
+
status: "error",
|
|
685
|
+
fieldsApplied: 0,
|
|
686
|
+
droppedDueToCap: 0,
|
|
687
|
+
fields: [],
|
|
688
|
+
error: err instanceof Error ? err.message : String(err),
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return result;
|
|
694
|
+
}
|