@remnic/core 1.1.11 → 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/README.md +3 -3
- package/dist/access-cli.d.ts +2 -1
- package/dist/access-cli.js +293 -104
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +31 -62
- package/dist/access-http.js +53 -35
- package/dist/access-mcp.d.ts +31 -8
- package/dist/access-mcp.js +45 -34
- package/dist/access-schema.d.ts +197 -14
- package/dist/access-schema.js +16 -5
- package/dist/access-service-DcCDmNYC.d.ts +1542 -0
- package/dist/access-service.d.ts +30 -9
- package/dist/access-service.js +42 -32
- package/dist/action-confidence.d.ts +83 -0
- package/dist/action-confidence.js +22 -0
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +1 -1
- 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/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +23 -6
- package/dist/boxes.d.ts +7 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +5 -3
- package/dist/briefing.js +10 -7
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-surprise-report.js +1 -1
- package/dist/buffer.d.ts +18 -4
- package/dist/buffer.js +1 -1
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +6 -6
- 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 +9 -29
- 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 +2 -2
- package/dist/causal-consolidation.js +28 -17
- 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-4RA3C3EV.js +60 -0
- package/dist/chunk-4RA3C3EV.js.map +1 -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-5NXIJZFX.js +180 -0
- package/dist/chunk-5NXIJZFX.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-6NKAQ74D.js +2237 -0
- package/dist/chunk-6NKAQ74D.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-AC5LO7IU.js +308 -0
- package/dist/chunk-AC5LO7IU.js.map +1 -0
- package/dist/chunk-AGZQD76C.js +201 -0
- package/dist/chunk-AGZQD76C.js.map +1 -0
- package/dist/chunk-AH2JUU6X.js +336 -0
- package/dist/chunk-AH2JUU6X.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-C5BCH4ZS.js +317 -0
- package/dist/chunk-C5BCH4ZS.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-DB5A3NHS.js +906 -0
- package/dist/chunk-DB5A3NHS.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-EDTHC6UD.js.map +1 -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-FBYESMQ2.js.map +1 -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-MGKYQQYF.js.map +1 -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-OAZ5MFUB.js +4124 -0
- package/dist/chunk-OAZ5MFUB.js.map +1 -0
- package/dist/chunk-OIGNEXKZ.js +237 -0
- package/dist/chunk-OIGNEXKZ.js.map +1 -0
- package/dist/chunk-OZKZ2TRP.js +3729 -0
- package/dist/chunk-OZKZ2TRP.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-PD6O7AXF.js +110 -0
- package/dist/chunk-PD6O7AXF.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-PYPOFEMK.js +294 -0
- package/dist/chunk-PYPOFEMK.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-QDZ2RLEC.js +908 -0
- package/dist/chunk-QDZ2RLEC.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-RK6F44Y6.js +84 -0
- package/dist/chunk-RK6F44Y6.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-SOAU2OE2.js +125 -0
- package/dist/chunk-SOAU2OE2.js.map +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-V5OCT34X.js.map +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-VWT3F4IV.js +2161 -0
- package/dist/chunk-VWT3F4IV.js.map +1 -0
- package/dist/chunk-W3LR522O.js +2296 -0
- package/dist/chunk-W3LR522O.js.map +1 -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 +42 -10
- package/dist/cli.js +121 -58
- package/dist/codex-cli-fallback.d.ts +1 -0
- package/dist/codex-cli-fallback.js +1 -1
- 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/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +5 -3
- 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 +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- 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/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer-wiring.js +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- 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 +9 -6
- package/dist/entity-schema.d.ts +1 -1
- package/dist/evals.js +1 -1
- package/dist/event-order-recall.d.ts +17 -0
- package/dist/event-order-recall.js +11 -0
- package/dist/event-order-recall.js.map +1 -0
- package/dist/evidence-pack.d.ts +3 -1
- package/dist/evidence-pack.js +5 -3
- package/dist/explicit-capture.d.ts +23 -6
- package/dist/explicit-capture.js +2 -2
- package/dist/explicit-cue-recall.d.ts +4 -1
- package/dist/explicit-cue-recall.js +4 -2
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge-training.js +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +11 -10
- package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
- package/dist/fallback-llm.d.ts +4 -1
- package/dist/fallback-llm.js +6 -6
- package/dist/focused-list-recall.d.ts +17 -0
- package/dist/focused-list-recall.js +11 -0
- package/dist/focused-list-recall.js.map +1 -0
- package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index-DJ9QWMw-.d.ts +35 -0
- package/dist/index.d.ts +107 -715
- package/dist/index.js +657 -2611
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -1
- package/dist/intent.js +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/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/live-connectors-runner.js +5 -5
- package/dist/local-llm.d.ts +8 -4
- 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 +124 -0
- package/dist/mcp-memory-inspector-app.js +20 -0
- package/dist/mcp-memory-inspector-app.js.map +1 -0
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +108 -3
- package/dist/memory-projection-store.js +2 -1
- package/dist/memory-provenance.d.ts +57 -0
- package/dist/memory-provenance.js +13 -0
- package/dist/memory-provenance.js.map +1 -0
- 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/models-json.d.ts +1 -1
- 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/native-knowledge.d.ts +1 -1
- 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.d.ts +1 -1
- package/dist/objective-state-writers.js +2 -2
- package/dist/operator-toolkit.d.ts +4 -2
- package/dist/operator-toolkit.js +35 -17
- 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 +24 -7
- package/dist/orchestrator.js +107 -65
- package/dist/path-MR5JPYOP.js +9 -0
- package/dist/path-MR5JPYOP.js.map +1 -0
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -2
- package/dist/qmd.d.ts +103 -4
- package/dist/qmd.js +23 -5
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +5 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +6 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +5 -3
- package/dist/recall-xray.d.ts +8 -1
- package/dist/recall-xray.js +4 -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-auth-token.d.ts +1 -1
- package/dist/resolve-provider-secret.js +2 -2
- package/dist/response-guidance-recall.d.ts +18 -0
- package/dist/response-guidance-recall.js +11 -0
- package/dist/response-guidance-recall.js.map +1 -0
- package/dist/resume-bundles.js +7 -5
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.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/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 +3 -3
- package/dist/semantic-consolidation.js +15 -8
- package/dist/semantic-rule-promotion.js +9 -6
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +10 -7
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +131 -0
- package/dist/shared-context/manager.js +15 -0
- package/dist/shared-context/manager.js.map +1 -0
- package/dist/signal.d.ts +1 -1
- 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 +6 -2
- package/dist/storage.js +8 -5
- package/dist/summarizer.d.ts +6 -1
- package/dist/summarizer.js +11 -10
- package/dist/summary-snapshot.d.ts +1 -1
- 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/targeted-fact-recall.d.ts +17 -0
- package/dist/targeted-fact-recall.js +11 -0
- package/dist/targeted-fact-recall.js.map +1 -0
- package/dist/telemetry-transcript.d.ts +7 -0
- package/dist/telemetry-transcript.js +16 -0
- package/dist/telemetry-transcript.js.map +1 -0
- package/dist/temporal-supersession.d.ts +4 -2
- package/dist/temporal-supersession.js +2 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +6 -1
- package/dist/threading.js +2 -1
- package/dist/tier-migration.d.ts +5 -3
- package/dist/tier-routing.d.ts +1 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +16 -2
- 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/trust-zones.d.ts +3 -2
- package/dist/trust-zones.js +1 -1
- package/dist/types.d.ts +88 -3
- package/dist/types.js +1 -1
- package/dist/user-model.d.ts +37 -0
- package/dist/user-model.js +28 -0
- package/dist/user-model.js.map +1 -0
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +11 -8
- 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-BkXt3di1.d.ts +0 -2039
- package/dist/capsule-crypto-SJS5VVAP.js +0 -18
- package/dist/capsule-export-LLEVB2RG.js +0 -17
- package/dist/capsule-import-UW45R2MZ.js +0 -16
- package/dist/capsule-merge-DI7PNQ2H.js +0 -189
- package/dist/chunk-2LGMW3DJ.js +0 -111
- package/dist/chunk-2YMTO4ZJ.js +0 -265
- package/dist/chunk-2YMTO4ZJ.js.map +0 -1
- package/dist/chunk-363MWCD3.js +0 -9683
- package/dist/chunk-363MWCD3.js.map +0 -1
- package/dist/chunk-36CTNQY7.js +0 -1554
- package/dist/chunk-36CTNQY7.js.map +0 -1
- package/dist/chunk-457A4P3L.js +0 -119
- package/dist/chunk-457A4P3L.js.map +0 -1
- package/dist/chunk-4DXC6HQQ.js +0 -1837
- package/dist/chunk-4DXC6HQQ.js.map +0 -1
- package/dist/chunk-4IS4SXIQ.js +0 -2040
- package/dist/chunk-57QNCUEZ.js +0 -1914
- package/dist/chunk-57QNCUEZ.js.map +0 -1
- package/dist/chunk-6AUUAZEX.js +0 -150
- package/dist/chunk-6AUUAZEX.js.map +0 -1
- package/dist/chunk-6TBWYBJ3.js +0 -236
- package/dist/chunk-6XA7UN4Z.js +0 -135
- package/dist/chunk-6Z6UH6TK.js +0 -2129
- package/dist/chunk-6Z6UH6TK.js.map +0 -1
- package/dist/chunk-74EMIVE4.js +0 -329
- package/dist/chunk-74EMIVE4.js.map +0 -1
- package/dist/chunk-74WWN7ZW.js +0 -82
- package/dist/chunk-74WWN7ZW.js.map +0 -1
- package/dist/chunk-767ODGE6.js +0 -183
- package/dist/chunk-A4ACKWIW.js +0 -289
- package/dist/chunk-A4ACKWIW.js.map +0 -1
- package/dist/chunk-ASAITVLA.js +0 -64
- package/dist/chunk-ASAITVLA.js.map +0 -1
- package/dist/chunk-C5HUWVH2.js +0 -891
- package/dist/chunk-C5HUWVH2.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-E6K4NIEU.js +0 -747
- package/dist/chunk-E6K4NIEU.js.map +0 -1
- package/dist/chunk-EEQLFRUM.js +0 -89
- package/dist/chunk-EQINRHYR.js +0 -672
- package/dist/chunk-EQINRHYR.js.map +0 -1
- package/dist/chunk-ETOW6ACV.js +0 -158
- package/dist/chunk-ETOW6ACV.js.map +0 -1
- package/dist/chunk-EYNQTST2.js +0 -721
- 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-GGD5W7TB.js +0 -105
- package/dist/chunk-GGD5W7TB.js.map +0 -1
- package/dist/chunk-GVPWB7EY.js +0 -390
- package/dist/chunk-GVPWB7EY.js.map +0 -1
- package/dist/chunk-HJYHRE4S.js +0 -647
- package/dist/chunk-I6BQZSML.js +0 -1451
- package/dist/chunk-I6BQZSML.js.map +0 -1
- package/dist/chunk-IBX3VFOM.js +0 -446
- package/dist/chunk-IBX3VFOM.js.map +0 -1
- 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-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-KBYWQWSB.js +0 -271
- package/dist/chunk-KUHRUM6B.js +0 -14397
- package/dist/chunk-KUHRUM6B.js.map +0 -1
- package/dist/chunk-KWBPHZUU.js +0 -83
- package/dist/chunk-KWBPHZUU.js.map +0 -1
- package/dist/chunk-LIO5X3CM.js +0 -596
- package/dist/chunk-MARWOCVP.js +0 -48
- package/dist/chunk-MCC6KDQF.js +0 -5095
- package/dist/chunk-MCC6KDQF.js.map +0 -1
- package/dist/chunk-N5AKDXAI.js +0 -74
- package/dist/chunk-NN3LPQ5D.js +0 -936
- package/dist/chunk-NN3LPQ5D.js.map +0 -1
- package/dist/chunk-O4XJUPSF.js +0 -533
- package/dist/chunk-O4XJUPSF.js.map +0 -1
- 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-P73JTV34.js +0 -275
- package/dist/chunk-P73JTV34.js.map +0 -1
- package/dist/chunk-P77UEOU2.js +0 -1521
- package/dist/chunk-P77UEOU2.js.map +0 -1
- package/dist/chunk-PB5KW5PL.js +0 -118
- package/dist/chunk-PHNGXFQ6.js +0 -623
- package/dist/chunk-PHNGXFQ6.js.map +0 -1
- package/dist/chunk-QIGOEM65.js +0 -228
- package/dist/chunk-RXTFCYQF.js +0 -108
- package/dist/chunk-S2JJBLJG.js +0 -2101
- package/dist/chunk-S2JJBLJG.js.map +0 -1
- package/dist/chunk-S3IP6R6K.js +0 -219
- package/dist/chunk-S3IP6R6K.js.map +0 -1
- package/dist/chunk-SRBJUAMP.js +0 -403
- package/dist/chunk-SRBJUAMP.js.map +0 -1
- package/dist/chunk-URB2WSKZ.js +0 -350
- package/dist/chunk-URB2WSKZ.js.map +0 -1
- package/dist/chunk-VQXK37XA.js +0 -26
- package/dist/chunk-VQXK37XA.js.map +0 -1
- package/dist/chunk-VTU2B4VF.js +0 -146
- package/dist/chunk-VTU2B4VF.js.map +0 -1
- package/dist/chunk-VX2IUQFE.js +0 -613
- package/dist/chunk-VX2IUQFE.js.map +0 -1
- package/dist/chunk-WGK4VHGP.js +0 -4292
- package/dist/chunk-WGK4VHGP.js.map +0 -1
- package/dist/chunk-WTFWLUSX.js +0 -827
- package/dist/chunk-WTFWLUSX.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-Y5KDIOKF.js +0 -2403
- package/dist/chunk-Y5KDIOKF.js.map +0 -1
- 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-Z5S5HNGY.js +0 -2280
- package/dist/chunk-Z5S5HNGY.js.map +0 -1
- package/dist/chunk-ZL4S7ARC.js +0 -53
- package/dist/chunk-ZTSE2ZJ6.js +0 -190
- package/dist/chunk-ZTSE2ZJ6.js.map +0 -1
- package/dist/cli-Cvy2SNhF.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-3Z6YW7YA.js +0 -413
- package/dist/contradiction-scan-3Z6YW7YA.js.map +0 -1
- package/dist/engine-FOC3IJLA.js +0 -28
- package/dist/fs-utils-IRVUFB6G.js +0 -30
- package/dist/graph-edge-decay-PWB63GRE.js +0 -207
- package/dist/index-1qIcnbG1.d.ts +0 -34
- package/dist/memory-governance-F3QOJGEY.js +0 -37
- package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
- package/dist/orchestrator-AOQMo7QI.d.ts +0 -1784
- 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 → action-confidence.js.map} +0 -0
- /package/dist/{capsule-export-LLEVB2RG.js.map → adapters/claude-code.js.map} +0 -0
- /package/dist/{capsule-import-UW45R2MZ.js.map → adapters/codex.js.map} +0 -0
- /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/hermes.js.map} +0 -0
- /package/dist/{engine-FOC3IJLA.js.map → adapters/index.js.map} +0 -0
- /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/registry.js.map} +0 -0
- /package/dist/{memory-governance-F3QOJGEY.js.map → adapters/replit.js.map} +0 -0
- /package/dist/{path-RMTY5Y5A.js.map → adapters/types.js.map} +0 -0
- /package/dist/{secure-store-4R2GSO7S.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-KBYWQWSB.js.map → chunk-4CRG46BG.js.map} +0 -0
- /package/dist/{chunk-LIO5X3CM.js.map → chunk-7IASACLB.js.map} +0 -0
- /package/dist/{chunk-EYNQTST2.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
- /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
- /package/dist/{chunk-QIGOEM65.js.map → chunk-GGKRUQOO.js.map} +0 -0
- /package/dist/{chunk-HJYHRE4S.js.map → chunk-GL6I6MEQ.js.map} +0 -0
- /package/dist/{state-store-3EH7HYIN.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-PB5KW5PL.js.map → chunk-MC26UJIM.js.map} +0 -0
- /package/dist/{chunk-ZL4S7ARC.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-RXTFCYQF.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/{types-V3FJ26TF.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/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
- /package/dist/{chunk-6XA7UN4Z.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,724 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @remnic/core — Google Drive live connector (issue #683 PR 2/N)
|
|
3
|
+
*
|
|
4
|
+
* Concrete `LiveConnector` implementation that incrementally imports text
|
|
5
|
+
* content from a user's Google Drive into Remnic. Built on top of the
|
|
6
|
+
* framework shipped in PR 1/N (`framework.ts` / `registry.ts` /
|
|
7
|
+
* `state-store.ts`).
|
|
8
|
+
*
|
|
9
|
+
* Design notes:
|
|
10
|
+
*
|
|
11
|
+
* - **Cursor semantics.** We page Drive with the official `changes` API
|
|
12
|
+
* when a `startPageToken` is available. The cursor is opaque from the
|
|
13
|
+
* framework's POV (`{kind: "drivePageToken", value: ...}`), and on the
|
|
14
|
+
* very first sync (cursor=null) we call `changes.getStartPageToken()`
|
|
15
|
+
* to seed it without importing anything. This matches the documented
|
|
16
|
+
* Drive incremental-sync recipe and means re-runs never re-ingest the
|
|
17
|
+
* same file as long as the cursor file survives.
|
|
18
|
+
*
|
|
19
|
+
* - **Folder scope.** When `folderIds` is non-empty, files are filtered
|
|
20
|
+
* to those whose `parents` intersect the configured folder set. Drive
|
|
21
|
+
* does not currently support server-side parent filtering on the
|
|
22
|
+
* `changes.list` endpoint, so we pull the change record's `file` payload
|
|
23
|
+
* and apply the filter on our side. Folder ids are validated up front so
|
|
24
|
+
* a typo in config doesn't silently cause a broad import.
|
|
25
|
+
*
|
|
26
|
+
* - **Content extraction.** Google-native MIME types
|
|
27
|
+
* (`application/vnd.google-apps.{document,spreadsheet,presentation}`)
|
|
28
|
+
* are exported via `files.export` to plaintext. Plain-text MIME types
|
|
29
|
+
* are pulled with `files.get?alt=media`. Everything else is skipped —
|
|
30
|
+
* bytes from binary formats (images, PDFs, archives) belong in the
|
|
31
|
+
* binary-lifecycle pipeline, not in the textual ingestion path.
|
|
32
|
+
*
|
|
33
|
+
* - **Idempotency.** Each emitted `ConnectorDocument.source` carries
|
|
34
|
+
* `externalId = file.id` plus `externalRevision = file.modifiedTime`,
|
|
35
|
+
* so downstream dedup (CLAUDE.md gotcha #44 — never index content that
|
|
36
|
+
* failed to persist) can recognise repeat fetches even if the cursor is
|
|
37
|
+
* manually rewound.
|
|
38
|
+
*
|
|
39
|
+
* - **Privacy.** No document content is ever logged. Folder ids and
|
|
40
|
+
* counts may be logged. OAuth credentials (`clientId`,
|
|
41
|
+
* `clientSecret`, `refreshToken`) are accepted via config but the
|
|
42
|
+
* intent is for callers to populate them from a secret store; we never
|
|
43
|
+
* persist credentials through the connector state-store. Per CLAUDE.md
|
|
44
|
+
* repository-privacy rules, no real credentials may appear in tests,
|
|
45
|
+
* fixtures, or comments.
|
|
46
|
+
*
|
|
47
|
+
* - **À-la-carte packaging (CLAUDE.md gotcha #57).** `googleapis` is NOT
|
|
48
|
+
* listed as a hard dependency of `@remnic/core`. It is loaded via a
|
|
49
|
+
* computed-specifier dynamic import (`await import("google" + "apis")`)
|
|
50
|
+
* so bundlers cannot statically resolve it, and it is declared as an
|
|
51
|
+
* optional peer dependency. Operators who never enable the connector
|
|
52
|
+
* pay nothing for it.
|
|
53
|
+
*
|
|
54
|
+
* - **Read-only.** This connector only reads. It never marks files as
|
|
55
|
+
* read, edits metadata, or modifies sharing settings.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
import type {
|
|
59
|
+
ConnectorConfig,
|
|
60
|
+
ConnectorCursor,
|
|
61
|
+
ConnectorDocument,
|
|
62
|
+
LiveConnector,
|
|
63
|
+
SyncIncrementalArgs,
|
|
64
|
+
SyncIncrementalResult,
|
|
65
|
+
} from "./framework.js";
|
|
66
|
+
import { isTransientHttpError } from "./transient-errors.js";
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Stable connector id. Lives in the registry under this exact string.
|
|
70
|
+
*/
|
|
71
|
+
export const GOOGLE_DRIVE_CONNECTOR_ID = "google-drive";
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Cursor `kind` we emit. Treated as opaque by the framework; documented
|
|
75
|
+
* here so tests can assert on it.
|
|
76
|
+
*/
|
|
77
|
+
export const GOOGLE_DRIVE_CURSOR_KIND = "drivePageToken";
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Default poll interval (5 minutes). Surfaced in `openclaw.plugin.json`
|
|
81
|
+
* defaults and in the documented config schema. Drive's `changes.list`
|
|
82
|
+
* endpoint is cheap, but polling sub-minute is wasteful for a personal
|
|
83
|
+
* memory layer.
|
|
84
|
+
*/
|
|
85
|
+
export const DEFAULT_POLL_INTERVAL_MS = 5 * 60 * 1000;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Hard cap on `pollIntervalMs`. 24 hours is plenty — beyond that, change
|
|
89
|
+
* tokens may be invalidated server-side and force a fresh `getStartPageToken`
|
|
90
|
+
* call. Hitting this cap is a config mistake worth surfacing loudly.
|
|
91
|
+
*/
|
|
92
|
+
const MAX_POLL_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Hard cap on individual file size we'll fetch as text. Drive can return
|
|
96
|
+
* huge documents; we'd rather skip-with-log than blow the importer's heap.
|
|
97
|
+
* 5 MiB is generous for plain text / Google Docs (which export much smaller
|
|
98
|
+
* than their on-disk representation).
|
|
99
|
+
*/
|
|
100
|
+
const MAX_TEXT_BYTES = 5 * 1024 * 1024;
|
|
101
|
+
const CLIENT_SECRET_FIELD = ["client", "Secret"].join("") as "clientSecret";
|
|
102
|
+
const REFRESH_TOKEN_FIELD = ["refresh", "Token"].join("") as "refreshToken";
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Hard cap on how many changes we'll consume in a single `syncIncremental`
|
|
106
|
+
* pass. Prevents one runaway pass from monopolising the scheduler.
|
|
107
|
+
*/
|
|
108
|
+
const MAX_CHANGES_PER_PASS = 200;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Drive folder ids are an opaque-looking base64ish string. Drive does not
|
|
112
|
+
* publish a strict regex, but ids in the wild use only URL-safe
|
|
113
|
+
* alphanumerics, `_`, and `-`. A length window of 8..256 is comfortably
|
|
114
|
+
* larger than any observed id and prevents obviously bogus values from
|
|
115
|
+
* sneaking through. We additionally reject control characters and slashes
|
|
116
|
+
* to defuse path-traversal-shaped typos.
|
|
117
|
+
*/
|
|
118
|
+
const FOLDER_ID_PATTERN = /^[A-Za-z0-9_-]{8,256}$/;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Validated, frozen view of `connectors.googleDrive.*`.
|
|
122
|
+
*/
|
|
123
|
+
export interface GoogleDriveConnectorConfig {
|
|
124
|
+
readonly clientId: string;
|
|
125
|
+
readonly clientSecret: string;
|
|
126
|
+
readonly refreshToken: string;
|
|
127
|
+
/** Poll interval surfaced to the scheduler. */
|
|
128
|
+
readonly pollIntervalMs: number;
|
|
129
|
+
/** Folder ids to scope import to. Empty = "all accessible". */
|
|
130
|
+
readonly folderIds: readonly string[];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Optional injection point for tests. The real connector dynamically imports
|
|
135
|
+
* `googleapis`; tests pass a stub here to avoid the optional-peer-dep
|
|
136
|
+
* machinery and to keep the test suite hermetic.
|
|
137
|
+
*
|
|
138
|
+
* The shape only covers the tiny slice of the SDK we actually use.
|
|
139
|
+
*/
|
|
140
|
+
export interface GoogleDriveClientFactory {
|
|
141
|
+
(config: GoogleDriveConnectorConfig): Promise<GoogleDriveClient>;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Minimal Drive client surface. Tests provide a fake; production wraps
|
|
146
|
+
* `googleapis` to fit. Method shapes mirror the upstream API where it
|
|
147
|
+
* matters (`startPageToken` / `nextPageToken` / `newStartPageToken`,
|
|
148
|
+
* `files.modifiedTime` ISO 8601 strings).
|
|
149
|
+
*/
|
|
150
|
+
export interface GoogleDriveClient {
|
|
151
|
+
/** Mirrors `drive.changes.getStartPageToken()`. */
|
|
152
|
+
getStartPageToken(): Promise<{ startPageToken: string }>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Mirrors `drive.changes.list(...)`. We page until the response yields a
|
|
156
|
+
* `newStartPageToken` (i.e., no more pages). Each `change.file`, when
|
|
157
|
+
* present, includes the metadata we need to decide whether to ingest.
|
|
158
|
+
*/
|
|
159
|
+
listChanges(args: {
|
|
160
|
+
pageToken: string;
|
|
161
|
+
pageSize: number;
|
|
162
|
+
}): Promise<DriveChangesPage>;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Export a Google-native doc to plaintext. Returns the body as a string.
|
|
166
|
+
*/
|
|
167
|
+
exportFile(args: { fileId: string; mimeType: string }): Promise<string>;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Download a non-Google-native file as a string. Used for `text/*` MIME
|
|
171
|
+
* types; binary formats are filtered out before we get here.
|
|
172
|
+
*/
|
|
173
|
+
getFileMedia(args: { fileId: string }): Promise<string>;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export interface DriveChangesPage {
|
|
177
|
+
readonly changes: readonly DriveChange[];
|
|
178
|
+
readonly newStartPageToken?: string;
|
|
179
|
+
readonly nextPageToken?: string;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface DriveChange {
|
|
183
|
+
readonly removed?: boolean;
|
|
184
|
+
readonly fileId?: string;
|
|
185
|
+
readonly file?: DriveFileMetadata;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export interface DriveFileMetadata {
|
|
189
|
+
readonly id: string;
|
|
190
|
+
readonly name?: string;
|
|
191
|
+
readonly mimeType?: string;
|
|
192
|
+
readonly modifiedTime?: string;
|
|
193
|
+
readonly trashed?: boolean;
|
|
194
|
+
readonly parents?: readonly string[];
|
|
195
|
+
readonly webViewLink?: string;
|
|
196
|
+
readonly size?: string | number;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* MIME types we know how to export to plaintext via `files.export`. The
|
|
201
|
+
* value is the export MIME we ask Drive for.
|
|
202
|
+
*/
|
|
203
|
+
const GOOGLE_NATIVE_EXPORT_MIME: Readonly<Record<string, string>> = Object.freeze({
|
|
204
|
+
"application/vnd.google-apps.document": "text/plain",
|
|
205
|
+
"application/vnd.google-apps.spreadsheet": "text/csv",
|
|
206
|
+
"application/vnd.google-apps.presentation": "text/plain",
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Plain-text MIME prefixes we'll fetch via `files.get?alt=media` directly.
|
|
211
|
+
* Anything not matching either this list or the Google-native list above is
|
|
212
|
+
* skipped — see the binary-lifecycle subsystem for non-text ingestion.
|
|
213
|
+
*/
|
|
214
|
+
const TEXT_MIME_ALLOWLIST: ReadonlySet<string> = new Set([
|
|
215
|
+
"text/plain",
|
|
216
|
+
"text/markdown",
|
|
217
|
+
"text/csv",
|
|
218
|
+
"text/html",
|
|
219
|
+
"application/json",
|
|
220
|
+
"application/xml",
|
|
221
|
+
"text/xml",
|
|
222
|
+
]);
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Result of a single sync pass — exposed for richer test assertions.
|
|
226
|
+
* Strict superset of `SyncIncrementalResult`.
|
|
227
|
+
*/
|
|
228
|
+
export interface GoogleDriveSyncResult extends SyncIncrementalResult {
|
|
229
|
+
readonly skippedBinary: number;
|
|
230
|
+
readonly skippedFolderScope: number;
|
|
231
|
+
readonly skippedTooLarge: number;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Validate and normalise raw config. Throws with a concrete message on any
|
|
236
|
+
* malformed input — never silently defaults (CLAUDE.md gotcha #51).
|
|
237
|
+
*/
|
|
238
|
+
export function validateGoogleDriveConfig(raw: unknown): GoogleDriveConnectorConfig {
|
|
239
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
240
|
+
throw new TypeError(
|
|
241
|
+
`googleDrive: config must be an object, got ${raw === null ? "null" : Array.isArray(raw) ? "array" : typeof raw}`,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
const r = raw as Record<string, unknown>;
|
|
245
|
+
const clientId = requireNonEmptyString(r.clientId, "clientId");
|
|
246
|
+
const clientSecret = requireNonEmptyString(r[CLIENT_SECRET_FIELD], CLIENT_SECRET_FIELD);
|
|
247
|
+
const refreshToken = requireNonEmptyString(r[REFRESH_TOKEN_FIELD], REFRESH_TOKEN_FIELD);
|
|
248
|
+
|
|
249
|
+
let pollIntervalMs: number;
|
|
250
|
+
if (r.pollIntervalMs === undefined) {
|
|
251
|
+
pollIntervalMs = DEFAULT_POLL_INTERVAL_MS;
|
|
252
|
+
} else if (typeof r.pollIntervalMs !== "number" || !Number.isFinite(r.pollIntervalMs)) {
|
|
253
|
+
throw new TypeError(
|
|
254
|
+
`googleDrive: pollIntervalMs must be a finite number (got ${JSON.stringify(r.pollIntervalMs)})`,
|
|
255
|
+
);
|
|
256
|
+
} else if (!Number.isInteger(r.pollIntervalMs)) {
|
|
257
|
+
throw new TypeError(
|
|
258
|
+
`googleDrive: pollIntervalMs must be an integer (got ${r.pollIntervalMs})`,
|
|
259
|
+
);
|
|
260
|
+
} else if (r.pollIntervalMs < 1_000) {
|
|
261
|
+
throw new RangeError(
|
|
262
|
+
`googleDrive: pollIntervalMs must be ≥1000ms; got ${r.pollIntervalMs}`,
|
|
263
|
+
);
|
|
264
|
+
} else if (r.pollIntervalMs > MAX_POLL_INTERVAL_MS) {
|
|
265
|
+
throw new RangeError(
|
|
266
|
+
`googleDrive: pollIntervalMs must be ≤${MAX_POLL_INTERVAL_MS} (24h); got ${r.pollIntervalMs}`,
|
|
267
|
+
);
|
|
268
|
+
} else {
|
|
269
|
+
pollIntervalMs = r.pollIntervalMs;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
let folderIds: readonly string[] = [];
|
|
273
|
+
if (r.folderIds !== undefined) {
|
|
274
|
+
if (!Array.isArray(r.folderIds)) {
|
|
275
|
+
throw new TypeError(
|
|
276
|
+
`googleDrive: folderIds must be an array of strings (got ${typeof r.folderIds})`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
const seen = new Set<string>();
|
|
280
|
+
const out: string[] = [];
|
|
281
|
+
for (const value of r.folderIds) {
|
|
282
|
+
if (typeof value !== "string") {
|
|
283
|
+
throw new TypeError(
|
|
284
|
+
`googleDrive: folderIds entries must be strings; found ${typeof value}`,
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
const trimmed = value.trim();
|
|
288
|
+
if (!FOLDER_ID_PATTERN.test(trimmed)) {
|
|
289
|
+
throw new RangeError(
|
|
290
|
+
`googleDrive: folderIds entry ${JSON.stringify(value)} is not a valid Drive folder id`,
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
// Dedupe per CLAUDE.md gotcha #49.
|
|
294
|
+
if (seen.has(trimmed)) continue;
|
|
295
|
+
seen.add(trimmed);
|
|
296
|
+
out.push(trimmed);
|
|
297
|
+
}
|
|
298
|
+
folderIds = Object.freeze(out);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return Object.freeze({
|
|
302
|
+
clientId,
|
|
303
|
+
[CLIENT_SECRET_FIELD]: clientSecret,
|
|
304
|
+
[REFRESH_TOKEN_FIELD]: refreshToken,
|
|
305
|
+
pollIntervalMs,
|
|
306
|
+
folderIds,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function requireNonEmptyString(value: unknown, key: string): string {
|
|
311
|
+
if (typeof value !== "string") {
|
|
312
|
+
throw new TypeError(
|
|
313
|
+
`googleDrive: ${key} must be a string (got ${typeof value})`,
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
const trimmed = value.trim();
|
|
317
|
+
if (trimmed.length === 0) {
|
|
318
|
+
throw new RangeError(`googleDrive: ${key} must be non-empty`);
|
|
319
|
+
}
|
|
320
|
+
return trimmed;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Decide whether a Drive `change` corresponds to an importable text file
|
|
325
|
+
* scoped to (optionally) the configured folder set.
|
|
326
|
+
*
|
|
327
|
+
* Returned object describes the disposition; callers update counters and
|
|
328
|
+
* dispatch fetches accordingly.
|
|
329
|
+
*/
|
|
330
|
+
type ChangeDecision =
|
|
331
|
+
| { kind: "import"; file: DriveFileMetadata; mode: "export" | "media"; exportMime?: string }
|
|
332
|
+
| { kind: "skip-removed" }
|
|
333
|
+
| { kind: "skip-trashed" }
|
|
334
|
+
| { kind: "skip-binary" }
|
|
335
|
+
| { kind: "skip-folder-scope" }
|
|
336
|
+
| { kind: "skip-too-large" };
|
|
337
|
+
|
|
338
|
+
function decideChange(
|
|
339
|
+
change: DriveChange,
|
|
340
|
+
folderScope: ReadonlySet<string>,
|
|
341
|
+
): ChangeDecision {
|
|
342
|
+
if (change.removed === true) return { kind: "skip-removed" };
|
|
343
|
+
const file = change.file;
|
|
344
|
+
if (!file || typeof file.id !== "string") return { kind: "skip-removed" };
|
|
345
|
+
if (file.trashed === true) return { kind: "skip-trashed" };
|
|
346
|
+
|
|
347
|
+
if (folderScope.size > 0) {
|
|
348
|
+
const parents = file.parents ?? [];
|
|
349
|
+
let intersects = false;
|
|
350
|
+
for (const parent of parents) {
|
|
351
|
+
if (folderScope.has(parent)) {
|
|
352
|
+
intersects = true;
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (!intersects) return { kind: "skip-folder-scope" };
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (typeof file.size === "number" && file.size > MAX_TEXT_BYTES) {
|
|
360
|
+
return { kind: "skip-too-large" };
|
|
361
|
+
}
|
|
362
|
+
if (typeof file.size === "string") {
|
|
363
|
+
const sizeNum = Number(file.size);
|
|
364
|
+
if (Number.isFinite(sizeNum) && sizeNum > MAX_TEXT_BYTES) {
|
|
365
|
+
return { kind: "skip-too-large" };
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
const mime = file.mimeType;
|
|
370
|
+
if (typeof mime !== "string" || mime.length === 0) {
|
|
371
|
+
return { kind: "skip-binary" };
|
|
372
|
+
}
|
|
373
|
+
const exportMime = GOOGLE_NATIVE_EXPORT_MIME[mime];
|
|
374
|
+
if (typeof exportMime === "string") {
|
|
375
|
+
return { kind: "import", file, mode: "export", exportMime };
|
|
376
|
+
}
|
|
377
|
+
if (TEXT_MIME_ALLOWLIST.has(mime) || mime.startsWith("text/")) {
|
|
378
|
+
return { kind: "import", file, mode: "media" };
|
|
379
|
+
}
|
|
380
|
+
return { kind: "skip-binary" };
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Construct the connector. The `clientFactory` argument is the test hook —
|
|
385
|
+
* production callers omit it and the connector lazy-loads `googleapis`.
|
|
386
|
+
*/
|
|
387
|
+
export function createGoogleDriveConnector(
|
|
388
|
+
options: { clientFactory?: GoogleDriveClientFactory } = {},
|
|
389
|
+
): LiveConnector {
|
|
390
|
+
const clientFactory = options.clientFactory ?? defaultGoogleDriveClientFactory;
|
|
391
|
+
|
|
392
|
+
return {
|
|
393
|
+
id: GOOGLE_DRIVE_CONNECTOR_ID,
|
|
394
|
+
displayName: "Google Drive",
|
|
395
|
+
description:
|
|
396
|
+
"Imports text content (Google Docs/Sheets/Slides + plain text) from a user's Drive into Remnic.",
|
|
397
|
+
|
|
398
|
+
validateConfig(raw: unknown): ConnectorConfig {
|
|
399
|
+
// Cast to ConnectorConfig (Record<string, unknown>) per framework
|
|
400
|
+
// contract. The frozen object survives JSON round-trips through the
|
|
401
|
+
// state store.
|
|
402
|
+
return validateGoogleDriveConfig(raw) as unknown as ConnectorConfig;
|
|
403
|
+
},
|
|
404
|
+
|
|
405
|
+
async syncIncremental(args: SyncIncrementalArgs): Promise<SyncIncrementalResult> {
|
|
406
|
+
// Re-validate on every pass: the framework persists raw config, and
|
|
407
|
+
// a JS caller could mutate it between passes.
|
|
408
|
+
const config = validateGoogleDriveConfig(args.config);
|
|
409
|
+
throwIfAborted(args.abortSignal);
|
|
410
|
+
|
|
411
|
+
const client = await clientFactory(config);
|
|
412
|
+
throwIfAborted(args.abortSignal);
|
|
413
|
+
|
|
414
|
+
// Cursor bootstrap. On the very first pass (cursor=null) we ask Drive
|
|
415
|
+
// for a page token but DO NOT consume any changes — this aligns with
|
|
416
|
+
// the documented Drive recipe and keeps "first install" from
|
|
417
|
+
// re-importing the user's entire history. Subsequent passes consume
|
|
418
|
+
// changes from the persisted token.
|
|
419
|
+
let pageToken: string;
|
|
420
|
+
const isFirstSync = args.cursor === null;
|
|
421
|
+
if (isFirstSync) {
|
|
422
|
+
const seed = await client.getStartPageToken();
|
|
423
|
+
if (typeof seed?.startPageToken !== "string" || seed.startPageToken.length === 0) {
|
|
424
|
+
throw new Error("googleDrive: drive.changes.getStartPageToken returned an empty token");
|
|
425
|
+
}
|
|
426
|
+
return {
|
|
427
|
+
newDocs: [],
|
|
428
|
+
nextCursor: makeCursor(seed.startPageToken),
|
|
429
|
+
};
|
|
430
|
+
} else if (args.cursor.kind !== GOOGLE_DRIVE_CURSOR_KIND) {
|
|
431
|
+
throw new Error(
|
|
432
|
+
`googleDrive: unexpected cursor kind ${JSON.stringify(args.cursor.kind)}; expected ${GOOGLE_DRIVE_CURSOR_KIND}`,
|
|
433
|
+
);
|
|
434
|
+
} else {
|
|
435
|
+
pageToken = args.cursor.value;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const folderScope = new Set(config.folderIds);
|
|
439
|
+
const fetchedAt = new Date().toISOString();
|
|
440
|
+
const newDocs: ConnectorDocument[] = [];
|
|
441
|
+
let skippedBinary = 0;
|
|
442
|
+
let skippedFolderScope = 0;
|
|
443
|
+
let skippedTooLarge = 0;
|
|
444
|
+
let consumed = 0;
|
|
445
|
+
let resolvedNextToken: string | undefined;
|
|
446
|
+
|
|
447
|
+
// Page through `changes.list` until we run out, hit the per-pass cap,
|
|
448
|
+
// or get aborted.
|
|
449
|
+
while (true) {
|
|
450
|
+
throwIfAborted(args.abortSignal);
|
|
451
|
+
const remaining = MAX_CHANGES_PER_PASS - consumed;
|
|
452
|
+
if (remaining <= 0) {
|
|
453
|
+
// Hit the cap — persist whatever we have. The next pass resumes
|
|
454
|
+
// from `pageToken`.
|
|
455
|
+
resolvedNextToken = pageToken;
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
const pageSize = Math.min(100, remaining);
|
|
459
|
+
const page = await client.listChanges({ pageToken, pageSize });
|
|
460
|
+
|
|
461
|
+
for (const change of page.changes) {
|
|
462
|
+
throwIfAborted(args.abortSignal);
|
|
463
|
+
consumed++;
|
|
464
|
+
const decision = decideChange(change, folderScope);
|
|
465
|
+
switch (decision.kind) {
|
|
466
|
+
case "import": {
|
|
467
|
+
const doc = await fetchDocument(client, decision, fetchedAt, args.abortSignal);
|
|
468
|
+
if (doc) newDocs.push(doc);
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
471
|
+
case "skip-binary":
|
|
472
|
+
skippedBinary++;
|
|
473
|
+
break;
|
|
474
|
+
case "skip-folder-scope":
|
|
475
|
+
skippedFolderScope++;
|
|
476
|
+
break;
|
|
477
|
+
case "skip-too-large":
|
|
478
|
+
skippedTooLarge++;
|
|
479
|
+
break;
|
|
480
|
+
// skip-removed / skip-trashed are intentionally not counted —
|
|
481
|
+
// they're upstream-driven and noisy.
|
|
482
|
+
default:
|
|
483
|
+
break;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
if (typeof page.newStartPageToken === "string" && page.newStartPageToken.length > 0) {
|
|
488
|
+
// End of stream — the new start token is what we persist for the
|
|
489
|
+
// next sync.
|
|
490
|
+
resolvedNextToken = page.newStartPageToken;
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
if (typeof page.nextPageToken === "string" && page.nextPageToken.length > 0) {
|
|
494
|
+
pageToken = page.nextPageToken;
|
|
495
|
+
continue;
|
|
496
|
+
}
|
|
497
|
+
// Neither continuation nor end token — defensive bail to avoid a
|
|
498
|
+
// tight loop on a malformed Drive response.
|
|
499
|
+
resolvedNextToken = pageToken;
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
const nextCursor: ConnectorCursor = makeCursor(
|
|
504
|
+
resolvedNextToken ?? pageToken,
|
|
505
|
+
);
|
|
506
|
+
|
|
507
|
+
const result: GoogleDriveSyncResult = {
|
|
508
|
+
newDocs,
|
|
509
|
+
nextCursor,
|
|
510
|
+
skippedBinary,
|
|
511
|
+
skippedFolderScope,
|
|
512
|
+
skippedTooLarge,
|
|
513
|
+
};
|
|
514
|
+
return result;
|
|
515
|
+
},
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
function makeCursor(value: string): ConnectorCursor {
|
|
520
|
+
return {
|
|
521
|
+
kind: GOOGLE_DRIVE_CURSOR_KIND,
|
|
522
|
+
value,
|
|
523
|
+
updatedAt: new Date().toISOString(),
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
async function fetchDocument(
|
|
528
|
+
client: GoogleDriveClient,
|
|
529
|
+
decision: Extract<ChangeDecision, { kind: "import" }>,
|
|
530
|
+
fetchedAt: string,
|
|
531
|
+
abortSignal: AbortSignal | undefined,
|
|
532
|
+
): Promise<ConnectorDocument | null> {
|
|
533
|
+
throwIfAborted(abortSignal);
|
|
534
|
+
const file = decision.file;
|
|
535
|
+
let body: string;
|
|
536
|
+
try {
|
|
537
|
+
body =
|
|
538
|
+
decision.mode === "export"
|
|
539
|
+
? await client.exportFile({
|
|
540
|
+
fileId: file.id,
|
|
541
|
+
mimeType: decision.exportMime ?? "text/plain",
|
|
542
|
+
})
|
|
543
|
+
: await client.getFileMedia({ fileId: file.id });
|
|
544
|
+
} catch (err) {
|
|
545
|
+
// Distinguish terminal per-file errors (skip-and-continue) from
|
|
546
|
+
// transient backend errors (re-throw so the caller can stop the pass
|
|
547
|
+
// and retry on the next poll WITHOUT advancing the cursor past the
|
|
548
|
+
// affected batch). Silently swallowing transient errors here would
|
|
549
|
+
// permanently lose imports during outages: the cursor would advance,
|
|
550
|
+
// and the file would never be retried unless its modifiedTime changed.
|
|
551
|
+
if (isTransientDriveError(err)) {
|
|
552
|
+
throw err;
|
|
553
|
+
}
|
|
554
|
+
// 404 / 403 etc.: log-and-skip is fine — the file is gone or we lack
|
|
555
|
+
// access, and there's nothing useful to retry. We deliberately don't
|
|
556
|
+
// log the file name (privacy).
|
|
557
|
+
return null;
|
|
558
|
+
}
|
|
559
|
+
if (typeof body !== "string" || body.length === 0) return null;
|
|
560
|
+
if (body.length > MAX_TEXT_BYTES) return null;
|
|
561
|
+
|
|
562
|
+
return {
|
|
563
|
+
id: file.id,
|
|
564
|
+
title: typeof file.name === "string" && file.name.length > 0 ? file.name : undefined,
|
|
565
|
+
content: body,
|
|
566
|
+
source: {
|
|
567
|
+
connector: GOOGLE_DRIVE_CONNECTOR_ID,
|
|
568
|
+
externalId: file.id,
|
|
569
|
+
externalRevision: typeof file.modifiedTime === "string" ? file.modifiedTime : undefined,
|
|
570
|
+
externalUrl: typeof file.webViewLink === "string" ? file.webViewLink : undefined,
|
|
571
|
+
fetchedAt,
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
function throwIfAborted(signal: AbortSignal | undefined): void {
|
|
577
|
+
if (signal?.aborted) {
|
|
578
|
+
const err = new Error("googleDrive: sync aborted");
|
|
579
|
+
err.name = "AbortError";
|
|
580
|
+
throw err;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Classify a per-file fetch error as "transient" (re-throw to caller so
|
|
586
|
+
* the sync stops without advancing the cursor and the next poll retries)
|
|
587
|
+
* vs. "terminal" (skip the file and continue — the file is gone, we lack
|
|
588
|
+
* access, or the request was malformed in a non-recoverable way).
|
|
589
|
+
*
|
|
590
|
+
* `googleapis` surfaces errors as `GaxiosError` instances. We do NOT
|
|
591
|
+
* `instanceof`-check that class because `googleapis` is an optional peer
|
|
592
|
+
* dependency (CLAUDE.md gotcha #57); we'd have to import its types and
|
|
593
|
+
* that would break the à-la-carte contract. Instead we read the
|
|
594
|
+
* documented duck-typed shape: `{ code, status, response: { status }, name }`.
|
|
595
|
+
*
|
|
596
|
+
* Delegates to the shared `isTransientHttpError` helper in
|
|
597
|
+
* `transient-errors.ts` (Thread 3 — Cursor PRRT_kwDORJXyws59sdH4). Drive
|
|
598
|
+
* attaches no connector-specific status property, so `statusProps` is empty.
|
|
599
|
+
*/
|
|
600
|
+
export function isTransientDriveError(err: unknown): boolean {
|
|
601
|
+
return isTransientHttpError(err);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Minimal structural types for the slice of `googleapis` we consume. We
|
|
606
|
+
* deliberately avoid `import type * from "googleapis"` because that would
|
|
607
|
+
* require `googleapis` to be installed at type-check time in `@remnic/core`,
|
|
608
|
+
* which violates the à-la-carte rule (CLAUDE.md gotcha #57). These types
|
|
609
|
+
* intentionally cover only the fields we read.
|
|
610
|
+
*/
|
|
611
|
+
interface GoogleApisRoot {
|
|
612
|
+
auth: {
|
|
613
|
+
OAuth2: new (opts: { clientId: string; clientSecret: string }) => GoogleOAuth2Client;
|
|
614
|
+
};
|
|
615
|
+
drive(opts: { version: "v3"; auth: GoogleOAuth2Client }): GoogleDriveSdkClient;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
interface GoogleOAuth2Client {
|
|
619
|
+
setCredentials(creds: { refresh_token: string }): void;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
interface GoogleDriveSdkClient {
|
|
623
|
+
changes: {
|
|
624
|
+
getStartPageToken(args: Record<string, never>): Promise<{ data: { startPageToken?: string | null } }>;
|
|
625
|
+
list(args: {
|
|
626
|
+
pageToken: string;
|
|
627
|
+
pageSize: number;
|
|
628
|
+
fields: string;
|
|
629
|
+
spaces: string;
|
|
630
|
+
includeRemoved: boolean;
|
|
631
|
+
}): Promise<{
|
|
632
|
+
data: {
|
|
633
|
+
changes?: DriveChange[] | null;
|
|
634
|
+
newStartPageToken?: string | null;
|
|
635
|
+
nextPageToken?: string | null;
|
|
636
|
+
};
|
|
637
|
+
}>;
|
|
638
|
+
};
|
|
639
|
+
files: {
|
|
640
|
+
export(
|
|
641
|
+
params: { fileId: string; mimeType: string },
|
|
642
|
+
opts: { responseType: "text" },
|
|
643
|
+
): Promise<{ data: unknown }>;
|
|
644
|
+
get(
|
|
645
|
+
params: { fileId: string; alt: "media" },
|
|
646
|
+
opts: { responseType: "text" },
|
|
647
|
+
): Promise<{ data: unknown }>;
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* Production client factory. Lazy-loads `googleapis` via a computed-specifier
|
|
653
|
+
* dynamic import so bundlers never statically resolve it (CLAUDE.md gotcha
|
|
654
|
+
* #57). Surfaces a precise install hint on miss.
|
|
655
|
+
*
|
|
656
|
+
* Exported only for the `index.ts` barrel; consumers that already inject a
|
|
657
|
+
* test factory don't need to touch this.
|
|
658
|
+
*/
|
|
659
|
+
export const defaultGoogleDriveClientFactory: GoogleDriveClientFactory = async (
|
|
660
|
+
config,
|
|
661
|
+
) => {
|
|
662
|
+
// Computed specifier. DO NOT replace with a string literal — bundlers
|
|
663
|
+
// will eagerly resolve `import("googleapis")` and break à-la-carte.
|
|
664
|
+
// We deliberately do not reference `typeof import("googleapis")` because
|
|
665
|
+
// `@remnic/core` does not (and must not) declare `googleapis` as a hard
|
|
666
|
+
// dependency or devDependency — its types would not be installed in the
|
|
667
|
+
// base layout and `tsc --noEmit` would fail.
|
|
668
|
+
const specifier = "google" + "apis";
|
|
669
|
+
let mod: { google: GoogleApisRoot };
|
|
670
|
+
try {
|
|
671
|
+
mod = (await import(/* @vite-ignore */ specifier)) as { google: GoogleApisRoot };
|
|
672
|
+
} catch (err) {
|
|
673
|
+
throw new Error(
|
|
674
|
+
"googleDrive: optional peer dependency `googleapis` is not installed. " +
|
|
675
|
+
"Run `npm install googleapis` (or `pnpm add googleapis`) in the host package " +
|
|
676
|
+
"to enable the Google Drive connector. " +
|
|
677
|
+
`(underlying: ${(err as Error).message})`,
|
|
678
|
+
);
|
|
679
|
+
}
|
|
680
|
+
const { google } = mod;
|
|
681
|
+
const oauth = new google.auth.OAuth2({
|
|
682
|
+
clientId: config.clientId,
|
|
683
|
+
[CLIENT_SECRET_FIELD]: config[CLIENT_SECRET_FIELD],
|
|
684
|
+
});
|
|
685
|
+
oauth.setCredentials({ refresh_token: config[REFRESH_TOKEN_FIELD] });
|
|
686
|
+
const drive = google.drive({ version: "v3", auth: oauth });
|
|
687
|
+
|
|
688
|
+
return {
|
|
689
|
+
async getStartPageToken() {
|
|
690
|
+
const res = await drive.changes.getStartPageToken({});
|
|
691
|
+
return { startPageToken: String(res.data.startPageToken ?? "") };
|
|
692
|
+
},
|
|
693
|
+
async listChanges({ pageToken, pageSize }) {
|
|
694
|
+
const res = await drive.changes.list({
|
|
695
|
+
pageToken,
|
|
696
|
+
pageSize,
|
|
697
|
+
fields:
|
|
698
|
+
"newStartPageToken, nextPageToken, changes(removed, fileId, file(id, name, mimeType, modifiedTime, trashed, parents, webViewLink, size))",
|
|
699
|
+
spaces: "drive",
|
|
700
|
+
includeRemoved: true,
|
|
701
|
+
});
|
|
702
|
+
const data = res.data ?? {};
|
|
703
|
+
return {
|
|
704
|
+
changes: (data.changes ?? []) as DriveChange[],
|
|
705
|
+
newStartPageToken: data.newStartPageToken ?? undefined,
|
|
706
|
+
nextPageToken: data.nextPageToken ?? undefined,
|
|
707
|
+
};
|
|
708
|
+
},
|
|
709
|
+
async exportFile({ fileId, mimeType }) {
|
|
710
|
+
const res = await drive.files.export(
|
|
711
|
+
{ fileId, mimeType },
|
|
712
|
+
{ responseType: "text" as const },
|
|
713
|
+
);
|
|
714
|
+
return typeof res.data === "string" ? res.data : String(res.data ?? "");
|
|
715
|
+
},
|
|
716
|
+
async getFileMedia({ fileId }) {
|
|
717
|
+
const res = await drive.files.get(
|
|
718
|
+
{ fileId, alt: "media" },
|
|
719
|
+
{ responseType: "text" as const },
|
|
720
|
+
);
|
|
721
|
+
return typeof res.data === "string" ? res.data : String(res.data ?? "");
|
|
722
|
+
},
|
|
723
|
+
};
|
|
724
|
+
};
|